本文由@浅墨_毛星云 出品,转载请注明出处。
文章链接: http://blog.csdn.net/poem_qianmo/article/details/78574734
与传统的追求照片真实感的真实感渲染不同,非真实感渲染(Non-Photorealistic Rendering,NPR)旨在模拟艺术式的绘制风格,常用来对绘画风格和自然媒体(如铅笔、钢笔、墨水、木炭、水彩画等)进行模拟。而卡通渲染(Toon Rendering)作为一种特殊形式的非真实感渲染方法,近年来倍受关注。
通过阅读这篇文章,你将对非真实感渲染技术的以下要点有所了解:
• 非真实感渲染的基本思想和相关领域
• 卡通渲染
• 轮廓描边的几种实现流派
• 1)基于视点方向的描边
• 2)基于过程几何方法的描边
• 3)基于图像处理生成的描边
• 4)基于轮廓边缘检测的描边
• 5)混和轮廓描边
• 其他风格的NPR渲染技术
• 1)纹理调色板(Palette of Textures)
• 2)色调艺术图(Tonal Art Maps,TAM)
• 3)嫁接(Graftals)
• 水彩风格的NPR
一、非真实感渲染
正如变化的字体会给人不一样的感觉,不同的渲染风格会带给人们不同的心情,感受与意境。
非真实感渲染(Non-Photorealistic Rendering,NPR), 亦被称为风格化渲染(Stylistic Rendering),是致力于为数字艺术提供多种表达方式的一种渲染流派。与传统的追求照片真实感的真实感渲染(Photorealistic Rendering)计算机图形学不同,非真实感渲染旨在模拟艺术式的绘制风格,也用于尝试新的绘制风格。
NPR的目的之一就是创建类似技术示意图、技术图纸相关的图像,而另一个应用领域便是对绘画风格和自然媒体(如铅笔、钢笔、墨水、木炭、水彩画等)进行模拟。这是一个涉及内容非常之多的应用领域,为了捕捉各种媒体的真实效果,人们已经提出了各种不同的算法。
非真实感渲染与我们并不遥远,它早以“卡通着色(Toon Shading)”的形式出现在各式动漫和电影中。
在游戏制作方面,各种涉及到非真实感渲染的作品数不胜数,《Ōkami(大神)》,《The Legend of Zelda(塞尔达传说)》系列,甚至到现在的《Dota2》、《英雄联盟》、《守望先锋》,都多多少少涉及到了NPR。
二、卡通渲染
上文提到,一直以来,有一种特殊形式的NPR倍受关注,且和我们的生活息息相关,那就是卡通渲染(Toon Rendering,又称Cel Rendering)。这种渲染风格能够给人以独特的感染力与童趣。
这种风格很受欢迎的原因之一是McCloud的经典著作《Understanding Comics》中所讲述到的“通过简化进行增强(Amplification Through Simplification)”。通过简化并剔除所包含的混杂部分,可以突出于主题相关的信息,而大部分观众都会认同那些用简单风格描绘出来的卡通形象。
在计算机图形学领域,大约在20世纪90年代就开始使用toon渲染风格来实现三维模型和二维cel动画之间的结合。而且和其他NPR风格相比,这种绘制方法比较简单,可以很容易地利用计算机进行自动生成。
可以将最卡通着色基本的三个要素概括为:
• 锐利的阴影(Sharp shadows)
• 少有或没有高亮的点(Little or no highlight)
• 对物体轮廓进行描边(Outline around objects)
关于toon渲染,有很多不同的实现方法。
• 对于含有纹理但没有光照的模型来说,可以通过对纹理进行量化来近似具有实心填充颜色的卡通风格。
• 对于明暗处理,有两种最为常见的方法,一种是用实心颜色填充多边形区域。但这种方式实用价值不大。另一种是使用2-tone方法来表示光照效果和阴影区域。也称为硬着色方法(Hard Shading),可以通过将传统光照方程元素重新映射到不同的调色板上来实现。此外,一般用黑色来绘制图形的轮廓,可以达到增强卡通视觉效果的目的。
具体的着色方法,可以理解为在Fragment shader中测试每个像素漫反射diffuse中的NdotL值,让漫反射形成一个阶梯函数,不同的NdotL区域对应不同的颜色。下图显示了不同的漫反射强度值的着色部分阶梯指定了不同的像素颜色。
三、轮廓描边的渲染方法小结
轮廓描边的渲染方法可以分为以下五种:
1)基于视点方向的描边
2)基于过程几何方法的描边
3)基于图像处理的描边
4)基于轮廓边缘检测的描边
5)混和轮廓描边
下面分别进行介绍。
3.1 基于视点方向的描边
基于视点方向的描边方法,即表面角描边(Surface Angle Silhouetting),其基本思想是使用视点方向(view point)和表面法线(surface normal)之间的点乘结果得到轮廓线信息。如果此点乘结果接近于零,那么可以断定这个表面极大概率是侧向(Edge-on)的视线方向,而我们就将其视做轮廓边缘,进行描边。
这种方法相当于用一个边缘为黑色圆环的环境贴图(Environment Map),对物体表面进行着色处理,如图所示。
在实际应用中,通常使用一张一维纹理(一般我们称其为ramp图)来代替环贴图。也就是使用视角方向与顶点法向的点乘对该纹理进行采样。
需要注意,这种技术仅适用于一些特定的模型,这些模型必须保证法线与轮廓边缘之间存在一定关系。诸如立方体这样的模型,此方法并不太适用,因为往往无法得到轮廓边缘。但我们可以通过显式地绘制出折缝边缘,来正确地表现出这类比较明显的特征。
3.2 基于过程几何方法的描边
基于过程几何方法生成的描边,即过程几何描边(Procedural Geometry Silhouetting),基本思想是先渲染正向表面(frontfaces),再渲染背向表面(backfaces),从而使得轮廓边缘可见,达到描边的目的。
有多种方法用来渲染背向表面,且各有优缺点。但它们都是先渲染正向表面,然后打开正向表面裁剪(culling)开关,同时关闭背向裁剪开关。这样这个pass中的渲染结果便只会显示出背向表面。
一种基于过程几何方法生成的描边的方法是仅仅渲染出背向表面的边界线(而不是面),使用偏置(Biasing)或者其他技术来确保这些线条恰好位于正向表面之前。这样就可以将除轮廓边缘之外的其他所有线条全部隐藏起来。这种方法非常适合单像素宽的线条,但如果线条的宽度超过这个值,那么通常会出现无法连接独立线段的情况,从而造成明显的缝隙。
另一种渲染较宽描边线条的方法是直接将背面表面本身渲染成黑色。但没有任何偏置操作,背向表面就会保持不可见,所以需要做的就是通过偏置将这些背向表面沿屏幕Z方向向前移动,这样,便只有背向表面的三角形边缘是可见的。
如下图,可以使用背向表面的斜率对对多边形进行向前偏置,但是线条宽度依然依赖于正向表面的角度。
3.3 基于图像处理的描边
基于图像处理生成轮廓描边(Silhouetting by Image Processing),即通过在各种缓冲区上执行图像处理技术,来实现非真实渲染的方法。可以将其理解为一种后处理操作。通过寻找相邻Z缓冲数值的不连续性,就可以确定大多数轮廓线的位置。同样,借助邻接表面法线向量的不连续性,可以确定出分界线(往往也是轮廓线)边缘的位置。此外,利用环境色对场景进行绘制,也可以用来检测前两种方法可能会漏掉的边缘。
3.4 基于轮廓边缘检测的描边
上文提到的大多数渲染描边的方法都存在一个缺点,那就是他们都需要两个通道才能完成物体轮廓描边的渲染。
基于轮廓边缘检测的描边,通过检测出轮廓边缘(Silhouette EdgeDetection)),并直接对它们进行绘制,这种形式的描边,可以很好地控制线条绘制的过程。由于边缘独立于模型,因此这种方法还有另外一个优点,就是能够生成一些特殊的效果。例如,在网格密集的地方可以突现出轮廓边缘。
可以将轮廓边缘理解为朝向相反的相邻三角形的交接。也就是说,其中的一个三角形是朝向视点,另一个三角形背向视点。
具体测试方法如下:
其中n0和n1分别表示两个三角形的表面法线向量,v表示从视点到这条边缘(也就是其中任何一个端点)的视线方向向量。而为了确保这种测试的准确性,必须保证表面的取向一致。
3.5 混和轮廓描边
混和轮廓描边(Hybrid Silhouetting),即结合了图像处理方法和几何要素方法,来渲染轮廓的方法。
这种方法的具体思想是:首先,找到一系列轮廓边缘的列表。其次,渲染出所有物体的三角形和轮廓边缘,同时为他们指定一个不同的ID值(也就是说,赋予不同的颜色)。接着读取该ID缓冲器并从中判断出可见的轮廓边缘,随之对这些可见线段进行重叠检测,并将它们连接起来形成平滑的笔划路径。最后就可以对这些重建起来的路径进行风格化笔划渲染,其中,这些笔划本身可以用很多方法来进行风格化处理,包括变细、火焰、摆动、淡化等效果,同时还有深度和距离信息。
如下图。
来源:CSDN,作者:浅墨_毛星云,转载此文目的在于传递更多信息,版权归原作者所有。
原文:https://blog.csdn.net/poem_qianmo/article/details/78574734
版权声明:本文为博主原创文章,转载请附上博文链接!