3D图形学(9):非真实感渲染(NPR)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq826364410/article/details/88937256

内容引自《Real Time Rendering 3rd》

非真实感渲染 Non-Photorealistic Rendering

与传统的追求照片真实感的真实感渲染不同,非真实感渲染(Non-Photorealistic Rendering,NPR)旨在模拟艺术式的绘制风格,常用来对绘画风格和自然媒体(如铅笔、钢笔、墨水、木炭、水彩画等)进行模拟。而卡通渲染(Toon Rendering)作为一种特殊形式的非真实感渲染方法,近年来倍受关注。

 

一、卡通渲染
 

上文提到,一直以来,有一种特殊形式的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),可以通过将传统光照方程元素重新映射到不同的调色板上来实现。此外,一般用黑色来绘制图形的轮廓,可以达到增强卡通视觉效果的目的。

 

二、轮廓描边

轮廓描边的渲染方法可以分为以下五种:

1)基于视点方向的描边

2)基于过程几何方法的描边

3)基于图像处理的描边

4)基于轮廓边缘检测的描边

5)混和轮廓描边

2.1 基于视点方向的描边
 

基于视点方向的描边方法,即表面角描边(Surface Angle Silhouetting),其基本思想是使用视点方向(view point)和表面法线(surface normal)之间的点乘结果得到轮廓线信息。如果此点乘结果接近于零,那么可以断定这个表面极大概率是侧向(Edge-on)的视线方向,而我们就将其视做轮廓边缘,进行描边。

这种方法相当于用一个边缘为黑色圆环的环境贴图(Environment Map),对物体表面进行着色处理。

在实际应用中,通常使用一张一维纹理(一般我们称其为ramp图)来代替环贴图。也就是使用视角方向与顶点法向的点乘对该纹理进行采样。

需要注意,这种技术仅适用于一些特定的模型,这些模型必须保证法线与轮廓边缘之间存在一定关系。诸如立方体这样的模型,此方法并不太适用,因为往往无法得到轮廓边缘。但我们可以通过显式地绘制出折缝边缘,来正确地表现出这类比较明显的特征。

2.2 基于过程几何方法的描边


基于过程几何方法生成的描边,即过程几何描边(Procedural Geometry Silhouetting),基本思想是先渲染正向表面(frontfaces),再渲染背向表面(backfaces),从而使得轮廓边缘可见,达到描边的目的。

有多种方法用来渲染背向表面,且各有优缺点。但它们都是先渲染正向表面,然后打开正向表面裁剪(culling)开关,同时关闭背向裁剪开关。这样这个pass中的渲染结果便只会显示出背向表面。

一种基于过程几何方法生成的描边的方法是仅仅渲染出背向表面的边界线(而不是面),使用偏置(Biasing)或者其他技术来确保这些线条恰好位于正向表面之前。这样就可以将除轮廓边缘之外的其他所有线条全部隐藏起来。这种方法非常适合单像素宽的线条,但如果线条的宽度超过这个值,那么通常会出现无法连接独立线段的情况,从而造成明显的缝隙。

另一种渲染较宽描边线条的方法是直接将背面表面本身渲染成黑色。但没有任何偏置操作,背向表面就会保持不可见,所以需要做的就是通过偏置将这些背向表面沿屏幕Z方向向前移动,这样,便只有背向表面的三角形边缘是可见的。

2.3 基于图像处理的描边
 

基于图像处理生成轮廓描边(Silhouetting by Image Processing),即通过在各种缓冲区上执行图像处理技术,来实现非真实渲染的方法。可以将其理解为一种后处理操作。通过寻找相邻Z缓冲数值的不连续性,就可以确定大多数轮廓线的位置。同样,借助邻接表面法线向量的不连续性,可以确定出分界线(往往也是轮廓线)边缘的位置。此外,利用环境色对场景进行绘制,也可以用来检测前两种方法可能会漏掉的边缘。

2.4 基于轮廓边缘检测的描边
 

上文提到的大多数渲染描边的方法都存在一个缺点,那就是他们都需要两个通道才能完成物体轮廓描边的渲染。

基于轮廓边缘检测的描边,通过检测出轮廓边缘(Silhouette EdgeDetection)),并直接对它们进行绘制,这种形式的描边,可以很好地控制线条绘制的过程。由于边缘独立于模型,因此这种方法还有另外一个优点,就是能够生成一些特殊的效果。例如,在网格密集的地方可以突现出轮廓边缘。

2.5 混和轮廓描边
 

混和轮廓描边(Hybrid Silhouetting),即结合了图像处理方法和几何要素方法,来渲染轮廓的方法。

这种方法的具体思想是:首先,找到一系列轮廓边缘的列表。其次,渲染出所有物体的三角形和轮廓边缘,同时为他们指定一个不同的ID值(也就是说,赋予不同的颜色)。接着读取该ID缓冲器并从中判断出可见的轮廓边缘,随之对这些可见线段进行重叠检测,并将它们连接起来形成平滑的笔划路径。最后就可以对这些重建起来的路径进行风格化笔划渲染,其中,这些笔划本身可以用很多方法来进行风格化处理,包括变细、火焰、摆动、淡化等效果,同时还有深度和距离信息。

猜你喜欢

转载自blog.csdn.net/qq826364410/article/details/88937256