载入中...
搜索中...
未找到
ClusterGrid.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Result.h"
5
6#include <cstddef>
7#include <cstdint>
8#include <vector>
9
10#include <glm/vec3.hpp>
11
12namespace eve::graphics::hair {
13
19 glm::vec3 aabbMin{0.f};
20 glm::vec3 aabbMax{0.f};
22 std::vector<uint32_t> curveIndices;
23};
24
35public:
40 [[nodiscard]] Result<void> build(const StrandsDatas &strands, float cellSize);
41
42 void clear();
43
45 [[nodiscard]] size_t clusterCount() const { return clusters_.size(); }
47 [[nodiscard]] const HairCluster *clusterAt(size_t index) const;
48
54 [[nodiscard]] Result<std::vector<uint32_t>> cullClusters(const float *viewProj16) const;
55
59 [[nodiscard]] Result<std::vector<uint32_t>>
60 collectCurveIndices(const std::vector<uint32_t> &clusterIndices) const;
61
63 void computeBounds(glm::vec3 &outMin, glm::vec3 &outMax) const;
64
65private:
66 std::vector<HairCluster> clusters_;
67};
68
74 const StrandsDatas &src, const std::vector<uint32_t> &curveIndices);
75
76} // namespace eve::graphics::hair
int strands
#define EVENGINE_API_BACKENDS
Definition Export.h:108
Move-only, checked operation results for the common layer.
uint32_t index
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Uniform grid over strand roots for CPU frustum culling.
Definition ClusterGrid.h:34
size_t clusterCount() const
Cluster count.
Definition ClusterGrid.h:45
CPU-authoritative strand buffer (UE FHairStrandsDatas analogue).
Procedural hair/fur card meshes + material/LOD helpers (no strand simulation).
Definition Graphics.h:58
Result< StrandsDatas > filterStrandsByCurves(const StrandsDatas &src, const std::vector< uint32_t > &curveIndices)
Copy a subset of curves into a new StrandsDatas (preserves point order).
One spatial cluster of strand curves (UE cluster-culling analogue). @ownership Owned by ClusterGrid.
Definition ClusterGrid.h:18
std::vector< uint32_t > curveIndices
Curve indices into the source StrandsDatas.
Definition ClusterGrid.h:22