目次
- PBR:誤解と虚像
- PBR:何が変わったのか?
- 従来のコンテンツフローの復習
- テクスチャ変換:従来手法→PBRスペキュラー
- メタルネスワークフロー vs スペキュラーワークフロー
- テクスチャ変換:スペキュラー→メタルネス
- テクスチャ変換:メタルネス→スペキュラー
- 比較と否定
- マテリアルロジック
チュートリアル:PBRテクスチャ変換
本チュートリアルでは「従来のシェーダー用に作られたコンテンツをどのようにPBRシェーダー用に変換できるか」また「あるPBRフローから別のPBRフローに変換する方法」、そして「従来のワークフローとの様々な差異」について説明していきたいと思います。本チュートリアルは中級~上級者を対象にしているので、基本的な概念は簡潔に述べるのみにとどめたいと思います。PBR初級者の方は、まずJeff Russelと私が書いたPBR基礎理論とPBRチュートリアルを読んでみてください。これらのチュートリアルはPBRの基本的な概念が詳細に説明されています。- Basic Theory of Physically-Based Rendering - By Jeff Russell (日本語訳)
- Physically Based Rendering, And You Can Too! - By Joe Wilson (日本語訳)
PBR:誤解と虚像
本格的に始める前に、幾つかの要素をクリアーにしておきたいと思います。なぜなら「PBRって何?」とか「PBRシステムに必要とされるテクスチャの入力タイプ」の観点において多くの混乱が存在するからです。まず「メタルネスマップを使用することはPBRシステムで必須ではありません」。そして「スペキュラーマップを使用することはアセットがPBRではない」事を必ずしも意味しません。私はPBR関連のフォーラムで、スペキュラーマップやグロスマップを作成するアーティストを見かけると「なぜPBRを使用しないのですか?」と質問してる書き込みを良く見かけます。なので、まずは「PBRって実際何なの?」という点について分析してみましょう。
PBRの基本的な考え方は「物理的に正しいライトと物質を表現する洗練されたシェーダーと現実世界のマテリアルを表現するためのもっともららしい計測値を持つアートコンテンツとの組み合わせ」です。PBRは本質的に「コンテンツ生成とレンダリングの全体論的なシステム」であり、実装レベルや使用しているツールやエンジンに依存して、しばしば複数の流儀に分かれがちです(一般的にシェーダーモデルやテクスチャの入力タイプにおいて)。
さらに「従来のいかなるコンテンツをPBRシェーダーに読み込む事は物理的に正しい結果を保証できない」という誤解した書き込みも先ほどの「なぜPBRを使用しない」と同様に良く見かけます。空想的なシェーダーをPBRで表現するのは「half of the equation」に過ぎません、論理的にアートコンテントを計測する必要があります(?)。
最後にもう一つ「ディフューズとアルベドの定義」についても述べておきます。これら2つの用語は本質的には同じもので、"オブジェクトのベースカラー"を意味して、しばしば互換性をもって使用されています。
PBR:何が変わったのか?
図:従来のシェーダーコンテンツ/PBRシェーダーコンテンツの比較図
PBRシステム用のコンテンツを生成したりコンバートする方法を深く理解するためには「シェーダーがどのように変化したかを確認する」のが重要です。最も大きな違いの一つは「現在のシェーダーにおけるライティングの計算がどのように先進的になったか」でしょう。現在では、我々はリアルな影を投影する動的な光源や正確な環境ディフューズやスペキュラー反射を提供するイメージベースドライティングを使う事ができます。これは「テクスチャに直接ライティングや反射あるいは影の要素をもはやペイントする必要がない」ことを意味します。今後はますます我々は「特定のライティング状況をベイキングするよりもマテリアルプロパティの再現に注力できる」事も意味します。
さらに、リニアスペースレンダリングは「もはやニュートラルな白いハイライトを得るためにスペキュラマップにディフューズと反対色を書く必要がない」ことを意味し、マイクロサーフェス関数におけるエネルギー保存則(ライトは幅広い領域ほど分散するため、荒いサーフェースほど鈍い光を放つ幅広いハイライトを持つ)は、「手動でスペキュラーマップに荒い領域は暗く、光沢のある領域は明るくする必要がない」ことも意味します。これは「スペキュラーマップは一般的に各マテリアルタイプ用にほぼ均一の値(絶縁体用のグレースケール値、金属用のカラー値)を持ち、マイクロサーフェスマップがほとんどの表面の変化を定義すべき」事を意味します(?)。
従来のコンテンツフローの復習
図:従来のシェーダーコンテンツの例
従来のシェーダーと現代のシェーダの違いを示すために、Darkest of Daysで私が作成したガンモデルを使用して説明しようと思います。このアセットは非常に良いサンプルです。なぜならこのアセットは、PBRパイプラインにおいて通常使われない多くのテクニックを紹介できるからです。例えば以下のような感じです。
- ディフューズマップがとても暗いですね。これは特定のライティング環境下でよい結果を得るために微調整をする必要があるからです。
- アンビエントオクルージョンやキャビティ詳細は直接ディフューズマップやスペキュラマップの双方に直接ベイクされています。これらのコンテンツは分離した入力経由で追加されるべきで、そうする事でシェーダーはよりインテリジェントな方法でそれらを使用することができます。
- グラディエントマップ(勾配マップ)は同様にディフューズマップとスペキュラマップ双方にベイクされます。グラディエントマップはローカルのエフェクト用のマスクを作成するのに便利なツールですが、それらは(既存の)テクスチャに直接乗算するべきではないです。
- このアセットがもともと使用しているシェーダーは、グロスマップをサポートしていませんでした。これは「スペキュラーマップが反射とマイクロサーフェースの双方を表現するというダブルの義務を果たす必要があり、その上全体のマテリアルに対して均一の光沢値を使用する」ことを意味します。
- スペキュラーの値は、現実世界のマテリアルプロパティを説明するよりも(?)目によってセットアップされていました。結果として、黒くペイントされた金属はとても反射し、明らかな理由はないですが、わずかに黄色の輝きを持ち、プラスティックやゴムのマテリアルは十分に反射されませんでした。
テクスチャ変換:従来の手法→PBRスペキュラー
ここまでで、従来のシェーダーとPBRシェーダーの共通の違いを理解できたので、物理ベースのスペキュラーワークフロー用に各コンテンツをアップデートする事ができます。図:従来のワークフローからPBRスペキュラーワークフローへの変換
まず、アルベドマップとスペキュラーマップからベイクしたライティング情報とグラディエント情報を削除しました。次に、全ての表面の偏角情報(surface variation)を古いスペキュラーマップから新しく生成したグロスマップに移動して各マテリアルのマイクロサーフェス構造を表すためにその基本の値を更新しました。もし既にグロスマップを持っている場合は、その値およびそれらがつじつまが合っているかのダブルチェックをすべきでしょう。例えば、ライフルの基本的な生の金属は一般的にコーティングの艶消し仕上げしたものよりもスムーズで光沢があるでしょう。逆に光沢仕上げにおいて傷ついた表面はより粗い下塗り状態が現れるでしょう。
スペキュラーマップからグロスマップへのテクスチャの変化によって、我々は反射性の値に注力できます。この時点で「対象が金属かそうでないかを特定する」のはとても重要です。(たとえあなたがメタルネスのワークフローを使用していない場合でも、です)。この理由はシンプルで「絶縁体は4%(あるいはsRGBの#383838)周辺の着色していない反射率の値を持ち、最小2%~最大16%の範囲を持つ(ただし宝石以外の幾つかの絶縁体は4%以上の値を持ちます)傾向があるから」です。一方で「純粋な金属はより高い反射率の値を持ち一般的に70%~100%の範囲の値を持つ」傾向があります。このように「マテリアルが何のタイプである事を明確に理解する」事は正しい反射率の値を探索する場合にとても重要です。
PROTIP: 異なる材料でペイントあるいはコーティングされた金属オブジェクトは値を参照する場合は絶縁体と考慮されます。ただし表面が磨り減った部分は金属と考慮します。
メタルネスワークフロー vs スペキュラーワークフロー
より詳細な説明に入る前に、メタルネスワークフローとスペキュラーワークフローの主要な違いについて理解しておく事は重要です。大半のゲームエンジンはいずれか一方をサポートしています。Toolbag2はどちらの手法もサポートしているので、それらのメリットを直接比較する事ができます。図:メタルネスシェーダー用コンテンツ
2つのワークフローの最も大きな違いは「ディフューズと反射性がどのようにテクスチャ内で定義されているか」です。スペキュラーワークフローでは、これらの値は明確に2つのユニークなテクスチャにセットされています。
一方で、メタルネスワークフローはディフューズと反射性を定義するためにアルベドマップを使っていて、そのマテリアルが金属か絶縁体を定義するためにメタルネスマップを使用しています。この理由は「電気を通す金属は多くの光子(電磁波)が表面上で反射する」事を意味していて、表面を通過した多くの光子は拡散するより吸収されます。よって、金属は通常、拡散要素を持ちません。一方で絶縁体はとても少ない量の光(4%以内)を反射し、マテリアルにヒットしたほとんどのライト情報は拡散あるいは表面を跳ね返って、表面色の色の分散が発生します(?)。
実際には、これはほとんどあるいは全て(もしテクスチャが金属あるいは絶縁体であるがどちらも持たない場合)のディフューズマップあるいはスペキュラマップが無駄な情報になるでしょう。よって、メタルネスワークフローは普通より効率的になります。ですが、同じテクスチャ内にディフューズ要素とスペキュラー要素を格納する欠点の一つはマテリアルの変化によるアーティファクトの発生です。
図:スペキュラーワークフローとメタルネスワークフローの比較図
グロスマップとラフネスマップは同じ情報を定義します、ですが通常互いに逆のスケール値を持ちます。「グロスマップは明るい値ほどスムーズで光沢な表面」を意味しますが、「ラフネスマップは明るい値ほど荒く艶のない(くすんだ)表面」を意味します。幾つかの分野では、"glossiness"という用語は反射性(reflectivity)と同意語とされているので、"roguness"を使う方が混乱を少なくするのではないかと考えてる人もいるようです。ただし、ここで重要な事は「テクスチャをなんと呼ぶか」ではなく「その値が何を表すか」です。もし、まだもやもやしてる場合は、近くのTAやエンジニアと話し合ってみてください。
スペキュラーワークフローの強み
- 拡散と反射率が2つの明確な入力に直接セットされていて、従来のシェーダーで作業経験のあるアーティストにとって理解しやすい。
- 絶縁体の反射性の制御がフルカラー入力で行う事ができる。
- 不正確な結果を引き起こす不合理な反射率を使いやすい(うっかり使ってしまう)
- メタルネスワークフローよりテクスチャメモリを消費する。
- アルベドマップがどのマテリアルであろうがオブジェクトのカラーとして定義されていて、これはアーティストにとって理論的に理解しやすい。
- マテリアルを2つのカテゴリー「絶縁体」と「金属」に分離して簡略化していて、これは非現実なテクスチャ値でコンテンツを表現する際に難易度を下げている(?)
- フルカラーのスペキュラーワークフローよりテクスチャメモリを節約できる。
- マテリアルの遷移点(material transition points?)で白いラインのアーティファクトを引き起こす事がある。
- 絶縁体の反射性を制御しにくい(※1)
- アーテイストがそのワーフフローを理解していない場合、メタルネスマップにおいて容易に不合理な値を使用して、システムを破壊できる。
メタルネスワークフローの方が理解しやすいと主張する人もいますが、個人的には今の所イーブンな印象です。各ワークフロー共にアーティストが不合理なコンテンツを使用した場合、フローが破綻しますし、各アーティストの経験にも依存する所があります。本質的には客観的にどちらが良い手法かと断言する事は難しいと思います。それらは純粋に異なるものなので。
テクスチャ変換:スペキュラー→メタルネス
既に我々は適切にコンテンツを計測できるようになり、2つのワークフロー間の違いも抑える事ができたので、各ワークフロー用のテクスチャに変換する事は実はとてもシンプルです。図:メタルネスマップの作成
まず全てのマテリアルに対してそれらの表面が非金属(黒)か金属(白)かをアサインする事によりメタルネスマスクを作成してください。もしPSDテクスチャを持っている場合は、このメタルネス情報を構築する作業は様々なレイヤーからマスクコンテンツを使用することによって素早く実現できるでしょう。メタルネスマップはほとんどが白か黒の情報を持ち、汚れやほこりそしてさび等のソフトな変遷のエフェクトの場合のみグレー値を持つべきです。ここでのグレー値は部分的にメタリックなマテリアルにも使用できますが、これらは一般的に極めてレアケースです。通常は金属オブジェクトは幾つかのコーティングを持っていて、絶縁体として振舞います。
図:スペキュラーワークフローからメタルネスワークフローへの変換
一旦メタルネスマップを作ったら、Photoshopにおいて新しいファイルを生成して、ディフューズマップを背景レイヤーとして追加してください。そしてTOPにスペキュラーレイヤーを追加してさらにレイヤーマスクを追加してください。次にメタルネスマップをスペキュラーレイヤーのレイヤーマスクにペーストしてください。見るべき点は「金属表面であるスペキュラー要素」と「絶縁体であるディフューズ要素」で、これらは「メタルネスワークフローにおいて適切なアルベドマップを持っているかどうか」を意味します。
テクスチャ変換:メタルネス→スペキュラー
メタルネスワークフローからスペキュラーワークフローに変換するのは同様に簡単です。必要なのはアルベドマップからディフューズ情報とスペキュラー情報を抽出して、明確なディフューズマップとスペキュラーマップに分離する事です。図:メタルネスワークフローからスペキュラーワークフローへの変換
ディフューズマップ
- Photoshopにアルベドマップを読み込みます
- 真っ黒(#000000) のFillレイヤーを新規作成します
- 2で作ったFillレイヤーのレイヤーマスクにメタルネスマップをペーストします
スペキュラーマップ
- オリジナルのアルベドマップを複製してFillレイヤーのTOPに移動します
- 別のFillレイヤーを#383838で新規作成します
- 2で作ったFillレイヤーのレイヤーマスクにメタルネスマップをペーストします
- レイヤーマスクを反転します
比較と否定
ここでは(上で説明した)2つの異なる変換ワークフローの効果を比較してみたいと思います。図:スペキュラーワークフロー、スペキュラー→メタルネスに変換した結果、メタルネスをスペキュラーに変換した結果
注記しておくべき重要な点として「ベースのコンテンツは最初に合理的な値を計測されていたので、その変換プロセスもとても正常に作用している」という点です。もしベースコンテストが正常に計測されていなければ、その変換において大きな結果の差異を引き起こす事になるでしょう。同様に、もしある特定の色つきの反射を持つ絶縁体のようなマテリアル(これは一般的に極めてレアで、通常は髪の毛あるいは虹色マテリアルような特別なマテリアル用のカスタムシェーダーで表現するのが望ましい)を表現する場合、変換プロセスにおいて幾つかの情報を失うでしょう。理想的には、対象のレンダリングシステムのみにコンテンツは生成するべきです。このような変換作業はシステムを変更する場合や古いコンテンツを更新したり、複数のシステム用にコンテンツを生成する必要がある場合のみ使うべきでしょう。
マテリアルロジック
"合理的に正常に計測された値"とは何を意味するのでしょうか?残念ながら、これは答えるのが難しい質問です。なぜなら表現しようとしているマテリアルがどのタイプか依存し、激しく変化するからです。チートシート(cheat sheet)を作成する代わりに「マテリアルロジック(material logic)」と(私が勝手に)呼んでる概念について説明したいと思います。チャートやスキャンデータにこだわるのはちょっとした"精神的支え"にしかなりません。まず、再現したいと思っている全マテリアルのデータを見つけるのは難しいです。よって、自分自身でどの値が適切かを決断する幾つかのロジックが必要になります。次に、同じマテリアルタイプの表面であっても、時期・磨耗・仕上がり等様々な状況に著しく依存して異なってきます。
(この論理を実現する上での)最初のステップは対象オブジェクトが作られているマテリアルの種類が何であるかを理解する事です。多くのオブジェクトにとってこれは非常に簡単で、その見た目を見る事でそれが金属、プラスチック、ゴム等であるかを認識できます。ですが、幾つかのオブジェクトはより複雑で、様々なマテリアルから作られているパーツを含んでいるかもしれません。ここでは「研究があなたの友」となります、リファレンス画像や似たような現実世界のオブジェクトを観察して、特定のオブジェクトがどのように作られてるかを詳しく調べる必要があるでしょう。
図:マテリアルリファレンス画像の例1(カメラ)
一旦、各オブジェクトが何の種類のマテリアルで作られているかを知る事ができれば、結果として様々な結論にたどり着く事ができるでしょう。例えば、金属は絶縁体よりも多く反射しますし、ゴムは一般的にプラスチックより一般的に荒いですし、コンクリートは通常はアスファルトより明るい等・・・です。これらのほとんどはシンプルな観察を通して理解する事ができると思います。 この時点で、あなたは生成したいテクスチャの質についてより具体的に考慮する事ができるようになっていると思います。例えば、塗料はくすんだ質感から光沢のある質感まで様々な異なった仕上がりになる傾向があります。プラスチックも同様で、金属はどのように表面が磨かれてるかに微妙に依存するでしょう。
図:マテリアルリファレンス画像2
結論として、PBRシステムで作業する事は(今までと)同様に、周囲の現実世界のマテリアルを観察し再現するスキルといった、ゲームアートを作る上で常に必要なアーティスティックなスキルが求められます。PBRシステムの基本概念を理解する事は重要ですが、最終的には各アーティストのアーティスティックな直感が必要という事です。
メタルネスワークフロー vs スペキュラーワークフローの項目のメタルネスワークフローの強みの2は「マテリアルが簡略化されているので非現実的なテクスチャを作成してしまうのを回避しやすい。」みたいな意味かな
返信削除