お世話になっております。
[Content removed]
UE5.7にて、こちらと同様の不具合が発生しているようですので
ご報告させていただきます。
再現手順
1.UE5.7のバニラバージョンのプロジェクトを作成する
2.カメラの「Constrain Aspect Ratio」をONにする
3.「Draw Debug Sphere」などのデバッグ描画を行う
結果、デバッグ描画がズレてしまうようです。
サンプルプロジェクトを添付いたしました。
エンジンの改造でも問題ございませんので、修正方法についてご教示いただけますと幸いです。
お世話になっております。
調べたら、ConstrainAspectRatioを有効にしたカメラが実際にはConstrainedViewRectangleの範囲内だけで描画しているにもかかわらず、DrawDebugHelpers側では依然としてフルビューポートを基準にワールド座標をスクリーン座標へ投影している点にあります。
そのため、実際の表示領域と投影結果がずれてしまい、2Dデバッグ表示が正しい位置に出なくなります。
ただ、担当者が今休みが入っているため、公式なフィックスがちょっと先かと思います。
とりあえずの解決の方向性としては、すべてのワールド→スクリーン変換処理をカメラのConstrainedViewRectangleに合わせることが必要があると思います。
正規化スクリーン座標を得た後、その値をConstrainedViewRectangleのオフセットとサイズに基づいて再マッピングすることで、カメラの描画範囲と一致する座標に補正できます。ワールド空間のデバッグ形状はこの問題の影響を受けないため、そのままで構いません。
処理を整理するため、次の専用関数を追加する形が適しています。
一番対応しやすい方法としては、DrawDebugHelpers.cpp内でvoid DrawDebugSphere_WithAspectFix()みたいな関数を追加することかと思います。
はカメラのFMinimalViewInfoを取得し、そこに含まれるConstrainedViewRectangleを使って投影と再マッピングを行い、正しいスクリーン座標で2Dデバッグ描画を行います、そしてこれを呼ぶことで解決できるかと思います。
お手数ですが、よろしくお願いします。
お世話になっております。
ご報告いただいたConstrain Aspect Ratio使用時のデバッグ描画ずれについて、追加で確認したところ、以前お伝えしていた「DrawDebugSphere_WithAspectFix のような個別関数を追加する方法」より、より効果的で負担の少ない修正方法が見つかりましたので共有いたします。
原因は、カメラが実際には ConstrainedViewRectangle の範囲だけを描画しているのに対して、ProjectWorldToScreenなどの投影処理がフルビューポートを基準として計算してしまう点にあります。そのため、デバッグテキストや HUD のような 2D 表示がカメラの描画領域と一致せず、位置がずれてしまいます。
調査の結果、最も効果的な暫定対応はUGameplayStatics::ProjectWorldToScreenの中に小さな補正処理を追加する方法でした。これは、通常の投影計算を行ったあとに、得られたスクリーン座標をいったん正規化し、カメラが持つConstrainedViewRectangleの位置とサイズに合わせて再計算するというものです。これを入れることで、プロジェクト内のすべての 2D デバッグ描画が正しい位置に表示されるようになりますし、個別に関数を作り替える必要もありません。
実際のコードは全て書く必要はありませんが、イメージとしては下のような処理になります。
// 投影後に:
if (POV.bConstrainAspectRatio)
{
FVector2D normalized(
screenPos.X / float(fullSize.X),
screenPos.Y / float(fullSize.Y));
screenPos.X = rect.Min.X + normalized.X * rect.Width();
screenPos.Y = rect.Min.Y + normalized.Y * rect.Height();
}
この修正はデバッグ表示全体に効果があり、個別にDrawDebug関数を追加するよりも現実的で扱いやすい方法です。ただし、こちらはEpicが正式に提供する修正ではなく、あくまで弊側で確認した暫定的な回避策になります。そのため、お客様側のプロジェクト環境に合うかどうか、パイプラインへの影響などについては、実際の運用に合わせてご確認いただければと思います。また、この内容は社内QAを通したものではありません。
公式の修正時期についてですが、担当者の都合もあり、正式な情報をお伝えできるのは年明け以降になる予定です。現時点では、実際に修正が入るのは早くても 5.8 以降になる見込みです。
お手数ですが、よろしくお願いします。
お世話になっております。
トラッキングのため、本件をクローズさせていただきます。
追加の質問があればいつでも遠慮なく再オープンしてください!
お手数ですが、よろしくお願いします。
お世話になっております。
調査結果の詳細なご報告、ありがとうございます。
デバッグ表示ズレの原因と、解決の方向性について承知いたしました。
ご提案いただいた暫定対応(DrawDebugSphere_WithAspectFix)を弊社側ですぐに検証したいため、
可能であれば具体的な実装コードをご教示いただけないでしょうか。
また、公式な修正対応は少し先になるとのことですが、提供時期の目安は立っておりますでしょうか。
もし可能であれば、修正バージョンを共有して頂くことは可能かどうかも含め、現状の見通しをお知らせいただけますと幸いです。
お手数をおかけしますが、何卒よろしくお願いいたします。