ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

如何为 Magpie 编写自定义效果:MagpieFX HLSL 效果格式完全指南

2026/10/3 22:41:32 拓冰建站 浏览量
如何为 Magpie 编写自定义效果:MagpieFX HLSL 效果格式完全指南 如何为 Magpie 编写自定义效果MagpieFX HLSL 效果格式完全指南【免费下载链接】MagpieUnofficial experimental Magpie fork with colour-only DLSS, FSR2 and NVIDIA RTX Video integrations项目地址: https://gitcode.com/gh_mirrors/magpie27/MagpieMagpie 是一款开源的游戏画面增强工具支持 DLSS、FSR2 与 RTX Video 等色彩处理集成。它内置了一套基于 DirectX 11 计算着色器的自定义效果格式 MagpieFX——只要你了解 HLSL就能用纯文本文件为 Magpie 添加锐化、降噪、CRT 等任意画面效果。本文是一份面向新手的完整指南从效果文件结构、指令语法到参数、纹理与通道定义教你一步步写出可运行的自定义效果。为什么选择 MagpieFX 格式Magpie 的所有效果都存储在effects文件夹中本质上就是一批.hlsl文本文件。这意味着无需编译效果文件由 Magpie 在运行时自动加载和着色器编译纯文本友好用记事本就能编辑方便版本管理和分享指令式声明通过//!开头的注释指令声明参数、纹理和通道格式统一、易读官方文档 MagpieFX 是权威参考本文帮你把它的核心概念讲透。效果文件的整体结构一个完整的 MagpieFX 效果文件按以下顺序组织官方示例见 MagpieFX文件头指令//!MAGPIE EFFECT声明效果类型//!VERSION 4声明格式版本参数定义//!PARAMETER块定义用户可调的界面参数纹理定义//!TEXTURE块声明输入、输出和中间纹理采样器定义//!SAMPLER块通道定义//!PASS n块每个通道是一段 GPU 着色器代码官方内置的 Bicubic.hlsl 是一个绝佳的入门范本结构清晰且只有百余行//!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) { // 双三次插值逻辑…… } 建议直接克隆仓库后打开 src/Effects/ 目录里面有 FXAA、SMAA、CRT 等几十个现成效果可作参考。参数定义让效果拥有可调滑块每个//!PARAMETER块声明一个参数必须包含DEFAULT、MIN、MAX、STEP四项并用LABEL指定界面上显示的名称//!PARAMETER //!LABEL Sharpness //!GROUP Detail //!DEFAULT 0.1 //!MIN 0.01 //!MAX 5 //!STEP 0.01 float sharpness;几个实用技巧GROUP参数分组相同非空名称的参数会被归入同一个界面列列顺序按分组首次出现顺序排列。例如把多个细节相关参数都归入Detail组界面更整洁LABEL支持换行字面量\n会显示为换行适合较长标签参数在通道中像普通变量一样使用如paramB在 Bicubic.hlsl 中直接参与权重计算纹理定义INPUT 与 OUTPUT 是特殊关键字纹理通过//!TEXTURE声明其中INPUT和OUTPUT是特殊关键字//!TEXTURE Texture2D INPUT; //!TEXTURE //!WIDTH INPUT_WIDTH * 2 //!HEIGHT INPUT_HEIGHT * 2 Texture2D OUTPUT;关键规则来自 MagpieFX 文档INPUT不能作为任何通道的输出OUTPUT不能作为通道的输入只有最后一个通道可以写OUTPUT且最后一个通道只能写OUTPUTOUTPUT的WIDTH/HEIGHT决定此效果的输出尺寸不指定则支持任意输出尺寸尺寸计算可用预定义常量INPUT_WIDTH、INPUT_HEIGHT、OUTPUT_WIDTH、OUTPUT_HEIGHT中间纹理可以指定FORMAT如R8G8B8A8_UNORM和偏移尺寸还支持从文件加载纹理BMP、PNG、JPG、DDS//!TEXTURE //!SOURCE test.png Texture2D testTex;通道定义效果的真正计算逻辑每个//!PASS n块是一个 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); }两种通道风格指令作用入口签名//!STYLE PS像素着色器风格默认 CSMF4 PassN(float2 pos)pos 为归一化坐标//!STYLE CS默认计算着色器风格void PassN(uint2 blockStart, uint3 threadId)//!IN声明通道输入纹理可多个//!OUT声明输出PS 风格下可指定多个输出实现多渲染目标MRT最多 8 个BLOCK_SIZE和NUM_THREADS控制每次 dispatch 的处理区域与并行线程数预定义函数与宏省掉样板代码MagpieFX 内置了一批辅助函数完整列表见 MagpieFX 文档无需自己实现GetInputSize()/GetOutputSize()获取输入/输出纹理尺寸GetInputPt()/GetOutputPt()获取每个像素的坐标步长GetScale()获取输出相对输入的缩放比Rmp8x8(id)8x8 坐标 swizzle 映射提升纹理缓存命中率MulAdd(x, y, a)比mul(x, y) a更快的融合运算机器学习类效果如 Anime4K常用需先声明//!USE MulAdd预定义类型MF、MF2、MF4等会随 FP16 能力自动切换为float或min16float别名写效果时优先用MF4而不是裸float4可以免费获得半精度支持。若需声明 FP16 能力在文件头加//!CAPABILITY FP16即可是否生效取决于用户配置。让效果被正确识别细节清单写完效果后检查以下几点避免踩坑文件头两行不可少//!MAGPIE EFFECT和//!VERSION 4否则不会被识别为效果最后一个通道必须且只能输出到OUTPUT减少 IDE 报错加上#include StubDefs.hlsli可选但能显著改善编辑器体验该文件提供了预定义函数的桩定义见 StubDefs.hlsli排序名称可用//!SORT_NAME test1指定效果在列表中的排序名否则按文件名排序放入 effects 文件夹把.hlsl文件放进 Magpie 安装目录下的effects文件夹可参考内置效果的存放方式见 Effects.vcxproj 的部署规则重启后在「效果组」→「添加效果器」中即可看到它学习路线建议先读懂 Bicubic.hlsl参数 单通道 PS 风格最简完整闭环再看 Deband.hlsl 与 CRT 着色器src/Effects/CRT/体验中间纹理和BLOCK_SIZE用法进阶参考 Anime4K/ 系列多通道 MulAdd FP16 的组合拳查阅 内置效果介绍 了解每个内置效果的输出尺寸与参数含义掌握以上格式后你已可以着手自己的第一个 MagpieFX 效果。更多细节请以官方 MagpieFX 文档 为准。【免费下载链接】MagpieUnofficial experimental Magpie fork with colour-only DLSS, FSR2 and NVIDIA RTX Video integrations项目地址: https://gitcode.com/gh_mirrors/magpie27/Magpie创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考