多年来,已经有许多论文涉及在光线跟踪器中绘制高度场地形的不同技术。一些算法直接(或通过四叉树)对网格进行光线行进;其他人则将地形转换为多边形网格,并使用标准的射线三角形相交测试。这项研究似乎在过去几年中一直在进行,并且很难找到过去十年中撰写的论文,但是内存和计算(CPU和GPU)之间的平衡仍在变化。
如今,哪种算法可在高端台式机上提供最佳性能?或者,如果没有一个答案,那么当前最佳算法的性能特征有何不同?
多年来,已经有许多论文涉及在光线跟踪器中绘制高度场地形的不同技术。一些算法直接(或通过四叉树)对网格进行光线行进;其他人则将地形转换为多边形网格,并使用标准的射线三角形相交测试。这项研究似乎在过去几年中一直在进行,并且很难找到过去十年中撰写的论文,但是内存和计算(CPU和GPU)之间的平衡仍在变化。
如今,哪种算法可在高端台式机上提供最佳性能?或者,如果没有一个答案,那么当前最佳算法的性能特征有何不同?
Answers:
对于当前的最新技术,请查看本文:Tevs等人的“用于快速,准确和可扩展的动态高度场渲染的最大Mipmap”。2008年
基本思想是通过了解大面积地形上的最大值来跳过很多空间。如果光线停留在上方,请跳到下一个大区域。
如果看图8,您将看到基本线性步进与最大mipmap的比较。线性步进产生200步,可以在现代GPU上实时完成,但实际上仍然很慢。最大的mipmap大约需要10个步骤,全部在着色器中完成。
我亲自看到的最好的东西是inigo quillez所做的东西,用于演示场景。光线在地形上前进,因为距(通常)远处的细节影响不大(例外=薄壁!),所以您走得越远越好。他使用渗透率信息和其他容易获得的指标来模拟环境光遮挡和其他复杂的照明技术。
这是实际操作的演示: https //www.youtube.com/watch?v=_YWMGuh15nE
这是IQ上有关地形光线行进的页面,这是一个非常有趣的内容: http
顺便说一句,在现代游戏中,“屏幕空间反射”技术通常只是射线向渲染场景的Z缓冲区前进。Z缓冲区实际上只是一个高度场。
我在2014年siggraph上看到了一些有关此问题的讨论,虽然有些人使用与IQ相似的技术,但有些人的表现甚至不如IQ,这很有趣:P
锥步映射和松弛锥步映射似乎是非常不错的算法。这些依赖于高度字段的一些预处理来创建用于更有效查找的2D映射。
http://www.lonesock.net/files/ConeStepMapping.pdf https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch18.html