前の記事では、レンダリングの基礎的な内容について説明しました。 ここでは、レンダリングの結果に大きな影響を与える『光と照明』について解説したいと思います。
前の記事で説明したように、レンダリングは、
という処理で構成されます。 光と照明は、陰影計算(シェーディング)に関連します。
現実世界の光は、反射・透過・屈折・吸収・回折・干渉という物理的な現象を起こします。 しかし、3DCGの世界では、それらの現象を完全に再現することができません。
そのため、物理的には正しくない設定項目が使われたり、物理的には正しいが簡略化された計算が行われたりするのです。
例えば、Blenderの標準レンダリングエンジンのBlender Renderには、拡散反射と鏡面反射という設定項目が存在しますが、物理的な現象で言えば、どちらも反射です。 鏡のような滑らかな面ならほとんどの光が入射角と同じ角度で反射し、ザラザラした面な多くの光がら色々な角度に拡散して反射するというだけの話です。
しかし、レンダリング処理でそれらの反射を全て追跡することは現実的ではありません。 そのため、『拡散反射』や『鏡面反射』という擬似的な設定項目が存在するわけです。
そのような擬似的な手法の1つとして、『環境光』と呼ばれるものがあります。 環境光は、光源からは見えない面にも当たる光のことで、仮想世界全体を照らします。
例えば、晴天の日の昼間に、つばの広い帽子を被って太陽の下に立っている人がいるとします。 周囲の人からは、その人物の顔は真っ暗で見えないでしょうか。
もちろん、顔は見ることができます。 太陽から直接光が届いていなくても、地面や壁、自分の身体に反射した光が当たっているからです。 つまり、間接的な光である『間接光』が当たっているわけです。
環境光とは、その『間接光』を表現する手法の1つです。 ただし、物理的に正確ではありません。 現実世界では、数えきれないほどの回数の複雑な反射を繰り返して届く間接光です。 それを物理的に正しく計算しようとすると、きりがありません。
そこで、擬似的な『環境光』を設け、それを全ての面に当てることで間接光を表現しているのです。
写実的なレンダリング結果を得るためには、間接光を考慮することが重要です。 その重要な間接光を表現する手法の1つが環境光であるということを覚えておいてください。
前の記事で利用した『アンビエントオクルージョン』が擬似的な環境光の表現手法の1つです。 以下にアンビエントオクルージョンを利用したスザンヌのレンダリング結果を再度掲載します。
右下の小窓が標準設定でのレンダリング結果です。 光源であるポイントライトが向かって右側にあるため、スザンヌの顔が真っ暗になっています。
一方、アンビエントオクルージョンを有効にしたレンダリング結果では、光源からは見えない面も明るく表現されています。 これは、環境光が当たっているかのように陰影の計算が行われた結果です。
続いて、ローカルイルミネーションとグローバルイルミネーションについて説明します。 日本語では、ローカルイルミネーションは局所照明、グローバルイルミネーションは大域照明と訳されます。
言葉だけでは何のことだかわかりませんが、ローカルイルミネーションやグローバルイルミネーションというのは、陰影計算に対する考え方のことです。 つまり、光をどう取り扱うかという考え方でもあります。
計算式や機能の名称ではなく、あくまでも考え方です。 Blender上にグローバルイルミネーションという設定項目があり、それをオンにするとレンダリング結果が写実的になるわけではありません。
ローカルイルミネーションとは、陰影計算において、対象の面と光源だけを考慮するという考え方です。 他の面に反射して届いた光や半透明の物体を透過した光は考慮されません。 つまり、間接光は表現されません。
以下はローカルイルミネーションでのレンダリングの例です。
上図のように陰影が不自然です。 球体の下部は暗すぎですし、壁の色の色移り(照り返し)がありません。 また、球体が床に影を落としていません。
不自然さの原因は、陰影計算の材料として、対象の物体と光源しか考慮されていないためです。 例えば球体の陰影は、球体と光源のみを材料に計算されています。 そのため、床からの反射が考慮されず、下部が暗くなっているのです。 同様に、壁からの反射も考慮されていないため色移り(照り返し)もないのです。
同じように、壁の陰影計算は壁と光源のみを材料に、床の陰影計算は床と光源のみを材料に行われています。 そのため、球体や床は壁には影響を与えませんし、球体や壁は床には影響を与えないのです。
このように他の物体からの影響を考慮しない陰影計算の考え方をローカルイルミネーションといいます。
グローバルイルミネーションとは、他の面との相互作用も考慮して陰影を計算しようという考え方です。 例えば、他の面に反射して届いた光や、他の物体を透過や屈折してきた光も考慮するという考え方です。 間接光を表現することもできます。
以下はグローバルイルミネーションでのレンダリングの例です。
上図のようにローカルイルミネーションに比べて格段に自然な印象になりました。 球体の下部にも光が届いていますし、球体の左側には壁の赤色が、右側には緑色が色移り(照り返し)しています。
3DCGの世界には、仮想世界の全ての面を照らす『環境光』という考えがあります。 環境光は物理的には正しくありませんが、低負荷で擬似的な間接光を表現することができます。
陰影計算の考え方は、大別するとローカルイルミネーションとグローバルイルミネーションに分類されます。 ローカルイルミネーションでは、計算対象の面と光源の関係だけが考慮されるため間接光を表現することができません。 グローバルイルミネーションは、他の面との相互作用が考慮されるため間接光を表現することができます。