UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SkeletalRenderCPUSkin.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 SkeletalRenderCPUSkin.h: CPU skinned mesh object and resource definitions
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
11#include "RenderResource.h"
12#include "RayTracingGeometry.h"
13#include "LocalVertexFactory.h"
19#include "StaticMeshResources.h"
20
22class UMorphTarget;
23
82
87{
88public:
89
94
95 //~ Begin FSkeletalMeshObject Interface
97 ENGINE_API virtual void ReleaseResources() override;
102 ENGINE_API virtual const FVertexFactory* GetStaticSkinVertexFactory(int32 LODIndex, int32 ChunkIdx, ESkinVertexFactoryMode VFMode) const override;
105
110
117 ENGINE_API void CacheVertices(int32 LODIndex, bool bForce, FRHICommandList& RHICmdList) const;
118
119 virtual int32 GetLOD() const override
120 {
121 if(DynamicData)
122 {
123 return DynamicData->LODIndex;
124 }
125 else
126 {
127 return 0;
128 }
129 }
130
131 virtual bool HaveValidDynamicData() const override
132 {
133 return (DynamicData != nullptr);
134 }
135
137 {
138 CumulativeResourceSize.AddDedicatedSystemMemoryBytes(sizeof(*this));
139
140 if(DynamicData)
141 {
143 }
144
145 CumulativeResourceSize.AddDedicatedSystemMemoryBytes(LODs.GetAllocatedSize());
146
147 // include extra data from LOD
148 for (int32 I=0; I<LODs.Num(); ++I)
149 {
150 LODs[I].GetResourceSizeEx(CumulativeResourceSize);
151 }
152
153 CumulativeResourceSize.AddDedicatedSystemMemoryBytes(CachedFinalVertices.GetAllocatedSize());
154 CumulativeResourceSize.AddDedicatedSystemMemoryBytes(BonesOfInterest.GetAllocatedSize());
155 }
156
157 virtual bool IsCPUSkinned() const override { return true; }
158
159 ENGINE_API virtual void DrawVertexElements(FPrimitiveDrawInterface* PDI, const FMatrix& ToWorldSpace, bool bDrawNormals, bool bDrawTangents, bool bDrawBinormals) const override;
160 //~ End FSkeletalMeshObject Interface
161
163 const TArray<FFinalSkinVertex>& GetCachedFinalVertices() const { return CachedFinalVertices; }
164
165
167
168private:
170 struct FSkeletalMeshObjectLOD
171 {
172 FSkeletalMeshRenderData* SkelMeshRenderData;
173 // index into FSkeletalMeshRenderData::LODRenderData[]
174 int32 LODIndex;
175
176 mutable FLocalVertexFactory VertexFactory;
177
179 mutable FStaticMeshVertexBuffer StaticMeshVertexBuffer;
181 mutable FPositionVertexBuffer PositionVertexBuffer;
182
184 FSkinWeightVertexBuffer* MeshObjectWeightBuffer;
185
187 FColorVertexBuffer* MeshObjectColorBuffer;
188
189#if RHI_RAYTRACING
191 FRayTracingGeometry RayTracingGeometry;
192#endif // RHI_RAYTRACING
193
195 bool bResourcesInitialized;
196
198 : SkelMeshRenderData(InSkelMeshRenderData)
199 , LODIndex(InLOD)
200 , VertexFactory(InFeatureLevel, "FSkeletalMeshObjectLOD")
201 , MeshObjectWeightBuffer(nullptr)
202 , MeshObjectColorBuffer(nullptr)
203 , bResourcesInitialized( false )
204 {
205 }
209 void InitResources(const FSkelMeshComponentLODInfo* CompLODInfo);
213 void ReleaseResources();
214
218 void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize)
219 {
220 CumulativeResourceSize.AddUnknownMemoryBytes(StaticMeshVertexBuffer.GetResourceSize() + PositionVertexBuffer.GetStride() * PositionVertexBuffer.GetNumVertices());
221 }
222
223 void UpdateSkinWeights(const FSkelMeshComponentLODInfo* CompLODInfo);
224 };
225
228
229protected:
232
233private:
235 mutable int32 CachedVertexLOD;
236
238 mutable TArray<FFinalSkinVertex> CachedFinalVertices;
239
241 TArray<int32> BonesOfInterest;
242 TArray<UMorphTarget*> MorphTargetOfInterest;
243
245 bool bRenderOverlayMaterial;
246};
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ESkinVertexFactoryMode
Definition SkeletalMeshTypes.h:51
EPreviousBoneTransformUpdateMode
Definition SkeletalRenderPublic.h:62
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ColorVertexBuffer.h:16
Definition SkeletalRenderCPUSkin.h:29
TArray< FTransform > MeshComponentSpaceTransforms
Definition SkeletalRenderCPUSkin.h:58
TMap< int32, FClothSimulData > ClothSimulUpdateData
Definition SkeletalRenderCPUSkin.h:68
FMorphTargetWeightMap ActiveMorphTargets
Definition SkeletalRenderCPUSkin.h:63
float ClothBlendWeight
Definition SkeletalRenderCPUSkin.h:71
FMatrix WorldToLocal
Definition SkeletalRenderCPUSkin.h:51
TArray< float > MorphTargetWeights
Definition SkeletalRenderCPUSkin.h:65
int32 LODIndex
Definition SkeletalRenderCPUSkin.h:61
TArray< FMatrix44f > ReferenceToLocal
Definition SkeletalRenderCPUSkin.h:54
virtual void GetResourceSizeEx(FResourceSizeEx &CumulativeResourceSize)
Definition SkeletalRenderCPUSkin.h:74
virtual ENGINE_API ~FDynamicSkelMeshObjectDataCPUSkin()
Definition LocalVertexFactory.h:51
Definition PositionVertexBuffer.h:27
uint32 GetStride() const
Definition PositionVertexBuffer.h:96
uint32 GetNumVertices() const
Definition PositionVertexBuffer.h:100
Definition PrimitiveDrawInterface.h:19
Definition PrimitiveSceneProxy.h:296
Definition RHICommandList.h:3819
Definition RayTracingGeometry.h:31
Definition SceneView.h:1425
Definition SkeletalRenderCPUSkin.h:87
virtual ENGINE_API ~FSkeletalMeshObjectCPUSkin()
Definition SkeletalRenderCPUSkin.cpp:85
virtual int32 GetLOD() const override
Definition SkeletalRenderCPUSkin.h:119
const TArray< FFinalSkinVertex > & GetCachedFinalVertices() const
Definition SkeletalRenderCPUSkin.h:163
virtual ENGINE_API const FVertexFactory * GetSkinVertexFactory(const FSceneView *View, int32 LODIndex, int32 ChunkIdx, ESkinVertexFactoryMode VFMode=ESkinVertexFactoryMode::Default) const override
Definition SkeletalRenderCPUSkin.cpp:310
virtual bool HaveValidDynamicData() const override
Definition SkeletalRenderCPUSkin.h:131
virtual void GetResourceSizeEx(FResourceSizeEx &CumulativeResourceSize) override
Definition SkeletalRenderCPUSkin.h:136
virtual ENGINE_API void ReleaseResources() override
Definition SkeletalRenderCPUSkin.cpp:106
ENGINE_API void UpdateDynamicData_RenderThread(FRHICommandList &RHICmdList, FDynamicSkelMeshObjectDataCPUSkin *InDynamicData, uint64 FrameNumberToPrepare, uint32 RevisionNumber)
Definition SkeletalRenderCPUSkin.cpp:184
virtual ENGINE_API const FVertexFactory * GetStaticSkinVertexFactory(int32 LODIndex, int32 ChunkIdx, ESkinVertexFactoryMode VFMode) const override
Definition SkeletalRenderCPUSkin.cpp:315
virtual ENGINE_API void DrawVertexElements(FPrimitiveDrawInterface *PDI, const FMatrix &ToWorldSpace, bool bDrawNormals, bool bDrawTangents, bool bDrawBinormals) const override
Definition SkeletalRenderCPUSkin.cpp:470
virtual ENGINE_API void EnableOverlayRendering(bool bEnabled, const TArray< int32 > *InBonesOfInterest, const TArray< UMorphTarget * > *InMorphTargetOfInterest) override
Definition SkeletalRenderCPUSkin.cpp:116
virtual ENGINE_API TConstArrayView< FMatrix44f > GetReferenceToLocalMatrices() const override
Definition SkeletalRenderCPUSkin.cpp:465
virtual ENGINE_API void InitResources(const FSkinnedMeshSceneProxyDesc &InMeshDesc) override
Definition SkeletalRenderCPUSkin.cpp:90
virtual bool IsCPUSkinned() const override
Definition SkeletalRenderCPUSkin.h:157
ENGINE_API void CacheVertices(int32 LODIndex, bool bForce, FRHICommandList &RHICmdList) const
Definition SkeletalRenderCPUSkin.cpp:219
virtual ENGINE_API void UpdateSkinWeightBuffer(const TArrayView< const FSkelMeshComponentLODInfo > InLODInfo) override
Definition SkeletalRenderCPUSkin.cpp:168
virtual FSkinningSceneExtensionProxy * CreateSceneExtensionProxy(const USkinnedAsset *InSkinnedAsset, bool bAllowScaling)
Definition SkeletalRenderCPUSkin.h:106
class FDynamicSkelMeshObjectDataCPUSkin * DynamicData
Definition SkeletalRenderCPUSkin.h:231
virtual ENGINE_API TArray< FTransform > * GetComponentSpaceTransforms() const override
Definition SkeletalRenderCPUSkin.cpp:451
Definition SkeletalRenderPublic.h:85
Definition SkeletalMeshRenderData.h:17
Definition SkinWeightVertexBuffer.h:364
Definition SkinningSceneExtensionProxy.h:17
Definition StaticMeshVertexBuffer.h:150
uint32 GetResourceSize() const
Definition StaticMeshVertexBuffer.h:436
Definition VertexFactory.h:661
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
Definition MorphTarget.h:230
Definition SkinnedAsset.h:47
Definition SkinnedMeshComponent.h:258
Type
Definition RHIFeatureLevel.h:20
@ false
Definition radaudio_common.h:23
Definition ExternalMorphSet.h:42
Definition ResourceSize.h:31
Definition SkinnedMeshComponent.h:175
Definition SkinnedMeshSceneProxyDesc.h:21
Definition SkinnedMeshSceneProxyDesc.h:117