光线跟踪高度场的当前最新算法是什么?


16

多年来,已经有许多论文涉及在光线跟踪器中绘制高度场地形的不同技术。一些算法直接(或通过四叉树)对网格进行光线行进;其他人则将地形转换为多边形网格,并使用标准的射线三角形相交测试。这项研究似乎在过去几年中一直在进行,并且很难找到过去十年中撰写的论文,但是内存和计算(CPU和GPU)之间的平衡仍在变化。

如今,哪种算法可在高端台式机上提供最佳性能?或者,如果没有一个答案,那么当前最佳算法的性能特征有何不同?


屏幕空间反射:使用深度和帧缓冲区创建一个高度场,对其进行光线追踪以获取粗略的反射。我不知道细节,但是我想《孤岛危机》,《杀戮地带》,《近日冻伤》等将使用一些复杂的技术来使其快速实现。你看过这个吗?
大卫·库里

1
@DavidKuri谢谢,这是如何快速获得核心光线行进的一个很好的指针。对于更静态的高度场,应该有很多优化方法可能无法在屏幕空间跟踪中很好地发挥作用,例如预先计算mipmap或最小-最大四叉树,因此我仍然希望找到答案涵盖了这一点。
Dan Hulme

嘿Dan BTW您是否在寻找CPU或GPU解决方案?实时还是非实时渲染?
艾伦·沃尔夫

@AlanWolfe我使用的是GPU和非实时(即最大吞吐量,而不是您可以在16毫秒内管理的最佳图像质量),但是我仍然会推荐有趣的答案,这些答案在CPU上或主要是在交互式渲染器中都可以快速使用。
Dan Hulme

您可以尝试从高度图创建一个带符号的距离字段。基本上就是3d纹理,用于存储到下一个表面的距离。这允许“更快地移动射线”。虚幻引擎4将此用于一般的中距离环境光遮挡,柔和阴影和地形阴影
user1888 2015年

Answers:


12

对于当前的最新技术,请查看本文:Tevs等人的“用于快速,准确和可扩展的动态高度场渲染的最大Mipmap”。2008年

基本思想是通过了解大面积地形上的最大值来跳过很多空间。如果光线停留在上方,请跳到下一个大区域。

如果看图8,您将看到基本线性步进与最大mipmap的比较。线性步进产生200步,可以在现代GPU上实时完成,但实际上仍然很慢。最大的mipmap大约需要10个步骤,全部在着色器中完成。


我接受此答案,因为论文本身很好,并且其“相关工作”部分似乎很全面。即使我最终没有完全使用该技术,也可以确定我将能够从此应用程序及其参考中为自己的用例定制一些内容。
Dan Hulme

您是否找到了具有最大mipmap的演示?谢谢。
raRaRa

我还没有读过这篇论文,但是这种“最大的mipmap”听起来与“ 锥步映射”所使用的技术非常相似(由于使用了圆锥体,它跳过了较大的区域,从而改善了视差遮挡映射)。
Julien Guertault

@JulienGuertault我会说这是简单的HiZ跟踪。这是确保您击中目标的安全方法。但是,与不安全的方法(例如二进制搜索)相比,速度不是很快。
v.oddou

4

我亲自看到的最好的东西是inigo quillez所做的东西,用于演示场景。光线在地形上前进,因为距(通常)远处的细节影响不大(例外=薄壁!),所以您走得越远越好。他使用渗透率信息和其他容易获得的指标来模拟环境光遮挡和其他复杂的照明技术。

这是实际操作的演示: https //www.youtube.com/watch?v=_YWMGuh15nE

这是IQ上有关地形光线行进的页面,这是一个非常有趣的内容: http

顺便说一句,在现代游戏中,“屏幕空间反射”技术通常只是射线向渲染场景的Z缓冲区前进。Z缓冲区实际上只是一个高度场。

我在2014年siggraph上看到了一些有关此问题的讨论,虽然有些人使用与IQ相似的技术,但有些人的表现甚至不如IQ,这很有趣:P


1
链接中的算法非常简单。它看起来不像我从90年代发现的一些论文那么复杂。看来这是一个很好的起点,但是我希望为生产系统提供性能最高的解决方案,而不仅仅是“我的第一个光线跟踪器”。
丹·赫尔姆

在最先进的现代游戏中,这些东西用于演示代码和屏幕空间反射。最快的代码有时是最简单的。由于其简单性,我不会拒绝它。看看您是否还会收到其他任何答复将很有趣。
艾伦·沃尔夫

2
您的响应中缺少的是,IQ使用标准的Heightfield网格作为初始猜测来开始对实际地形进行光线编排。他首先使用标准栅格化渲染低多边形版本的地形,然后在图像上运行像素着色器,该像素着色器开始在栅格化深度减去某个保守阈值的情况下进行光线行进。这是真正实现实时性的唯一方法。
Benedikt Bitterli 2015年

我相信您所说的只是真实的一部分。他确实使用了基于地形高度的启发式方法(以及与相机的距离)来得出射线可以行进多远,但是据我所知,他没有使用栅格化。这是他不使用栅格化的工作示例,但这并不是说没有使用栅格化的实现: shadertoy.com/view/MdX3Rr
Alan Wolfe

我有点困惑,这个问题是关于光线追踪的,而这个答案是关于光线行进的。两者之间以及它们可以实现的目标之间存在根本的区别。
Julien Guertault 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.