光栅化(三角形)和光线追踪是我所遇到的渲染3D场景的唯一方法。还有其他方法吗?此外,我想知道是否有其他非常“独特”的3D制作方式,例如不使用多边形。
光栅化(三角形)和光线追踪是我所遇到的渲染3D场景的唯一方法。还有其他方法吗?此外,我想知道是否有其他非常“独特”的3D制作方式,例如不使用多边形。
啊啊!这些答案非常不准确!
当然,问题的不精确也没有帮助。
好的,“渲染”是一个非常广泛的话题。在渲染中的一个问题是相机可见性或“隐藏表面算法”,即确定每个像素中看到哪些对象。有各种各样的可见性算法的分类。这可能是发帖人所问的(考虑到他们将其视为“光栅化”和“光线跟踪”之间的二分法)。
经典的(尽管现在有些过时)分类参考是Sutherland et al.的“十种隐藏表面算法的特征描述”,ACM计算机调查1974年。它非常过时,但仍然非常适合提供框架来思考如何对这些算法进行分类。
一类隐藏表面算法涉及“射线投射”,即计算从相机通过每个像素与物体的交点(可以具有各种表示形式,包括三角形,代数曲面,NURBS等)。
其他类别的隐藏表面算法包括“z-buffer”,“扫描线技术”,“列表优先算法”等。在那些计算周期不多且没有足够的内存来存储z-buffer的日子里,他们非常有创意地设计算法。
现代计算和内存都很便宜,因此三种技术基本上获胜了:(1)将所有内容切换成三角形并使用z-buffer;(2)射线投射;(3)类似Reyes的算法,使用扩展z-buffer来处理透明度等。现代图形卡执行#1;高端软件渲染通常执行#2或#3或组合。虽然已经提出了各种光线跟踪硬件,并且有时也建造了,但从未流行起来,而且现代GPU现在足够可编程,以实际进行光线跟踪,但速度劣势很大,以其编码硬件化的光栅化技术为主。多年来,其他更奇特的算法大都被淘汰了。(尽管各种排序/喷洒算法可以用于体积渲染或其他特殊目的。)
“Rasterizing”实际上就是“计算一个对象落在哪些像素上”。惯例规定它不包括光线追踪,但这是不确定的。您可以认为栅格化回答了“此形状与哪些像素重叠”,而光线追踪回答了“哪个对象在这个像素后面”,如果您看到区别的话。