菲涅爾反射經常用於汽車表面的材質,普通的反射看上去比較粗略,菲涅爾的效果和鏡面效果會讓汽車表面看的更有質感,並且創建一種邊緣光照的效果。
不是所有的表面都要相同數量的菲涅爾光照,想汽車表面的話需要高強度的菲涅爾反射,但是塑料材質的只需要遲鈍點的強度就可以了。
下面我們看下效果:
我調出來的效果:
不知道是版本原因還是其他原因,書上的那種效果我沒有調處來,我們看下書上調出來的效果:
感覺書上的這種更有質感,有知道方法的告知。
下面我們看下shader腳本:
Shader "MyShaders/FresnelReflections"
{
Properties
{
_MainTint("Diffuse Tint", Color) = (1,1,1,1)
_MainTex("Base (RGB)", 2D) = "white" {}
_Cubemap("Cubemap", CUBE) = ""{}
_ReflectionAmount("Reflection Amount", Range(0,1)) = 1
_RimPower("Fresnel Falloff", Range(0.1, 8)) = 2
_SpecColor("Specular Color", Color) = (1,1,1,1)
_SpecPower("Specular Power", Range(0,1)) = 0.5
}
SubShader
{
Tags{ "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf BlinnPhong
#pragma target 3.0
samplerCUBE _Cubemap;
sampler2D _MainTex;
float4 _MainTint;
float _ReflectionAmount;
float _RimPower;
float _SpecPower;
struct Input
{
float2 uv_MainTex;
float3 worldRefl;
float3 viewDir;
};
void surf(Input IN, inout SurfaceOutput o)
{
half4 c = tex2D(_MainTex, IN.uv_MainTex);
float rim = 1 - saturate(dot(o.Normal, normalize(IN.viewDir)));
rim = pow(rim, _RimPower);
o.Albedo = c.rgb * _MainTint.rgb;
o.Emission = (texCUBE(_Cubemap, IN.worldRefl).rgb * _ReflectionAmount) * rim;
o.Specular = _SpecPower;
o.Gloss = 1.0;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}