卡通渲染
卡通渲染
卡通渲染也叫做Toon-Shading或Cel-Shading,属于非真实感渲染(Non-PhotorealisticRender)的一种。
卡通风格是游戏中很常见的一种渲染风格,使用这种风格的游戏画面有一些比较明显的共同特征,比如明显的描边线条,分明的明暗变化,简单的大色块等。
卡通渲染不同于真实感渲染,它不追求真实。
卡通渲染就是使模型呈现卡通风格的一些渲染方法。
它区别于普通渲染的主要有以下两点:
1、光照模型
在一般渲染中使用的大多是模拟真实世界中的光照的模型,比如使用简单的数学公式来模拟的几种常见经验模型:
1)能够较好表现粗糙表面的漫反射Lambert光照模型。
2)能够较好表现金属材质的镜面反射Phong光照模型。
3)融合了前两种模型优点的Blinn-Phong光照模型,它也是最为广泛使用的光照模型,是很多CG软件默认的光照渲染方法,因此也被称为标准光照模型。更加高级的还有基于物理的光照模型。它们都是尽力使得渲染结果更加贴近现实。
在卡通渲染中,不能再直接使用以上光照模型,为了使渲染结果能够呈现卡通效果,通常需要对光照模型进行一些处理,来得到离散的明暗区域效果。
例如,卡通风格的高光往往是模型上的一块快分界明显的纯色区域,以标准光照模型为例,在标准光照模型中,使用法线点乘光照方向以及视角方向来得到高光反射系数,于卡通渲染来说,可以同样适用这种方式来得到高光反射系数,但不同的是,需要把该值与一个阙值相比较,比如如果小于该阙值,则高光反射系数为0,反之为1。而且,卡通渲染中高光往往有很多个性化的需求,比如可以伸缩、可以方块化等等。
2、轮廓线
轮廓线的提取是卡通渲染很重要的部分。有许多绘制模型轮廓的方法。它们可以分为以下类型:
1)简单快速,使用视角方向和表面法线点乘结果来得到轮廓线信息,能够在一个pass中得到渲染结果的,基于观察角度和表面法线的轮廓渲染。
2)快速有效,使用两个pass先后渲染背面与正面面片,过程式几何轮廓线渲染。
3)基于图像处理的轮廓线渲染。
4)基于轮廓边检测的轮廓渲染。
下面是一个最简单的卡通渲染流程:
image1、使用一个pass把一个模型渲染到一张纹理图上(Render to Texture)。
2、用第二个pass对这张图进行边缘检测(可使用sobel边缘检测算法),找出边界并把它渲染到屏幕空间中。
3、为了实现卡通着色,创建一个带强度级别的灰度纹理,来达到卡通绘图中的离散阴影效果。
4、在顶点着色器中,通过光线方向与法向量的点积来确定顶点接受光线的多少。将结果规范化到[0,1]之间,来在纹理坐标空间中取值。
Unity-Chan
Unity-Chan是UnityTechnologies日本团队官方发布的一个开源二次元卡通渲染方案和素材组。
它也代表Unity娘——对Unity的拟人化,是最初UnityTechnologies Japan为吸引日本地区ACG爱好者使用Unity进行创作而特别设计的角色。
这里主要来看一下它的Shader部分:
如图,Unity-Chan的Shader很简单,分为眼睛、头发、衣服(fuku)、皮肤(hada)、面颊(akarami)
imageto be continue......
Unity-Chan2
这是Unity日本推出的全新的Unity-Chan素材组,相比于一代,它的内容丰富了很多倍。
它的Shader部分如图,相比于一代庞大了非常多。新增了后处理、曲面细分着色器、针对移动平台的优化等等。
imageto be continue......