1. 程式人生 > >(原) MaterialEditor部- UmateriaEditor中 Node編譯過程和使用(1)

(原) MaterialEditor部- UmateriaEditor中 Node編譯過程和使用(1)

預覽 style add texture create 表現 class editor ask

@author: 白袍小道

轉載說明原處

插件同步在GITHUB: DaoZhang_XDZ

? ?

最後YY需求(手滑)

1、在理清楚基礎套路和細節後,自定義紋理資源,並加入到現有UE材質系統

2、制作一個簡單的快速預覽紋理在材質中的表現

3、輸入的紋理支持GIF、RAW 、或自定義格式,統一轉換到Utexture.並放入節點

? ?

效果:

技術分享圖片

一、源碼和API

1Factory:

技術分享圖片

? ?

2、FExpressionOutput 和 FExpressionInput

(Unreal的 Anim ,MAT 設計上 采用了倒著獲取結果,結果的產生[理解為Node]和遞歸。

並將Node作為存放邏輯的部分,這個方式可以運用到其他地方如任務系統,導航點等)

? ?

UObject* UMaterialFactoryNew::FactoryCreateNew(UClass* Class,UObject* InParent,FName Name,EObjectFlags Flags,UObject* Context,FFeedbackContext* Warn)

{

UMaterial* NewMaterial = NewObject<UMaterial>(InParent, Class, Name, Flags);

? ?

if ( InitialTexture != nullptr )

{

// An initial texture was specified, add it and assign it to the BaseColor

UMaterialExpressionTextureSample* TextureSampler = NewObject<UMaterialExpressionTextureSample>(NewMaterial);

{

//這裏是編輯記錄

TextureSampler->MaterialExpressionEditorX = -250;

TextureSampler->Texture = InitialTexture;

//紋理類型

TextureSampler->AutoSetSampleType();

}

? ?

NewMaterial->Expressions.Add(TextureSampler);

? ?

//FExpressionInput/OutPut 是表達式邏輯節點輸入的抽象

FExpressionOutput& Output = TextureSampler->GetOutputs()[0];

FExpressionInput& Input = (TextureSampler->SamplerType == SAMPLERTYPE_Normal)

? (FExpressionInput&)NewMaterial->Normal

: (FExpressionInput&)NewMaterial->BaseColor;

? ?

Input.Expression = TextureSampler;

Input.Mask = Output.Mask;

Input.MaskR = Output.MaskR;

Input.MaskG = Output.MaskG;

Input.MaskB = Output.MaskB;

Input.MaskA = Output.MaskA;

? ?

NewMaterial->PostEditChange();

}

? ?

return NewMaterial;

}

? ?

二、模擬實現:

UFUNCTION(BlueprintCallable,Category= "MaterialStudio|MatNodeLib")

static UMaterial* QuickPreviewTextureOnMaterialBNode(const UTexture* pTexture,const UMaterial* pMaterial);

? ?

其中:

Color ,Scale,Vector

技術分享圖片

? ?

第一節Over

(原) MaterialEditor部- UmateriaEditor中 Node編譯過程和使用(1)