チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第55回:VREDを通してみる「物理ベース」のグラフィック
- Maya
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
今年はコンシューマゲーム機が一新し、レンダリング品質もますます向上してきています。それに伴いよく耳にするのが「物理ベース」なる用語。みなさんもなんとなく意識することが増えた言葉ではないでしょうか。
「物理ベースマテリアル」
「物理ベースライティング」
「物理ベースレンダリング」
…ついでに「リニアとガンマ」
なんとなくこうして見てみると、はたして一体なんのことなのかよくわからなくなってきて、ダマされそうな感じがします。よくわからないけどとりあえず写実なレンダリングのゲームを見かけたら、「これは物理ベースだね」と言っておけば間違いないような、ちょっと怪しい感じです。実際「物理ベース」というものの定義が曖昧で、何によって物理ベースと行っているのかは、ゲームエンジンや人によってマチマチです。
ところで、本連載はMayaのコラムなのですが、実は最近Mayaを触る機会が減っていまして…。代わりに「Autodesk VRED」なるものをいじくっています。このVREDはMayaのGUIに感覚が似ていて、Mayaが使える方なら1時間触れば使いこなせそうなぐらい使用感が似ています。そんなVREDはビジュアライゼーションのソフトでして、工業製品、車、インテリア、建物などを本物のように綺麗にレンダリングできます。しかも簡単な設定で。リアルタイムでレイトレーシングを行うので、反射の品質もとても良いです。
面白いのはクラスタでのレンダリングです。100台以上のレンダリングノードをつないでレンダリングすれば、レイトレーシング+グローバルイルミネーションのシーンを数秒でレンダリングでき、かなりパワフルです。私はこれを「マッチョなソフト」と呼んでいます:)
Mayaで例えれば、モデリングビューで、プリレンダ並みのクオリティの絵が常に表示され、バックグラウンドでは大量のレンダリングノードがシーンをレンダリングしている、という状態です。
そんなパワフルなVREDですが、だれでも簡単に使えるビューワのような使い勝手なので、レンダリングの仕組みや仕様について特別意識することはありません。よくよくパラメーターを見てみると、ライトのIntensityをカンデラ表示にできたり、カメラのシャッタースピードが設定できたりと、現実世界のパラメーターがちらほら出てきます。実は物理ベースで動いているのです。物理ベースが基本なので、むしろ空気のように気付かずにいつの間にか使っている、という状態です。
こんなVREDで写実なレンダリングを行っていると「こういう事ができれば物理ベースなのか」というのが肌でわかってきます。
今回はそんなノリで、肩肘張らず、VREDの機能を見ながら物理ベースとは何かを見て行きたいと思います。結果として、最近言われている「物理ベースのなにがし」がどういうものか、わかりやすく想像できるのではないかと思っています。
では、目についたところから適当にピックアップしています。
車のような反射が多いもので顕著です。環境マップと違い、カメラが近づいても反射しているものの解像度が落ちることもなく、極めて鮮明に反射します。車体自身が映り込む場合、相互に複雑な反射をして、更にリアリティが増します。
環境マップは、反射物が周りの物に遮蔽されているかどうか関係なく環境マップを反射してしまい、暗いところもやたらと明るくなる傾向にあります。次の画像の黄色い丸部分に注目してみてください。環境マップだと空が映り込んでいます。レイトレーシングなら遮蔽が正しく再現され、車体が映り込んで暗くなります。
画像ではアンビエントオクルージョンが効いていて、違いがちょっとわかりにくいですが、カメラが動くと反射部分も動くのでより顕著に違いが現れます。
どうもいつもの癖で、反射=マップを使わなければ!と思ってしまいがちですが、たまには疑って見るのも重要ですね。最近はハードウェアでのレイトレーシング技術も出てきていますので、ゲームで反射をレイトレーシングするのが当たり前になる日も近いかもしれません。
レイトレーシングは物理的に正確な反射・屈折ですので、物理ベースと呼べるものです。物理ベースの反射・屈折、とでも呼べばよいでしょうか。
Diffuseは光の吸収具合を表すパラメーターです。別の言い方をすると、マテリアル自身の色がどのぐらい見えるかの値です。0なら光を返さない、自分の色を返さない、となり黒くなります。ブラックホールや、純粋な鏡がそれに当たります。
朝に皆さんが洗面台で見ている鏡の、鏡自体の色が思い浮かびますでしょうか?自分の顔が写っているだけで、鏡自体の色はわかりません。つまりDiffuseは0に近く、代わりにReflectivityの値が高くなります。
物理的に正しい現象を考えるとそんな感じです。でもMayaは簡単に嘘をつける、アーティストが自由にデザインできるマテリアルを用意しています。もし写実な見た目を作りたければ、正しいマテリアルの知識でもって、正しい値を入れるようにしなければいけません。
一方VREDでは、こんなマテリアルが用意されています。
Mayaでは「Lambert」「Phong」「Blinn」という、シェーディングの計算方法に基づいたマテリアルがあります。VREDでは「素材」に応じた様々なマテリアルが用意されています。「Glass」「Chrome」「Plastic」といった感じで。
パラメーターもMayaと異なり、マテリアルごとにパラメーターが変わります。Glassでは、メディウムを選ぶことで、自動的に屈折率が決まります。ポリシリコンやダイヤモンドは現実世界に存在するものですから、おのずと屈折率などが決まります。
パラメーターで「嘘をつけない」ようになっています。この方が物理的に正しいのです。だれでも同じ品質のマテリアルを作ることができますし、計算上変なことも起きないので、画面全体の質感のまとまりも出てきます。
「物理ベースのマテリアルとは、エネルギー保存の法則がうんたらかんたら…」という風に、厳密に考え始めるとちょっとややこしいですので、ここはひとつ単純に考えましょう。VREDのマテリアルのように、パラメーターで嘘がつけない、物理的に正しい計算が行われるマテリアル、それが、物理ベースのマテリアルとしておきましょう。
・小物、キャラ、それぞれで作ったアーティストが、好きにマテリアルを作ってアサイン。
・「アーティスティックなパラメーター設定」で見た目を調整する。
・ゲーム中に表示してみると、特定のモデルだけ妙な見た目でレンダリングされる。
(この時点で、マテリアルがおかしいと気づけばまだ良いのですが、よりエスカレートして…)
・モデルの見た目を直すために、背景(環境)のライティイングを変更。
・なんとか辻褄あわせはできたが、設定がかなりピーキーになる。
・背景のライティングが変わったので、モデルのマテリアルの設定も変更。
・結果、すべてのマテリアル、ライティングのパラメーターが「おかしい」状態になる。
・誰もライティングの調整ができなくなる。
意外と多くの方が経験ありだと思います。
この問題がどこに起因するかというと、ひとえに「アーティスティックなパラメーター設定」の部分にあります。
次のMayaのマテリアルは、見た目には同じように見えます。
左のLambertは、
Color = 1.0, 1.0, 1.0
Diffuse = 0.5
です。
これは「白地のマテリアルが、半分だけ光を返す」という意味です。
一方右のLambertは、
Color = 0.05, 0.05, 0.05
Diffuse = 10.0
です。
計算上はColor * Diffuseなので、左のLambertと見た目が同じです。
が、意味合いとしては「黒地のマテリアルが、来た光を10倍にして返す」という意味になります。
これは明らかに物理的におかしいですね。来た光を増幅して返しているわけですから。
さて、ここでAmbient Colorを0.5, 0.5, 0.5の灰色にしてみます。ゲーム中のシーンの環境設定で、シーン全体を明るくしようとAmbient Colorを変更したと思ってください。
なんだかずいぶんと違いが出ています。
Ambient Colorを0.5にするということは、マテリアルの色が半分明るくならなければいけません。
困ったことに、右のLambertは地の色がほぼ黒なので、Ambientで明るくしようとしても、もとが黒いので明るくなりません。これではシーン全体での調整が不可能です。
もしこれが物理ベースのマテリアルだったらどうでしょうか?
Diffuse=10.0というむちゃくちゃなことができないはずなので、この問題が起きなかったはずです。たくさんのアーティストがデータを作る場合、アウトソーシングで様々な状況で作業をする場合、マテリアルのパラメーター設定は人によってマチマチです。正しいマテリアルの知識がなければ、うっかり変な値を入れてしまうのは仕方がありません。
物理ベースのマテリアルなら各々の知識に頼らずに、安全にデータを作れるわけです。見た目を写実にするためだけでなく、データ管理上でもこの考え方が重要です。
オブジェクトがすべて物理ベースのマテリアルであれば、どこで誰が作ったデータか意識することなく、背景シーンに配置してライティングしてもおかしな結果になることはありません。データチェックの手間が省け、コストの削減につながるというわけです。しかも見た目はよりリッチになるという、なかなか美味しい話です。
というわけで、Mayaでマテリアルを設定するのに不要にアトリビュートをいじれなくするために、エクスプレッションなどで、自動的にアトリビュートを設定することもできます。例えばReflectivityを変更すると、エクスプレッションやドリブンキーでDiffuseを自動的に変更する、という感じで。
変な値が入っていないか、制作途中でチェックを行うツールをMELで作っておくというのもとても有効です。
変な値が入らない様にしたマテリアルも、物理ベースといえば物理ベースかもしれません。
知恵を出せば、コストを抑えてクオリティを上げる方法というものが、まだまだ落ちているものですね。
次回も引き続き、VREDを通して「物理ベース」について考えていきます。
「物理ベースマテリアル」
「物理ベースライティング」
「物理ベースレンダリング」
…ついでに「リニアとガンマ」
なんとなくこうして見てみると、はたして一体なんのことなのかよくわからなくなってきて、ダマされそうな感じがします。よくわからないけどとりあえず写実なレンダリングのゲームを見かけたら、「これは物理ベースだね」と言っておけば間違いないような、ちょっと怪しい感じです。実際「物理ベース」というものの定義が曖昧で、何によって物理ベースと行っているのかは、ゲームエンジンや人によってマチマチです。
ところで、本連載はMayaのコラムなのですが、実は最近Mayaを触る機会が減っていまして…。代わりに「Autodesk VRED」なるものをいじくっています。このVREDはMayaのGUIに感覚が似ていて、Mayaが使える方なら1時間触れば使いこなせそうなぐらい使用感が似ています。そんなVREDはビジュアライゼーションのソフトでして、工業製品、車、インテリア、建物などを本物のように綺麗にレンダリングできます。しかも簡単な設定で。リアルタイムでレイトレーシングを行うので、反射の品質もとても良いです。
面白いのはクラスタでのレンダリングです。100台以上のレンダリングノードをつないでレンダリングすれば、レイトレーシング+グローバルイルミネーションのシーンを数秒でレンダリングでき、かなりパワフルです。私はこれを「マッチョなソフト」と呼んでいます:)
Mayaで例えれば、モデリングビューで、プリレンダ並みのクオリティの絵が常に表示され、バックグラウンドでは大量のレンダリングノードがシーンをレンダリングしている、という状態です。
そんなパワフルなVREDですが、だれでも簡単に使えるビューワのような使い勝手なので、レンダリングの仕組みや仕様について特別意識することはありません。よくよくパラメーターを見てみると、ライトのIntensityをカンデラ表示にできたり、カメラのシャッタースピードが設定できたりと、現実世界のパラメーターがちらほら出てきます。実は物理ベースで動いているのです。物理ベースが基本なので、むしろ空気のように気付かずにいつの間にか使っている、という状態です。
こんなVREDで写実なレンダリングを行っていると「こういう事ができれば物理ベースなのか」というのが肌でわかってきます。
今回はそんなノリで、肩肘張らず、VREDの機能を見ながら物理ベースとは何かを見て行きたいと思います。結果として、最近言われている「物理ベースのなにがし」がどういうものか、わかりやすく想像できるのではないかと思っています。
では、目についたところから適当にピックアップしています。
反射のリアリティ
ゲームでは反射をキューブマップやスフィアマップ、いわゆる環境マップで行います。VREDではレイトレーシングでレンダリングすることが普通です。改めてVREDでレイトレーシングされた反射を目の当たりにすると、物の重さや、光り方が全然違うということに気づきます。世の中たくさんのものが弱かれ強かれ反射をしており、これらがすべて正確に反射することで画面のクオリティが一段階変わってくると、改めて感じます。車のような反射が多いもので顕著です。環境マップと違い、カメラが近づいても反射しているものの解像度が落ちることもなく、極めて鮮明に反射します。車体自身が映り込む場合、相互に複雑な反射をして、更にリアリティが増します。
環境マップは、反射物が周りの物に遮蔽されているかどうか関係なく環境マップを反射してしまい、暗いところもやたらと明るくなる傾向にあります。次の画像の黄色い丸部分に注目してみてください。環境マップだと空が映り込んでいます。レイトレーシングなら遮蔽が正しく再現され、車体が映り込んで暗くなります。
画像ではアンビエントオクルージョンが効いていて、違いがちょっとわかりにくいですが、カメラが動くと反射部分も動くのでより顕著に違いが現れます。
どうもいつもの癖で、反射=マップを使わなければ!と思ってしまいがちですが、たまには疑って見るのも重要ですね。最近はハードウェアでのレイトレーシング技術も出てきていますので、ゲームで反射をレイトレーシングするのが当たり前になる日も近いかもしれません。
レイトレーシングは物理的に正確な反射・屈折ですので、物理ベースと呼べるものです。物理ベースの反射・屈折、とでも呼べばよいでしょうか。
マテリアルのリアリティ
Mayaのマテリアルは、ユーザーがパラメーターを自由に変えることができるようになっています。Diffuseを-1にしたり、10とか1以上の値にしたりすることもできます。Diffuseは光の吸収具合を表すパラメーターです。別の言い方をすると、マテリアル自身の色がどのぐらい見えるかの値です。0なら光を返さない、自分の色を返さない、となり黒くなります。ブラックホールや、純粋な鏡がそれに当たります。
朝に皆さんが洗面台で見ている鏡の、鏡自体の色が思い浮かびますでしょうか?自分の顔が写っているだけで、鏡自体の色はわかりません。つまりDiffuseは0に近く、代わりにReflectivityの値が高くなります。
物理的に正しい現象を考えるとそんな感じです。でもMayaは簡単に嘘をつける、アーティストが自由にデザインできるマテリアルを用意しています。もし写実な見た目を作りたければ、正しいマテリアルの知識でもって、正しい値を入れるようにしなければいけません。
一方VREDでは、こんなマテリアルが用意されています。
Mayaでは「Lambert」「Phong」「Blinn」という、シェーディングの計算方法に基づいたマテリアルがあります。VREDでは「素材」に応じた様々なマテリアルが用意されています。「Glass」「Chrome」「Plastic」といった感じで。
パラメーターもMayaと異なり、マテリアルごとにパラメーターが変わります。Glassでは、メディウムを選ぶことで、自動的に屈折率が決まります。ポリシリコンやダイヤモンドは現実世界に存在するものですから、おのずと屈折率などが決まります。
パラメーターで「嘘をつけない」ようになっています。この方が物理的に正しいのです。だれでも同じ品質のマテリアルを作ることができますし、計算上変なことも起きないので、画面全体の質感のまとまりも出てきます。
「物理ベースのマテリアルとは、エネルギー保存の法則がうんたらかんたら…」という風に、厳密に考え始めるとちょっとややこしいですので、ここはひとつ単純に考えましょう。VREDのマテリアルのように、パラメーターで嘘がつけない、物理的に正しい計算が行われるマテリアル、それが、物理ベースのマテリアルとしておきましょう。
ゲームでのマテリアル管理
ゲーム開発でよくみかける、マテリアルにまつわる問題を物理ベースのマテリアルは解決します。例えばこんなシチュエーションを想像してみてください。・小物、キャラ、それぞれで作ったアーティストが、好きにマテリアルを作ってアサイン。
・「アーティスティックなパラメーター設定」で見た目を調整する。
・ゲーム中に表示してみると、特定のモデルだけ妙な見た目でレンダリングされる。
(この時点で、マテリアルがおかしいと気づけばまだ良いのですが、よりエスカレートして…)
・モデルの見た目を直すために、背景(環境)のライティイングを変更。
・なんとか辻褄あわせはできたが、設定がかなりピーキーになる。
・背景のライティングが変わったので、モデルのマテリアルの設定も変更。
・結果、すべてのマテリアル、ライティングのパラメーターが「おかしい」状態になる。
・誰もライティングの調整ができなくなる。
意外と多くの方が経験ありだと思います。
この問題がどこに起因するかというと、ひとえに「アーティスティックなパラメーター設定」の部分にあります。
次のMayaのマテリアルは、見た目には同じように見えます。
左のLambertは、
Color = 1.0, 1.0, 1.0
Diffuse = 0.5
です。
これは「白地のマテリアルが、半分だけ光を返す」という意味です。
一方右のLambertは、
Color = 0.05, 0.05, 0.05
Diffuse = 10.0
です。
計算上はColor * Diffuseなので、左のLambertと見た目が同じです。
が、意味合いとしては「黒地のマテリアルが、来た光を10倍にして返す」という意味になります。
これは明らかに物理的におかしいですね。来た光を増幅して返しているわけですから。
さて、ここでAmbient Colorを0.5, 0.5, 0.5の灰色にしてみます。ゲーム中のシーンの環境設定で、シーン全体を明るくしようとAmbient Colorを変更したと思ってください。
なんだかずいぶんと違いが出ています。
Ambient Colorを0.5にするということは、マテリアルの色が半分明るくならなければいけません。
困ったことに、右のLambertは地の色がほぼ黒なので、Ambientで明るくしようとしても、もとが黒いので明るくなりません。これではシーン全体での調整が不可能です。
もしこれが物理ベースのマテリアルだったらどうでしょうか?
Diffuse=10.0というむちゃくちゃなことができないはずなので、この問題が起きなかったはずです。たくさんのアーティストがデータを作る場合、アウトソーシングで様々な状況で作業をする場合、マテリアルのパラメーター設定は人によってマチマチです。正しいマテリアルの知識がなければ、うっかり変な値を入れてしまうのは仕方がありません。
物理ベースのマテリアルなら各々の知識に頼らずに、安全にデータを作れるわけです。見た目を写実にするためだけでなく、データ管理上でもこの考え方が重要です。
オブジェクトがすべて物理ベースのマテリアルであれば、どこで誰が作ったデータか意識することなく、背景シーンに配置してライティングしてもおかしな結果になることはありません。データチェックの手間が省け、コストの削減につながるというわけです。しかも見た目はよりリッチになるという、なかなか美味しい話です。
というわけで、Mayaでマテリアルを設定するのに不要にアトリビュートをいじれなくするために、エクスプレッションなどで、自動的にアトリビュートを設定することもできます。例えばReflectivityを変更すると、エクスプレッションやドリブンキーでDiffuseを自動的に変更する、という感じで。
変な値が入っていないか、制作途中でチェックを行うツールをMELで作っておくというのもとても有効です。
変な値が入らない様にしたマテリアルも、物理ベースといえば物理ベースかもしれません。
まとめ
まずはレイトレーシングでの反射と、マテリアルについて、物理ベースとは何なのか、物理ベースで何が良くなるか見てきました。見た目だけでなく、データ管理の観点からも非常に便利なものだとお分かりいただけたのではないでしょうか?知恵を出せば、コストを抑えてクオリティを上げる方法というものが、まだまだ落ちているものですね。
次回も引き続き、VREDを通して「物理ベース」について考えていきます。