原文 https://magazine.substance3d.com/research-a-portable-shader-graph/
Substanceでは、素材の中で生活して、呼吸して、夢を見ます。それが私たちの仕事の核心なのです。
シェーディングやテクスチャリングのパイプラインが大きく異なるため、Substanceが効果を発揮できるように可能な限りポータブルで適用可能な素材が必要となります。
一般的なワークフローでは、マテリアルをプロシージャルテクスチャとして構造化し、アーカイブファイルにきちんとパッケージ化し、レンダリングが行われる前に実際のテクスチャにラスタライズします。
テクスチャはノーマル、ベースカラー、粗さ、高さなど、よく定義されたチャンネルの形をしています。それは、これらのテクスチャをどうすればいいのかを知るために、標準化されたシェーダ(Uber Shader)の何らかの形に頼っており、物理ベースのモデルで見栄えの良い画像をレンダリングしているからです。一般的に、これらの標準化されたシェーダに関する知識は、CG業界のほとんどのテクスチャリングワークフローにとって非常に重要です。
私の名前はDavide Pesare,です。20年近くシェーダーに情熱を注いできましたが、数年前にフランスのSubstanceに入社して以来、ラボチームの指揮を執っています。当社のミッションには、新技術の革新と開発、そして業界を取り巻く既存の技術の動向を探ることが含まれています。このミッションを追求することで、私たちはシェーダーの仕事を拡大することになりました。
ウーバーシェーダーだけでは物足りない時がある
何年にもわたって、私たちは、2012年のディズニーのプリンシプルなシェーダーに大きく影響を受けた、MetalRoughnessと呼ばれるシェーディングモデルに大きく依存してきました。 物理ベースのシェーダをパラメータ化してペイントするには、非常に効果的で簡潔で親しみやすい方法です。 SpecularGlossinessと呼ばれる兄弟モデルとともに、このモデルは、デジタルコンテンツ制作業界の多くのアプリケーションや、Kronos GroupのglTFなどの標準的なプラットフォームで、現在でも主に使用されています。
幅広い成功を収めているにもかかわらず、このワンサイズフィットのモデルは、実際にはすべてに当てはまるわけではありません。ここにその理由がいくつかあります。
- 世の中には、このモデルには合わせにくい素材が一般的に存在しています。車の塗料のような、フレーク状のものや、液体の飛沫が付着したサーフェスのような遍在性のある素材。虹色の物質、ぼやけたサーフェスなど、様々なものがあります。
- 物理的に理にかなっていることは、以前のモデルに比べて大きな改善点ではありますが、 光が何をするかを物理的に正確にシミュレーションしているわけではありません。 ディズニー・モデルは、シンプルさと直観性を追求しています。リアルメタルの表面反射率と物理的なローブのレイヤリングは良い例ですが、正しく行うには、大多数のユーザーが許容できる以上の測定値とパラメータが必要になります。それは、一部のアプリケーションでは受け入れられないほどの精度にペナルティを与えるものです。
- テクスチャを先に全部ベイクしておくと、一つのオブジェクトを作るのに良いかもしれません。しかし、その同じオブジェクトの1000の亜種を持っている場合、 1000セットのテクスチャをエクスポートする必要がありますが、プロダクションでは必ずしも実用的ではありません。シェーダに直接プロシージャルパターンとテクスチャモジュレーションがあると、より小さなフットプリントでより多くのバリエーションを作成するのに役立ちます。
車の塗装モデルには、物理的に正しい吸収・散乱モデル、フレークや傷の複雑な挙動、異なる視距離での柔軟なディテールレベルなど、複数の層のスペキュラリティが含まれています。
『ウィッチャー3』に登場するBeauclair。メモリを使い果たすことなく、街中の様々なテクスチャをフィットさせるためには、街中のすべての建物のシェーダーを慎重に作る必要があり、テクスチャの再利用が最大限に行われます。
私たちは数年前にこのニーズを認識し、2015年にシェーダオーサリンググラフを展開しました。私たちはNVIDIAと提携し、彼らのマテリアル定義言語(MDL)をベースに構築しました。これにより、当社のアプリケーションにパストレーサ(Iray)を搭載し、当社のマテリアルのより良いプレビューを提供することができるようになりました。
Substance DesignerのMDLグラフは、イルミネーションローブをカスタマイズされたシェーディングモデルに組み合わせるために使用でき、ほとんどのプロダクションで使用されているシェーダーにマッチします。
結果には満足していますが、やはりポータビリティの課題がありました。 MDL エコシステムはすべての業界に到達しているわけではなく、多くの一般的なレンダラーは OSL やカスタム言語などの他のソリューションやアーキテクチャに依存しています。レンダーが具体的に言語をサポートしているかに依存しないせずにこれらの業界に届くようなものが必要でした。
幸いなことに、同じものを必要としている人がいました。Lucasfilmと数社のパートナーは、プロシージャルテクスチャ(シェーダに記述されている)、カラースペース、合成数学、マテリアル割り当てを記述するための標準化されたスキーマの開発を開始しました。このイニシアチブは MaterialX と呼ばれ、ルーカスフィルムは、複数のオフラインおよびリアルタイムのシェーダーで機能し、正しく見える大規模なシェード ネットワークを展開することができました。 ということで、ラボチームは2018年にILMとルーカスフィルムADGチームとのコラボレーションを開始しました。
その夏のSIGGRAPHで、私たちはMaterialXファイルを読み込んでSubstance Painterのマテリアルプリセットのライブラリを作成・管理するプロトタイプを発表しました。また、Substance Painterプラグインを使って、通常のテクスチャと一緒に、バインディングやシェーダの情報を含むMaterialXファイルをエクスポートすることもできました。
MaterialXを使った弊社の2018年の概念実証
ポータブルシェーダグラフ
2019年、私たちはMaterialワークフローをさらに推し進めました。Substance Designerのカスタマイズ性を強化し、「ポータブル」なシェーダグラフエディタを完全にPythonプラグインとして構築しました。
これは、既存の MDL グラフを拡張したもので、MDL と同様に MaterialX をエクスポートすることができます。MaterialX から、カスタマイズされた GLSL と OSL を抽出することができるようになりました。
Substance DesignerのPortable Shader Graphでのプロトタイプのキャプチャ、2019年8月。
この新しいグラフとエクスポートされたシェーダによって、Substance DesignerのIrayとGLビューポートでマッチングしたレンダリングを得ることができました。
同じグラフから、シェーダをOSLにエクスポートすることもできます。アーノルド(主に映画にて一流のオフラインレンダラーとして大成功を収めています。)と AppleSeed (一般的なオープンソースのパストレースソリューション)の両方でテストしました。
適切なヒントとタグを提供することで、GLSLとMDLをSubstance Painterにエクスポートすることができ、ツールセットにレンダリングのまとまりをもたらすことができました。
ボタン一つで、Substance Painterでモデルを開き、MaterialXViewで開くことができました。ネイティブのMaterialXプレビューアプリケーションで、他の機能に送信する前にニュートラルなアプリケーション上でシェーダとそのパラメータ化を検証することができます。
MaterialXシェーダはSubstance Painterでペイントに使用され、MaterialXViewerでプレビューとして開かれ、すべてのパラメータはまだライブ編集可能です。
どうやって使うのか?
当初、MaterialXは主にパターンを合成し、ルックとジオメトリへのバインディングをカプセル化するためのスキーマのコレクションでした。 イルミネーションプロパティは、機能同士が話し合って最終的な見た目を合わせられるようにと、ブラックボックスのままにしていました。
ShaderXというイニシアチブ(ルーカスフィルムとオートデスクのコラボレーションから生まれた)のおかげで、MaterialXは2019年に拡張され、シェーダコード生成だけでなく、十分に仕様化されたカスタムbrdfオーサリングにも対応しています。OSLとGLSLの両方を生成するために使用しています。
鋭い読者の方は、私が「エクスポート」に MDL を特に含めていないことに気がついたかもしれません。これは、ポータブルシェーダグラフが既にネイティブのMDLグラフになっているからです。OSLやGLSLと同じメカニズムを使ってMDLをエクスポートすることもできましたが、ネイティブ実装の方がはるかに高いパフォーマンスが得られます。将来的には、NVidia が MaterialX をより公式に採用するようになれば、この点を見直すことになるかもしれません。
ポータブルシェーダグラフのMaterialX互換性を強化するために、すべてのMaterialXコンストラクトに対応したMDLモジュールを構築し、(まれな)不適合ノードは非推奨としました。また、サブグラフのサポートも追加しました。Substance Designerでは、ノードの共通ネットワークを1つのノードにカプセル化することでオーサリングを簡素化し、後で再利用できるようにしています。
重要な注意点は、アーティストのワークフローを簡素化し、移植性を最大化するために、グラフ内のシェーダパターンの変調とオーサリングに明示的に焦点を当て、ネットワークの端末として単一の照明モデルを使用することにしました。私たちはすでに、さまざまなMDLイルミネーションローブ("GGX specular "や "Oren-Nayar diffuse "など)やレイヤリングモードを介して、とにかくMDLでカスタムイルミネーションのオーサリングを行っていました。
どのようなシェーディングモデルを使用したのか?それが次のトピックです。
サーフェス基準に向かって成長する
前述したように、古典的なメタルラフネスモデルでは、必要な機能がすべて得られるわけではありません。ということで、ここ数年の間に、いくつかの半文書化された拡張を開始しました。それぞれに単一の機能を追加しています,コート、異方性、サブサーフェスなど。
新しいサーフェスとそのパラメータは、外から見るとやや恣意的に見えたため、これでは持ちこたえられないことにすぐに気がつきました。
一方で、ユーザーが独自の brdf ネットワークを MDL で書くことを期待したのは悪い選択でした。 なぜなら、簡単に言えば、uberShadersの方がずっと使いやすく、テクスチャの交換も簡単だからです。
私たちは、既存のテストに触発されて、理想的なサーフェスを文書化するためのホワイトペーパーの作成を検討し始めました。これは事実上、新しいスタンダードを作ることになりました。
これはちょうどSiggraph 2018の時で、オートデスクがホワイトペーパーの草案のフィードバックをお願いしたいと打診してきたのがきっかけでした。これは、アーノルドシェーダーやディズニーモデルとその子孫にインスパイアされたもので、StandardSurfaceと呼ばれる新しい標準シェーディングモデルを確立しています。
私たちが同じことをしたいと思っていただけでなく、オートデスクがすでにこの分野の最高の人材を巻き込んでいたからです。
「完璧」という言葉が「標準」という言葉と同じ文章に収まることはほとんどありませんが、私たちは「StandardSurface」で見つけたものが気に入っています。 それは、一般的なuberShadersの既存の機能を拡張して、現実の世界での大多数のケースをカバーすることで、良いバランスを取っています。これは、多すぎるパラメータや任意のルールを持つモデルを過度に複雑にすることなく行うことができます。簡略化のためのガイドラインを提供しているので、リアルタイムまたはそれ以下の機能のレンダラーでも、良好な近似値を得ることができます。おそらく最も重要なことは、それが十分な理由と文書化されていることです。これは、選択したことを受け入れたり、話し合ったりするのに役立ち、この基準に向かって成長するための指針となります。
一般的には、指定されていないものよりも、ややオーバースペックな規格の方が好ましいと考えています。生成されたものは、その標準をサポートするどのレンダラーでも完全に読めるようになります。一方で、不特定多数の基準にパラメータを追加すると、以前の状況に戻ってしまいます。この場合、「レール」がなく、ルールを作る必要がありますが、通常は新しいエクスポートがあまり広く使われたりサポートされたりしません。
結論
この調査の結果、多くの関心が寄せられ、この種のポータブルなシェーダグラフを持つことに価値があると確信しました。 このプロジェクトのために、映画、ゲーム、DCCの各業界が一丸となって成長していく姿を見ることができ、刺激を受けています。
ノードグラフは、シェーダ(またはより一般的なプログラム)で起こる複雑な動作のネットワークを表現し、視覚化するための素晴らしい方法です。そして、Substance製品が提供する既存のエコシステムに組み込むことができるということは、多くの可能性を示しています。
さらに、Labsでは、MaterialXパターンとシェーディングスキーマ、そしてサポートフォーマットとしてのPixarのUSDとの関係をより深く探っていきたいと思います。USDは本当に採用の臨界点に達していますが、その明確さと安定性にもかかわらず、そのシェーディングスキーマは(生産の柔軟性を高めるために設計されたものであるため)仕様が大きく不足しています。強力なシェーディング交換プロトコルがないため、実際には表現力が制限されています。USDへのMaterialXプラグインは、その方向性を示しています。しかし、これらの進歩を確固たるものにするためには、より多くの作業が必要であると考えています。