前回は、
■ 光源について(1) 【 Blender & UPBGE 】
にて【 実写 】 でのライトと 【 レンダリング 】 について書きましたが、今回は、3DCGやゲームの場合について書こうかなと思います。
3 DCGにおけるライト
3DCGにおけるライトですが、これは、スタジオ撮影のように照明を用意して光を当てる方法と、環境光を使う方法があります。
ライトについては、先日紹介したように強い光だけを用意すると
のような感じになりますが、面光源を入れると、
のようになり、床のレフ効果を追加すると、
のようになります。背景に向かて色月の光を飛ばして、ライティングをすると、遮蔽空間でも
のようになり、色調の変更をすると、
のようになります。Blenderを立ち上げた状態の半逆光だけだと
の状態なので、光を変えるだけでかなり状態を変えることができます。
これがライトを使った状態ですが、3DCGツールにはIBLがあるので、パノラマで撮影されたHDRI素材があれば、環境マッピングによって画像の色と光の状態を参照して空間内に適応する事ができます。
実際に適応すると、
の様な質感になります。
■ ライトによるライティング
■ IBLによるライティング
のように結構印象が違ってきます。この内容については、
の中で触れていますが、光源の使い方で状態がかなり違ってくるので、ライティングの自由度は恐ろしく高く、奥深いです。
ちなみに、IBLを適応して動画を書き出してみると、
■ DoFなどを使ってみた動画
のような感じになります。(Sour暄さんトコの可愛いミクたんにモデルをしてもらっています。)
3DCGを使う場合、
■ ライトオブジェクトでのライティング
■ HDRI素材を使ったIBLでのライティング
の2つの選択肢があります。
■ 光の基準
写真や映像は 【 光の強さと波長を切り取る事 】 で成立しているのですが、これは、光軸の延長線上にある世界の状態をそのまま記録する時の作業になりますから、レンズの向こう側に存在する光軸の先の現象がどうなっているのかを作らなくてはなりません。その時に
■ シーンを構成するセット内の状態
■ シーン内の光の状態
の2つがセ率していなくてはなりません。この時に光の状態を作るのが、ライティングの作業になります。この条件で考えると、少なくとも
■ 光(照度や物体のハイライトなど)
■ 影
の状態を作る必要があります。この時に、ハイライトとシャドウがどんな感じで出る条件を作るのか?を考えることになります。これが、先日紹介した 【 光の状態の違い 】 になります。
この時にどう言った光を使った物にするのかを3DCGでは考えることになりますが、ゲームでも基本的な考え方は同じです。
光の使い方ですが、 【 現実世界の自然光は常に一つである 】 という考え方で光を作る方法がありますが、これは、一点光源で撮れと言う話ではなく
のように光を当てて作る方法もありますが、物体を撮る時に
のように 【 複数の方向に影が出るのは不自然だから、こうならないような光の作り方を考えてみましょう! 】 という意味合いで、光源が一つの条件だと一つの影しか出ないようにするライティングを考えることになります。なので、そうした光の作り方は応用分野になりますが、基本的に物体がどう見えるのか?を考えて光を当てて質感とシャドートハイライトのコントロールをすることになります。
ゲ ームでの光の使い方
ゲームの場合、ライトを使う場合だと、前述の方法が使えますが、ローレゾのゲームのようにライトを使わない場合もあります。その為、どう言った物を作るのかで処理の方法が変わってきますが、現実とは違ったライトの振る舞いの指定が可能なので、結構面白い事が出来ます。
■ 現実世界の光の振る舞い
光と影の関係性と特性については、小学校3年生の理科で、太陽と影の関係を学習する事になりますから、光の差す方向の延長線上に必ず影が出来ることを学びます。つまり、光の反対側に必ず影が出来るわけです。
光を遮蔽しているので、その部分が照らされていないので暗くなっているだけですが、中学校では、この応用でカメラのレンズでピントを合わせる時に使用する 【 焦点 】 や 【 焦点距離 】 なども登場しますが、ルーペを使ってレンズの特性を知る時に、
【 物が大きく見えて、はっきりと見える 】
時には、 【 物とレンズの距離が決まっている 】 事を実際にルーペを使って体験しますが、この時の距離には法則性があり、物理的に光の進行によってその状態が決まっている事を学びます。
カメラのレンズには、インナーフォーカスの物もありますが、こうしたレンズは写真用だと問題がありませんが、動画だとフォーカスブリージングが発生します。その為、動画だと別のレンズを選ぶことになりますが、このフォーカスブリージングとワーキングディスタンスの相関関係も焦点の変化が関係しています。
話を戻して、影についてですが、光を当てるとできる物になりますが、この時に、光が照射されている面とそうでない面の2つが存在しています。その為、光が差した時、ハイライトとシャドウの2つが必ず生まれており、明るい場所と暗い場所が発生するようになっています。
■ ゲーム内の光と影
まず、ライトを使う条件で考えると、光には先日書いた光の種類があり、
の3種類があります。そして、この光に対して影が出るわけですが、
のような感じになっています。そして、このお二者では光の特性が異なり
と言う特性があります。その為、使う光でも
■ 指向性の有無
■ 光の減衰の有無
が存在します。光を減衰させると、直射の光ではなく、拡散して回る訳ですが、指向性のある光は被写体を直接照らす事になりますが、反射光(バウンス光)では、空間自体が明るくなるので、バウンス光は、間接照明や空間全体の明るさの調整が出来るライトと考えて使う事になります。光には、
■ 直接光 : オブジェクトの表面を照らす
■ 間接光 : 空間全体を照らす
の2種類がありますが、反射光(バウンス光)は後者と同じ振る舞いになります。その為、間接光と反射光の特性が同じように書かれている事もありますが、空間内の色や背景の色などをコントロールする時に間接照明を使う事になります。
このように 【 光の種類 】 で光の状態も変化しますが、影の状態もライトの当て方で変わってます。この特性は3DCGでも同じなので、プリレンダリングで動画を作る場合やゲームエンジンでシーンを作る場合にも共通しています。
■ 光の変化
と言う変化が発生します。
この時の光の特性ですが、 【 距離の二乗に反比例する 】 のですが、この特性を持つ法則を 【 逆二乗の法則 】 と言います。
つまり、距離の変化で 【 照射範囲 】 と 【 明るさ 】 が変化するので、照射範囲を広くしようと思うと、光源を遠ざけるか、巨大にする必要があり、明るくしようとすると、ライトを近づけるか、ライトのパワーを上げる必要があります。
と言う状態で方向性を決めることになりますが、この辺りは、PBRの質感の設定時の 【 メタルネス 】 と 【 ラフネス 】 によるベースの質感の設定と調整の方法は同じです。これを光源の種類でどう使い分けるのかを考えることになります。
■ 動かせる光源
3DCGの高原は、オブジェクトで指定する物と、環境光のように別の設定方法が行えるものがありますが、 【 オブジェクト 】 に限定すると、 【 動かす事の出来る光源 】 になります。
Blenderでは、
のように4種類の高原があります。スタジオのようなせっティングだったり、環境光ではなく、スタジオ撮影のようにライティングでシーンの状態を作る場合には、こうしたオブジェクトを使います。この場合、定点で固定して使う事もできるので、
■ オブジェクトを使った物 1
■ オブジェクトを使った物 2
のような処理ができます。
ライトの調整については、ライトを選択後にオブジェクトデータのプロパティで調整する事になりますが、
のようにライトの種類と設定が可能で、影の調整も行えるようになっています。ライトで設定が異なるので、
のようにオブジェクトの光の種類を変更できるようになっています。ボリュームを適応したオブジェクトの内部でライトを使用した場合、
のような違いになりますが、太陽光はサーフェスしか照らさないのでオブジェクトの内部に影響を当てっる事はありません。こうして比較すると、特性がかなり違っている事が解ります。
これをボリュームなしの屋外で試すと、
こうして見てみると、太陽光が結構はっきりとした影が出ている事が確認できますが、同じ照度だとエリアライトの方が少し明るいようにも見えます。また、太陽の場合、数値を巨大にすると白飛びするので、1を基準に様子を見ながら数値を上げていくような流れになります。
エリアライトは、数値を変えると、光が減衰していくので、
のようになりますが、正方形だと影が個別に出ています。これに対して、長方形や楕円にすると
のような影が出ます。その為、範囲の広いエリアライトを作って光をコントロールすると曇天のような光が回った状態にできます。
エリアライトをCyclesで使うと、先程の正方形のライトでも
のような感じになります。ビューポート上では、
のようになっていますが、エリアライトの場合、面光源のサイズを変更して光と影のコントロールを行えるようになっています。また、ここにボリュームを追加すると、
のようになります。
オブジェクトはキーフレームで動かす事が出来るので、モーションを付けることができますが、UPBGEのようにゲームとして機能する物を作る場合だと、この挙動をライトに対しても適応できるので、光源自体を移動させることができます。
■ ボリュームライトを動かした物
ゲーム+Xbox GAME BARの動作なので、負荷が高くなっているせいか、ボリュームが綺麗出ませんでしたが、こんな感じの事もできます。
■ 放射の設定
Blenderでは、プロパティに放射の設定があるので、
のような感じで用意したオブジェクトを放射の色と放射の強さの変更で、
のようにすることができますが、この処理は
■ 放射をコントロールした物 1
のようにプリレンダリングだけでなく、UPBGEでのロジックでもキーフレームの状態はアクションとして登録できるので、ロジックエディタで制御する事ができます。
■ UPBGEで放射をコントロールした物
■ 環境光
bLENDERでは、環境光の設定も可能で、ワールドのプロパティで指定する事ができます。
ここで、光と空間の状態を作る事になりますが、ゴッドレイなどのポスプロの効果や距離による減衰を入れない場合だと、ボリュームなしでもいいのですが、シーン内で作れる空気感を入れる場合には、
のように 【 サーフェス 」 と 【 ボリューム 】 を使用します。ここにグラデーションの配置なども可能ですが、
のようにカラーの部分にテクスチャを適応できるようになっているので、ここで。 【 環境テクスチャ 】 を選択してHDRI素材を読み込むとIBLの設定を設定する事ができます。
これとは別に、日周運動のような物を実装できる機能もあり、
の項目から、日付と時間を指定して太陽の位置を決めることもできますし、光の状態をコントロールすることもできます。これは、標準実装のアドオンで、プリファレンスから追加しなければなりませんが、こう言った機能も追加されています。
ボリュームの効果については、前述のように
のような光の状態を作る時に使用する事になりますが、UPBGEでは、ゲーム内のレンダリングにEeveeが使用できるので、
■ UPBGEでボリュームを使った物
のような表示にする事もできます。
今 回出てきた物
今回は、光の特性として、逆二乗の法則が登場しましたが、この中で、 【 二乗 】 に 【 反比例 】 するというキーワードが出てきました。この2つは、義務教育の中で学習する内容になりますから、基礎分野が理解できているとイメージしやすい内容かなと思います。
■ 比例・反比例
のように0以上の数値に限定した一飛関数と分数関数のグラフと、法則性を持って並んだ数値の表が出てきます。数値の表を元に座標を指定して、その点を結ぶとラインが構築されるので、数値には折れ線グラフのように法則性がない物とは別に、同じように変化する物の場合、法則性を持った直線で結ぶことが出来ることを学びます。これが、関数や解析学の入り口であり、法則性を持ったものが綺麗な線分で表記できることを知る上での始まりの場所になります。この前段階として、 【 数列 】 を学習しますが、これが数値の並んだ表から推移の法則性を導き出すものになっていましたが、等差数列や等比数列で法則性を見出そうとすると少し難しくなりますが、データをグラフに起こしてみると、法則性が見えてきます。等差数列のグラフを描いてみるとどう言った推移か解りますが、一次関数を数値の羅列の表で見ると状況をイメージしにくいと思います。17世紀になって解析学が生まれる前までは、等差数列のような数値の並びだけで推移を判断するという無茶が過ぎる時代だったのですが、デカルトとフェルマーの発明品である座標平面を使ったグラフの登場で代数で示された数値の集合体の法則性を幾何で示す事が出来るようになりました。その後、解析学は多方面で使用されるようになりました。小学校の授業だと、社会や理科でもグラフが登場しますが、これもデータと言う数値に対しての推移や定点的な状態を幾何で示したものになります。これも算数の比例と同じで、データと言う代数の分野の物をグラフという幾何に変換して表示する事で、視覚的に見やすくした物になります。
■ 累乗
2乗と言う形は、指数として2が追加されている数値になりますが、これについては、中学校1年生の数学の 【 累乗 】 のカリキュラムで学習する事になりますが、これは、 【 掛け算のループ処理 】 になります。
小学校2年生では掛け算と割り算を学習しますが、これが加減算のループ所入り(除算は 【 逆数の乗算 】 と覚えると、分数の割り算とかに対応しやすくなります。)になります。掛け算については、
のような感じの処理なので、
と考えることができます。累乗は、これが乗算処理になった物ですから、
と言う形になっていますから、指数の数分だけ同じ数の掛け算を繰り返している事になります。その為、
と考えることができます。つまり、2乗数とはこの数字の右肩にとまった小さな数値が2の状態であり、 【 同じ数値を二度かけ合わせた物 】 になります。これについては、九九の表で見ると解りやすいのですが、
の部分は同じ数字が掛け合わせてあります。このように同じ数字が掛け合わさっている条件が複数回発生すると、式が複雑になるので、それを簡素な表記にする為に 【 累乗 】 を用いて、ループ処理の回数を指数で示す事になります。
■ 関数のグラフ
中学校3年生の数学では、この指数を使った関数の 【 二次関数 】 が登場します。一次関数とは異なり、
と言う式を使う事になりますが、この時に登場するグラフは、
のようになります。このグラフの基本形は、
のようにすると、
のように一次関数の時に見られた傾きと切片の変化だけでなく、水平動が出来るようになります。一次関数だと、傾きと切片の変化しかありませんから、
のような変化になりますが、グラフの場合、傾きと切片で状態が変わり、
■ 傾き : 変化
■ 切片 : スタート段階で存在する初期値
と考えることができRので、x = 0をスタートとした時に、どんな状態になっており、
と言う式は、
となっていますが、現実に置き換えると、
のような構造体として考えることができます。
■ 逆二乗の法則
光に限らず、物理の中では、二乗を使った式が登場します。これは、中学校の物理で登場する 【 落下運動 】 の公式でも指数を使った計算が発生します。自由落下を一次元の軸に固定して推移をみると指数で制御した形になりますが、これを垂直落下から、横方向の移動が発生する二次元に拡張した状態で推移を見てみると、放物線を描くことが確認できます。つまり、符号の付いた二次関数ノグラフと同じ挙動になります。
指数が登場するのは、落下距離の計算式で、
と言う式になりますが、ここでもしっかりと指数が登場しています。運動方程式には、二乗と言う数値が登場しますが、逆とは符号が付いた状態になりますから、
のような2ビット処理の回路で、
のような判定をする時と同じですから、 【 数値 】 + 【 符号 】 でコントロールした物になります。ちなみに、プログラミング言語でバイト型を使う場合には、桁の先頭部分(左端の桁)は 【 符号 】 なので、実質的に、数値と符号が論理積で繋がれた構造で管理されています。
【 逆二乗の法則 】 ですが、
のような定義がありますが、球体を想定した場合、球体の表面積の公式は、
ですが、半径が倍になると、面積は4倍になり、3倍になると9倍になります、この時に特定の密度で外部に向かって進む等間隔に用意したラインを用意した場合、面積が小さくなる程、二辺で構成される円弧の長さは短くなり、面積が大きくなる程円弧の長さは長くなります。
この現象が球体でも発生するので、球状の形状に対してそれをおこなった場合、その線の密度は半径の変化によって影響を受けることになります。この時の密度の変化ですが、半径が2倍になると、級の面に向かう線の密度は1/4になり、3倍になると1/9になります。
これは、 【 影響力は発生源の距離の二乗に反比例する 】 事を意味しています。この法則ですが、
■ 電線の性質4
■ 電化におけるガウスの法則
■ 等電位面
と言う法則があります。