お世話になっております。
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 を、表示用で使ってしまっているように見えます。
この挙動は正しいのでしょうか?
よろしくお願いいたします。
プレイ画面
カスケードエディター画面
お世話になります
ここは再現できなかったですが、過去で一回似てる件がありまして、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を無視するには副作用がでる可能性があるので、気を付けて使って下さい。
よろしくお願いします。