Mobile Deferred 下 Surface ForwardShading 半透明材质接收 CSM 时 shader permutation 被裁掉

Hi Epic team,

如题情况下半透明材质会不提drawcall,因为shader没有被编译。

我们定位到运行时 SelectMeshLightmapPolicy() 选择了LMP_MOBILE_DIRECTIONAL_LIGHT_CSM_AND_SH_INDIRECT

但编译期 FMobileDirectionalLightCSMAndSHIndirectPolicy::ShouldCompilePermutation() 在 Mobile Deferred 下会裁掉该 permutation:

if (IsMobileDeferredShadingEnabled(Parameters.Platform) 
 
  && !Parameters.MaterialParameters.ShadingModels.HasShadingModel
 
  (MSM_SingleLayerWater))
 
{
 
  return false;
 
}

这里似乎只允许 SingleLayerWater ,但没有允许 Surface ForwardShading 半透明材质。

所以想确认一下:

FMobileDirectionalLightCSMAndSHIndirectPolicy 这里是否应该允许 Parameters.MaterialParameters.bIsTranslucentSurfaceLighting ?

例如:

if (IsMobileDeferredShadingEnabled(Parameters.Platform) 
 
  && !(Parameters.MaterialParameters.ShadingModels.HasShadingModel
 
  (MSM_SingleLayerWater)
 
    || Parameters.MaterialParameters.bIsTranslucentSurfaceLighting))
 
{
 
  return false;
 
}

这个问题是引擎已知限制,还是一个bug?

[Attachment Removed]

Hi,

你好,这是一个bug,因为我们内部都是全动态的,基本走不到这个分支,你可以看一下FMobileDirectionalLightAndCSMPolicy::ShouldCompilePermutation,参考这个的实现修复一下。

[Attachment Removed]