본문으로 바로가기

Unity 5 Standard Shader 구조 해석

category Technical Report/Unity Shader 2015. 10. 19. 00:09
반응형

 

 






Unity 5 Standard Shader 구조해석 시작. 특별한건 없고 텍스쳐 한장으로 Metallic과 Smoothness 그리고 Occlusion까지 처리한다. GI를 위한 Skybox의 Reflection 처리도 잘 되는걸 확인.


슬슬 미루어 두었던 작업 시작

사족을 좀 달면  Standard의 경우 Lambert와 같이 별도의 조명 설계도 output 선언도 Gi를 위한 선언도 필요없다. (PBS.cginc 파일 열어보면 구조체가 나온다) 이말인즉 standard shader 기반(PBS custom) 조명설계에선 이건 해야 한다 소리... 뭐 그건 천천히 다듬어 나가기로 하고...





Properties{

            _MainTex("Texture", 2D) = "white" {}
            _BumpMap("Bump", 2D) = "bump" {}
            _SpecTex("Specular Map (R)", 2D) = "white" {}
           
           _SmoothnessIntensity("Smoothness Intensity(R)", Range(0,1)) = 0
           _MetallicIntensity("Metallic Intensity(G)", Range(0,1)) = 0
           _OcclusionIntensity("Occlusion Intensity(B)", Range(0,1)) = 0

                    }

        SubShader{

            Tags{ "RenderType" = "Opaque" }

            CGPROGRAM

            #pragma surface surf Standard
            #include "UnityCG.cginc"
            #include "UnityShaderVariables.cginc"
            #include "UnityStandardConfig.cginc"
            #include "UnityPBSLighting.cginc"
            #include "UnityStandardUtils.cginc"

           

            sampler2D _MainTex;
            sampler2D _BumpMap;
            sampler2D _SpecTex;
        

            fixed _MetallicIntensity;
            fixed _RoughnessIntensity;
            fixed _OcclusionIntensity;


                    

            struct Input {

                float2 uv_MainTex;
                float2 uv_BumpMap;

                    INTERNAL_DATA

            };
           
           
       
            void surf(Input IN, inout SurfaceOutputStandard o) {
           
            fixed3 c = tex2D(_MainTex, IN.uv_MainTex);
            fixed3 bm = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
            fixed3 spc = tex2D(_SpecTex, IN.uv_MainTex);

                o.Albedo = c.rgb;
                o.Normal = bm;
                o.Smoothness = spc.r * _RoughnessIntensity;
                o.Metallic = spc.g * _MetallicIntensity;
                o.Occlusion = spc.b * _OcclusionIntensity;
               
              
            }

            ENDCG

        }

        Fallback "Diffuse"

    }


반응형

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

Unity Built-in shader variables  (0) 2015.11.24
Unity shader Toggle 제어  (0) 2015.11.09
Unity 셰이더 Variants 최적화  (0) 2015.09.08
Unity Surface shader Lighting model  (0) 2015.08.05
external lightmap shader 2nd UV  (0) 2015.08.04