UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NaniteMaterialsSceneExtension.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "SpanAllocator.h"
7#include "Containers/Map.h"
8#include "SceneExtensions.h"
9#include "NaniteDefinitions.h"
10#include "NaniteMaterials.h"
12#include "PrimitiveSceneInfo.h"
13
15
16namespace Nanite
17{
18
20{
22
23public:
25
27 {
29
30 public:
32 virtual void End();
33 virtual void PreSceneUpdate(FRDGBuilder& GraphBuilder, const FScenePreUpdateChangeSet& ChangeSet, FSceneUniformBuffer& SceneUniforms) override;
34 virtual void PostSceneUpdate(FRDGBuilder& GraphBuilder, const FScenePostUpdateChangeSet& ChangeSet) override;
35
37 FRDGBuilder& GraphBuilder,
39 );
40
41 private:
42 FMaterialsSceneExtension* SceneData = nullptr;
46 const bool bEnableAsync = true;
47 bool bForceFullUpload = false;
48 bool bDefragging = false;
49 };
50
62
63 friend class FUpdater;
64
66
67 virtual void InitExtension(FScene& InScene) override;
68 virtual ISceneExtensionUpdater* CreateUpdater() override;
70
71#if WITH_EDITOR
73#endif
74#if WITH_DEBUG_VIEW_MODES
76#endif
77
79 FRDGBuilder& GraphBuilder,
82 );
83
84private:
85 enum ETask : uint32
86 {
87 FreeBufferSpaceTask,
88 InitPrimitiveDataTask,
89 AllocMaterialBufferTask,
90 UploadPrimitiveDataTask,
91 UploadMaterialDataTask,
92 #if WITH_EDITOR
94 #endif
95 #if WITH_DEBUG_VIEW_MODES
97 #endif
98
99 NumTasks
100 };
101
102 struct FPackedPrimitiveData
103 {
104 uint32 MaterialBufferOffset;
105 uint32 MaterialMaxIndex : 8;
106 uint32 MeshPassMask : 8;
107 uint32 bHasUVDensities : 1;
108 #if WITH_EDITOR
110 uint32 OverlayColor;
111 #endif
112 };
113
114 struct FPrimitiveData
115 {
116 FPrimitiveSceneInfo* PrimitiveSceneInfo = nullptr;
117 uint32 MaterialBufferOffset = INDEX_NONE;
118 uint32 MaterialBufferSizeDwords = 0;
119 uint8 NumMaterials = 0;
120 uint8 NumMeshPasses = 0;
121 uint8 MeshPassMask = 0;
122 bool bHasUVDensities = false;
123 #if WITH_EDITOR
125 uint32 OverlayColor = 0;
126 #endif
127
128 FPackedPrimitiveData Pack() const
129 {
130 FPackedPrimitiveData Output;
131 Output.MaterialBufferOffset = MaterialBufferOffset;
132 Output.MaterialMaxIndex = NumMaterials - 1;
133 Output.MeshPassMask = MeshPassMask;
134 Output.bHasUVDensities = bHasUVDensities;
135 #if WITH_EDITOR
136 Output.HitProxyBufferOffset = HitProxyBufferOffset;
137 Output.OverlayColor = OverlayColor;
138 #endif
139 return Output;
140 }
141 };
142
143 class FMaterialBuffers
144 {
145 public:
146 FMaterialBuffers();
147
149 TPersistentByteAddressBuffer<uint32> MaterialDataBuffer;
150 };
151
152 class FUploader
153 {
154 public:
155 static constexpr int32 MaterialScatterStride = 2;
158 };
159
160 bool IsEnabled() const { return MaterialBuffers.IsValid(); }
161 void SetEnabled(bool bEnabled);
162 void SyncAllTasks() const { UE::Tasks::Wait(TaskHandles); }
163 void FinishMaterialBufferUpload(
164 FRDGBuilder& GraphBuilder,
166 );
167 bool ProcessBufferDefragmentation();
168
169 FSpanAllocator MaterialBufferAllocator;
170 TSparseArray<FPrimitiveData> PrimitiveData;
171 TUniquePtr<FMaterialBuffers> MaterialBuffers;
172 TUniquePtr<FUploader> MaterialUploader;
173#if WITH_EDITOR
176#endif
177#if WITH_DEBUG_VIEW_MODES
179#endif
181};
182
183} // namespace Nanite
184
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_SCENE_EXTENSION_UPDATER(ClassName, SceneExtensionClassName)
Definition SceneExtensions.h:390
#define DECLARE_SCENE_EXTENSION_RENDERER(ClassName, SceneExtensionClassName)
Definition SceneExtensions.h:394
#define DECLARE_SCENE_EXTENSION(ModuleExport, ClassName)
Definition SceneExtensions.h:384
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition PrimitiveSceneInfo.h:266
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition ScenePrimitiveUpdates.h:129
Definition ScenePrimitiveUpdates.h:116
Definition SceneRendering.h:2023
Definition SceneUniformBuffer.h:137
Definition ScenePrivate.h:2875
Definition SpanAllocator.h:15
Definition SceneExtensions.h:69
Definition SceneExtensions.h:45
Definition SceneExtensions.h:24
ISceneExtension(FScene &InScene)
Definition SceneExtensions.h:29
Definition NaniteMaterialsSceneExtension.h:52
virtual void UpdateSceneUniformBuffer(FRDGBuilder &GraphBuilder, FSceneUniformBuffer &Buffer) override
Definition NaniteMaterialsSceneExtension.cpp:793
FRenderer(FSceneRendererBase &InSceneRenderer, FMaterialsSceneExtension &InSceneData)
Definition NaniteMaterialsSceneExtension.h:56
Definition NaniteMaterialsSceneExtension.h:27
virtual void PostSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePostUpdateChangeSet &ChangeSet) override
Definition NaniteMaterialsSceneExtension.cpp:432
virtual void End()
Definition NaniteMaterialsSceneExtension.cpp:368
virtual void PreSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePreUpdateChangeSet &ChangeSet, FSceneUniformBuffer &SceneUniforms) override
Definition NaniteMaterialsSceneExtension.cpp:375
void PostCacheNaniteMaterialBins(FRDGBuilder &GraphBuilder, const TConstArrayView< FPrimitiveSceneInfo * > &SceneInfosWithStaticDrawListUpdate)
Definition NaniteMaterialsSceneExtension.cpp:546
Definition NaniteMaterialsSceneExtension.h:20
virtual ISceneExtensionUpdater * CreateUpdater() override
Definition NaniteMaterialsSceneExtension.cpp:96
virtual ISceneExtensionRenderer * CreateRenderer(FSceneRendererBase &InSceneRenderer, const FEngineShowFlags &EngineShowFlags) override
Definition NaniteMaterialsSceneExtension.cpp:101
virtual void InitExtension(FScene &InScene) override
Definition NaniteMaterialsSceneExtension.cpp:89
void PostBuildNaniteShadingCommands(FRDGBuilder &GraphBuilder, const UE::Tasks::FTask &BuildDependency, ENaniteMeshPass::Type MeshPass)
Definition NaniteMaterialsSceneExtension.cpp:306
static bool ShouldCreateExtension(FScene &InScene)
Definition NaniteMaterialsSceneExtension.cpp:84
Definition Array.h:670
Definition SparseArray.h:524
Definition StaticArray.h:26
Definition UniquePtr.h:107
bool IsValid() const
Definition UniquePtr.h:280
Type
Definition PrimitiveSceneInfo.h:245
Definition SkinnedMeshComponent.h:50
bool Wait(const TaskCollectionType &Tasks, FTimespan InTimeout=FTimespan::MaxValue())
Definition Task.h:381
Definition ShowFlags.h:56