Primitiva oříznutí

ClippingPrimitiveChování umožňují provádět planespherebox oříznutí prvků, a s možností určit, která strana primitiva se má vystřihnout (uvnitř nebo vně) při použití s MRTK shadery.

gizma primitivních ořezů

Poznámka

ClippingPrimitives Využijte pokyny k ClippingPrimitives v rámci shaderů a zakažte schopnost Unity vykreslit oříznuté zobrazovací jednotky. Vezměte v úvahu tyto dopady na výkon při použití primitiv oříznutí.

ClippingPlane.cs, ClippingSphere.cs a ClippingBox.cs lze je použít k snadnému řízení vlastností primitivních prvků oříznutí. Použijte tyto komponenty s následujícími shadery k využití scénářů oříznutí.

  • Mixed reality Toolkit/standardní
  • Mixed reality Toolkit/TextMeshPro
  • Mixed reality Toolkit/Text3DShader

Příklady

ClippingExamples a MaterialGallery scény ukazují použití chování a lze je najít v: MRTK/příklady/ukázky/ukázky/StandardShader/scény/

Rozšířené použití

Ve výchozím nastavení ClippingPrimitive může modul pro ClippingPrimitive v jednom okamžiku oříznout pouze jeden. Pokud váš projekt vyžaduje více než jeden ClippingPrimitive pro ovlivnění ClippingPrimitive kódu, ukázka níže ukazuje, jak toho dosáhnout.

Poznámka

Pokud má více ClippingPrimitives klipů ClippingPrimitives více klipartů, bude zvýšen návod na pixel shader a bude mít vliv na výkon. Tyto změny prosím profilujte v rámci projektu.

Jak mít vykreslení dvou různých ClippingPrimitives klipů. Například ClippingSphere a a ClippingBox ve stejnou dobu:

// Within MRTK/Core/StandardAssets/Shaders/MixedRealityStandard.shader (or another MRTK shader) change:

#pragma multi_compile _ _CLIPPING_PLANE _CLIPPING_SPHERE _CLIPPING_BOX

// to:

#pragma multi_compile _ _CLIPPING_PLANE
#pragma multi_compile _ _CLIPPING_SPHERE
#pragma multi_compile _ _CLIPPING_BOX

Poznámka

Výše uvedená změna bude mít za následek další dobu kompilace shaderu.

Jak mít dva ze stejného ClippingPrimitives klipu pro vykreslení. Například dvě ClippingBoxes ve stejnou dobu:

// 1) Add the below MonoBehaviour to your project:

[ExecuteInEditMode]
public class SecondClippingBox : ClippingBox
{
    /// <inheritdoc />
    protected override string Keyword
    {
        get { return "_CLIPPING_BOX2"; }
    }

    /// <inheritdoc />
    protected override string ClippingSideProperty
    {
        get { return "_ClipBoxSide2"; }
    }

    /// <inheritdoc />
    protected override void Initialize()
    {
        base.Initialize();

        clipBoxSizeID = Shader.PropertyToID("_ClipBoxSize2");
        clipBoxInverseTransformID = Shader.PropertyToID("_ClipBoxInverseTransform2");
    }
}

// 2) Within MRTK/Core/StandardAssets/Shaders/MixedRealityStandard.shader (or another MRTK shader) add the following multi_compile pragma:

#pragma multi_compile _ _CLIPPING_BOX2

// 3) In the same shader change:

#if defined(_CLIPPING_PLANE) || defined(_CLIPPING_SPHERE) || defined(_CLIPPING_BOX)

// to:

#if defined(_CLIPPING_PLANE) || defined(_CLIPPING_SPHERE) || defined(_CLIPPING_BOX) || defined(_CLIPPING_BOX2)

// 4) In the same shader add the following shader variables:

#if defined(_CLIPPING_BOX2)
    fixed _ClipBoxSide2;
    float4 _ClipBoxSize2;
    float4x4 _ClipBoxInverseTransform2;
#endif

// 5) In the same shader change:

#if defined(_CLIPPING_BOX)
    primitiveDistance = min(primitiveDistance, PointVsBox(i.worldPosition.xyz, _ClipBoxSize.xyz, _ClipBoxInverseTransform) * _ClipBoxSide);
#endif

// to:

#if defined(_CLIPPING_BOX)
    primitiveDistance = min(primitiveDistance, PointVsBox(i.worldPosition.xyz, _ClipBoxSize.xyz, _ClipBoxInverseTransform) * _ClipBoxSide);
#endif
#if defined(_CLIPPING_BOX2)
    primitiveDistance = min(primitiveDistance, PointVsBox(i.worldPosition.xyz, _ClipBoxSize2.xyz, _ClipBoxInverseTransform2) * _ClipBoxSide2);
#endif

Nakonec přidejte ClippingBox komponentu a SecondClippingBox do scény a pro obě pole zadejte stejný zobrazovací jednotku. Vykreslovací modul by nyní měl být současně oříznut oběma poli.

Viz také