« 2023年度 第1回オープンキャンパス報告(研 C紹介) | トップページ | 2023年度 第1回オープンキャンパス報告(片研会場) »

無限遠にある光源

2023年6月28日 (水) 投稿者: メディア技術コース

3年生向けの講義「3次元コンピュータグラフィックス論」の授業での履修生からの質問とそれに対する回答を紹介します。「シェーディング」(CG形状モデル表面の輝度を求める照明計算)というテーマの授業回で、光源の種類について説明した下記のスライドについての質問です。
 
Lightsources
 
質問:
 
平行光線に関して、「点光源が無限に遠いところにある」という説明がいまいちよくわかりませんでした。
 
回答:
 
実世界で無限遠というのは想定できません。あらゆる光源は有限の位置にあるわけです。実は無限遠はCG描画計算の都合で用意された架空の想定です。特定の向きから光線が平行に降り注ぐことから「平行光線」と呼びます。光源が無限に遠いと想定すると、少ない計算量で物体表面の1点の輝度計算(照明計算)ができます。そしてその結果はある程度遠いところにある点光源から照らされた結果とほとんど同じです。
 
であれば、わざわざ遠い有限の距離を設定するよりは架空の無限遠設定で計算するのがいい、ということになります。そうすると、後で出てくる「距離の2乗で割り算」という計算をしないで済ますことができます。1回の照明計算で、引き算3回、掛け算3回、足し算2回(以上距離の2乗の計算)、それと割り算1回を省略できます。
 
もちろんそれぐらいの計算はきわめて短時間で実行できます。しかし、CG描画では各頂点で照明計算を行いますから、仮にシーン中に10万頂点あれば10万回の上記計算が節約できます。やや極端ですが、同じ条件下で点光源10個を平行光線10個に置き換えれば100万回節約できます。
 
もっとも近年ではGPUの処理速度が以前よりも高まったため、1フレーム(リアルタイムCGなら16ミリ秒)のうちの数100万回程度の乗算や除算はさしたる影響もない、という判断もあり得ます。ただ結果がほとんど同じなら、無駄な計算をしないために無限遠の光源を設定すべきでしょう。
 
無限遠とは言っても向きは確定します。平行光線の位置の設定に際しては向きのベクトルを指定することになります。例えば空間内のある1点(10, 5, 20)に存在する点光源(もちろんこれは有限)の位置は(10, 5, 20, 1)と設定します。これを(10, 5, 20, 0)と設定すれば向き(10, 5, 20)の無限遠にある平行光線とみなされます。
 
3次元ベクトルではなく4つ目の次元をもったベクトルで位置を指定し、無限遠かどうかは4番目の成分が0かどうかで判定します。このような4次元の座標は同次座標と呼ばれ、数学的に3次元空間での無限遠の向きを有限の位置と同じ枠組で設定できます。
 
少し制作面の話をしましょう。晴天の屋外のシーンであれば太陽を想定した無限遠の平行光線を使えば十分です。
 
一方で屋内のシーン、特に暗めの部屋であれば無限遠の光源は使わずなるべく有限位置の光源を使う方が雰囲気が出ます。この講義では説明しませんがスポットライト(特定の向きに近い範囲だけ照らす点光源)も併用すると効果的です。
 
メディア学部 柿本正憲

在学生向け」カテゴリの記事

授業紹介」カテゴリの記事

高校生向け」カテゴリの記事

« 2023年度 第1回オープンキャンパス報告(研 C紹介) | トップページ | 2023年度 第1回オープンキャンパス報告(片研会場) »