1.Shader在什么情況下使用
Parallax Diffuse(視差漫反射)引入了視差(高度)貼圖的漫反射带射。使一個平面物體有凹凸效果通常使用法線貼圖咱圆,而視差(高度)圖也會有一些大型游戲廠商采用(據(jù)我所知基本上沒人用這個)盯孙。法線是通過貼圖采樣直接改變顏色明暗卦羡,而視差(高度)貼圖則通過移動UV頂點實現(xiàn)視差蹬癌。因為找不到素材,我也弄不出好看的效果圖虹茶。
2.Shader的價值(用的多不多)逝薪,Shader的難度
無用。僅供學習蝴罪。
3.代碼詳細注釋
Shader "Legacy Shaders/Parallax Diffuse" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_Parallax ("Height", Range (0.005, 0.08)) = 0.02
_MainTex ("Base (RGB)", 2D) = "white" {}
_BumpMap ("Normalmap", 2D) = "bump" {}
_ParallaxMap ("Heightmap (A)", 2D) = "black" {}
}
CGINCLUDE
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _ParallaxMap;
fixed4 _Color;
float _Parallax;
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
float3 viewDir;
};
void surf (Input IN, inout SurfaceOutput o) {
//采樣視差貼圖的w(a)通道
half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w;
//通過ParallaxOffset函數(shù)計算視差偏移程度
//ParallaxOffset函數(shù)內容如下
/*
// 計算視差凹凸貼圖的UV偏移
inline float2 ParallaxOffset( half h, half height, half3 viewDir )
{
//h為視差貼圖采樣的結果*高度后-高度/2
//這是Unity官方提供的一種性能高的視差貼圖算法董济,對于視差偏移度小的效果還不錯
//由于是在平面上移動UV點,對于視差偏移度過大的效果并不好
h = h * height - height/2.0;
float3 v = normalize(viewDir);
v.z += 0.42;
return h * (v.xy / v.z);
}
*/
float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir);
IN.uv_MainTex += offset;
IN.uv_BumpMap += offset;
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
SubShader {
Tags { "RenderType"="Opaque" }
LOD 500
CGPROGRAM
#pragma surface surf Lambert
#pragma target 3.0
ENDCG
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 500
CGPROGRAM
#pragma surface surf Lambert nodynlightmap
ENDCG
}
FallBack "Legacy Shaders/Bumped Diffuse"
}
4.Shader編寫思路要门,用到的知識點
ParallaxOffset方法(不重要可略過)
// 計算視差凹凸貼圖的UV偏移
inline float2 ParallaxOffset( half h, half height, half3 viewDir )
{
//h為視差貼圖采樣的結果*高度后-高度/2
//這是Unity官方提供的一種性能高的視差貼圖算法虏肾,對于視差偏移度小的效果還不錯
//由于是在平面上移動UV點,對于視差偏移度過大的效果并不好
h = h * height - height/2.0;
float3 v = normalize(viewDir);
v.z += 0.42;
return h * (v.xy / v.z);
}
其他的視差貼圖
以下這些視差貼圖的會跟同類型的其他shader基本雷同欢搜,僅增加了視差部分封豪,因為視差貼圖用的很少,用官方這種解決方案的更少炒瘟,因此全都掠過吹埠。
路徑 | |
---|---|
Legacy Shaders/Parallax Diffuse | 漫反射光照下的視差效果 |
Legacy Shaders/Parallax Specular | 高光下的視差效果 |
Legacy Shaders/Transparent/Parallax Diffuse | Parallax的半透明版本 |
Legacy Shaders/Transparent/Parallax Specular | ParallaxSpec的半透明版本 |
Legacy Shaders/Self-Illumin/Parallax Diffuse | Parallax的自發(fā)光版本 |
Legacy Shaders/Self-Illumin/Parallax Specular | ParallaxSpec的自發(fā)光版本 |
Legacy Shaders/Reflective/Parallax Diffuse | Parallax的反射版本 |
Legacy Shaders/Reflective/Parallax Specular | ParallaxSpec的反射版本 |