UE角色表现
目标
- 应用于影视行业,尽量不修改引擎
- 对性能相对不敏感,但需要满足实时运行,提高迭代效率
- 品质要求高,细节精细度要求高
- 部分情况下需要一定程度的自由度
- 渲染-美型,仍基于PBR
- 物理-模拟确定性,可控性
模块
- 毛发
- 皮肤
- 眼部
- 服饰
毛发
特点
- 毛发的高光特殊(“天使环”)-各向异性,多层高光
- 毛发透光率高(尤其是浅色毛发),光线会在毛发多重散射,有一定的“透明感”
- 毛发纤细且数量多,有锯齿,排序等问题需要关注
方案
-
建模(两个类型:简化、风格化,精细化)
-
Card
-
Groom
-
渲染:hair shading model
-
模拟:cache,布料,rigid body
材质简介
Scatter
- 模拟光线穿过毛发进行散射
- 数值越大,头发颜色越浅越亮
- 浅色头发注意调整scatter来实现
Tangent
- 各向异性反射,决定高光走向
- 可以加入flow map,细微调整沿头发的高光
Backlit
-
数值锁定,可以忽略
-
主要影响间接光的背光照明
-
直接光的背光衰减依赖阴影
早期版本中头发背光爆掉,调整灯光阴影分辨率
毛发-建模(风格化)
-
不用局限头发使用“Hair Shading Model”,以效果为主
E.g.Default Lit下,利用各向异性/菲涅尔/金属度/AO等打造头发质感
-
建模上建议头发和头部模型的边缘处匹配,得到更整洁的外观,避免可能出现的拉伸,裁剪问题
-
毛发末端或者发丝相连的地方,因为锐角的原因,烘焙法线可能会有一些错误信息,可以增加末端细微的边缘来规避这个问题
-
注意毛发背面问题的处理,也有应该有横向的分段,保证运动时候的表现
毛发-建模(精细化)
- 优点
- 效果精细,尤其是发丝的阴影表现
- 限制
- 制作成本高,难度大
- 模型面数难以掌控,容易性能压力过大
- 物理难控制
-
毛发UV基于头发位置
-
使用噪声细微调整头发颜色,增加层次和细节
- 按根变换
- 按长度变化
-
沿着毛发使用噪声调整切线,调整高光分布和形态
-
毛发可以通过WPO,细微调整发根,发尖的宽度,以及毛发的形态
-
面部绒毛
非常纤细,透明感,柔和感
Hair Shading Model的高光不适用于绒毛,使用半透明自发光来表现
处理手段类似头发,控制根部尖端宽度和亮度,采样表面法线来表现非常微妙的菲涅尔边缘
插片毛发
- 主要应用在UE4中
- 性能好
- 头发材质可参考Paragon
- 限制
- 采用dither mask的方式,噪点-原理上的不足
- 精细度不足
- 往往需要手动摆放才能达到好的效果
插片毛发-噪点
- 主要以资源,规避为主
- Alpha纹理要干净,需要有Mipmap,纹理上避免出现错误噪点,断发等
- 发片大小合理,不要太大
- 毛发的背景尽量避免复杂,比如同样用dither mask制作的半透墙等
- Runtime下保证一定帧率
- UE5中,噪点问题格外严重
- 当5.0版本中Lumen GI会让毛发有大量噪点,需要在毛发shader中hack,稳定下lumen的贡献
插片毛发-改善效果常用手段
- 头部和面部交界处:PDO(像素深度偏移)淡化交界线
- 头发侧对摄像机时将其淡化:Edge Mask叠加到Opacity Mask
- 毛发层次感:ID纹理,Root纹理添加毛发细节,深度纹理添加AO表现层次感和厚度
- 多个UV集控制头发属性
Groom
优势
- 效果精细
- 与传统制作流程相似
- 材质简单,不需要大量的手段来改善效果
- 可以比较方便的导入Cache
限制
- 引擎内可控度低(渲染,物理模拟),部分发型目前无法模拟(麻花辫)
- 性能压力大
- 需要引擎比较新的版本才能更好支持
Groom资产建议
- 毛发设计上遵循现实,尤其是毛发根部的分布
- CV≤80,约五万根,直径/宽度0.01厘米
- 发际线处,鬓角处和散落的纤细发丝单独分组,以便控制参数(比如进一步调低宽度,降低至0.006厘米)
- 毛发资产的通用渲染优化思路:首先控制CV点,也就是控制最终毛发的整体顶点数量。下一步就是优化密度和宽度,首先将密度减半,将宽度调整为两倍,并依次为起点,依据效果细节调整。
- 总采样数量决定了效率:分辨率,Groom屏占比,采样参数
Groom-材质
- 材质设为Hair Shading Model,本身即可达到比较好的效果
- 材质中Hair Attributes节点可以访问到头发的属性,用于进一步定制毛发
- UV
- Seed
- Root UV(动物皮毛)
- Length
Groom-“漏头皮”问题
- 合理的毛发宽度,通过Hair Root/Tip Scale,加强根部宽度的同时表现发丝的纤细感
- 结合皮肤的毛囊纹理/遮蔽纹理等改善“漏头皮,头皮漏光”
- 确保毛发投影
Groom-毛发一致性
做表情时可能导致毛发发散,开启RBF约束后,即使皮肤发生形变,也会尽可能保留原状。
Groom-毛发抗锯齿
-
整体:r.HairStrands.Visibility.MSAA.SamplePerPixel8(默认为4)
-
其它的方案可以尝试对比效果(非常耗性能,并且可能不稳定)
r.HairStrands.Visibility.PPLL 1(效果最好,但耗性能)
-
毛发属性:Stable Rasterization 勾选后孤立的毛发更清晰,但比较厚的地方会比较粗糙。因此把毛发厚的地方和孤立的地方进行分组,只把孤立的毛发进行勾选
Groom-阴影
-
不要关闭Voxelization,否则毛发没有透射效果和天光遮蔽
-
主投影光源开启Deep Shadow
避免每一盏等都开启,性能压力大,可以逐镜头调整是否开启
-
对效果比较重要的参数
r.HairStrands.DeepShadow.Resolution
r.HairStrands.DeepShadow.KernelType 3或者4
4让很细的单独发丝不投影。如果希望每一根毛发都有清晰的投影可以设为3
Groom-Cache
- 4.27(以下UE5中不需要设置)
- 必须从第0帧开始
- 导入时默认是按24帧率导入,可以用GroomCache.ImportFrameRate改变
- 对于类似辫子的发型,使用Strand Cache
- 发型的一些动态变化,比如长发变短发,使用cache来表现(材质内WPO,mask等目前不可控)
皮肤
皮肤-建模
- 布线-一般而言参考解剖学
- 嘴角,眼角处放射状
- 鼻翼处环状
- 网格边缘与烘烤的法线对齐
- 可以参考Metahuman的布线
皮肤-材质
-
材质选择Subsurface Profile Shading Model
-
参考Digital Human中的皮肤材质(简洁全面)
-
主要纹理
- Albedo
- Normal-普通法线+细节法线
- Roughness
- Specular
- AO+BentNormal
-
Subsurface Profile参数
- Burley,新的皮肤渲染方式
- Boundary Color Bleed,边界溢色,用于皮肤与牙齿,眼睛的边界处混合一些,改善漏光
- Transmission,模拟背光散射,结合材质中Opacity进行计算
- Dual Specular,双镜叶高光,相当于两层高光(柔和+锐利),组合后皮肤的高光看起来更自然
-
更建议使用Burley(4.27),UE5只有Burley
- 参数调整更直观
- 整体效果更柔和,皮肤细节越多越适合Burley
- 可以依据shot来决定皮肤的一些属性,尤其是Transmission
-
细节法线体现皮肤质感
- 细节纹理的选择(texture XYZ或者Metahuman内的)
- 可以毛孔放在主法线纹理中(结合Cavity map等),细节法线用于体现肌理
皮肤-高光遮蔽
- 头皮处基本完全遮蔽高光
- 写实角色:毛孔,皮肤褶皱处,压低高光
- Cavity map可以有Displacment map生成
皮肤-环境光遮蔽
- AO
- Bent Normal
- UE5中如果需要和Lumen结合,需要关闭项目设置中allow static lighting选项
皮肤-表情
- 通常由骨骼,blendshape,表情动画纹理共同构成
- 表情动画纹理:基础颜色,法线,粗糙度(可由高分辨率法线纹理生成),遮罩纹理
皮肤-美型
- 减少的细节,如皱纹,斑点,毛孔,但建议保留肌肤纹理
- 合理的皮肤参数,尤其是次表面的效果,否则皮肤容易蜡感严重
- 好的皮肤效果一定是反复调整得到的
- 打光非常重要
眼部
眼睛
- 建议直接使用示例项目中现有的眼球模型和材质**(Digital Human,Metahuman)**
- 建模上,眼睑有足够的厚度,眼球应当紧贴面部
- 单独的泪腺模型
- 单独的眼睛遮蔽模型(模拟眼部阴影)
睫毛
- 插片睫毛,需要与眼睑拓扑结构匹配,否则闭眼时效果可能不对-规则适用于所有的重叠几何体
服饰
建模
- 关节处(包括腋下,大腿根部等)拓扑结构需要格外注意,因为运动时会有大幅度形变,容易造成纹理失真
服饰-材质
- 纺织物绒感
- 采用cloth shading model,更简单
- 材质内自定义,如采用材质节点fuzzy
- 丝绸(反射率高,各向异性)
- UE4考虑采用hair shading model
- UE5中,可以利用金属度,各向异性,切线模拟丝绸光泽
布料-半透排序
-
UE4中使用Ray Tracing
-
Path Tracing渲染
-
尝试制作模型的时三角面定义按照由内到外的顺序,并且fbx导入引擎时r.TriangleOrderOptimization 0,避免被自动优化,导入到引擎内可以按照DCC中顺序进行渲染
-
UE5中,尝试
r.OIT.SortedTriangles 单mesh多层半透排序
r.OIT.SortedPixels(5.1支持)全屏,跨mesh的多层半透排序,消耗高
文档推荐
综合:
毛发: