개발자 노트: 눈 쉐이더

결과물(전/후)


Unity Standard shader를 활용하기 위해 surface shader로 작업했습니다.

            void surf(Input IN, inout SurfaceOutputStandard o)
            {
                fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
                //o.Normal = float3(0, 1, 0);
    #ifdef _NORMALMAP
                o.Normal = UnpackScaleNormal(tex2D(_BumpMap, IN.uv_MainTex), _BumpScale);
    #endif
                float snowDensity = 0.5 * WorldNormalVector(IN, o.Normal).y;
                o.Albedo = c.rgb * (1 - snowDensity) + float3(1, 1, 1) * snowDensity;
                //o.Albedo = snowDensity * float3(1, 1, 1);
                //o.Albedo = WorldNormalVector(IN, o.Normal).y * float3(1, 1, 1);
                //o.Albedo = WorldNormalVector(IN, o.Normal);
                // Metallic and smoothness come from slider variables
                o.Metallic = _Metallic;
                o.Smoothness = _Glossiness;
                o.Alpha = c.a;
            }

법선벡터값을 찾아서 얼마나 위를 보고 있는 지 체크하고 눈색깔이랑 Lerp하는 간단한 코드입니다.

1개의 좋아요