見出し画像

3DCGの照明・影について【光の原理編】

初めまして、里穂Rihoと申します。

数週間前から、3DCGツール・Cinema4Dを使い始めました。

照明を勉強することで、好みの作品を作ることができるようになるのではないかと思い、照明(理論)の勉強を始めました。どなたかのお役に立てるか不安ですが、こちらのnoteでは照明についてまとめていきます。

具体的には、ツールの名称や光の現象、各現象での計算式、設置方法などについて説明していきます。

ただし、3DCGのソフトによって同じ名称でも機能が異なる場合があるため、具体例に関しては参考程度に留めていただけると幸いです。

1. cinema4Dでのライトの種類


1-1. 照明の種類

まず、cinema4Dで使用される照明光源の種類について説明します。
直接光として、デフォルトライト、ライト(電球)、エリアライト、スポット、無限遠ライトがあります。また、形状によっては、点光源(電球など)、線光源(太陽や蛍光灯など)、面光源(曇りガラスの窓を通した光や、複数の線光源を埋め込んだパネルなど)に分類されます。

・デフォルトライト
・ライト(電球)
・エリアライト
・スポット
・無限遠ライト

・点光源(電球など)
・線光源(太陽や蛍光灯など)
・面光源(曇りガラスの窓を通した光や、複数の線光源を埋め込んだパネルなど)

1-2.各照明の説明
前述のように、ライトには主に以下の5種類があります。

・デフォルトライト(初期設定で設置されるライト)
・ライト(電球:中心から全方向に均等に光が放たれる )
・エリアライト(長方形など:エリアを決めて、光を当てる範囲を決められる)
・スポット(丸/角など:自由な角度で光を放射できる)
・無限遠ライト(非常に遠い点から放たれる光で、一様に明るくなる:Z軸回転で光源の角度を調整できる)

2. cinema4Dでのマテリアル設定-反射-

次に、物体に照明の光があたった後の現象について説明していきます。
まずは、イメージをつかむために、ツール上にある反射の項目を紹介します。

画像13


私が使用しているcinema4Dでは、「反射」にて以下のモードが設定できます。これらを4種類に分類しました。

A. 鏡面反射
・Beckmann
・GGX
・Phong
・Ward

B. 特殊効果
・異方性
・Irawan

C. 拡散反射
・ランバート(拡散)
・オレン・ネイヤー(拡散)

D. レガシー※旧機能
・鏡面反射(レガシー)
・スペキュラ - プリン(レガシー)
・スペキュラ -Phong(レガシー)

こちらのモードを適切に活用するために、各名称とその意味について説明していきます。

3. 光と物質の関係について-反射-

この節では、「反射」という現象について説明します。

3-1.  光の反射とは
「光の反射」とは、光が物質の表面に当たったときに、その角度に応じて反射される現象のことを指します。主に金属やガラス、プラスチック、液体などの表面が滑らかなもので顕著に現れます。 

・金属
・ガラス
・プラスチック
・液体

3-2.反射光の種類
反射光は大きく2種類に分けられます。

スクリーンショット 2021-09-27 21.19.03

左図:入射光と反射光
右図:入射光と拡散反射光
画像引用元*1 「仕事でつかえる色彩学」色の見方、見え方


物体が鏡のように反射する現象を「鏡面反射(specular スペキュラ)」、また物体表面の浅い部分で光が拡散してから外部に反射する現象を「拡散反射(diffuse ディフューズ)」と呼びます。

(1)鏡面反射(specular reflection:スペキュラ)

「鏡面反射」とは、その名の通り、鏡のように光を反射する現象です。中学校の理科で学んだ通り、光が入射した角度と同じ角度で反射されます。また、鏡面反射では、入射した光がそのまま反射される性質があります。

画像43
画像44

法線はその点に垂直な方向のことです。屈折については 3. 光と物質の関係について-屈折・吸収・透過- でお話しします。
画像引用元*2 「【連載】Unity時代の3D入門 – 第6回「鏡面反射ライティング」鏡面反射とは

(2)拡散反射(diffuse reflection:ディフューズ)

「拡散反射」という言葉はあまり一般的ではありませんが、これも光の反射の一つです。具体的には、物体の表面深くに光が入り、そこから空気中に出て行く反射を指します。

画像18
画像20

拡散反射光が生じる仕組み
(1)物体内に屈折光が入ったのち、散乱する(上図)
(2)散乱した光の一部が空気中に出ていく(下図:拡散反射光と呼ばれる)
画像引用元*3 「【連載】Unity時代の3D入門 – 第5回「拡散反射ライティング」拡散反射とは


(3)環境光 (ambient illumination) 
周囲の物体で1回以上反射した光を「間接光」と言います。「反射光」の延長ですが、反射光が他の物質に入り込んだ場合には「環境光」として扱われます。
環境光に関しては、5-5.局所照明と大域照明のセクションを参照してください。

画像45

間接光
図の中ではオレンジ色が間接光の軌跡です。
画像引用元*4 「第11回 拡散反射光による陰影」環境光

(4)まとめ
反射光の種類をまとめるとこんな感じ。

反射光の種類
鏡面反射
 鏡のように反射する光のこと
拡散反射光
 内部に入ってから反射する光のこと
環境光
 1回以上反射したあとに入ってきた光のこと

鏡面反射」「拡散反射光」の計算式は「コンピュータグラフィックス」という分野で研究され、cinema4Dの各モードの名称はその公式の名前から取られています。

鏡面反射
・Beckmann
・GGX(分布) → Walter [2007]
・Phong(フォン)[1975]
・Ward(ウォード)[1992]

拡散反射
・ランバート Lambert[1760]
・オレン・ネイヤー Oren-Nayer[1994]

詳しい使い分け(イメージ)はこちら

鏡面反射や拡散反射の詳しい特徴については、3-4. 反射と色3-5. 反射と明るさの章で詳しく説明していきます。

3-3.反射と粗さ
ここでは、表面の粗さが変化すると光が反射する方法がどのように変わるかについて説明していきます。

3DCGでの表面粗さ
cinema4Dでは「つるつる」と「ざらざら」で表面粗さを設定します。この表面粗さについては、後の章で説明します。ここでは、質感表現において表面粗さを使用することを覚えておいてください。

画像6

左:「つるつる」な金属 右:「ざらざら」な金属
画像引用元*5 「R16 マテリアル基礎01- 基本的なチャンネル」Step 2 拡散、鏡面反射


現実での表面粗さ

ちなみに、現実の表面粗さの説明については、以下のサイトが分かりやすかったため、引用させていただきます。

画像33

表面状態の違い
同じ素材でできている物でも、表面の光沢の違いで違った色に見える場合があります。
例えば、つやつやな表面(高光沢)の青いプラスチックをサンドペーパーでこすると、白く濁った青色に見えます。これは、サンドペーパーで表面をこすることによって表面状態が変化し、照明光源からの光が表面上で拡散するために起こります。
文引用・画像引用元*6 「色と光沢(SCE方式とSCI方式)。」表面状態の違い 太字書式のみ加筆

3-4. 反射と色
物質に入射した光が反射する際に、光の色がどのように変化するかについて説明します。

(1)鏡面反射(specular スペキュラ)

入射光が物質にあたると、そのまま鏡面反射光の色として反射していきます(cinema4Dでは着色されません)。

画像32

【参考】現実での金・銀・銅の色
金・銀・銅は、鏡面反射をする物質ですが、選択的な反射が起こります。
どの波長を反射するかで、どの色に見えるかが決まります。
画像引用元*7 「金属の光沢と色|金属反射と金属光沢」金属に色がつく理由

(2)拡散反射(diffuse ディフューズ)
拡散反射では、Cinema 4Dの設定した色が比較的反映されます。このため、カラーをつけながら陰影も表現でき、3DCGで「本体色」を指定する方法としても使われます。

(3)環境光(ambient illumination) 
さまざまな光が複雑に入り混じり、その光の計算が行われます。この計算方法については、「5.陰影処理(シェーディング)」をご覧ください。

【+α】物体と色の見え方について
物体には「分光反射率」という特徴があり、「どの色に見えやすいか(=どの色の波長の光を反射しやすいか)」が決まっています。
レモンでは、黄帯の光を反射し、イチゴは赤帯の光を反射しやすいです。

画像引用元*8 「第12回『色』って何だろう?・・・(その2)」イチゴとレモンの色は何故違う?

画像31



3-5.反射と明るさ
基本的に物体のある点での明るさ(輝度)は、光源の強さ、物質の表面、光源-物質間の角度・方向などによって決まります。
これらについて、「鏡面反射」と「拡散反射」ではどのようになるのか説明していきます。

(1) 鏡面反射の場合
反射と明るさ
物体表面に対して正反射や明るさ鏡面反射が起こる場合、入射光と反射光の角度が対称な方向(下図で「正反射」の方向)に近づくほど、反射光の明るさが強くなります。このため、カメラの位置を変えると、物体の表面の見え方も変化していくことになります。

画像39

光の方向が変わると(右に行くほど)、ハイライトが見える位置も変わる(右にずれる)
画像引用元*9 「デッサンと陰影」ハイライトの性質

画像33

上図:正反射方向から見ると、光源の光(ハイライト)が見える
中図:それ以外の場所から見ると、光が弱くなる
画像引用元*10 「色と光沢(SCE方式とSCI方式)。」正反射光と拡散光

表面粗さと明るさ
また、鏡面反射は表面粗さによって表現が大きく変わります。

画像33

[表面粗さ]の値を5ずつ増加させた球体。粗さの数字が大きいほど、表面が暗くなっていることがわかります。
画像引用元*11 「反射(CineRender材質チャンネル)」幅/表面の粗さ

具体的には、表面がつるつるしている金属やプラスチックの場合は、強い光を反射し、一方、表面が粗い布やゴムの場合は、ぼやけた弱い光を反射します。この場合、強い光は狭く写り、弱い光は広く写ります(これはエネルギー保存の原理に基づくものです)。

画像34

【参考】表面の粗さと光
左に行くほど表面が滑らかで、強い、狭い反射光が見えます。一方、右に行くほど表面が粗く、ぼやけた、広い反射光が見えます。
画像引用元*12 「スペキュラ」参考画像

これは、以下の図から原理を理解することができます。

画像34

【参考】粗い表面での光の方向
同じ光の量(abcdeの5つ)でも、表面の粗さによって見え方が異なります。
左図:つるつるした表面での鏡面反射だと5つ全て真っ直ぐに届くので狭く強く見える。
右図:粗い表面での鏡面反射では2つ(e',c')のみが真っ直ぐに届き、他の3つ(a',b',d)は方向が異なるため、全体として広く弱く見える。

画像引用元*13 「色と光沢(SCE方式とSCI方式)。」SCE(正反射光除去)方式とSCI(正反射光含む)方式


画像24

【参考】鏡面反射の計算式:Phong
鏡面反射の輝度値(明るさの度合い) は、光源の明るさ , 鏡面反射率, 視線方向と光源方向のなす角度 、表面の粗さを表す係数  を用いて表されます。

Phong(フォン)の反射モデルでは、反射光の計算だけでなく環境光(Ambient)・拡散反射光(Diffuse)・鏡面反射光(Supecular)を統合して計算します。
画像引用元*14 「Phongの反射モデル」概要


(2) 拡散反射の場合
3DCGにおいて、拡散反射した光の明るさは、光が物質に入射する角度によって決まります。そして、カメラの位置によらず、ライトと物体の位置が固定されている場合、一定の陰影が生じることが特徴です。このような性質は、鏡面反射とは異なり、見る角度によって明るさが変化しないことを意味します。

画像21

拡散反射光の明るさの仕組み
拡散反射では、「光源」と「表面」の角度により光が計算されます。
下図では、光が当たった物体のある一点での明るさはどの方向(0°〜180°)でも同じ(矢印の大きさが同じ)です。観測者はその中の1矢印を見ています。
画像引用元*15 「第5回:拡散反射光 RGBレベルに注意!」拡散反射光(ディフューズカラー)


画像22

拡散反射光の陰影の仕組み
垂直にあたるほど明るく(B)、水平にあたるほど暗くなる(A)。
これは、光源と表面の法線の角度により決定します。
【再掲】画像引用元*15 「第5回:拡散反射光 RGBレベルに注意!」拡散反射光(ディフューズカラー)

拡散反射の計算式は(1)ランバート、(2)オレン・ネイヤーにより計算されます(マテリアルの設定から選べます。2. cinema4Dでのマテリアル設定-反射-の冒頭を参照。)

(1)ランバート反射の計算式
ある点での輝度値(明るさの度合い) は、a) 光源の明るさ , b) 拡散反射率 , c) 物体表面の法線と光源方向のなす角度  を用いて、計算されます。

画像40

【参考】物体に陰影がつく理由:ランバートの余弦則
拡散光により物体に陰影がつく現象
は、この式により説明することができます。
体感として「光が遠くなるほど(光の入射角が大きくなるほど)暗くなる」ことはイメージできるかと思いますが、その理由は以下の図がわかりやすいです。

" 光の入射角*が大きくなるほど、照射される面積(下図でいう赤い両矢印)が大きくなり、照度(単位面積あたりの光束)が小さくなります。
これにより、「遠い方が暗い」という現象を説明できます。 "
本文・画像引用元*16 「Chapter5. 陰を付ける」直接光の拡散反射光

*入射角:法線(表面に垂直な方向)を0°としたときの光源方向への角度


(2)オレン・ネイヤー反射の計算式
ランバートの計算式に使用するパラメータに加えて、物質の粗さ(roughness ラフネス)を計算し、ある点での輝度値(明るさの度合い) を決定します。

粗い表面を計算式で扱うことで、コンクリート・石膏・砂などのマテリアルをより表現できるようになりました。

画像35

参考として、以下の図が有用です。
ランバートモデル(中)よりもオレン・ネイヤーモデル(右)の方が物体の粗さが表現できています。
画像引用元*17 「オーレン・ネイヤー反射」解説

【+α】マイクロファセット理論
マイクロファセット理論は、実世界のすべての表面の粗さまたは不完全さを概算するために開発された手法であり、シャドウイングおよびマスキングと呼ばれるオクルージョン方法と連携して適用されます。現実的なBRDFモデルでは、表面は不均一な溝(マイクロファセット)から形成されていると見なされます。マイクロファセットは、光との相互作用のマスキング*1とシャドウイング*2による比率の量によって計算されます。 

*1 マスキング状態は、光がマイクロファセットの一方の表面で反射され、反射された部分がもう一方の「マイクロファセット」によってブロックされるときです。
*2 シャドウイングは、光が「マイクロファセット」の表面に到達する前に、他の「マイクロファセット」によってブロックされる場合です。

画像引用元*18 「BRDF Models」MICROFACETS THEORY

4. 光と物質の関係について-屈折・吸収・透過-

この章では屈折と透過について説明していきます。

画像25

画像引用元*19 「【連載】Unity時代の3D入門 – 第5回「拡散反射ライティング」」補足(発展)


(1)屈折
屈折は、光が物体に入った際に曲がる現象のことです。
屈折光は、その曲がった光のことを指します。

【参考】屈折率とは
(絶対)屈折率の定義は「光が真空から物質aに進んだ場合の速度比(sin比でもある)」です(屈折の法則またはスネルの法則)。

例えば、一般的なガラスの屈折率は1.5です。
これは、光が空気中や真空中よりも1.5倍遅い速度で移動することを意味します。また、光がより屈折する、とも言えます。

この(絶対)屈折率は物質によりおおよその値に収束し、水は1.3(1.3330)、ガラスは1.5(1.4585)、ダイヤモンド 2.4(2.4195)です。


(2)吸収
吸収は、光が物質内に屈折して入ったのちに一部の光に起こる現象のことです。

(3)透過

透過は、物質を通り再び空気中に出ていく現象のことです。
透過光は、物質を通り再び空気中に出ていった光のことを指します。

画像25

【参考】透過と屈折率
"透過とは、マテリアルの屈折率が1.0の場合で光の方向は変わりません。背後のオブジェクトが透けて見えるので、網戸やストッキングのようなマテリアルを表現できます。
「屈折」は、屈折率が1.0以上(以下)の場合で、光の方向が変わると同時にフレネルの法則に従って鏡面反射が生じます。これは、ガラスや透明な液体を表現する場合に使います。"

本文・画像引用元*20 「R16 マテリアル基礎02- 反射」Step 5 透過、屈折
太字のみ加筆

まとめ
2章では「反射」を、3章では「屈折・透過・透過」を解説していきました。

画像24

画像引用元*21 「第1回 光(電磁波)の吸収・透過・反射」電磁波(光)の透過と反射

5. 反射と屈折の割合計算について(フレネルの反射式とは)


基本的に、反射と屈折は同時に起こる現象です。そのため、3DCGにおいては、素材(マテリアル)を表現する際に「フレネル」という項目が設けられています。では、この「フレネル」とは何なのか、説明していきます。


(1)フレネルの反射式について

私たちは、身近な例から、金属は光沢があって周囲の景色が反射されること、水面は底も見えるだけでなく周囲の景色も映し出されることを知っています。このような現象を数式的に表現したものがフレネルの反射式です。フレネルの公式は、主に金属よりも水やプラスチックなどの表現の計算に有効な式です。(原理については後述しますが、イメージとしては「金属はどの角度でも鏡面反射するが、水は見る角度によって見え方が違う」と言えます)

具体的に、湖での景色を思い出してみましょう。
足元に近い水面では水中が見えて、逆に、遠くの方の景色は周りの山々が見えてませんでしたか?

以下の図で、
・屈折光=水中の様子を見るための光
・反射光=周囲の景色が映り込むための光
と考えると想像しやすいかもしれません。

入射光が真上に近いと水中の様子がみえ、
入射光が水面に近いと周囲の景色が見えてきます。

画像9

画像引用元*22 「シェーダ編 その7 斜めから見ると底が見えない水面(フレネル反射)」① フレネル反射

この「角度による見え方」を計算で説明するのに適したのが、フレネルの反射式です。この反射式を用いて、物質によって異なる反射の程度(=フレネル反射率)を計算できます。次に、この原理を用いて、「金属は光沢があり、周りの景色が映る。水面は底も見えるが、周りの景色も映る。」という現象をフレネルの反射式で説明していきます。

(2)フレネルの反射式

金属の場合

金属は、想像の通り光を反射しやすい性質があり、
真上0°から水平90°にかけて目線をずらしても、つねに90%以上に光を反射します。
※真上が0°(=F(0°))と定義されています。

画像11

画像引用元*23 「フレネル反射率について」金属のフレネル反射率


水の場合

水は、目線によって光の反射の程度が大きく変化します。
真上0°から60°ではほぼ水中しか見えないのですが、60°から水平90°では指数関数的に光を反射していきます(下の【+α】を見るとその急激な変化がわかりやすいかと思います!)。
※真上が0°(=F(0°))と定義されています。

画像12

画像引用元*24 「フレネル反射率について」非金属(水やプラスティックなど)のフレネル反射率


プラスチック

皆さんもお野菜やその他のプラスチック袋で「部屋の光が反射して眩しい」ことはありませんか?
その一方で「プラ」は「中身が見える外袋」として使われています。

実際に確かめてみると、プラスチックは水と同じように、視点の角度によって光の反射度合いが大きく変わります。例えば、真上から10度の角度で見ると、プラスチック製の袋の中身はクリアに見えますが、水の場合は80度の角度で95%の光が反射するため、周囲の光や景色が反射して見えることがあります。なお、真上を0度(=F(0°))と定義しています。

画像13

【再掲】画像引用元*24 「フレネル反射率について」非金属(水やプラスティックなど)のフレネル反射率


このように、
3DCGにおいて「フレネル」という言葉が出てきた場合は
「反射と屈折の割合を決めるんだな」と思っていただければ良いかと思います。

【+α】入射角(angle of incidence)とフレネル反射率(Rf)の変化
より直感的に目線によるフレネル反射率の変化を把握するには、以下のサイト及び図が有効かと思います。

入射角(angle of incidence)とフレネル反射率(Rf)の変化を素材別にまとめたグラフで表したのが以下の図です。
【各軸の説明】
x軸・・・入射角(angle of incidence):どの角度から見るか
y軸・・・フレネル反射率(Rf):どれくらい反射するか(×100したら%表記になります)

例えば、「watar 水(水色の線)」は
真上から50°を超える(=水面に近くなっていく)と急激に反射する光の割合が大きくなります(前述の「遠い水面は周囲の景色しか見えない現象」です)
他にも、copper(銅)やアルミニウム、iron(鉄)、ダイアモンド、ガラスの変化がグラフ化されています。

画像引用元*25 「フレネル反射率について」フレネル反射率のグラフ

画像10


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. 視点の位置を決める
2.スクリーン上の各点(x,y)について以下の処理を行う.
 1.視点から点(x,y)に向かってレイを飛ばす.
 2.そのレイと交差する物体がないか調べる.
  1.(図3a) 交差する物体がない場合,次の点を処理する.
  2.(図3b) 物体の交点と光源の間に他の物体がないならば,シェーディングの処理を行う.
  3.(図3c) 物体の交点と光源の間に他の物体があるならば,影として扱う.
 3.スクリーン上の点(x,y)における色を決定する.

本文・画像引用元*26 「Chapter1. レイトレーシング法とは何か」アルゴリズム
太字のみ書体追加

画像40


このように、
1ピクセルごとに視点から引いた線・物体・光源の3つから物体の可視面を計算していきます。

5-3. 陰影計算(シェーディング)について
次に、陰影計算(シェーディング)について説明します。

陰影計算(シェーディング)は、光源、形状、視点との位置関係、材質などを考慮して物体の明るさを表現する処理のことです。

代表的な陰影計算はこちら。
(1)コンスタント(フラット)シェーディング
(2)スムーズシェーディング 
    ・グロー
    ・フォン

(1)コンスタント(フラット)シェーディング
各面(ポリゴン)の法線ベクトルと光源との角度から、面ごとに一定の明るさで表示する方法です。

画像40

画像引用元*27 「シェーディング」フラットシェーディング補間の例


この方法は計算が簡便な一方、隣り合う面(ポリゴン)の明度差が大きく見えてしまう(=段階的な明るさになってしまい、不自然)という弊害があります(マッファバンド効果)。

【参考】マッファバンド効果(Mach bands)
マッハバンド(Mach bands)とは、微妙に濃淡の異なるグレーの領域が接触している場合に、暗い方の領域の境界付近はより暗く、明るい方の領域の境界付近はより明るく強調されて見える、錯視の一種である。
Wikipediaより引用)

この現象は、以下の論文がわかりやすかったので、ぜひご覧ください。
左図は実際の輝度(設定した明るさ)と見えの明るさ(見た目ベースの明るさ)の差を伝えています(実際に帯が見えますかね.)。
右図は、その帯の正体を数値で説明しています。
まず前提として、人間の網膜が光を感知(この時興奮が起こる、その度合いを「興奮値」としている)したとき、隣の網膜上の細胞を抑制します(図で言うと、-3などです)。自身の興奮値が高いほど、隣の細胞を抑制します。
その合計値を1つずつみていくと、4→4.3→3.6と一度明るく見える部分が、2.4→1.7→2と一度暗くなる部分があります。これが帯に見える箇所です。

画像引用元*27 「光と色彩講座(第2講) 光から色彩へ」坂田, 2015,397 図-5,図-6

画像37


(2)スムーズシェーディング
(smooth shading)

スムーズシェーディングでは、
コンスタント(フラット)シェーディングで起きた「隣り合う面(ポリゴン)の明度差が大きく見えてしまう」という問題点を解消していきます。

スムーズシェーディングは、
各面(ポリゴン)において補間により明るさを表示することで、近似的に滑らかな明るさを計算する方法です。
この計算方法の代表例には、グロー(輝度補間)フォン(法線ベクトル補間)の2種類があります。

画像44

画像引用元*28 コンピュータグラフィックス編集委員会 監修(2004)『コンピュータグラフィックス 』画像情報教育振興協会

グロー(Gouraud shading:輝度補間)
各面(ポリゴン)の頂点における輝度を求めたのち(①)、各面内の輝度を求める(②:一次補間)方法です。

ある1点(1ピクセル)での明るさの求め方
①各頂点の明るさの算出
物体を各面(ポリゴン)に分割し、各頂点(下図5.30(b)の点Pでの輝度を求めておく(反射を参照)。(b)の点Pのように、(a)の点A・点B・点C・点Dでの輝度を求める。

なお、ある点での輝度は、囲まれた面の法線ベクトルの平均値から算出した法線ベクトルと光源の角度などにより求める(具体的な算出は用いる公式により異なる)。

②頂点間の一次補間
内分点の公式で点L・点Rの輝度から、点P(1ピクセル)の輝度を求める。
これを全てのピクセルにおいて求め(1280×720なら約921,600個)、画像全体の明るさを決定する
引用元はこちら * 画像元を変更する


このグローシェーディングの性質は、wikipediaの説明がわかりやすかったため、引用します。

この方法では、輝度のみ補間することから、ハイライトの計算が正しくできない欠点があります
たとえば、多角形の内部にハイライトがある場合、頂点のみで輝度を求めた場合いずれの頂点もハイライトは求まっていないのでそれらから補間したのでは、当然ハイライトは生じません。また、補間は線形補間であるため、多角形同士の境界部ではスムーズに明るさが変化するのではなく、折れ線的に変化します。
すなわち、マッファバンド効果は減少しますが、完全にスムーズになるとは限りません。



・フォン(Phong shading:法線ベクトル補間)
グローシェーディングは、輝度の線形補間を行い、ある1点での輝度(明るさ)を求めました。

一方、フォンシェーディングは、法線ベクトルの線形補間を行い、ある1点での法線ベクトルをもとに輝度(明るさ)を求めます。

これにより、より細かく光計算できるようになり、
ハイライトも滑らかに描写できるようになりました。

画像36


5-4.代表的な影付け(shadowing シャドーイング
陰影計算(シェーディング)と影付け(シャドーイング)の違いについてざっくりと説明します。

陰影計算と影付けの違い
陰影計算(シェーディング:前述)
 物体表面の陰影を表す(下図[a])
影付け(シャドーイング:今回
物体によって光が遮られた領域を表す(下図[b]

スクリーンショット 2021-09-29 15.02.37


この「遮られることによりできる影」は2種類に大別できます。
・本影(はっきりとした影。完全に光が遮られた領域)
・半影(ぼやけた影。一部の光が届いている領域)

画像41

ここからは、光源別に詳しく影のできかたについてみていきます。

平行光源(Directional Light:太陽など)
非常に遠い場所(無限遠)から照らされているため、明るさは一様になります。
日常生活の明るさに近いです。

点光源(Point Light:電球やロウソクなど)
全方向を同じ強さで照らします。
光源の小ささから、はっきりした影が出やすいです。

画像41

画像引用元*29 「光と光の記録 - 光編」■ 点光源」

【参考】減衰とは
3DCGツールでは、点光源の「減衰(光の強さが一定の割合で変化する)モード」を設定できます。
これを設定すると、現実的なライトのように、逆二乗に比例して明るさが変化していきます(光源からの距離が2倍の場所では1/4の明るさになります)。
これは、光束が広がることで「密度(明るさ)」が小さくなるためです(以下画像)。
画像引用元*30 「『イメージで分かる』光源の明るさ」■ 光源からの距離と照度の関係

画像40


線光源(Line Light:蛍光灯など)
点光源の集まりであり、面光源のような2次元の広がりがない光源です。
そのため、点光源より明るいが線方向と同じ方向にある物体にはうまく明るさが出ないので注意が必要かと思います。

・スポットライト(Spot Light:懐中電灯など)
点光源に近いですが、放射範囲を決めることができます。

・面光源(Area Light:エリアライトなど)
長方形や円柱などの大きさを持つ光源です。
点光源と異なり大きさを持つため、光が物体の外側から入ってくる時に「半影」という薄い影ができます。そのため柔らかい影になりやすいです(以下画像再掲)。

画像42

【再掲】画像引用元*29 「光と光の記録 - 光編」■ 点光源」



5-5.局所照明と大域照明
ここでは局所照明と大域照明について説明していきます。

局所照明とは、光源からの直接光のみ計算結果に反映させる手法です。
大域照明とは、間接光(複数回反射した光)もレンダリング結果に反映する手法です。

具体例として、Wikipedia記事内に掲載している以下画像を見ていきます。

(1)局所照明(ローカルイルミネーション)
局所照明では天井の照明のみ光の計算対象になっています。

画像38


GOOD:球体の影やハイライトが表現できている。
BAD:天井照明の直接光が当たらない奥の空間の壁や床の明るさが一様で、違和感がある。また、照明周りの天井の明るさの陰影が全くない。

(2)大域照明(グローバルイルミネーション:以下GI)

画像38

局所照明で再現できていなかった「天井の陰影」「奥の空間」の陰影がつ来ました。これは、物体や床に反射した光が「天井」や「奥の空間」に届いた(計算がなされた)ためです。
また、壁の緑色が「奥の空間」に薄く反映されています。これは、天井の光が緑の壁に反射し、その色情報をもったまま「奥の空間」に届いた(計算がなされた)ためです。

【参考】「環境光は均一」か?
前述のPhong反射モデルでは計算を簡便にするため「環境光」を一様としました。ただ、これでは光が少ない空間はベタ塗りになってしまいます。そのため、GIを設定することでツールにあった条件で重すぎない範囲で計算してくれます。


5-6. 環境遮蔽(Ambient occlusionアンビエントオクルージョン:以下AO)
5-5.では環境光について説明しました。
ここでは、より写実的な絵作りをするための、環境遮蔽(アンビエントオクルージョン、AO)について説明していきます。

アンビエントオクルージョンとは、
囲まれている空間を遮蔽部分をより正確に計算する表現方法です。

画像43

引用元はこちら

 上記の画像で「全体的に陰影のメリハリがついた」と感じるのではないでしょうか。
これは、遮蔽部分をより正確に計算することで、影部分の表現の幅が広がったためです。

このように、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)大塚電子株式会社「『イメージで分かる』光源の明るさ」■ 光源からの距離と照度の関係

いいなと思ったら応援しよう!

里穂riho
サポートで頂いたお金は、note作成のコーヒー代になります!サポート、嬉しいです...。