ライトの方向を考慮したリムシェーダを書いてみます。
Unity2018.4.0
シェーダ
早速ですがシェーダです。
Shader "Rim" { SubShader { Tags { "RenderType"="Opaque" } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float3 normal: NORMAL; }; struct v2f { float4 vertex : SV_POSITION; float3 viewDir : TEXCOORD1; float3 lightDir : TEXCOORD2; float3 normal : TEXCOORD3; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.viewDir = normalize(UnityWorldSpaceViewDir(worldPos)); o.lightDir = normalize(UnityWorldSpaceLightDir(worldPos)); o.normal = UnityObjectToWorldNormal(v.normal); return o; } fixed4 frag (v2f i) : SV_Target { i.viewDir = normalize(i.viewDir); i.lightDir = normalize(i.lightDir); i.normal = normalize(i.normal); // リムのかかり方を調整したければpowの第二引数をそれぞれ調整する half vdotn = pow(1.0 - max(0, dot(i.normal, i.viewDir)), 1); half ldotn = pow(max(0, dot(i.normal, i.lightDir)), 1); return ldotn * vdotn; } ENDCG } } }
結果
レンダリング結果は以下のようになります。
ライトの方向が重点的に照らされていることがわかります。