--- title: YusufUmar厚涂手法总结 date: 2022-08-24 14:29:06 excerpt: tags: 卡通渲染 rating: ⭐⭐ --- ## 前言 总结主要以YusufUmar的kama的皮肤材质为主。其他作品作为补充。 ## 皮肤 材质模型使用Blender默认的Principed BSDF节点(可以理解为多个BSDF进行混合): - 标准的迪士尼模型,基底材质参数为:皮肤颜色float3(0.846873,0.602632,0.512498)、Roughness 0.3、Metallic 0 。Subsurface:0.01 - SSS材质的模型为RandomWalk(Fixed Radius),以0.01~0.005的比例进行混合。 下图为最终结果->使用默认参数的Principed BSDF Node ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/YusufUmar/kama/kama_FinalyToDefault.gif) ### 增加质感 1. ~yP Layer Noise为法线增加Noise效果,体现为**皮肤哑光效果**。 2. yP Layer Fake Lighting效果,模拟出皮肤的SSS以及环境光照效果,增强厚涂皮肤的质感。 3. yP Layer Red Skin (肩部区域与手指)效果,模拟皮肤的SSS效果,增强厚涂皮肤的质感。 4. yP Layer Skin AO (皮肤上的AO效果),模拟皮肤上的AO, #### Noise ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/YusufUmar/kama/kama_noise.png) #### FakeLighting ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/YusufUmar/kama/yP_Layer_Fake_Lighting.gif) #### RedSkin ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/YusufUmar/kama/yP_Layer_Red_Skin.gif) #### SkinAO ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/YusufUmar/kama/yP_Layer_Skin_AO.gif) #### Outline 使用一个稍微扩大的模型渲染描边效果。 ## 头发与衣服 头发与衣服也使用了多种Ramp效果叠加。 ## 后处理效果 ## 思路转化 YusufUmar的思路还是偏向于3D辅助绘制,也就是将一个Shader效果(以GroupNode为单位)作为一个图层,之后层层叠加出效果。效果主要分为: - 原始光照,Blender中灯光、环境光效果。 - FakeLighting:通过制定dot(摄像机空间向量,WorldNormal)的方式获取到一个Alpha,之后通过映射成一个ColorRamp再叠加上去。(虽然效果看起来可以,但这么做其实是错误的,但移动端可以使用)。 - RedSkin:使用绘制贴图(顶点绘制)的方式制定若干区域与Alpha之后通过映射成一个ColorRamp再叠加上去。 - SkinAO:通过制定dot(摄像机空间向量,WorldNormal)的方式获取到一个Alpha,之后通过映射成一个ColorRamp再叠加上去。 主要的思路就是使用各种数据算出的Alpha来映射ColorRamp,并叠加到角色上。这需要原画美术的支持,来实现在物理正确的基础上**加料**。 ### 光照 主光可以UE的ShaderModel中根据全局变量中的DirectionLightVector来判断,进而进行调整(设置主光Ramp)。 但有一个问题,**主光的效果如何和其他点光效果平衡?** YusufUmar的作品中也会使用FakeLighting(Shader计算+Mask)来实现局部照亮这种额外打光效果。**是否可以通过LightingChannel,在ShaderModel中判断?** ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/YusufUmar/saber/Saber_~yP_Layer_Fake_Lighting.002.gif) 因为这种补光的点光只会在特定镜头出现,出了过场动画肯定要去掉。**脑洞:搞成Pose驱动的灯光效果?** ### FakeSSS效果 #### FakeLighting(环境光SSS效果) YusufUmar的方法不精确!比如耳朵以及锁骨区域这些应该比较透的的确却不一点都不透。 个人认为最好的方法是: - 使用UE的SSS渲染功能的点采样,求出透明度,作为映射参数之一。 - 使用一个可调整的曲线Asset作为皮肤的LUT来实现SSS效果。 - 或许SSS部分也需要类似**Lambert -> HalfLambert** 的调整? #### RedSkin 在UE使用Layered Material方式,将不同颜色的SSS材质混合到一起。 - 让美术绘制混合用的贴图。 - 使用Layered Material进行混合。 这个绘制类型的Ramp效果多次出现,能很好的提供那种厚涂的效果。 ### AO 使用贴图+SSAO。 **最好能做到使用AO来偏移SSS效果,而不是进行直接的阴影叠加。** ### 质感增加 **皮肤哑光效果**使用Noise贴图并且使用ddx/ddy实现。 ## 其他改进 因为作者能力与Blender的限制,所以没有考虑天光、GI、HalfLambert等因素。所以 1. 将ShaderModel的Lambert -> HalfLambert。 2. 美术可能需要调整的相关Ramp: - SSS效果 - 主光Ramp - 天光与环境光 - AO (只能修改默认参数)