调试与验证
排查着色器编译错误、分析 mmdx12.log 日志、使用命令行验证工具 pack_check.exe 以及自动化无头测试方法。
处理着色器编译错误
在编写 HLSL 遇到拼写错误或类型不匹配时,MMDX12 具备完善的容错保护机制:
- 平滑安全回退:发生编译报错的角色模型会立即自动切换回 MMD 原生着色,确保软件界面与视口不会崩溃闪退。
- 全局通知栏:主视口上方将弹出显眼的红色警告通知。
- 软件内诊断面板:点击顶部导航栏的“셰이더(着色器)”标签页,该包的状态会显示为“컴파일 오류(编译错误)”,右侧检查器面板会完整列出 DXC 编译器的原生错误日志。
- 定位日志文件:查看与
MMDX12.exe同目录生成的mmdx12.log,搜索以[E]开头的报错行,即可精准定位出错的文件名与具体代码行号:[E] surface.hlsl:48:12: error: no matching function for call to 'smoothstep'
独立验证工具:pack_check.exe
随 MMDX12.exe 一同分发的 pack_check.exe 是一个专门用于离线检验着色器包完整性的独立命令行工具,无需打开图形界面即可运行。
命令行语法
pack_check.exe <包目录或包.zip> [--compile]
检查要点
- 清单语法:校验
pack.json必填项(version、name)、ID 命名规范、参数上限(最多 16 个)以及材质分类语法。 - 文件体积与安全约束:确保解压总体积不超过 32 MB、文件总数不超过 200 个、无非法文件扩展名及软硬链接。
- 离线编译验证(
--compile):直接调用 DXC 编译器对光栅化与光追着色器进行语法及语义编译测试。
退出代码与 CI 自动化
0:校验通过,未发现问题。1:检测到错误或规范违例。
该工具非常适合集成至 GitHub Actions 或各类持续集成(CI)自动化流水线中,用于在提交 PR 时自动把关质量:
# CI 脚本配置示例
pack_check.exe ./my_pack --compile
if [ $? -ne 0 ]; then
echo "着色器包验证失败"
exit 1
fi
模板生成与热重载流
- 在软件着色器管理器中点击“새 팩 만들기(新建包)”,从官方模板快速脚手架工程。
- MMDX12 在后台持续监听激活包所在的文件夹。
- 只要在代码编辑器中保存
pack.json、*.hlsl、*.hlsli或预览图片,软件便会立即清除旧缓存并在毫秒级内完成静默重编译。 - 开发者只需在编辑器中按下
Ctrl + S,即可在旁侧的 MMDX12 视口中实时预览光影改动。
无头渲染捕获测试(Headless Mode)
无需手动进入 UI,可通过命令行让 MMDX12 自动播放指定动作并截取特定帧画面输出为图片:
MMDX12.exe --character "ModelName" --song "SongName" --autoplay --shader-pack my_pack --frames 600 --capture out.png
程序会在运行至第 600 帧时自动将视口保存为 out.png 并安静退出,十分便于在持续集成中进行着色前后的图像视觉比对。