Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die ClippingPrimitive Verhaltensweisen ermöglichen leistungsfähiges plane, sphere- und box -Shape-Clipping mit der Möglichkeit, anzugeben, gegen welche Seite des Grundtyps (innen oder außen) bei Verwendung mit Grafiktools-Shadern abgeschnitten werden soll.
Hinweis
ClippingPrimitiveverwendet Clip/Discard-Anweisungen in Shadern und deaktiviert unitys Fähigkeit, beschneidte Renderer in Batches zu batchen. Berücksichtigen Sie diese Auswirkungen auf die Leistung bei der Verwendung von Beschneidungsgrundtypen.
ClippingPlane.cs, ClippingSphere.cs und ClippingBox.cs können verwendet werden, um beschneidende Grundeigenschaften einfach zu steuern. Verwenden Sie diese Komponenten mit den folgenden Shadern, um Clippingszenarien zu verwenden.
- Grafiktools/Standard
- Grafiktools/Text Mesh Pro
- Grafiktools/Drahtmodell
- Grafiktools/Drahtmodell
- Grafiktools/Nicht-Canvas/Backplate
- Grafiktools/Nicht-Canvas/Frontplatte
- Grafiktools/Nicht-Canvas/Leuchteffekt
- Grafiktools/Nicht-Canvas/Quad Glow
- Grafiktools/Nicht-Canvas/Abgeschrägt
Erweiterte Nutzung
Standardmäßig kann jeweils nur einer ClippingPrimitive einen Renderer ausschneiden. Wenn Ihr Projekt mehr als eins ClippingPrimitive benötigt, um einen Renderer zu beeinflussen, zeigt der folgende Beispielcode, wie dies erreicht werden kann.
Hinweis
Wenn mehrere ClippingPrimitives einen Renderer ausschneiden, erhöht sich die Pixelshaderanweisungen und wirkt sich auf die Leistung aus. Profilieren Sie diese Änderungen in Ihrem Projekt.
Hier erfahren Sie, wie zwei verschiedene s einen Renderausschnitt ausschneiden.How to have two different ClippingPrimitives clip a render. Beispiel: und ClippingSphereClippingBox gleichzeitig:
// Within GraphicsToolsStandard.shader (or another Graphics Tools shader that supports clipping primitives) change:
#pragma multi_compile_local _ _CLIPPING_PLANE _CLIPPING_SPHERE _CLIPPING_BOX
// to:
#pragma multi_compile_local _ _CLIPPING_PLANE
#pragma multi_compile_local _ _CLIPPING_SPHERE
#pragma multi_compile_local _ _CLIPPING_BOX
Hinweis
Die obige Änderung führt zu zusätzlicher Shaderkompilierungszeit.
Hier erfahren Sie, wie zwei der gleichen ClippingPrimitiveein Rendern ausschneiden. Beispiel: Zwei ClippingBoxesgleichzeitig:
// 1) Add the below MonoBehaviour to your project:
using UnityEngine;
using Microsoft.MixedReality.GraphicsTools;
[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();
clipBoxInverseTransformID = Shader.PropertyToID("_ClipBoxInverseTransform2");
}
}
// 2) Within GraphicsToolsStandard.shader add the following multi_compile pragma:
#pragma multi_compile_local _ _CLIPPING_BOX2
// 3) In GraphicsToolsStandardInput.hlsl add the following shader variables:
#if defined(_CLIPPING_BOX2)
half _ClipBoxSide2;
float4x4 _ClipBoxInverseTransform2;
#endif
// 4) In GraphicsToolsStandardProgram.hlsl 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)
// 5) In the same shader change:
#if defined(_CLIPPING_BOX)
primitiveDistance = min(primitiveDistance, GTPointVsBox(input.worldPosition.xyz, _ClipBoxInverseTransform) * _ClipBoxSide);
#endif
// to:
#if defined(_CLIPPING_BOX)
primitiveDistance = min(primitiveDistance, GTPointVsBox(input.worldPosition.xyz, _ClipBoxInverseTransform) * _ClipBoxSide);
#endif
#if defined(_CLIPPING_BOX2)
primitiveDistance = min(primitiveDistance, GTPointVsBox(input.worldPosition.xyz, _ClipBoxInverseTransform2) * _ClipBoxSide2);
#endif
Fügen Sie ihrer Szene schließlich eine ClippingBox - und SecondClippingBox -Komponente hinzu, und geben Sie für beide Felder denselben Renderer an. Der Renderer sollte jetzt von beiden Feldern gleichzeitig abgeschnitten werden.