自分でも写真を撮ってみる。gtofuji@gmail.comこのテキストはR14用です。4Dを使っているユーザーは照明基礎を参照して下さい。1GIエリア(発光するマテリアル)による照明この章では、042章で作成したシーンを元にして、「ライトを使わない照明(GIエリア)」について説明します。サンプル043aとサンプル043bを開いて、画像表示にレンダリングして下さい。サンプル043aは、042章で作成したサンプル042bと全く同じものです。図043-1レンダリング時間は、043aが「13秒」、043bが「15秒」で大差ありません。この二つの画像は、見た目はよく似ていますが、シーンの構成には「非常に大きな違い」があります。それは「ライトの有無」です。043aはライトによって普通に照明されていますが、043bにはライトが存在せず、その代わり「発光するマテリアルを適用したオブジェクト(GIエリアライト)」によって照明されているのです。図043-2この違いは、レンダリング設定で「グローバルイルミネーション」特殊効果のチェックを外して、レイトレーシングだけでレンダリングしてみるとよくわかります。図043-3この二つの画像は、大きく違っています。GIを適用してレンダリングすると、図043-1のように似た画像になるのです。これは別に画像が壊れたり、リンクが間違っているわけではありません。このような違いが生じる理由について次のステップで説明します。2レイトレーシングとGIの関係まず、「レイトレーシング」という計算方法では「ライトから出た光(直接光)」による照明だけが計算されます。したがって、GIを切った043aでは天井や壁は照明されているものの、立方体や球体の陰は真っ暗です。043bでは、ライトが存在しないので照明が全くありません。唯一、発光するマテリアルを適用した「GI_area_light」オブジェクトだけが見えています。次に、「GI(グローバルイルミネーション)」という計算方法を追加すると「それ以外の光(発光や間接光)」による照明も計算されます。GIはライトから出た光を計算しません。これはとても重要な点です。ライトから出た「最初の光」はレイトレーシングが計算し、オブジェクトによって反射された「2回目以降の光」をGIが計算するのです。言い換えると、レイトレーシングは「直接光だけ」を計算し、GIは「間接光だけ」を計算するわけです。したがって、「GIの計算は、レイトレーシングの結果を元にして始まる」と言えます。「GIの結果は単独では意味を持たず、レイトレーシングの結果に加算されて初めて意味を持つ」とも言えます。マルチパスレンダリング機能を使って、図043-1の絵の中のGI成分だけを取り出すと下のようになります。これらの絵を図043-3の絵と加算合成すると、図043-1の絵になるわけです。図043-4まず、上左の絵の天井中央部分に注目すると、ライトからの直接光が計算されていないことがわかります。次に、上右の絵の天井中央部分に注目すると、「発光するマテリアルから出た光」が天井を照明していることがわかります。4Dの世界では「発光するマテリアルから出た光」というのは、「間接光」と同じ扱いになるのです。この他、ライトの「可視照明」や、「PyroCluster」などのボリュームイフェクトから出た光も「間接光」として扱われます。一つ上の図043-3の2枚の絵を比較して、どちらの方が「その後のGIの計算が楽か」と考えてみれば、直感的に右の真っ暗な絵の方が大変であるとわかるでしょう。3GIエリア(発光するマテリアル)の利点そのためには特殊なHDRパノラマ画像を用意する必要がありますが、適切な画像が得られれば、通常のライトやオブジェクトの組み合わせでは表現できないようなリアルな絵を、簡単に表現できます。画像を使って照明すれば、レンダリングした画像が元の画像によく馴染むので、3DCGの画像を実写画像に合成する目的でもよくIBLが使われます。このように、通常のライトで十分間に合うようなケースで発光するマテリアルを使う利点はありません。次のようなケースでは大きな利点があります。ライトが大きかったり、形状が複雑である場合たとえば、サンプル043-1で天井の「GI_area_light」を消し、両側の壁を発光させると次のようになります(サンプル043c)。図043-5レンダリング時間は「7秒」でした。このようなケースでは、無理にエリアライトなどを使うよりも、発光するマテリアルを使った方が、シーンの作成が楽です。レンダリング時間や画質の点でも有利です。ライトが無数にある場合たとえば、高層ビルの中の天井に配置された無数の蛍光灯や、巨大な橋や塔に取り付けられた無数のイルミネーションを全てライトオブジェクトで表現するのは無理です。このようなケースでも、無数のライトをポリゴンやテクスチャで表現し、発光するマテリアルを適用してGIでレンダリングすれば、それら無数のライトによる照明を十分な品質で表現できます。IBL(イメージベースドライティング、044章を参照)IBLは、ライトオブジェクトの「代用品」として発光するマテリアルを使うのではなく、もっと積極的に「発光する画像だけでリアルな背景を表現する」ことを目的としています。図043-6そのためには特殊なHDRパノラマ画像を用意する必要がありますが、適切な画像が得られれば、通常のライトやオブジェクトの組み合わせでは表現できないようなリアルな絵を、簡単に表現できます。画像を使って照明すれば、レンダリングした画像が元の画像によく馴染むので、3DCGの画像を実写画像に合成する目的でもよくIBLが使われます。4GIエリアライトそれでは、サンプル043bに戻って、このシーンのGIパラメータを最適化することを考えましょう。043bの「GI_area_light」オブジェクトの周辺を見ると「黒い縁」があることに気がつきます。これは発光するマテリアルが非常に明るいため、そのアンチエイリアスの「マイナス成分」が0を切っているからです。アンチアイリアスにマイナス成分が発生するのは、画像をシャープに見せるためで、R13から追加された機能です。マイナス成分をクリップ」をチェックします。図043-7次に、043bにはかなりムラがあります。図043-1右図の天井の隅を見るとそれがよくわかります。そこで、なるべくレンダリング時間を増やさずに、このムラを消す方法を考えます。最初に思いつくのは、「ストカスティックサンプル」の値を大きくすることです。「ストカスティックサンプル」は、「GIのプレパスで計算される白い点々に含まれる明るさ情報の正確さ」を決定するパラメータです。それでは、この値を「中」から「高」に上げて「画像表示にレンダリング」してみましょう。図043-8レンダリング時間は「34秒」に伸びましたが、確かにムラが少なくなりました。それでは、次に「GIエリアライト」というパラメータを追加してみます。ここまでのGIの設定では、GIはシーンの明るさを「手探り」で計算していました。どこに明るいオブジェクト(このシーンでは「GI_area_light」)があるのかわからないので、明るさを調べるための光を、全ての方向に「均等に」放射していたのです。この光の本数が「ストカスティックサンプル」の数です。「もしGIを計算する前に明るいオブジェクトがどこにあるのかわかっていれば」話は簡単です。明るさを調べるための光を、そのオブジェクトの方向に「重点的に」放射すればいいのです。この「明るいオブジェクトがどこにあるのかをGIに教えるためのパラメータ」が「GIエリアライト」です。「GIエリアライト」はマテリアルの中で設定します。それでは「light」マテリアルをダブルクリックし、マテリアル編集ウインドウを開いて下さい。「GIと照明モデル」ページで、「GIエリアライト」をチェックします。これで、「このマテリアルは非常に明るい」ということをGIに教えることができました。このマテリアルが「GI_area_light」オブジェクトに適用されています。同時に、「ストカスティックサンプル」の値は「高」から「中」に戻しておきましょう。この状態で「画像表示にレンダリング」して下さい。図043-9レンダリング時間は「14秒」と短くなったにもかかわらず、「ストカスティックサンプル」の値を「高」にした場合と同じか、それ以上にムラなくレンダリングできました。結論として、GIエリアライトを使うことによって、レンダリング時間を半分に短縮できたことになります。これだけでも十分な効果ですが、実は次のステップ5や、044章で扱うようなコントラストの高いシーンでは、GIエリアライトをうまく使うことで、レンダリング時間を1/10以下に短縮できます。コントラストの高いシーンをGIでレンダリングしていて、計算時間が異常に長くなったり、ムラが消えない場合は、まずこの「GIエリアライト」を適切に設定してみて下さい。5GIポータル「GIポータル」は、非常に重要なパラメータです。4Dの中では「(GIの)取り入れ口」つまり「(GIの)窓」というような意味で使われます。GIポータルの働きは、基本的に前のステップで説明した発光するマテリアルに対する「GIエリアライト」と同じですが、「窓である」点が異なっています。発光するマテリアルに「GIエリアライト」を指定した場合、GIはそのマテリアルに注目し、そのマテリアルの明るさを計算します。これに対して、「GIポータル」を指定した場合、GIは同じようにGIポータル(窓)を注目しますが、計算されるのは「GIポータルの先に見える外の風景の明るさ」なのです。ある人は、「それなら、外の風景全てに直接GIエリアライトを指定すればいい」と考えるかも知れません。「外の風景全てに注目する」というのは不可能で、結局「何も注目しない」というのと同じことです。「窓から見える風景だけ」に絞ってGIに注目させる。そこにGIポータルの利点があります。この時、「窓から見える風景」というのは壁や床の位置によって大きく変わります。それでは、サンプル043dを開いて下さい。このサンプルでは、部屋の天井の真ん中に天窓が作ってあります。窓の上には発光するマテリアルを適用した「GI_area_light」オブジェクトが浮かんでいます。このシーンを前のステップと同じGIの設定で「画像表示にレンダリング」すると次のようになります。図043-10レンダリング時間は「16秒」ですが、シーンのコントラストが上がったため、お化け屋敷のような質感になっています。それでは、「ストカスティックサンプル」の値を「高」に上げて「画像表示にレンダリング」してみて下さい。図043-11レンダリング時間は「36秒」に伸びましたが、あまりよくなっていません。レンダリング時間が10倍になるほど値を上げてもムラは消えないでしょう。それでは、次にGIポータルを設定してみます。「GI_portal」マテリアルをダブルクリックし、マテリアル編集ウインドウを開いて下さい。「GIと照明モデル」ページで、「GIポータル」をチェックして下さい。このマテリアルは「Window」オブジェクトに適用されています。同時に、「ストカスティックサンプル」の値は「中」に戻しておきましょう。この状態で「画像表示にレンダリング」して下さい。図043-12レンダリング時間は「22秒」と短くなったにもかかわらず、かなりよくなりました。これがGIポータルの効果です。