98 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| 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
 | ||
| 
 | ||
| 
 | ||
| ### 增加质感
 | ||
| 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
 | ||
| 
 | ||
| 
 | ||
| #### 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等因素。所以 
 | ||
| 1. 将ShaderModel的Lambert -> HalfLambert。
 | ||
| 2. 
 | ||
| 
 | ||
| 美术可能需要调整的相关Ramp:
 | ||
| - SSS效果
 | ||
| - 主光Ramp
 | ||
| - 天光与环境光
 | ||
| - AO (只能修改默认参数)
 |