お世話になっております。
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)
この変更が正しいものかどうか、確認していただくことは出来ますでしょうか?
よろしくお願い致します。