How can I handle this Depth Of field foreground issue?

@Origenic you’re right and a better and proper explanation is needed.

Why would having a separate texture for the alpha make a difference? Is it because the texture uses different compression settings?

Using separate textures for the alpha channel can significantly impact performance and quality. In master materials, a key optimization is the reuse of shared textures across multiple material instances. This minimizes memory usage and increases rendering efficiency.

For example, let’s say you have a wall material shared across multiple walls in a scene. With a master material, you can adjust properties like roughness, color tint, or detail normals in the material instances to introduce subtle variations. This prevents the scene from looking repetitive without the need to load entirely new textures for each wall. In this case, the master material approach is highly efficient because it loads the textures only once, and all variations are applied via parameters.

However, when the material requires opacity and we are using same one, this efficiency breaks down. If the alpha channel is embedded within a texture (e.g., RGBA), the same texture must be sampled multiple times for different channels (diffuse, specular, metallic, opacity, etc.), leading to redundant fetches. Using a separate grayscale mask for opacity reduces texture fetches, optimizes GPU bandwidth, and typically results in better compression quality for the alpha-specific task. Dedicated masks are also more predictable for quality control, especially in tasks like anti-aliasing or edge blending.


One thing I found that improves it in the editor, is bumping up the screen percentage, though this shouldn’t make a difference to movie renders as it’s already bumped up.

Increasing the screen percentage can indeed improve visual quality in the editor, but it comes at the cost of performance. For Metahumans, for instance, it’s common to set the screen percentage to 150 for higher fidelity in renders. However, the tradeoff is a heavier load on the GPU, which might not be suitable for real-time applications or lower-end hardware.


I tried all the console commands related to depth of field, and nothing made a difference. The AA setting in UE5.4 makes no difference; it uses TSR anti-aliasing by default anyway. If you do change the anti-aliasing to AA, it doesn’t seem to do anything.

Issues with depth of field or aliasing, artifacts… are rare for me, I’ve seen them happen under certain conditions. As shown in my example screenshot, the foliage renders beautifully even at close range.

Below are some of the console variables that I typically use to achieve optimal results for cinematic:

Suggested Console Variables and Values:

Console Variable Name Value
r.AmbientOcclusion.Denoiser.TemporalAccumulation 0
r.DiffuseIndirect.Denoiser 0
r.Reflections.Denoiser 0
r.Shadow.Denoiser 0
r.Shadow.Denoiser.TemporalAccumulation 0
r.GlobalIllumination.Denoiser.TemporalAccumulation 0
r.Reflections.Denoiser.TemporalAccumulation 0
r.ScreenPercentage 150.0
r.RayTracing.SkyLight.Denoiser 0
r.RayTracing.GlobalIllumination.Denoiser 0
r.RayTracing.GlobalIllumination 1
r.RayTracing.GlobalIllumination.MaxBounces 5
r.RayTracing.Reflections.MaxRoughness 1.0
r.RayTracing.Reflections.MaxBounces 2
r.RayTracing.Reflections.Shadows 2
r.RayTracing.GlobalIllumination.EvalSkyLight 1
r.RayTracing.Reflections.RayTraceSkyLightContribution 1
r.RayTracing.Geometry.InstancedStaticMeshes.Culling 0
r.RayTracing.AmbientOcclusion.SamplesPerPixel 8
r.RayTracing.GlobalIllumination.FireflySuppression 1
r.Lumen.ScreenProbeGather.RadianceCache.ProbeResolution 64
r.TemporalAA.Upsampling 0
r.TemporalAACurrentFrameWeight 0.1
foliage.ForceLOD 0
r.Tonemapper.Quality 4
r.MotionBlurQuality 4
r.MotionBlurSeparable 3
r.DepthOfFieldQuality 4
r.Tonemapper.Sharpen 1.2
r.ForceLOD 0
r.Shadow.DistanceScale 5.0
r.HairStrands.Visibility.SortByDepth 1
r.AmbientOcclusion.Method 1
r.AmbientOcclusion.Denoiser 0
r.AmbientOcclusion.Denoiser.TemporalAccumulation 0
r.DiffuseIndirect.Denoiser 0
r.Reflections.Denoiser 0
r.Shadow.Denoiser 0
r.Shadow.Denoiser.TemporalAccumulation 0

For additional testing, if you’re not using Nanite, you can also try r.RayTracing.ForceAllRayTracingEffects 1 to evaluate how it affects the scene.

For a detailed description of each console variable you can take a look to:

I hope it helps!

1 Like