--- title: UE5 3DGaussians 插件笔记 date: 2023-12-22 11:44:33 excerpt: tags: rating: ⭐ --- # c++ 插件的c++部分主要实现了 - FThreeDGaussians——可以理解为一个场景或者根节点 - FThreeDGaussiansTree——类似BVH的空间切分树 - FThreeDGaussiansData——具体数据 - ## 相关代码 ```c++ struct FThreeDGaussiansData { GENERATED_BODY() public: FThreeDGaussiansData() {} FThreeDGaussiansData(const TArray& textures, const FVector3f& in_minPos, const FVector3f& in_maxPos) { minPos = in_minPos; maxPos = in_maxPos; textureWidth = textures[0]->GetSizeX(); position = textures[0]; rotation = textures[1]; scaleAndOpacity = textures[2]; for (int i = 3; i < textures.Num(); i++) { sh.Add(textures[i]); } } UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") FVector3f minPos = FVector3f::Zero(); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") FVector3f maxPos = FVector3f::Zero(); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") int32 textureWidth = -1; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") UTexture2D* position; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") UTexture2D* rotation; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") UTexture2D* scaleAndOpacity; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") TArray sh; }; /** 类似BVH的控件数据结构 */ USTRUCT(BlueprintType) struct FThreeDGaussiansTree { GENERATED_BODY() public: FThreeDGaussiansTree() {} // Axis for split (x=0, y=1, z=2) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") int32 splitAxis = -1; // max value of the position of gaussian in child0 or leaf0 in "splitAxis" axis UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") float splitValue = 0.0f; // index of child tree node (Index of TArray tree) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") int32 childIndex0 = -1; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") int32 childIndex1 = -1; // index of child data node (Index of TArray data) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") int32 leafIndex0 = -1; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") int32 leafIndex1 = -1; }; /* 作为3D高斯数据的载荷 */ USTRUCT(BlueprintType) struct FThreeDGaussians { GENERATED_BODY() public: FThreeDGaussians() {} UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") TArray data; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "3D Gaussians") TArray tree; }; ```