Kırpma temel öğesi — MRTK2

Davranışlar ClippingPrimitive , MRTK gölgelendiricileriyle kullanıldığında ilkelin hangi tarafından kırpılacağını (iç veya dış) belirtme özelliğine sahip, yüksek performanslı plane, sphereve box şekil kırpmasına olanak sağlar.

ilkel kırpma gizmos

Not

ClippingPrimitives gölgelendiriciler içinde kırpma/atma yönergelerini kullanın ve Unity'nin kırpılan işleyicileri toplu olarak işleme özelliğini devre dışı bırakın. Kırpma temel öğelerini kullanırken bu performans etkilerini göz önünde bulundurun.

ClippingPlane.cs, ClippingSphere.csve ClippingBox.cs kırpma temel özelliklerini kolayca denetlemek için kullanılabilir. Kırpma senaryolarından yararlanmak için bu bileşenleri aşağıdaki gölgelendiricilerle 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 ClippingPrimitive kullanımını gösterir ve şu adreste bulunabilir: MRTK/Examples/Demos/StandardShader/Scenes/

Gelişmiş Kullanım

Varsayılan olarak bir işleyiciyi aynı anda yalnızca ClippingPrimitive bir kişi kırpabilir. Projenizin işleyiciyi etkilemesi için birden ClippingPrimitive fazla gerekiyorsa, aşağıdaki örnek kod bunu nasıl başarmak gerektiğini gösterir.

Not

Bir işleyicinin birden çok ClippingPrimitives küçük resmi olması piksel gölgelendiricisi yönergelerini artırır ve performansı etkiler. Lütfen bu değişikliklerin profilini projenizde belirleyin.

bir işleme için iki farklı ClippingPrimitives klibin nasıl olması gerekir? Örneğin, bir ClippingSphere ve ClippingBox aynı anda:

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

Aynı ClippingPrimitives kliplerden ikisinin bir işlemeye sahip olması. Örneğin aynı anda iki ClippingBoxes 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, sahnenize bir ClippingBox ve SecondClippingBox bileşeni ekleyin ve her iki kutu için de aynı işleyiciyi belirtin. Oluşturucu artık aynı anda her iki kutu tarafından kırpılmalıdır.

Ayrıca bkz.