光线跟踪的速度与例如OpenGL(或其他图形实现)

时间:2012-06-06 06:40:04

标签: opengl graphics gpu raytracing

如果OpenGL可以实现快速(相对)帧速率,因为部分流水线是由GPU处理的,那么没有GPU它会如何执行,即纯粹用软件完成?它是否与光线追踪的订单速度相同?慢?

GPU是否可以支持光线跟踪算法的某些部分?光线追踪是否足够快,可以在未来的交互式场景或游戏中使用?

2 个答案:

答案 0 :(得分:3)

你真的无法以这种方式比较OpenGL和光线追踪。 OpenGL是一个光栅化绘图API,即它只是将单点,线和三角形放到屏幕上。没有场景或连贯的几何对象。

即使用软件实现,像OpenGL这样的光栅化器也可以非常快速地完成。光栅化器的渲染复杂性主要取决于输入几何体的数量。由于一切都在本地发生(=一次一个三角形),因此它也非常适合缓存。

光线跟踪是一种全局渲染模型。因此,您需要将整个场景保留在内存中,并且对于投射到场景中的每条光线,它理论上可以与场景的每个部分进行交互。通常预设交互的截止,这意味着渲染帧的总复杂性仅取决于所采样的数量,即渲染的像素。

答案 1 :(得分:1)

对于大多数场景来说,光线跟踪本质上比基于光栅化的方法(如标准OpenGL渲染)更加有效,因此更慢。

对于某些应用程序,它是另一种方式。例如,如果你有大量的球体存储在正确的搜索数据结构中,那么在场景中拍摄光线的速度可能比在每个球体顶部的视锥体上绘制所有球体更快。其他

GPU确实支持光线追踪算法现在,他们已经这样做了好几年了。您通常必须自己实现算法,没有什么比使用OpenGL获得的光栅化预打包算法更好的了。我相信nVidia在他们的CUDA SDK中有例子。即使实时3D图形中的许多高端效果不是纯粹的光线跟踪算法,它们也会跟踪一些光线。

您可以为一个简单的场景编写一个简单的光线跟踪器,该场景可以在标准GPU上实时运行,而不需要太多关于如何优化它的知识。

谷歌针对更高级方法的“实时光线追踪”科学论文。 看看nVidia的CUDA SDK。也许AMD也有例子。