0、前言为了制作符合泰拉瑞亚原版的贴图首先研究一下原版的贴图。以下是一份快速为独立游戏开发创建png素材的教程。如果你找得到心仪的素材也不会看这篇帖子了。请跳转至第四步1、下载工具TConvert(C#)链接 https://github.com/trigger-segfault/TConvert2、双击TConvert.sln在Vs中运行以下是运行后的帮助信息运行成功后即可在工程文件中找到使用PowerShell进入刚才的目录(命令提示cd)然后运行以下指令.\TConvert.exe -i D:\steam\steamapps\common\Terraria\Content -o D:\test -e -ic第一个路径表示需要解析的文件第二个路径表示解析后的存放路径参数“-e指定解包模式仅处理.xnb文件参数-ic表示启用图像压缩。如果出现报错可能是因为文件包含Shader效果无法解析可忽略。3、下载Aseprite(1) 官网地址Aseprite - Download网盘地址 https://pan.baidu.com/share/init?surlQZdjAZMj1yvOTt62ZdRuMQ提取码: 3qyy(2) 提取泰拉瑞亚原版调色板from PIL import Image import os def extract_colors(image_path): 从图像中提取所有颜色 img Image.open(image_path).convert(RGB) return set(img.getdata()) # 使用集合去重 def save_palette(colors, output_path): 保存调色板为 PNG # 将颜色转换为列表并限制为 256 种 color_list list(colors)[:256] # 只取前 256 种颜色 # 创建调色板图像 palette_img Image.new(P, (16, 16)) # 16x16 的调色板 palette_img.putpalette([c for rgb in color_list for c in rgb] [0] * (768 - len(color_list) * 3)) palette_img.save(output_path) def main(input_folder, output_folder): if not os.path.exists(output_folder): os.makedirs(output_folder) # 存储所有不重复的颜色 all_colors set() # 遍历所有 PNG 文件 for root, _, files in os.walk(input_folder): for file in files: if file.endswith(.png): image_path os.path.join(root, file) colors extract_colors(image_path) all_colors.update(colors) # 合并颜色集合 print(fProcessed: {image_path}) # 保存调色板 output_path os.path.join(output_folder, Accent.png) save_palette(all_colors, output_path) print(fSaved palette to: {output_path}) print(fTotal unique colors: {len(all_colors)}) if __name__ __main__: input_folder D:\\反编译\\Tpng\\Images # 贴图路径 output_folder os.getcwd() # 输出到当前工作目录 main(input_folder, output_folder)运行以上代码后即可得到包含所有颜色的Accent.png文件链接https://pan.baidu.com/s/1V07_bmd8rypeBE5rsxbAlQ?pwdp4gz提取码p4gz(3) 像素画教程链接piskel_哔哩哔哩_bilibili4、待更新等博主学成归来我宣布我是小丑。以下介绍如何快速绘制一个简单的png贴图并添加动画、声音。如果需要将贴图用于商业盈利请注意规避其中的法律风险。1本地部署绘图AI模型或者直接打开豆包等含有免费额度的AI网站2生成或者从素材网站获取可用的贴图。素材网站链接不过审贴不出来5、打赢复活赛了如果找不到符合心意的贴图也可以与熟悉的画师合作中高风险如需创业请确保你真的了解这里介绍如何低成本的获取一张可用的图片适用于想要练习独立游戏开发又囊弄羞涩的开发者。1访问各大素材网站下载或截图需要参考的素材如无法下载可用合理利用F122将获取的素材作为蓝本让AI反推提示词。3修改提示词增加你的需求并且命令AI生成带有纯色的背景图有Ps经验可快进。/** * * AI 抠图背景色推荐对照表基于高对比度原则 * 使用说明根据主体主色调选择对应背景色优先推荐最佳项 * * * 主体颜色 | 最佳背景色 | 备选背景色 | 选择逻辑 * ------------------|----------------|----------------|--------------------------- * 纯黑 / 深藏青 | #FFFFFF 纯白 | #E0E0E0 亮灰 | 极亮与极暗的强对比 * 纯白 / 米白 | #404040 深灰 | #1E3A2F 墨绿 | 深色衬底防止主体融合 * 正红 / 亮橙 | #1E3A2F 墨绿 | #000000 纯黑 | 色相环对立红↔绿辅助识别 * 天蓝 / 湖蓝 | #FFFFFF 纯白 | #A9A9A9 暖灰 | 明度优先冷色在亮底上轮廓清晰 * 肤色人物特写 | #808080 中灰 | #C0C0C0 明灰 | 灰度作为安全中间调断层自然 * 金黄 / 卡其 | #1A2B4C 藏蓝 | #000000 纯黑 | 冷暖强对比使暖色主体“跳”出来 * 浅灰 / 银灰 | #000000 纯黑 | #FFFFFF 纯白 | 拉伸明度差两极对比最干净 * * 规避颜色警告 * ❌ 避免使用荧光绿 (#00FF00)、亮蓝 (#0000FF) * 原因易在边缘产生环境色反光溢色AI 抠出后带光晕 * ❌ 避免使用带有复杂纹理的“纯色”背景如磨砂墙、褶皱布 * 原因纹理干扰 AI 对“背景”和“主体”的边界判定 * */4根据新图再编写提示词要求AI生成一段5-10s的视频。提示词必须包含保持镜头机位不变XX主素材占比不变。如果你需要制作的动画是“站立不动嗑药”等可以给出基准参考。例如在其下方增加一段横向阴影保持人物在正中心原地踏步或不变。如果素材中的人物乱动那么后续动画进行对齐时会给自己找麻烦。5上传视频开始抽帧有动画制作经验可跳过。推荐几款可用的抽帧软件网页版如需付费可用通过F12下载网站地址FramePacker-视频转序列帧/GIF/帧动画一站式平台开源地址下载脚本输入download()开始下载打包为ZIP下载// 定义下载函数 function download() { // 检查是否已加载 JSZip if (typeof JSZip undefined) { console.log(正在加载 JSZip 库请稍后...); const script document.createElement(script); script.src https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js; document.head.appendChild(script); // 等待加载完成后执行 script.onload function() { console.log(JSZip 加载完成开始下载...); doDownload(); }; script.onerror function() { console.error(JSZip 加载失败请检查网络连接或手动引入 JSZip); }; } else { doDownload(); } } // 实际执行下载的函数 function doDownload() { const zip new JSZip(); const images document.querySelectorAll(img); let count 0; images.forEach((img, index) { const src img.src; if (src src.startsWith(data:image/png)) { try { // 移除 data:image/png;base64, 前缀 const base64Data src.split(,)[1]; zip.file(image_${index 1}.png, base64Data, { base64: true }); count; } catch (e) { console.warn(添加第 (index 1) 张图片失败:, e); } } }); if (count 0) { zip.generateAsync({ type: blob }).then(function(content) { const link document.createElement(a); link.href URL.createObjectURL(content); link.download images.zip; document.body.appendChild(link); link.click(); document.body.removeChild(link); // 释放 URL setTimeout(() URL.revokeObjectURL(link.href), 1000); console.log(✅ 成功打包 ${count} 张图片为 images.zip); }).catch(function(err) { console.error(打包失败:, err); }); } else { console.log(⚠️ 未找到任何 data:image/png 格式的图片); } }批量下载方法function download() { // 获取所有图片元素 const images document.querySelectorAll(img); let count 0; images.forEach((img, index) { const src img.src; // 只处理 data:image/png 格式的图片 if (src src.startsWith(data:image/png)) { try { // 将 data URL 转换为 Blob const byteString atob(src.split(,)[1]); const mimeString src.split(,)[0].split(:)[1].split(;)[0]; const ab new ArrayBuffer(byteString.length); const ia new Uint8Array(ab); for (let i 0; i byteString.length; i) { ia[i] byteString.charCodeAt(i); } const blob new Blob([ab], { type: mimeString }); // 创建下载链接 const link document.createElement(a); link.href URL.createObjectURL(blob); link.download image_${index 1}.png; document.body.appendChild(link); link.click(); document.body.removeChild(link); // 释放 URL 对象 setTimeout(() URL.revokeObjectURL(link.href), 100); count; } catch (e) { console.warn(下载第 (index 1) 张图片失败:, e); } } }); console.log(共找到并下载 ${count} 张 PNG 图片); }5扣图阶段。该阶段最为折磨尤其是处理发丝、特效细节。由于处理这些细节较为复杂这里不做讨论会ps请跳过。先使用BiRefNet扣出画面主体再使用LUMA KEY。如果丢失细节较多可用使用开源工具Corridor Key补充。如果主体扣除太多可用使用“橡皮擦”功能还原这一部分。开源工具推荐1、huajinghttps://github.com/hello432369/huajing2、BiRefNethttps://github.com/ZhengPeng7/BiRefNet3、CorridorKeyAtomGit - 全球开发者的开源社区,开源代码托管平台4、特效扣图推荐LUMA KEY推荐使用黑、白、灰作为背景色避免绿色、紫色5、在线工具推荐你在想什么老老实实自己部署参考教程CorridorKey完全指南AI绿幕抠像的5个秘诀与常见问题解答-CSDN博客6处理动画。帧图来源于刚才批处理的扣图。准备工具Spriter、Dont Starve Mod Tools库中创建项目教程链接https://www.bilibili.com/video/BV15N4y117nd其他参考教程《缺氧》mod开发指南 - 哔哩哔哩动画参考命名方式【缺氧mod入门】 缺氧mod制作 动画篇 - 哔哩哔哩on - 启用off - 禁用或者无物资 不动的状态working_pre 是动一下的动画working_loop 是一直动的画面working_pst 是动停动停的画面place 是设置了建筑地点但是未建造的画面ui 是在建筑栏以及研究栏里显示的小图标通过丢掉部分帧、循环帧、关键帧、骨骼、绑定等方式使动画更加流程也可以使用AI补帧工具对做好的动画进行补帧。7导出动画素材。将动画素材转换为你需要的游戏格式。部署好开发环境准备编写代码