Плагин для человечков + болванки
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
//#include "SlateBasics.h"
|
||||
|
||||
class UCCImportUI;
|
||||
|
||||
class SCCImportWindow : public SCompoundWidget
|
||||
{
|
||||
public:
|
||||
SLATE_BEGIN_ARGS(SCCImportWindow)
|
||||
: _ImportUI(NULL)
|
||||
, _WidgetWindow()
|
||||
//, _SourcePath()
|
||||
//, _TargetPath()
|
||||
{}
|
||||
|
||||
SLATE_ARGUMENT(UCCImportUI*, ImportUI)
|
||||
SLATE_ARGUMENT(TSharedPtr<SWindow>, WidgetWindow)
|
||||
// SLATE_ARGUMENT(FText, SourcePath)
|
||||
//SLATE_ARGUMENT(FText, TargetPath)
|
||||
SLATE_END_ARGS()
|
||||
|
||||
public:
|
||||
void Construct(const FArguments& InArgs);
|
||||
private:
|
||||
UCCImportUI* ccImportUI;
|
||||
TWeakPtr< SWindow > WidgetWindow;
|
||||
TSharedPtr< SButton > ImportButton;
|
||||
//FString TargetPath;
|
||||
bool isCCAutoSetup;
|
||||
bool isHQSkin;
|
||||
bool isLWSkin;
|
||||
bool isStandardSkin;
|
||||
bool isliveLink;
|
||||
//TSharedRef<SWidget> GetTestContent() const;
|
||||
FString skinType = "Standard";
|
||||
ECheckBoxState IsStandardActive() const;
|
||||
ECheckBoxState IsHQActive() const;
|
||||
ECheckBoxState IsLWActive() const;
|
||||
void OnCCLiveLinkChanged(ECheckBoxState InCheckedState);
|
||||
void OnCCAutoSetupChanged(ECheckBoxState InCheckedState);
|
||||
void OnStandardChanged(ECheckBoxState InCheckedState);
|
||||
void OnHQChanged(ECheckBoxState InCheckedState);
|
||||
void OnLWChanged(ECheckBoxState InCheckedState);
|
||||
TSharedPtr< SCheckBox > Standard_CheckBox;
|
||||
TSharedPtr< SCheckBox > HQ_CheckBox;
|
||||
TSharedPtr< SCheckBox > LW_CheckBox;
|
||||
TSharedPtr< SCheckBox > CCAutoSetup_CheckBox;
|
||||
FReply OnCancel();
|
||||
FReply OnNext();
|
||||
FReply OnMore();
|
||||
};
|
||||
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
#include "RLTextureData.h"
|
||||
#include "RLPhysicClothData.h"
|
||||
#include "RLShaderData.h"
|
||||
|
||||
enum class ENodeType
|
||||
{
|
||||
None,
|
||||
Hair,
|
||||
Accessory
|
||||
};
|
||||
|
||||
class RLMaterialData
|
||||
{
|
||||
public:
|
||||
RLMaterialData() {}
|
||||
~RLMaterialData() {}
|
||||
|
||||
void SetShaderData( TSharedPtr< RLShaderData > spShaderData ) { m_spShaderData = spShaderData; }
|
||||
const RLShaderData* GetShaderData() const { return m_spShaderData ? m_spShaderData.Get() : nullptr; }
|
||||
RLShaderData* GetShaderData() { return m_spShaderData ? m_spShaderData.Get() : nullptr; }
|
||||
|
||||
void SetScatter( TSharedPtr< RLScatter > spScatter ) { m_spScatter = spScatter; }
|
||||
RLScatter* GetScatter() { return m_spScatter ? m_spScatter.Get() : nullptr; }
|
||||
|
||||
bool m_bIsPbr = false;
|
||||
ENodeType m_eNodeType = ENodeType::None;
|
||||
bool m_bTwoSide = false;
|
||||
int m_iUvChannelIndex = 0;
|
||||
TArray< float > m_kDiffuseColor = { 255.f, 255.f, 255.f };
|
||||
TArray< float > m_kAmbientColor = { 50.f, 50.f, 50.f };
|
||||
TArray< float > m_kSpecularColor = { 229.f, 229.f, 229.f };
|
||||
float m_fOpacity = 1.f;
|
||||
float m_fSelfIllumination = 0.f;
|
||||
float m_fSpecular = 0.f;
|
||||
float m_fGlossiness = 0.f;
|
||||
TMap< FString, RLTextureData > m_kTextureDatas;
|
||||
TSharedPtr< RLPhysicClothData > m_spPhysicClothData = nullptr;
|
||||
|
||||
private:
|
||||
TSharedPtr< RLShaderData > m_spShaderData;
|
||||
TSharedPtr< RLScatter > m_spScatter;
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
#include "CoreMinimal.h"
|
||||
|
||||
class RLPhysicClothData
|
||||
{
|
||||
public:
|
||||
RLPhysicClothData() {}
|
||||
~RLPhysicClothData() {}
|
||||
|
||||
bool m_bActivate = false;
|
||||
bool m_bUseGlobalGravity = false;
|
||||
FString m_strWeightMapPath = "";
|
||||
float m_fMass = 0.f;
|
||||
float m_fFriction = 0.f;
|
||||
float m_fDamping = 0.f;
|
||||
float m_fDrag = 0.f;
|
||||
float m_fSolverFrequency = 0.f;
|
||||
float m_fTetherLimit = 0.f;
|
||||
float m_fElasticity = 0.f;
|
||||
float m_fStretch = 0.f;
|
||||
float m_fBending = 0.f;
|
||||
TArray< float > m_kInertia = { 6.0, 6.0, 6.0 };
|
||||
bool m_bSoftVsRigidCollision = false;
|
||||
float m_fSoftVsRigidCollisionMargin = 0.f;
|
||||
bool m_bSelfCollision = false;
|
||||
float m_fSelfCollisionMargin = 0.f;
|
||||
float m_fStiffnessFrequency = 0.f;
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
#include "CoreMinimal.h"
|
||||
|
||||
class RLPhysicsCollisionShapeData
|
||||
{
|
||||
public:
|
||||
RLPhysicsCollisionShapeData() {}
|
||||
~RLPhysicsCollisionShapeData() {}
|
||||
|
||||
FString m_strName = "";
|
||||
bool m_bBoneActivate = false;
|
||||
bool m_bIsCCStdBoneAxis = false;
|
||||
FString m_strBoundType = "";
|
||||
FString m_strBoundAxis = "";
|
||||
float m_fMargin = 0.f;
|
||||
float m_fFriction = 0.f;
|
||||
float m_fElasticity = 0.f;
|
||||
|
||||
TArray< float > m_kWorldTranslate = { 0.0, 0.0, 0.0 };
|
||||
TArray< float > m_kWorldRotation = { 0.0, 0.0, 0.0, 0.0 };
|
||||
TArray< float > m_kWorldScale = { 0.0, 0.0, 0.0 };
|
||||
|
||||
TArray< float > m_kShapeLocalPosition = { 0.0, 0.0, 0.0 };
|
||||
TArray< float > m_kExtent = { 0.0, 0.0, 0.0 };
|
||||
float m_fRadius = 0.f;
|
||||
float m_fCapsuleLength = 0.f;
|
||||
};
|
||||
@@ -0,0 +1,160 @@
|
||||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
#include "AssetRegistryModule.h"
|
||||
#include "ObjectTools.h"
|
||||
#include "PackageTools.h"
|
||||
#include "CCImportUI.h"
|
||||
#include "Editor/UnrealEd/Classes/Factories/FbxFactory.h"
|
||||
#include "Editor/UnrealEd/Public/Editor.h"
|
||||
#include "Runtime/Engine/Classes/Engine/Selection.h"
|
||||
#include "Runtime/Engine/Classes/Materials/MaterialInstanceConstant.h"
|
||||
#include "Runtime/Engine/Classes/Engine/SkeletalMesh.h"
|
||||
#include "Runtime/JSon/Public/Dom/JsonObject.h"
|
||||
#include "RLTextureData.h"
|
||||
#include "RLMaterialData.h"
|
||||
#include "RLPhysicCollisionShapeData.h"
|
||||
#include "Runtime/Engine/Classes/Animation/Rig.h"
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
#include <functional>
|
||||
class FToolBarBuilder;
|
||||
class FMenuBuilder;
|
||||
class UClothingAssetCommon;
|
||||
class UClothLODDataBase;
|
||||
|
||||
class CMaterialType
|
||||
{
|
||||
public:
|
||||
CMaterialType( FString strMaterialName, FString strBoneType = "" );
|
||||
FString GetType() { return m_strMaterialType; }
|
||||
float GetTilingValue() { return m_fTilingValue; }
|
||||
|
||||
private:
|
||||
FString m_strMaterialType;
|
||||
float m_fTilingValue = 0.0f;
|
||||
};
|
||||
|
||||
enum class EShaderType
|
||||
{
|
||||
Teeth,
|
||||
Scalp,
|
||||
Eyelash,
|
||||
Eye,
|
||||
Tearline,
|
||||
Occulsion,
|
||||
Head,
|
||||
Skin,
|
||||
Hair,
|
||||
GeneralSSS,
|
||||
PBR,
|
||||
TRA,
|
||||
};
|
||||
|
||||
class FRLPluginModule : public IModuleInterface
|
||||
{
|
||||
public:
|
||||
|
||||
/** IModuleInterface implementation */
|
||||
virtual void StartupModule() override;
|
||||
virtual void ShutdownModule() override;
|
||||
|
||||
/** This function will be bound to Command. */
|
||||
void PluginButtonClicked();
|
||||
void AutoSetup( TArray<FAssetData>& kAssetDatas,
|
||||
FString strShaderType,
|
||||
TArray<FString>& kLODPathList,
|
||||
bool bIsDragFbx );
|
||||
bool CheckAutoSetupVersionPass( FString strJsonFilePath );
|
||||
|
||||
private:
|
||||
void AddToolbarExtension( FToolBarBuilder& kBuilder );
|
||||
void AddMenuExtension( FMenuBuilder& kBuilder );
|
||||
void CheckWorldGridMaterial(FString &strFbxName, FString &rootGamePath, FString ccMaterialFolderGamePath, UStaticMesh *pMesh, bool isMaterialInstance);
|
||||
bool CheckShaderTypeChange(FString &strfbxName, FString shaderType, USkeletalMesh *mesh, UMaterial* material, UMaterialInterface* MaterialInterface, RLMaterialData* pMaterialData, int slotID, FString &rootGamePath, bool isMaterialInstance, FString strBoneType );
|
||||
void DeleteTextureFile( const FString& strDeleteFloderPath, const FString& strCheckFolderPath );
|
||||
void ShowInfo( const FString& strMessage, const float& fExpireDuration );
|
||||
FString GetBoneType( const FAssetData& kAssetData );
|
||||
USkeleton* GetAssetSkeleton( const FAssetData& kAssetData );
|
||||
bool CreateFolder( FString &path );
|
||||
void CreateTexturesPathList( const FString &strRootGamePath, TArray <FString> &kTexturesPathList );
|
||||
void RemoveInvalidTexture( TMap< FString, RLMaterialData >& kMaterialMap, const FString& strTexturePath, const FString& strFbmTexturePath, TArray< FString >& kTexturesPathList );
|
||||
bool CheckTextureShouldImport( const FString& strFilePath, bool bPbr );
|
||||
#if ENGINE_MAJOR_VERSION <= 4 && ENGINE_MINOR_VERSION == 24
|
||||
bool RLPluginImportToLodInternal( USkeletalMesh* SourceMesh, int32 SourceLodIndex, int32 SourceSectionIndex, UClothingAssetCommon* DestAsset, UClothLODDataBase* DestLod, UClothLODDataBase* InParameterRemapSource );
|
||||
#endif
|
||||
FString GetMaterialPackagePath( const FString& strRootGamePath, const FString& strMaterialName, const FString& strFbxName, bool bIsMaterialInstance );
|
||||
void ReplaceMaterial( UMaterialInterface* pMaterialInterface, const FString &strPackagePath, std::function< void( UMaterialInterface* ) > fnReplaceMaterial );
|
||||
void DeleteUnrealMaterial( const FString &strSourceFolderPath, const FString &strTargetFolderPath, const FString &strFbxName, const FString &strRootGamePath, bool bIsMaterialInstance, std::function< void() > fnReplaceMeshMaterial );
|
||||
void DeleteDefaultSkeletalMaterial( const FString &strSourceFolderPath, const FString &strTargetFolderPath, const FString &strFbxName, const FString &strRootGamePath, USkeletalMesh *pMesh, bool bIsMaterialInstance );
|
||||
void DeleteDefaultStaticMaterial( const FString &strSourceFolderPath, const FString &strTargetFolderPath, const FString &strFbxName, const FString &strRootGamePath, UStaticMesh *pMesh, bool bIsMaterialInstance );
|
||||
|
||||
void MoveTextureFile( FString& strTargetFolderPath );
|
||||
void findLODGroupMaterialJson(TMap< FString, RLMaterialData > &kMaterialMap, FString &strFbxName, FString &strRootGamePath, USkeletalMesh *kMesh, bool bIsMaterialInstance);
|
||||
void findLODGroupMaterial(FString &rootGamePath, USkeletalMesh *mesh );
|
||||
void SetOrmTextureSetting( UMaterialInstanceConstant* pMaterialInstance, const FString& strTexturePath, const bool bSkin = false );
|
||||
void ProcessMaterialInstanceConstant( UMaterialInstanceConstant*& pMaterialInstance, UMaterial* pMaterial, UMaterialInterface* pMeshMaterialInterface, UMaterialInterface* pParentInterface, const FString& strCCMaterialFolderPath, std::function< void( UMaterialInstanceConstant* ) > fnMaterialSetting );
|
||||
void AssignMaterialInstanceJson( UMaterialInstanceConstant*& pInstUMaterialInterface,
|
||||
const FString& strMaterialName,
|
||||
RLMaterialData* pMaterialData,
|
||||
TArray <FString> & texturesPathList,
|
||||
UMaterial* material,
|
||||
UMaterialInterface* MaterialInterface,
|
||||
FString texturesFilesGamePath,
|
||||
FString texturesFilesGamePathFbm,
|
||||
FString ccMaterialFolderGamePath,
|
||||
const FString& strSubsurfaceProfilePath,
|
||||
FString boneType,
|
||||
FString shaderType );
|
||||
|
||||
void AssignGeneralSss( RLMaterialData* pMaterialData, TArray<FString> &kTexturesPathList, FString strTexturesFilesGamePathFbm, const FString& strMaterialName, FString texturesFilesGamePath, bool bIsHQSkin, const FString& strSubsurfaceProfilePath, FString strTexturePathToLoad, UMaterialInstanceConstant*& pInstUMaterialInterface, UMaterial* pMaterial, UMaterialInterface* pMaterialInterface, FString strCCMaterialFolderGamePath );
|
||||
|
||||
void PhysicIniPaser( FString iniPath );
|
||||
FString GetTexturePath( RLMaterialData *pMaterialData, const FString& strKey, const FString& strTexturesFolderPath, const FString& strMaterialName );
|
||||
void SetTextureParameter( RLMaterialData *pMaterialData, const FString& strKey, UMaterialInstanceConstant* pMaterialInstance );
|
||||
|
||||
void UpdateStaticParameter( UMaterialInstanceConstant* pMaterialInstance, const FString& strParameter, bool bEnable, bool bMarkChanged );
|
||||
void SetMultiUvIndex( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance );
|
||||
void SetBaseColor( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString strTexturesFilesGamePathsFbm[2], FString strMaterialName );
|
||||
void SetNormal( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString strTexturesFilesGamePathsFbm[2], FString strMaterialName );
|
||||
void SetSpecular( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString strTexturesFilesGamePathsFbm[2], FString strMaterialName, bool bIsPBR );
|
||||
void SetOpacity( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString strTexturesFilesGamePathsFbm[2], FString strMaterialName );
|
||||
void SetGlow( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString strTexturesFilesGamePaths[2], FString strMaterialName );
|
||||
void SetBlend( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString kTexturesFilesGamePaths[2], FString strMaterialName );
|
||||
void SetBlendToHairDepthMap( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString kTexturesFilesGamePaths[2], FString strMaterialName );
|
||||
void SetDisplacement( RLMaterialData* pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString strTexturesFilesGamePaths[2], FString strMaterialName );
|
||||
void SetAO( RLMaterialData *pMaterialData, UMaterialInstanceConstant* pMaterialInstance, TArray<FString> kTexturesPathList, FString strTexturesFilesGamePaths[2], FString strMaterialName );
|
||||
void SetRoughness( RLMaterialData *kMaterialData, UMaterialInstanceConstant* kMaterialInstance, TArray<FString> texturesPathList, FString texturesFilesGamePaths[2], FString materialName, bool isPBR );
|
||||
void SetMetallic( RLMaterialData *kMaterialData, UMaterialInstanceConstant* kMaterialInstance, TArray<FString> texturesPathList, FString texturesFilesGamePaths[2], FString materialName, bool isPBR );
|
||||
void CreateCollisionShape(FName strBoneName, FVector kBoundMin, FVector kBoundMax, FVector kScale, FVector kOffset, UBodySetup* pBodySetup, int nShapeType, int nBoundAxis);
|
||||
void CreateCollisionShapeFromData( RLPhysicsCollisionShapeData* pCollisionShapeData, UBodySetup* pBodySetup, const FTransform* kBoneParentWorldTransform );
|
||||
void CreateConstraint(FName strBoneName, int nBoneID, USkeletalMesh* pMesh, UPhysicsAsset* pPhysicsAsset);
|
||||
static bool SetShaderTextureSrgbCompression( UTexture* pTexture, FString strName );
|
||||
void SetShaderData( RLShaderData* pShaderData, UMaterialInstanceConstant* pMaterialInstance, const FString& strFolder );
|
||||
void SetScatter( const RLScatter* pScatter, UMaterialInstanceConstant* pMaterialInstance, const FString& strMaterialName, FString strSubsurfaceProfilePath, EShaderType eShaderType );
|
||||
|
||||
void GetShaderRenameMap( FString strMaterialName, EShaderType eType, RLShaderData* pShaderData, ENodeType eNodeType, TMap< FString, FString >& kRenameMap );
|
||||
void ParseJson( const FString& strJsonFilePath, FString& strGeneration, FString& strBoneType, bool& bSupportShaderSelect, TMap< FString, RLMaterialData >& kMaterialMap, TMap< FString, TArray<RLPhysicsCollisionShapeData> >& kCollisionShapeMap );
|
||||
void ParseJsonShaderData( TSharedPtr< RLMaterialData > spMaterialData, TSharedPtr< FJsonObject > spJsonObject, FString strMaterialName, FString strBoneType );
|
||||
void ParseJsonScatterData( TSharedPtr< RLMaterialData > spMaterialData, TSharedPtr< FJsonObject > spJsonObject );
|
||||
void ParseJsonPhysicsData( TSharedPtr<FJsonObject> spPhysicsRoot, TMap< FString, RLMaterialData >& kMaterialMap, TMap< FString, TArray<RLPhysicsCollisionShapeData> >& kCollisionShapeMap, bool bIsCCStdBoneAxis );
|
||||
|
||||
void ConvertEyeMaterialName( FString& strMaterialName );
|
||||
|
||||
|
||||
UObject* RLCreatePhysicsAsset( FName InAssetName, UObject* InParent, USkeletalMesh* SkelMesh );
|
||||
|
||||
FString GetMaterialTypeByName( FString strName );
|
||||
EShaderType GetShaderType( RLMaterialData* pMaterialData, FString strMaterialName, FString strBoneType );
|
||||
EShaderType GetPbrShaderType( const RLShaderData* pShaderData, FString strMaterialName, FString strBoneType );
|
||||
void UpdateWorld( int32 BoneIndex, FTransform ParentWorld, USkeleton* pSkeleton, const TArray<FTransform>& kBoneTransform, TArray<FTransform>& kBoneWorld );
|
||||
void CreatePhysicCollisionShape( UPhysicsAsset* pPhysicsAsset, USkeletalMesh* pMesh, USkeleton* pSkeleton, const TMap< FString, TArray<RLPhysicsCollisionShapeData> >& kCollisionShapeMap );
|
||||
void CreatePhysicSoftCloth( UPhysicsAsset* pPhysicsAsset, USkeletalMesh* pMesh, TMap< FString, RLMaterialData >& kMaterialMap );
|
||||
|
||||
TSharedPtr< class FUICommandList > m_kPluginCommands;
|
||||
static URig* m_pEngineHumanoidRig;
|
||||
bool m_bIsMaterialInstance = true;
|
||||
//FString const MATERIAL_FLODER_NAME = "RL_Materials";
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Framework/Commands/Commands.h"
|
||||
#include "RLPluginStyle.h"
|
||||
|
||||
class FRLPluginCommands : public TCommands<FRLPluginCommands>
|
||||
{
|
||||
public:
|
||||
|
||||
FRLPluginCommands()
|
||||
: TCommands<FRLPluginCommands>( TEXT( "RLPlugin" ),
|
||||
NSLOCTEXT( "Contexts", "RLPlugin", "RLPlugin Plugin" ),
|
||||
NAME_None,
|
||||
FRLPluginStyle::GetStyleSetName() )
|
||||
{
|
||||
}
|
||||
|
||||
// TCommands<> interface
|
||||
virtual void RegisterCommands() override;
|
||||
|
||||
public:
|
||||
TSharedPtr< FUICommandInfo > PluginAction;
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Styling/SlateStyle.h"
|
||||
|
||||
class FRLPluginStyle
|
||||
{
|
||||
public:
|
||||
|
||||
static void Initialize();
|
||||
|
||||
static void Shutdown();
|
||||
|
||||
/** reloads textures used by slate renderer */
|
||||
static void ReloadTextures();
|
||||
|
||||
/** @return The Slate style set for the Shooter game */
|
||||
static const ISlateStyle& Get();
|
||||
|
||||
static FName GetStyleSetName();
|
||||
|
||||
private:
|
||||
|
||||
static TSharedRef< class FSlateStyleSet > Create();
|
||||
|
||||
private:
|
||||
|
||||
static TSharedPtr< class FSlateStyleSet > StyleInstance;
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
#include "CoreMinimal.h"
|
||||
|
||||
class RLTextureData
|
||||
{
|
||||
public:
|
||||
RLTextureData() {}
|
||||
~RLTextureData() {}
|
||||
|
||||
FString m_strTexturePath = "";
|
||||
bool m_bShareImage = false;
|
||||
float m_fStrength = 100.f;
|
||||
TArray< float > m_kOffset = { 0.f, 0.f };
|
||||
TArray< float > m_kTiling = { 1.f, 1.f };
|
||||
float m_fTessellationLevel = 0.f;
|
||||
float m_fTessellationMulitiplier = 0.f;
|
||||
float m_fGrayScaleBaseValue = 0.f;
|
||||
FString m_strDisplacementMapType = "";
|
||||
FString m_strBlendMode = "Multiply";
|
||||
};
|
||||
Reference in New Issue
Block a user