渲染的重要缓存是深度缓存----也称作z-buffer。深度缓存不存储像素的颜色,而代之以像素的深度信息。存入缓存的深度信息有多种不同的变体,但它们基本上都反映物体到摄像机的距离。实践中通常保存的都是裁剪空间的z坐标,这就是z-buffer名称的由来。
深度缓存一般用于计算物体之间的遮挡,当光栅化三角形时,计算各像素的插值深度。在渲染像素之前,将这个深度值和深度缓存中该像素的深度值比较,如果新的深度比现有值离摄像机更远,则新的像素被丢弃;否则像素颜色被写到帧缓存,并用新的更近的值更新深度缓存。在开始进行新的渲染之前,记得要置z-buffer各值为无限远(在裁剪空间中,这个值为1.0),这样一批像素才能通过深度测试,一般不对z-buffer设置双缓存。
本来是想简单的就卡通渲染做一个概述,写着写着就扯了一堆相干和不相干的技术。总的来说这篇文章偏综述性质,没有涉及到太多具体的实现,实现部分可以参考我在引用中列出的一些文章。卡通渲染这个领域从我的理解来看,3dmax渲染,是一个经验大于理论,美术大于算法的领域,3dmax怎么渲染,因此应该主动地接受更多地trick,不要过度地思考“为什么”,毕竟效果好看,直观上好理解即可。关于卡通渲染的在本文中的分类,渲染,可能不是一个准确的描述,渲染农场,但是也提供了一种思考角度:有那么多的NPR相关技术,在一个具体的项目中我究竟要使用其中的哪些技术?这时候具体的画风要求就变得格外重要,因为画风决定了具体技术的选择和创新。