如果OpenGL可以实现快速(相对)帧速率,因为部分管道由GPU处理,那么如果没有GPU,即纯粹在软件中完成,它将如何执行?它会和光线追踪一样的订单速度吗?慢?
GPU 能否支持光线追踪算法的某些部分?光线追踪能否变得足够快,以便将来用于交互式场景或游戏?
你真的不能以这种方式比较OpenGL和光线追踪。OpenGL是一个光栅绘制API,即它只是将单个点,线条和三角形放在屏幕上。没有像场景或连贯的几何对象这样的东西。
即使在软件中实现,像OpenGL这样的光栅器也可以非常快,非常容易。光栅器的渲染复杂性主要取决于输入几何体的数量。由于一切都在本地发生(= 一次一个三角形),因此它也对缓存非常友好。
光线追踪是一种全局渲染模型。因此,您需要将整个场景保存在内存中,并且对于投射到场景中的每一条光线,理论上它都可以与场景的每个部分进行交互。通常,交互的截止是预设的,这意味着渲染帧的总复杂性仅取决于拍摄的样本数量,即渲染的像素。
对于大多数场景,光线追踪本质上比基于光栅化的方法(如标准 OpenGL 渲染)工作量更大,因此速度更慢。
对于某些应用程序,情况正好相反。例如,如果将大量球体存储在正确的搜索数据结构中,则在场景中射出光线可能比将视锥体中的所有球体绘制在彼此之上更快。
GPU现在确实支持光线追踪算法,而且他们已经这样做了好几年。您通常必须自己实现算法,没有什么比 OpenGL 获得的用于光栅化的预打包算法更像了。我相信nVidia在他们的CUDA SDK中有例子。实时 3D 图形中的许多高端效果即使不是纯光线追踪算法,也会跟踪一些光线。
您可以为在标准 GPU 上实时运行的简单场景编写一个简单的光线跟踪器,而无需太多关于如何优化它的知识。
谷歌搜索关于"实时光线追踪"的科学论文,以获得更先进的方法。看看nVidia的CUDA SDK。也许AMD也有例子。