纳金网

标题: 头发调光及金属表面效果的Shader [打印本页]

作者: 狂风大尉    时间: 2014-2-27 01:28
标题: 头发调光及金属表面效果的Shader
这个shader可以用来做头发调光及金属表面效果,下面是代码:
这个shader可以用来做头发调光及金属表面效果,下面是代码:复制内容到剪贴板代码:

Shader "Bumped Anisotropic Specular" {
      Properties {
          _Color ("Main Color", Color) = (1,1,1,1)
          _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "white" {}
          _SpecularTex ("Specular (R) Gloss (G) Anisotropic Mask (B)", 2D) = "gray" {}
          _BumpMap ("Normal (Normal)", 2D) = "bump" {}
          _AnisoTex ("Anisotropic Direction (RGB)", 2D) = "bump" {}
          _AnisoOffset ("Anisotropic Highlight Offset", Range(-1,1)) = -0.2
          _Cutoff ("Alpha Cut-Off Threshold", Range(0,1)) = 0.5
      }

      SubShader{
          Tags { "RenderType" = "Opaque" }
     
          CGPROGRAM
         
              s***ct SurfaceOutputAniso {
                  fixed3 Albedo;
                  fixed3 Normal;
                  fixed4 AnisoDir;
                  fixed3 Emission;
                  half Specular;
                  fixed Gloss;
                  fixed Alpha;
              };

              float _AnisoOffset, _Cutoff;
              inline fixed4 LightingAniso (SurfaceOutputAniso s, fixed3 lightDir, fixed3 viewDir, fixed atten)
              {
                 fixed3 h = normalize(normalize(lightDir) + normalize(viewDir));
                 float NdotL = saturate(dot(s.Normal, lightDir));

                 fixed HdotA = dot(normalize(s.Normal + s.AnisoDir.rgb), h);
                 float aniso = max(0, sin(radians((HdotA + _AnisoOffset) * 180)));

                 float spec = saturate(dot(s.Normal, h));
                 spec = saturate(pow(lerp(spec, aniso, s.AnisoDir.a), s.Gloss * 128) * s.Specular);

                 fixed4 c;
                 c.rgb = ((s.Albedo * _LightColor0.rgb * NdotL) + (_LightColor0.rgb * spec)) * (atten * 2);
                 c.a = 1;
                 clip(s.Alpha - _Cutoff);
                 return c;
              }

              #pragma surface surf Aniso
              #pragma target 3.0
            
              s***ct Input
              {
                  float2 uv_MainTex;
                  float2 uv_AnisoTex;
              };
            
              sampler2D _MainTex, _SpecularTex, _BumpMap, _AnisoTex;
                 
              void surf (Input IN, inout SurfaceOutputAniso o)
              {
                 fixed4 albedo = tex2D(_MainTex, IN.uv_MainTex);
                  o.Albedo = albedo.rgb;
                  o.Alpha = albedo.a;
                  o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
                  fixed3 spec = tex2D(_SpecularTex, IN.uv_MainTex).rgb;
                  o.Specular = spec.r;
                  o.Gloss = spec.g;
                  o.AnisoDir = fixed4(tex2D(_AnisoTex, IN.uv_AnisoTex).rgb, spec.b);
              }
          ENDCG
      }
      FallBack "Transparent/Cutout/VertexLit"
}

作者: 川流不息    时间: 2014-3-3 12:45
感谢楼主的无私分享
作者: gxf5168    时间: 2014-5-23 11:49
效果真的不错,感谢分享
作者: Kadina    时间: 2014-7-2 08:10
Thank you for this share!
作者: smg169    时间: 2014-7-20 00:13
感谢分享,学习下看看
作者: bitgold    时间: 2014-8-1 13:33
头发调光是什么效果




欢迎光临 纳金网 (http://course.narkii.com/club/) Powered by Discuz! X2.5