时隔 32 年,计算机图形学领域学者再获图灵奖。获奖者 Edwin E. Catmull 的研究对计算机图形学领域贡献卓著。仅在 1974 年所著的博士论文中,他就提出了两种用于显示弯曲 patch 的突破性技术。本文将介绍这篇博士论文的贡献。
如何终止细分过程?
对于那些没有覆盖一个采样点的 patch,会发生什么?
如果子 patch 与屏幕的边相交或者不在视线范围内,会怎么样?
一个 patch 要被细分多少次?
离散采样会产生什么问题?
假设三次曲线 f(t) = a x t^3 + b x t^2 + c x t +d。问题是:已知 f(t-h) 和 f(t+h),确定 f(t)。
其中 f(t+h) = a x (t+h)^3 + b x (t+h)^2 + c x (t+h) x d,f(t-h) = a x (t-h)^3 + b x (t-h)^2 + c x (t-h) x d,
f(t-h) + f(t+h) 可以计算为 2 x f(t) + 2 x (h^2 x ( 3 x (a x t +b) ) ),
则中心点 f(t) = ( f(t-h) + f(t+h) )/ 2 – h^2 x ( 3 x (a x t +b) )。
假设 g(t) = h^2 x ( 3 x (a x t +b) ) 为 t 处的中心点,
g(t-h) = h^2 x ( 3 x (a x (t-h) +b) ),g(t+h) = h^2 x ( 3 x (a x (t+h) +b) ),
计算 g(t-h) + g(t+h) = 2 x g(t),
得到 g(t) = ( g(t-h) + g(t+h) ) /2。
找出 patch 每条边的中心点。
找出 patch 自身的中心点。
Scanline 算法:逐行处理,而不是以多边形或像素为基础进行。
Warnock 算法:对屏幕执行递归切分,直到所有区域易于计算。该算法多作为其他算法的基础,适合并行执行。
画家算法(Painter’s algorithm):根据深度对场景中的所有多边形进行排序,然后按照从远到近的顺序进行绘画。多用于(简单的)视频游戏中。
光线追踪算法:试着反向追踪进入你眼睛的光线,并沿着这个轨迹找到光源。
以 z 顺序对多边形进行排序;
对于每个多边形,检查它是否与其他多边形重叠;
查看测试多边形后面有没有其他多边形;
如果有,移除其后面的多边形;
将重叠的多边形分割为更小的部分,每次分割后均重复以上步骤。
使用曲面的法线来计算强度;
定义强度函数来计算强度;
基于某幅图映射强度值;
针对阴影或透明修改已有强度。
前置滤波(Pre-filtering):将像素作为区域,基于场景中对象与像素区域的重叠计算像素颜色;
后置滤波(Post-filtering):以较高分辨率渲染场景,将像素值计算为子像素的(加权)平均值。