新人研修
どこぞの会社の新人研修の一環なのか駅前で「よろしくお願いします。」と声を上げながら必死にビラ配りをしているスーツ姿に遭遇しても一切無視する冷酷な皆さんこんにちは。まぁ、社会の厳しさを学ぶのも新人教育の一環ですからね。
ライトの種類
3Dのゲームを作っていると少なからずライティング(及び影)についてアレコレと考慮する必要が出てきます。
特別リアルな画面を作ろうとしなくてもシェーダーによってはライトの影響を直に受けるので、思ったようなゲーム画面を作るにはライティングの設定が欠かせません。
Unityで用意されているライトの種類は
- Directional
- Point
- Spot
- Area
とあります。それぞれを説明すると
■Directional Light
この中でもDirectional Lightは太陽光に該当する光源となるので基本的にどのシーンでも使われるライトです。
限りなく遠くに存在する光源として捉えられるのでライトの位置はあまり関係なく、角度の設定が重要となります。
例えば下のような全く光源のないシーンに
Directional Lightを追加すると・・
オブジェクト全体にDirectional Lightで指定した角度から光が照射されて影が形作られます。
■Point Light
Point Lightは指定した位置から全方向に同等な光量を発するライトです。
つまりDirectional Lightとは違い、ライトの位置と光量の設定がシーンに影響を与えます。
このライトは主に蝋燭や電球のように局所的な光源を表現するために使います。
先程のシーンの上部にDirectional Lightを追加すると
電球がボックス内を照らしているような画面となります。
■Spot Light
Spot Lightは光の当たる範囲を指定することができるライトです。
この為、ライトの位置と角度及び光の当たる範囲を指定することになります。
一般的にスポットライトは懐中電灯や車のヘッドライト等の光源として使用されます。
一人称視点のホラーゲームでは頻繁に使われているので以外に使用頻度は高いライトです。
そしてArea Light
Area Lightは空間内に長方形もしくは円形のエリアを指定して、その表面エリアから均一に放射される光源となります。
Spot Lightと違い光の当たる範囲を決めることはできず、Area Lightとその光が当たるオブジェクトとの距離によって照射する光量が決定されます。
幅の広いLEDライトや窓から差し込む光等、シーン内により自然な光の表現を加えるときに使用しますが、その分計算量が多くなる為、前述の3つのライト(Directional/Point/Spot)と違いその効果はダイレクトにシーンに反映されません。
要は設置しただけでは光源として使われない、ということです。
Area LightはTypeプロパティ欄に「baked only」とわざわざ記載されているようにライト設置後、ライトマップにベイクする必要があります。
そして、Area Lightの光を照射されるオブジェクトは全て「static」の設定が必要となります。
このため、最初にシーン内にArea Lightを設置した後に
各オブジェクトのInspectorで「Static」のチェックをONに設定
最後にメニューからWindow→Rendering→Lightingを選択して
Lighting設定から「Generate Lighting」をクリック
暫くするとライトマップがベイクされArea Lightで照射されたシーンが表示されます。
注意点
Point Lightと比較すると広い光源でシーン内を照らしている分、かなり自然な画面になっていることが分かります。
室内等で写実的な表現をしたい場合には頻繁に使う必要があるかと思いますが、ライトマップにベイクする計算にはかなり時間が掛かります。
使用するPCの性能にもよるかもしれませんが、上のシーンのベイクでも3~4分掛かりました。
設定の変更がダイレクトに反映されないので設定を失敗するとベイクするまで分からないのはちょっと痛いところです。
Area Lightの失敗例
また、オブジェクトを移動してもライトマップにベイクされた情報はそのままなので、オブジェクトの影は残ったままとなります。
ここら辺を考慮して使用する必要があるみたいです。