Unityの光と影の基本|ワールドの明るさを決める3ステップ

ホラーワールドや怪異ワールドを作るなら、大切にしたいのが「光と影」です。

薄暗い廊下、ぼんやりと光る蛍光灯、扉の向こうに広がる暗闇――。

同じ3Dモデルを配置した空間でも、どのように光を当てるかによって、ワールドの印象は大きく変わります。

ところが、Unityで暗いワールドを作ろうとすると、最初から意外なところでつまずくことがあります。

ゆかり
ゆかり

ライトを全部消したのに、ワールドが暗くならない……

わたし自身、Unityで光を扱い始めたころは、「Lightを消せば暗くなるんじゃないの?」と思っていました。ですが実は、Unityのワールドの明るさは、Lightだけで決まっているわけではありません。

この記事では細かな設定には深入りせず、

  1. ワールドを暗くする
  2. ライトで光をつくる
  3. 影をつくる

という3つのステップを通して、Unityで「光と影」を作る基本的な考え方を見ていきます。

リンカ先生
リンカ先生

ここではホラー素材「怪異の女子トイレ 基本セット」を新規プロジェクトに設置していきながら、ワールドの光と影を作っていくよ☀️🌑

【Step 1】ワールドを暗くする

まずは、暗いワールドを作ってみましょう。Sceneに配置されているライトを暗くしたり、Directional Lightを削除したりすればよさそうですよね。

VCCで新規に作ったワールドなら「Directional Light」があるので、これを無効化してみます。3Dモデルに配置されているLightオブジェクトも無効化しました。

Directional Lightを無効化

ところが、実際にやってみると、

ゆかり
ゆかり

あれ? ライトを消したのにまだ全然明るい……

Directional Lightを無効化したワールド
Directional Lightを無効化したのに明るい
リンカ先生
リンカ先生

実はワールドに光を与えているのはLightだけじゃないんだ💡

ワールドの明るさはLightだけで決まらない

Unityでは、Sceneに配置されたLight以外にも、ワールドの見え方に影響する仕組みがあります。Skybox / Environment Lighting / Environment Reflections の3つです。

これらの設定は「Window > Rendering > LightingのEnvironment」から確認できます。

UnityのLighting > Environment設定

細かい設定はいったん置いておいて、それぞれの役割をざっくり整理すると、次のようになります。

  1. Skybox Material:背景として表示される空や遠景
  2. Environment Lighting:物体を周囲からうっすら照らす環境光
  3. Environment Reflections:周囲の環境が物体表面に映り込む環境反射

まずは、「背景」「環境光」「環境反射」は別のものと考えると分かりやすいです。

ただし、この3つは完全に独立しているわけではありません。たとえばSkyboxは、単に背景として表示されるだけでなく、Environment LightingやEnvironment Reflectionsの参照元として使われることがあります。


つまり、「Directional Lightを消したのに、まだ明るい」という場合は、Scene上のLightだけを見るのではなく、これらのEnvironment設定も確認する必要があるということです。

リンカ先生
リンカ先生

じゃあ実際に、これらの影響をひとつずつ取り除いて、ワールドを暗くしていこう

まずはワールドを真っ暗にしてみよう

最初に、Environment Lighting の Source を Color に変更し、Ambient Color を黒にします。これで、物体を周囲からうっすら照らしていた環境光の影響をなくすことができます。

環境光を黒に変更
環境光を黒にしたワールド
環境光を黒にしてもまだ明るい
ゆかり
ゆかり

いや…まだなんとなく明るいですけど

リンカ先生
リンカ先生

環境光はなくなったけど、まだ「環境反射」があるんだよ

Environment ReflectionsのSourceが Skybox になっている場合、Skyboxの内容が物体表面の環境反射に使われます。

たとえば青空のSkyboxが設定されていると、Environment Lightingを黒にしていても、青空の反射成分によってオブジェクトが明るく見えることがあります。

環境光を黒にしてもSkyboxの環境反射がある

これをなくす方法は、大きく2つあります。

方法1:Skybox MaterialをNoneにする

SkyboxをNoneに設定

Skybox Material を None にすると、背景として表示されていたSkyboxそのものがなくなります。

Environment ReflectionsがSkyboxを参照していた場合は、反射元になるSkyboxもなくなるため、結果としてSkybox由来の環境反射もなくなります。

この方法では、

  • 背景のSkyboxも消える
  • Skybox由来の環境反射も消える

という状態になります。

方法2:Environment ReflectionsのIntensity Multiplierを0にする

Environment ReflectionsのIntensity Multiplierを0にする
Environment ReflectionsのIntensity Multiplierを0にする

Skyboxは背景として残したまま、反射だけをなくしたい場合は、Environment ReflectionsのIntensity Multiplierを0にします。

「Intensity Multiplier」は、反射元が物体に映る強さを調整する項目です。0にすれば環境反射の寄与をなくせるので、「Skyboxは背景として残したいけど、環境反射だけ消したい」という状態を実現できます。


完全に真っ暗なワールド
完全に真っ暗なワールド

ここまで設定すると、Directional Lightなど他のLightがなく、Reflection ProbeやEmissionなどの影響もなければ、Sceneはほとんど真っ暗になります。

ゆかり
ゆかり

真っ暗すぎて何も見えないんですけど…

このままだと本当に何も見えなくてやりにくいので、Environment Lightingの Ambient Color を真っ黒ではなく「濃いグレー」にします。

ほぼ真っ暗のワールド
リンカ先生
リンカ先生

これで「暗いワールド」が出来上がり!

まずはこの状態を作ってから、必要な場所にLightを置いていくと、「どの光がどこを照らしているのか」が分かりやすくなります。

【Step 2】Lightで光をつくる

Step1で作った暗いワールドに、Lightを配置してみましょう。Unityには、用途の異なるいくつかのLightがあります。

Lightの種類説明
Directional LightDirectional Lightは、特定の位置から周囲を照らすのではなく、Scene全体に一定方向から光を当てます。
太陽や月の光のような、遠くから届く光を表現するときに使われます。
Point LightPoint Lightは、ひとつの点を中心として周囲に広がる光です。
裸電球やランプなど、その場所から周囲を照らす光を表現するのに向いています。
Spot LightSpot Lightは、ひとつの場所から特定の方向へ向かって広がる光です。
懐中電灯やスポットライトなど、方向のある光を表現できます。

このほかにもLightには種類がありますが、まずは、「光源によって、光の届き方が違う」ということを覚えておけば十分です。

暗闇に光を置くと「明暗」ができる

たとえば、真っ暗な部屋にPoint Lightをひとつ置いてみます。すると、ライトの近くは明るくなり、離れた場所は暗いままになります。

Point Lightを設置したワールド

ここで初めて、明るい場所と暗い場所が生まれます。

ホラーワールドだからといって、すべてを真っ暗にする必要はありません。むしろ、光があるからこそ、その外側にある暗闇が際立ちます。

まずは難しいことを考えず、「どこを明るくして、どこを暗いまま残すか」を考えてLightを配置してみましょう。

Lightの明るさを調整する

Lightを配置したら、次に気になるのが明るさです。

「ちょっと明るすぎるな」
「もう少し周囲まで照らしたい」

そんなときは、LightのInspectorから設定を調整します。まず覚えておきたいのが、Intensity と Range です。

LightのIntensityとRangeの設定

Intensityは、光の強さを調整する設定です。値を大きくすると強い光になり、値を小さくすると弱い光になります。

一方、Rangeは光が届く範囲を調整する設定です。Point LightやSpot Lightで使用できます。たとえばPoint Lightなら、Rangeを大きくするとより広い範囲まで光が届き、小さくすると光が届く範囲も狭くなります。

ここで大切なのは、IntensityとRangeは、どちらも「明るく見える範囲」に影響しますが、役割は違うということです。

部屋が暗いからといって、Intensityだけをどんどん上げればよいとは限りません。

まず、「この光をどこまで届かせたいのか」をRangeで考え、そのうえで、「その範囲をどのくらいの強さで照らしたいのか」をIntensityで調整してみると分かりやすいでしょう。

ホラーワールドでは、部屋全体を均一に明るくする必要はありません。Lightの周囲は見えるけれど、少し離れると暗闇に沈んでいく。そんな明暗の差を残すことも、空間の雰囲気を作るひとつの方法です。

ゆかり
ゆかり

こんな感じにしてみました!

LightのIntensityとRangeを調整したワールド
LightのIntensityとRangeを調整したワールド
リンカ先生
リンカ先生

奥のほうがいい感じに暗がりで怖いね…

【Step 3】影をつくる

暗闇の中にLightを置くと、だいぶそれらしい空間になってきます。ところが、よく見てみると何かがおかしいことがあります。

ゆかり
ゆかり

うーん…なんか少し違和感が

リンカ先生
リンカ先生

個室の下の隙間をよーく見てみて…

影が設定されていない
ゆかり
ゆかり

あれ?影がない…?

光を配置しただけでは、必ずしも期待した影が描画されるとは限りません。そこで必要になるのが Shadow(影) の設定です。

LightのShadowsを設定する

影を作りたいLightを選択して、Inspectorを確認します。

LightのShadow設定

Lightコンポーネントの Shadows では、そのLightによって影を描画するかどうかを設定できます。Shadowsには、主に次の設定があります。

影の種類説明
No Shadows影を描画しません。
Hard Shadows輪郭のはっきりした影を描画します。
Soft Shadows輪郭がやわらかい影を描画します。

まず影がどのようにできるのか確認するなら、Hard ShadowsまたはSoft Shadowsを選んでみましょう。

すると、Lightと床や壁などの間に物体がある場合、その物体によって光が遮られ、反対側に影ができるようになります。

光と影が表現されたワールド
Lightによる影も描画されている

Realtime Lightによる影は描画負荷がかかります。

特にVRChatワールドでは、必要以上にRealtime LightやShadowを増やさないようにしましょう。Lightのベイクについては、別の記事で詳しく解説しています。

影が出ないときはオブジェクト側も確認する

LightのShadowsを有効にしたのに影が出ない場合は、影を作るオブジェクト側の設定も確認してみましょう。

影を落とす側のGameObjectを選択し、Mesh Rendererを確認します。
Mesh Rendererには Cast Shadows という設定があります。これは、そのオブジェクトが影を落とすかどうかを決める設定です。

Cast ShadowsがOffになっていると、そのオブジェクトはLightを遮る影を描画しません。

また、影を受ける床や壁については、Receive Shadows 設定も確認してみましょう。


これで、

ワールドを暗くする → Lightで光をつくる → Shadowで影をつくる

という、Unityの光と影を扱う基本的な流れができました。

まとめ

Unityで暗いワールドを作ろうとしても、Lightを消すだけでは暗くならないことがあります。
これは、UnityのワールドがSceneに配置したLightだけで照らされているわけではないためです。

まずはEnvironment Lightingなどを確認して、ワールドを暗くしてみましょう。
そして、その暗闇に必要なLightを配置すると、明るい場所と暗い場所が生まれます。
さらにShadowを設定することで、光が届く場所と遮られる場所が生まれ、空間に奥行きが出てきます。

暗闇を作る。
光を置く。
そして、影を作る。

まずはこの3つを順番に試してみるだけでも、Unityのワールドの見え方は大きく変わります。

ホラーワールドや怪異ワールドを作るときも、いきなり複雑な照明を作ろうとする必要はありません。まずはひとつの部屋を暗くして、そこにひとつの光を置いてみる。
その光がどこを照らし、どこに影を作るのかを考える。
そこから、Unityの「光と影」を始めてみましょう。

ゆかり
ゆかり

「光」と「影」を変えるだけでも、ワールドの雰囲気ってずいぶん変わるんですね💡

リンカ先生
リンカ先生

一つの正解があるわけじゃないから、自分でいろいろ試してみてね

コメント

タイトルとURLをコピーしました