bmh/FlightSimulation/Plugins/CesiumForUnreal_5.4/Source/CesiumRuntime/Public/CesiumEncodedMetadataComponent.h
2025-02-07 22:52:32 +08:00

330 lines
9.6 KiB
C++

// Copyright 2020-2024 CesiumGS, Inc. and Contributors
#pragma once
#include "Components/ActorComponent.h"
#include "Containers/Array.h"
#include "Containers/UnrealString.h"
#include "Misc/Guid.h"
#if WITH_EDITOR
#include "Materials/MaterialFunctionMaterialLayer.h"
#endif
#include "CesiumEncodedMetadataComponent.generated.h"
PRAGMA_DISABLE_DEPRECATION_WARNINGS
/**
* @brief The GPU component type to coerce this property to.
*
*/
UENUM()
enum class ECesiumPropertyComponentType_DEPRECATED : uint8 {
Uint8_DEPRECATED,
Float_DEPRECATED
};
/**
* @brief The property type.
*/
UENUM()
enum class ECesiumPropertyType_DEPRECATED : uint8 {
Scalar_DEPRECATED,
Vec2_DEPRECATED,
Vec3_DEPRECATED,
Vec4_DEPRECATED
};
/**
* @brief Describes how this feature table is accessed. Either through feature
* id textures, feature id attributes, mixed, or neither.
*/
UENUM()
enum class ECesiumFeatureTableAccessType_DEPRECATED : uint8 {
Unknown_DEPRECATED,
Texture_DEPRECATED,
Attribute_DEPRECATED,
Mixed_DEPRECATED
};
// Note that these don't exhaustively cover the possibilities of glTF metadata
// classes, they only cover the subset that can be encoded into textures. For
// example, arbitrary size arrays and enums are excluded. Other un-encoded
// types like strings will be coerced.
struct UE_DEPRECATED(
5.0,
"CesiumEncodedMetadataComponent and its related description properties have been deprecated. Use CesiumEncodedFeaturesMetadata instead.")
FPropertyDescription;
/**
* @brief Description of a feature table property that should be encoded for
* access on the GPU.
*/
USTRUCT()
struct CESIUMRUNTIME_API FPropertyDescription {
GENERATED_USTRUCT_BODY()
/**
* @brief The name of this property as it will be referenced in the
* material.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
FString Name;
/**
* @brief The GPU component type to coerce this property to.
*
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
ECesiumPropertyComponentType_DEPRECATED ComponentType =
ECesiumPropertyComponentType_DEPRECATED::Float_DEPRECATED;
/**
* @brief The property type.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
ECesiumPropertyType_DEPRECATED Type =
ECesiumPropertyType_DEPRECATED::Scalar_DEPRECATED;
/**
* @brief If ComponentType==Uint8, this indicates whether to normalize into a
* [0-1] range before accessing on the GPU.
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta =
(EditCondition =
"ComponentType==ECesiumPropertyComponentType_DEPRECATED::Uint8_DEPRECATED"))
bool Normalized = false;
};
struct UE_DEPRECATED(
5.0,
"CesiumEncodedMetadataComponent and its related description properties have been deprecated. Use CesiumEncodedFeaturesMetadata instead.")
FFeatureTableDescription;
/**
* @brief Description of a feature table containing properties to be encoded
* for access on the GPU.
*/
USTRUCT()
struct CESIUMRUNTIME_API FFeatureTableDescription {
GENERATED_USTRUCT_BODY()
/**
* @brief The name of this feature table.
*
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
FString Name;
/**
* @brief Describes how this feature table is accessed. Either through feature
* id textures, feature id attributes, mixed, or neither.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
ECesiumFeatureTableAccessType_DEPRECATED AccessType =
ECesiumFeatureTableAccessType_DEPRECATED::Unknown_DEPRECATED;
/**
* @brief If the AccessType==Texture, this string represents the channel of
* the feature id texture that will be used to index into this feature table.
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta =
(EditCondition =
"AccessType==ECesiumFeatureTableAccessType_DEPRECATED::Texture_DEPRECATED"))
FString Channel;
/**
* @brief Descriptions of the properties to upload to the GPU.
*/
UPROPERTY(EditAnywhere, Category = "Cesium", Meta = (TitleProperty = "Name"))
TArray<FPropertyDescription> Properties;
};
struct UE_DEPRECATED(
5.0,
"CesiumEncodedMetadataComponent and its related properties have been deprecated. Use CesiumEncodedFeaturesMetadata instead.")
FFeatureTexturePropertyDescription;
/**
* @brief Description of a feature texture property that should be uploaded to
* the GPU.
*/
USTRUCT()
struct CESIUMRUNTIME_API FFeatureTexturePropertyDescription {
GENERATED_USTRUCT_BODY()
/**
* @brief The name of this property as it will be referenced in the
* material.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
FString Name;
// For now, always assumes it is Uint8
/*
UPROPERTY(EditAnywhere, Category = "Cesium")
ECesiumPropertyComponentType ComponentType =
ECesiumPropertyComponentType::Uint8;*/
/**
* @brief The property type.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
ECesiumPropertyType_DEPRECATED Type =
ECesiumPropertyType_DEPRECATED::Scalar_DEPRECATED;
/**
* @brief If ComponentType==Uint8, this indicates whether to normalize into a
* [0-1] range before accessing on the GPU.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
bool Normalized = false;
/**
* @brief This string describes the channel order of the incoming feature
* texture property (e.g., "rgb", "bgra", etc.). This helps us fix the
* channel order when accessing on the GPU.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
FString Swizzle;
};
struct UE_DEPRECATED(
5.0,
"CesiumEncodedMetadataComponent and its related description properties have been deprecated. Use CesiumEncodedFeaturesMetadata instead.")
FFeatureTextureDescription;
/**
* @brief Description of a feature texture with properties that should be
* uploaded to the GPU.
*/
USTRUCT()
struct CESIUMRUNTIME_API FFeatureTextureDescription {
GENERATED_USTRUCT_BODY()
/**
* @brief The name of this feature texture.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
FString Name;
/**
* @brief Descriptions of the properties to upload to the GPU.
*/
UPROPERTY(EditAnywhere, Category = "Cesium", Meta = (TitleProperty = "Name"))
TArray<FFeatureTexturePropertyDescription> Properties;
};
struct UE_DEPRECATED(
5.0,
"CesiumEncodedMetadataComponent and its related description properties have been deprecated. Use CesiumEncodedFeaturesMetadata instead.")
FMetadataDescription;
struct UE_DEPRECATED(
5.0,
"CesiumEncodedMetadataComponent and its related description properties have been deprecated. Use CesiumEncodedFeaturesMetadata instead.")
FMetadataDescription;
/**
* @brief Description of metadata from a glTF that should be uploaded to the
* GPU for access in materials.
*/
USTRUCT()
struct CESIUMRUNTIME_API FMetadataDescription {
GENERATED_USTRUCT_BODY()
/**
* @brief Descriptions of feature tables to upload to the GPU.
*/
UPROPERTY(
EditAnywhere,
Category = "EncodeMetadata",
Meta = (TitleProperty = "Name"))
TArray<FFeatureTableDescription> FeatureTables;
/**
* @brief Descriptions of feature textures to upload to the GPU.
*/
UPROPERTY(
EditAnywhere,
Category = "EncodeMetadata",
Meta = (TitleProperty = "Name"))
TArray<FFeatureTextureDescription> FeatureTextures;
};
/**
* @brief An actor component that can be added to Cesium3DTileset actors to
* dictate what metadata to encode for access on the GPU. The selection can be
* automatically populated based on available metadata by clicking the
* "Auto Fill" button. Once a selection of desired metadata is made, the
* boiler-plate material code to access the selected properties can be
* auto-generated using the "Generate Material" button.
* @deprecated Use UCesiumFeaturesMetadataComponent instead.
*/
UCLASS(Deprecated)
class CESIUMRUNTIME_API UDEPRECATED_CesiumEncodedMetadataComponent
: public UActorComponent {
GENERATED_BODY()
public:
#if WITH_EDITORONLY_DATA
/**
* @brief This is the target UMaterialFunctionMaterialLayer that the
* boiler-plate material generation will use. When pressing
* "Generate Material", nodes will be added to this material to enable access
* to the requested metadata. If this is left blank, a new material layer
* will be created in the /Game/ folder.
*/
UPROPERTY(
EditAnywhere,
Category = "EncodeMetadata",
Meta =
(DeprecatedProperty,
DeprecationMessage =
"CesiumEncodedMetadataComponent is deprecated. Use CesiumFeaturesMetadataComponent instead."))
UMaterialFunctionMaterialLayer* TargetMaterialLayer = nullptr;
#endif
// Note: Here, we avoid wrapping the feature tables and feature textures
// inside a FMetadataDescription to avoid further complicating the details
// panel UI for editing the hierarchy.
/**
* @brief Descriptions of feature tables to upload to the GPU.
*/
UPROPERTY(
EditAnywhere,
Category = "EncodeMetadata",
Meta =
(TitleProperty = "Name",
DeprecatedProperty,
DeprecationMessage =
"CesiumEncodedMetadataComponent is deprecated. Use CesiumFeaturesMetadataComponent instead."))
TArray<FFeatureTableDescription> FeatureTables;
/**
* @brief Descriptions of feature textures to upload to the GPU.
*/
UPROPERTY(
EditAnywhere,
Category = "EncodeMetadata",
Meta =
(TitleProperty = "Name",
DeprecatedProperty,
DeprecationMessage =
"CesiumEncodedMetadataComponent is deprecated. Use CesiumFeaturesMetadataComponent instead."))
TArray<FFeatureTextureDescription> FeatureTextures;
// virtual void Serialize(FArchive& Ar) override;
};
PRAGMA_ENABLE_DEPRECATION_WARNINGS