Version: Unity 6.0 (6000.0)
언어 : 한국어
빌트인 렌더 파이프라인의 메시 노멀 셰이더 예시
빌트인 렌더 파이프라인의 노멀 맵 텍스처링 셰이더 예시

빌트인 렌더 파이프라인의 반사 셰이더 예시

씬에서 스카이박스를 반사 소스로 사용하는 경우(조명 창 참조), 스카이박스 데이터를 포함하는 ‘기본’ 반사 프로브가 생성됩니다. 반사 프로브는 내부적으로는 큐브맵 텍스처입니다. 이를 살펴보기 위해 위의 월드-공간 노멀 셰이더를 확장해 보겠습니다.

이제는 코드가 좀 더 복잡해지기 시작했습니다. 물론 광원, 그림자, 반사, 그리고 조명 시스템의 나머지 요소와 함께 자동으로 동작하는 셰이더를 원한다면 표면 셰이더를 사용하는 편이 훨씬 쉽습니다. 이 예시는 조명 시스템의 일부를 ‘수동’ 방식으로 사용하는 방법을 보여주기 위한 것입니다.

Shader "Unlit/SkyReflection"
{
    SubShader
    {
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct v2f {
                half3 worldRefl : TEXCOORD0;
                float4 pos : SV_POSITION;
            };

            v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(vertex);
                // compute world space position of the vertex
                float3 worldPos = mul(_Object2World, vertex).xyz;
                // compute world space view direction
                float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));
                // world space normal
                float3 worldNormal = UnityObjectToWorldNormal(normal);
                // world space reflection vector
                o.worldRefl = reflect(-worldViewDir, worldNormal);
                return o;
            }
        
            fixed4 frag (v2f i) : SV_Target
            {
                // sample the default reflection cubemap, using the reflection vector
                half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.worldRefl);
                // decode cubemap data into actual color
                half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR);
                // output it!
                fixed4 c = 0;
                c.rgb = skyColor;
                return c;
            }
            ENDCG
        }
    }
}

위 예제는 빌트인 셰이더 첨부 파일의 여러 가지를 요소를 사용합니다.

  • 빌트인 셰이더 변수unity_SpecCube0 , unity_SpecCube0_HDR , Object2World , UNITY_MATRIX_MVP . unity_SpecCube0 는 사용 중인 반사 프로브의 데이터를 포함하고 있습니다.
  • UNITY_SAMPLE_TEXCUBE 는 큐브맵 샘플링을 위한 빌트인 매크로입니다. 대부분의 일반 큐브맵은 표준 HLSL 구문( samplerCUBEtexCUBE)을 사용하여 선언되고 사용됩니다. 그러나 Unity의 반사 프로브 큐브맵은 샘플러 슬롯을 절약하기 위해 특수한 방식으로 선언됩니다. 만약 이에 대해 잘 모른다 해도 걱정하지 마십시오. unity_SpecCube0 큐브맵을 사용하기 위해서는 UNITY_SAMPLE_TEXCUBE 매크로를 사용해야 한다는 점만 알면 됩니다.
  • UnityCG.cginc__의 UnityWorldSpaceViewDir__ 함수 및 DecodeHDR 함수. 후자는 반사 프로브 데이터에서 실제 컬러를 얻는 데 사용됩니다. Unity는 반사 프로브 큐브맵을 특수하게 인코딩된 방식으로 저장하기 때문입니다.
  • reflect 는 주어진 노멀 주변의 벡터 반사 계산하기 위한 빌트인 HLSL 함수입니다.
빌트인 렌더 파이프라인의 메시 노멀 셰이더 예시
빌트인 렌더 파이프라인의 노멀 맵 텍스처링 셰이더 예시