项目概述
本项目通过 Python 脚本(PIL 库)程序化生成 Minecraft Java 版 64×64 皮肤。以《神界:原罪 2》中的同伴角色 Lohse 为原型,在 Minecraft 像素化美学框架下还原角色特征。
技术实现
皮肤生成完全通过代码定义像素颜色与位置,不涉及手动图像编辑:
- 使用 RGB 颜色混合函数模拟明暗渐变与材质过渡
- 为 Steve(4px 手臂)与 Alex(3px 手臂)两种模型分别实现
- 帽子层支持全透明(正常版)与局部加厚(立体发版)两种模式
生成流程
定义调色板 → 绘制头部/躯干基础层 → 绘制手臂(分 Steve/Alex)→
绘制腿部 → 叠加装饰层(披风、魔法特效)→ 输出 PNG
核心代码
调色板定义
# Lohse 主题色
PALETTE = {
'hair': (199, 168, 119), # 金色长发
'skin': (255, 213, 170), # 肤色
'coat_primary': (45, 45, 75), # 深紫外套
'coat_secondary': (80, 60, 100),# 浅紫内衬
'accent': (180, 140, 200), # 魔法紫
'cape': (60, 50, 90), # 披风
}像素绘制
from PIL import Image
def draw_pixel(img, x, y, color, alpha=255):
"""在指定位置绘制像素"""
if alpha < 255:
# 半透明混合
base = img.getpixel((x, y))
blended = blend_colors(base, color, alpha / 255)
img.putpixel((x, y), blended)
else:
img.putpixel((x, y), color)
def draw_gradient(img, x, y, width, color_start, color_end):
"""绘制渐变条"""
for i in range(width):
ratio = i / width
color = interpolate_color(color_start, color_end, ratio)
draw_pixel(img, x + i, y, color)Steve vs Alex 手臂
def draw_arm_alex(img, is_left):
"""Alex 模型:3px 宽手臂"""
offset = 0 if is_left else 5
for x in range(3):
for y in range(12): # 手臂高度
color = get_arm_color(x, y, is_left)
draw_pixel(img, offset + x, y, color)
def draw_arm_steve(img, is_left):
"""Steve 模型:4px 宽手臂"""
offset = 0 if is_left else 4
for x in range(4):
for y in range(12):
color = get_arm_color(x, y, is_left)
draw_pixel(img, offset + x, y, color)输出文件
Lohse.png— Alex 模型版本Lohse_steve.png— Steve 模型版本Lohse_alex_volumetric.png— Alex 立体发版Lohse_steve_volumetric.png— Steve 立体发版
使用方法
# 安装依赖
pip install Pillow
# 生成皮肤
python build_lohse_skin.py
# 输出在 output/ 目录局限性
当前实现为纯代码像素生成,未提供图形化编辑界面或游戏内预览功能。皮肤的使用需要手动导入 Minecraft 游戏。
相关链接
最后更新: 2026-04-19