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

チュートリアル / 宋さんの3ds Max キッチンスタジアム
第8回:ライティング

2010.10.01

  • 3ds Max
  • チュートリアル
  • ビジュアライゼーション
  • ライティング
  • レンダリング
かなり時間経ってしまいました。

ブログを再開いたします。

いままで、フォトリアルなレンダリングを行う上で注意しなければならない3つの光の要素に関して書いてきました。主にマテリアルの扱いとグローバルイルミネーションの設定パラメータのコツに関して述べてきましたが、今回からはレンダリングでもう一つ重要な要素である光そのものとライティングに関して話を進めていきましょう。


光の基本

光の波長
まずは光の物理的な特性を理解しておくことが必要です。まずは「光ってなんなのよ!? 」ということですが、そんなところから話を進めていこうかと思います。

光というのは電磁波の一種で様々な波長で構成されています。また、これらの波長の中で人間の目で認識できる範囲の電磁波を可視光線と呼びます。

なんかややこしい話になってきましたね・・・

この可視光線も人間の目には波長によって様々な色に見えますが、一般的にはこれらの色が混ざり合って目の中に入ってきますので、「光は白い」というイメージが強く働いています。コンピュータグラフィックスでは一般的にRGBの3色で色を表現しますが、各RGBが飽和した状態だと白が表現されますよね。

RGB

人間の目で認識できる波長の範囲は短波長で約380nmから、長波長で800nm前後までといわれています。この波長が短くなると青い光になり、長くなると赤い光になります。その間を様々な色で推移していきますが、この光の推移をスペクトルと呼びます。この現象は雨上がりに見える虹などで確認できますね



ちなみにですが、この電磁波が極端に短くなったものがX線やガンマ線であったり、極端に長くなったものが赤外線であったりWIFI通信や携帯電話には欠かせない電波といったものになります。



「波長はわかったけど、こんなこと人間の目には確認しようないし、実際のCGレンダリングでは表現できないから意味がないよ」といわれる方もいるでしょうが、実はよく目にする現象です。一番身近なものが日中の青い空と朝焼け夕焼け時の暁色ですね。日中では波長の短い光(青い光)が空気の粒子に拡散されて太陽の周りの空が青く見えます。

これは波長の長い光が減っているのではなく、波長の短い光が大気によって拡散されて増幅されているわけです。波長の長い光(赤い光)は反射しにくい特性を持っているので大気を直進して目に入りますから太陽の大きさでしか見ることができません。地平線近くの空が白く見えるのは光の入射角度が浅くなるので拡散された光が外部へ放出されてしまい長い波長の光とバランスが合うからです。

ちょっと覚えておくと便利なのが、波長の中で最も反射率の高いものが紫色だということです。背景の青空を表現する場合は、ほんの少しだけ紫がかった青を用いると自然に見えるのはそのせいです。

朝焼けや夕焼けの現象は太陽からの入射角度が浅くなるので、大気を通過する距離も伸び、青い光は多くの拡散が発生するのと入射角度が浅いため多くが大気外へ放出されてしまいます。結果として直進する長い波長の光つまり赤い光のみが人間の目に飛び込んでくるのが原因です。

晴天時の空の色
晴天時の空の色
日没時の空の色
日没時の空の色


こういった大気を取り巻く光の波長の変化はレンダリング時に設定するホワイトバランスや、人工光源のケルビン値(色温度)などの設定に大きく影響します。

晴天時の色温度は低い
晴天時の色温度は低い
日没時の色温度は高い
日没時の色温度は高い


上図のレンダリングサンプルを見てみましょう。3ds Maxのデイライトシステムと連動するmrPhysical Skyシェーダ(環境マップに適用します)では、物理的に正しい天空光モデルを用いますので、色温度がきつめに感じることがあります。こういった場合は、mrフォトグラフィック露出制御で、色温度(ホワイトポイント)を調整することによって緩和させることができます。

3ds Maxの規定値ではホワイトポイントは6,500ケルビンに設定されています。これを晴天時は7,500ケルビンに、日没時は5,000ケルビンに変更したレンダリング結果が以下の例です。


晴天時のホワイトポイントを7,500へ

日没時のホワイトポイントを5,000へ


先程波長が短いものの代表がX線やガンマ線といったものですよと書きました。波長が短いとその光は物体を通過してしまうわけですね。これをCG的にいうと屈折率が低くなるという現象になるわけです。逆に波長が長くなると赤外線のように物体に吸収されてしまいます。つまり屈折率が高くなります。何がいいたいのかというと光の種類によって屈折率(反射率)が変化するということです。

注:先ほどの天空光の解説では波長の短いものはよく拡散すると書きましたが、これはレイリー拡散という現象で空気や大気中の水蒸気、塵などが原因で起きる現象なのでここで説明する屈折率とは少し解釈が異なります。



この屈折率の変化を確認できるのがカメラで撮影した写真で発生する色収差という現象です。特に一眼レフでも用いるような屈折率が高く径の大きいレンズを使った場合によく見られます。この色収差現象はカメラのレンズに入った光が、レンズとの交差する際に波長によって屈折率が変化して、結果としてフィルムの膜面(いまじゃCCDかCMOSセンサーですね)に色ずれとして現れることです。最終的には写真の外周部分の色がにじんだ状態になります。

*光の波長によって屈折率が異なるので色ずれが発生する。

この現象もレンダリングシェーダやAutodesk Compositeなどでフィルター処理することで表現させることができます。「なにもきれいなCG画像をわざと汚さなくても」と思う方もいると思いますが、実写真とCGを合成する際に、実写真に色収差が入っている場合は、CGにも同様の現象を与えることによりなじみが良くなります。

以下は3ds Max 2011から製品にバンドルされる3ds Max Compositeで再現させた人工的な色収差の処理と未処理のレンダリング比較です。
3ds Maxでレンダリングした画像をCompositeで開いた状態
3ds Maxでレンダリングした画像をCompositeで開いた状態。

画面左上のPlayerにレンダリングイメージ右側の拡大イメージを表示しています。
このイメージに[Lens Blur]を割り当てます。



レンズブラーのパラメータである[Aberration]の値と、[Radial Aberration]の値を調整すると、ポスト処理(後処理)で疑似的に色収差を与えることができます。

注:Lens Blurの前に使っているツールは[PhotoLab]というHDR用の色修正ツールです。
HDRイメージでファイル書き出しする場合だと、3DCG側で露出制御を使わなくても Compositeを用いた後処理で同様のことが行えます。




Compositeを使って色収差(Aberration)を適用する前

Compositteを使って故意に色収差を与えた状態
Compositteを使って故意に色収差を与えた状態

最終的にCompositeにて光の波長を考慮して作成したイメージが以下の例です。レンズのハロ現象や被写界深度もLens Blurの設定で同時に割り当てています。

sou8-p.jpeg
Composite処理前

Composite処理後
Composite処理後(わかりやすくするために、少々派手目に設定しています)


波長によって屈折率が変わるというのは、マテリアルに設定した色によっても鏡面反射の表現に若干の変化が発生します。ただし、非常に微妙な差でしかありませんが正確に設定できると格段に質感を上げることができます。いまではこういったマテリアルの特性を計測するデバイスもかなり一般的になってきました。

こういった可視光線内での波長の変化に関しては、スキャンラインレンダリングなどの旧来の標準レンダラーではまったく考慮されていませんが、Maxwell Renderに代表される光学的に正しい計算を行うレンダラーではきちんと考慮して計算されます。またこれからリリースされる多くのフォトリアル系レンダラーはこういった特性も考慮した機能が搭載されていくと思いますので、知識として身に着けておくとよいですね。

次回は、光の特性で非常に重要な特性である減衰という現象について述べていきましょう。