3
1

More than 3 years have passed since last update.

UE4でライトリグを作る

Last updated at Posted at 2019-10-05

ライトリグとは

一般的なスケルトン向けのリグではなく、複数のライトを一定のルールにそって連動した動きをさせるものです。

今回、↓こんな感じの複数のスポットライトを使ったライトリグを作っていきます。

前置き

今回の実装は説明を簡略化させるためにすべてBPで書いていますが、実際に使う場合にはパーフォーマンスにも気を付けなければなりません。実践ではCpp実装/管理でないと厳しい部分もあります。
また、結構な量のライトを使うので、ライトチャンネルの管理や影のパラメータの管理は追加する必要があるでしょう。

作る機能

今回はスポットライトを用いて、対象を後ろから照らすためのライトリグアクターを作ります。
・このアクターは指定した半径のリング状にスポットライトを配置します。
・リングはアクターの中心から指定された長さだけローカルX下がります。
・スポットライトはアクターの中心を注視し、個別にON/OFFが出来るため多彩なリムライト表現ができます。

↓のようにリング状に配置されたスポットライトを後ろから当てています
image.png

標準的な結果
image.png
任意のライトをオフ
image.png
ライトとの距離を離したり、半径を大きくしたり
image.png

実装

準備

UE4上で追加しなければならないファイルは2つです。
image.png

アクター

Actorを継承したBPクラスを追加します。

構造体

リグ内で制御するライト一つにつき一つ使用する情報を格納します。本来であれば、インテンシティーやコーンの角度など様々なプロパティを持つと思いますが、今回はシンプルに有効無効のboolと影ON/OFFのboolです。
image.png

BP実装

変数

image.png
使う変数は6つ(うちコンポーネント2つ)です。
・Root
 まず、SceneComponentであるRootをDefaultSceneRootと置き換えます。(ムーバブル)
・RingCenter
 リングの中心にするために、子としてSceneComponentであるRingCenterを追加します。(ムーバブル)
 Construcion内で生成されるライトのアタッチ先はここになります。
・InfoArray
 先に作った構造体の配列です。この要素数によってリング内に追加されるライトの個数が決まります。
・ArmLength
 アクター中心とリングをどの位離すかを決めます。
 RingCenterの相対X座標となります。
・Radius
 リングの半径です
・AttenuetionScale
 ライトの影響距離に掛けるスケールです。ライトの位置からアクター中心までの距離が1.0で、デフォルト1.5が入っています。

BP

基本BPの実装はConstructionScriptだけです。

前半部

RingCenterにArmLengthを設定し、InfoArrayをForで回します。
image.png

Forの中身

半径分移動させたトランスフォームを360度を要素数で割った角度で回しながら回転させます。
アクター中心を注視させるので、-ArmLengthFindした場所にLookAtRotationしています。
出来上がったトランスフォームを相対座標としてスポットライトを追加します。(ムーバブル)指定したコンポーネントにアタッチしたいのでマニュアルアタッチにチェックをいれます。
image.png

出来上がったライトコンポーネントをRingCenterにアタッチします。
影響範囲や影の有り無しの設定をして完成です。
※主にここで今後制御したいパラメータを追加していくと思います。
image.png

最後に

今回はできるだけシンプルになるように実装してみました。
こういったリグはゲームのジャンルやシーンによって必要な機能や動きが全然違うので、情況によってカスタマイズする事が多いです。
前途しましたが、簡単に負荷が爆発的に増えやすい物でもあるので、常にコストは意識したほうがいいでしょう。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1