Kırpma temeli

Davranışlar, MRTK gölgelendiricileri ile birlikte kullanılırken ilkelin hangi tarafının kırpılır (iç veya dış) belirterek performans , ve şekil kırpmasına ClippingPrimitiveplane olanak spherebox sağlar.

ilkel kırpma gizmos

Not

ClippingPrimitivesClippingPrimitives yönergelerini kullanma ve Unity'nin kırpılmış işleyicileri toplu olarak işleme özelliğini devre dışı bırakma. Kırpma temellerini kullanarak bu performans etkilerini göz zamanlarında göz atabilirsiniz.

ClippingPlane.cs, ClippingSphere.cs ve , kırpma temel özelliklerini kolayca kontrol etmek için ClippingBox.cs kullanılabilir. Kırpma senaryolarını kullanmak için aşağıdaki gölgelendiricilerle bu bileşenleri kullanın.

  • Karma Gerçeklik Araç Seti/Standart
  • Karma Gerçeklik Araç Seti/TextMeshPro
  • Karma Gerçeklik Araç Seti/Text3DShader

Örnekler

ClippingExamples ve MaterialGallery sahneleri, davranışların kullanımını gösterir ve şu şekilde bulunabilir: MRTK/Examples/Demos/StandardShader/Scenes/

Gelişmiş Kullanım

Varsayılan olarak, aynı ClippingPrimitive anda yalnızca ClippingPrimitive kırpılır. Projenizin bir işleyiciyi etkilemek için birden fazla ihtiyacı varsa aşağıdaki örnek ClippingPrimitive kod bunu nasıl başaracaklarını gösteriyor. ClippingPrimitive

Not

Bir ClippingPrimitives işleyicinin ClippingPrimitives olması piksel gölgelendiricisi yönergelerini artırır ve performansı etkiler. Lütfen projenizin içinde bu değişikliklerin profilini oluşturun.

İşleme için iki farklı ClippingPrimitives klibin nasıl olduğu. Örneğin, ClippingSphere aynı ClippingBox anda bir ve:

// 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

Not

Yukarıdaki değişiklik ek gölgelendirici derleme süresine neden olur.

İşleme için aynı klibin ClippingPrimitives iki tane olması. Örneğin aynı ClippingBoxes anda iki tane:

// 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

Son olarak, ClippingBox sahnenize ve SecondClippingBox bileşeni ekleyin ve her iki kutu için de aynı işleyiciyi belirtin. İşleyici artık her iki kutu tarafından aynı anda kırpılmış olması gerekir.

Ayrıca bkz.