这通常指向以下几个 运行时(Runtime) 特有的原因:
-
抗锯齿 (Anti-Aliasing) 方法,特别是 Temporal Anti-Aliasing (TAA):
-
这是最可能的原因。 UE5 默认启用的 TAA 通过混合多帧信息来平滑边缘和减少闪烁,尤其是在运动中。但它的副作用是可能导致 精细的几何体(如睫毛的面片)、透明/半透明材质(如睫毛和眼睛的角膜反射)或高频纹理细节变得模糊或产生“鬼影”(Ghosting),尤其是在摄像机或物体有轻微移动(即使是待机动画)时。
-
编辑器静态视图通常不会完全展现 TAA 的累积效果,或者有时编辑器视图的 AA 设置与 Play 模式不同。当你进入 Play 模式,TAA 开始全力工作,其副作用就显现出来了。
-
-
Mipmap 问题被 TAA 放大:
-
正如之前讨论的,睫毛 Alpha 贴图的 Mipmap 设置可能导致模糊。在静态视图下,你可能恰好看到的是 Mipmap 级别 0(最高分辨率),或者 TAA 的影响不明显。但在 Play 模式下,稍微的距离变化或 TAA 的帧累积效应可能导致不合适的 Mipmap 级别被采样,并且 TAA 会进一步加剧这种模糊感。
-
-
动态分辨率 (Dynamic Resolution) 或屏幕百分比 (Screen Percentage) < 100%:
-
如果在 Play 模式下为了维持帧率启用了动态分辨率,或者在 Post Process Volume 或项目设置中将屏幕百分比设置低于 100%,整个画面(包括眼睛和睫毛)都会被渲染在较低的分辨率然后放大回目标分辨率,这自然会导致细节模糊。编辑器视图通常运行在 100% 屏幕百分比。
-
-
运动模糊 (Motion Blur):
-
如果在 Play 模式下启用了运动模糊,并且角色或摄像机有任何移动(即使是细微的头部或眼睛的待机动画),都可能导致眼睛和睫毛区域出现模糊。编辑器静态视图自然没有运动模糊。
-
-
LOD (Level of Detail) 切换:
-
虽然之前提过,但运行时特性让它更值得怀疑。在 Play 模式下,根据摄像机距离或其他规则,模型可能会自动切换到较低的 LOD 级别,而该 LOD 级别的眼睛/睫毛材质或模型可能被简化了。编辑器视图通常默认显示 LOD0。
-
-
测试抗锯齿:
-
在 Play 模式下,打开控制台 (通常按 ~ 键)。
-
输入命令 r.TemporalAACurrentFrameWeight 1,按 Enter。这会强制 TAA 更偏重当前帧,减少模糊,但可能增加闪烁。看是否有改善。
-
输入命令 r.TemporalAASamples 1 或 2 试试,减少采样数也可能减少模糊。
-
尝试完全切换 AA 方法:输入 sg.AntiAliasingQuality 0 (无 AA), sg.AntiAliasingQuality 1 (FXAA 低), sg.AntiAliasingQuality 2 (FXAA 高)。看看在 FXAA 或无 AA 的情况下,模糊是否消失。如果消失,基本可以确定是 TAA 的问题。
-
临时解决方案: 如果确定是 TAA 问题,可以在项目设置 (Project Settings -> Engine -> Rendering -> Default Settings -> Anti-Aliasing Method) 中将默认 AA 方法改为 FXAA。但 FXAA 的抗锯齿质量通常不如 TAA。
-
长期解决方案: 需要调整睫毛/眼睛的材质,使其对 TAA 更友好(例如,使用 Masked 模式代替 Translucent,调整 Alpha 阈值,或者在材质中使用特殊节点减少 TAA 鬼影)。对于眼睛,确保使用了 UE 的 Eye Shading Model 或类似的专门技术。
-
-
再次检查 Mipmaps: 即使静态看起来还行,运行时的问题也强烈建议你去检查睫毛 Alpha 贴图的 Mip Gen Settings,尝试设置为 NoMipmaps。
-
检查屏幕百分比/动态分辨率:
-
检查场景中的 Post Process Volume 设置,以及项目设置 (Project Settings -> Engine -> Rendering) 中的相关选项,确保 Screen Percentage 是 100%,并暂时禁用 Dynamic Resolution。
-
-
禁用运动模糊:
-
在 Post Process Volume 或项目设置中暂时禁用 Motion Blur,看是否有改善。
-
-
强制 LOD0:
-
在 Play 模式下,使用控制台命令 r.ForceLOD 0 强制使用最高细节级别,看问题是否消失。
-
-
全局关掉 Motion Blur
- 在关卡里的 Post Process Volume 里把 Motion Blur Amount/Shutter Speed 调到 0,或者直接把 “Enable Motion Blur” 关掉。
- 也可以在项目设置里(Project Settings → Engine → Rendering)将默认 Motion Blur Quality 设为 0,或者运行时用 console command: code
r.MotionBlurQuality 0
-
换用/关掉 TAA
- UE5 默认用 Temporal AA,细小物体运动时抗锯齿算法会拉毛边。
- 如果对整体画面可接受,可以在 Project Settings → Rendering → Default Anti‑Aliasing Method 改成 FXAA(或 None),或者开启 Forward Shading + MSAA。
- 临时控制台开关: code
r.TemporalAA.Upsampling 0 r.TemporalAA.Sharpen 0
-
只针对睫毛单独剔除 Motion Blur
- 如果你把睫毛单独拆成一个 StaticMeshComponent 或 SkeletalMeshComponent,可以在 C++/蓝图 里给那条 Component 关闭蒙版运动模糊。引擎源码里对应的是
bDisableMeshMotionBlur
之类的标志(UE5.3+ 有此属性),或者你自己扩展一个简易插件封装一个“禁止 Motion Blur”材质 Domain。 - 另一种思路是把睫毛单独打入 Custom Depth/Stencil Buffer,再在后处理里写个材质 Pass 只把它用正常不糊的方式重绘一遍。
- 如果你把睫毛单独拆成一个 StaticMeshComponent 或 SkeletalMeshComponent,可以在 C++/蓝图 里给那条 Component 关闭蒙版运动模糊。引擎源码里对应的是
-
用 Hair Strands 真丝发系统 或 改材质 Blend Mode
- 如果把睫毛卡片升级到 Hair Strands (Groom)系统,后面引擎会用专门的髪丝流水线来渲染,运动刷头发而不会把“卡片”当普通几何片给糊了。
- 或者把睫毛材质从 Translucent 改到 Masked(Alpha Clip),让它走传统的硬剪裁抗锯齿,也能避免 TAA 的毛刺拉伸。