代表技術通信~Unreal Engineで点群表示③ まずはUE4のチュートリアル(2)
こんばんは。代表の草場です。
Unreal Engine 最初の 1 時間をやってます。まとめていると1時間どころじゃなかった。。。
ビジュアルをコントロールする
現状、ディレクショナルライトしか使ってないので、影の部分が見えません。これを何とかしたい。
うまくライトを当てたいのですが、そのようなライトはリアルタイムに計算することは難しいと。しかし、スカイライトを使えば可能です。モードパネルにあるのでskyで検索。
出てきたら、選んでシーンにドラッグ&ドロップ、詳細タブで位置は(0, 0, 400)に設定します。影が解消されました。
スカイライトの設定をいろいろいじりたくなるだろうが、やめておけと。だいたいデフォルト値が正しいそうです。これで環境光を追加できました。
次の問題です。歩き回ってみると、暗いところと明るいところで露光が調整されているように見えます。これはいい機能ですが、必要が無いときもあります。実際、ライティングを正しく設定するには一定の露光にする必要があるからです。レンダリングのこういう面を制御するには、Post Process Volumeという便利ツールを使います。これを使うと、一回の操作だけでシーン内のすべてのカメラに影響を及ぼせます。モードパネルでポストボリュームプロセスを検索します。シーンにドラッグ&ドロップ。位置は(0, 0, 0)。
Post Process Volumeの詳細タブのLensのセクションで、Exposureの部分に注目。最小輝度、最大輝度があります。両方とも1にします。これにより、適応露光の機能が強制的にデフォルトの露光に固定されることになります。
そして、Post Process Volumeの検索窓でinfiniteと検索。Infinite Extentが出てくるので、チェックを入れます。こうするとこのボリュームがレベルの全域を完全に覆うことになります。見回してみると一定の露光が得られていることがわかります。
露光をいじる前。
いじったあと。
次に、Sky Sphereをシーンに追加します。モードパネルでskyと検索すると、BP_SKy_Sphereが出てきます。
シーンにドラッグ&ドロップして、位置を(0, 0, 0)に。Atomosphere Fogと同様に、Sky Sphereはディレクショナルライトと連動させると効果的です。そうするために、BP_SKy_Sphereの詳細タブのデフォルトのDirectional light Actorのドロップダウンから、Directional lightを選択。全体の色が変わります。
これである程度のライティングの設定完了。
ライティングをまとめるために、アウトライナーで、ディレクショナルライト、BP_SKy_Sphere、スカイライト、Atomosphere Fogをctrlを押しながら選択、右クリック、「へ移動」→新規フォルダに追加。名前は、!World_Lightingにしていきます。!をつけることで検索しやすくなります。
では細かい設定を進めます。
まずディレクショナルライトからです。輝度を1にしてみると、夕暮れみたくなります。
ディレクショなるライトを動かして、太陽の位置を動かしたいのですが、そのままディレクショナルライト動かしても、太陽動きません。これを解消するには、まずはアウトライナでBP_SKy_Sphereのアイコン押して使えなくします。するとディレクショナルライトの角度変えると、太陽動きます。
太陽の位置が決まったら、またBP_SKy_Sphereを使えるようにして、BP_SKy_SphereのデフォルトのRefresh Materialをクリック。更新されました。
太陽により動きをつける。ディレクショナルライトの詳細タブのLight Shaft OcculusionとLight Shaft Bloomを有効化します。太陽のハローが有効化されました。カリスマ。
光が強すぎるので、BP_SKy_Sphereの詳細タブのデフォルトのSun Brightnessにいって、強度を1に変更します。
ディレクショナルライトに戻って詳細タブのライトシャフトのBloom Scaleを調整。
いい感じです。
次はアクタを使って、動きを付けます。
アクタ
アクタは映画のセットと比較するとわかりやすいでし。
UE4で今作っているレベルは、映画でいうところの映画全体セットのこと。
前回加えていったスタティックメッシュは動かいないもので、映画でいうところの動かない映画セット(岩とか木とか)のこと。
今から作るアクタは様々なスタティックメッシュから構成されるものでブルーブリント(スクリプト)により動くもの。これは原稿に従って映画の一部として動く俳優のようなもの。
では設定を始めます。コンテンツブラウザに戻り、フィルタリング機能は無効にしておきます。コンテンツブラウザで右クリック、新規フォルダ作成、名前はBP_Actorsとします。BPはブループリントのことです。
作ったフォルダに入って右クリック、ブループリンクラスをクリック、Actorを選択します。名前はBP_Lamp
ダブルクリックすると立ち上がります。
これは、一種のレベルに近いです。コンテンツブラウザからこのActorに様々加えます。まずはTorchで検索してTorchを追加。次に、コンテンツブラウザでFireを検索し、配置。P_Fire。そしてこのActorの画面を最大化します。
さて、この画面の左にあるブループリントエディタのコンポーネントパネルからポイントライトを見つけて、光を追加します。
コンポーネントパネルで、階層が正しいか確認します。Torchの子供に、Fireが設定されていたので、DefaultSceneRootにFireをドラッグ、親子付けを選択。これですべての要素がルートレベルに置かれました。
炎をトーチの上に移動。ライトも炎の上に移動させます。
これをコンパイルして、保存して閉じます。コンパイルは、ゲームに変更をセーブするボタンのようなもの。
では、できたアクタをビューポートにドラッグ&ドロップします。
いい感じ。もっと活気をつけるために、もう一度ランプのブループリントを開きます。イベントグラフタブをクリックすると以下の画面になります。
右クリック押しながらマウス動かすと全体が動きました。UnityのVFXみたく、ここに様々な効果を配置して線でつなぐ感じです。
まずは出発点となるノードはEvetと呼ばれるノードです。何らかのアクションをトリガーします。今回はBeginEventを使います。
BeginEventボタンの▷をドラッグすると線がでてきます。そのまま離すと次のノードを検索できます。Delayと検索。Delayノードを追加します。DelayノードにはDuration(期間)をいじれる機能あります。Durationから線を出して、検索窓でRandomと検索。Random Float in Rangeノードを探して選択します。
Minは0、Maxは0.2に設定。これで0から0.2秒の間で遅れが発生するようにできました。
次にポイントライトをいじれるようにします。コンポーネントパネルでポイントライトを選び、画面にドラッグ&ドロップするとポイントライトのノードが登場します。線を出して、Intensityと検索、Set Intensityを出します。Random Float in RangeをコピーしてPoint Lightのそばに置き、Minを900、Maxを3000にして、Set IntensityのNew Intensityと接続します。
最後にDelayノードとSet Intensityノードをつないで完成です。
ランダムな時間待ち、ランダムな輝度を出力する設定です。さらにこれを無限に繰り返すために、Set Intensityノードの出力とDelayノードの入力を結びます。
最後に、Point Lightの設定を少し変えます。Point Lightの詳細タブのライトのAttenuation Radiusを500に(現実的らしい)、ライトの色もオレンジに変えます。
保存およびコンパイルしてアクタを閉じます。
そして、プレイボタンでプレイ。これで反映されたものが見えます。
ここからより凝った設定をするのですが、その前に、ライティングをベイクする必要あります。ビルドボタンを押し、ライティングのみビルドを選択します。これによりすべてのアセットが、ライティング情報をベイクして組み入れるようになります。
EVENTS