Hugo-Dz/spritefusion-sprite-normals
多媒体与设计从像素精灵图和动画序列帧生成法线贴图,让 2D 美术能响应动态光照。
解决什么问题
2D 精灵图只要有了法线贴图,就能被移动光源照亮,这是大多数像素风 2.5D 观感的来源。麻烦在于制作法线:要么美术逐帧手绘,要么用通用的图片转法线滤镜,后者会把像素边缘糊成渐变,结果和像素网格对不齐,于是很多小团队干脆放弃法线。这个项目从精灵图本身的轮廓和明暗推算出法线,保持原始像素分辨率和透明通道,并能为动画序列帧逐帧生成。
有什么不同
常见做法是引擎插件或通用图像转换工具。引擎侧插件方便,但把资产管线绑死在某个引擎上;通用法线滤镜把精灵图当照片处理,像素边界会被抹平。这个工具在原像素尺度上工作,把「轮廓体积」和「绘制明暗细节」拆成两个独立参数,动画输入会输出法线图集、同布局的彩色图集和一份帧信息 JSON,而不只是单张图。它同时提供 Rust CLI 和 WASM 模块,共用同一套生成器和动画解码,因此可以在构建脚本里批量跑,也可以在浏览器里跑。输入支持 GIF、APNG,并保留逐帧时长。
适合谁
做带动态光照的 2D 像素游戏的开发者,尤其是没有技术美术帮忙手绘法线的独立开发者和小工作室。它适合把法线生成作为批量步骤放进资产管线,例如对一个 PNG 目录一次性出图。需要精确手工控制每个面的人还是继续手绘;要处理高分辨率手绘或 3D 渲染图法线的团队不适合,因为它依据的是像素轮廓与明暗,而不是雕出来的几何。
上手成本
CLI 需要 Rust 1.85 或更新版本自行编译,也可以直接用在线版和 API。WASM 路线要装 wasm32-unknown-unknown target 和指定版本的 wasm-bindgen CLI。输入限制为 64 MiB、约 419 万像素,动画额外限制 256 帧,精灵图够用,大图集不行。README 自己点明了主要风险:法线是从颜色和形状估算的,画上去的高光可能被误当成表面起伏,法线贴图在引擎里必须关闭 sRGB 采样。项目是 MIT 协议,但诞生只有几天,参数默认值大概率还会调整。
点评
这是 2026 年 10 月下旬才创建的新项目,已经累计 658 star,并在 Rust 榜单上以日均约 120 star 的速度冲到第 8 位,属于短期爆发而非长期积累。定位很窄但确实有用,CLI 与 WASM 双形态对资产管线也合理,不过 README 没有任何证据说明它能处理「美术上正确的起伏」这个更难的问题。当前热度代表关注度,不代表成熟度:API、默认值和输出约定都可能变。如果已经在做带光照的像素游戏,可以先拿一个动画试跑;要进生产构建,建议再等一两个版本。
本文由 AI 根据项目 README 生成,更新于 2026年10月25日,以项目官方文档为准。