259 lines
13 KiB
C++
259 lines
13 KiB
C++
// VRM4U Copyright (c) 2021-2024 Haruyoshi Yamamoto. This software is released under the MIT License.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "UObject/ObjectMacros.h"
|
|
#include "UObject/Object.h"
|
|
#include "Factories/ImportSettings.h"
|
|
#include "VrmConvert.h"
|
|
#include "Vrm1LicenseObject.h"
|
|
|
|
#include "VrmImportUI.generated.h"
|
|
|
|
DECLARE_DELEGATE(FOnResolveFbxReImport);
|
|
|
|
UCLASS(config=EditorPerProjectUserSettings, AutoExpandCategories=(FTransform), HideCategories=Object, MinimalAPI)
|
|
class UVrmImportUI : public UObject, public IImportSettingsParser
|
|
{
|
|
GENERATED_UCLASS_BODY()
|
|
|
|
public:
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Thumbnail"))
|
|
UTexture2D *Thumbnail;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "VRM Title / Author"))
|
|
FString TitleAuthor;
|
|
|
|
/** for Mobile. Import root bone only */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "**UE5** UEFN mode"))
|
|
bool bUEFN = false;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "**UE4** RetargetPose A-pose(Off to T-pose)"))
|
|
bool bAPoseRetarget = true;
|
|
|
|
/** for Mobile. Import root bone only */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "**mobile** Reduce bonemap<=75"))
|
|
bool bMobileBone = false;
|
|
|
|
/** Materal Type */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Mesh)
|
|
EVRMImportMaterialType MaterialType;
|
|
|
|
#if UE_VERSION_OLDER_THAN(5,2,0)
|
|
static const bool VRM4U_UseUE5Mat = false;
|
|
#else
|
|
static const bool VRM4U_UseUE5Mat = true;
|
|
#endif
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Use UE5 Material"))
|
|
bool bUseUE5Material = VRM4U_UseUE5Mat;
|
|
|
|
/** Outline Material*/
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "GenerateOutlineMaterial"))
|
|
bool bGenerateOutlineMaterial = true;
|
|
|
|
/** Force Override */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Force Override (as New Asset)"))
|
|
bool bForceOverride = false;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Model scale"))
|
|
float ModelScale = 1.0f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Animation Translate scale"))
|
|
float AnimationTranslateScale = 1.0f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Animation Play Rate Scale"))
|
|
float PlayRateScale = 1.0f;
|
|
|
|
/** Remove RootBone Rotation */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Remove RootBone Rotation"))
|
|
bool bRemoveRootBoneRotation = true;
|
|
|
|
/** Remove RootBone Position */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Remove RootBone Position"))
|
|
bool bRemoveRootBonePosition = false;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "VRM10 Convert to Restpose from Bindpose"))
|
|
bool bVrm10UseBindToRestPose = true;
|
|
|
|
/** Remove Local Rotation for VRM10 */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "VRM10 Remove Local Rotation"))
|
|
bool bVrm10RemoveLocalRotation = false;
|
|
|
|
/** Use Bindpose for VRM10 */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "VRM10 Bindpose"))
|
|
bool bVrm10Bindpose = false;
|
|
|
|
/** Force Original Bone Name */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Force original bone name"))
|
|
bool bForceOriginalBoneName = false;
|
|
|
|
/** Duplicate mesh and renamed humanoid bone */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName= "Generate renamed humanoid mesh"))
|
|
bool bGenerateHumanoidRenamedMesh = false;
|
|
|
|
/** Add IK Bone */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Generate IK Bone"))
|
|
bool bGenerateIKBone = false;
|
|
|
|
/** Add RigIK asset*/
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Generate RigIK Asset"))
|
|
bool bGenerateRigIK = true;
|
|
|
|
/** Remove Physics asset */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "No physics asset"))
|
|
bool bSkipPhysics = false;
|
|
|
|
/** Remove Retargeter asset */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "No Retargeter asset"))
|
|
bool bSkipRetargeter = false;
|
|
|
|
/** Remove MorphTarget */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "No MorphTarget"))
|
|
bool bSkipMorphTarget = false;
|
|
|
|
/** Use MorphTarget Normal */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Eable MorphTarget Normal(TangentZDelta)"))
|
|
bool bEnableMorphTargetNormal = false;
|
|
|
|
#if UE_VERSION_OLDER_THAN(4,26,0)
|
|
static const bool VRM4U_UseBC7 = false;
|
|
#else
|
|
static const bool VRM4U_UseBC7 = true;
|
|
#endif
|
|
|
|
|
|
/** Force Original MorphTarget Name Mode */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Force original morphtarget name"))
|
|
bool bForceOriginalMorphTargetName = false;
|
|
|
|
/** Use Strict MorphTarget Name Mode */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Remove BlendShapeGroup prefix for old VRM file"))
|
|
bool bRemoveBlendShapeGroupPrefix = false;
|
|
|
|
/** Use Opaque insted of translucent */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Force Opaque"))
|
|
bool bForceOpaque = false;
|
|
|
|
/** Use TwoSided */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Force TwoSided"))
|
|
bool bForceTwoSided = false;
|
|
|
|
/** Save as single uasset file */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "Single uasset file"))
|
|
bool bSingleUAssetFile = false;
|
|
|
|
/** Use GridTexture by Default */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Texture] Use DummyGrid by DefaultBaseTexture"))
|
|
bool bDefaultGridTextureMode = false;
|
|
|
|
/** Use BC7 */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Texture] Use BC7 for BaseTexture"))
|
|
bool bBC7Mode = VRM4U_UseBC7;
|
|
|
|
/** Generate mipmap (be careful of MatCap texture)*/
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Texture] Generate Mipmap"))
|
|
bool bMipmapGenerateMode = false;
|
|
|
|
/** Merge material using same parameter */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Optimize] Merge material"))
|
|
bool bMergeMaterial = true;
|
|
|
|
/** Merge primitives using same material */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Optimize] Merge primitive"))
|
|
bool bMergePrimitive = false;
|
|
|
|
/** Use optimized MaterialInstance */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Optimize] use opt material"))
|
|
bool bOptimizeMaterial = true;
|
|
|
|
/** Remove unused vertex */
|
|
//UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Optimize] remove unused vertex"))
|
|
bool bOptimizeVertex = false;
|
|
|
|
/** Remove degenerate triangles */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Optimize] remove degenerate triangles"))
|
|
bool bRemoveDegenerateTriangles = false;
|
|
|
|
/** BoneWeight influence */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Optimize] Bone Weight Influence Num"))
|
|
int BoneWeightInfluenceNum = 8;
|
|
|
|
/** Remove bone has no mesh */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Optimize] Remove bone used DCC tool"))
|
|
bool bSimpleRoot = true;
|
|
|
|
/** Remove bone has no mesh */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Optimize] Use ActiveBone List"))
|
|
bool bActiveBone = true;
|
|
|
|
//UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName="Delete bone without mesh"))
|
|
bool bSkipNoMeshBone = false;
|
|
|
|
/** for DEBUG. Ignore Validation */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Debug] Ignore VRM Validataion"))
|
|
bool bIgnoreVRMValidation = false;
|
|
|
|
/** for DEBUG. Import root bone only */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Debug] One bone only"))
|
|
bool bDebugOneBone = false;
|
|
|
|
/** for DEBUG. No mesh. Bone only */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Debug] No Mesh"))
|
|
bool bDebugNoMesh = false;
|
|
|
|
/** for DEBUG. No mesh. Bone only */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Mesh, meta = (ImportType = "StaticMesh|SkeletalMesh", DisplayName = "[Debug] No Material"))
|
|
bool bDebugNoMaterial = false;
|
|
|
|
/** Skeleton to use for imported asset. When importing a mesh, leaving this as "None" will create a new skeleton. When importing an animation this MUST be specified to import the asset. */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category=Mesh, meta=(ImportType="SkeletalMesh"))
|
|
class USkeleton* Skeleton;
|
|
|
|
//
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "VRM1_License")
|
|
TArray<FLicenseBoolDataPair> LicenseBool;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "VRM1_License")
|
|
TArray<FLicenseStringDataPair> LicenseString;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "VRM1_License")
|
|
TArray<FLicenseStringDataArray> LicenseStringArray;
|
|
|
|
//
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "License_Personation/CharacterizationPermission")
|
|
FString allowedUserName;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "License_Personation/CharacterizationPermission")
|
|
FString violentUsageName;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "License_Personation/CharacterizationPermission")
|
|
FString sexualUsageName;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "License_Personation/CharacterizationPermission")
|
|
FString commercialUsageName;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "License_Personation/CharacterizationPermission")
|
|
FString otherPermissionUrl;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "License_Redistribution/ModificationsLicense")
|
|
FString licenseName;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "License_Redistribution/ModificationsLicense")
|
|
FString otherLicenseUrl;
|
|
|
|
private:
|
|
UPROPERTY()
|
|
FImportOptionData data;
|
|
public:
|
|
const FImportOptionData *GenerateOptionData();
|
|
|
|
UFUNCTION(BlueprintCallable, Category = Miscellaneous)
|
|
void ResetToDefault();
|
|
|
|
//virtual bool CanEditChange(const FProperty* InProperty) const override;
|
|
|
|
/** IImportSettings Interface */
|
|
virtual void ParseFromJson(TSharedRef<class FJsonObject> ImportSettingsJson) override;
|
|
|
|
/* Whether this UI is construct for a reimport */
|
|
bool bIsReimport;
|
|
};
|
|
|
|
|