본문으로 바로가기
반응형



https://docs.unity3d.com/Manual/SL-Stencil.html




Ref

    Ref referenceValue

비교될 값(Comp가 always 가 아닌 경우) 그리고/또는 버퍼에 기록될 값(Pass, Fail, Zfail 중 하나가 대체할 예정일 경우)입니다. 0255 사이의 정수입니다.




ReadMask

    ReadMask readMask

0255 사이의 정수인 8비트 마스크이며 레퍼런스 값을 버퍼의 콘텐츠와 비교할 때 사용합니다(referenceValue & readMask) comparisonFunction (stencilBufferValue & readMask). 디폴트는 255 입니다.




WriteMask

    WriteMask writeMask

0255 사이의 정수인 8비트 마스크이며 버퍼에 작성할 때 사용합니다. 다른 작성 마스크와 마찬가지로 스텐실 마스크의 어느 비트가 작성의 영향을 받을지 지정한다는 점을 참조하십시오. 예를 들어, WriteMask 0은 아무 비트에도 영향을 주지 않으며 0은 작성되지 않습니다. 디폴트는 255 입니다.


Comp

    Comp comparisonFunction

이 함수는 레퍼런스 값을 버퍼의 현재 콘텐츠와 비교할 때 사용합니다. 디폴트는 always 입니다.


Pass

    Pass stencilOperation

스텐실 테스트(와 뎁스 테스트)를 통과한다면 버퍼의 콘텐츠를 어떻게 할 것인지 지정합니다. 디폴트는 keep 입니다.




Fail

    Fail stencilOperation

스텐실 테스트가 실패한다면 버퍼의 콘텐츠를 어떻게 할 것인지 지정합니다. 디폴트는 keep 입니다.



ZFail

    ZFail stencilOperation

스텐실 테스트를 통과했으나 뎁스 테스트에 실패한다면 버퍼의 콘텐츠를 어떻게 할 것인지 지정합니다. 디폴트는 keep 입니다.




Comp, Pass, Fail, ZFail은 Cull Front 가 지정되어 있지 않으면 전면 지오메트리에 적용되며 지정된 경우엔 후면 지오메트리에 적용됩니다. 또한 CompFront, PassFront, FailFront, ZFailFront(전면 방향 지오메트리), CompBack, PassBack, FailBack, ZFailBack(후면 지오메트리)을 정의하여 명시적으로 양면 스텐실 스테이트를 명시할 수 있습니다.




Shader "Test/Stencilbuffer"{
      
   Properties {
       _TintColor("TintColor", color) = (1,1,1,1)
      

       [Header(Stencil)]
        _Stencil ("Stencil ID [0-255]", int) = 0
        _ReadMask ("ReadMask [0-255]", int) = 255
        _WriteMask ("WriteMask [0-255]", int) = 255
       [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp ("Stencil Comparison", Float) = 6
       [Enum(UnityEngine.Rendering.StencilOp)] _StencilOp ("Stencil Pass", Float) = 0
       [Enum(UnityEngine.Rendering.StencilOp)] _StencilFail ("Stencil Fail", Float) = 0
       [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFail ("Stencil ZFail", Float) = 0

      }

      SubShader {     
       Tags { "RenderType" = "Opaque" }

       Stencil
         {
            Ref [_Stencil]
            ReadMask [_ReadMask]
            WriteMask [_WriteMask]
            Comp [_StencilComp]
            Pass [_StencilOp]
            Fail [_StencilFail]
            ZFail [_StencilZFail]
         }
      
       CGPROGRAM

        #pragma surface surf Lambert
    
        struct Input {
            fixed4 COLOR:COLOR;
        };

        fixed4 _TintColor;
      
       void surf (Input IN, inout SurfaceOutput o) {
            o.Albedo = _TintColor;
        }
        ENDCG
      }
      Fallback "Diffuse"
    }









반응형

'Technical Report > Unity Shader' 카테고리의 다른 글

Unity SimpleLit HLSL  (0) 2019.04.08
Unity Surface LightDir  (0) 2019.02.23
UV offset RGB divided Lightmap chromatic aberration fragment shader  (0) 2019.02.15
Fragment Lambert Lit AlphaBlend  (0) 2019.02.09
Fragment Lambert Lit  (0) 2019.02.09