https://reddit.com/link/1vehf66/video/fbent0b9n6hh1/player

我花了很长时间终于完成了我的全景遮蔽管道。它计算一个自定义的深度纹理,然后使用光线追踪来创建阴影。结果比我预期的要困难得多。对于那些好奇的人,这里是大致的工作原理:

  • ID通道 每个对象都被分配一个唯一的ID,渲染到屏幕上。这产生了一个ID纹理,后续通道使用。
  • 最小/最大深度通道 使用ID纹理,这个通道写入每个对象的最大和最小深度。这是为了知道下一步光线追踪的深度范围。
  • 不透明通道 读取最小/最大深度纹理,使用光线追踪来确定每个像素是否被阴影。它也使用lerp来避免在重新烘焙时出现硬转换。
  • 时间积累 不直接将阴影写入屏幕,而是写入一个单独的缓冲区,以便应用时间模糊来积累过去的帧,避免阴影中的空隙或噪音。
  • 全屏合成通道 最后,累积的阴影被写入屏幕。它感觉像是一个过度工程化的解决方案。有任何经验在全景遮蔽或类似技术方面的人,尤其是如果有方法可以减少通道数量而不损失质量,我很乐意听取。