お世話になっております。
"ShowFlag.Collision 1"で表示するコリジョン形状表示のデバッグ機能を、Testビルドで実機でも確認できるようにしたいと考えています。
バグチェック時にコリジョンの不具合を実機で確認しやすくするためです。
そこで、StaticMeshComponent.hにあります、STATICMESH_ENABLE_DEBUG_RENDERINGを1にしてビルドしてみたのですが、実機ではコリジョン形状は表示されませんでした。
ENABLE_DRAW_DEBUG=1 にもしてみましたが、
他に何か設定等が必要であれば、ご教授頂けないでしょうか?
他の方法で、実機でコリジョン形状を確認する方法がもしありましたら、それでも構いません。
宜しくお願いします。
お世話になっております。
一度、次の手順を試していただけますでしょうか。
まず、プロジェクトのTarget.csを下のように拡張し、Test ビルドでUE_ENABLE_DEBUG_DRAWINGとCHAOS_DEBUG_DRAWが有効になるように設定します。
`public class YourProjectTarget : TargetRules
{
public YourProjectTarget (TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
// 省略
// 下記を追加
bool bIsTest = Target.Configuration == UnrealTargetConfiguration.Test;
if (bIsTest)
{
GlobalDefinitions.Add(“UE_ENABLE_DEBUG_DRAWING=1”);
GlobalDefinitions.Add(“CHAOS_DEBUG_DRAW=1”);
}
}
}`これでビルドをかけていただければ(エンジンにもコンパイルがかかりますが)、TestビルドでShowFlag.Collision 1を入れたときに最低限のコリジョン形状が表示されるかと思います。ただし、エンジンコードの中にはデバッグ表示機能や、そのデバッグ表示機能に関わるプロパティ、関数類を、#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)~#endifで囲み、Testビルド時に無効になるように組んであるものがあります。下記はその一例です。
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++) { if (VisibilityMap & (1 << ViewIndex)) { if( PhysicsAssetForDebug ) { DebugDrawPhysicsAsset(ViewIndex, Collector, ViewFamily.EngineShowFlags); }
この場合、後ろに || UE_ENABLE_DEBUG_DRAWING を繋げるなどして、テストビルドでもデバッグ周りのコードが通るようにエンジンに手を入れる必要があります。ここではすべての改変箇所をご提示することはできませんが、コードを追いかけて「デバッグ表示に必要なオブジェクトを返す関数が、Testビルドだと決め打ちでnullptrを返す」といった箇所にも手を入れるなど、やや入念な作業が求められます。
ただ、スタティックメッシュのコリジョン表示であれば、上のTarget.csの改変だけで動かせるのではないかと思います。
一度、ご確認ください。
以上、よろしくお願いいたします。
お世話になっております。
UE_ENABLE_DEBUG_DRAWINGとCHAOS_DEBUG_DRAWの有効で、確かに一部のメッシュのコリジョン形状は表示されておりました。
他のコリジョン表示は頂きました情報を元に調べていきたいと思います。
ありがとうございました。
ご確認ありがとうございました!
それでは本件は回答済みとしてCloseさせていただきます。
以上、よろしくお願いいたします。
お世話になっております。
ご教授頂きました方法で、StaticMeshのコリジョン形状は表示されたのですが、「Naniteサポートを有効化」している場合は表示されないようでした。
おそらく、NaniteResources.cppが関係あるのだろうと考え、関連ありそうなWITH_EDITORの有効化を行ってみたのですが、まだうまく表示できておりません。
大変恐縮なのですが、どこに変更を加えれば良いかご教授頂くことはできないでしょうか?
宜しくお願いします。
お世話になっております。
すみません。色々試行錯誤して表示することができました。
お世話になっております。
回答が遅くなり、申し訳ありません。表示ができたと聞き、安心いたしました。
パッケージするとNaniteのコリジョンデバッグが表示できなくなる問題があるようです。
すでに解決済みとのことですが、記録のために、この場を借りて、対応方法をまとめておきます。
まず、デバッグ表示用のシェーダがクックに含まれるように、DefaultEngine.iniに次のパラメータを記載し、クックを実行します。この設定は、デバッグ表示用マテリアルをランタイムでロードするためにも必要です。
r.ForceDebugViewModes = 1
次にエンジンのソースコードで以下の3箇所を変更します。
FSceneProxy::GetViewRelevance において、
`// WITH_EDITORをNANITE_ENABLE_DEBUG_RENDERINGに変更
- #if NANITE_ENABLE_DEBUG_RENDERING
const bool bOptimizedRelevance = false;
#else
const bool bOptimizedRelevance = true;
#endif`FSceneProxy::GetDynamicMeshElements において、
`// Nanite only has dynamic relevance in the editor for certain debug modes
// WITH_EDITORをNANITE_ENABLE_DEBUG_RENDERINGに変更
- #if NANITE_ENABLE_DEBUG_RENDERING
LLM_SCOPE_BYTAG(Nanite);
QUICK_SCOPE_CYCLE_COUNTER(STAT_NaniteSceneProxy_GetMeshElements);`NaniteResource.hにおいて、
`#if PLATFORM_WINDOWS
// NANITE_ENABLE_DEBUG_RENDERING をTESTビルドで有効化
- #define NANITE_ENABLE_DEBUG_RENDERING (!(UE_BUILD_SHIPPING || UE_BUILD_TEST) || WITH_EDITOR)
- #define NANITE_ENABLE_DEBUG_RENDERING (!(UE_BUILD_SHIPPING) || WITH_EDITOR)
#else
#define NANITE_ENABLE_DEBUG_RENDERING 0
#endif`以上となります。
ほかに問題がなければ、再度チケットをCloseさせていただきます。
以上、よろしくお願いいたします。
お世話になっております。
それでは、改めて本チケットをCloseさせていただきます。
ご確認ありがとうございました。