目的
PureBase/Toon でUnityのリアルタイムShadow attenuationがToon用のライト色と集約ライト方向へ直接混入し、Soft Shadow境界で不自然な明暗や方向変化が発生する問題を修正する。
Toonではリアルタイム影を「光そのものを消す値」として扱うのではなく、Toon Shade判定を影側へ寄せる独立したvisibility / shadow入力として扱える構造へ変更する。
現状の問題
Shader-Core BIRP lightingではメインライトが概念的に次の形で渡される。
light.color = _LightColor0.rgb * attenuation;
Pure Base Toonはその light.color を直接光だけでなく集約ライト方向の重みとしても使用しているため、Shadow attenuationが変化すると次の両方が同時に変化する。
Soft ShadowのPCF境界ではattenuationが連続的に変化するため、ShadowMapの形状がToonのN·L境界やライト方向へ漏れ、不自然な波打ち・暗化が発生する。
期待する設計
Toonのライティング入力を少なくとも次の責務へ分離する。
Scene / direct light color
Toon用light direction
distance / spot attenuation
realtime shadow visibility
environment / SH lighting
特にDirectional Lightのリアルタイム影では、Shadow attenuationによってToon用light directionの重みが変化しないこと。
リアルタイム影は SCShadingData.shadow などの独立した値として保持し、後続のToon Shade判定で使用する構造を基本とする。
設計事項
実装前に次を確定する。
Shader-Core共通BIRP lightingを変更せずPure Base側だけで分離できるか。
必要な場合、モデル側callback / host-owned custom dataをどのように拡張するか。
Directional LightのShadow visibilityとPoint / Spotの距離・角度attenuationをどう区別するか。
ForwardAddのPoint / Spot Lightで距離attenuationを維持しながらShadow visibilityだけをShade判定へ分離できるか。
Mixed Lighting / Shadowmask / Subtractive / Lightmap環境で既存のUnity attenuation契約を壊さない方法。
リアルタイムShadowを1st / 2nd / 3rd Shadeへどのように適用するかは Toon本体に3段階の影設定とパック済みShade Mask / AOを追加する #59 の多段影仕様と整合させる。
ShadowCaster Passは「影を落とす」責務のままとし、このIssueの「影を受ける」処理と分離する。
実装要件
Directional LightのリアルタイムShadowでToonの集約ライト方向が変化しない。
Shadow attenuationを理由にToonのdirect light colorそのものを0へ潰さない。
リアルタイム影をToon Shade側で利用できる独立値として公開する。
影なし設定では既存のDirect + SH Toon lighting結果を維持する。
PBR / Hybrid / Unlitの既存ライティング所有権を変更しない。
ForwardAddの距離attenuationやSpot attenuationを意図せず失わない。
不要なshader variantを増やさない。
完了条件
関連
目的
PureBase/ToonでUnityのリアルタイムShadow attenuationがToon用のライト色と集約ライト方向へ直接混入し、Soft Shadow境界で不自然な明暗や方向変化が発生する問題を修正する。Toonではリアルタイム影を「光そのものを消す値」として扱うのではなく、Toon Shade判定を影側へ寄せる独立したvisibility / shadow入力として扱える構造へ変更する。
現状の問題
Shader-Core BIRP lightingではメインライトが概念的に次の形で渡される。
Pure Base Toonはその
light.colorを直接光だけでなく集約ライト方向の重みとしても使用しているため、Shadow attenuationが変化すると次の両方が同時に変化する。Soft ShadowのPCF境界ではattenuationが連続的に変化するため、ShadowMapの形状がToonのN·L境界やライト方向へ漏れ、不自然な波打ち・暗化が発生する。
期待する設計
Toonのライティング入力を少なくとも次の責務へ分離する。
特にDirectional Lightのリアルタイム影では、Shadow attenuationによってToon用light directionの重みが変化しないこと。
リアルタイム影は
SCShadingData.shadowなどの独立した値として保持し、後続のToon Shade判定で使用する構造を基本とする。設計事項
実装前に次を確定する。
実装要件
完了条件
関連