Description

Nanite ISMs lost selection outlines in UE5.5
Actors having an ISM component which uses a static mesh with nanite do not get a selection outline when selected in the editor. Having Nanite is essential to trigger the bug, since it doesn't occur when using a static mesh without nanite or by disallowing nanite explicitly on the component.
When searching for this issue in the issue tracker I came across another similar issue: [Link Removed]
Upon further investigation I believe the root cause might be related to ShouldCreateNaniteProxy, so I've attached this method's call stack.

Steps to Reproduce

This issue requires a setup with Instance Static Meshes (ISM) and Nanite, so refer to the provided repro project:
Open the attached project and TestMap map
Select the actor called ISM_Nanite, either by clicking on the actor in the Outliner or on the right chairs in the 3D view
Notice that the actor does not have a selection outline

From scratch:
Create a blank project and include StarterContent
Create a new scene
Spawn an Actor in the scene
Rename it ISM_Nanite
Select ISM_Nanite and add an Instanced Static Mesh Component
Select the component and set Static Mesh as SM_Chair
In Instances>Instances, add two elements
Select the second and set it's location to 0;100;0
Open SM_Chair and confirm Enable Nanite Support is true
Now select ISM_Nanite and hold Alt + Click&Drag it to the side to duplicate
Rename the duplicated Actor to ISM_NoNanite
Select ISM_NoNanite and select it's InstancedStaticMeshComponent
Enable DisallowNanite
Now select ISM_Nanite and ISM_NoNanite

Expected result: selecting ISM_Nanite should display an outline
Actual result: Selecting ISM_Nanite don't present an outline in the Editor

Callstack

> UnrealEditor-Engine.dll!Nanite::ShouldCreateNaniteProxy<UStaticMeshComponent>(const UStaticMeshComponent & Component, Nanite::FMaterialAudit * OutNaniteMaterials) Line 2528 C++
[Inline Frame] UnrealEditor-Engine.dll!Nanite::UseNaniteOverrideMaterials(const UStaticMeshComponent &) Line 2417 C++
[Inline Frame] UnrealEditor-Engine.dll!UStaticMeshComponent::UseNaniteOverrideMaterials(bool) Line 2433 C++
UnrealEditor-Engine.dll!UStaticMeshComponent::GetMaterial(int MaterialIndex, bool bDoingNaniteMaterialAudit) Line 2882 C++
UnrealEditor-DetailCustomizations.dll!FCustomPrimitiveDataCustomization::PopulateParameterData(UPrimitiveComponent * PrimitiveComponent, int & MaxPrimitiveDataIndex) Line 544 C++
[Inline Frame] UnrealEditor-DetailCustomizations.dll!FCustomPrimitiveDataCustomization::CustomizeChildren::__l2::<lambda_1>::operator()(UPrimitiveComponent *) Line 114 C++
UnrealEditor-DetailCustomizations.dll!??$ForEachSelectedComponent@V<lambda_1>@?1??CustomizeChildren@FCustomPrimitiveDataCustomization@@UEAAXV?$TSharedRef@VIPropertyHandle@@$00@@AEAVIDetailChildrenBuilder@@AEAVIPropertyTypeCustomizationUtils@@@Z@@FCustomPrimitiveDataCustomization@@AEAAXV<lambda_1>@?1??CustomizeChildren@0@UEAAXV?$TSharedRef@VIPropertyHandle@@$00@@AEAVIDetailChildrenBuilder@@AEAVIPropertyTypeCustomizationUtils@@@Z@@Z(FCustomPrimitiveDataCustomization::CustomizeChildren::__l2::<lambda_1> Pred) Line 492 C++
UnrealEditor-DetailCustomizations.dll!FCustomPrimitiveDataCustomization::CustomizeChildren(TSharedRef<IPropertyHandle,1> PropertyHandle, IDetailChildrenBuilder & ChildBuilder, IPropertyTypeCustomizationUtils & CustomizationUtils) Line 118 C++
UnrealEditor-PropertyEditor.dll!FDetailPropertyRow::OnItemNodeInitialized(TSharedRef<FDetailCategoryImpl,1> InParentCategory, const TAttribute<bool> & InIsParentEnabled, TSharedPtr<IDetailGroup,1> InParentGroup) Line 417 C++
UnrealEditor-PropertyEditor.dll!FDetailItemNode::InitPropertyEditor() Line 170 C++
UnrealEditor-PropertyEditor.dll!FDetailItemNode::Initialize() Line 58 C++
UnrealEditor-PropertyEditor.dll!FDetailCategoryImpl::GenerateNodesFromCustomizations(const TArray<FDetailLayoutCustomization,TSizedDefaultAllocator<32>> & InCustomizationList, TArray<TSharedRef<FDetailTreeNode,1>,TSizedDefaultAllocator<32>> & OutNodeList) Line 1150 C++
UnrealEditor-PropertyEditor.dll!FDetailCategoryImpl::GenerateChildrenForSingleLayout(const FDetailLayout & Layout, const TArray<FDetailLayoutCustomization,TSizedDefaultAllocator<32>> & Customizations, TArray<TSharedRef<FDetailTreeNode,1>,TSizedDefaultAllocator<32>> & OutChildren) Line 1172 C++
UnrealEditor-PropertyEditor.dll!FDetailCategoryImpl::GenerateChildrenForLayouts() Line 1188 C++
UnrealEditor-PropertyEditor.dll!FDetailCategoryImpl::GenerateLayout() Line 1364 C++
UnrealEditor-PropertyEditor.dll!FDetailLayoutBuilderImpl::BuildCategories(const TMap<FName,TSharedPtr<FDetailCategoryImpl,1>,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FName,TSharedPtr<FDetailCategoryImpl,1>,0>> & CategoryMap, TArray<TSharedRef<FDetailCategoryImpl,1>,TSizedDefaultAllocator<32>> & OutSimpleCategories, TArray<TSharedRef<FDetailCategoryImpl,1>,TSizedDefaultAllocator<32>> & OutAdvancedCategories) Line 367 C++
UnrealEditor-PropertyEditor.dll!FDetailLayoutBuilderImpl::GenerateDetailLayout() Line 527 C++
UnrealEditor-PropertyEditor.dll!SDetailsViewBase::UpdateSinglePropertyMap(TSharedPtr<FComplexPropertyNode,1> InRootPropertyNode, FDetailLayoutData & LayoutData, bool bIsExternal) Line 693 C++
UnrealEditor-PropertyEditor.dll!SDetailsViewBase::UpdatePropertyMaps() Line 631 C++
UnrealEditor-PropertyEditor.dll!SDetailsView::PostSetObject(const TArray<FDetailsViewObjectRoot,TSizedDefaultAllocator<32>> & Roots) Line 1087 C++
UnrealEditor-PropertyEditor.dll!SDetailsView::SetObjectArrayPrivate(const TArray<UObject *,TSizedDefaultAllocator<32>> & InObjects) Line 814 C++
UnrealEditor-PropertyEditor.dll!SDetailsView::SetObjects(const TArray<UObject *,TSizedDefaultAllocator<32>> & InObjects, bool bForceRefresh, bool bOverrideLock) Line 565 C++
UnrealEditor-LevelEditor.dll!SActorDetails::SetElementDetailsObjects(TArrayView<TUniquePtr<ITypedElementDetailsObject,TDefaultDelete<ITypedElementDetailsObject>> const ,int> InElementDetailsObjects, const bool bForceRefresh, const bool bOverrideLock, TArrayView<TTypedElement<ITypedElementDetailsInterface> const ,int> * InDetailsElementsPtr) Line 589 C++
UnrealEditor-LevelEditor.dll!SActorDetails::RefreshSubobjectTreeElements(TArrayView<TSharedPtr<FSubobjectEditorTreeNode,1> const ,int> InSelectedNodes, const bool bForceRefresh, const bool bOverrideLock) Line 575 C++
UnrealEditor-LevelEditor.dll!SActorDetails::OnSubobjectEditorTreeViewSelectionChanged(const TArray<TSharedPtr<FSubobjectEditorTreeNode,1>,TSizedDefaultAllocator<32>> & SelectedNodes) Line 758 C++
[Inline Frame] UnrealEditor-LevelEditor.dll!Invoke(void(SActorDetails::*)(const TArray<TSharedPtr<FSubobjectEditorTreeNode,1>,TSizedDefaultAllocator<32>> &)) Line 66 C++
[Inline Frame] UnrealEditor-LevelEditor.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(void(SActorDetails::*)(const TArray<TSharedPtr<FSubobjectEditorTreeNode,1>,TSizedDefaultAllocator<32>> &) &) Line 317 C++
UnrealEditor-LevelEditor.dll!V::TBaseSPMethodDelegateInstance::ExecuteIfSafe(const TArray<TSharedPtr<FSubobjectEditorTreeNode,1>,TSizedDefaultAllocator<32>> & <Params_0>) Line 299 C++
[Inline Frame] UnrealEditor-SubobjectEditor.dll!TDelegate<void __cdecl(TArray<TSharedPtr<FSubobjectEditorTreeNode,1>,TSizedDefaultAllocator<32>> const &),FDefaultDelegateUserPolicy>::ExecuteIfBound(const TArray<TSharedPtr<FSubobjectEditorTreeNode,1>,TSizedDefaultAllocator<32>> &) Line 634 C++
UnrealEditor-SubobjectEditor.dll!SSubobjectEditor::UpdateSelectionFromNodes(const TArray<TSharedPtr<FSubobjectEditorTreeNode,1>,TSizedDefaultAllocator<32>> & SelectedNodes) Line 2321 C++
UnrealEditor-SubobjectEditor.dll!SSubobjectEditor::OnTreeSelectionChanged(TSharedPtr<FSubobjectEditorTreeNode,1> InSelectedNodePtr, ESelectInfo::Type SelectInfo) Line 2328 C++
[Inline Frame] UnrealEditor-SubobjectEditor.dll!Invoke(void(SSubobjectEditor::*)(TSharedPtr<FSubobjectEditorTreeNode,1>, ESelectInfo::Type)) Line 66 C++
[Inline Frame] UnrealEditor-SubobjectEditor.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(void(SSubobjectEditor::*)(TSharedPtr<FSubobjectEditorTreeNode,1>, ESelectInfo::Type) &) Line 317 C++
UnrealEditor-SubobjectEditor.dll!V::TBaseSPMethodDelegateInstance::ExecuteIfSafe(TSharedPtr<FSubobjectEditorTreeNode,1> <Params_0>, ESelectInfo::Type <Params_1>) Line 299 C++
[Inline Frame] UnrealEditor-SubobjectEditor.dll!TDelegate<void __cdecl(TSharedPtr<FSubobjectEditorTreeNode,1>,enum ESelectInfo::Type),FDefaultDelegateUserPolicy>::ExecuteIfBound(TSharedPtr<FSubobjectEditorTreeNode,1>) Line 634 C++
UnrealEditor-SubobjectEditor.dll!SListView<TSharedPtr<FSubobjectEditorTreeNode,1>>::Private_SignalSelectionChanged(ESelectInfo::Type SelectInfo) Line 1007 C++
UnrealEditor-SubobjectEditor.dll!STreeView<TSharedPtr<FSubobjectEditorTreeNode,1>>::Private_SignalSelectionChanged(ESelectInfo::Type SelectInfo) Line 546 C++
UnrealEditor-SubobjectEditor.dll!STableRow<TSharedPtr<FSubobjectEditorTreeNode,1>>::OnMouseButtonUp(const FGeometry & MyGeometry, const FPointerEvent & MouseEvent) Line 597 C++
UnrealEditor-Slate.dll!??R<lambda_2>@?7??RoutePointerUpEvent@FSlateApplication@@QEAA?AVFReply@@AEBVFWidgetPath@@AEBUFPointerEvent@@@Z@QEBA@AEBVFArrangedWidget@@1@Z(const FArrangedWidget & TargetWidget, const FPointerEvent & Event) Line 5346 C++
UnrealEditor-Slate.dll!??$Route@VFReply@@VFToLeafmostPolicy@FEventRouter@@UFPointerEvent@@V<lambda_2>@?7??RoutePointerUpEvent@FSlateApplication@@QEAA?AV1@AEBVFWidgetPath@@AEBU4@@Z@@FEventRouter@@SA?AVFReply@@PEAVFSlateApplication@@VFToLeafmostPolicy@0@UFPointerEvent@@AEBV<lambda_2>@?7??RoutePointerUpEvent@2@QEAA?AV1@AEBVFWidgetPath@@AEBU4@@Z@W4ESlateDebuggingInputEvent@@@Z(FSlateApplication * ThisApplication, FEventRouter::FToLeafmostPolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l8::<lambda_2> & Lambda, ESlateDebuggingInputEvent DebuggingInputEvent) Line 456 C++
UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent(const FWidgetPath & WidgetsUnderPointer, const FPointerEvent & PointerEvent) Line 5332 C++
UnrealEditor-Slate.dll!FSlateApplication::ProcessMouseButtonUpEvent(const FPointerEvent & MouseEvent) Line 5917 C++
UnrealEditor-Slate.dll!FSlateApplication::OnMouseUp(const EMouseButtons::Type Button, const UE::Math::TVector2<double> CursorPos) Line 5873 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) Line 2271 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,1> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2783 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 1944 C++
[Inline Frame] UnrealEditor-ApplicationCore.dll!WindowsApplication_WndProc(HWND__ *) Line 939 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 945 C++
[External Code]
[Inline Frame] UnrealEditor-ApplicationCore.dll!WinPumpMessages() Line 116 C++
UnrealEditor-ApplicationCore.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) Line 145 C++
UnrealEditor.exe!FEngineLoop::Tick() Line 5806 C++
[Inline Frame] UnrealEditor.exe!EngineTick() Line 69 C++
UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) Line 188 C++
UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 266 C++
UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 317 C++
[External Code]

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-254341 in the post.

0
Login to Vote

Unresolved
ComponentUE - Graphics Features - Nanite
Affects Versions5.5.3
Target Fix5.6
CreatedMar 6, 2025
UpdatedMar 26, 2025
View Jira Issue