클리핑 기본 형식 - MRTK2

이 동작을 ClippingPrimitive 사용하면 MRTK 셰이더와 함께 사용할 때(내부 또는 외부)에 대해 클립할 기본 형식의 측면을 지정하는 기능을 사용하여 성능이 좋은 plane, spherebox 셰이프 클리핑을 수행할 수 있습니다.

기본 클리핑 기즈모

참고

ClippingPrimitives 셰이더 내에서 클립/삭제 지침을 활용하고 잘린 렌더러를 일괄 처리하는 Unity의 기능을 사용하지 않도록 설정합니다. 클리핑 기본 형식을 사용할 때 이러한 성능 영향을 염두에 두세요.

ClippingPlane.cs, ClippingSphere.cs및 는 ClippingBox.cs 클리핑 기본 속성을 쉽게 제어하는 데 사용할 수 있습니다. 다음 셰이더와 함께 이러한 구성 요소를 사용하여 클리핑 시나리오를 활용합니다.

  • Mixed Reality 도구 키트/표준
  • Mixed Reality 도구 키트/TextMeshPro
  • Mixed Reality 도구 키트/Text3DShader

예제

ClippingExamplesMaterialGallery 장면은 동작의 ClippingPrimitive 사용을 보여 줍니다. MRTK/Examples/Demos/StandardShader/Scenes/에서 찾을 수 있습니다.

고급 사용 방법

기본적으로 한 번에 하나의 ClippingPrimitive렌더러 만 클립할 수 있습니다. 프로젝트에 렌더러에 영향을 주는 데 둘 ClippingPrimitive 이상이 필요한 경우 아래 샘플 코드는 이를 달성하는 방법을 보여 줍니다.

참고

렌더러에 여러 ClippingPrimitives 클립이 있으면 픽셀 셰이더 명령이 증가하고 성능에 영향을 줍니다. 이러한 변경 내용을 프로젝트 내에서 프로파일링하세요.

두 개의 서로 다른 ClippingPrimitives 클립을 렌더링하는 방법입니다. 예를 들어 및 ClippingSphereClippingBox 는 동시에 다음과 같습니다.

// 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 및 SecondClippingBox 구성 요소를 추가하고 두 상자에 대해 동일한 렌더러를 지정합니다. 이제 렌더러를 두 상자에서 동시에 잘라 내야 합니다.

참고 항목