惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
V
V2EX
IT之家
IT之家
J
Java Code Geeks
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
GbyAI
GbyAI
D
Docker
S
Secure Thoughts
Recent Announcements
Recent Announcements
Webroot Blog
Webroot Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
博客园_首页
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Security Archives - TechRepublic
Security Archives - TechRepublic
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
I
InfoQ
Last Week in AI
Last Week in AI
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
W
WeLiveSecurity
T
Troy Hunt's Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Attack and Defense Labs
Attack and Defense Labs
美团技术团队
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Scott Helme
Scott Helme
T
Tor Project blog
Know Your Adversary
Know Your Adversary
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
C
Cyber Attacks, Cyber Crime and Cyber Security
AI
AI
G
Google Developers Blog

静观小窗

博客俱乐部,最有社区氛围的中文博客联盟 文化决定语言,语言决定思想:我们赖以生存的隐喻(读后感) 我开发了一款博客图片压缩工具,支持PicGo一键压缩上传 寻找网络友邻 整合全网102个二次元动漫随机图片API接口,2025年十月最新 宋代的遗憾 搭建个人起始网站,便于控制浏览器使用和时间规划 Google Gemini CLI 免费安装配置指南:支持Gemini 2.5 Pro (2025最新) NixOS深度评测:一个六年Linux用户的初体验,为何惊艳的设计哲学仍让我望而却步 我的NS2使用体验记录,为什么因为马里奥派对空前盛会入坑 关于秦制的个人理解,为什么秦制在我看来是功过鲜明的必然 拜访一个人,在千年之后 Vercel/Netlify国内加速:EdgeOne免费CDN优选IP实战指南 C/C++程序员必看:JavaScript核心概念深度解析(动态类型、原型链、事件循环) C/C++程序员转向JavaScript:一份超详细的语法映射与避坑指南 从C++到JS:函数、this与闭包的核心差异与实践指南 VSCode配置JavaScript开发环境:Node.js安装与调试指南 C/C++程序员必看:JavaScript变量与作用域深度解析(从var到const) 博客迁移实战:从WordPress到Next.js的零成本高性能之路 《原则》读书笔记:如何将瑞·达利欧的智慧应用到日常 MATLAB入门教程:面向C++/OIer的数据可视化与科学计算指南 LaTeX公式与三线表教程:从入门到精通的排版指南 软路由远程访问提速:SMB压缩与50M上行优化实战 Hyprland 安装与配置超详细教程 (Arch Linux):含 Waybar 及一键脚本 Linux文件系统与磁盘分区:从入门到精通的实战指南 Guide to Installing a USB WiFi Adapter on OpenWrt (LuCI) 阿里云CentOS 9服务器从零到一:安全配置与宝塔面板安装指南 WordPress个人博客搭建指南:从服务器到主题美化全攻略 Arch/Windows双系统终极指南:无缝鼠标共享与显卡配置 NAS怎么选?黑群晖、CentOS自建与绿联NAS深度对比与选型指南 Arch Linux 安装 KDE Plasma 6:一篇来自老用户的深度评测(2025版) 我的第一份Ubuntu安装与美化笔记(新手超详细避坑指南)
一个有趣的项目背后的难点--MC的3D皮肤生成器 power by Qwen
间窗 (Vindo) · 2026-06-21 · via 静观小窗

这是一篇技术复盘。我很多记录的内容现在看起来和项目已经不一样了,项目还在继续前进。

一、方块人

我在「开往」——某知名独立博客的 webring——上面慢慢翻,翻到某位大佬的个人主页。页面角落里挂着一个会动的 Minecraft 形象,身体轻轻晃,鼠标移过去,它还会挥挥手。

我盯着看了挺久。

那一刻,我就想自己也做一个。而且现在博客的技术门槛已经很低了,很多写博客的人并不是学计算机的——所以我想做的是这么一个东西:让不会建模、不懂贴图、也不碰代码的人,随手打一句话,就能有一个会动的、属于自己的方块小人。

(那个主页地址我后来忘了,等找到再回来补上。)

这个项目就是我们现在要讲的内容。

二、Minecraft

一开始我当然也想过做真正的 3D 角色,但很快就放下了,太难。一个能看的 3D 二次元角色,背后是大量的训练和建模,我一个人靠开源的那些轮子是拼不出来的——就算硬拼,拼出来的东西大概也没人愿意往自己主页上放。而且如果需要训练的话,能用的大概率是3D 动漫的角色,感觉这种风格也不适合往博客里面放,如果是二游的模型,各家的风格也不统一,而且数量太少了,而且模型训练本身是彻底的三维。

那为什么是 MC 呢?

方块、像素贴图,这些东西我们都见过太多遍了。也正因为它从一开始就是粗糙的,你反而不会拿"像不像"去苛求它。一个 3D 角色,差那么一点点,就掉进恐怖谷里;可 MC 不会,只要配色和轮廓对上,剩下的部分,看的人会自己在脑子里补完——"哦,这是 XX"。

还有就是,它真的很轻。一个完整的 MC 角色,说到底不过是一张 64×64 的贴图,套在一副固定的方块骨架上。这么小的东西,直接放进网页里就能跑起来,不需要后端,也不需要什么渲染农场,浏览器自己就转得动。

于是目标就清楚了:AI 生成 MC 皮肤 → 一键导出 → 嵌进个人网页。

后来我越想越觉得,选 MC 并不是退而求其次。它本来就合适。

三、四条路(走不通)

这些内容大概是整个项目里我自己最想讲的。

第一条:把立绘直接缩放、模糊,再投影到皮肤上。 听起来最直觉的一条路,结果是一团糊。因为立绘的空间排布,根本不等于皮肤的 UV 展开排布。立绘是"一个站着的人",皮肤是被拆开摊平的六面体;你把站着的人直接贴到 UV 上、再下采样,得到的只是一张缩小的立绘,而不是一张合法的皮肤。脸甚至可能跑到胳膊上去。

第二条:先让 AI 把立绘标准化成三视图,再做对应。 得到的是一个空空的躯干。三视图是有了,可它和 UV 之间还隔着一层,AI 还是不知道哪一块该填到哪里去。

第三条:让 AI 直接从三视图生成模型,再做细节对应。 没做出来。这一步,我、还有当时那些开源工具现在的能力还是做不到。

**第四条……**其实到这里,我已经有点想放弃了。三条路全死,而且死法各不相同,你甚至不知道下一步该往哪个方向走。

那几天我没怎么写代码。我在做一件挺笨的事:一张一张地,用眼睛看皮肤。

四、百 skins

看着看着,我发现了一件事,一件让整个项目重新活过来的事——

二次元角色的造型,其实高度同质化。

胸前的领结、缎带,好多角色都有(胡桃有,狂三也有);头发也常常用两个颜色做对照,拉出层次;帽子、手部的装饰、配色之间的色差……几乎都有迹可循。看得越多,越觉得这些角色像是从有限的那么几套模板里长出来的。

因为它意味着,我根本不需要从零去合成一张皮肤。我只要在现成的皮肤库里,找一张结构最接近的,复用它的"形状",再换上你这个角色的配色,把它自带的配饰重绘一下,就够了。

效果一下子就对了。

同质化虽然老是被二游玩家吐槽,但是今天真的救了我的命。

五、只"读"

路线清楚之后,管线也就成型了。一张立绘进来,它会走这么几步:

  1. 客户端先做一次确定性采样,取出立绘上的几个大色块——肤色、发色、上装、下装。
  2. 接着 Qwen3-VL 读图,补上采样拿不到的身份信息:眼睛颜色、标志性配饰、发色修正,还有结构判断——性别、下装是裙还是裤。
  3. 发色校准。采样器偶尔会手滑,抓到描边的黑色,这时候改信 VLM
  4. 按"结构"去皮肤库里检索一张最接近的现成皮肤,作为基底。
  5. 在基底上重上色 + 重绘配饰
  6. 绑骨、加动画,输出 GLB。

最后得到的,是一个绑好骨骼、带 idle / walk / run / wave 四套动画的 GLB,由我自己写的 <skinmint-model> Web 组件来渲染。

我想专门说说,在这一版里 AI 到底处在什么位置——因为它和大多数人想象的"AI 生成",几乎是反过来的。

在目前这一版里,AI 是配角,不是画师。

它做的事情只有"读图":这个角色眼睛是什么颜色、有没有戴帽子、下装是裙还是裤。皮肤本身,是检索加重上色得到的,跟 AI 画不画没有关系。

为什么不让它画?因为前面那几条死路,本质上就是在让它画,而结果是慢、费 token,还很不稳定——今天给你一张能看的,明天可能就给你一张认不出来的。换成只让它读图之后,整条管线一下就快了、也稳了,哪怕没有 token、模型暂时用不上,它也能优雅地降级继续跑,顶多少补几个身份上的细节。

读图这件事,它做得又快又准。至于画,我其实从一开始就没太指望。

六、认形

有一句话,差不多是整个项目的地基:

在"重上色"这条路上,基底皮肤的颜色无所谓——反正都要重画。真正重要的,是它的形状。

想通这一句,检索的逻辑就顺了。我排序的时候,根本不看颜色像不像,只看结构:

  • 性别是硬过滤。拿一个男性基底去套女性角色,是重上色救不回来的——剪影、比例都会错。这种直接淘汰。
  • 覆盖率、刘海、裙还是裤,是软惩罚。差一点,扣一点分,还能用。
  • 颜色相似度呢?只在最后,当一个很微弱的"平局决胜"。两个基底结构一样好,才轮到看谁的颜色更近一点。

这套排序,其实是被前面四条死路一点点逼出来的。一旦你接受"形状是骨、颜色是皮"这个前提,很多纠结也就慢慢散了——你不会再去找"一张颜色像的",而是去找"一张穿得像的"。

七、它现在能做到哪儿,又到哪儿为止

现在 SkinMint 即将上线了。造一个角色,有三种方式:

  • 选一个已知角色 → 直接给你一张手工皮肤;
  • 上传一张立绘 → 自动生成皮肤;
  • 打一段文字 → AI 先画立绘,再生成皮肤。

第一种最省心,给到的就是手工皮肤——社区里大佬手搓的那种,质量基本就是天花板了:

一张社区大佬手搓的手工皮肤,质量是天花板级别

我自己最喜欢的,是输出之后的那一步:你不只是下载一张皮肤或一个 GLB,还可以用 <skinmint-model> 这个 Web 组件,用几行代码,把"会动的自己"放进你的 Next.js,或者任何一个个人网页里。就像我最初在「开往」上看到的那位大佬那样——一个在你主页角落里轻轻晃动、偶尔向你挥手的,你。

工程上,它是 npm的包,九个包一起构建;视觉语言定在了 Risograph 风格(纸感、钴蓝、番茄红、黑描边),整站看上去是一套东西。代码我都放在 GitHub 上 了,想看看 <skinmint-model> 具体怎么接、或者好奇前面那套检索逻辑是怎么写的,都可以去翻。

它也有很清楚的边界,这些我想如实写下来:

  • 基底库就这么多张。它没办法同时满足所有结构维度——覆盖率、刘海、裙裤、剪影,顾了这头,常常就丢了那头,说到底还是个打地鼠。
  • 配饰能定位、能重画,但形状是基底的。基底自己没有的造型,重上色是凭空加不出来的。如果你的角色有一个很独特的头饰,而库里又没有结构接近的,那它也只能给你一个近似的样子。
  • VLM 会带来 1~3 秒的延迟。没有 token 的时候会优雅降级,但那一版,就少了点身份细节。

所以它并不能复刻一个角色。它能给你的,是一张配色正确、轮廓大致对、眼睛和配饰也没认错的、干净的皮肤。这已经挺好用了,但离"就是本人"还差着一段——而这段距离,短期内补不上。

放两张它自己产出的皮肤。状态好的时候,是这样:

SkinMint 正常发挥时产出的一张皮肤

不太走运的时候,也会糊成这样,脸上的五官都对不齐:

SkinMint 没发挥好时产出的皮肤,五官糊在一起

八、打地鼠的尽头,训练

不训练、纯靠手调启发式,最后一定会变成 whack-a-mole:刚改好左边,右边又塌了。我在这上面耗了很久。

中间有一段挺有意思的:我挂了一个会自动跑的 Claude,让它对着训练集,自己去调参数(没想到这套素材,会在这儿提前派上用场);又让它对照大佬做的原神皮肤,自己设标准、打分、再改进——其实就是借了强化学习里那套"对着目标反复打分、再迭代"的思路,我把它写成了一个 skill,让它自己迭代。后来额度用光了,想试试最近很火的「GLM 5.1,后来是 5.2」,结果它当时还不支持多模态,没法做视觉对照;我自己手动测了几组、又调了很久,还是没能到达想要的那个效果。

到这里我就认了:纯工程加上开源轮子的复用,能走到的,差不多就是这儿了。想再往上一个台阶,得自己训练。

所以现在,我准备拿二游和动漫角色当训练集,自己训一个真正的"立绘 → 皮肤"模型,去捅破"检索 + 重上色"那层保真的天花板。眼下在 autodl 上租了一块小显卡在跑,效果看着……好像还行,但真要做完,估计不是最近的事。

说起来,那块卡看着是几块钱一小时,挺便宜,可一天跑下来就是一百块,多少有点吃不消。

训练卡一天的配置费用:¥137.75

我是真没想到,算力优化会这么复杂。这让我忽然想起高中抠时间复杂度的那段日子——原来是用在这儿的。大学课程一开始不太强调这个,像在度假,结果真到用 AI 的时候才发现它这么要紧,而 AI 训练的实际使用这一块,我还做不到学以致用,只能一点点重新自学、慢慢啃书。

模型大概这个夏天会上架吧,不会让大家等太久。

回头看,这个项目教给我的,其实不是什么算法,而是几个一开始没料到的判断:粗糙的方块人,反而是对的载体;颜色无所谓,形状才要紧;同质化是特性,不是缺陷;让 AI 当配角,比让它当画师,要更快也更稳。

还有最后一个,可能也是最重要的——当手调启发式调到改一处、塌一处的时候,那往往不是再加一条规则的信号,而是该去训练的信号。

我现在,就站在这个信号面前。夏天见。