下载 App
日志③:怎么在 21 天里搞定像素美术,以及 AI 素材申报这件事
修改于10/2034 浏览综合
期预告的像素猫,今天先欠着——因为在画它们之前,我得先解决一件更烦的事:申报。
先说结论,免得后面看着像辩解:
本游戏内含有使用 AI 生成的游戏资产。
这句话必须一字不改地出现在 TapTap 游戏介绍里。聚光灯的规则写得很直接:用了 AI 素材不声明,放弃所有奖项。 还有一条:美术资产里 AI 生成占比 ≥50%,直接失去「最佳美术」的评选资格。所以对我这种单人 21 天的队伍来说,AI 不是不能用,是必须算清楚着用。
这篇就把我这三天的实际做法全写下来:素材怎么分三轨、每轨踩了什么坑、AI 占比是怎么算下来又怎么往下压的、以及最后为什么 BGM 全部换成了自己写的代码。
先摆规则:我的素材分三轨
docs/GDD.md §4 定的规矩很简单,一句话:猫必须原创,场景可以借力。
- 轨道:① 自制
- 用在哪:猫精灵(程序化生成,16 套 32 张)、核心 UI、全部程序化音频
- 来源:自研 Python 脚本 + numpy
- 轨道:② CC0 免费
- 用在哪:砖墙 / 灰墙 / 街头装饰的备选替换方案
- 来源:Kenney(CC0)——目前还没下载,暂未入库
- 轨道:③ AI 生成
- 用在哪:角色设定图、道具与墙面纹理底稿、全部宣传物料
- 来源:MiniMax 图像模型
三条铁律,我一开始就写进了 docs/asset-manifest.md:
- ②③ 轨的每一个素材都登记:素材名 / 来源 / 授权 / 人工修改说明 / 是否进游戏;
- AI 素材在游戏介绍里声明,附上申报文档;
- AI 生成的东西不能直接当游戏资产入库,除非它只是"底稿"。
第 3 条是我这周改的。最初的版本我把 AI 出的道具图裁一裁直接塞进游戏了,后面想明白这在申报上很危险——因为裁剪+抠底+缩放仍然是"AI 生成资产",只是被藏起来了。规则说得明明白白,藏起来只会让占比算错,不会让占比变低。
轨道③:AI 到底帮我省了什么,又坑了我什么
坑一:AI 音乐模型,10 首全带人声
游戏需要 5 首 BGM(白天/夜间/对峙/投喂/猫王)。我先走捷径,用音乐生成模型试。第一轮 5 首,全带唱;第二轮换策略再来 5 首,还是全带唱。
实测 10/10 首全部带人声。 第一轮我以为 prompt 写得不好,加了"no vocals"这类否定词;第二轮改用"电影配乐 / 曲库选曲"的框架去绕开模型的人声先验——两轮都失败了。这个模型的人声倾向不是 prompt 能压住的,是它结构性的。
一个安静的猫街配上人声唱歌,那不叫氛围,那叫灵堂。
于是我改用 numpy 自己合成。做法不算高明,但很稳:
- 拨弦(吉他/竖琴)用加性合成 + 物理建模的激励包络;
- 钟琴/八音盒用 FM 合成;
- 弦乐垫用加性拍频;
- 低音用饱和正弦;
- 鼓组是滤波粉噪。
源码在 tools/gen_bgm.py,纯 numpy,没有一个采样素材。最后 5 首:
- 曲目:白天
- 规格:46.8s / 82 BPM / C 大调
- 曲目:夜间
- 规格:58.2s / 66 BPM / F 大调稀疏织体
- 曲目:对峙
- 规格:31.3s / 92 BPM / D 小调
- 曲目:投喂
- 规格:40.0s / 96 BPM / G 大调
- 曲目:猫王
- 规格:42.7s / 90 BPM / F 大调
换完之后我发现三个白拿的好处:结构上不可能有人声、长度能精确算(底噪要无缝循环,AI 输出的循环点会咔哒)、按大赛口径这 5 首算完全自制。之前那 10 首带人声的候选我一个都没删,挪到 archive/bgm-ai-candidates/ 备查,申报表里也照实写了"曾用、已弃用"。
音效是同一套思路,16 个 SFX 里 15 个是程序化合成的(哈气、舔毛、打翻花盆、标记、对峙、捕鼠、脚步、UI……),源码 tools/gen_sfx.py。只有"喵"这一个例外——它用 TTS 音库生成,质检判出来确实是猫叫。这一条我在申报表里单独列出来了:音频资产 AI 占比 1/16,但按大赛口径音频不计入美术资产占比,所以不影响下面的红线。
坑二:AI 出的图好看,但比例是硬约束
现在进游戏的 AI 衍生美术一共 13 项:4 个道具(垃圾桶、纸箱、食盆、倒花盆)+ 2 种墙面纹理(砖墙、灰墙)+ 7 种街头装饰(水洼、落叶、易拉罐、纸团、水泥块、水管、井盖)。全部由 2 张 AI 设定图经脚本裁剪/抠底/缩放机械衍生而来,登记编号 A12/A13。
我算了一下:全部素材入库后美术资产总数预估约 30 项,13 ÷ 30 ≈ 43%。还在 50% 红线里,但只剩 7 个点的余量——这余量不是我挣来的,是还没做完挣来的。 所以我提前把降占比的两条路写进了申报文档:
- 路径①:把猫精灵做出来摊薄。 猫精灵全部做完后,美术资产总数从 ~13 项涨到 ~30 项,AI 的绝对数一个不变,相对占比自然往下走。每多一张自制精灵,都是一票"自制";
- 路径②:把墙纹理和装饰换成程序化绘制。 那一换,A12/A13 直接从表里消失,AI 绝对数从 13 掉到 0。
两条都是真能落地的,不是写在文档里好看的。
后来的事:我最后走的是路径②—— 13 项 AI 机械衍生贴图全部改由 tools/gen_props.py 程序化绘制,AI 美术资产项归零。 中途还自查出两个漏网:11 张住民头像是 AI 衍生却在游戏里真实显示(已改从自制精灵裁头部)、 以及 APK 里躺着约 14.9MB 运行时零引用的 AI 原始设定图(已移出 assets/)。 现在三种最保守的计数口径下,游戏内 AI 美术占比都是 0.0%。 但我不会说"我从来没用过 AI 美术"——我确实是先用 AI 做的,然后主动把它压到了 0。
另外几条规矩也一并说明:
- 角色设定图、商店主视觉、概念海报、日志配图这些都不随游戏发布,它们是游戏外的宣传物料,不进美术资产口径;
- 我不会用 AI 直接产出 24×24 精灵表。生成模型的输出不是严格像素网格,帧与帧之间会漂,直接入库比现在的几何色块更难看,还会顶穿 50% 那条线。设定图的正确用法只有一个:当绘制参考。
轨道①:把一只胖橘缩到 24 像素,还能认出是它
这是本篇真正的难点。猫精灵每只 24×24 px——满打满算,身体只占 16×12,头 8×8。这种尺寸下,不靠细节,靠剪影。
先立了几条规格,写在 docs/art-bible-characters.md 里:
- 1px 深色收边,不用纯黑,用比本体暗两档的同色相;
- 2 方向左右翻转,不做 4 方向(21 天里必须砍);
- 每只猫必须在 24px 下靠"剪影 + 一个色块"就能分辨;
- 剪影要跟着性格走:胆大的大橘体量大、圆、尾巴翘;胆小的煤球最小、扁、耳朵压平、尾巴贴身蜷;合群度低的小黑姿态收拢、视线侧看。
然后做了一个工具,tools/gen_sprite_templates.py:给每只猫自动生成一张参考卡——左边是高清设定图,右边是 24×24 的描摹草稿格子,下方是该猫的主色板(hex)和一句造型要点。
这里有个细节挺有意思:色板只取真实毛色。脚本会自动剔除设定图的奶油色底、猫脚下的地面阴影和近似重复色——不然你从 AI 概念图里吸出来一堆"其实只是背景"的颜色,画到猫身上就脏了。色板旁边还并列印着美术圣经里的代码占位色,因为那是游戏里现在真正在用的颜色,两个都摆在这儿,我落地时不用猜该往哪边靠。
顺手逮到一个 bug:奶牛在花名册里的占位色是近白,和白手套几乎一模一样,两只猫在场上根本分不开。原因是"奶牛"这名字指黑白花,代码里的颜色却写成了近白。已改成深色主体 #2E2E33 + 一块白胸口。这就是为什么美术和代码必须对着同一张表干。
工作台做完,我用 Aseprite 的 CLI 又生成了一批工作文件(tools/make_aseprite_files.py):每只猫一个 .ase,24×24 索引模式,色板锁成该卡那 6 色,图层分好——0_底稿(勿改) 31% 透明的描摹垫层,加空的 1_剪影 / 2_线稿 / 3_上色。
这里我特意让脚本只建画布和图层,不填任何一个像素。这样在申报口径上才是干干净净的"自制",不会被质疑"你这也是脚本生成的"。
一个让人意外的好处
写着写着我意识到,申报这件事本身变成了游戏设计的一部分。
因为要算比例,我不得不给每个资产打上"来源 / 是否进游戏 / 有没有人工创意修改"的标签,这逼着我把"什么算原创、什么算衍生"想清楚。而这套标签反过来又约束了美术流程:AI 只能当底稿,猫必须自己长出来。这个约束反而让风格统一了——因为所有猫都得过同一张美术圣经、同一块 24×24 画布、同一套描边规矩。
算是意外收获:合规这件事,逼着我把"我喜欢的样子"写成了规则。
互动引导
在评论区告诉我:你更喜欢哪种做法——
A. 猫精灵全部自制(现在的路线,费时间但可控); B. AI 出底稿 + 人工精修(快,但要小心申报比例); C. 干脆全 AI,别纠结(我大概率不敢)。#聚光灯gamejam #聚光灯游戏创作挑战 #聚光灯gamejam开发者日志
















