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

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

mapi src lint 需求 入口 fma -s 一個 結果

@白袍小道

轉載說明原處

插件同步在GITHUB: DaoZhang_XDZ

? ?

需求:

1、梳理FexpressionInputOutput的編譯和鏈接(套路和邏輯目的)

2、如何做到節點編譯的驅動

3、增加自定義節點(CustomNode)

? ?

說明:

提交編輯:

一、UMaterial::PostEditChangeProperty

二、FMaterialCompile FHLSLMaterialTranslatormaterialmaterialInterface\Resouces)

? ?

首先是一個熟悉的入口

? ?

FMaterial::BeginCompileShaderMap

bool FMaterial::BeginCompileShaderMap(

const FMaterialShaderMapId& ShaderMapId,

EShaderPlatform Platform,

TRefCountPtr<FMaterialShaderMap>& OutShaderMap,

bool bApplyCompletedShaderMapForRendering)

? ?

技術分享圖片

? ?

FHLSLMaterialTranslator

最後的輸入收集

? ?

技術分享圖片

? ?

CompileProperty

這裏才是更具

Property進入屬性編譯部分

Ret = MaterialInterface->CompileProperty(Compiler, MP_EmissiveColor);

? ?

UMaterialInterface::CompileProperty

技術分享圖片

? ?

按照不同的輸入屬性表達式,進入CompileWith

技術分享圖片

? ?

FExpressionInput::Compile

這裏就到了真正節點邏輯

? ?

說明總結圖

技術分享圖片

節點的編譯:(樹形組合)

這種方式類似於 整個大的編譯,從結果反向到輸入,層層遞歸。(每個節點都會加入自身的編譯邏輯,並鏈接上下節點)

? ?

? ?

案例:

(未完待續, 先去做點東東)

一、MaterialExpressionAbs

? ?

二、MaterialExpressionTextureSample

? ?

? ?

三、MaterialExpressionFunction

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