📝 レンダリング PASS の説明
1️⃣ 1. インストール手順・事前設定(重要) の最後でも触れていますが、
ASP に必要な最小構成の renderer feature は 3 つあります。renderer data に必ず次の renderer feature を追加し、有効化してください: ASP Material Pass、ASP ShadowMap、ASP Depth-Offset Shadow
これら 3 つの renderer feature は、それぞれ独立した 3 つの PASS に対応しています。このページでは、それぞれの PASS の用途を詳しく説明します。
Material Pass
キャラクター Renderer のマテリアルが ASP/Character または ASP/Eye Shader を使用している場合、その renderer は Material Pass に書き込まれます。
Material Pass では、renderer に関する 4 種類の情報を 1 枚の RGBA32 テクスチャに保存します。内容は次の通りです:
| RGBA チャンネル | 情報の種類 | 説明 |
|---|---|---|
| R | Material ID | キャラクター描画に使われるすべての ASP マテリアルに対して、ASP Character Panel が個別の per-material ID を割り当てる。 |
| G | Color Luminance | その renderer の albedo(albedo map を含む)の明度で、0~1 のグレースケール値。 |
| B | Outline Weight | Vertex Color の B チャンネル由来。0 にすると outline は強制的に表示されない。 |
| A | なし | 予約領域で、独自拡張用。 |
Material ID は非常に重要です。screen space outline やその他のポストプロセス(たとえば ToneMapping)では、現在の pixel がトゥーンレンダリングされたキャラクターかどうかを判定するために material ID を使用します。これにより、特定の効果をその pixel にだけ適用したり、非トゥーンキャラクターの pixel をスキップして処理を最適化したりできます。 また、Material Pass は renderer を別の depth map にも書き込みます。screen space outline のようなスクリーンスペース Shader は、キャラクターの手前に別のオブジェクト(非 ASP マテリアル)があるかどうかを深度情報で判定し、正しい遮蔽表現を行う必要があるためです。 これが、screen space outline を半透明オブジェクトに適用できない理由でもあります。半透明オブジェクトは深度情報を書き込まないためです。
ASP Shadow Map
キャラクター Renderer のマテリアルが ASP/Character または ASP/Eye Shader を使用している場合、その renderer の影は ASP Shadow Map に書き込まれます。これはキャラクター専用の shadow map であり、シーン内の他の shader を使った動的 / 静的オブジェクトの影は含まれません。

ASP Shadow Map Renderer Feature には、ユーザーが調整できるパラメータがいくつかあります。
| パラメータ名 | 説明 |
|---|---|
| Character Shadow Map Resolution | ASP Shadow Map のサイズ。1024x1024、2048x2048、4096x4096 の 3 種類から選択可能。 |
| Clip Distance | ASP Shadow Map の最遠描画距離。 |
| Cascade Count | Cascade Shadow Map の段数。最大 4 段 cascade まで対応。 |
| Shadow Fade Ratio | ASP Shadow Map の影のフェード量。0 にするとまったくフェードせず、カメラとの距離が clip distance を超えた時に影が直接切り落とされる。推奨設定は 0.5~1。 |
ASP Depth Offset Shadow
日本アニメ調のトゥーンキャラクターでは、額まわりに繊細な髪の影が入ることがよくあります。しかし、従来の shadow map ではその表現を再現するのが困難です。
ASP で描画されるキャラクターは通常 self-shadow を持ちません(特に顔)。そこで、設定された Layer と rendering layer mask に一致する renderer の深度を 1 枚の RT に描画し、その深度をオフセットしてサンプリングすることで、顔などのマテリアル上に髪の影を落とせるようにしています。

💡 self-shadowing を避けるため、ASP では material ID を使って、あるマテリアルが自分自身で投影した depth offset shadow を受け取らないようにしています。同じマテリアルが depth offset shadow の Caster と Receiver の両方になることはできないためです。