10 KiB
title, date, excerpt, tags, rating
title | date | excerpt | tags | rating |
---|---|---|---|---|
厚涂风格渲染文档 | 2022-09-13 15:25:32 | 摘要 | ⭐ |
厚涂元素分析
原理说明
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
Lighting
- ShadeModel ToonSkin
- 预积分实现。
ReflectionEnvironmentAndSky
- 天光需要为Dynamic并且开启Shadow选项。
- 是否开启距离场对会让天光产生AO效果.理论上开启距离场AO后的结果才是正确的,但效果并不理想,所以需要调整一下天光下半球的颜色,也可以作为添加细节的方法(最好还是通过HDR贴图)
天光对于SSS效果影响,提升其SSS效果也可以使用ToonRenderingWorldSettings 的SubsurfaceColorAlphaForSkyLight与SubsurfaceColorOpacityMultiplier。
关闭天光:
开启天光:
IBL
主要是为了实现类似sakimichan的部分画作有这种天光产生的效果:
这样的效果一般可以通过打光来实现,下图是拍摄于5
6月 早上7:207: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强度结束插值的距离
用户使用说明
前置步骤
- 在插件管理器确认UTToonRendering插件已经启用,并在ProjectSettings->Engine->GeneralSettings->DefaultClasses中,将WorldSettingsClass设置成
ToonRenderingWorldSettings
。 - 检查天光是否为Dynamic,以及是否开启Shadow,同时调节Lower Hemisphere Is Solid Color,让其稍微亮一些。如果使用距离场阴影,那角色需要有胶囊体,场景也需要构建较为准确的距离场
角色制作顺序
- 绘制贴图 (建议使用Kama的材质)
- 除了基础的BaseColor、Metallic、Roughness、Specular、AO贴图外,SubsurfaceColor与Opacity尤为重要。
- 根据需求来绘制ToonDataB的OutlineColor、IDMapForOutline与OutlineMask贴图。
- 在ToonRenderingWorldSettings中设置新的ToonSkinData,并且在材质中修改ToonDataID使其对应。
- FalloffRampCurve与TransmissionRampCurve比较重要。
- 调节SubsurfaceColorAlphaForSkyLight 与SubsurfaceColorOpacityMultiplier 。
- 适当调节后处理。
虚拟拍摄问题
在Project - Engine - Rendering - PostProcessing 中将Enable Alpha Channel Support in PostProcessing 设置成Allow Throught Tonemapper
。默认是Disable
。