12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Epic Games Japan #1Advent Calendar 2019

Day 14

[UE4]オブジェクトポジションの罠

Last updated at Posted at 2019-12-13

マテリアルでそれぞれのオブジェクトの位置を取りたーい!というとき
アクタポジションノードやオブジェクトポジションノードを使うことがありますよね。
image.png
https://docs.unrealengine.com/ja/Engine/Rendering/Materials/ExpressionReference/Coordinates/index.html

このうちアクタポジションはピボット位置を。
オブジェクトポジションはバウンディングボックスの中心位置を返します。

こちらがアクターポジションを中心にぶん回した場合。
ap.gif

こちらがオブジェクトポジションを中心にぶん回した場合。
op.gif

上記のようにこれら2つのノードは、名前が似ている割に結構挙動が違うので気をつける必要があるのですが、
特にオブジェクトポジションのバウンディングボックスの中心位置というところ、
これがたまに地雷となってしまうことがあります。

例えば、全く同じメッシュであっても、
バウンディングボックスを調整したりしていると、オブジェクトポジションの返す位置は異なります。
op2.gif

また、全く同じメッシュであっても、
スケルタルメッシュとスタティックメッシュでは作られるバウンディングボックスが違ってたりもしますので、
image.png
そうすると、スケルタルメッシュをスタティックメッシュとしてインポートし直すと挙動が変わってしまったりします。
sksm.gif

ちなみになんで違うかというと、実はスケルタルメッシュはバウンディングボックス作成時に足元から上の方に拡張するようになってたりするんですね。
image.png

そしてさらには、オブジェクトポジションはインスタンシングされてるかどうかでも挙動が変わったりします。
image.png
オブジェクトポジションは有り難いことに、インスタンスに対して使用するとインスタンスそれぞれ個別の位置を返してくれるのですが、
上記コードを見て頂くとわかるように
インスタンスの時はバウンディングボックスの中心位置ではなく、それぞれのローカル位置を返します。

つまり、
スタティックメッシュアクタで並べている場合。
smm.gif

インスタンスで並べている場合。
ins.gif
このように挙動が異なってしまいます。
最適化の為にインスタンシングしたら挙動が変わってしまった、ということが起こり得るということですね。

とても便利なオブジェクトポジションノードですが、
上記のようなちょっとした罠がありますので、皆様ご使用の際はご注意頂けましたら幸いです。
(もちろん僕は見事にはまった経験があります。)

12
8
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
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?