UE4赛璐珞风格
19 Aug 2015 UE4 Materia
UE4默认的渲染风格是写实的,以照片级为目标。而如果要做赛璐珞风格的话,就需要稍微做一些改动。
当前UE4版本4.10.0。
3D的赛璐珞风格实现是有一些现成的经验的,最近有些番组也是用的3D做的。不过作为对图形学方面的知识是外行的人而言,要自己实现还是有很多困难的。好在,已经有人将赛璐珞风格在UE4中实现了。原文的话在[这里],还有对应的PPT,里面有对相应的原理的说明。PPT的下载地址在原文中有提供,点击[这里]可以直达。
最终效果
对参数进行少许的调整之后,最终的效果是这样的:
在没有做精细调整的情况下,这样的效果基本上算是让人满意了。使用上也非常的方便,如果有在项目中使用的话,一定要记得在原文中感谢作者哦~下面对在使用过程中可能会使用到的一些东西进行总结,其中几乎所有内容都是直接翻译的,如有错误欢迎指正。
使用步骤
- 由PP_NPR生成新的材质实例(也可以使用生成的PPI_NPR),将PostProcessVolume的Blendables中添加刚刚生成的材质实例即可
- 控制渲染效果的参数位于NPR_ParamCollection中
- 控制皮肤的亮度(在SkeletalMesh编辑器中将头发等的投影关闭)
- 从M_CharacterBase创建材质实例并应用于角色
- 将DirectionalLight替换为BP_DirectionalLightForCharacter(与上面的材质合同工作)
参数相关
名称 | 默认值 | 说明 |
---|---|---|
DebugWipe | 0 | 屏幕分割,对效果进行调试对比用 |
LightIntensityBias | 0.3 | 场景较为暗时可以对暗的部分进行 |
LightIntensityStepping | 2 | Cel涂色步进,小于1会出现不可预知的表现 |
FresnelFunc_ContrastDark | 0.1 | 用于侧面判定的Fresel的暗面控制参数 |
FresnelFunc_ContrastBright | 1.5 | 用于侧面判定的Fresel的亮面控制参数 |
EdgeLineThickness | 1.5 | 轮廓线的粗细 |
CreaseLineThickness | 1.5 | 棱线的粗细(有时设定为负值,在法线方向上取样时会有好的效果) |
FlankLine | 0.2 | 侧面线颜色叠加系数(0为全黑,0.5为原本的颜色的0.5) |
EdgeLine | 0.2 | 轮廓线颜色叠加系数(0为全黑,0.5为原本的颜色的0.5) |
CreaseLine | 0.2 | 棱线颜色叠加系数(0为全黑,0.5为原本的颜色的0.5) |
LineColor | (0.8, 0.084908, 0.045, 0) | 以上三种线的颜色,Alpha值代表叠加颜色的程度,可以超限以达到发光效果 |
CharacterLightVector | (0, 0, -1, 0) | 角色表情等会用到的光照向量(建议直接复制DirectionalLight的向量) |
CharacterLightColor | (1, 1, 1, 0) | (当前未使用:角色用光照颜色) |
M_CharacterBase相关
一般情况下只要利用Postprocess Materia就可以达到效果了,当角色由于阴影的影响过强导致着色浑浊现象出现时,建议使用M_CharaterBase作为对象材质的基础生成材质实例,并在该材质实例中进行属性的调整。
如果材质的贴图中本来就有阴影等信息的话,可以在材质实例宏将DiffuseBase调整为0.01使得BaseColor接近于0,将DiffuseEmissive设定为1.0以将阴影效果降到最低。
对于追求与现实系相近的中间型的着色效果的情况,可以将材质实例中的Shading Mode更改为Subsurface,这样以来就可以通过对SubsurfaceColor的调整来对颜色效果进行微调。
在有发光部件的情况下,勾选UseEmissiveTexture,并将发光部件的贴图彷如EmissiveTexture中,同时设定EmmissiveScale为很大的值就可以达到发光的效果了。
FAQ
Q. 想要关闭掉角色的反光效果
A. 在PostProcess的内部,可以某种程度的削弱反光效果,但是想要完全取消掉的话很困难,因为会增加额外的运算负担。对原有的材质的Roughness进行上调以及下调Metalic的值可以达到类似与消除反光的效果。这样的话就可以对模型的效果进行个别控制,一些闪闪发光的材质也能保留原来的效果。
Q. 将漫反射的贴图变得平滑不是更能实现动画风格吗?
A. 虽然对相近的像素进行采样并平均的话能够达到平滑的效果,但是以贴图为采样目标的话运算负担就会过重,推荐直接对原有的材质进行修改。这样也可以实现对不同材质的控制和调整。
Q. 角色激烈运动时会导致线条杂乱
A. 这是Temporal AA的影响导致的。在PostProcessVolume-Settings-Misc中有AA Method的属性,将其设定为FXAA可以有效的防止这种情况(静画的情况下Temporal AA的画面质量更好一些)。另外,如果是面向在线游戏的画质的话,通过将Screen Percentage设定为200与Temporar AA进行组合,或者将AA关闭(设定为FXAA亦可)以2×2倍的分辨率渲染等方法将渲染目标缩小的方法也是可以的。