【Unity】Sceneが真っ暗にならないのは環境光が原因

【Unity】Sceneが真っ暗にならないのは環境光が原因

Unityを使っていると、シーンを真っ暗にしたいことがあります。

例えば光の入らない室内で、部屋の明かりだけを表現したり。

でもシーンを作った時にデフォルトで存在する『Directional Light』オブジェクトを非アクティブにしたり、上を向けたりしても簡単には真っ暗にならないんですよね。

なので暗くする方法をいくつか試してみましょ。

 

環境

macOS 10.13 High Sierra

Unity2018.1.0f2

20XX年、世界は闇の炎に包まれた——

実は、シーンを暗くする方法自体はテラシュールブログさんに載っています。

このページでは、上記の記事を参考にさせてもらいつつ、Unity2018を使っていろんなパターンを試してみたいと思います。

今回闇に飲まれるシーンはこちら。

闇に飲まれよ!
闇に飲まれよ!

 

Sphere、Cube、CylinderがPlaneの上に置かれているだけのシンプルなシーンです。今はまだ明るいので分りにくいですが、実は真ん中のCubeだけスポットライトに照らされています。

マテリアルのEmissionは無しにしてあるので、外部の光源から照らされないと見えません。

このシーンに様々な方法で闇をもたらします。方法によっては光の勢力が勝ってしまうこともあるので注意。

ライトを消す

一番真っ先に思い付くのがライトを消す方法。

シーンを作成した時には、デフォルトで『Directional Light』オブジェクトが作成されるため、これを非アクティブにします。

ライトさん「有給いただきまーす」
ライトさん「有給いただきまーす」

 

ライトを消せば真っ暗になりそうなものですが、残念ながらそうはならないんですよねぇ。

オブジェクトたちの夕暮れ
オブジェクトたちの夕暮れ

 

ライトの向きを変える

『Directional Light』オブジェクトをアクティブに戻して、今度は向きを変えてみます。真下から照らすように、RotationのXを[-90]に変更。

下から照らす
下から照らす

 

背景は見えなくなりました。が、画面左のSphereを見ると、下面に太陽らしきものが映っちゃってます。

背景は暗くなった
背景は暗くなった

 

スポットライトの照り返しであることに期待を込めつつ、そのスポットライトを消してみましたが、やっぱり太陽光を受け取ってました。地面を貫通しちゃうんですね。光の勢力、恐るべし。

地面を貫通して光を受け取る
地面を貫通して光を受け取る

 

壁で覆う

光が入らないように壁で覆ってみるのはどうでしょうか。

『Directional Light』オブジェクトのRotationのXをデフォルトの[50]に戻してから、壁を用意してみます。

前後左右、それに上下を覆ってみましたが、綺麗に光を透過していますね。

光を透過する新素材かな?
光を透過する新素材かな?

 

壁で覆ってライトを消したらいけるかな……?

うん、無理だよね。

まあ、そうなるな。
まあ、そうなるな。

 

壁で覆って、さらにライトを上向きにすると……こちらもダメでした。やっぱり床を貫通して天井に光が当たってしまいますね。

相変わらず床を貫通する光
相変わらず床を貫通する光

 

Lightingの設定を変更する

このまま壁は残しつつ、『Directional Light』オブジェクトの設定をデフォルトに戻します。

ここでついに『Lighting』ウィンドウを使って、環境光をいじります。メニューバーの[Window]から[Lighting] -> [Settings]を開きます。

Lightingウィンドウを開く
Lightingウィンドウを開く

 

『Lighting』ウィンドウには設定項目がいっぱいあってビビりますね。今回使うのは、『Scene』タブのEnvironment(環境)のエリア。Environment Lightingの下にあるIntensity Multiplierと、Environment Reflectionsの下にあるIntensity Multiplierの両方を[0]にします。何回Environment言うんですか。

Lightingの設定
Lightingの設定

 

この状態で画面を見るとこうなります。あと一歩まで近付いた感じ。

あと一歩
あと一歩

 

あとは……また『Directional Light』オブジェクトを非アクティブにしましょうか。光源はスポットライトだけ。これで闇に飲まれました。

光源はスポットライトだけになった
光源はスポットライトだけになった

 

でも壁を外すと……

壁オブジェクトを非表示にすると、背景が見えてしまいました。

ああっ背景に! 背景に!
ああっ背景に! 背景に!

 

こうなったら、あとはカメラもいじっちゃいます。『Main Camera』コンポーネントを選択し、Clear Flagsから[Don’t Clear]を選択します。

Cameraコンポーネント
Cameraコンポーネント

 

Clear Flagsは、ざっくり言うと背景の描画をどうするかの設定です。カメラに映っているオブジェクトはそのまま表示されますが、それ以外の部分はカメラの描画対象ではありません。

オブジェクト以外の部分をクリアする(=透明にする)ことで、背景にあるSkyboxだったり、単一色が表示されるんです。

さて、ここで選択した『Don’t Clear』は、オブジェクト以外の部分を透明にしないという意味。ってことは、光の当たっていない部分は真っ黒になるんです。カメラにはそう見えているので。

この状態で画面を見るとこうなります。背景が見事に映らなくなりました。

背景も闇に包まれた
背景も闇に包まれた

 

あとはスポットライトも消しておきます。

こうして光の勢力を討ち果たし、闇が溢れる静寂のUnity世界が守られました。

そして世界は闇に飲まれた
そして世界は闇に飲まれた

 

なお、ゲーム画面では真っ暗になっていますが、『Scene』ウィンドウでは背景が描画されているのでご注意を。カメラのクリアフラグは、『Game』ウィンドウに表示される時に使われます。

Sceneウィンドウでは背景が見える
Sceneウィンドウでは背景が見える

 

世界に闇をもたらすのに必要なイベント

上記の実験結果をまとめてみましょ。

やること 屋内 屋外
ライトを非表示 必要 必要
Lighting設定を変更 必要 必要
カメラのクリアフラグを変更 不要 必要

ライティング関係はいじるところが多くて若干混乱しますが、ポイントさえ押さえれば、実は3ステップで闇をもたらすことができるんです。

ここに自分で設定した光源を配置すれば、狙った演出がやりやすくなります。

まとめ

Unity世界に闇をもたらす方法を色々と実験してみました。

ポイントはLighting設定の変更と、カメラのクリアフラグの変更あたり。

特に室内の光源だけで画面を演出したい時には、闇の設定は大事です。

アセット作ってます!

CTA-IMAGE

Unityでの開発に役立つアセットを作っています。

3DダンジョンRPGを開発するスピードを200%加速するAssetや、ファンタジーRPGのダンジョンを彩るパーツを取り揃えています。

特に3DダンジョンRPGのゲームを1から作るのは結構時間がかかります。ダンジョン部分の作成はこうしたアセットを使って、開発をブーストさせてみませんか?