UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NaniteVisibility.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "NaniteShared.h"
6//#include "NaniteCullRaster.h"
7
9
11{
12 friend class FNaniteVisibility;
14
15public:
17
18 bool IsRasterBinVisible(uint16 BinIndex) const;
19 bool IsShadingBinVisible(uint16 BinIndex) const;
20
22 {
23 return bRasterTestValid;
24 }
25
27 {
28 return bShadingTestValid;
29 }
30
32 {
33 OutNumTotal = TotalRasterBins;
34 OutNumVisible = IsRasterTestValid() ? VisibleRasterBins : OutNumTotal;
35 }
36
38 {
39 OutNumTotal = TotalShadingBins;
40 OutNumVisible = IsShadingTestValid() ? VisibleShadingBins : OutNumTotal;
41 }
42
47
49 {
50 if (!bRasterTestValid && !bShadingTestValid)
51 {
52 // no valid test results, so we didn't visibility test any primitives
53 return true;
54 }
55 return VisibleCustomDepthPrimitives.Contains(PrimitiveId);
56 }
57
59 {
60 return RasterBinVisibility;
61 }
62
64 {
65 return ShadingBinVisibility;
66 }
67
68private:
69 TBitArray<> RasterBinVisibility;
70 TBitArray<> ShadingBinVisibility;
72 FNaniteRasterBinIndexTranslator BinIndexTranslator;
73 uint32 TotalRasterBins = 0;
74 uint32 TotalShadingBins = 0;
75 uint32 VisibleRasterBins = 0;
76 uint32 VisibleShadingBins = 0;
77 bool bRasterTestValid = false;
78 bool bShadingTestValid = false;
79};
80
82{
84
85public:
87 {
88 uint16 Primary = 0xFFFFu;
89 uint16 Fallback = 0xFFFFu;
90 };
91
93 {
94 uint16 Triangle = 0xFFFFu;
95 uint16 Voxel = 0xFFFFu;
96 };
97
100
108
110
111public:
113
116
123 FScene& Scene,
125 const class FNaniteRasterPipelines* RasterPipelines,
127 const UE::Tasks::FTask& PrerequisiteTask = {}
128 );
129
132
133 void RemoveReferences(const FPrimitiveSceneInfo* SceneInfo);
134
135private:
136 FPrimitiveReferences* FindOrAddPrimitiveReferences(const FPrimitiveSceneInfo* SceneInfo);
137
138 // Translator should remain valid between Begin/FinishVisibilityFrame. That is, no adding or removing raster bins
139 FNaniteRasterBinIndexTranslator BinIndexTranslator;
142 PrimitiveMapType PrimitiveReferences;
143 UE::FMutex Mutex;
144 uint8 bCalledBegin : 1;
145};
146
147namespace Nanite
148{
150
152}
153
155{
156public:
158 : Visibility(InVisibility)
159 , bEnabled(bInEnabled)
160 {
161 if (bEnabled)
162 {
163 Visibility.BeginVisibilityFrame();
164 }
165 }
166
168 {
169 if (bEnabled)
170 {
171 Visibility.FinishVisibilityFrame();
172 }
173 }
174
176 {
177 return Visibility;
178 }
179
180private:
181 FNaniteVisibility& Visibility;
182 bool bEnabled;
183};
#define FORCEINLINE
Definition AndroidPlatform.h:140
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NaniteShared.h:692
Definition NaniteShared.h:717
Definition NaniteVisibility.h:155
FNaniteScopedVisibilityFrame(const bool bInEnabled, FNaniteVisibility &InVisibility)
Definition NaniteVisibility.h:157
FORCEINLINE FNaniteVisibility & Get()
Definition NaniteVisibility.h:175
~FNaniteScopedVisibilityFrame()
Definition NaniteVisibility.h:167
Definition NaniteShared.h:884
Definition NaniteVisibility.h:11
bool IsRasterBinVisible(uint16 BinIndex) const
Definition NaniteVisibility.cpp:164
FORCEINLINE const TBitArray & GetShadingBinVisibility() const
Definition NaniteVisibility.h:63
FORCEINLINE void GetShadingBinStats(uint32 &OutNumVisible, uint32 &OutNumTotal) const
Definition NaniteVisibility.h:37
FORCEINLINE void SetRasterBinIndexTranslator(const FNaniteRasterBinIndexTranslator InTranslator)
Definition NaniteVisibility.h:43
bool IsShadingBinVisible(uint16 BinIndex) const
Definition NaniteVisibility.cpp:169
FORCEINLINE const TBitArray & GetRasterBinVisibility() const
Definition NaniteVisibility.h:58
FORCEINLINE bool ShouldRenderCustomDepthPrimitive(uint32 PrimitiveId) const
Definition NaniteVisibility.h:48
FORCEINLINE void GetRasterBinStats(uint32 &OutNumVisible, uint32 &OutNumTotal) const
Definition NaniteVisibility.h:31
FNaniteVisibilityResults()=default
FORCEINLINE bool IsShadingTestValid() const
Definition NaniteVisibility.h:26
FORCEINLINE bool IsRasterTestValid() const
Definition NaniteVisibility.h:21
Definition NaniteVisibility.h:82
void BeginVisibilityFrame()
Definition NaniteVisibility.cpp:326
friend class FNaniteVisibilityTask
Definition NaniteVisibility.h:83
FNaniteVisibilityQuery * BeginVisibilityQuery(FSceneRenderingBulkObjectAllocator &Allocator, FScene &Scene, const TConstArrayView< FConvexVolume > &ViewList, const class FNaniteRasterPipelines *RasterPipelines, const class FNaniteShadingPipelines *ShadingPipelines, const UE::Tasks::FTask &PrerequisiteTask={})
Definition NaniteVisibility.cpp:347
TArray< FRasterBin, TInlineAllocator< 1 > > PrimitiveRasterBinType
Definition NaniteVisibility.h:98
void FinishVisibilityFrame()
Definition NaniteVisibility.cpp:333
PrimitiveShadingBinType * GetShadingBinReferences(const FPrimitiveSceneInfo *SceneInfo)
Definition NaniteVisibility.cpp:426
FNaniteVisibility()
Definition NaniteVisibility.cpp:321
TArray< FShadingBin, TInlineAllocator< 1 > > PrimitiveShadingBinType
Definition NaniteVisibility.h:99
Experimental::TRobinHoodHashMap< const FPrimitiveSceneInfo *, FPrimitiveReferences > PrimitiveMapType
Definition NaniteVisibility.h:109
void RemoveReferences(const FPrimitiveSceneInfo *SceneInfo)
Definition NaniteVisibility.cpp:438
PrimitiveRasterBinType * GetRasterBinReferences(const FPrimitiveSceneInfo *SceneInfo)
Definition NaniteVisibility.cpp:414
Definition PrimitiveSceneInfo.h:266
Definition ScenePrivate.h:2875
Definition ContainerAllocationPolicies.h:1662
Definition Mutex.h:18
Definition SkinnedMeshComponent.h:50
const FNaniteVisibilityResults * GetVisibilityResults(const FNaniteVisibilityQuery *Query)
Definition NaniteVisibility.cpp:144
UE::Tasks::FTask GetVisibilityTask(const FNaniteVisibilityQuery *Query)
Definition NaniteVisibility.cpp:154
Definition NaniteVisibility.cpp:54
Definition NaniteVisibility.h:102
const FPrimitiveSceneInfo * SceneInfo
Definition NaniteVisibility.h:103
PrimitiveShadingBinType ShadingBins
Definition NaniteVisibility.h:105
PrimitiveRasterBinType RasterBins
Definition NaniteVisibility.h:104
bool bWritesCustomDepthStencil
Definition NaniteVisibility.h:106
Definition NaniteVisibility.h:87
uint16 Primary
Definition NaniteVisibility.h:88
uint16 Fallback
Definition NaniteVisibility.h:89
Definition NaniteVisibility.h:93
uint16 Voxel
Definition NaniteVisibility.h:95
uint16 Triangle
Definition NaniteVisibility.h:94