1. เขียนใน surf function
2. เขียนใน Lighting function
จะเขียนวิธีที่ 1 ก่อนนะครับ
วิธีการทำ
1. ให้ทำการสร้าง Shader (ชื่อ RimLight)
2. จากนั้นให้เพิ่ม _RimColor และ _RimPower ใน Properties
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_RimColor ("Rim Color", Color) = (1, 1, 1, 1)
_RimPower ("Rim Power", Range(0.5,8.0)) = 3.0
}
3. ในส่วนของ struct Input {} ให้ทำการเพิ่ม float3 viewDir;
struct Input
{
fixed2 uv_MainTex;
fixed3 viewDir; // ใช้อางอิง ทิศทางของกล้อง
}
4. จากนั้นให้ประกาศตัวแปร สำหรับ _RimColor และ _RimPower
#CGPROGRAM
struct Input { ... }
// ประกาศตัวแปร _RimColor และ _RimPower
fixed4 _RimColor;
fixed _RimPower;
5. ในส่วนของ surf function ให้ทำการเพิ่ม
void surf(Input IN, inout SurfaceOutput o)
{
o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
// คำนวณค่า Rim Lighting
fixed rim = 1.0 - saturate( dot( normalize( IN.viewDir ), o.Normal ) );
// นำค่า Rim Light รวมกับสี
o.Emission = _RimColor.rgb * pow(rim, _RimPower);
}
6. เท่านี้ก็จะได้ Rim Lighting แล้วครับ