ハリウッドVFX業界就職の手引き

ハリウッドVFX業界就職の手引き
鍋潤太郎氏による、海外のVFX業界で働くための手引き。お薦めです。

2014年1月17日金曜日

ライティングしてみる その5

すでに1月も半ばを過ぎてしまいましたが、新年明けましておめでとうございます。のっけからですが、去年の投稿の改正です。大晦日の投稿でも申し上げましたが、「ライティングしてみる その3」で、Open EXRで採用されている16bit float (half) について、「16bitのうち、1bitが符号に、5bitが露出に、そして10bitが実際の色情報の保持に割り当てられ、30-stopの輝度情報が保持可能とされています。すなわち16bitのEXRは厳密にはfloatというよりも最も効率よくHDRIを保存するために考えられたフォーマットと言っていいでしょう」という記述について、この16bitの構成を持ってそれ自体が浮動小数点を表します、とのご指摘をコメントでいただきました。これはWikipediaに詳しい説明があるので、それをご覧になって頂いた方がいいと思います。

http://ja.wikipedia.org/wiki/半精度浮動小数点数

実はOpen EXRのウェブサイトにはこの16bit float形式に関して、以下の様な記述があります。

For linear images, this format provides 1024 (210) values per color component per f-stop, and 30 f-stops (25 - 2), with an additional 10 f-stops with reduced precision at the low end (denormals).

このため「効率よくHDRIを保存するために考えられたフォーマット」という表現をしましたが、正確さにかけたようですので、ここに改正させて頂きます。



ライトのセットアップ

さて、今回は実際のライティングとレンダリングに関してお話しさせて頂きます。まず前提としたシチュエーションですが、参考にしたメーガン・フォックスの写真が、MTV Movie Awardsというイベントでのプレス向けの撮影で撮られたとおぼしきものでしたので、それに似た様な設定にしてみました。まずオープン・スペースのイベント会場と似た感じのHDRIを用意し、mental rayのIBL(イメージ・ベースド・ライティング)ノードにアサインします。そしてこのHDRIの主光源(太陽)のある方向と同じ方向にディレクショナル・ライトを1灯設定します。これはHDRIだけではさすがにインテンシティが足りないためで、これがこのシーンのキーライトになります。また、こうしたイベントの撮影ではあらかじめスタジオ・ライトが設置されていることが多いので、3つのエリア・ライトを作成し、人物の身長よりもやや高めの位置に設定しました。以下がこのシチュエーションのスクリーンショットです。


3つのエリア・ライトにそれぞれお椀状のジオメトリがついていますが、これはスタジオライトとして良く使われるアンブレラ・ライトを模倣するためのもので、このジオメトリに本物のアンブレラ・ライトを撮影して作ったHDRI(以前ご紹介したHDRLabsでダウンロードできます)をテクスチャとしてはり、リフレクションに利用しています。これが実際にどんなものかは、「ライティングしてみる その4」でご紹介したスキン・シェーダーのテスト用のムービーをみて頂くとわかりますが、キャラクターの周りを回っているライトがまさにそのアンブレラ・ライトです。

また、メーガン・フォックスの画面右隣にダミー人形の様なものがありますが、これは単に影を落とすためのものです。メーガン・フォックス以外のキャラクターはめんどくさくて作りたくなかったのですが、イベント会場ということですので周りにそれなりに人がいる雰囲気を作り出さないといけません。そこでこのダミーを置いて、背景の板にその影を落とすことで、間接的に彼女の隣にも他の映画スターがいる様な雰囲気を出している訳です。ところでこうした影ですが、基本的にはよほどの事情がない限りレイトレースで計算した方がいいでしょう。かつてはRenderManに代表される様に、デプスマップをメインに使って影を計算する方法が主流だった時代もありましたが、今はあまり有効な手段とは言えません。デプスマップはコンピュータの計算速度が今よりもはるかに遅かった時代には計算コストを減らすための有効な手段でしたが、一方でソフトネスの減衰を正確に表現しづらい、細かいパーツで構成されているモデルに対してバイアスの調整が難しいなど、デメリットも多く、レイトレースの影がそれほど割高ではない現代にあっては積極的に利用する意味はあまりありません。特にレイトレースをベースに設計されている多くのレンダラーではデプスマップ・シャドウはオプションとして用意されてはいるものの、レイトレースの影を使うことを推奨するようになっているはずです。

レンダリング・パス

以前とある方から「グローバル・イルミネーションが主流になったので、レンダリングをパスに分けることってあまりやらないですよね」といった様なご質問を受けたことがあります。これは恐らくシーン中のオブジェクトがそれぞれ間接照明の役割を果たすようになったので、レンダリングをパスに分けるのが難しくなったのではないか、といった仮定をもとにそのような質問をされたのだろうと思いますが、実際にはレンダリングのパスを分けることは、昔と変わりなく、というよりもむしろ更に頻繁に要求されるようになりました。私がSony Pictures Imageworksで働いていた時のことですが、SonyではKatanaというライティング用のツールと、Arnoldというパストレース・レンダラーを使ってライティングしているのですが、これらのツールで何十ものパスを分けてレンダリングするのが当然のように行われていました。Katanaはリード・アーティストが作ったテンプレートを元にショット・ライティング用のシーンを自動的にセットアップしてくれるのですが、このテンプレートが既に莫大な数のレンダリング・パスを生成するようにあらかじめ設定されていて、上がってきたレイヤーの数にたまげたことがあります。

このように大量のパスを作るようになった理由は、やはりコンポジットの段階でかなりの調整をすることに由来します。Nukeの様な高機能なコンポジット・ツールを駆使することで、レンダリングだけでなく、コンポジットの段階でも更にレベルの高いリアリズムを得られるようになってきたことから、特に実写のVFX系ではパスを多く分ける傾向にあります。また、ある種のグローバル・イルミネーションやサブ・サーフェース・スキャッタリングなどの高度なレンダリング・テクニックは、正確な計算をしようとするとコストが高くつくため、うまく計算をはしょって近似値を求めている場合があります。そうした場合は、コンポジットで最終的な詰めを行わないと、リアルな絵になりづらい、ということもあるでしょう。

レンダリングのパスを分ける場合、大きく分けて2つの考え方があります。1つはシーン中のアセット・グループ毎にパスを分ける、というもので、これはむしろレイヤー分けといった方がピンとくるかもしれません。一番一般的な考え方は背景とキャラクター、といった分け方で、コンポジットのでの調整がやりやすいだけでなく、一度に全てをレンダリングするよりも負荷を分散することが出来、計算がスムーズにいきます。この場合、キャラクターが背景に落とす影をどう処理するか、といったことが問題になりますが、Mayaにはこうした問題を解決するためにRender LayerとLayer Overrideという機能が備わっており、レイヤー間の相関関係を保つために役立ちます。また、グローバル・イルミネーションの間接照明がお互いに影響し合う場合ですが、レンダラーがFinal Gather CacheやPoint Cloudなどにイラディアンスを保存している場合は、それらのキャッシュを各レイヤー間で参照することで、そのレイヤーには存在しないアセットからの間接照明を受け取ることも可能です。

パスのもう1つの考え方として、シェーダーからのセカンダリー・アウトプットというものがあります。これはMayaとmental rayではRender Passと呼ばれ、他のレンダラー、例えばRenderManではAOV (Arbitrary Output Variable)などと呼ばれたりします。これはシェーディングの際にさまざまなレンダリング情報を分離してビューティー・パスとは別に出力する、というもので、当然シェーダー側でそれらの出力が出来る様な仕様になっている必要があります。例えば前回お話ししたmental rayの汎用シェーダーmia_materialにはその派生系のシェーダーとしてmia_material_x_passというシェーダーがあり、以下の様なパスを出力することが可能になっています。

  • Beauty
  • Diffuse
  • Direct Irradiance
  • Indirect
  • Reflection
  • Refraction
  • Specular
  • Translucence
こうしたスロットがシェーダーに用意されていない場合でも、mental rayのユーティリティ・ノードwriteToColorBufferをシェーダーの任意の出力パラメータに接続することでパスに書き出すことが可能になります。詳しくはmental rayとMayaのマニュアルをチェックしてみてください。

今回のメーガン・フォックスの作例では、レンダー・パスの出力はあまり細かくやりませんでした。通常人間のキャラクターの場合はサブ・サーフェース・スキャッタリングの値をパスに書き出して、後でコンポジットで調整する方が早いのですが、今回はライティングでつめています。代わりにライティングのバランスを後でコンポで調整できるよう、ライト・ソース毎にレイヤーを分けました。下の画像は左から順にキー、アンブレラ・ライトによるフィル、IBLによるアンビエントをそれぞれ別に分けたものです。これらを後でコンポジットで調整します。



ということで次回はコンポジットのお話をしたいと思います。



2 件のコメント:

  1. HDRIをその他のライトで補強するお話、大変参考になりました。HDRIの主光源に補強が必要な場合があるのは、以前から聞き知っていました。しかし、CGにおける照明の理屈を理解していないため、HDRIとMayaなどのライトを混在させることが適当な手段なのかが疑問でした。具体的には、影や反射の意図しない結果につながるのでは?と考えておりました。「両方使える」とのお話、今後生かしたいと思います。いつも勉強になる内容、ありがとうございます。

    返信削除
    返信
    1. お役に立てて何よりです。

      削除

注: コメントを投稿できるのは、このブログのメンバーだけです。