チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第56回:VREDを通してみる「物理ベース」のグラフィック2
- Maya
- ゲーム
- コラム
- チュートリアル
- モデリング
- 中級者
- 学生・初心者
- 教育
- 映画・TV

前回のコラムではVREDでの反射とマテリアルのパラメーターを通して、物理ベースとは何か?というのを見てきました。
「物理ベース」と言われるとアーティストの皆さんはなんだか敬遠したい言葉のように聞こえると思います。しかしVREDを通して見てみると、単に「当たり前のことが当たり前にできる」ということなのだとお分かりいただけたと思います。
今回はさらにそれを実感できる「カメラ」と「カラー」の機能を見ていきたいと思います。(全然Mayaのコラムになっていないところが、若干気になるところでありますが…よしなに)
カメラの露出
最近のカメラは特に何も考えなくても、自動的にいいカンジな写真が撮れます。一眼レフのようなカメラになってくると「露出」を自由に操作できるようになります。
現実世界は「明るさ」の範囲がとても広く、真っ暗なブラックホールから、太陽のような明るい光までありとあらゆる明るさがあります。露出は、あまりに広い明るさの範囲を、フィルムやモニタ、プリント用紙にあった範囲に調整する機能でもあります。(いわゆる「トーンマッピング」です)
例えば太陽を撮ってプリントします。プリントした太陽は紙の最も明るい部分(白い部分)でありますが、現実の太陽のように周りを照らすことはありません。紙の明るさの範囲は非常に狭いのです。露出は太陽や空の明るさを、紙にプリントできる程度にそれっぽく調整するわけです。

3DCGの世界にもカメラがありますが、Mayaを使っていて「露出」というような値を意識することはあまりないです。擬似的なカメラの中では露出を気にすることなくレンダリングできます。
露出とは
・ レンズの開放具合
・ シャッターのスピード
・ フィルムの感度
のことを言います。
VREDでは現実のカメラと同じ露出設定を行えます。トーンマッピングというところでカメラの「FStop(レンズの開放具合)」「Shutter Speed(シャッターのスピード)」「ISO(フィルムの感度)」を設定します。

レンダリング画像の明るさも、実際のカメラで設定・撮影した時と同じような明るさになります。

とてもおもしろいことにこれらの値は非常に現実的でして、設定した値に合わせてレンダリング画像のボケ具合やモーションブラーの具合が変化します。

「実際のカメラで設定した時と同じ」
これがとても重要である理由が2つあります。
ひとつは「現実世界でのカメラの経験を活かせる」ことです。
カメラの経験が生かせるということは、CGの世界の妙なルールに合わせることなく、一般で販売している写真テクニックの本を参考にして画作りを出来るということです。
本職のカメラマンの経験をそのまま活かせるので、ゲームにもフォトリアルな感覚を取り込めるわけです。これは非常に重要です。
上のレンダリング画像を作るのに、自分の写真経験+ウェブの写真と露出データを参考に、カメラの設定を決めました。参考にするものが多いほど、あっという間に作業が終わります。
ふたつ目の理由は「ライティングが正しいかどうか判定できる」ということです。
現実のカメラの経験がある方は、カメラの露出設定と撮ろうとしているシチュエーションから、大体この設定ならこのぐらいの明るさ、ボケ具合になるというのが想像できます。 VREDでカメラの露出を設定して、もし対象物が思った明るさにならなければ、CGの環境内のライト、マテリアルの設定がおかしいということに気づきます。経験に基づいてCGのどの部分がおかしいか直感的にわかるわけです。フォトリアルな画作りをする上で、問題点を的確に把握することは重要です。
現実世界の明るさとは?
紙は「紙の白さ」が明るさの上限となります。
モニタは「ブライトネスを最大にした明るさ」が上限となります。
3DCGソフトの内部はどうでしょうか?ただの数字で色を表していますから、いくらでも明るいものを扱えます。ということは現実世界の明るさと同じ明るさを扱えます。

VREDの中でカメラの露出を変えると現実世界と同じように明るさが変わります。ということはVREDの内部では現実世界と同じように明るさが再現されているということです。
3DCGソフトの中でテクスチャもライトもマテリアルも何もかも、現実と同じ明るさで扱う。これが最近良く話題に出る「リニアワークフロー」というものです。(とりあえずそう捉えておけば大丈夫です!)
「リニア」は直線という意味で、ここでは変な補正を行っていない純粋な明るさ、という意味です。「現実世界と同じ明るさ」と考えると覚えやすいです。
VREDでは読み込んだテクスチャを自動的に変換して、現実世界の明るさに変えています。ですので、カメラの露出を変えると現実世界と同じようなフォトリアルな見え方をしたわけです。
(Maya2015 Extension1でもColor Managementが行えるようになりました。リニアワークフローを簡単に利用できるようになっています!)
3DCGソフト内の明るさの値が適当だとどうやっても現実と合いません。現実世界の明るさを扱うことは、物理ベースの基本となるわけです。
物理的なライトの明るさ
電球を買いに行くと「60W」など書かれています。と同時に「810lm」などと書かれています。(ウェブでLED電球を調べてもらうとすぐにlmという表示を見かけることでしょう)
…さて、では3DCGのライトに同じ明るさを設定しようとしたらどうしたらよいでしょうか?よくよく考えてみると簡単な方法がありません。Mayaではライトの明るさは「Intensity」であり、デフォルトで1.0です。このライトで白いマテリアル(Diffuseも1.0)を照らすと白になる、という数字です。CGの中では問題ないのですが、フォトリアルに現実の電球で照らそうとすると困りますね。

「lm」はルーメンという単位で、現実世界の光を表すのに一般的に使用される値です。VREDではこのルーメン値でライトの明るさを指定できます。

ということは「810」と入力すれば電球の明るさがVREDに再現されるわけです。明るさの指定がルーメン、もしくはカンデラやルクスという現実の値で設定できること、これも物理ベースのライトといえます。ついでに色を「色温度」で設定できるので、現実のケルビン値をもとに色を設定できます。
あと、昔から言われていることで「面積のある光源を使う」というのも重要です。
いわゆるポイントライトというのは点から光が出ますが、現実世界では電球は丸いあの形全体が光ります。
エリアライト(面光源)は昔からこの問題を対処するために使用されてきました。ゲームで使用されることはほぼありませんが、映像系やVREDのようなハイエンドのレンダリングではエリアライトを使用します。
面積のあるライトを使う、これも物理ベースのライトの重要な点です。
下図は球状の光源で明るさ810lm、色は2800ケルビンで室内を照らした例です。

波長で色を設定
最近話題の青色LED。クリスマスイルミネーションでもここぞとばかりに青色LEDがたくさん使われて、寒い冬を更に寒々しく演出しております:)
赤と緑のLEDは昔からありましたが、青色を作るのがなかなか難しかったとか。赤緑青(RGB)がそろえば、皆さん御存知の通り白色が出来上がります。白色LEDはまさにRGBのLEDが組み合わさって白色になっています。
その白色LEDで面白い実験ができます。自転車に付いているLEDライトなどで食べ物を照らしてみると、なぜかマズそうに見えるはずです…。下図の左が白色LEDで、右は普通の蛍光灯で撮影したものです。適当な写真なので特別マズく見えますが、なんとなく様子はわかっていただけると思います。

どうしてマズそうに見えるかというと、LEDの白は他の光の白と異なるからです。
虹は綺麗な七色のグラデーションになります(見る人によっては七色ではないそうですが…)。虹は太陽の光を分解したもので、太陽の明かりは実は七色で出来ています。学校でプリズムを習いましたが、あれですね。
ところがRGBで白を作れるということは、七色も必要ないのです。「赤・橙・黄・緑・青・藍・紫」のうち「赤・緑・青」があれば白く見えます。白色LEDはこの状態です。でも「橙・黄・藍・紫」が欠落しているので、太陽のような白とは異なる白なのです。そしてこの欠落している色が、本来食べ物を美味しそうに見せている色なのです。
下図はVREDで設定した、白色を表すスペクトルです。どちらも白色ですが、七色の波長は全然違います。

これが、自転車の白色LEDで食べ物を照らすと不味そうに見える原因です。(リビング用のLEDはそこのところが考慮されているので、マズそうに見えることは無いです)
赤い色の車を異なる「白」でライティングした結果が次の図です。いくつかの色が欠落している白色では、赤が正しく再現されず、橙色に見えます。もしゲームのキャラがLEDライトを持ってガレージを歩いていたとすれば、赤い車が橙色に見えるほうが正しいというわけです。

光の波長だけでなくマテリアルの色も七色の波長からできています。光とマテリアルの色は単純に混ざり合うのではなく、それぞれの波長が複雑に混ざって色ができます。スペクトルでレンダリングすると、RGBでは再現されない細かい色の変化が再現されます。
スペクトル、つまり色の波長でレンダリングすること、これも物理ベースのレンダリングで重要なことです。さすがに今のリアルタイムのCGでは難しいですが、今後使われることがあるかもしれません。
まとめ
というわけで二回にわたってざっと「物理ベース」とはどういうことなのかを見てきました。物理ベースのすべてを網羅しているわけではないですが、改めてキーワードをまとめるとこんな感じです。
・ 物理ベースマテリアル 変なパラメーターを設定できないマテリアル。
・ 物理ベース反射 レイトレーシングの反射・屈折。
・ 物理ベースライト ルーメンなどで明るさ設定。面積のあるライト。
・ 物理ベースの色 色温度での設定。スペクトルでの色設定。リニアワークフロー(現実の色で処理)。
→すべて合わされば「物理ベースレンダリング」
結局のところ、何をもって物理ベースレンダリングと言うかは曖昧なもので、すべて物理的に正しく無いといけないかというとそういうわけでもありません。目標は物理的に正確なレンダリング、でも現実的には無理なので、〇〇と△△を物理的にしたので、物理ベースレンダリングだ!となることが多いです。
とりあえずの入門知識としては、これだけ知っているアーティストがいるとプロジェクトで重宝されることまちがいなしです。
ゲームのプロジェクトで物理ベースレンダリングを採用するときは、次の順序で対応していくことになるでしょう。
1) 物理ベースの色(リニアワークフローの部分のみ。物理ベースの根幹になるため)
2) 物理ベースマテリアル(マテリアルがむちゃくちゃだと、色も全てむちゃくちゃになってしまうため)
3) ポストエフェクト(1,2だけだと画がつまらないものになってしまうので、画の加工が必要)
4) 物理ベースのライト、反射などゲームにとって重要な物
(物理ベースが進めば進むほど、アーティスティックに画作りしづらくなります。パラメーターも小難しいですし。将来いつかの時点で揺り返しが来て、もうちょっと融通の効くパラメーターに戻すことになると思われます。)
高いレベルで物理ベースレンダリングを実現しているVREDのおかげで、様々な実例をお見せできました。直感的に分かっていただけたら幸いです。とかく難しく説明するには事欠かない物理ベースの話ですから、直感的に「便利なもの」「現実に則したもの」とわかっていただけると、日常の作業でも役に立つ知識となると思います。
それと今年の終わりのおまけに、皆さまに一足先にハッピーニューイヤーカード(画像?)をお送りいたします。

「羊の絵を描くのは、微妙に難しく面倒」という我々夫婦意見の一致のもと、3Dプリンタを使用して作成したものです。123D DesignというオートデスクのフリーCADソフトで大まかな形を作り、これまたフリーのMeshmixerを使って羊のボコボコを作りました。
123D Desgin http://www.123dapp.com/design(CAD)
Meshmixer http://www.123dapp.com/meshmixer(メッシュ編集)

ぜひ3D好きな皆様方、お正月はこたつにミカンとオートデスクのフリーソフトで3DCGをお楽しみください。データはThingiverseという3Dプリントデータがたくさん上がっているサイトに上がっておりますので、ご興味があればどうぞ。
Thingiverse http://www.thingiverse.com/thing:591404

ではみなさん良いお年を!