x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

[Closed] InstancedStaticMeshComponentの描画負荷について

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

InstancedStaticMeshComponent(Hierarchicalではない方)の描画負荷の検証を行っていますが、気になることがありましたので質問させてください。

普通のStaticMeshComponentではマテリアルにありますDitheredLODTransitionの設定が正しく反映されているのですが、InstancedStaticMeshComponentではマテリアルの設定に関わらず常にDitheredLODTransitionが有効になっているようです。

これはシェーダーのコンパイル時に、マテリアルの設定を見ていないために発生しているようでした。

 // InstancedStaticMesh.h
 struct FInstancedStaticMeshVertexFactory : public FLocalVertexFactory
 {
     static void ModifyCompilationEnvironment(EShaderPlatform Platform, const FMaterial* Material, FShaderCompilerEnvironment& OutEnvironment)
     {
 ...
         OutEnvironment.SetDefine(TEXT("USE_INSTANCING"),TEXT("1"));
         OutEnvironment.SetDefine(TEXT("USE_DITHERED_LOD_TRANSITION_FOR_INSTANCED"), ALLOW_DITHERED_LOD_FOR_INSTANCED_STATIC_MESHES);
 ...
     }
 };
 
 // LocalVertexFactory.ush, MaterialTemplate.ush
 #if USE_INSTANCING
 ...
     #define USE_DITHERED_LOD_TRANSITION USE_DITHERED_LOD_TRANSITION_FOR_INSTANCED
 #else
 ...
 #endif

LocalVertexFactory.ush, MaterialTemplate.ush を以下のように変更してみたところ、マテリアルの設定でDitheredLODTransitionを切り替えられるようになったのを確認しました。

 - #define USE_DITHERED_LOD_TRANSITION USE_DITHERED_LOD_TRANSITION_FOR_INSTANCED
 + #ifndef USE_DITHERED_LOD_TRANSITION_FROM_MATERIAL
 +     #error "USE_DITHERED_LOD_TRANSITION_FROM_MATERIAL should have been defined"
 + #endif
 + #define USE_DITHERED_LOD_TRANSITION (USE_DITHERED_LOD_TRANSITION_FROM_MATERIAL && USE_DITHERED_LOD_TRANSITION_FOR_INSTANCED)
 

この変更が正しいものかどうか、確認していただくことは出来ますでしょうか?

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

Product Version: Not Selected
Tags:
more ▼

asked Aug 09 '18 at 03:05 PM in Japanese

avatar image

Answers.Archive STAFF
2k 212 318 698

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

The question has been closed Aug 09 '18 at 03:31 PM by Nori Shinoyama for the following reason:

The question is answered, right answer was accepted


1 answer: sort voted first

確認したところおっしゃる通りでした!何も設定していないマテリアルでもInstanced用ではClip命令が使われておりました。(本来は下のコードの一番したのClipLODTransitionの中身が空になるのが適切かと思います。)

 void ClipLODTransition(float2 SvPosition, float DitherFactor)
 {
     if (abs(DitherFactor) > .001)
     {
         float RandCos = cos(dot(floor(SvPosition.xy), float2(347.83451793,3343.28371963)));
         float RandomVal = frac(RandCos * 1000.0);
         float  RetVal = (DitherFactor < 0.0) ?
             (DitherFactor + 1.0 > RandomVal) :
             (DitherFactor < RandomVal);
         clip(RetVal - .001);
     }
 }
 
 void ClipLODTransition(FMaterialPixelParameters Parameters, float DitherFactor)
 {
     ClipLODTransition(Parameters.SvPosition.xy, DitherFactor);
 }
 
 void ClipLODTransition(FMaterialPixelParameters Parameters)
 {
     ClipLODTransition(Parameters, Parameters.PerInstanceParams.w);
 }


修正方法も問題ないと思います。正式に修正されるようにチケットを登録いたしましたので、本件解決されるまで今しばらくお待ち下さい。

UE-61947 - Instanced Staticmesh Components always turn on USE_DITHERED_LOD_TRANSITION

この度は御指摘ありがとうございました!

more ▼

answered Aug 09 '18 at 03:05 PM

avatar image

Answers.Archive STAFF
2k 212 318 698

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question