本文章适用于2023年steam饥荒单机版与联机版人物mod的贴图制作,可能不适用于Klei的其他游戏。

1. 作图工具
能够熟练使用以下的一款软件:Photoshop、Krita、SAI、GIMP、Painter、Animate等等。
能够手绘或鼠绘(真的有人会吗)或使用数位板或数位屏
能够理解图层的含义,会使用图像批处理
2. 脚本
会使用python(当然你会java、c++之类的也行)对图像进行裁剪、放缩
会使用python遍历文件目录
3. 饥荒专用工具
会使用官方给的autocompiler.exe,或者你自己运行scml.exe和png.exe和一些脚本
会使用官方的python2.7版本运行官方脚本buildanimation.py
4.查看压缩包
能够压缩与解压zip文件
5.查看贴图
能够使用ktools或ztools等程序将tex转换为png,并反过来转换
能够使用textool或tex explorer直接查看tex文件

贴图找到饥荒动画文件夹C:\Steam\steamapps\common\Don't Starve Together\data\anim,使用软件搜索wendy.dyn,解压出atlas-0.tex。当然你也可以用wendy.zip,则不需要再去找build.bin
贴图2打开压缩包C:\Steam\steamapps\common\Don't Starve Together\data\databundles\anim_dynamic.zip,使用软件搜索wendy.zip,解压两次得到build.bin
动画搜索player_,任意找一个zip,解压出anim.bin
anim.bin+build.bin+atlas-x.tex,三个(或者四五个)文件放到一个文件夹,用krane.exe提取出scml工程文件
打开steam创意工坊,搜索extended sample character或者使用我提供的animation template。订阅mod,找到mod文件(提示:在mods/或322330/里面,可直接搜索id),然后把相应的整个工程都复制到你自己的文件夹里,然后取消订阅。
打开创意工坊,找一个你喜欢的mod人物,订阅,然后把整个mod文件夹复制到你的文件夹里。此处推荐一些比较标准的mod:Charlie: Stranger Newer Powers(查理,带皮肤),Whimsy the Disoriented(作者是Klei论坛里知名的专画薇洛的坛友)、Hamlet Characters -Fixed and Reporked(哈姆雷特专属人物搬运)。
如果你使用的是我的模板,那么你可以去https://github.com/ZzzzzzzSkyward/dst-mod-mia,转到relics看一下我的工程。
注意事项
1.不能修改Spriter里的动画,因为人物动画是官方定死的,你不可能去改官方动画来迎合你的贴图
2.你可以打开scml文件,修改一张图片的x和y,这个坐标是图片中红点(pivot)的比例坐标,其中pivot_y=1-y,以左上角为原点。这个红点是图片的旋转与放缩中心。
3.如果你想要扩大画布,一种标准的方法就是,根据红点位置,以它为中心扩大画布,保持图像的相对位置不变。但是这个操作在Photoshop里是做不了的。一种变通的办法就是先用Snipaste截个图,然后对着截图在屏幕上调整图像的相对位置,以保证扩大画布后图像相对红点的位置不变。但是这样还是太麻烦了,所以你可以用python处理一下
操作演示
打开文件编辑器,找到你要的图片

此处为swap_hat-0.png
写一个脚本,把图片放大为2倍
from PIL import Image
import sys
def expand(filename, x, y,ratio=2):
# open image
img = Image.open(filename)
width, height = img.size
new_width = width * ratio
new_height = height * ratio
image_expand = Image.new("RGBA", (new_width, new_height))
image_expand.paste(img, (int(width * x), int(height * y)))
image_expand.save(filename)
return x,y
if __name__ == "__main__":
if len(sys.argv) < 4:
print(
"Usage: python expand.py [filename] [pivot_x] [pivot_y] [ratio]\n expand the image by ratio, default is 2"
)
exit(1)
im = sys.argv[1]
px = float(sys.argv[2])
x = px
py = float(sys.argv[3])
y = 1 - py
r=float(sys.argv[4] if len(sys.argv)>4 else 2)
expand(im, x, y, r)
命令行运行脚本python expand.py swap_hat\swap_hat-0.png 0.532374 -0.403497

放大2倍的结果
4.平移画布。如果放大解决不了问题(比如上图里,放大之后图片超出了边框),一般就需要平移。你不可以在Spriter里直接移图片,但是你可以编辑scml文件里的pivot。一种可视化编辑方法是,首先用Snipaste截图,以锚定红点,然后在Spriter里平移图片。完成后,需要恢复红点位置,此时缓慢挪动红点,把它挪回原位,这时,右键override default pivot覆盖红点坐标,然后双击画板里的图片打开红点编辑器,查看xy坐标。计算pivot_x=x,pivot_y=1-y,修改scml文件保存。不保存退出Spriter,重新打开scml文件,就可以看到平移完成的结果了。

图片随便动,务必保证红点不动
同样可以写一个脚本,把红点平移到(0.5,0.5),如此一来你就可以直接以中心点为原点放缩画布,这在Photoshop里是可以操作的。
from PIL import Image
def uncrop(filename, x, y, nosave=False):
# 打开图片
img = Image.open(filename)
w, h = img.size
# 计算出映射后图片的最小宽高
new_width = int(2 * max(x,1-x) * w)
new_height = int(2 * max(y,1-y) * h)
#放大画布以容纳原图片
min_width=new_width
min_height=new_height
if min_height==h and min_width==w:
return
# 新建 RGBA 格式图片
new_img = Image.new('RGBA', (min_width, min_height))
# 计算偏移量,使(x, y)变为中心
offset_x = 0 if x>0.5 else min_width-w
offset_y = 0 if y>0.5 else min_height-h
# 粘贴图片
new_img.paste(img,(offset_x, offset_y))
# Save new image
if not nosave:
new_img.save(filename)
return 0.5,0.5
(我想你知道怎么用它来批处理吧,不会批处理可以问问GPT)
5.正确地绘制面部。你可以在Spriter右侧的画板里查看素材。面部是人物贴图里数量最多,最难分辨的一个符号。以下是我在Krita里的图层。你需要重点查看几个表情动画(emote)。

6.删除不必要的符号。当你的人物没有尾巴时,你可能会把尾巴图片全变透明,但其实你完全可以删掉尾巴文件夹。删除文件夹后,你打开Spriter,对每个缺失的图片按shift+delete,把对应的图层删光。
7.更新图片大小。当你修改任何一张图片的尺寸后,都要另存为一次(save new project)。因此建议你在正式导出之前,另存为一次。
8.正式导出。如果你使用的是extended sample character,那么建议你裁剪一下图片。由于裁剪会改变图片尺寸,你不仅要修改红点坐标,而且要重新保存一次scml。之所以要这么做,是为了避免图片过大导致导出时出现bug,同时也是为了节省存储空间。我提供了cropscml.py以方便地裁剪一个scml的所有图片。
9.删除anim.bin。如果你使用的是我的animation template,务必删除zip里的anim.bin,以避免同名动画文件覆盖官方动画,同时节省存储空间。
流程4:制作杂七杂八的贴图
现在你应该有如下文件:
modicon.png,大小128x128足够了
names_xxx.png,names_gold_xxx.png,这俩一样都是金色的
avatar_xxx.png,avatar_ghost_xxx.png,self_inspect_xxx.png
一张存档贴图saveslot_portraits/xxx.png
一张选人贴图selectscreen_portraits/xxx.png
一张小地图贴图xxx.png
什么?你不知道从哪里找这些图片?搜索官方文件夹,或订阅任意人物mod,或extended sample character模板,使用ktech等工具即可得到所有图片
注意事项在视频https://www.bilibili.com/video/BV1QX4y1d76r/ 里有提到,需稍微编辑一下xml
使用ktech.exe、autocompiler.exe等,把你做好的贴图全部导出为tex、xml和zip文件。
什么?你不知道xml文件从哪来的?建议查看https://www.bilibili.com/read/cv21780377 里面github仓库的工具使用说明
然后根据上面视频,按部就班把mod组装完成。
订阅Mods In Menu,启用它,在MiM Mods里面启用你这个mod

如此一来,你就可以在衣柜里看到你的角色了。

由于Jerry在写一套新的编译工具,所以我也加了一个命令行调用的接口。没有写完。下载地址:https://github.com/ZzzzzzzSkyward/DSTmodutils/blob/master/pyscripts/cli.py,你至少需要下载整个pyscripts文件夹才能使用,而且你还要手动指定ktech.exe的位置。
目前支持的功能:
build.bin和build.xml互转
anim.bin和anim.xml互转
*.zip和*.scml互转
没有anim.bin的zip转换为图片,但是没有scml
*.tex和*.png互转,额外输入-xml则生成一个xml
*/*.png和*.xml与*.tex互转,即批处理。需要指定stex.exe的位置
scml工程文件夹转zip,只会转换识别到的第一个scml工程文件
scon文件插值
scml文件裁剪并自动计算新的坐标
示例:
python dstmodutils/pyscripts/cli.py anim.bin
python dstmodutils/pyscripts/cli.py anim.xml
python dstmodutils/pyscripts/cli.py build.bin
python dstmodutils/pyscripts/cli.py build.xml
python dstmodutils/pyscripts/cli.py build.bin -json
python dstmodutils/pyscripts/cli.py build.bin -rename="pig"
python dstmodutils/pyscripts/cli.py pigman.zip
python dstmodutils/pyscripts/cli.py rabbit.png
python dstmodutils/pyscripts/cli.py modicon.png -xml
python dstmodutils/pyscripts/cli.py rabbit.tex
python dstmodutils/pyscripts/cli.py inventoryimages.xml
python dstmodutils/pyscripts/cli.py images/
python dstmodutils/pyscripts/cli.py myanim.scon -interpolate -fps=30
更新:新加了一个网页播放器。由于Spriter不支持斜切变换,转换出的动画会和游戏里显示的不同。因此我又写了一个能播放json文件的网页(json文件可以用Jerry的工具导出)。
预览:
