光栅化(三角形)和光线追踪是我遇到渲染3D场景的唯一方法。还有其他人吗?此外,我很想知道任何其他真正“在那里”做3D的方法,例如不使用多边形。
答案 0 :(得分:42)
Aagh!这些答案都是非常不知情的!
当然,问题不精确也无济于事。
好的,“渲染”是一个非常广泛的主题。渲染中的一个问题是摄像机可见性或“隐藏表面算法” - 确定每个像素中看到的对象。可见性算法有各种分类。这可能可能海报所询问的内容(鉴于他们认为它是“光栅化”和“光线追踪”之间的二分法)。
经典(尽管现在有点过时)的分类参考是Sutherland等人的“A Characterization of Ten Hidden-Surface Algorithms”,ACM Computer Surveys 1974.它已经过时了,但它仍然非常适合提供思考如何的框架对此类算法进行分类。
一类隐藏曲面算法涉及“光线投射”,它计算从相机通过每个像素的线与物体(可以具有各种表示,包括三角形,代数曲面,NURBS等)的交点。
其他类别的隐藏表面算法包括“z-buffer”,“scanline技术”,“列表优先级算法”等。在没有多少计算周期且没有足够的内存来存储z缓冲区的日子里,他们对算法很有创意。
现在,计算机和内存都很便宜,因此有三种技术可以胜出:(1)将所有内容切割成三角形并使用z缓冲区; (2)射线铸造; (3)类似雷耶斯的算法,它使用扩展的z缓冲区来处理透明度等。现代显卡做#1;高端软件渲染通常是#2或#3或组合。虽然已经提出了各种光线跟踪硬件,有时已经构建,但从未被捕获,现代GPU现在可编程到足以实际光线跟踪,尽管它们的硬编码光栅化技术处于严重的速度劣势。其他更奇特的算法多年来一直被淘汰。 (尽管各种排序/喷溅算法可用于体绘制或其他特殊用途。)
“栅格化”实际上只是意味着“找出一个物体所在的像素”。公约规定它不包括光线追踪,但这是不稳定的。我想你可以证明光栅化会回答“这个形状重叠的像素”,而光线跟踪则回答“哪个对象在这个像素后面”,如果你看到差异的话。
现在,隐藏表面移除并不是“渲染”领域唯一需要解决的问题。知道每个像素中可见的对象只是一个开始;你还需要知道它是什么颜色,这意味着有一些计算光在场景周围传播的方法。有很多技术,通常分解为处理阴影,反射和“全局照明”(在对象之间反弹,而不是直接来自灯光)。
“光线跟踪”是指应用光线投射技术来确定阴影,反射,全局照明等的可见性。可以对所有内容使用光线跟踪,或使用各种光栅化方法进行相机可见性和光线跟踪阴影,反思和GI。 “光子映射”和“路径跟踪”是用于计算某些类型的光传播的技术(使用光线跟踪,因此说它们在某种程度上基本上是一种不同的渲染技术是错误的)。还有一些不使用光线跟踪的全局照明技术,例如“光能传递”方法(这是解决全局光传播的有限元方法,但是在该领域的大多数部分最近已经失宠)。但是使用光能传递或光子映射进行光传播STILL需要您以某种方式制作最终图像,通常采用标准技术之一(光线投射,z缓冲/光栅化等)。
提到特定形状表示(NURBS,体积,三角形)的人也有点困惑。这是光线跟踪与光栅化的正交问题。例如,您可以直接扫描跟踪nurbs,或者您可以将nurbs切成三角形并跟踪它们。您可以直接将三角形栅格化为z缓冲区,但您也可以按扫描线顺序直接栅格化高阶参数曲面(c.f.Lane / Carpenter / etc CACM 1980)。
答案 1 :(得分:5)
有一种名为photon mapping的技术实际上与光线跟踪非常相似,但在复杂场景中提供了各种优势。实际上,它是唯一能够提供真实逼真(即遵守所有光学定律)渲染的方法(至少我知道)。据我所知,这是一种谨慎使用的技术,因为它的性能远远超过光线跟踪(假设它有效地反过来并模拟光子从光源到相机的路径) - 但这就是它的唯一的缺点。这当然是一个有趣的算法,尽管你不会在光线跟踪之后(如果有的话)直接看到它的大规模使用。
答案 2 :(得分:1)
维基百科上的渲染文章涵盖了各种techniques。
简介段落:
许多渲染算法已经存在 研究和用于的软件 渲染可以使用一些 获得决赛的不同技巧 图像。
追踪场景中的每一道光线 是不切实际的,需要一个 大量的时间。甚至追查 一大块足以产生一个 图像需要过多的数量 如果抽样不是时间 智能限制。
因此,四个松散的家庭 更高效的轻型运输 建模技术已经出现: 光栅化,包括扫描线 渲染,几何项目 场景中的对象到图像 飞机,没有先进的光学 效果; 光线投射考虑了 从具体情况观察到的场景 观点,计算 观察图像仅基于几何 和非常基本的光学定律 反射强度,也许 使用蒙特卡罗技术来减少 文物; 光能传递使用有限 元素数学来模拟 光的漫射扩散 表面;和光线追踪类似 射线投射,但雇用更多 先进的光学模拟,和 通常使用蒙特卡罗技术 在a获得更真实的结果 速度往往是订单的 幅度较慢。大多数高级软件结合了两个或 更多的技术获得 合理的结果足够好 成本。
另一个区别是图像之间 迭代算法,迭代 图像平面的像素和对象 迭代算法,迭代 场景中的物体。一般对象 订单更有效率,因为有 通常场景中的对象少于 像素。
从这些描述中,只有radiosity在概念上与我有所不同。