本文共 2483 字,大约阅读时间需要 8 分钟。
Shader "Unlit/PixelSpecular"{ Properties { _MainTex ("Texture", 2D) = "white" {} _DiffuseColor ("DiffuseColor", Color) = (1.0, 1.0, 1.0, 1.0) _SpecularColor("SpecularColor",Color )=(1,1,1,1) _SpecularGloss("gloss",Range(5,30)) = 5 } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #include "UnityCG.cginc" #include "Lighting.cginc" struct a2v { float4 vertex : POSITION; float2 uv : TEXCOORD0; float3 normal:NORMAL; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; float3 worldNormal:TEXCOORD1; float3 worldPos :TEXCOORD2; }; sampler2D _MainTex; float4 _MainTex_ST; float4 _DiffuseColor; float4 _SpecularColor; float _SpecularGloss; v2f vert (a2v v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex ); o.uv = TRANSFORM_TEX(v.uv,_MainTex); o.worldNormal = UnityObjectToWorldNormal(v.normal); o.worldPos = mul(unity_ObjectToWorld,v.vertex); return o; } fixed4 frag (v2f i) : SV_Target { // 1.环境光 float3 ambient = UNITY_LIGHTMODEL_AMBIENT; float3 N = normalize(i.worldNormal); float3 L = normalize(_WorldSpaceLightPos0); // 2.漫反射颜色 float3 diffuseColor = _LightColor0.rgb * _DiffuseColor.rgb * saturate(dot(N,L)); // 反射方向 float3 reflectDic = normalize(reflect(-L,N)); // 观察方向 float3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz); // 3.高光颜色 float3 specularColor = _LightColor0.rgb * _SpecularColor * pow(saturate(dot(reflectDic,viewDir)),_SpecularGloss); // sample the texture fixed4 col = tex2D(_MainTex, i.uv)*float4((ambient+diffuseColor+specularColor),1); return col; } ENDCG } }}
转载地址:http://ydkii.baihongyu.com/