Unreal 5.6 - Transform Gizmo no longer shows occlusion

Hey all, unfortunately Unreal 5.6 is a step forward in performance but some of the UI changes seem to be negative. One of the most important is with the Transform Gizmo.
In every previous version of Unreal, the Transform Gizmo would show occlusion, it would be dark grey if it was buried behind objects, and it would be pure Red Green Blue when unoccluded by objects. This was particularly helpful when offsetting pivots or when trying to see exactly where an object is in 3D space. In Unreal 5.6 it seems that regardless of where an object is in the world, it is always pure Red, Green, and Blue and occlusion has no effect on the shading of the Transform Gizmo. I realize this sounds like a small thing, but it’s how every object in Unreal is selected and viewed.

It’s possible that this is a small checkbox in the editor preferences and I haven’t found it, but has anyone else experienced this issue or know a fix for this? I can’t explain how helpful this was and now that it’s gone it makes lining up basic objects a huge pain. Appreciate any feedback/advice in the meantime. Thanks!

this is a massive downgrade…i now spend 10x as long to place meshes in the level.

pls bring back the gizmos occlusion

I’m not entirely sure if there’s a built-in option to toggle the display, but I found a way to directly modify the display effect in the file
File:
UE_5.6\Engine\Shaders\Private\PostProcessCompositePrimitives.usf.

In

#if 0 // Don't modify based on occlusion
	static const float OccludedColorMultiplier = 1.0f;
	float DarkenMask = 1.0f;
#else // Apply pattern mask based on occlusion
	static const float OccludedColorMultiplier = 0.7f;

	// Generate 2x2 square tiling pattern for foreground primitive that end up behind scene opaque primitives.
	float PatternMask = ((ColorPixelPos.x / 2 + ColorPixelPos.y / 2) % 2) * OccludedColorMultiplier;

	// These constants express the two opacity values we see when the primitive is hidden
	float LowContrastPatternMask = lerp(OccludedColorMultiplier, 1, PatternMask);
	LowContrastPatternMask = saturate(lerp(LowContrastPatternMask, 1, bOpaqueEditorGizmo));

	float DarkenMask = lerp(LowContrastPatternMask, 1.0f, DepthMask);
#endif

	// Blend editor primitives with scene color.
	OutColor.rgb = SceneColor.rgb * (1 - EditorPrimitiveColor.a) + EditorPrimitiveColor.rgb * DarkenMask;

	FLATTEN
	if (bProcessAlpha)
	{
		static const float OccludedAlphaMultiplier = OccludedColorMultiplier;
		float HiddenMask = lerp(OccludedAlphaMultiplier, 1.0f, DepthMask);

		OutColor.a = lerp(SceneColor.a, 1, EditorPrimitiveColor.a * DarkenMask * HiddenMask);
	}
	else
	{
		OutColor.a = 0;
	}

find

#if 1 // Don't modify based on occlusion

and change it to

#if 0 // Don't modify based on occlusion
2 Likes

Wow, thanks for digging through and finding this @Haikui, will try this out!