『 AREA JAPANウェブサイト モニタリング 調査 』実施中アンケートにご協力いただいた方全員に、Amazonギフト券(500円分)をプレゼント!

チュートリアル / 宋さんの3ds Max キッチンスタジアム
第25回:フィジカリー ベースドってどうよ

2016.11.14

  • 3ds Max
  • チュートリアル
  • マテリアル・シェーダー・UV
  • レンダリング
  • 中級者
  • 建築・製造・広告
  • 映画・TV

3ds Max 2017がリリースされてもう半年になりますね。
夏にはMaya 2017もリリースされました。
これらの新しいバージョンを もういろいろといじり始めた方も多いと思います。
3ds Maxに関しては今回のバージョンアップには実務的な改良が多く搭載されていますが、その中でも「ARTレンダー」や新しいマテリアルタイプである「フィジカル マテリアル」はインパクトのある新機能といえます。
Maya2017も新しくArnoldレンダラーが実装され、さらに3ds MaxにもArnoldプラグインのプレビュー・リリース版が発表されました。
どちらもPhysically Based Rendering ( 以下 PBR )と呼ばれているものです。
3ds Max のフィジカル マテリアルに関しては、標準レンダラーであるスキャンライン レンダラーやNVidia mental ray、さらにはChaos社のVray3.4以降、Arnold レンダラー(MAXtoAプラグインver0.5のプレビュー・リリース版)でもこのフィジカル マテリアルはサポートされています。

このフィジカル マテリアルはPhysically Based Shader(以下 PBS )と呼ばれているもので、昨今のCGレンダリングプログラムの多くがこの概念を基本にプログラムを構築しています。
GAMEエンジンであるStingrayにおいて標準的に使われるマテリアルもPBSをベースに構築されています。

 

Stingrayで扱うPBSであるStandard Material

多くのWeb記事やブログ、さらには雑誌媒体などでもPBRとかPBSに関して解説しているコンテンツが多く存在します。
でもCG初心者の方や日頃の業務でなかなか英語の解説記事や難しい内容を理解するのは難しいと思いますので、どなたでも理解していただけるように今回からは「PBR、PBSって一体どういうことなのよ」ということを極力わかりやすい形で解説していこうかと思います。

PBR、PBSってなによ?

Physically Based言い換えれば物理ベースのレンダリング プログラム、シェーダー プログラム(マテリアル編集)のことを意味します。
実はmental ray用に用意されたArchi and DesignマテリアルやMayaでよく使われるMIAマテリアル、さらにはAutodesk Materialも物理的な要素をシェーディング プロセスに取り入れたものでした。
ただ、あくまでもそれらはCG黎明期からのマテリアル設定や考え方をベースにしたもので、あくまでもシェーディングの理論をオペレータが解釈した後に各パラメータをコントロールしていくというものです。

最新のレンダリング システムに関しては従来の物理ベースの考え方から一歩前進してプリ レンダリングにもリアルタイレンダリングにも対応したものが求められています。
一見すると処理が複雑になりそうな感じですが、実は物理法則に正しく基づくプログラムであれば、むしろパラメータをよりシンプルにし、計算自体も簡略化させることが可能なのです。

PBSの考え方としては以下の6つのポイントを押さえておけば、とりあえず混乱することなく設定ができるのではないかと思いますので今回のコラムではこの辺を順追って解説していこうと思います。

1. 光エネルギーの保持
2. マイクロサーフェイス
3. メタル
4. フレネル
5. テクスチャーの処理

光エネルギーの保持

拡散反射光と鏡面反射の相互関係

キッチンスタジアムの最初の頃にも記載しましたが、現実世界では 光が物体にあたって反射することで物体の色を認識し確認することができます。

物体にあたった光が反射する要素としては拡散反射光と鏡面反射光があります。鏡面反射の要件としては、物体表面の平滑性が大きな要因となりますが、実は拡散反射も鏡面反射も光の反射ということでは同じ現象を指しているので中身は同じものといえます。

あれ?なんか矛盾しているみたいですね。

物体にあたる光の反射は、拡散反射が強い場合は鏡面反射の値は低く、鏡面反射が強い場合は拡散反射が低くなるわけです。
物体にあたる光の量は同じなわけですからどちらかが強ければ、どちらかは弱くなりますよね。
当然といえば当然です。
電球でないかぎり増幅するって事はあり得ないわけですから。

上図は、フィジカル マテリアルを使ってメタル量を左から少しずつ上げていったものです。
メタル パラメータ以外は基本同じ設定値にしています。反射素材は設定していません。

フィジカル マテリアルはPBSの考えを前提にプログラムされているので反射レベルを上げると必然と見た目が暗い球体に変化していきます。
(実際のカメラに入射する鏡面反射のレベルは鏡面反射全体のごく一部ですから、レンダリングをするとより黒く見えると思います )

また、物体に透過性があった場合はどうでしょう?

透過性が強くなればなるほど拡散反射光は低くなります。
内部拡散が発生するような透過性の場合、つまりCGマテリアルでいうところのサブ サーフェス スキャッタリングのような効果がある場合も拡散反射甲は低くなります。
むかしからガラスの色はを黒くする!というのが一般的ですが、これはこういった理由からです。

旧来のマテリアル・シェーダーの設定では、鏡面反射が強いマテリアルを設定しようとした場合は拡散反射のレベルをマニュアルで下げて鏡面反射成分を上げる作業をしていましたが、フィジカルマテリアルやStingrayマテリアルのようなPBSの場合は、同じ拡散反射のレベルでも鏡面反射の要素を上げると自動的に拡散反射成分が低くなります。
物理的に整合性の取れたシェーダープログラムであれば むしろ今までよりも少ないパラメータでより正しいマテリアル設定が可能になるという一石二鳥なプログラムなのですね、
物理的に正しい設定を行うシェーダーの場合、一般的にパラメータ類が複雑になっていくように思われますが、PBSの場合は逆に少ないパラメータで正しい表現が可能になるわけです。
Stingrayのようなリアルタイムレンダリングの場合は特にパラメータの簡素化は多くのメリットを生みます。

光の吸収

実は光が物体にあたって発生するエネルギーとして拡散反射光と鏡面反射光以外にもう一つとても重要な要素が発生します。それは熱エネルギーです。真夏の海岸に行くと、熱くなった砂浜で火傷した経験のある方は少なくないですよね。
実世界では、光(例えば太陽光)が物体にあたると物体は熱を持ちます。光というのは電磁波だということは過去のコラムを読んでいただいた方であれば理解していると思いますが、電磁波その名前の通り波長を持っているので振動しているわけです。
光は物体にあたるとその物体の分子を揺すり運動エネルギーに変化して熱となります。熱エネルギーに変化しなかったものが拡散もしくは鏡面反射して光として反射していくわけです。

キッチンスタジアムの第5回で「拡散反射レベルを100%近くに設定すると光が飽和して、現実ではありえないレンダリング結果になりますよ」と、お伝えしたのは実はこういった現象と拡散反射と鏡面反射の相互作用が要因です。
つまり100の光がものにあたっても100ではね返ることは“究極の鏡“以外ほとんど存在しないよ、ってことです。

黒色の物体は太陽にさらすとすぐに熱くなりますが、白い物体は暑くはなりますが黒ほど激しく熱を帯びません。白は多くの光エネルギーを反射してしまうのでさほど熱くならないわけですが、それってどういった理由からでしょうか?
ざっくりお答えすると、黒色は熱エネルギーに変化する割合が多く、反射する光エネルギーが少なくなるということです。
この考え方をひっくり返すと、「黒く見える物体は光の可視光線の波長域をほとんど吸収してしまうので、分子の運動が高くなり、熱を発生し熱くなる。そのため反射する光エネルギーの量が減ってしまうので黒く見える」ということです。うううん、物理って面白いです。

物体が透明の属性を持っている場合、の最初のヒットで内部に浸透したエネルギーのうち熱に変化しなかった部分に関しては物体内部で拡散して表面もしくは背面から放出される分もあります。これらがCGでいうところの サブ サーフェス スキャッタリングとして表現される部分です。
従来型の物理シェーダーの場合はサブ サーフェス スキャッタリングは別のマテリアル(シェーダ)として用意されていましたが、フィジカル マテリアルではサブ サーフェス スキャッタリングのパラメータが組み込まれているので、反射・吸収・熱変化の値を包括的にコントロールできのるで、とても便利です。

エネルギーはどのように変化してもその総量が変わることはありませんので、以下のような式が成り立ちます。

「入射する光エネルギー」

「熱に変化するエネルギー」
+
「拡散するエネルギー」
+
「鏡面反射するエネルギー」
+
「内部拡散して再度外部もしくは反対側に透過放出されるエネルギー」