【发布时间】:2020-03-12 01:32:45
【问题描述】:
我最近阅读了这篇关于 raymarching 云的论文(小心它是 PDF,如果你不想要的话:http://www.diva-portal.org/smash/get/diva2:1223894/FULLTEXT01.pdf),作者继续优化(第 22 页)。 通过重投影算法。 他表示,通过每帧仅对所有像素的 1/16 进行 raymarching(所选像素在 4x4 网格中四处跳动)并重新投影其余部分,他的性能提高了大约 10 倍。
我现在尝试在虚幻引擎 4(自定义 HLSL 着色器)中实现这一点,并且现在我得到了光线行进和重投影工作。 但是,我实际上只在必要的像素上运行 raymarching。据我所知,对于 HLSL 中的任何分支,都会计算分支的两侧,并且将丢弃一个。 因此,我 不能 在像素着色器中执行类似以下伪代码的操作: if(!PixelReprojection) { 返回 0;} 否则 { 返回 Raymarch(...); } 因为即使是重新投影的像素,它也会计算 Raymarch。
我没有看到任何其他方法来存档这个...... HLSL 中是否有任何类型的分支允许这样做?它不能是静态的,因为经过光线跟踪和重新投影的像素每帧都会发生变化。 我真的很好奇作者是如何在 GPU 上编写代码时实现性能提升十倍的,据我所知。
非常感谢您在这里提供任何形式的意见。
问候, 美食家
【问题讨论】:
标签: hlsl unreal-engine4 fragment-shader flow-control