Crash in UText3DDefaultLayoutExtension::PreRendererUpdate following update to UE 5.6

Hello,

Following an engine update from Unreal 5.5 to Unreal 5.6 we are getting a crash in UText3DDefaultLayoutExtension::PreRendererUpdate (line 235) because Text3DComponent->GetCharacterExtension() returns a nullptr. I found a commit related to this issue on GitHub that I partially integrated (I just took the null pointer crash fix). The crash is gone but now the cooking fails because UText3DDefaultLayoutExtension::PreRendererUpdate returns EText3DExtensionResult::Failed which leads to UText3DRendererBase::Update logging an error line 100. I turned the error into a warning to be able to cook the data again.

Is there a better solution than that? I didn’t integrate the whole commit from GitHub because somes of the lines being changed are not in 5.6.1.

Thank you,

Clement

[Attachment Removed]

Hello [mention removed]​,

Sorry about the delay. I was assigned this case today. Text3D has received several fixes and stability improvements in UE 5.7, partly as a result of Motion Design moving from Experimental to Production Ready. If possible, it may be worth checking whether the crash still reproduces in a more recent 5.7 build.

If upgrading isn’t an option or the issue persists, could you please share minimal repro steps to reproduce the crash locally in UE 5.6. Based on the callstack, it appears to occur during editor map load while registering components rather than PIE/runtime.

Please let me know.

Best,

Francisco

[Attachment Removed]

Hello Francisco,

The error happens when entering PIE and when cooking. I can reproduce it by doing the following:

  1. Start a new project in Unreal 5.5.4 (stock version downloaded from the Epic Launcher)
  2. Create a new BP and add a Text3D component.
  3. Drop the BP in an empty map.
  4. Close the project.
  5. Open the project in Unreal 5.6.1
  6. Open the map and enter PIE.
  7. The Editor crashes in some Text3D code.

Upgrading is unfortunately not an option at the moment but I think we can live with my current hack until we update:

  • Adding the null check in UText3DDefaultLayoutExtension::PreRendererUpdate (line 235). Taken from Unreal 5.7.
  • Downgrading the error in UText3DRendererBase::Update (line 100) to a warning.

We are only using the Text3D in a few places and so far no one has complained. What is the consequence of Text3DComponent::GetCharacterExtension() returning null? Does it mean that some characters might not get displayed?

Thank you,

Clement

[Attachment Removed]

Thank you for checking the repro steps. I will keep my local changes for now and revert them when we update to 5.7.

Clement

[Attachment Removed]

Hello [mention removed]​,

Thanks for the extra details.

I can confirm this is a UE 5.6 only regression. Following your steps, I’m able to reproduce a crash in a blank UE 5.6.1 project. However, in my case the crash occurs earlier during map load, inside UText3DRendererBase::Create() when called from UText3DComponent::OnRegister(), rather than in UText3DDefaultLayoutExtension::PreRendererUpdate().

This happens because, during incremental component registration in 5.6, the UText3DComponent can still have Owner == nullptr, and Create() dereferences GetOwner()->GetActorNameOrLabel() without a validity check. This explains why the crash can occur during map load before reaching the renderer/layout update path.

The issue is already resolved in UE 5.7 and UE5-Main (CL 49719251). I can confirm that in these versions your repro steps no longer trigger a crash, so migrating should fully address the underlying problems in the Text3D module.

As a local workaround for the crash I encountered in 5.6, adding a guard around GetOwner() in UText3DRendererBase::Create() avoids the issue:

if (!IsValid(Text3DComponent)  || !IsValid(Text3DComponent->GetOwner()) )
{
	return;
}

With this change, map load and PIE worked without issues. While you don’t appear to be hitting this exact crash, it may still be worth adding as an additional defensive guard.

In your case, since the crash occurs later in UText3DDefaultLayoutExtension::PreRendererUpdate(), the null check you added there is appropriate and aligns with the fixes included in UE 5.7

Please let me know if this information helps.

Best,

Francisco

[Attachment Removed]