--- title: Untitled date: 2025-06-03 10:19:25 excerpt: tags: rating: ⭐ --- # 前言 1. ShaderWorldPCGInterop: 2. ShaderWorld: 3. ShaderWorldCore: # ShaderWorld - Class - Actor - ShaderWorldActor.h:[[#AShaderWorldActor]] - SWorld.h:[[#ASWorld]] ## ASWorld ## AShaderWorldActor ## DrawMaterialToRenderTarget USWorldSubsystem::DrawMaterialToRenderTarget => SWShaderToolBox::DrawMaterial => DrawMaterial_CS_RT 调用路径: - AShaderWorldActor::RetrieveHeightAt(好像没有引用):检索高度 - AShaderWorldActor::ComputeHeight_Segmented_MapForClipMap - AShaderWorldActor::ProcessSegmentedComputation() <- AShaderWorldActor::TerrainAndSpawnablesManagement() <- AShaderWorldActor::Tick() - AShaderWorldActor::ComputeHeightMapForClipMap - AShaderWorldActor::UpdateClipMap() <- AShaderWorldActor::TerrainAndSpawnablesManagement() <- AShaderWorldActor::Tick() - AShaderWorldActor::ComputeDataLayersForClipMap - AShaderWorldActor::UpdateClipMap() <- AShaderWorldActor::TerrainAndSpawnablesManagement() <- AShaderWorldActor::Tick() - AShaderWorldActor::UpdateCollisionMeshData:更新碰撞模型数据。 - AShaderWorldActor::CollisionGPU() <- AShaderWorldActor::CollisionManagement() <- AShaderWorldActor::Tick() - FSpawnableMesh::UpdateSpawnableData - AShaderWorldActor::ProcessSegmentedComputation() <- AShaderWorldActor::TerrainAndSpawnablesManagement() <- AShaderWorldActor::Tick() ## Cache机制 AShaderWorldActor::ProcessSegmentedComputation() <- AShaderWorldActor::TerrainAndSpawnablesManagement() <- AShaderWorldActor::Tick() # 其他Bug CacheMatDyn? MatDyn? ## SetTextureParameterValue相关逻辑排查 - AShaderWorldActor中的SetTextureParameterValue - ~~ExportCacheInBounds~~ - ~~AssignHeightMapToDynamicMaterial~~ - UpdateStaticDataFor - ComputeHeight_Segmented_MapForClipMap:似乎会设置 - UpdateCollisionMeshData - [x] [[#InitializeReadBackDependencies]] - [x] InitiateMaterials ### UpdateCollisionMeshData Tick() -> CollisionManagement() -> CollisionGPU() -> UpdateCollisionMeshData() ### ComputeHeight_Segmented_MapForClipMap ### InitializeReadBackDependencies BeginPlay() -> InitiateWorld() -> InitializeReadBackDependencies() 1. 初始化3个RT:ReadRequestLocation、ReadRequestLocationHeightmap、GeneratorDynamicForReadBack。 2. 会设置`TObjectPtr < UMaterialInstanceDynamic> GeneratorDynamicForReadBack`各种变量 ```c++ GeneratorDynamicForReadBack->SetScalarParameterValue("HeightReadBack", 1.f); GeneratorDynamicForReadBack->SetTextureParameterValue("SpecificLocationsRT", ReadRequestLocation); GeneratorDynamicForReadBack->SetScalarParameterValue("NoMargin", 0.f); GeneratorDynamicForReadBack->SetScalarParameterValue("N", N); GeneratorDynamicForReadBack->SetScalarParameterValue("NormalMapSelect", 0.f); GeneratorDynamicForReadBack->SetScalarParameterValue("HeightMapToggle", 1.f); ``` 3. 设置随机种子相关Shader Parameter。 ### InitiateMaterials 作用:初始化`TArray Meshes;`的Material、`Producers` 调用顺序:BeginPlay() -> InitiateWorld() -> InitiateMaterials() 经过断点调试,会设置WorldSettings里的Material(地形Material)的HeightMap与NormalMap。