(原) MaterialEditor部- UmateriaEditor中 Node編譯過程和使用(1)
@author: 白袍小道
轉載說明原處
插件同步在GITHUB: DaoZhang_XDZ
? ?
最後YY需求(手滑)
1、在理清楚基礎套路和細節後,自定義紋理資源,並加入到現有UE材質系統
2、制作一個簡單的快速預覽紋理在材質中的表現
3、輸入的紋理支持GIF、RAW 、或自定義格式,統一轉換到Utexture.並放入節點
? ?
效果:
一、源碼和API
1、Factory:
? ?
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)