レジデント準備完了 静的コンパニオン
kari_mikumao 研究室

Rendering

WMMDのレンダリング:ゴールデン画像で検証するトゥーンパイプライン

WBOIT透過、ESMシャドウ、SSAOとRT AO、IBLとブルームを備えた前方トゥーンシェーディングと、それを誠実に保つヘッドレススナップショット基盤。

  • wmmd
  • レンダリング
  • wgpu
  • トゥーン

MMDエンジンにおけるレンダラーの仕事は少し特殊です。確立された見た目に合致する様式化されたトゥーン出力を出しながら、コンサートのステージやARシーンに組み込まれても耐えるだけの現代的なライティングを持たなければなりません。WMMDはこれをwgpu上で、GPUについて何も知らないレンダリングインターフェースの背後で行います。

パス

wmmd-render-wgpuがGPU側のすべてを所有します。前方トゥーンパス、重み付きブレンドによる順序非依存透過(WBOIT)、スクリーンスペースAOとray-queryフィーチャ背後のレイトレースAO、イメージベースドライティング、ソフトシャドウのための指数シャドウマップ、そしてブルーム。ONNXによるテクスチャアップスケールの経路も専用フィーチャの背後にありますが、依存が重いため既定では無効です。

もう1つのバックエンドとして sylveon があります。エディタに既定で組み込まれるEEVEE風のレンダラーで、オートフォーカス付き被写界深度や、既定では無効のMcGuire方式タイルベースモーションブラーといった、より映像寄りの仕事を担います。専用のGPUプロファイラを持ち、パスごとのタイミングをJSON Linesとして追記して後から解析できます。

MMDのコンテンツで最も難しいのは透過です。とりわけ髪は、アルファブレンドされたマテリアル、深度書き込み、アンビエントオクルージョンの交点にあり、間違えるとすぐに現れます。背後のものを遮蔽しない髪、あるいはAO構造から消えてしまう髪。どちらも明示的な不具合として追跡され、解決されました。髪の形状はレイプロキシ構造に参加するようになり、髪の深度キーが順序の誤ったフラグメントを弾く合成ステップを駆動します。

ホスト側の2パスループ

レンダラーがスワップチェーンを所有しないため、エディタのフレームは明示的です。シーンをエンコーダに描き、シーンを保持するロード操作で同じエンコーダにeguiパネルを描き、サブミットし、提示する。パネルはレンダラーとは完全に別のクレートにあり、そのおかげでUIを一切持たないホスト――書き出しジョブやARサーフェス――が同じ描画経路を駆動できます。

正しさの契約としてのゴールデン画像

残りを保守可能にしているのはこの部分です。WMMDはヘッドレスでPNGへ描画し、ゴールデン画像と比較します。スナップショットランナーはツールクレートにあります。様式化されたレンダラーには解析的な正解が存在しないため、基準は以前に承認されたフレームであり、ピクセルを変える変更は自らを正当化しなければなりません。実際、シャドウの忠実度、マテリアルとスペキュラの挙動、被写界深度の作り直しは、この方法で評価されてきました。同じシーンと同じ画角で前後を描画し、意見ではなく較正済みの基準と比較するのです。

この規律は、出荷されるコードのどこにも特定のモデル名を書かないという規則の理由でもあります。スナップショットは再現ケースであって目標ではありません。修正は任意のPMX/VMD入力に対して成り立つ必要があり、テストもそう書かれなければなりません。