関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2017.03.07UE4UE/ Material
こんにちは!テクニカルアーティストの黒澤です。
今回はRotateAboutAxisでオブジェクトを回転する方法について書きます。
UnrealEngine4にはRotateAboutAxisというオブジェクトを回転させる便利なノードがあります。さっそく使って見ましょう!
パラメータを接続したノードをWorldPositionOffsetにつなぎます。
グレーマンに使用してみましょう。
予想通り回転しました。
しかし陰影がどこか変です。
実はRotateAboutAxisで回転した場合、法線の再計算は行わないので陰影は元のメッシュに焼き付いたようにみえてしまうのです。
そこで法線にも処理を加えてRotateAboutAxisで回転した結果を法線に加えてみます。
基本的にはRotateAboutAxisと同じ処理ですが、PositionにはVertexNormalWSを使用します。
RotateAboutAxisは出力する値は元の座標からの差分なので、絶対座標ではありません。そこで元のNormal(VertexNormalWS)を加算して現在の法線を求めます。その値をNormalizeし、さらにWorldSpaceからTangentSpaceに変換することで、回転した結果に合わせた法線を作りました。
こちらの値をNormalに接続します。
マネキンはレイヤードマテリアルを多用しているので少しわかりにくいですが、通常はNormalMapと合成してNormalに接続します。
正しい結果になりました。
ブログをまとめている際に気がついたのですが、じつはFixRotateAboutAxisNormalsというマテリアルファンクションがありました…
ファンクションの中身を見てみましたが、処理は全く同じですね。特に問題がなければこちらを使うのがいいでしょう。
レイヤードマテリアルを使用していないケースで、FixRotateAboutAxisNormalsを使用した場合は以下のようになります。
ーーー おまけ ーーー
> 猫ドリル <
ちなみに弊社で開発中のAirToneでは音楽に合わせて様々なものを動かしています。