Recorte primitivo

Os ClippingPrimitive comportamentos permitem o desempenho , e o corte de forma com a capacidade de planespherebox especificar de que lado da primitiva se pentear contra (dentro ou fora) quando usado com shaders MRTK.

gizmos primitivos de clipping

Nota

ClippingPrimitives utilizar instruções ClippingPrimitives dentro de shaders e desativar a capacidade da Unidade de emarestar renderizadores cortados. Tenha em mente estas implicações de desempenho ao utilizar primitivos de recortes.

ClippingPlane.cs, ClippingSphere.cs e pode ser usado para controlar ClippingBox.cs facilmente propriedades primitivas de clipping. Utilize estes componentes com os seguintes shaders para alavancar cenários de recortes.

  • Kit de ferramentas de realidade mista/padrão
  • Kit de Ferramentas de Realidade Mista/TextMeshPro
  • Kit de ferramentas de realidade mista/text3dshader

Exemplos

As cenas ClippingExamples e MaterialGallery demonstram o uso dos comportamentos, e podem ser encontradas em: MRTK/Exemplos/Demos/StandardShader/Scenes/

Utilização Avançada

Por defeito, apenas ClippingPrimitive um pode cortar um ClippingPrimitive de cada vez. Se o seu projeto necessitar de mais de um ClippingPrimitive para influenciar um ClippingPrimitive o código de amostra abaixo demonstra como o conseguir.

Nota

Ter um clip múltiplo ClippingPrimitives um ClippingPrimitives aumentará as instruções de shader de pixels e impactará o desempenho. Por favor, perfile estas alterações dentro do seu projeto.

Como ter dois ClippingPrimitives clipes diferentes um render. Por exemplo, ClippingSphere a e ao mesmo ClippingBox tempo:

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

Nota

A alteração acima incorrerá em tempo adicional de compilação de shader.

Como ter dois dos ClippingPrimitives mesmos clipes um render. Por exemplo dois ClippingBoxes ao mesmo tempo:

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

Por fim, adicione um ClippingBox componente de SecondClippingBox à sua cena e especifique o mesmo renderizador para ambas as caixas. O renderizador deve agora ser cortado por ambas as caixas simultaneamente.

Ver também