元記事:NPR Project — Blender Developers Blog
Clément Foucault 氏による記事の翻訳です。
Blender Studioによる早期 NPR プロジェクト、Wing it!
2024年7月、Dillon Goo Studio と Blender 開発者によるワークショップを通じて、NPR(Non-Photorealistic Rendering)プロジェクトが正式に開始しました。
ユースケースは明確でしたが、アーキテクチャや全体的な設計は未定でした。その手助けとして、NPR ワークフローに欠かせないシェーディング機能(フィルター対応、カスタムシェーディング、AOV アクセスなど)を多数含む、プロトタイプでの作業を開始しました。
このプロトタイプは大きな注目を集め、ユーザーから多様な表現の可能性を示す素晴らしい事例が多く寄せられました。フィードバックからは、コミュニティの幅広い表現への関心を確認できました。
しかし、プロトタイプの柔軟性がもたらした結果、NPR 機能が EEVEE に限定され、Cycles が NPR パイプラインから排除されてしまうという問題が発生しました。また、EEVEE のアーキテクチャから逸脱し、将来的な機能の開発に制限が生じる可能性も出てきました。
検討が重ねられた後、これらの主な問題を解決すべく、この設計は変更修されました。その結果を要約すると以下の通りです。
NPRに必要な機能の一つは、シェーディングされたピクセルにアクセス・変更することです。
レンダーエンジン内でこれを実現することは非常に困難でした。現在の EEVEE での実装方法では、ShaderToRGB(シェーダーのRGB化)ノードを使用していますが、これには多くの制限があります。Cycles では、カスタム OSL ノードを使用して限定的な効果を実現できます。
その結果、プロダクションパイプライン内で、非常に手間と時間を要するシーン全体のコンポジティング処理が行われています。大きな問題点は、アセット固有のコンポジティング処理をすべて手動で統合し、シーンコンポジター内で管理する必要があることです。
そこで、あるアセットに指定されたコンポジティングパイプラインの一部分を、アセットレベルで定義することにします。なぜなら、これらのコンポジティングノードはそのアセットの見た目を定義しており、シーン間で共有すべきだからです。
これがマルチステージコンポジティングです! コンポジティングパイプラインの一部分は特定のオブジェクトまたはマテリアルにリンクされます。この一部分は、レンダリングカラーだけでなく、AOV やレンダーパスも入力として受け取り、変更後のレンダリングカラーを出力します。
このサンプルでは、Suzanne オブジェクトの見た目を、アセットファイル内でオブジェクトレベルで定義しています。他の要素を含むシーンにリンクされると、自動的に他のアセットと組み合わされます。
この新しいマルチステージコンポジティングは、コンポジターノードを再利用しますが、オブジェクトレベルとマテリアルレベルで、利用できるノードのサブセットが異なります。これにより、マテリアルノード編集とコンポジターノード編集の間のワークフローを効率化する機会となります。
最終的には、このソリューションでグリースペンシルのエフェクトを置き換えることも可能です。
この機能についてさらに知りたい場合は関連開発タスクをご覧ください。
コンポジティングワークフローにおける大きな問題の一つに、アンチエイリアシング(AA)があります。アンチエイリアス済み入力のコンポジティング時、解決が難しい色のフリンジが発生することがよくあります。
この問題に対する一般的な回避策は、AA なしの高解像度でレンダリングし、コンポジティング後にダウンサンプリングすることです。この方法は非常に多くのメモリを消費し、通常は理想的ではないフィルタリングで4倍または9倍の AA しか実現できません。別の選択肢は、ポストプロセス AA フィルターを使用することですが、大抵はちらつきのあるアニメーションになってしまいます。
この問題の解決方法は、レンダラーと同様、各 AA ステップでコンポジターを実行し、コンポジティング後のピクセルをフィルタリングすることです。これにより、最終フレームの消費メモリ量の追加だけで、最高の画像品質を実現できます。
現代のレンダラーの大きな問題点の一つは、その出力にノイズが含まれることです。これは NPR ワークフローとの相性が良くありません。多数のエフェクトでは、レンダリング画像やライトバッファにシャープな変換を適用する必要があるからです。
例えば、アンビエントオクルージョンノードに対し、一定に補間されたカラーランプを適用すると、この問題が発生します。変換前にノイズのある入力に実行するのではなく、ノイズのある出力に平均化処理を行います。
コンポジティング時にこれらのエフェクトを行うことで、最終的な収束した画像を入力として得られます。しかし上記のように、コンポジターは AA フィルタリングの前に実行する必要があります。
したがって、マルチステージコンポジターは、AA なしのまま、収束またはデノイズした入力で実行可能にする必要があります。つまり、レンダーサンプルは、レンダーパスの収束と最終コンポジター AA の間で分布することになります。
コンポジティングワークフローの改善はスタイル化の柔軟性にとって重要ですが、一部の機能はレンダーエンジン内への実装に適しています。これにより、ライトトランスポートやその他のレンダラーの機能との相互作用が可能になります。これらの機能は NPR ワークフローに限定されず、エンジンアーキテクチャ内にうまく適合します。
したがって、以下の機能はレンダーエンジン内に直接実装される予定です。
開発の開始は Blender 5.0リリース後、2025年11月を予定しています。
それまでの間、プロジェクトをチェックしたい方は開発タスクを購読してください。プロジェクトの詳細は、告知スレッドにご参加を。