UE5 ゼンレスゾーンゼロ スタイライゼーション
UE5でZZZの美学を再現するカスタムNPRスタイライズドレンダラー
概要
Unreal Engine 5 で制作したスタイライズドレンダラー。ゲーム『ゼンレスゾーンゼロ』の NPR スタイルを、自分なりのアレンジを加えつつ再現することを目指した。
モデルは公式が一般公開している MMD モデルを使用した。ただしそのため、モデルにはノーマルマップもライトマップも付属しておらず、見た目がやや平坦になり、各パーツごとのルックのコントロールも限られてしまう。
トゥーンシェーディング
基本的な考え方は、Lambert シェーダーを構築してエミッションに接続するというもの。ただし今回は Unlit ではなくデフォルトの Lit シェーディングモデルを使うことで、複数ライトや他オブジェクトからの影といった機能をある程度サポートできた。
その上で Curve Atlas を使ってテクスチャのコントラストを調整し、全体的にパンチの効いたルックに仕上げた。
もしモデルにライトマップとノーマルマップがあれば、Blinn-Phong を構築してライトマップでマスクし、メタリック値が一定のしきい値を超える部分だけにメタリックスペキュラを実装できたはず。また、ノーマルマップを使って基本の Lambert シェーディングモデルに頂点位置をマッピングすることもできただろう。
ポストプロセス
このプロジェクトを本当に支えたのはポストプロセスシェーダーだと思う。カスタムステンシルパスでキャラクターを背景からマスクし、影のルックをはるかに細かくコントロールできるようにした。
シャドウ
シャドウのポストプロセスでは、1オクターブだけのボロノイノイズで非常に密なドット効果を作り、べき乗で形を調整した。それを画像の影の部分にそのまま乗算している。
アウトライン
アウトラインは SampleSceneDepth ノードを使い、深度パスの急激な変化を検出して、それをマスクとしてアウトラインを駆動している。
ビネットと色収差
ビネットは、0–1 のビューポート UV 空間を -1〜1 に変換し、ベクトルの長さをラジアルマスクとして使った。
色収差は、サンプリングするビューポート UV をほんの少しずらして、赤チャンネルを一方向に、青と緑のチャンネルを逆方向にオフセットしている。