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
, sphere
ve box
şekil kırpmasına olanak sağlar.
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.cs
ve 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.