![]() |
UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
|
#include "GPUSkinCache.h"#include "CanvasTypes.h"#include "Engine/Engine.h"#include "Engine/SkeletalMesh.h"#include "Rendering/RenderCommandPipes.h"#include "SkeletalRenderGPUSkin.h"#include "MeshDrawShaderBindings.h"#include "ShaderParameterUtils.h"#include "PipelineStateCache.h"#include "RenderCaptureInterface.h"#include "Engine/SkinnedAssetCommon.h"#include "GPUSkinCacheVisualizationData.h"#include "RHIContext.h"#include "ShaderPlatformCachedIniValue.h"#include "RenderUtils.h"#include "RendererInterface.h"#include "RenderingThread.h"#include "RHIResourceUtils.h"#include "Stats/StatsTrace.h"#include "UObject/UObjectIterator.h"#include "Algo/Sort.h"#include "ComponentRecreateRenderStateContext.h"#include "RenderGraphUtils.h"#include "DataDrivenShaderPlatformInfo.h"#include "ShaderCompilerCore.h"#include "SpanAllocator.h"#include "UnifiedBuffer.h"Classes | |
| class | FSkinCacheExecHelper |
| struct | FGPUSkinCache::FSkinCacheRWBuffer |
| struct | FGPUSkinCache::FRWBuffersAllocationInitializer |
| struct | FGPUSkinCache::FRWBuffersAllocation |
| struct | FGPUSkinCache::FRWBufferTracker |
| class | FGPUSkinCacheEntry |
| struct | FGPUSkinCacheEntry::FRecomputeTangentSection |
| struct | FGPUSkinCacheEntry::FSectionDispatchData |
| class | FGPUSkinCacheCS |
| class | FInitDynamicMeshBoundsCS |
| class | FDynamicMeshBoundsBuffer |
| struct | FDynamicMeshBoundsBlackboardStruct |
| class | FRecomputeTangentsPerTriangleCS |
| class | FRecomputeTangentsPerVertexCS |
| struct | FGPUSkinCache::FTaskData |
Enumerations | |
| enum class | EGPUSkinCacheDispatchFlags : uint8 { None = 0 , Position = 1 << 0 , PositionPrevious = 1 << 1 , RecomputeTangents = 1 << 2 } |
| enum class | EGPUSkinCacheBufferBits : uint8 { None = 0 , IntermediateTangents = 1 << 1 , PositionPrevious = 1 << 2 } |
| enum class | EGPUSkinBoneInfluenceType : uint8 { Default , Extra , Unlimited } |
| enum class | EGPUSkinDeformationType : uint8 { Default , Morph , Cloth } |
|
strong |
|
strong |
|
strong |
|
strong |
| DECLARE_DWORD_COUNTER_STAT | ( | TEXT("Num Buffers") | , |
| STAT_GPUSkinCache_NumBuffers | , | ||
| STATGROUP_GPUSkinCache | |||
| ) |
| DECLARE_DWORD_COUNTER_STAT | ( | TEXT("Num Dispatches") | , |
| STAT_GPUSkinCache_NumDispatches | , | ||
| STATGROUP_GPUSkinCache | |||
| ) |
| DECLARE_DWORD_COUNTER_STAT | ( | TEXT("Num RayTracing Buffers") | , |
| STAT_GPUSkinCache_NumRayTracingBuffers | , | ||
| STATGROUP_GPUSkinCache | |||
| ) |
| DECLARE_DWORD_COUNTER_STAT | ( | TEXT("Num RayTracing Dispatches") | , |
| STAT_GPUSkinCache_NumRayTracingDispatches | , | ||
| STATGROUP_GPUSkinCache | |||
| ) |
| DECLARE_GPU_STAT | ( | GPUSkinCache | ) |
| DEFINE_LOG_CATEGORY_STATIC | ( | LogSkinCache | , |
| Log | , | ||
| All | |||
| ) |
| DEFINE_STAT | ( | STAT_GPUSkinCache_NumSectionsProcessed | ) |
| DEFINE_STAT | ( | STAT_GPUSkinCache_NumTrianglesForRecomputeTangents | ) |
| DEFINE_STAT | ( | STAT_GPUSkinCache_TangentsIntermediateMemUsed | ) |
| DEFINE_STAT | ( | STAT_GPUSkinCache_TotalMemUsed | ) |
| DEFINE_STAT | ( | STAT_GPUSkinCache_TotalNumChunks | ) |
| DEFINE_STAT | ( | STAT_GPUSkinCache_TotalNumVertices | ) |
| void DynamicMeshBoundsModifyCompilationEnvironment | ( | const FGlobalShaderPermutationParameters & | Parameters, |
| FShaderCompilerEnvironment & | OutEnvironment | ||
| ) |
| ENUM_CLASS_FLAGS | ( | EGPUSkinCacheBufferBits | ) |
| ENUM_CLASS_FLAGS | ( | EGPUSkinCacheDispatchFlags | ) |
| FDynamicMeshBoundsShaderParameters GetDynamicMeshBoundsShaderParameters | ( | FRDGBuilder & | GraphBuilder | ) |
| ESkinCacheDefaultBehavior GetSkinCacheDefaultBehavior | ( | ) |
| ENGINE_API bool GPUSkinCacheNeedsDuplicatedVertices | ( | ) |
| ENGINE_API bool GPUSkinCacheStoreDuplicatedVertices | ( | ) |
| IMPLEMENT_GLOBAL_SHADER | ( | FGPUSkinCacheCS | , |
| "/Engine/Private/GpuSkinCacheComputeShader.usf" | , | ||
| "SkinCacheUpdateBatchCS" | , | ||
| SF_Compute | |||
| ) |
| IMPLEMENT_GLOBAL_SHADER | ( | FInitDynamicMeshBoundsCS | , |
| "/Engine/Private/DynamicMeshBounds.usf" | , | ||
| "InitDynamicMeshBoundsCS" | , | ||
| SF_Compute | |||
| ) |
| IMPLEMENT_GLOBAL_SHADER | ( | FRecomputeTangentsPerTriangleCS | , |
| "/Engine/Private/RecomputeTangentsPerTrianglePass.usf" | , | ||
| "MainCS" | , | ||
| SF_Compute | |||
| ) |
| IMPLEMENT_GLOBAL_SHADER | ( | FRecomputeTangentsPerVertexCS | , |
| "/Engine/Private/RecomputeTangentsPerVertexPass.usf" | , | ||
| "MainCS" | , | ||
| SF_Compute | |||
| ) |
| RDG_REGISTER_BLACKBOARD_STRUCT | ( | FDynamicMeshBoundsBlackboardStruct | ) |
| RDG_REGISTER_BLACKBOARD_STRUCT | ( | FGPUSkinCache::FTaskData | ) |
| bool ShouldWeCompileGPUSkinVFShaders | ( | EShaderPlatform | Platform, |
| ERHIFeatureLevel::Type | FeatureLevel | ||
| ) |
| FAutoConsoleVariableRef CVarGPUSkinCacheAllowDupedVertesForRecomputeTangents(TEXT("r.SkinCache.UseDuplicatedVerticesForRecomputeTangents"), GUseDuplicatedVerticesForRecomputeTangents, TEXT("1: Use stored duplicated vertices if they are available (default).\n"), ECVF_RenderThreadSafe) | ( | TEXT("r.SkinCache.UseDuplicatedVerticesForRecomputeTangents") | , |
| GUseDuplicatedVerticesForRecomputeTangents | , | ||
| TEXT("1: Use stored duplicated vertices if they are available (default).\n") | , | ||
| ECVF_RenderThreadSafe | |||
| ) |
| FAutoConsoleVariableRef CVarGPUSkinCachePrintMemorySummary(TEXT("r.SkinCache.PrintMemorySummary"), GSkinCachePrintMemorySummary, TEXT(" 1: print for N frames"), ECVF_RenderThreadSafe) | ( | TEXT("r.SkinCache.PrintMemorySummary") | , |
| GSkinCachePrintMemorySummary | , | ||
| TEXT(" 1: print for N frames") | , | ||
| ECVF_RenderThreadSafe | |||
| ) |
| TAutoConsoleVariable< int32 > CVarGPUSkinCacheRecomputeTangents(TEXT("r.SkinCache.RecomputeTangents"), 2, TEXT(" 2: on, only recompute tangents on skinned objects who ticked the Recompute Tangents checkbox(default)\n"), ECVF_RenderThreadSafe) | ( | TEXT("r.SkinCache.RecomputeTangents") | , |
| 2 | , | ||
| TEXT(" 2: on, only recompute tangents on skinned objects who ticked the Recompute Tangents checkbox(default)\n") | , | ||
| ECVF_RenderThreadSafe | |||
| ) |
| FAutoConsoleVariableRef CVarGPUSkinCacheStoreDuplicatedVerticesForRecomputeTangents(TEXT("r.SkinCache.StoreDuplicatedVerticesForRecomputeTangents"), GStoreDuplicatedVerticesForRecomputeTangents, TEXT("1: Store duplicated vertices for all skeletal mesh render sections.\n"), ECVF_ReadOnly) | ( | TEXT("r.SkinCache.StoreDuplicatedVerticesForRecomputeTangents") | , |
| GStoreDuplicatedVerticesForRecomputeTangents | , | ||
| TEXT("1: Store duplicated vertices for all skeletal mesh render sections.\n") | , | ||
| ECVF_ReadOnly | |||
| ) |
| FAutoConsoleVariableRef CVarRecomputeTangentsParallelDispatch(TEXT("r.SkinCache.RecomputeTangentsParallelDispatch"), GRecomputeTangentsParallelDispatch, TEXT(" 1: on, batch triangle passes together, resource barrier, followed by vertex passes together, cost more memory. \n"), ECVF_RenderThreadSafe) | ( | TEXT("r.SkinCache.RecomputeTangentsParallelDispatch") | , |
| GRecomputeTangentsParallelDispatch | , | ||
| TEXT(" 1: on, batch triangle passes together, resource barrier, followed by vertex passes together, cost more memory. \n") | , | ||
| ECVF_RenderThreadSafe | |||
| ) |
| FAutoConsoleVariableRef CVarSkinCacheAsyncCompute(TEXT("r.SkinCache.AsyncCompute"), GSkinCacheAsyncCompute, TEXT(" 1: on\n"), ECVF_RenderThreadSafe) | ( | TEXT("r.SkinCache.AsyncCompute") | , |
| GSkinCacheAsyncCompute | , | ||
| TEXT(" 1: on\n") | , | ||
| ECVF_RenderThreadSafe | |||
| ) |
| int32 GEnableGPUSkinCache = 1 |
| int32 GNumDispatchesToCapture = 0 |
| int32 GRecomputeTangentsParallelDispatch = 0 |
| int32 GSkinCacheRecomputeTangents = 2 |
| const float MBSize = 1048576.f |