Unity shader學習之漸變紋理


漸變紋理,及使用紋理來存儲漫反射光照的結果,這種技術在游戲《軍團要塞2》中流行起來,它也是由Valve公司(提出半蘭伯特光照技術的公司)提出來的,他們使用這種技術來渲染游戲中具有插畫風格的角色。

如使用下圖作為漸變紋理:

轉載請注明出處:http://www.cnblogs.com/jietian331/p/7133212.html

shader如下:

 1 Shader "Custom/Ramp texture"
 2 {
 3     Properties
 4     {
 5         _RampTex("Ramp texture", 2D) = "white"
 6         _Gloss("Gloss", float) = 20
 7     }
 8 
 9     SubShader
10     {
11         Pass
12         {
13             Tags
14             {
15                 "LightMode" = "ForwardBase"
16             }
17 
18             CGPROGRAM
19             #pragma vertex vert
20             #pragma fragment frag
21 
22             #include "UnityCG.cginc"
23             #include "Lighting.cginc"
24 
25             struct v2f
26             {
27                 float4 pos : SV_POSITION;
28                 float4 worldPos : TEXCOORD0;
29                 float3 worldNormal : TEXCOORD1;
30             };
31 
32             v2f vert(appdata_base v)
33             {
34                 v2f o;
35                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
36                 o.worldPos = mul(unity_ObjectToWorld, v.vertex);
37                 o.worldNormal = normalize(UnityObjectToWorldNormal(v.normal));
38                 return o;
39             }
40 
41             sampler2D _RampTex;
42             float _Gloss;
43 
44             float4 frag(v2f i) : SV_TARGET
45             {
46                 float3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
47                 float3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));
48                 
49                 float halfLambert = dot(worldLightDir, i.worldNormal) * 0.5 + 0.5;
50                 float3 diff = _LightColor0.rgb * tex2D(_RampTex, float2(halfLambert, halfLambert));
51 
52                 float3 halfDir = normalize(worldLightDir + worldViewDir);
53                 float3 spec = _LightColor0.rgb * pow(saturate(dot(halfDir, i.worldNormal)), _Gloss);
54 
55                 float3 col = spec + diff + UNITY_LIGHTMODEL_AMBIENT.rgb;
56 
57                 return float4(col.rgb ,1);
58             }
59 
60             ENDCG
61         }
62     }
63 
64     fallback "Diffuse"
65 }
View Code

效果如下:

資源如下:

 http://files.cnblogs.com/files/jietian331/RampTexture.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM