【初心者Unity】ライティング入門
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ライティング入門
今回はUnityのライティングの仕組みについて、とりあえず押さえておきたい基礎的な事柄を紹介していきます。
※ 使用しているUnityのバージョンは2019.4.19です。
初期設定の確認
まず初めに3Dシーンのデフォルトのライティングを見てみましょう。
作成したばかりのシーンにて、ライティング周りの設定を何も変更せずにサンプルのオブジェクトを配置した状態です。
サンプル棒人間くん
ライトはシーンに初期配置されているDirectional Lightのみ有効な状態です。
ライトが当たっているはずなのに、全体的に色味がなく暗い感じになっています。
これは、まだ厳密なライティング情報が計算されていないためです。
オブジェクトの配置などのシーン編集には差支えはありませんが、見え方などを確認する段階では設定を変更する必要があります。
ライティングの自動計算を有効にする
メニューバーの「Window」→「Rendering」→「LightingSettings」からLightingビューを開きます。
Sceneタブの一番下に「Auto Generate」の項目があります。
Auto Generateはシーンの編集状況に応じて自動的にライティング情報を計算するための設定ですが、Unity2019からデフォルトでOFFになりました。
ライティングの確認をしたい場合はこちらのチェックを有効にしてみましょう。
Auto Generateを有効にして計算が終わった後のシーンがこちら。
明るくなりました!
Auto Generateは計算にけっこうな時間がかかる場合があります。ライティングの確認をする時以外はOFFにしておくと良いでしょう。
ライト以外の明るさについて
次は前述の状態からDirectional LightをOFFにしてみます。
真っ暗…にはならず夕焼のよう
シーンからライトを無くしても、実は真っ暗にはなりません。この理由は2つあります。
①「環境」自体の明るさや反射光の設定が存在するため。
②カメラが描画範囲外(遠方)をスカイボックスで埋めているため。
①について
LightingタブのEnvironmentの項目のうち、「Environment Lighting → Intensity Multiplier」が環境光の強さ、「Environment Reflections → Intensity Multiplier」が反射光の強さのプロパティとなっています。
環境光はSouceが光源となります。上図であればSkybox が光源です。
環境光の強さと反射光の強さは別々に計算されているため、それぞれ0にするとゲームオブジェクトには全く光が当たらなくなります。(厳密には発光しなくなります)
※棒人間はいます
②について
CameraコンポーネントのClear Flagsにて、カメラの描画範囲外をどう表示するか設定されています。
これを「Don’t Clear」にすることで、カメラの描画範囲外に何も表示されなくなります。
いよいよ真っ暗に(※ 棒人間はいます)
変更することは少な目な要素ですが、暗めのゲームを作る際には参考になるかと思います。
ライトの種類について
シーンに配置できるライトは、Lightコンポーネントにて設定します。
タイプは全部で4種類(Directional、Spot、Point、Area)あり、それぞれ使いどころが異なります。
今回は種類だけの紹介とします。
それぞれのライトの特徴については、次回の記事で詳しくみていきましょう。