2023-06-29 11:55:02 +08:00

98 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 。Subsurface0.01
- SSS材质的模型为RandomWalkFixed 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的作品中也会使用FakeLightingShader计算+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 (只能修改默认参数)