UNITYで影をつくる〜ShadowCaster
UNITYでは簡単に影を落とせます
具体的には ShadowCasterパスにて
#include "UnityStandardShadow.cginc"
とするだけです
CUBEMAPや各種設定に対応するため 上記の用意されたものを呼ぶ
あるいは その中身をみて ビルトイン関数を使うべきですが
勉強のために ビルトイン関数を呼ばずに影を作ってみます
コードはこちら
影の設定
UNITYでは影のON/OFFは MeshRendererの設定から行う

UNITYでは
ShadowCasterパスでシャドウマップに書き込み
ShadowRecieveパスで影を描画していましたが
いつからか ShadowRecieveパスがなくなり(効率化!)
SHADOW_ATTENUATION として、通常のレンダリングパスで影を取得出来るようになりました
ShadowCaster
上記のincludeを使わず自力で行ってみます
ShadowCasterパスをつくり、そこに下記のコードを
Pass {
Name "ShadowCaster"
Tags { "LightMode" = "ShadowCaster" }
ZWrite On ZTest LEqual
CGPROGRAM
#pragma target 3.0
#pragma vertex vertShadowCaster
#pragma fragment fragShadowCaster
struct VertexInput {
float4 vertex : POSITION;
};
struct VertexOutput {
float4 pos : SV_POSITION ;
};
VertexOutput vertShadowCaster (VertexInput v) {
VertexOutput o = (VertexOutput)0;
o.pos = UnityObjectToClipPos( v.vertex );
return o;
}
float4 fragShadowCaster(VertexOutput i) : SV_TARGET {
return 0;
}
ENDCG
}
基本的に ShadowCasterパスでは色は関係ないようです
Zバッファに書き込むだけでよさそう
影のZファイティングを避けるため LEqualを使います
これで地面に影が出るはずです