
如何為 Magpie 編寫自定義效果MagpieFX HLSL 效果格式完全指南【免費(fèi)下載鏈接】MagpieUnofficial experimental Magpie fork with colour-only DLSS, FSR2 and NVIDIA RTX Video integrations項(xiàng)目地址: https://gitcode.com/gh_mirrors/magpie27/MagpieMagpie 是一款開源的游戲畫面增強(qiáng)工具支持 DLSS、FSR2 與 RTX Video 等色彩處理集成。它內(nèi)置了一套基于 DirectX 11 計(jì)算著色器的自定義效果格式 MagpieFX——只要你了解 HLSL就能用純文本文件為 Magpie 添加銳化、降噪、CRT 等任意畫面效果。本文是一份面向新手的完整指南從效果文件結(jié)構(gòu)、指令語(yǔ)法到參數(shù)、紋理與通道定義教你一步步寫出可運(yùn)行的自定義效果。為什么選擇 MagpieFX 格式Magpie 的所有效果都存儲(chǔ)在effects文件夾中本質(zhì)上就是一批.hlsl文本文件。這意味著無(wú)需編譯效果文件由 Magpie 在運(yùn)行時(shí)自動(dòng)加載和著色器編譯純文本友好用記事本就能編輯方便版本管理和分享指令式聲明通過//!開頭的注釋指令聲明參數(shù)、紋理和通道格式統(tǒng)一、易讀官方文檔 MagpieFX 是權(quán)威參考本文幫你把它的核心概念講透。效果文件的整體結(jié)構(gòu)一個(gè)完整的 MagpieFX 效果文件按以下順序組織官方示例見 MagpieFX文件頭指令//!MAGPIE EFFECT聲明效果類型//!VERSION 4聲明格式版本參數(shù)定義//!PARAMETER塊定義用戶可調(diào)的界面參數(shù)紋理定義//!TEXTURE塊聲明輸入、輸出和中間紋理采樣器定義//!SAMPLER塊通道定義//!PASS n塊每個(gè)通道是一段 GPU 著色器代碼官方內(nèi)置的 Bicubic.hlsl 是一個(gè)絕佳的入門范本結(jié)構(gòu)清晰且只有百余行//!MAGPIE EFFECT //!VERSION 4 #include StubDefs.hlsli //!PARAMETER //!LABEL B //!DEFAULT 0.33 //!MIN 0 //!MAX 1 //!STEP 0.01 float paramB; //!TEXTURE Texture2D INPUT; //!TEXTURE Texture2D OUTPUT; //!SAMPLER //!FILTER LINEAR SamplerState sam; //!PASS 1 //!STYLE PS //!IN INPUT //!OUT OUTPUT float4 Pass1(float2 pos) { // 雙三次插值邏輯…… } 建議直接克隆倉(cāng)庫(kù)后打開 src/Effects/ 目錄里面有 FXAA、SMAA、CRT 等幾十個(gè)現(xiàn)成效果可作參考。參數(shù)定義讓效果擁有可調(diào)滑塊每個(gè)//!PARAMETER塊聲明一個(gè)參數(shù)必須包含DEFAULT、MIN、MAX、STEP四項(xiàng)并用LABEL指定界面上顯示的名稱//!PARAMETER //!LABEL Sharpness //!GROUP Detail //!DEFAULT 0.1 //!MIN 0.01 //!MAX 5 //!STEP 0.01 float sharpness;幾個(gè)實(shí)用技巧GROUP參數(shù)分組相同非空名稱的參數(shù)會(huì)被歸入同一個(gè)界面列列順序按分組首次出現(xiàn)順序排列。例如把多個(gè)細(xì)節(jié)相關(guān)參數(shù)都?xì)w入Detail組界面更整潔LABEL支持換行字面量\n會(huì)顯示為換行適合較長(zhǎng)標(biāo)簽參數(shù)在通道中像普通變量一樣使用如paramB在 Bicubic.hlsl 中直接參與權(quán)重計(jì)算紋理定義INPUT 與 OUTPUT 是特殊關(guān)鍵字紋理通過//!TEXTURE聲明其中INPUT和OUTPUT是特殊關(guān)鍵字//!TEXTURE Texture2D INPUT; //!TEXTURE //!WIDTH INPUT_WIDTH * 2 //!HEIGHT INPUT_HEIGHT * 2 Texture2D OUTPUT;關(guān)鍵規(guī)則來自 MagpieFX 文檔INPUT不能作為任何通道的輸出OUTPUT不能作為通道的輸入只有最后一個(gè)通道可以寫OUTPUT且最后一個(gè)通道只能寫OUTPUTOUTPUT的WIDTH/HEIGHT決定此效果的輸出尺寸不指定則支持任意輸出尺寸尺寸計(jì)算可用預(yù)定義常量INPUT_WIDTH、INPUT_HEIGHT、OUTPUT_WIDTH、OUTPUT_HEIGHT中間紋理可以指定FORMAT如R8G8B8A8_UNORM和偏移尺寸還支持從文件加載紋理BMP、PNG、JPG、DDS//!TEXTURE //!SOURCE test.png Texture2D testTex;通道定義效果的真正計(jì)算邏輯每個(gè)//!PASS n塊是一個(gè) GPU 通道。以雙通道效果為例//!PASS 1 //!DESC First Pass //!STYLE PS //!IN INPUT //!OUT tex1 MF4 Pass1(float2 pos) { return MF4(1, 1, 1, 1); } //!PASS 2 //!IN INPUT, tex1 //!OUT OUTPUT //!BLOCK_SIZE 16, 16 //!NUM_THREADS 64, 1, 1 void Pass2(uint2 blockStart, uint3 threadId) { OUTPUT[blockStart] MF4(1, 1, 1, 1); }兩種通道風(fēng)格指令作用入口簽名//!STYLE PS像素著色器風(fēng)格默認(rèn) CSMF4 PassN(float2 pos)pos 為歸一化坐標(biāo)//!STYLE CS默認(rèn)計(jì)算著色器風(fēng)格void PassN(uint2 blockStart, uint3 threadId)//!IN聲明通道輸入紋理可多個(gè)//!OUT聲明輸出PS 風(fēng)格下可指定多個(gè)輸出實(shí)現(xiàn)多渲染目標(biāo)MRT最多 8 個(gè)BLOCK_SIZE和NUM_THREADS控制每次 dispatch 的處理區(qū)域與并行線程數(shù)預(yù)定義函數(shù)與宏省掉樣板代碼MagpieFX 內(nèi)置了一批輔助函數(shù)完整列表見 MagpieFX 文檔無(wú)需自己實(shí)現(xiàn)GetInputSize()/GetOutputSize()獲取輸入/輸出紋理尺寸GetInputPt()/GetOutputPt()獲取每個(gè)像素的坐標(biāo)步長(zhǎng)GetScale()獲取輸出相對(duì)輸入的縮放比Rmp8x8(id)8x8 坐標(biāo) swizzle 映射提升紋理緩存命中率MulAdd(x, y, a)比mul(x, y) a更快的融合運(yùn)算機(jī)器學(xué)習(xí)類效果如 Anime4K常用需先聲明//!USE MulAdd預(yù)定義類型MF、MF2、MF4等會(huì)隨 FP16 能力自動(dòng)切換為float或min16float別名寫效果時(shí)優(yōu)先用MF4而不是裸float4可以免費(fèi)獲得半精度支持。若需聲明 FP16 能力在文件頭加//!CAPABILITY FP16即可是否生效取決于用戶配置。讓效果被正確識(shí)別細(xì)節(jié)清單寫完效果后檢查以下幾點(diǎn)避免踩坑文件頭兩行不可少//!MAGPIE EFFECT和//!VERSION 4否則不會(huì)被識(shí)別為效果最后一個(gè)通道必須且只能輸出到OUTPUT減少 IDE 報(bào)錯(cuò)加上#include StubDefs.hlsli可選但能顯著改善編輯器體驗(yàn)該文件提供了預(yù)定義函數(shù)的樁定義見 StubDefs.hlsli排序名稱可用//!SORT_NAME test1指定效果在列表中的排序名否則按文件名排序放入 effects 文件夾把.hlsl文件放進(jìn) Magpie 安裝目錄下的effects文件夾可參考內(nèi)置效果的存放方式見 Effects.vcxproj 的部署規(guī)則重啟后在「效果組」→「添加效果器」中即可看到它學(xué)習(xí)路線建議先讀懂 Bicubic.hlsl參數(shù) 單通道 PS 風(fēng)格最簡(jiǎn)完整閉環(huán)再看 Deband.hlsl 與 CRT 著色器src/Effects/CRT/體驗(yàn)中間紋理和BLOCK_SIZE用法進(jìn)階參考 Anime4K/ 系列多通道 MulAdd FP16 的組合拳查閱 內(nèi)置效果介紹 了解每個(gè)內(nèi)置效果的輸出尺寸與參數(shù)含義掌握以上格式后你已可以著手自己的第一個(gè) MagpieFX 效果。更多細(xì)節(jié)請(qǐng)以官方 MagpieFX 文檔 為準(zhǔn)?!久赓M(fèi)下載鏈接】MagpieUnofficial experimental Magpie fork with colour-only DLSS, FSR2 and NVIDIA RTX Video integrations項(xiàng)目地址: https://gitcode.com/gh_mirrors/magpie27/Magpie創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考