----------------------------------------------------------------------
如需转载请注出处:
http://www.cnitblog.com/skyman ----------------------------------------------------------------------
卡通渲染(Catoon Rendering/Toon Shading/Cel Shading)是NPR技术中的一种。 下面是老外关于卡通渲染的定义:
Cel shading is a flat looking 3D image, with a cartoonish look exemplified by animated movies.The basic elements of a cel shaded effect are :
- Sharp shadows
- Little or no highlight
- Outline around objects
一般使用三种色调着色:一种用于明亮的漫反射区域;另一种用于暗的漫反射区域;第三种用于反射强光。也有的只使用两种色调,即没有反射强光。基本原理就是把传统的光照模型计算得到的连续的颜色转换为离散的2-3种颜色,可以用一个1D或2D纹理作为阶梯函数来实现这种转换。
在卡通渲染中,除了着色,边界(outline)绘制是更关键的部分。卡通渲染中的边界有以下几种:
(1)Boundary or border edge:仅为一个多边形所拥有的边界。一个立体造型一般是没有这样的边界;
(2)Crease or hard edge:为2个多边形共有的边界,而且2个多边形的夹角(dihedral angle)大于一个阈值。这个阈值的参考值为60度;
(3)Material edge:不同材质的2个多边形的公共边界,也可是艺术家希望总是显示的线条;
(4)Silhouette edge:相对于当前观察方向而言,面向不同朝向的2个多边形的公共边界。
这里使用VS1.1实现卡通渲染,可以加载X模型渲染,颜色随材质的不同而不同。目前实现了动态点光源的光照效果。但光源运动时会出现比较明显的抖动效果,这是卡通渲染遇到的常见问题。解决的方法是设法使3种颜色的过渡尽量平滑,可以使用纹理双线性过滤采样来实现。
放出一张效果截图: