【Unity2018】EmissionとBloomを使用してオブジェクトを光らせる
はじめに、
あけましておめでとうございます。
Unity技術メモ始めました。
なにから書こうか迷ったのですが、年の初めということもあり『旧約聖書』にならって世界に光を実装する方法を記載したいと思います。
初めに、神は天地を創造された。 地は混沌であって、闇が深淵の面にあり、神の霊が水の面を動いていた。 神は言われた。「光あれ。」こうして、光があった。 神は光を見て、良しとされた。神は光と闇を分け、光を昼と呼び、闇を夜と呼ばれた。夕べがあり、朝があった。第一の日である。
神は天地を創造された。
Unityで世界を創造してみましょう。
Unityを起動して、File > New Scene
から新しい世界を作ることができます。
ここでは試しにNewWorldという名前をつけて保存しています。
Hierarchyビューをみてください。
すでにこの世界には2つの存在を確認することできますね。
これらは新しく世界を創造すると自動的に作られるものになります。
存在 | 詳細 |
---|---|
Main Camera | 世界をみるための(神の)目 |
Directional Light | 世界を照らす光 |
さて、天地を創造するからには、地面をつくる必要があります。
Hierarchyビュー上で以下の処理をしてください。
右クリック > 3D Object > Plane InspectorビューでPlaneの位置を原点(0, 0, 0)にする
これで地面をつくることができました。
Hierarchyビューに新しくPlaneができていれば成功です。
ん?Gameビューに写っていないって?
Sceneビューに切り替えて、MainCameraの画角を調節しましょう。
Transform | X | Y | Z |
---|---|---|---|
Position | 0 | 2 | -5 |
Rotation | 30 | 0 | 0 |
Scale | 1 | 1 | 1 |
GameビューでもPlaneを確認できるようになりました。これで、下準備は完了です。
こうして、闇ができた。
さて、次はこの世界を真っ暗にする方法です。
いくつか手順があるので、順にみていきましょう。
1. Directional Lightを非アクティブにする
まず、Hierarchyビューの中に光となるオブジェクトが存在しますね。
このDirectional Lightを非アクティブにしてみましょう。
おや、思っていたよりも暗くなりませんでした。
Directional Lightの影響はなくなったものの、まだ何かしらの光の影響を受けているようです。
しかも、Hierarchyビュー上には存在しないソースのようです。
探してみましょう。
2. 拡散環境光の設定を変更する
調べてみると、どうやら拡散環境光(アンビエントライト)のせいで明るくなっているようです。
拡散環境光は、光源を持たず、世界全体を照らす光です。
そのため、特定のソースオブジェクトを持っていません。
設定は下記ウィンドウより変更できます。
Window > Rendering > Lighting Settings
Lighting SettingsウィンドウのSceneタブ内にあるEnvironment配下の設定を変更します。
Environment | 変更前の値 | 変更後の値 |
---|---|---|
Environment Lighting > Intensity Multiplier | 1 | 0 |
Environment Reflections > Intensity Multiplier | 1 | 0 |
Environment Lightingはライトを配置する前のSceneの明るさを決める拡散環境光を表しており、Intensity Multiplierで明るさの度合いを変更することができます。
Environment Reflectionsは拡散環境光の反射光を表しており、Intensity Multiplierで反射光の映り込み具合を変更することができます。
これでPlaneにかかる拡散環境光とその反射光は0になり、大地は暗闇に覆われました。
あとは大空を暗くするだけです。
3. カメラの背景設定を変更する
Scene上で奥行き方向に最も遠い空間に何を描画するかは、カメラから設定することができます。
Main CameraをクリックしてInspectorビューからCameraコンポーネントを確認すると、一番上にClear Flags という設定があります。
これが、カメラの背景を設定している項目です。
今回は世界を暗闇で覆いたいので、何も描画しないDon't Clearを選択肢します。
その他の項目の意味を理解したい場合は、下記を参照してください。
Clear Flags | 意味 |
---|---|
Skybox | スカイボックスを使用する |
Solid Color | 特定の色で塗りつぶす |
Depth Only | 前のフレームに残っていた色か、前に表示されていた何かを残す |
Don't Clear | 何も表示しない |
これで、世界は闇に包まれました。
Emissonによって、オブジェクトに光が宿った。
ゲームオブジェクトを光らせる方法についてみていきます。
Sceneが暗いと作業しにくいので、<u><b>Lighting Settingsウィンドウ > Sceneタブ > Envir
onment配下の設定を元に戻しましょう。
これまでの作業はなんだったのか・・・
Environment | デフォルトの値 |
---|---|
Environment Lighting > Intensity Multiplier | 1 |
Environment Reflections > Intensity Multiplier | 1 |
次に、光らせるオブジェクトとそれを取り囲むような左右奥3面の壁を用意します。
光らせるオブジェクト(Cube)
Transform | X | Y | Z |
---|---|---|---|
Position | 0 | 0.5 | 0 |
Rotation | 0 | 0 | 0 |
Scale | 1 | 1 | 1 |
左右奥の3面の壁
反射光のテストに使用するため、適当な大きさで光らせるCubeを取り囲むように配置する。
もし画角が悪いようであれば、カメラをX軸回転させて調節してください。
※図のカメラはX軸に20度回転させています。
では実際のCubeを自己発光させたいと思います。
1. 自己発光用マテリアルを作成する
Cubeを光らせるには、自己発光用のマテリアルを作成してアタッチする必要があります。
Projectビュー > 右クリック > Create > Material
を選択して、新しくマテリアルを作成してください。
ここでは新しく作成したマテリアルに、仮にM_Emissionという名前をつけました。
さて、マテリアルとはどのような質感の素材なのかを設定するためのものになります。
作成したマテリアルをクリックし、Inspectorビュー > Emission
にチェックをいれましょう。
これで、マテリアルに自己発光(Emission)という質感を追加することができました。
どんな色で自己発光するかは、Emission下のColorから設定できます。
また、Colorの左のアイコンから白黒の画像を選択すると、そのテクスチャの白い箇所のみを発光させることができます。
ここではテクスチャを使わず、RGB =(1, 1, 1)
の白色を設定したいと思います。
これで、マテリアルの設定は完了です。
Sceneビューを開き、光らせたいCubeにマテリアルをD&Dしましょう。
Cubeの色が白色になれば、うまく適用できています。
さて、Gameビューをみてみましょう。
・・・おっと、拡散環境光を消し忘れていたため壁と床がはっきりと見えてしまっています。
拡散環境光の影響を受けないようにしてみましょう。
Window > Rendering > Lighting Settings > Sceneタブ > Environment
Environment | 変更後の値 |
---|---|
Environment Lighting > Intensity Multiplier | 0 |
Environment Reflections > Intensity Multiplier | 0 |
Cubeのみ白く光っていますね。
無事オブジェクトを自己発光させることができました。
2. 反射光を設定する
Cubeの反射光を設定していきましょう。
反射光とは、Cubeを光源としたときの周りのオブジェクトへの映り込みになります。
Cubeを光源として壁や床を照らし出してみましょう。
設定は簡単です。
光源となるオブジェクトと、その影響を受けるオブジェクトをStaticにするだけです。
光源となるCube、床、壁オブジェクトをStaticに変更しました。
床や壁を照らし出すことができました。
最後に、staticな球体を空間に追加してみたいと思います。
Cubeの光が綺麗に球体に写り込んでいますね。
左側の壁に球体の影も確認できます。
これで、反射光に関する設定は完了です。
Bloomによって、光が滲んだ。
表現をより豊かにしてみましょう。
自己発光している物体は、眩しくて光が滲んで見えますよね。
この光の滲みを実装してみたいと思います。
1. HDRを有効にする
Bloom処理を行うには、カメラのHDR設定をアクティブにする必要があります。
docs.unity3d.com
Main Camera > Cameraコンポーネント > Allow HDR
をアクティブにしてください。
2. Legacy Image Effectsをインポートする
光を滲ませるには、Bloomという処理が必要になってきます。
このBloom処理は、スクリプトから制御できます。
AssetStoreからLegacy Image Effects
をインポートしてください。
3. Bloomエフェクトをアタッチする
インポートが終了したらカメラにBloomスクリプトを追加しましょう。
Main Camera > InspectorビューのAdd Componentをクリック > 検索欄に『Bloom』と入力
します。
出てきた『Bloom』スクリプトをクリックしてcomponentに追加しましょう。
ちなみにBloomと名のつくスクリプトは3種類ありますが、違いは以下のようになります。
スクリプト名 | 内容 |
---|---|
Bloom | 今回使用する最も拡張されたスクリプト |
Bloom Optimized | 高速に動くよう最適化されたスクリプト |
Bloom And Flares | 同時にレンズフレアも自動生成の設定も出来るスクリプト |
Bloomの設定項目についてみていきましょう。
今回はMode:Basicでの設定項目をみていきます。
設定項目 | デフォルト設定 | 説明 |
---|---|---|
Quality | High | High で高品質、高周波数を維持し、エイリアシング低減します。 |
Mode | Basic | 高度なオプションを表示するには Complex モードを選択します。 |
Blend | Add | カラーバッファに Bloom を追加するために使用するメソッド。 |
HDR | Auto | Bloomの計算結果によってはHDRバッファを使用することがあるので、Onにしておく。 |
Intensity | 0.5 | Bloomの強度。 |
Threshold | 0.5 | Bloomの閾値。画像領域でこの値よりも明るい領域にBloomが適用される。 |
Blur iterations | 2 | ガウスブラーが適用される回数。 |
Sample distance | 2.5 | ブラーの最大半径。 |
4. Bloomとマテリアルの値を調節する
最後に、Bloomの設定とマテリアルを調節していい感じに仕上げましょう。
マテリアルの設定
設定項目 | 値 |
---|---|
R | 1 |
G | 1 |
B | 1 |
Intensity | 0 |
※MaterialのIntensityを調節することで反射光を制御できます。
Bloomの設定
設定項目 | 値 |
---|---|
Quality | High |
Mode | Basic |
Blend | Add |
HDR | On |
Intensity | 0.5 |
Threshold | 0.5 |
Blur iterations | 2 |
Sample distance | 2.5 |
※BloomのIntensityを調節することでボカシ具合の強度を制御できます。
Bloomなし
Bloomあり
以上、これで光のボカシを実装することができました。