168 lines
10 KiB
Markdown
168 lines
10 KiB
Markdown
|
---
|
|||
|
title: 厚涂风格渲染文档
|
|||
|
date: 2022-09-13 15:25:32
|
|||
|
excerpt: 摘要
|
|||
|
tags:
|
|||
|
rating: ⭐
|
|||
|
---
|
|||
|
# 厚涂元素分析
|
|||
|
|
|||
|
# 原理说明
|
|||
|
## Material
|
|||
|
>与ToonStandard、ToonHair不同,Roughness与Metallic的作用恢复成UE默认的逻辑。
|
|||
|
这个材质可以理解为在一个Lambert材质上叠上了一层层的效果。
|
|||
|
|
|||
|
- BaseColor:基础颜色贴图
|
|||
|
- Metallic:控制反射强度。
|
|||
|
- Roughness:控制高光形状
|
|||
|
- Specular:控制高光强度。
|
|||
|
- Opacity:具体参考[[#Material#Opacity]]
|
|||
|
- ShadowSideColor(ToonSkin为SubsurfaceColor):次表面颜色贴图,用于控制身体各部位的次表面颜色。比如嘴唇、手指等部位因为毛细血管较多会显得比较红。美术需要根据需求进行绘制。
|
|||
|
- ToonDataA:
|
|||
|
- R:ShadowOffset,用于偏移赛璐璐的光影分界面位置。 ToonSkin未使用。
|
|||
|
- G:用于指定ToonDataID,与ToonWorldSettings中ToonData的Index对应。
|
|||
|
- B:为天光渲染结果与ShadowSideColor的混合因子。ToonSkin未使用。
|
|||
|
- A:未使用
|
|||
|
- ToonDataB:
|
|||
|
- RGB:OutlineColor
|
|||
|
- A:OutlineMask
|
|||
|
- ToonDataC:
|
|||
|
- RGB:描边用的IDTexture
|
|||
|
- A:OutlineWidth
|
|||
|
|
|||
|
ToonCustomOutput:
|
|||
|
这3个参数与间接照明有关(体积光照贴图)因为没有对应场景所以没办法进行测试。
|
|||
|
- InSubsurfaceColorForIndirect:修改次表面颜色对于DiffuseColorForIndirect的影响,默认为0,也就是不影响。
|
|||
|
- InDiffuseIndirectLightingMask:漫反射间接照明Mask
|
|||
|
- InSubsurfaceIndirectLightingMask:次表面间接照明Mask
|
|||
|
|
|||
|
### Opacity
|
|||
|
该贴图用于控制次表面的Transmission所使用的的预积分Ramp(值越大次表面颜色会越明显)。使用Marmoset Toolbag烘焙出曲率贴图Curvate、厚薄度贴图Thickness为基础进行辅助绘制最终得到Opacity贴图。
|
|||
|
|
|||
|
我们需要对贴图进行Clamp,去除较低的颜色(Thickness选择大腿处的颜色为最低颜色),之后将其重映射。
|
|||
|

|
|||
|
Curvate贴图我们只需要0.5~1部分的数据,所以在Clamp(0.5,1)之后再将其重映射。
|
|||
|

|
|||
|

|
|||
|
|
|||
|
## ToonWorldSettings说明
|
|||
|
为了解决延迟渲染不能传递大量参数的问题,本人设计这种通过ID查询对应全局贴图来获取数据的方法。对应的参数在ToonRenderingWorldSettings中设置并且绘制即可。
|
|||
|
|
|||
|
ToonData目前只有2个参数是有效果:
|
|||
|
- FalloffRampCurve:控制光影过渡曲线。
|
|||
|
- BloomMultiplier:控制指定部位的“辉光”效果的强度。
|
|||
|
|
|||
|
ToonSkinData:
|
|||
|
- FalloffRampCurve:控制灯光光照的光影过渡曲线。置空则使用默认的**Lambert**衰竭曲线进行计算。
|
|||
|
- TransmissionRampCurve:控制灯光光照的次表面效果的渐变曲线。置空则使用**1-Lambert** 衰竭曲线进行计算。
|
|||
|
- SkyLight
|
|||
|
- SubsurfaceColorAlphaForSkyLight:控制天光产生的SSS效果。
|
|||
|
- SubsurfaceColorOpacityMultiplier:控制Opacity对于天光SSS的影响强度。
|
|||
|
- IBL参考[[#ReflectionEnvironmentAndSky#IBL]]
|
|||
|
- IBLMultiplier:HDR贴图反射效果强度。
|
|||
|
- IBLMultiplierRangeByLuminanceMax:
|
|||
|
- IBLMultiplierRangeSmooth:HDR贴图反射过渡效果。
|
|||
|
- IBLMultiplierRangeAOMask:AO对于HDR贴图反射的影响倍率。
|
|||
|
- BloomMultiplier:控制指定部位的“辉光”效果的强度。
|
|||
|
|
|||
|
### 全局贴图说明
|
|||
|
这些贴图都存放在`Engine\Content\EngineMaterials\ToonTexture`中。为了保证效果需要确保这些贴图的CompressionSettings为`VectorDisplacementmap(RGBA8)`。其中ToonDataTexture与ToonSkinData贴图的Filter设置成`Nearest`。
|
|||
|
|
|||
|
- ToonStandard与ToonHair相关:
|
|||
|
- ToonRampTexture:ToonStandard与ToonHair的存储调整阴影分界面偏移与软硬度Ramp数据的贴图,通过ID来采样指定的行。
|
|||
|
- ToonDataTexture :ToonStandard与ToonHair的存储Toon数据贴图,通过ID来采样指定的行。
|
|||
|
- ToonSkin相关:
|
|||
|
- PreIntegratedToonSkinBRDFTexture :ToonSkin专用的PreIntegrated贴图。
|
|||
|
- ToonSkinFalloffMaskTexture :ToonSkin专用的存储调整阴影分界面偏移与软硬度Ramp数据的贴图,通过ID来采样指定的行。
|
|||
|
- ToonSkinTransmissionMaskTexture :ToonSkin用于调整Transmission Alpha的贴图,通过ID来采样指定的行。
|
|||
|
- ToonSkinDataTexture:ToonSkin的存储Toon数据贴图,通过ID来采样指定的行。
|
|||
|
|
|||
|
## 渲染功能
|
|||
|
### BasePass
|
|||
|
|
|||
|
### DiffuseIndirectAndAO
|
|||
|
- SSGI:建议单帧画面开启。
|
|||
|
开启SSGI:
|
|||
|
.png)
|
|||
|
关闭SSGI:
|
|||
|
.png)
|
|||
|
|
|||
|
### Lighting
|
|||
|
- ShadeModel ToonSkin
|
|||
|
- 预积分实现。
|
|||
|
|
|||
|
### ReflectionEnvironmentAndSky
|
|||
|
- 天光需要为Dynamic并且开启Shadow选项。
|
|||
|
- 是否开启距离场对会让天光产生AO效果.理论上开启距离场AO后的结果才是正确的,但效果并不理想,所以需要调整一下天光下半球的颜色,也可以作为添加细节的方法(最好还是通过HDR贴图)
|
|||
|
|
|||
|
半球0灰度:
|
|||
|
.png)
|
|||
|
半球20灰度:
|
|||
|
.png)
|
|||
|
|
|||
|
天光对于SSS效果影响,提升其SSS效果也可以使用ToonRenderingWorldSettings 的SubsurfaceColorAlphaForSkyLight与SubsurfaceColorOpacityMultiplier。
|
|||
|
关闭天光:
|
|||
|

|
|||
|
开启天光:
|
|||
|

|
|||
|
|
|||
|
#### IBL
|
|||
|
主要是为了实现类似sakimichan的部分画作有这种天光产生的效果:
|
|||
|

|
|||
|

|
|||
|

|
|||
|
这样的效果一般可以通过打光来实现,下图是拍摄于5~6月 早上7:20~7:40分。可以看到与上图类似的冷暖打光效果。
|
|||
|

|
|||
|
|
|||
|
经过若干尝试,最后使用像素亮度来判断暗部与亮度Mask。最后使用ToonRenderingWorldSettings 中的IBL相关属性来控制效果。
|
|||
|

|
|||
|
|
|||
|
这里用了一个0.01的Smooth以及5的Multiper:实际上不会那么明显。
|
|||
|

|
|||
|
|
|||
|
其他游戏比如破晓传说也使用IBL来进行辅助打光。
|
|||
|
|
|||
|
将包括辅助光在内的灯光烘烤成立方体地图(制作光照环境HDR贴图)
|
|||
|
- 旋转以配合光源的光轴
|
|||
|
- 将光面与光源的方向对齐
|
|||
|
- 有方向性的正确遮蔽
|
|||
|
- 亮度和对比度:艺术家调整的
|
|||
|
- 皮肤和眼睛:对比度低
|
|||
|
- 在UE4中,这可以很容易地在编辑器中改变。
|
|||
|

|
|||
|
|
|||
|

|
|||
|
|
|||
|
### 后处理
|
|||
|
相关的选项位于后处理盒子-RenderingFeatures-Toon中。
|
|||
|
|
|||
|
#### ToonBloom
|
|||
|
只有一个UseToonBloom用于开启/关闭ToonBloom效果。其余的参数与自带的Bloom通用。与自带的Bloom的区别在于可以通过ToonData来控制Bloom强度,以此来实现一些降低某一些区域亮度很高的区域(自发光)的Bloom效果,不会出现过曝情况。反之也可以使得一些不太量的地方拥有较大的Bloom效果。
|
|||
|
|
|||
|
因为使用PBR的方式来处理Bloom,很容易导致泛光部分发白。而我们需要的其实是一个带颜色的光晕。
|
|||
|

|
|||
|
|
|||
|
#### SNN
|
|||
|
油画效果。实现是的是一个近弱远强的油画效果。
|
|||
|
- SNNPower:用于开关SNN效果。
|
|||
|
- SNNSampleRadius:SNN的采样半径(远处)。采样半径越大油画效果越强。
|
|||
|
- SNNMinSampleRadius:SNN的近距离插值的最小采样半径。0即为近距离不采样。
|
|||
|
- SNNStartInterpolateDistance:SNN强度开始插值的距离
|
|||
|
- SNNEndInterpolateDistance:SNN强度结束插值的距离
|
|||
|
|
|||
|
## 用户使用说明
|
|||
|
### 前置步骤
|
|||
|
1. 在插件管理器确认UTToonRendering插件已经启用,并在ProjectSettings->Engine->GeneralSettings->DefaultClasses中,将WorldSettingsClass设置成`ToonRenderingWorldSettings`。
|
|||
|
2. 检查天光是否为Dynamic,以及是否开启Shadow,同时调节Lower Hemisphere Is Solid Color,让其稍微亮一些。如果使用距离场阴影,那角色需要有胶囊体,场景也需要构建较为准确的距离场
|
|||
|
|
|||
|
### 角色制作顺序
|
|||
|
1. 绘制贴图 (建议使用Kama的材质)
|
|||
|
1. 除了基础的BaseColor、Metallic、Roughness、Specular、AO贴图外,SubsurfaceColor与Opacity尤为重要。
|
|||
|
2. 根据需求来绘制ToonDataB的OutlineColor、IDMapForOutline与OutlineMask贴图。
|
|||
|
2. 在ToonRenderingWorldSettings中设置新的ToonSkinData,并且在材质中修改ToonDataID使其对应。
|
|||
|
1. FalloffRampCurve与TransmissionRampCurve比较重要。
|
|||
|
2. 调节SubsurfaceColorAlphaForSkyLight 与SubsurfaceColorOpacityMultiplier 。
|
|||
|
3. 适当调节后处理。
|
|||
|
|
|||
|
### 虚拟拍摄问题
|
|||
|
在Project - Engine - Rendering - PostProcessing 中将Enable Alpha Channel Support in PostProcessing 设置成`Allow Throught Tonemapper`。默认是`Disable`。
|