Normal出力ピンに繋げる際の計算の中でWorldPositionOffsetが反映される前のWorldPosition(絶対ワールド位置)の値を得る方法

UE4のBPだけでGPUパーティクルを実現しようとしているのですが、
各パーティクルを回転させると法線の計算がうまくいかないようです。

UE4でのGPGPUの記事についてはこちらで連載中です。

現象についての動画はこちら

MaterialBP内でPositionを動かしてなければ法線の計算はうまくいっているみたいだけど動かすとおかしい・・ #UE4 #GPGPU pic.twitter.com/KI75WJTs8b

— selflash (@anonymous_user_57739343) 2017年8月1日

原因を調べる為に、シンプルな構成で現象を再現いたします。

(1) Instanced Static Meshコンポーネントを追加して、マテリアルを設定します。

(2) キューブのインスタンスを2つ複製して、左右に配置します。

(3) RotateAboutAxisノードを使って2つのキューブを回します。回転速度に差をつけます。
左のキューブと右のキューブを判断する為に、WorldPositionのY座標が0以下なのか、0以上なのかで
どちらの回転の計算を適応するか振り分ける。
加えて法線にも回転の計算をする。

(4) Used Witdh Instanced Static Meshesにはチェックを入れておく。

203583-4.png

結果がこんな感じです。右側のキューブは回転だけでなく左右に座標が移動します。

問題は、右のキューブが左右に座標移動している時に、Y座標が0以下に差し掛かった際に法線の計算が左のキューブの計算が適応されてしまう為、おかしくなってしまいます。
これについて僕の見解は、
マテリアルBP内ではNormalの出力ピンに繋がっているノード群よりWorldPositionOffsetに繋げているノード群の方先に処理される。
その後Normalの出力ピンに繋がっているノード群が処理されるが、その中でWorldPosition(絶対ワールド位置)を参照した時のWorldPosition(絶対ワールド位置)の値はWorldPositionOffsetが反映された後のPositionである。
それであるとこの挙動が納得できます。

ご相談は、これに関しての何か解決策や、良いアイデアはないでしょうか??
Normal出力ピンにつなげているノード群の中でWorldPositionOffsetが反映される前のWorldPosition(絶対ワールド位置)の値を得る方法はありませんか?

この法線問題のせいでもう少しで完成しようとしていたGPUパーティクルの手法が確立できず困ってます、、
なにとぞよろしくお願いいたします!

こちらの件、Twitterで @sgkz さんに解決策を教えていただきました!
WorldPositionノードにある設定でExcluding Material Offsetsのがあるらしく、
そちらを選べばOffsetがかかる前のWorldPositionを取得できるようです!

おかげさまで無事問題が解決でき、GPUパーティクルシステムの方も完成いたしました!
お騒がせしました、、

フォロワーの方のおかげ様で法線の問題が解決しました!これで最後の壁が乗り越える事ができて無事BPだけのGPUパーティクルシステムの完成でございます。祝! #UE4 #GPGPU pic.twitter.com/wp1s9OrcXe

— selflash (@anonymous_user_57739343) 2017年8月3日