ClippingPrimitive

ClippingPrimitiveПоведения позволяют выполнять plane sphere box обрезание, и фигурную обрезку с возможностью указать, какая сторона примитива будет обрезаться (внутри или снаружи) при использовании с шейдерами мртк.

примитив обрезки приспособлений

Примечание

ClippingPrimitives Использование инструкций Clip/Discard в шейдере и отключение возможности Unity для пакетной обрезки модулей подготовки отчетов. При использовании примитивов обрезки учитывайте эти последствия.

ClippingPlane.cs, ClippingSphere.cs и ClippingBox.cs можно использовать для простого управления обрезкими свойств примитивов. Используйте эти компоненты со следующими шейдерами, чтобы использовать сценарии обрезки.

  • смешанная реальность набор средств/Standard
  • смешанная реальность набор средств/текстмешпро
  • смешанная реальность набор средств/Text3DShader

Примеры

Сцены клиппинжексамплес и материалгаллери демонстрируют использование ClippingPrimitive поведения, и их можно найти по адресу: Мртк/examples/демонстрации/стандардшадер/сцены/

Расширенные возможности использования

По умолчанию только один из них ClippingPrimitive может обрезать модуль подготовки отчетов за раз. Если в проекте требуется больше одного, ClippingPrimitive чтобы зависеть от модуля подготовки отчетов, в примере кода ниже показано, как добиться этого.

Примечание

Наличие нескольких ClippingPrimitives клипов, обрабатывающих модуль подготовки отчетов, увеличит количество инструкций шейдера пикселей и повлияет на производительность. Проведите профилирование этих изменений в проекте.

Как иметь два ClippingPrimitives отрисовки для отрисовки. Например, ClippingSphere а и в ClippingBox то же время:

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

Примечание

Приведенное выше изменение повлечет за собой дополнительное время компиляции шейдера.

Способ, с помощью которого ClippingPrimitives отрисовывается один из двух клипов. Например, два ClippingBoxes в то же время:

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

Наконец, добавьте ClippingBox компонент и секондклиппингбокс в сцену и укажите тот же модуль отрисовки для обоих полей. Теперь модуль подготовки отчетов должен быть обрезан обоими полями одновременно.

См. также раздел