BLOGブログ

2016.10.13UE4UE/ Mesh

[UE4] スケルタルメッシュのボーン情報を別メッシュにコピーする

コンテンツを作っていると、任意のスケルタルメッシュのボーン情報を丸ごと別のスケルタルメッシュにコピーしたい事があります。
よくあるケースとしては、メッシュの輪郭線を出すために背面法を使う場合ですね。
背面法とは3Dモデルを法線方向に少し拡大し、黒く塗りつぶした上で面を反転することで輪郭線を描画する手法です。

 

poseablemesh_01

 

この場合、本来はDCCツール側で輪郭線用の頂点もメッシュに埋め込んでいた方が良いですが、DCCツールに慣れていなかったり、とりあえず見てみたいといった時にUE4側でメッシュを複製することで対応することがあります。

 

poseablemesh_02

 

StaticMeshであればこのやり方でも問題は出ませんが、アニメーションするSkeletalMeshだと両方のメッシュに対して同じアニメーションを同タイミングで再生する必要があり、ここが少し面倒です。
単純にループするだけのアニメーションであれば問題ありませんが、AnimBlueprintを使って何か処理を組み始めた場合に無理が生じ始めます。
そこで今回ご紹介する PoseableMeshComponent の出番です。

 

PoseableMeshComponent は SkeletalMeshComponent と同じく、SkinnedMeshComponent を継承する SkeletalMesh を扱うためのコンポーネントです。
更にこのコンポーネントは CopyPoseFromSkeletalComponent という SkeletalMeshComponent から全てのボーンのTransform情報をコピーする関数を備えています。
この関数はBlueprintからも使えるようになっており、これを使用することで上記の問題は解決します。

 

poseablemesh_03

poseablemesh_04

 

この状態で実行すると、元のメッシュの状態が輪郭線用のメッシュに反映されているのが確認できます。

 

poseablemesh_05

 

PoseableMeshComponent は他にも各ボーンのTransform情報を直接書き換えられるような関数も備えていますので、便利に使っていきましょう。

 

余談

今回の輪郭線用の裏面だけ描画するマテリアルは以下のノードで実現できます。
マテリアルを両面描画設定にした上で、TwoSidedSignノードを使って表面はMaskをかけるような処理になっています。

 

poseablemesh_06