FDynamicMeshEmitterData::CalculateParticleTransform の ViewDirection について

お世話になっております。



FDynamicMeshEmitterData::CalculateParticleTransform の ViewDirection を使って、

パーティクルのMATRIXを計算したいのですが、

プレイ画面と、カスケードエディター画面で見え方が違います。

試しに、

OutTransformMat = FLookAtMatrix(FVector::ZeroVector, ViewDirection, FVector(0.f, 0.f, 0.1f));

としてみると、

真正面から見ているのに、カスケードエディター画面では、pitchが45度回転します。

この時、

FProjectedShadowInfo::GatherDynamicMeshElementsArray

から、CalculateParticleTransform が呼ばれていて、

ViewDirection {X=-0.707 Y=0 Z=-0.707 } になっています。



コードを見た感じ、影用に作成する MATRIX を、表示用で使ってしまっているように見えます。



この挙動は正しいのでしょうか?

よろしくお願いいたします。




プレイ画面


287746-editor.jpg

カスケードエディター画面


お世話になります

ここは再現できなかったですが、過去で一回似てる件がありまして、ParticleHelper.hにあるbFaceCameraDirectionRantherThanPositionの設定で逆になっていました。
その変数を確認して頂いてもいいですか?

もし関係がなければ、
再現できるプロジェクトを送って頂いてもいいですか?

お手数ですが、よろしくお願いします。

再現できるプロジェクトを添付しました。



エンジン側のソースコード ParticleSystemRender.cpp の

void FDynamicMeshEmitterData::CalculateParticleTransform の
最後の行に、

OutTransformMat = FLookAtMatrix(FVector::ZeroVector, ViewDirection, FVector(0.f, 0.f, 1.0f));

を追加してください。



プレイボタンを押したときの、sample_billboaord の見え方と、

sample_billboaord をカスケードエディターでの見え方が違います。

よろしくお願いいたします。

link text

お世話になります。

サンプルプロジェクトを添付して頂いてありがとうございます。
気になっている所が理解しました。

パーティクルのマトリックスを計算するには、
CalculateParticleTransformのOutTransformMatを正しく設定する必要があります。

今の試しコードを見ると、
CalculateParticleTransformの最後の行に設定すると、その前に行われている計算が無意味になります。
今の例えの場合、カメラの設定によってOrientationMatrixやRotationMatrixなどOutTransformMatの計算に使われている。

プレイ画面とカスケードエディターのプレビューのカメラの使い方が違うので、その計算をいじると結果も変わってしまいます。

今の試しのFLookAtMatrixのコンストラクタのコールは
OutTransformMat = kScaleMat * kRotMat * kTransMat;
の前にすると上手く行きます。

ただ、
やりたいことによりますが、
CalculateParticleTransform、OutTransformMatのFMatrix::Identityのsetを無視するには副作用がでる可能性があるので、気を付けて使って下さい。

よろしくお願いします。