Unity 6.3
0 онлайн 17 гостей 3 в системе
Вход

Пример обернутого диффузного поверхностного шейдера во встроенном Render Pipeline

В следующем примере показано Wrapped Diffuse, модификация Диффузная освещения, где освещение “обворачивает” края объектов. Это полезно для имитации эффектов подповерхностного рассеяния. Изменяется только раздел CGPROGRAM, так что опять же, окружающий код Shader опущен:

    ...ShaderLab code...
    CGPROGRAM
    #pragma surface surf WrapLambert

    half4 LightingWrapLambert (SurfaceOutput s, half3 lightDir, half atten) {
        half NdotL = dot (s.Normal, lightDir);
        half diff = NdotL * 0.5 + 0.5;
        half4 c;
        c.rgb = s.Albedo * _LightColor0.rgb * (diff * atten);
        c.a = s.Alpha;
        return c;
    }

    struct Input {
        float2 uv_MainTex;
    };
    
    sampler2D _MainTex;
        void surf (Input IN, inout SurfaceOutput o) {
        o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
    }
    ENDCG
    ...ShaderLab code...

Вот как это выглядит с текстурой и без текстуры, с одним направленным светом в Scene:

Шейдер, использующий обернутую диффузную текстуру. Шейдер без текстуры.