16

光栅化(三角形)和光线追踪是我遇到的唯一渲染 3D 场景的方法。还有其他人吗?另外,我很想知道任何其他真正“外面”的 3D 方法,例如不使用多边形。

4

3 回答 3

45

啊!这些答案非常无知!

当然,问题不精确也无济于事。

好的,“渲染”是一个非常广泛的话题。渲染中的一个问题是相机可见性或“隐藏表面算法”——找出在每个像素中看到的对象。可见性算法有多种分类。这可能就是发帖人要问的(考虑到他们认为这是“光栅化”和“光线追踪”之间的二分法)。

一个经典的(虽然现在有些过时了)分类参考是 Sutherland 等人的“A Characterization of Ten Hidden-Surface Algorithms”,ACM Computer Surveys 1974。它已经非常过时了,但它仍然非常适合提供一个框架来思考如何对这些算法进行分类.

一类隐藏表面算法涉及“光线投射”,它计算从相机穿过每个像素的线与对象的交点(可以有各种表示,包括三角形、代数表面、NURBS 等)。

其他类别的隐藏表面算法包括“z-buffer”、“扫描线技术”、“列表优先算法”等。在没有太多计算周期和没有足够内存来存储 z 缓冲区的日子里,他们的算法非常有创意。

如今,计算和内存都很便宜,因此三种技术几乎胜出:(1)将所有内容切成三角形并使用 z 缓冲区;(2) 射线投射;(3) 类雷耶斯算法,使用扩展的 z 缓冲区来处理透明度等。现代显卡做#1;高端软件渲染通常会做 #2 或 #3 或组合。尽管已经提出了各种光线追踪硬件,有时还构建了这些硬件,但从未流行起来,而且现代 GPU 现在已经足够可编程以实际进行光线追踪,尽管其硬编码光栅化技术在速度上存在严重劣势。多年来,其他更奇特的算法大多被搁置了。(虽然各种排序/喷溅算法可用于体绘制或其他特殊目的。)

“光栅化”实际上只是意味着“找出对象位于哪些像素上”。惯例规定它不包括光线追踪,但这是不稳定的。我想你可以证明光栅化回答“这个形状重叠了哪些像素”,而光线追踪回答“这个像素后面是哪个对象”,如果你看到区别的话。

那么,隐藏表面的去除并不是“渲染”领域唯一需要解决的问题。了解每个像素中可见的对象只是一个开始;您还需要知道它是什么颜色,这意味着有一些方法可以计算光如何在场景中传播。有一大堆技术,通常分解为处理阴影、反射和“全局照明”(在对象之间反弹,而不是直接来自灯光)。

“光线追踪”意味着应用光线投射技术来确定阴影、反射、全局照明等的可见性。可以对所有事物使用光线追踪,或者使用各种光栅化方法来获得相机可见性,并使用光线追踪来获得阴影、反射、和胃肠道。“光子映射”和“路径追踪”是计算某些类型的光传播的技术(使用光线追踪,所以说它们从根本上是一种不同的渲染技术是错误的)。还有一些不使用光线追踪的全局照明技术,例如“辐射”方法(这是一种解决全局光传播的有限元方法,但在该领域的大部分地区最近已经失宠)。

提到特定形状表示(NURBS、体积、三角形)的人也有点困惑。这是光线追踪与光栅化的正交问题。例如,您可以直接对 nurb 进行光线追踪,也可以将 nurb 切成三角形并对其进行追踪。您可以直接将三角形栅格化到 z 缓冲区中,但您也可以按扫描线顺序直接栅格化高阶参数曲面(参见 Lane/Carpenter/etc CACM 1980)。

于 2009-04-24T18:04:47.863 回答
5

有一种称为光子映射的技术实际上与光线追踪非常相似,但在复杂场景中提供了各种优势。事实上,如果操作得当,它是唯一能够提供真正逼真(即遵守所有光学定律)渲染的方法(至少我知道其中一种方法)。据我所知,这是一种很少使用的技术,因为它的性能甚至比光线追踪还要差(鉴于它有效地做相反的事情并模拟光子从光源到相机的路径)——但这就是它唯一的缺点。这当然是一个有趣的算法,尽管在光线追踪之后(如果有的话)你不会看到它被广泛使用。

于 2009-04-22T22:56:52.760 回答
2

Wikipedia 上的渲染文章涵盖了各种技术

介绍段落:

已经研究了许多渲染算法,并且用于渲染的软件可以采用多种不同的技术来获得最终图像。

追踪场景中的每一束光线是不切实际的,而且会花费大量时间。如果采样没有受到智能限制,即使跟踪足够大的部分以生成图像也会花费过多的时间。

因此,出现了四种更有效的光传输建模技术: 光栅化,包括扫描线渲染,将场景中的对象几何投影到图像平面,没有高级光学效果;光线投射将场景视为从特定角度观察到的场景,仅根据几何和反射强度的非常基本的光学定律计算观察到的图像,并且可能使用蒙特卡罗技术来减少伪影;光能传递性使用有限元数学来模拟光从表面的漫射;和光线追踪类似于光线投射,但采用了更高级的光学模拟,并且通常使用蒙特卡罗技术以通常慢几个数量级的速度获得更真实的结果。

大多数先进的软件结合了两种或多种技术,以合理的成本获得足够好的结果。

另一个区别是迭代图像平面的像素的图像顺序算法和迭代场景中的对象的对象顺序算法之间的区别。通常对象顺序更有效,因为场景中的对象通常比像素少。

从这些描述中,我觉得只有光能传递在概念上有所不同。

于 2009-04-22T22:42:47.303 回答