欢迎光临散文网 会员登陆 & 注册

Unity学习笔记 vol.92 走近卡通渲染--关于Trick的二三事 ShadingModel 眼睛

2021-12-02 16:05 作者:NXL2  | 我要投稿

纯笔记,OCR加手动校正。 

原地址:https://learn.u3d.cn/tutorial/cel-shading-trick?tab=materials#617bc25fb945680020f292ea

来说眼睛,卡通的眼睛表达是比较随心所欲的,不过大体上依旧遵循真实的眼睛特征,比如说它也同样有着折射和焦散的体现。

先从眼睛的结构说起,眼睛制作的重点区域就是图中的,瞳孔和虹膜部分,还有主体为巩膜的眼白区域,瞳孔和虹膜区有,深度的一个主要原因就是存在前房这个空腔,这个空腔中充满了房水,可以当做一个透镜,右边这个图可以看出这种表现,这也是经常会在制作中去还原的特征。根据这些特征,眼睛上就区分了不同结构的制作方式,主要有复合结构的和单层结构的方式。

先来说复合结构,复合结构中眼睛的主体是凹陷进去的,这个是卡通眼睛中最常见的制作方式,这种方式可以自然的将眼睛的结构关系表达清楚,另外根据表现的不同呢,高光层会使用点状的高光模型,就像左边这样或者是片状的高光模型,片状高光的复合结构实际上是,和写实眼睛的制作比较类似的。然后是单层眼睛,对于单层眼睛来说,模型上就是通常是凸出来的,这种方式配合视差也可以很好的表现,眼睛的结构,在眼睛的表面还可以制作,动态的高光反馈。

然后对于单层眼睛的折射计算来说,主要有视差和物理折射这两种方式,这两种方式都是对 uv 偏移,然后进行采样,视差是一种经验模型,主要根据相机的位置去偏移 uv,而基于物理的折射呢,则是计算了折射光线的向量,使用折射光线偏移 uv,这里就不深入讲解了。

我们直接来看一下,这两种方式的效果对比,左边呢是直接上贴图,中间是基于物理的,右边是视差的,对于卡通渲染眼睛来说,两种方式从效果上来说差别并不大,物理折射在瞳孔偏移上要更符合直觉一点,不过是比较难以察觉出来的。

然后最后一点,动画中眉眼去存在的一个典型特征,就是无论头发是不是透明的,眉眼被头发遮盖的时候都会,显露出来,还原的方式有很多,最直接的就是使用半透明的头发还原,对于非透明色的头发来说,可以考虑深度测试、模板测试,或者直接拿一张 RT去额外的画出来,不过值得注意的是,这里是需要考虑眉眼还有,面部和头发的排序有问题的。

ok,那么有了折射计算,然后加入明显的遮挡显示,这个时候再结合其他的表现,比如说高光了, 焦散和MatCap反射之类的丰富层次,我们就可以得到这样的结果了。

最后一个就是皮肤,卡通的皮肤渲染主要和前面,说的光照计算有关,另外前面我们说过明暗交接线的计算,实际上也是皮肤上的特征之一,所以这里就主要说一下3 s ,对于皮肤来说,次表面散射,和高光会显著的提高皮肤的质感,对于次表面散射来说,这是在生活中很常见的效果,比如说你迎着阳光去看手掌,会看到很强烈的透光效果,这就是次表面散射的体现之一,而对于卡通渲染中,也会去做相关的处理,根据风格可以主要分为两种,首先是偏写实角色上使用的次表面散射,比如说《鹿鸣》、《暖暖》这类偏向真实感的渲染,另一类就是对于《蓝色协议》、《罪恶装备》,这种塞露露卡通风格,会去做整体阴影颜色的改变。

先来说整体阴影颜色的改变,动画中阴影偏色来源一般是皮肤的3 s 效果,和环境光照结合的夸张表现,在《罪恶装备》中,是使用了一张纹理去影响阴影的着色倾向,就是右边这张图,这种对整体阴影颜色的处理会提升卡通化的观感,并且也不仅限于皮肤上,衣服头发之类的也会有所体现。另外如果是使用ramp来计算光照,就可以直接把影色添加到ramp图中.

对于次表面散热来说,这个其实是真实感皮肤渲染的范畴,真正的次表面散热,计算消耗是比较大的,虽然有基于屏幕的5 s,和可分离的4 s 的快速计算,不过基于预积分查找的皮肤3 s的计算还是最经常使用到的方式,这种方式和ramp图的计算是分类色,x 轴就是 n Dot l 用来控制光照,可以看作是单条的ramp,而外轴呢是由模型表面曲率决定的,曲率越大那个3 s 效果就越强。

然后来说一下高光,在真实感皮肤渲染中,高光是一个不可或缺的表现点,双镜叶高光就是将不同粗糙度下GGS高光混合,然后用于模拟真实皮肤表面的高光反射效果的。

将刚刚说的这两个,表现结合起来就是非常类似于18年崩三分享中的做法,就是Diffuse ramp是对应了预积分LUT 的3 s,然后Specular ramp是对应双镜叶高光。

ok 这样,我们的Shading model 的内容就讲完了,下面再简单的说一下形变和Tone Mapping,比较有意思就是,根据镜头对角色面部进行的修正,这一点是因为动画表现中,角色的正脸和侧脸,通常会有一定的形变和夸张,单纯的模型制作,并不能完全还原每个角度表现,所以根据视角去混合对应的型面,用 bs 或者骨骼,来混合他的形变去表现正常的镜头效果是最终的解决方案。

最后来提一下后处理中的 Tonemapping,这是HDR数据映射到 LDR的过程,因为 LDR显示设备只能显示0-1区间的色彩值,所以为了将计算中大于1的,色彩值完整显示出来,这就需要一条,在正无穷上收敛在1的曲线来映射。图中的绿色曲线就是 ACES的映色曲线,ACES映射曲线的极限是1.03,就是相当于把0到正无穷的数据,映射到了0-1.03上,但是这就将原有的0-1的色彩,值映射到了0-0.8的区间上,这对卡通渲染的表现来说是比较致命的,特别是在肤色上。

右图中就是将肤色经过ACES曲线处理的结果,这种色彩变化是卡通渲染不能接受的,所以一般会去修改ACES曲线的多项数值,去降低Tonemapping映射的影响,蓝色的曲线就是一种修正后的结果,然后可以看到,将压缩1到正无穷高亮度值的显示期间,可以稍微缓解一部分彩色表现,所以在项目中,后处理的彩色表现就要在制作的早期,就要预先开始进行评估,然后这里就是ACES映射曲线,修改前后的区别,魔改的映射曲线,可以纠正一部分皮肤发灰的问题,就是上面这张图和下面这张图对比,然后其他的修改方式也有,比如反函数的Tonemapping计算,或者是对皮肤做亮度补偿,或者直接不管使用伽马流程,那画出来什么就是什么,ok 全部内容就是以上这些了。

Unity学习笔记 vol.92 走近卡通渲染--关于Trick的二三事 ShadingModel 眼睛的评论 (共 条)

分享到微博请遵守国家法律