🦇 6. キャラクター影設定 - ASP の影ソリューション(1.3 更新 / 2025年11月)
このページでは、影の設定に入る前に、ASP で追加の Shadow Map を使う理由や、立方体を使って self-shadow を除去する仕組みについて説明します。
💡 ASP 1.3 以降では、立方体を使って self-shadow を除去する方法が追加されました。追加 Shadow Map を使う方法に比べて、設定しやすく、かつ負荷も抑えやすい方法です。以下ではこの 2 つの手法を分けて説明します。
プロジェクトではどちらか一方のみを選んで使用してください。
トゥーンレンダリングにおける self-shadow の問題
通常、標準の Shadow Map を使うと、キャラクター上の self shadowing はあまり理想的な見た目になりません。これは Shadow Map の解像度が限られているためです。
1 枚の Shadow Map でシーン全体をカバーする必要があるため、シーン中のキャラクターが占める領域はごく小さくなります(Unity 標準の 4 段 Cascaded Shadow Map を使っても十分でないことがあります)。

上の例では、髪や顔のメッシュが落とす影が、Shadow Map の解像度不足によってキャラクター自身に不自然な self shadowing を生んでいます。
髪や顔の Mesh の ShadowCaster を Off にすれば self-shadow 自体は避けられますが、その代わり地面に落ちるキャラクターの影からも髪や顔の形状が失われます。

self-shadow の解決方法(新)- 立方体(CUBE)除去法

原理:
GRAVITY DAZE(PS Vita 版) のキャラクター影アルゴリズムでは、キャラクターは「現在のピクセルのワールド座標」をそのまま使って Shadow Map をサンプリングしません。
代わりに、キャラクター全体を包み込む 仮想的な立方体(proxy cube) を外側に配置します。
描画時には、光源方向に沿って立方体表面から外向きに ray trace を行い、その立方体表面と光の間で最初に見つかった交点だけを使って Shadow Map をサンプリングします。
この方式では、立方体の内側にあるキャラクター自身の表面は self-shadow 計算に参加しないため、次の利点があります。
✔ キャラクター自身に self-shadow が発生しない
影のサンプリング位置は常に立方体表面から取得されるため、キャラクター自身の表面が自分を遮蔽しません。
✔ 外部環境や他オブジェクトからの影は受け取れる
立方体の外にある物体は依然として光を遮るため、キャラクターには外部オブジェクトから投影された影が正しく表示されます。
💡 一般的なゲーム、特にカメラが比較的遠い三人称視点のタイトルでは、この方法をおすすめします。追加の Character-Only Shadow Map を描画する必要がなく、負荷を抑えやすいためです。
self-shadow の解決方法(旧)- Character-Only Shadow Map
ASP では、self shadowing を効果的に解決する方法として、キャラクターだけを独立した Shadow Map に描画する方式も用意しています。
キャラクター自身は、人物を含まない Unity 標準の Shadow Map からのみ影を受け取り、
一方で通常のシーンオブジェクトは、キャラクターを含む Shadow Map と標準 Shadow Map の 2 枚から影を受け取ります。
あらゆるケースに万能な方法ではありませんが、二次元らしい見た目を重視するトゥーンレンダリングでは十分に説得力のある結果が得られます。

キャラクター自身は、引き続き Unity 標準 Shadow Map からの影を受け取れます

また、必要に応じて特定のマテリアルだけにキャラクター影の受け取りを有効にすることもできます。たとえば脚部だけをキャラクター影の受け取り対象にする、といった使い方が可能です。

スクリーンスペース Depth Offset Shadow
2 枚の Shadow Map を使うことで低解像度の self-shadow は避けられますが、その代わりキャラクター自身の影ディテールは失われやすくなります。ASP では追加 Pass を用意しており、
オフセットした深度バッファを使って、セルアニメ調の顔や身体に出る影に近い表現を作れます。これにより、たとえば髪が顔に落とす影のような細部を補えます。

次のページでは、Character Panel を使って Unity エディタ上でキャラクターの影パラメータを素早く設定する方法を紹介します。
⏭️ 次のページへ 🦇 7. キャラクター影設定 - ASP Character Panel で影の投射と受け取りを設定する(1.3 更新 / 2025年11月)