多材质模型实例化后阴影问题

  • Creator 版本:3.7.2
  • 目标平台:web
  • 重现方式:复制粘贴模型
  • 首个报错:无
  • 之前哪个版本是正常的:3.5.2
  • 编辑器操作系统:windows
  • 重现概率:100%

多材质模型,材质都勾选USE INSTANCING后,对这个模型实例化,只有一个模型显示了阴影

@panda @jare

你好,请问一下你使用的是哪种类型的阴影?

planar阴影

我们的 planar-shadow 在 instance 模式有bug,将在 v3.7.3 版本上修复,也可以参考 https://github.com/cocos/cocos-engine/pull/14941

这个改动里不是直接把instance去掉了吗?planar-shadow 使用instance会有什么问题吗

同时还发现一个shadow会根据其对应model上的pass数量生成多个实例。我自己把这个逻辑改成一个model只生成一个shadow实例。目前没发现有什么问题。自己写了一个渲染1w个开启instance带阴影的立方体。对比性能有很大提升

比较好的修复方案我们放在了 v3.8.0 版本上。之前的方法比较 trick,GFX 并没有给需要生成平面阴影的模型创建出属于 planar-shadow pass 的布局(包含 instance 和非 instance 布局),平面阴影的绘制只是搭了模型第一个 pass 布局的顺风车,这会导致传入的 buffer 在获取时因为 offset 的问题导致只有第一个 instance planar-shadow 是正确的。

目前我们把 planar-shadow pass 添加到了 builtin-standard.effect 里,这样模型在初始化时就会为它准备好布局,就算不使用 planar-shadow 也不会产生消耗,同时能保证相同的模型只会生成一种实例。详情参考 https://github.com/cocos/cocos-engine/pull/14958