4.5 KiB
title, date, excerpt, tags, rating
title | date | excerpt | tags | rating |
---|---|---|---|---|
YusufUmar厚涂手法总结 | 2022-08-24 14:29:06 | 卡通渲染 | ⭐⭐ |
前言
总结主要以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
增加质感
- ~yP Layer Noise为法线增加Noise效果,体现为皮肤哑光效果。
- yP Layer Fake Lighting效果,模拟出皮肤的SSS以及环境光照效果,增强厚涂皮肤的质感。
- yP Layer Red Skin (肩部区域与手指)效果,模拟皮肤的SSS效果,增强厚涂皮肤的质感。
- yP Layer Skin AO (皮肤上的AO效果),模拟皮肤上的AO,
Noise
FakeLighting
RedSkin
SkinAO
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中判断?
因为这种补光的点光只会在特定镜头出现,出了过场动画肯定要去掉。脑洞:搞成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等因素。所以
- 将ShaderModel的Lambert -> HalfLambert。
美术可能需要调整的相关Ramp:
- SSS效果
- 主光Ramp
- 天光与环境光
- AO (只能修改默认参数)