View Issue Details

IDProjectCategoryView StatusLast Update
0004706NoesisGUIUnrealpublic2026-01-20 10:56
ReporterJinFox Assigned Tohcpizzi  
PrioritynormalSeveritymajor 
Status resolvedResolutionfixed 
Product Version3.2.10 
Target Version3.2.11Fixed in Version3.2.11 
Summary0004706: [3.2.10 Unreal] World UI sample has some issues of Culling and positioning
Description

Hello,
After trying to implement world UI component in our project we identified some strange culling behavior.
I was able to reproduce those behavior using the unchanged WorldUI sample using either 4.0.0b8 (unreal studio plugin) or NoesisGUI-UE5.6-3.2.10-Indie downloaded from the website.
I identified 2 issues during those test,
1 - The culling at the right and bottom of the screen seems to be happening to early and appears on screen (see BUGCulling-3-2-10.gif)

2- A bit rarer but happens often after several play/Stop on Play in Editor the positioning logic seems to be wrong and do not follow the actor it is attached to upon moving the player pawn (see WorldUIBUGPositioning1.gif.

I had to compress those gif quite a bit to make them small enough but I remain available to send you a video if need be.
Thank you

Attached Files
BUGCulling-3-2-10.gif (4,104,844 bytes)
WorldUIBUGPositioning1.gif (3,881,805 bytes)
PlatformAny

Activities

hcpizzi

hcpizzi

2026-01-19 17:54

developer   ~0011706

We've identified the issue. It's all in plugin code, so I've attached a patch for it. It will be fixed in 3.2.11.

4706.patch (3,160 bytes)   
Index: NoesisInstance.cpp
===================================================================
--- NoesisInstance.cpp	(revision 16499)
+++ NoesisInstance.cpp	(revision 16500)
@@ -362,7 +362,6 @@
 	RenderDevice->SetScene(Scene);
 	RenderDevice->SetRHICmdList(&RHICmdList);
 	RenderDevice->SetGammaAndContrast(EngineGamma, SlateContrast);
-	Renderer->SetRenderRegion(0.f, 0.f, Right - Left, Bottom - Top);
 	if (WithViewProj)
 	{
 		if (IsMobileMultiView || IsInstancedStereo)
@@ -390,10 +389,6 @@
 	const auto ViewFamily = View->Family;
 
 	ViewRect = View->ViewRect;
-	Left = ViewRect.Min.X;
-	Top = ViewRect.Min.Y;
-	Right = ViewRect.Max.X;
-	Bottom = ViewRect.Max.Y;
 	Scene = ViewFamily->Scene;
 	WorldTime = ViewFamily->Time;
 	IsMobileMultiView = View->bIsMobileMultiViewEnabled && View->StereoPass == EStereoscopicPass::eSSP_PRIMARY;
@@ -418,7 +413,7 @@
 			auto RightEyeViewProjectionMatrix = InstancedView->ViewMatrices.GetViewProjectionMatrix();
 			RightEyeViewProj = UnrealToNoesisViewProj(RightEyeViewProjectionMatrix, InstancedRight - InstancedLeft, InstancedBottom - InstancedTop);
 
-			RHICmdList.SetViewport(Left, Top, 0.0f, View->InstancedStereoWidth, Bottom, 1.0f);
+			RHICmdList.SetViewport(ViewRect.Min.X, ViewRect.Min.Y, 0.0f, View->InstancedStereoWidth, ViewRect.Max.Y, 1.0f);
 		}
 		else
 #endif
@@ -438,7 +433,7 @@
 			auto RightEyeViewProjectionMatrix = InstancedView->ViewMatrices.GetViewProjectionMatrix();
 			RightEyeViewProj = UnrealToNoesisViewProj(RightEyeViewProjectionMatrix, InstancedRight - InstancedLeft, InstancedBottom - InstancedTop);
 
-			RHICmdList.SetStereoViewport(Left, InstancedLeft, Top, InstancedTop, 0.0f, Right, InstancedRight, Bottom, InstancedBottom, 1.0f);
+			RHICmdList.SetStereoViewport(ViewRect.Min.X, InstancedLeft, ViewRect.Min.Y, InstancedTop, 0.0f, ViewRect.Max.X, InstancedRight, ViewRect.Max.Y, InstancedBottom, 1.0f);
 		}
 	}
 	else
@@ -446,7 +441,7 @@
 		auto MonoViewProjectionMatrix = View->ViewMatrices.GetViewProjectionMatrix();
 		ViewProj = UnrealToNoesisViewProj(MonoViewProjectionMatrix, Right - Left, Bottom - Top);
 
-		RHICmdList.SetViewport(Left, Top, 0.0f, Right, Bottom, 1.0f);
+		RHICmdList.SetViewport(ViewRect.Min.X, ViewRect.Min.Y, 0.0f, ViewRect.Max.X, ViewRect.Max.Y, 1.0f);
 	}
 
 	// We shouldn't use the versions of Render that use ViewProj if it's invalid, but we still need to call Render
@@ -1093,8 +1088,12 @@
 
 		ENQUEUE_RENDER_COMMAND(FNoesisInstance_Tick3DWidget_UpdateSlateElement)
 		(
-			[NoesisSlateElement = NoesisSlateElement, Scene = Scene, WorldTime = WorldTime](FRHICommandListImmediate& RHICmdList)
+			[NoesisSlateElement = NoesisSlateElement, Scene = Scene, WorldTime = WorldTime, Left = Left, Top = Top, Right = Left + Width, Bottom = Top + Height](FRHICommandListImmediate& RHICmdList)
 			{
+				NoesisSlateElement->Left = Left;
+				NoesisSlateElement->Top = Top;
+				NoesisSlateElement->Right = Right;
+				NoesisSlateElement->Bottom = Bottom;
 				NoesisSlateElement->Scene = Scene;
 				NoesisSlateElement->WorldTime = WorldTime;
 				NoesisSlateElement->UpdateRenderTree();
4706.patch (3,160 bytes)   

Issue History

Date Modified Username Field Change
2026-01-15 11:13 JinFox New Issue
2026-01-15 11:13 JinFox File Added: BUGCulling-3-2-10.gif
2026-01-15 11:13 JinFox File Added: WorldUIBUGPositioning1.gif
2026-01-15 11:19 sfernandez Assigned To => hcpizzi
2026-01-15 11:19 sfernandez Status new => assigned
2026-01-15 11:19 sfernandez Product Version 3.2 => 3.2.10
2026-01-15 11:19 sfernandez Target Version => 3.2.11
2026-01-19 17:54 hcpizzi Note Added: 0011706
2026-01-19 17:54 hcpizzi File Added: 4706.patch
2026-01-19 17:54 hcpizzi Status assigned => resolved
2026-01-19 17:54 hcpizzi Resolution open => fixed
2026-01-19 17:54 hcpizzi Fixed in Version => 3.2.11