3DCGの照明・影について【光の原理編】
初めまして、里穂Rihoと申します。
数週間前から、3DCGツール・Cinema4Dを使い始めました。
照明を勉強することで、好みの作品を作ることができるようになるのではないかと思い、照明(理論)の勉強を始めました。どなたかのお役に立てるか不安ですが、こちらのnoteでは照明についてまとめていきます。
具体的には、ツールの名称や光の現象、各現象での計算式、設置方法などについて説明していきます。
ただし、3DCGのソフトによって同じ名称でも機能が異なる場合があるため、具体例に関しては参考程度に留めていただけると幸いです。
1. cinema4Dでのライトの種類
1-1. 照明の種類
まず、cinema4Dで使用される照明光源の種類について説明します。
直接光として、デフォルトライト、ライト(電球)、エリアライト、スポット、無限遠ライトがあります。また、形状によっては、点光源(電球など)、線光源(太陽や蛍光灯など)、面光源(曇りガラスの窓を通した光や、複数の線光源を埋め込んだパネルなど)に分類されます。
・デフォルトライト
・ライト(電球)
・エリアライト
・スポット
・無限遠ライト
・点光源(電球など)
・線光源(太陽や蛍光灯など)
・面光源(曇りガラスの窓を通した光や、複数の線光源を埋め込んだパネルなど)
1-2.各照明の説明
前述のように、ライトには主に以下の5種類があります。
2. cinema4Dでのマテリアル設定-反射-
次に、物体に照明の光があたった後の現象について説明していきます。
まずは、イメージをつかむために、ツール上にある反射の項目を紹介します。
私が使用しているcinema4Dでは、「反射」にて以下のモードが設定できます。これらを4種類に分類しました。
こちらのモードを適切に活用するために、各名称とその意味について説明していきます。
3. 光と物質の関係について-反射-
この節では、「反射」という現象について説明します。
3-1. 光の反射とは
「光の反射」とは、光が物質の表面に当たったときに、その角度に応じて反射される現象のことを指します。主に金属やガラス、プラスチック、液体などの表面が滑らかなもので顕著に現れます。
・金属
・ガラス
・プラスチック
・液体
3-2.反射光の種類
反射光は大きく2種類に分けられます。
物体が鏡のように反射する現象を「鏡面反射(specular スペキュラ)」、また物体表面の浅い部分で光が拡散してから外部に反射する現象を「拡散反射(diffuse ディフューズ)」と呼びます。
(1)鏡面反射(specular reflection:スペキュラ)
「鏡面反射」とは、その名の通り、鏡のように光を反射する現象です。中学校の理科で学んだ通り、光が入射した角度と同じ角度で反射されます。また、鏡面反射では、入射した光がそのまま反射される性質があります。
(2)拡散反射(diffuse reflection:ディフューズ)
「拡散反射」という言葉はあまり一般的ではありませんが、これも光の反射の一つです。具体的には、物体の表面深くに光が入り、そこから空気中に出て行く反射を指します。
(3)環境光 (ambient illumination)
周囲の物体で1回以上反射した光を「間接光」と言います。「反射光」の延長ですが、反射光が他の物質に入り込んだ場合には「環境光」として扱われます。
環境光に関しては、5-5.局所照明と大域照明のセクションを参照してください。
(4)まとめ
反射光の種類をまとめるとこんな感じ。
「鏡面反射」「拡散反射光」の計算式は「コンピュータグラフィックス」という分野で研究され、cinema4Dの各モードの名称はその公式の名前から取られています。
鏡面反射や拡散反射の詳しい特徴については、3-4. 反射と色、3-5. 反射と明るさの章で詳しく説明していきます。
3-3.反射と粗さ
ここでは、表面の粗さが変化すると光が反射する方法がどのように変わるかについて説明していきます。
3DCGでの表面粗さ
cinema4Dでは「つるつる」と「ざらざら」で表面粗さを設定します。この表面粗さについては、後の章で説明します。ここでは、質感表現において表面粗さを使用することを覚えておいてください。
現実での表面粗さ
ちなみに、現実の表面粗さの説明については、以下のサイトが分かりやすかったため、引用させていただきます。
3-4. 反射と色
物質に入射した光が反射する際に、光の色がどのように変化するかについて説明します。
(1)鏡面反射(specular スペキュラ)
入射光が物質にあたると、そのまま鏡面反射光の色として反射していきます(cinema4Dでは着色されません)。
(2)拡散反射(diffuse ディフューズ)
拡散反射では、Cinema 4Dの設定した色が比較的反映されます。このため、カラーをつけながら陰影も表現でき、3DCGで「本体色」を指定する方法としても使われます。
(3)環境光(ambient illumination)
さまざまな光が複雑に入り混じり、その光の計算が行われます。この計算方法については、「5.陰影処理(シェーディング)」をご覧ください。
3-5.反射と明るさ
基本的に物体のある点での明るさ(輝度)は、光源の強さ、物質の表面、光源-物質間の角度・方向などによって決まります。
これらについて、「鏡面反射」と「拡散反射」ではどのようになるのか説明していきます。
(1) 鏡面反射の場合
・反射と明るさ
物体表面に対して正反射や明るさ鏡面反射が起こる場合、入射光と反射光の角度が対称な方向(下図で「正反射」の方向)に近づくほど、反射光の明るさが強くなります。このため、カメラの位置を変えると、物体の表面の見え方も変化していくことになります。
・表面粗さと明るさ
また、鏡面反射は表面粗さによって表現が大きく変わります。
具体的には、表面がつるつるしている金属やプラスチックの場合は、強い光を反射し、一方、表面が粗い布やゴムの場合は、ぼやけた弱い光を反射します。この場合、強い光は狭く写り、弱い光は広く写ります(これはエネルギー保存の原理に基づくものです)。
これは、以下の図から原理を理解することができます。
(2) 拡散反射の場合
3DCGにおいて、拡散反射した光の明るさは、光が物質に入射する角度によって決まります。そして、カメラの位置によらず、ライトと物体の位置が固定されている場合、一定の陰影が生じることが特徴です。このような性質は、鏡面反射とは異なり、見る角度によって明るさが変化しないことを意味します。
拡散反射の計算式は(1)ランバート、(2)オレン・ネイヤーにより計算されます(マテリアルの設定から選べます。2. cinema4Dでのマテリアル設定-反射-の冒頭を参照。)
(1)ランバート反射の計算式
ある点での輝度値(明るさの度合い) は、a) 光源の明るさ , b) 拡散反射率 , c) 物体表面の法線と光源方向のなす角度 を用いて、計算されます。
(2)オレン・ネイヤー反射の計算式
ランバートの計算式に使用するパラメータに加えて、物質の粗さ(roughness ラフネス)を計算し、ある点での輝度値(明るさの度合い) を決定します。
粗い表面を計算式で扱うことで、コンクリート・石膏・砂などのマテリアルをより表現できるようになりました。
4. 光と物質の関係について-屈折・吸収・透過-
この章では屈折と透過について説明していきます。
(1)屈折
屈折は、光が物体に入った際に曲がる現象のことです。
屈折光は、その曲がった光のことを指します。
(2)吸収
吸収は、光が物質内に屈折して入ったのちに一部の光に起こる現象のことです。
(3)透過
透過は、物質を通り再び空気中に出ていく現象のことです。
透過光は、物質を通り再び空気中に出ていった光のことを指します。
まとめ
2章では「反射」を、3章では「屈折・透過・透過」を解説していきました。
5. 反射と屈折の割合計算について(フレネルの反射式とは)
基本的に、反射と屈折は同時に起こる現象です。そのため、3DCGにおいては、素材(マテリアル)を表現する際に「フレネル」という項目が設けられています。では、この「フレネル」とは何なのか、説明していきます。
(1)フレネルの反射式について
私たちは、身近な例から、金属は光沢があって周囲の景色が反射されること、水面は底も見えるだけでなく周囲の景色も映し出されることを知っています。このような現象を数式的に表現したものがフレネルの反射式です。フレネルの公式は、主に金属よりも水やプラスチックなどの表現の計算に有効な式です。(原理については後述しますが、イメージとしては「金属はどの角度でも鏡面反射するが、水は見る角度によって見え方が違う」と言えます)
具体的に、湖での景色を思い出してみましょう。
足元に近い水面では水中が見えて、逆に、遠くの方の景色は周りの山々が見えてませんでしたか?
以下の図で、
・屈折光=水中の様子を見るための光
・反射光=周囲の景色が映り込むための光
と考えると想像しやすいかもしれません。
入射光が真上に近いと水中の様子がみえ、
入射光が水面に近いと周囲の景色が見えてきます。
この「角度による見え方」を計算で説明するのに適したのが、フレネルの反射式です。この反射式を用いて、物質によって異なる反射の程度(=フレネル反射率)を計算できます。次に、この原理を用いて、「金属は光沢があり、周りの景色が映る。水面は底も見えるが、周りの景色も映る。」という現象をフレネルの反射式で説明していきます。
(2)フレネルの反射式
金属の場合
金属は、想像の通り光を反射しやすい性質があり、
真上0°から水平90°にかけて目線をずらしても、つねに90%以上に光を反射します。
※真上が0°(=F(0°))と定義されています。
水の場合
水は、目線によって光の反射の程度が大きく変化します。
真上0°から60°ではほぼ水中しか見えないのですが、60°から水平90°では指数関数的に光を反射していきます(下の【+α】を見るとその急激な変化がわかりやすいかと思います!)。
※真上が0°(=F(0°))と定義されています。
プラスチック
皆さんもお野菜やその他のプラスチック袋で「部屋の光が反射して眩しい」ことはありませんか?
その一方で「プラ」は「中身が見える外袋」として使われています。
実際に確かめてみると、プラスチックは水と同じように、視点の角度によって光の反射度合いが大きく変わります。例えば、真上から10度の角度で見ると、プラスチック製の袋の中身はクリアに見えますが、水の場合は80度の角度で95%の光が反射するため、周囲の光や景色が反射して見えることがあります。なお、真上を0度(=F(0°))と定義しています。
このように、
3DCGにおいて「フレネル」という言葉が出てきた場合は
「反射と屈折の割合を決めるんだな」と思っていただければ良いかと思います。
6.レンダリング
この章では、レンダリングについて説明していきます。
レンダリングとは、設置したオブジェクトを画像表示にすることです。
正確には、3次元に設置されたオブジェクトの座標、視点、光源などから光(色)の計算を行い、2次元表示に変換することです。
5-1.レンダリングの手順
レンダリング(画像化)の大まかなは流れは以下です。
これに沿って、以下の説明をしていきます。
・レンダリング手法
・シェーディング
・コンスタント(フラット)シェーディング
・スムースシェーディング
・グローシェーディング
・フォンシェーディング
・シャドーイング
・Lighting (Illumination model : 照明モデル)
・Global Illumination model(大域的照明モデル)
・Local Illumination model(局所的照明モデル)
5-2. 代表的なレンダリング手法
ここでは、代表的なレンダリング手法について説明していきます。
代表的なレンダリング手法はこちら。
・スキャンライン(Scanline rendering)法
・Zバッファ(Z-buffer)法
・レイ・トレーシング(Ray tracing)法
このうち、主要なレイ・トレーシング法について説明します。
レイ・トレーシング(Ray tracing)法
レイ・トレーシング法とは視点方向から見え方を、1ピクセルごとに計算する方法です。
1ピクセルという細かい単位での計算のため、
高画質ほど計算量が多くなる一方、屈折や反射などの表現を描写できます(前述の金属や水面など)。
計算方法は、以下のサイトの説明がわかりやすかったため引用します。
このように、
1ピクセルごとに視点から引いた線・物体・光源の3つから物体の可視面を計算していきます。
5-3. 陰影計算(シェーディング)について
次に、陰影計算(シェーディング)について説明します。
陰影計算(シェーディング)は、光源、形状、視点との位置関係、材質などを考慮して物体の明るさを表現する処理のことです。
代表的な陰影計算はこちら。
(1)コンスタント(フラット)シェーディング
(2)スムーズシェーディング
・グロー
・フォン
(1)コンスタント(フラット)シェーディング
各面(ポリゴン)の法線ベクトルと光源との角度から、面ごとに一定の明るさで表示する方法です。
この方法は計算が簡便な一方、隣り合う面(ポリゴン)の明度差が大きく見えてしまう(=段階的な明るさになってしまい、不自然)という弊害があります(マッファバンド効果)。
(2)スムーズシェーディング(smooth shading)
スムーズシェーディングでは、
コンスタント(フラット)シェーディングで起きた「隣り合う面(ポリゴン)の明度差が大きく見えてしまう」という問題点を解消していきます。
スムーズシェーディングは、
各面(ポリゴン)において補間により明るさを表示することで、近似的に滑らかな明るさを計算する方法です。
この計算方法の代表例には、グロー(輝度補間)とフォン(法線ベクトル補間)の2種類があります。
・ グロー(Gouraud shading:輝度補間)
各面(ポリゴン)の頂点における輝度を求めたのち(①)、各面内の輝度を求める(②:一次補間)方法です。
このグローシェーディングの性質は、wikipediaの説明がわかりやすかったため、引用します。
・フォン(Phong shading:法線ベクトル補間)
グローシェーディングは、輝度の線形補間を行い、ある1点での輝度(明るさ)を求めました。
一方、フォンシェーディングは、法線ベクトルの線形補間を行い、ある1点での法線ベクトルをもとに輝度(明るさ)を求めます。
これにより、より細かく光計算できるようになり、
ハイライトも滑らかに描写できるようになりました。
5-4.代表的な影付け(shadowing シャドーイング)
陰影計算(シェーディング)と影付け(シャドーイング)の違いについてざっくりと説明します。
この「遮られることによりできる影」は2種類に大別できます。
・本影(はっきりとした影。完全に光が遮られた領域)
・半影(ぼやけた影。一部の光が届いている領域)
ここからは、光源別に詳しく影のできかたについてみていきます。
・平行光源(Directional Light:太陽など)
非常に遠い場所(無限遠)から照らされているため、明るさは一様になります。
日常生活の明るさに近いです。
・点光源(Point Light:電球やロウソクなど)
全方向を同じ強さで照らします。
光源の小ささから、はっきりした影が出やすいです。
・線光源(Line Light:蛍光灯など)
点光源の集まりであり、面光源のような2次元の広がりがない光源です。
そのため、点光源より明るいが線方向と同じ方向にある物体にはうまく明るさが出ないので注意が必要かと思います。
・スポットライト(Spot Light:懐中電灯など)
点光源に近いですが、放射範囲を決めることができます。
・面光源(Area Light:エリアライトなど)
長方形や円柱などの大きさを持つ光源です。
点光源と異なり大きさを持つため、光が物体の外側から入ってくる時に「半影」という薄い影ができます。そのため柔らかい影になりやすいです(以下画像再掲)。
5-5.局所照明と大域照明
ここでは局所照明と大域照明について説明していきます。
局所照明とは、光源からの直接光のみ計算結果に反映させる手法です。
大域照明とは、間接光(複数回反射した光)もレンダリング結果に反映する手法です。
具体例として、Wikipedia記事内に掲載している以下画像を見ていきます。
(1)局所照明(ローカルイルミネーション)
局所照明では天井の照明のみ光の計算対象になっています。
GOOD:球体の影やハイライトが表現できている。
BAD:天井照明の直接光が当たらない奥の空間の壁や床の明るさが一様で、違和感がある。また、照明周りの天井の明るさの陰影が全くない。
(2)大域照明(グローバルイルミネーション:以下GI)
局所照明で再現できていなかった「天井の陰影」「奥の空間」の陰影がつ来ました。これは、物体や床に反射した光が「天井」や「奥の空間」に届いた(計算がなされた)ためです。
また、壁の緑色が「奥の空間」に薄く反映されています。これは、天井の光が緑の壁に反射し、その色情報をもったまま「奥の空間」に届いた(計算がなされた)ためです。
5-6. 環境遮蔽(Ambient occlusionアンビエントオクルージョン:以下AO)
5-5.では環境光について説明しました。
ここでは、より写実的な絵作りをするための、環境遮蔽(アンビエントオクルージョン、AO)について説明していきます。
アンビエントオクルージョンとは、
囲まれている空間を遮蔽部分をより正確に計算する表現方法です。
上記の画像で「全体的に陰影のメリハリがついた」と感じるのではないでしょうか。
これは、遮蔽部分をより正確に計算することで、影部分の表現の幅が広がったためです。
このように、AOは絵がよりリアルに近づくための機能として有効です。
最後に
次回があれば、透明(屈折と透過)について書きたいな、と思っています。
引用元一覧
凡例:運営者 サイト名 「記事タイトル」段落タイトル
*1)1050+TOKYOINK 仕事でつかえる色彩学「色の見方、見え方」モノの表面の状態でも見え方に差異がある
*2)Applibot, Inc. Techbot!「【連載】Unity時代の3D入門 – 第6回「鏡面反射ライティング」鏡面反射とは
*3)Applibot, Inc. Techbot!「【連載】Unity時代の3D入門 – 第5回「拡散反射ライティング」拡散反射とは
*4)床井研究室「第11回 拡散反射光による陰影」環境光(2021/10/6 閲覧)
*5)MAXON Computer. Cinema 4Dトレーニングサイト「R16 マテリアル基礎01- 基本的なチャンネル」Step 2 拡散、鏡面反射
*6)KONICA MINOLTA「色と光沢(SCE方式とSCI方式)。」表面状態の違い
*7)photon 光と色と「金属の光沢と色|金属反射と金属光沢」金属に色がつく理由
*8)CCS Inc.「第12回『色』って何だろう?・・・(その2)」イチゴとレモンの色は何故違う?
*9)デッサンと言う礎 デッサンと言う礎「デッサンと陰影」ハイライトの性質
*10) KONICA MINOLTA「色と光沢(SCE方式とSCI方式)。」正反射光と拡散光
*11) GRAPHISOFT SE. ARCHICAD 23 ヘルプ「反射(CineRender材質チャンネル)」幅/表面の粗さ
*12)株式会社ボーンデジタル CGWORLD Entry.jp「スペキュラ」参考画像
*13)KONICA MINOLTA「色と光沢(SCE方式とSCI方式)。」SCE(正反射光除去)方式とSCI(正反射光含む)方式
*14)Wikipedia 「Phongの反射モデル」概要
*15)Autodesk Inc. AREAJAPAN「第5回:拡散反射光 RGBレベルに注意!」拡散反射光(ディフューズカラー)
*16)The Textbook of RayTracing @TDU「Chapter5. 陰を付ける」直接光の拡散反射光
*17)Wikipedia「オーレン・ネイヤー反射」解説
*18)Octane for Cinema 4D Manual「BRDF Models」MICROFACETS THEORY
*19)Applibot, Inc. Techbot!「【連載】Unity時代の3D入門 – 第5回「拡散反射ライティング」」補足(発展)
*20)MAXON Computer. Cinema 4Dトレーニングサイト「R16 マテリアル基礎02- 反射」Step 5 透過、屈折
*21)CCS Inc.「第1回 光(電磁波)の吸収・透過・反射」電磁波(光)の透過と反射
*22)IKD ○×(まるぺけ)つくろーどっとコム「シェーダ編 その7 斜めから見ると底が見えない水面(フレネル反射)」① フレネル反射
*23)hanecci OLD hanecci’s blog : 旧 はねっちブログ「フレネル反射率について」金属のフレネル反射率
*24)hanecci OLD hanecci’s blog : 旧 はねっちブログ「フレネル反射率について」非金属(水やプラスティックなど)のフレネル反射率
*25)hanecci OLD hanecci’s blog : 旧 はねっちブログ「フレネル反射率について」フレネル反射率のグラフ
*26)The Textbook of RayTracing @TDU「Chapter1. レイトレーシング法とは何か」アルゴリズム
*27)Wikipedia「シェーディング」フラットシェーディング補間の例
論文)「光と色彩講座(第2講) 光から色彩へ」坂田, 2015,397 図-5,図-6
*28)書籍 コンピュータグラフィックス編集委員会 監修(2004)『コンピュータグラフィックス 』画像情報教育振興協会
*29)「光と光の記録 - 光編」■ 点光源」
*30)大塚電子株式会社「『イメージで分かる』光源の明るさ」■ 光源からの距離と照度の関係