UnityのLightmapでマップの影を作りました。
これをキャラクターに影響させるようにするためLightProbeを使いました。
LightProbeを地面に埋まらない高さに配置しLightmapに焼き込みます。
影響させるキャラクターのモデルのEnable LightProbeのチェックをONにします。
これだけでLightProbeは動作しましたがキャラクターへの影響が強すぎました。
明るいところではキャラクターが真っ白になり、暗いところでは真っ黒になってしまいます。
そこで、キャラクターのシェーダーでLightProbeの影響力を調整することにしました。
まずSurface Shaderの#pragma surfaceの語尾に「noambient」を追加します。
これでシェーダーによるLightProbeの影響を無効にします。
次にVertexShaderで「ShadeSH9」を使ってLightProbeの値を取得します。
取得した値を調整します。
void vert (inout appdata_full v, out Input o)
{
UNITY_INITIALIZE_OUTPUT(Input,o);
// evaluate SH light
float3 worldN = mul ((float3x3)_Object2World, SCALED_NORMAL);
o.shLight = ShadeSH9 (float4 (worldN, 1.0)) * _AmountLightProbe + (1.0 - _AmountLightProbe);
}
最後にSurfaceShaderで調整済みのLightProbeをAlberoに乗算します。
o.Albedo *= IN.shLight;
これでLightProbeのキャラクターへの影響が上手くできました。
全ての100近くある全てのマップのLightmapの焼き直しに時間が掛かるため、LightProbeは歩けるところに影があるマップだけに配置しています。
Unity版Sword of Rapierは間もなく完成です。
5月中にiOSとAndroidへ配信を行う予定です。
その後Windows Phone 8へ配信をします。