卡通人物渲染管线概述

卡通人物渲染管线概述

*如果你想要上手卡渲却苦于没有思路,本篇将带你走一遍人物卡渲管线,节省前期技术开发整理的时间。本人学疏才浅,讲到的内容可能不够全面,也请各路大佬多海涵。

*本篇仅涉及知识点,实现方法可以参考我的往期教程~

*本篇为录播知识点整理,配合录播食用效果更佳

开篇:

目录:

第一节:

首先,NPR-Non-Photorealistic Rendering,顾名思义,非真实渲染。

对比下面的三个图:

左边塞尔达,不用说,完全的NPR效果。

右边使命召唤,完全的PBR效果。

中间噬血代码,整体在PBR基础上,在头发、衣服、Bloom等效果上叠加了NPR效果。

再看什么是NPR,卡通渲染也是NPR一种,各类非真实的视觉呈现效果都可以称为NPR,没有一个标准,没法定论说NPR就是什么效果,每个厂商都有对NPR独到的理解,所以,让我们先从模仿做起,在模仿的过程中积累知识,并创造自己的一套渲染管线。

今天的是卡通人物渲染管线,所以让我们专注于纯NPR效果的实现,单从上面三张图,最明显能看出来的,是在着色上,塞尔达的人物卡渲呈现很多大色块,色阶很少,所以让我们先从大面积着色上入手今天的卡通人物渲染管线。

这里有六种光照模型与对应解释:(敲黑板,这是对模型整体大面积着色的关键一步)

较为常用的有:扁平光照(加高光)、增加扁平光照色阶、Ramp图过渡、混合NPR与PBR

在着色完成后,我们需要考虑描边:

美术处理上的描边手段:

图像处理上的描边手段:

对应解释:

屏幕空间顶点偏移:(不常用,最多用在高亮描边显示)

BackFace描边:(低消耗效果好,需要对模型预处理)

场景深度描边:(通过对场景深度卷积运算得,常用作高质量外描边,内部细节不足)

场景法线描边:(通过对场景法线卷运算得,常用作内部细节描边,外描边粗细不足)

综合细节描边处理:

(BackFace经过平滑法线、转移到屏幕空间、活用RBGA四通道能达到较好的效果。结合自定义深度做外描边、场景法线做内描边也可以达到较好的效果)

IDTexture描边:

(通过对色值卷积,常用作模型内部部件外描边,并且让描边一定程度上有摆脱网格体限制的能力)

根据上面的内容,我们就能轻松复刻塞尔达的效果:

接下来让我们看看,如何还原原神的人物卡通渲染:

塞尔达的卡渲风格也很符合游戏本身,比较粗犷,而原神的人物卡渲是那种比较精致的类型,增加了很多细节补充了画面的丰富的。所以,在开始上手制作前,细节分析要做到位,这也是为什么全网那么大佬做出的多仿原神渲染中,卡渲效果也是良莠不齐的原因。

接下来给出我的参考:

在做完分析后,让我们开始上手制作:

首先处理好光照效果:(用到了上文提到的Ramp图过渡的扁平光照)

·后处理中制作扁平光照

·Ramp图分为头发、身体、衣服三种:

头发:暗面略带紫红色,过渡由黄绿向灰白渐变

衣服:有黄绿色过渡(我这里懒了只做了灰色过渡)

身体:暗面略带红色体现肉体质感,黄绿色过渡表现向日光的过渡

*值得一提的一点:(如何在后处理中“消除”引擎自带光照影响可以参考我的其他教程)

为什么上面消除要加双引号,可以在RenderDoc中看到,后处理是走完整个引擎自带渲染管线后附加的一套处理管线,本质上是在用延迟渲染返现引擎自带管线,我们并没有改变引擎自带管线,所以并没有真正消除引擎自带光照,而是视觉上消除了而已,性能上肯定不如改管线的要好。

用后处理制作扁平光照能做到什么效果:

纯后处理能支持一个日光的光源阴影效果与多个环境光的光色效果。

结合后处理、材质和蓝图,能够支持多光源阴影效果。

基于上面的扁平光照,添加多种高光体现质感:

四种高光:

衣服:布料类,不怎么需要高光

盔甲&绳结:硬胶类,需要硬边高光,据观察高光需要随视角改变

金属:金属类,需要软边高光,亮暗对比度较大,高光需要随视角改变

头发:遮罩类,在一定遮罩范围内高光随视角改变,亮暗测亮度需要调整避免过亮

做完基础光照后,我们需要优化阴影细节:

分为三种阴影:

动态阴影:在上述光照中已经制作完成,注意Ramp图色值选取

静态阴影:静态阴影中分两种。一种,通过遮罩绘制出阴影区域,保证整体阴影色值统一。第二种,绘制在贴图上,要比统一阴影颜色更深,用来体现头发间隙、耳朵轮廓等需要通过阴影表现深度的地方。

面部阴影:通过ShadowMap制作(一种由0向1渐变的梯度图),通过蓝图与材质结合,调整日光与面部阴影的交互。具体做法可参考往期教程。

在上面,我们已经完成了光照效果的制作,接下来看一下描边:

这里有三种描边:

外描边:自定义深度获取整体遮罩,卷积算得外描边

内描边:自定义深度获取遮罩,避免全局描边,对场景法线卷积算得内描边

内边缘光:

这个值得一提。许多仿原神渲染里似乎都没有看到对这个效果的还原,可能是没有注意到,也可能注意到了没能够实现。

先讲一种错误做法——用菲涅尔制作。通过对菲涅尔的限制可以获取较细的内部描边,这点在单纯用一个球体可以实现,效果也很不错,但是,如果换成正方体,无论如何处理都得不到正确的结果。这是因为菲涅尔本质就是相机向量与物体法线点积运算,当物体法线变化不够明显时,或者像是正方体这样一个面法线都是一个方向的情况,点积的结果一个面都是一个,不管怎么运算正方体这个面的结果都是统一的,所以不要用菲涅尔去做描边。

这里给出我的方法,用自定义深度绘制两次外边缘,并改变两者卷积的偏移量,获取一个粗细可控的区域用制作内边缘光。

在做完三个描边后,你会发现随着视角转变,描边粗细并没有变化,当摄像机原理、人物变小时,描边粗细不变会使卷积出来的描边揉成一坨,所以对每个描边都要相对相机距离进行缩放。

描边做完后,让我们优化一下细节:

Ramp图上文已经给出了参考这里不再赘述。

内边缘光:可以看到开启后角色变得立体更加饱满。这点从美术的角度上考虑也可以理解,阴影部分不会是完全的阴影,一定会有其它场景反射回来的光补充阴影的光照,而不是完全的阴影,这里便用内边缘光补充了阴影的效果。

金属:神里龟龟身上的金属大多为黄铜质感的金属,增加亮暗对比度不能只是提高亮度,阴影我选择了偏红棕色的色调,亮部给了更多的黄色。

前文也提我们摒弃了引擎自带的光照系统,这意味着制作MRAO(金属度、粗糙度、环境光遮蔽)这些贴图已经无法区分材质,粗糙度金属度对模型已经没有影响了,法线也只能影响反射光的朝向,这要求我们对应不同材质制作不同的shader并整合,这里给出我的解决方案:

通过制作材质Mask,区分三种材质并通过MakeMaterialAttributes整合到一个材质中,可以看到右下角效果,能够提供大量的材质细节。

至此,我们完成了仿原神渲染的复刻,结合上文的知识点,让我们试着读一下《蓝色协议》的游戏技术分享,运用上文的内容拓展更多的思路:

这里首先提到了描边:

原文的意思是主要是用后处理制作描边(什么嘛这我熟x)

这里分三层叠加描边细节:

第一层:自定义深度制作外描边

第二层:IDTexture制作内部各个部件外描边

第三层:场景法线制作各个部件内部细节描边

光照效果:(分析如图)

*关于光照范围:分享里并没有给出具体实现方式,如果只是单纯减少50%,那当日光转移到背后时,阴影仍然在正面,这是个错误的效果。关于这点每个游戏厂商都有自己的一套规范,在什么角度怎么样调整光照的相应范围,这里也就不展开分析。

头发高光:

首先需要看一个通用案例助于理解:(具体做法可以参考往期教程)

概括的讲就是通过调整UV可以让高光沿着头发移动。

在理解UV与网格体对应关系后让我们看看蓝色协议头发高光的制作思路:

概括的讲:

蓝色协议初始方案是以菲涅尔作为权重依据,对基础高光球形进行缩放,达到靠近模型外围高光拉伸的效果。但存在拉伸后锯齿,拉伸方向与UV配合难以统一的问题

蓝色协议给出的解决方案是,沿着每个高光的重心缩放,但如何找到重心,找到重心后沿着哪个方向缩放,这些问题没有给出解决方案,所以这里给出一点我的拙见:

高光遮罩还是按照正常UV排布,但不是用纯白色的遮罩,而是用上文提到的ShadowMap,由长条形为零收缩到基本型为1,通过菲涅尔作为缩放权重,能够得到很好地控制效果。

其他NPR效果:

风格化特效(透明度调低),分享内提到特效沿着顶点偏移,其实就是发射一个圆柱体承载特效贴图而不是平面,让特效有立体感。

风格化模型与材质,降低面数提高饱和度等。

后处理,右下角为环境光对视野影响放大十倍的效果。

草坪通过噪波丰富细节。

原文还有很多其他内容分享,在这篇人物卡通渲染概述就展开来说了。

这次的分享也到这啦,感谢观看~

参考资料:

虚幻引擎论坛:forums.unrealengine.com

罪恶装备技术分享:

4gamer.net/games/216/G0

知乎网易游学:zhuanlan.zhihu.com/p/45

知乎游戏葡萄米哈游技术分享整理:zhuanlan.zhihu.com/p/37

《蓝色协议》技术分享:famitsu.com/news/202009

文章《Line Drawing from 3d models》

文章《Effective Toon-Style Rendering Control Using Scalar Fields》

FMAwiki—Heee—卡通渲染流程:fma.wiki/d/130fma.wiki/d/145

PPT与录播原件:

链接:pan.baidu.com/s/1E--dyo

提取码:z876

发布于 2022-06-23 10:23