照明基礎

レベル/ 対象者:基礎/ CINEMA 4D基礎を少し使える人
対象ソフトウエア、プラグイン:CINEMA 4D R12 Broadcast以上

参考とする写真を見る。よく見る。もう一度見る。そして自分でも写真を撮ってみる。

冨士 俊雄/ gtofuji@gmail.com
章番号 題名 内容、及び関連する章 作成日/注記
012 3_ライトを使わない照明 GI、ポリゴンライト、発光するマテリアル、オーバーサンプリング、GIポータル、 2011.3.6
English Top

 

Step 1

発光するマテリアルによる照明

 この章では、011章で作成したシーンを題材にして、「ライトを使わない照明」について説明します。

 まず、サンプル012aサンプル012bを開いて、「画像表示にレンダリング」を実行し、比較してみて下さい。サンプル012aは、011章で作成したサンプル011cと全く同じものです。

図012-1
(露出-1)

 左がサンプル012a、右がサンプル012bで、レンダリング時間は両方とも「27秒」でした。

 この二つの画像は、見た目はよく似ていますが、シーンの構成には大きな違いがあります。それは「ライトの有無」です。図012-1左のシーンはライトによって普通に照明されていますが、図012右のシーンにはライトが存在せず、その代わり「発光するマテリアルを適用したオブジェクト(ポリゴンライト)」によって照明されているのです。

図012-2

 この違いは、レンダリング設定で「グローバルイルミネーション」特殊効果のチェックを外して、レイトレーシングだけでレンダリングしてみるとよくわかります。

図012-3
(露出-1)

 この二つの画像は、大きく違っています。しかし、GIを適用してレンダリングすると、図012-1のように似た画像になるのです。これは別に画像が壊れたり、リンクが間違っているわけではありません。

 このような違いが生じる理由について次のステップで説明します。

 

 

Step 2

レイトレーシングとGIの関係

 まず、レイトレーシングでは「ライトから出た光」による照明だけが計算されます。したがって、図012-3左の絵では天井や壁は照明されているものの、立方体や球体の陰は真っ暗です。さらに、図012-3右の絵では、ライトが存在しないので照明が全くありません。唯一、発光するマテリアルを適用した「polygon_light」オブジェクトだけが見えています。

 次に、GIを働かせると「それ以外の光」による照明も計算されるようになります。ただし、GIはライトから出た光を計算しません。これはとても重要な点です。

 

 つまり、ライトから出た「最初の光」はレイトレーシングが計算し、オブジェクトによって反射された「2回目以降の光」をGIが計算するのです。言い換えると、レイトレーシングは「直接光だけ」を計算し、GIは「間接光だけ」を計算するわけです。

 したがって、「GIの計算は、レイトレーシングの結果を元にして始まる」と言えます。また、「GIの結果は単独では意味を持たず、レイトレーシングの結果に加算されて初めて意味を持つ」とも言えます。

 たとえば、マルチパスレンダリング機能を使って、図012-1の絵の中のGI成分だけを取り出すと下のようになります。つまり、これらの絵を図012-3の絵と加算合成すると、図012-1の絵になるわけです。

図012-4
(露出-1)

 まず、図012-4左の絵の天井に注目すると、ライトからの直接光がないことがわかります。次に、図012-4右の絵の天井に注目すると、「発光するマテリアルから出た光」が天井を照明していることがわかります。

 つまり、CINEMA 4Dの世界では「発光するマテリアルから出た光」というのは、「間接光」と同じ扱いになるのです。この他、ライトの「可視照明」や、「PyroCluster」などのボリュームイフェクトから出た光も「間接光」として扱われます。

 
 次に、図012-4の絵をよく見比べると、左の絵の方が「陰の部分が明るい」ということに気がつきます。これは、左の絵では「レイトレーシング -> GIの1回目 -> GIの2回目」と光の計算が3回行われているのに対し、右の絵では「GIの1回目 -> GIの2回目」と光の計算が2回しか行われていないからです。

 また、このように難しく考えなくても、図012-3の2枚の絵を比較して、「どちらの方が、その後のGIの計算が楽か」と考えてみれば、右の真っ暗な絵の方が大変であることが直感的にわかると思います。

 右の絵でも、「拡散反射回数」の値を「2」から「3」に上げれば、陰の部分を明るくできます。

図012-5(露出-1)

 ただし、レンダリング時間は「33秒」に伸びてしまいます。

 

 

Step 3

発光するマテリアルの利点

 このように、通常のライトで十分間に合うようなケースで発光するマテリアルを使う利点はありません。しかし、次のようなケースでは発光するマテリアルによる照明に大きな利点があります。

1. ライトの形状が複雑である場合
 たとえば、サンプル012bで天井の「polygon_light」オブジェクトを消し、両側の壁を発光させると次のようになります(サンプル012c)。

図012-6

 レンダリング時間は「15秒」でした。このようなケースでは、無理にエリアライトなどを使うよりも、発光するマテリアルを使ってしまった方が、シーンの作成が楽です。また、レンダリング時間や画質の点でも有利です。

 

2. ライトが無数にある場合
 たとえば、高層ビルの中の天井に配置された無数の蛍光灯や、巨大な橋や塔に取り付けられた無数のイルミネーションを全てライトオブジェクトで表現するのは無理です。

 このようなケースでも、無数のライトをポリゴンやテクスチャで表現し、発光するマテリアルを適用してGIでレンダリングすれば、それら無数のライトによる照明を十分な品質で表現できます。

 

3. IBL(イメージベースドライティング、014章を参照)
 IBLは、ライトオブジェクトの「代用品」として発光するマテリアルを使うのではなく、もっと積極的に「発光する画像だけでリアルな照明を実現する」ことを目的としています。

図012-7

 そのためには特殊なHDRパノラマ画像を撮影する必要がありますが、適切な画像が得られれば、通常のライトやオブジェクトの組み合わせでは表現できないようなリアルな絵を、簡単に表現できます。

 また、画像を使って照明すれば、レンダリングした画像が元の画像によく馴染むので、3DCGの画像を実写画像に合成する目的でもよくIBLが使われます。

 

 

Step 4

オーバーサンプリング

 それでは、サンプル012bに戻って、このシーンのGIパラメータを最適化することを考えましょう。

 まず、図012-5から「拡散反射回数」の値は「2」から「3」に上げる必要があることがわかりました。この画像のレンダリング時間は「33秒」でしたが、この時間と画質を基準として、GIパラメータを調整します(サンプル012d)。

図012-8(露出-1)

 実は、この画像にはまだかなりムラがあります。天井の隅を拡大して見るとそれがよくわかります。

図012-9
(露出-1)

 そこで、なるべくレンダリング時間を増やさずに、このムラを消す方法を探します。

 まず最初に思いつくのは、「ストカスティックサンプル」の値を大きくすることです。「ストカスティックサンプル」は、「GIのプレパスで計算される白い点々に含まれる明るさ情報の正確さ」を決定するパラメータです。それでは、この値を「低」から「中」に上げて「画像表示にレンダリング」してみましょう。

図012-10
(露出-1)

 レンダリング時間は「70秒」に伸びましたが、ムラはほぼ無くなりました。

図012-11
(露出-1)

 

 それでは次に「オーバーサンプリング」というパラメータを追加してみます。

 ここまでのGIの設定では、GIはシーンの明るさを「手探り」で計算していました。つまり、どこに明るいオブジェクト(このシーンでは「polygon_light」)があるのかわからないので、明るさを調べるための光を、全ての方向に「均等に」放射していたのです。これが「ストカスティックサンプル」です。

 しかし、もしGIを計算する前に明るいオブジェクトがどこにあるのかわかっていれば、話は簡単です。明るさを調べるための光を、そのオブジェクトの方向に「重点的に」放射すればいいのです。この「明るいオブジェクトがどこにあるのかをGIに教えるためのパラメータ」が「オーバーサンプリング」です。


 「オーバーサンプリング」はマテリアルの中で設定します。それでは「Illuminating_material」マテリアルをダブルクリックし、マテリアル編集ウインドウを開いて下さい。そして、「GIと照明モデル」ページで、「サンプリングモード」の値を「通常」から「オーバーサンプリング」に切り替えて下さい。

図012-12

 これで、「このマテリアルは非常に明るい」ということをGIに教えることができました。そして、このマテリアルが「polygon_light」オブジェクトに適用されています。

 

 次に、この明るいマテリアルを「重点的に調べる程度」を指定します。レンダリング設定を開き、「グローバルイルミネーション」ページを開いて下さい。そして「イラディアンスキャッシュ」タブの中の「オーバーサンプリング」の値を「低」から「中」に上げます。

 と同時に、「ストカスティックサンプル」の値は「中」から「低」に戻しておきましょう。この状態で「画像表示にレンダリング」して下さい。

図012-13(露出-1)

 レンダリング時間は「43秒」でした。また、「ストカスティックサンプル」の値を「中」にした場合と同じ程度に、ムラなくレンダリングできました。

図012-14
(露出-1)

 

 結論として、オーバーサンプリングを使うことによって、レンダリング時間を40%程度短縮できたことになります。これだけでも十分な効果ですが、実は次のステップ5や、014章で扱うようなコントラストの高いシーンでは、オーバーサンプリングをうまく使うことで、レンダリング時間を1/10以下に短縮できます。

 ですから、コントラストの高いシーンをGIでレンダリングしていて、計算時間が異常に長くなったり、ムラが消えない場合は、まずこの「オーバーサンプリング」の値を最適化するように心がけて下さい。

 

 

Step 5

GIポータル

 「GIポータル」は、おそらくCINEMA 4DのGIで最も重要なパラメータです。

  GIポータルの「ポータル」は、「入り口」という意味で、CINEMA 4Dの中では「(GIの)取り入れ口」つまり「(GIの)窓」というような意味で使われます。

 GIポータルの働きは、基本的にステップ4で説明した発光するマテリアルに対する「オーバーサンプリング」の働きと同じですが、「透明である」点が異なっています。

 つまり、発光するマテリアルにオーバーサンプリングを指定した場合、GIはそのマテリアルに注目し、そのマテリアルの明るさを計算します。これに対して、GIポータルにオーバーサンプリングを指定した場合、GIは同じようにGIポータル(窓)を注目しますが、実際に計算されるのは「GIポータルの先に見える外の風景」なのです。

 ある人は、「それなら、外の風景全てに直接オーバーサンプリングを指定すればいい」と考えるかも知れません。しかし「外の風景全てに注目する」というのは、結局「何も注目しない」というのと同じことです。

 「窓から見える風景だけ」に限定してGIに注目させる。そこにGIポータルの利点があります。


 それでは、サンプル012eを開いて下さい。

 このサンプルでは、部屋の天井の真ん中に天窓が作ってあります。そして、窓の上には発光するマテリアルを適用した「polygon_light」オブジェクトが浮かんでいます。

図012-15

 このシーンを前のステップと同じGIの設定で「画像表示にレンダリング」すると次のようになります。

図012-16

 レンダリング時間は「35秒」でしたが、シーンのコントラストが上がったため、お化け屋敷のような質感になっています。

 それでは、「ストカスティックサンプル」の値を「低」から「中」に上げて「画像表示にレンダリング」してみて下さい。

図012-17

 レンダリング時間は「93秒」に伸びましたが、あまりよくなっていません。おそらくレンダリング時間を10倍にしてもムラは消えないでしょう。


 それでは、次にGIポータルを設定してみます。

 まず、「GI_portal」マテリアルをダブルクリックし、マテリアル編集ウインドウを開いて下さい。そして、「GIと照明モデル」ページで、「GIポータル」をチェックし、「サンプリングモード」の値を「通常」から「オーバーサンプリング」に切り替えて下さい。

図012-18

 このマテリアルが「Window」オブジェクトに適用されています。

 次に、レンダリング設定を開き、「グローバルイルミネーション」ページを開いて下さい。そして「イラディアンスキャッシュ」タブの中の「オーバーサンプリング」の値を「低」から「中」に上げます。

 と同時に、「ストカスティックサンプル」の値は「低」に戻しておきましょう。この状態で「画像表示にレンダリング」して下さい。

図012-19

 レンダリング時間は「52秒」でした。まだ少しムラが残っていますが、「ストカスティックサンプル」を「中」にした場合に比べれば、はるかに短い時間できれいな画像をレンダリングできています。これがGIポータルです。