使用ex studio 的spine编辑器导入模型后模型的很多关节部分有黑色块

朋友们,我在用ex studio的spine编辑器导入模型后,模型动作和显示都正常,但是很多的关节处有很多的大的黑色块,我猜是因为我的png图片是黑底的png原因?请问各位朋友,模型出现很多黑色块的原因是什么呢?我用简单的扣色器把黑底扣成透明底后,黑色块变成了黑色线条?
image

各位大佬,我补充一点信息,就是我拆的那个游戏,它每一张png都对应一张黑底的把以前彩色的部分变成纯白的png,我不知道那个是干什么用的,是不是和这个有什么关系?

RGB和Alpha通道分离,你需要手动合并。舟和少前都是这种,可以搜索这两个游戏的立绘拆包教程,应该有合并工具。

1 个赞

草,我刚整完少前的立绘,拿这个项目改了一下(因为我想直接用python批处理)
我把我改的二者的代码发一下 ,依赖就opencv,也适用于其他的符合要求的游戏

明日方舟的A文件是人物白色、背景黑色。 
少女前线的A文件是人物白色、背景透明。 
因此组合方法稍有不同。 
明日方舟可以直接将A文件按灰度图读取,然后将其作为RGBA文件的A通道。 
少女前线需要将A文件按四通道原始文件读取,然后提取出A通道作为RGBA文件的A通道。 
最后RGB+A=RGBA输出即可。

少女前线的立绘合成

import cv2
import os

input_folder = '/home/Neko/Downloads/Unpack Games/Live2DOutput/立绘'

for root, dirs, files in os.walk(input_folder):
    for filename in files:
        if filename.endswith('_Alpha.png'):
            rgb_filename = filename.replace('_Alpha.png', '.png')
            rgb_path = os.path.join(root, rgb_filename)
            alpha_path = os.path.join(root, filename)

            if not os.path.exists(rgb_path):
                print(f"未在 {os.path.dirname(alpha_path)} 中找到对应的 RGB 图像")
                continue

            src = cv2.imread(rgb_path)
            alpha = cv2.imread(alpha_path, -1)

            h1, w1, _ = src.shape
            alpha = cv2.resize(alpha, (w1, h1), cv2.INTER_CUBIC)

            alphach = cv2.split(alpha)

            dst = cv2.merge((src, alphach[3]))

            output_path = os.path.join(root, f"{os.path.splitext(rgb_filename)[0]}_group.png")

            cv2.imwrite(output_path, dst)
            print(f"合并: {output_path}")

print("合并完成")

明日方舟的立绘合成

import cv2
import os

input_folder = '/home/Neko/Downloads/test'

for root, dirs, files in os.walk(input_folder):
    for file in files:
        if file.lower().endswith(".png"):
            if file.endswith("_A.png"):
                continue

            mask_file = file.replace(".png", "_A.png")

            if mask_file not in files:
                print(f"对于文件 '{file}' 未找到匹配的_Mask文件 '{mask_file}'")
                continue

            src = cv2.imread(os.path.join(root, file))
            mask = cv2.imread(os.path.join(root, mask_file), 0)  # 灰度

            dst = cv2.merge((src, mask))

            output_path = os.path.join(root, file.replace(".png", "_group.png"))
            cv2.imwrite(output_path, dst)

            print(f"已生成合并图像: {output_path}")
1 个赞

谢谢朋友提供思路,果然是这个原因

朋友,我的游戏不是少前和方舟,是其他的游戏。
不过您说的a文件是不是就是那种文件名表了alpha,然后图片的内容是黑底+原有人物轮廓白色化的文件?
如果是的话,那我的a文件是人物白色,背景黑色的文件,是不是我就可以直接采用明日方舟的代码来用呢?

是的,记得跟你你实际的名字来改一下代码

1 个赞

源文件我私信给您了,希望您在空闲时间帮我看一下,麻烦您了

看到了,是因为你那游戏的图片文件名有点特别,改一下代码就行了,选明日方舟的的代码没问题

1 个赞

哈哈,谢谢宝,太强了,解决了