mcpField
B
blender-texturing

blender-texturing

github.com/el4cteo创意与媒体1.1k288 次安装今天更新
代码仓库

关于 blender-texturing

面向技术美术的 Blender 纹理技能,用于制作分层磨损、污垢、灰尘、锈蚀和贴花。脚本可添加可编辑材质层并放置贴合表面的贴花,也可烘焙结果供游戏引擎使用。

主要功能

  1. 01程序化磨损、锈蚀、污垢与灰尘层
  2. 02适用于 Cycles 和 EEVEE 的实时曲率遮罩
  3. 03移除材质层时精确还原原状
  4. 04贴合表面的贴花放置
  5. 05烘焙 PBR 纹理集以供导出

适用场景

  1. 01为道具材质添加风化效果
  2. 02在墙面放置警示贴花
  3. 03为游戏资产烘焙材质
  4. 04使用曲率和 AO 贴图调整遮罩

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/el4cteo/blender-skills --skill blender-texturing

安装后在 Claude Code 中输入/blender-texturing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
trims-tiling-painting.md
scripts/
_bpyx.py
decal.py
smart_material.py

详细介绍

纹理处理

执行模型位于 blender-core。材质连线和实测值位于 blender-pbr-materials,烘焙内容位于 blender-texture-baking。本技能负责创作表面故事:漆面在哪里剥落、污垢在哪里堆积、上面印着什么。

每项各调用一次

scripts/smart_material.py -- --objects Crate --wear 0.5 --grime 0.4 --dust 0.3
scripts/smart_material.py -- --objects Crate --rust 0.6 --under-color 0.3 0.29 0.28    # rusty iron
scripts/smart_material.py -- --objects SM_Crate --wear 0.5 --curvature-map //tex/T_Crate_CURV.png --ao-map //tex/T_Crate_AO.png
scripts/decal.py -- --target Wall --at 0 -0.1 1.5 --image //decals/hazard.png --size 0.4
scripts/smart_material.py -- --objects Crate --remove                                  # exact restore

专业人士如何叠加材质

先准备干净的基础材质(确保反照率/粗糙度正确,参见 blender-pbr-materials),然后由内向外逐层叠加:基础层 → 边缘磨损 → 锈迹 → 污垢 → 灰尘。每一层都有其物理成因:

层遮罩(成因)效果
边缘磨损凸面曲率(边缘容易受撞击)+磨损噪声显露底层材质:裸金属、底漆、原木
锈迹凹处和磨损边缘+斑驳噪声橙棕色,金属度 0,粗糙度约为 0.85
污垢凹面曲率+(1 − AO)(污垢会堆积在无法擦拭的地方)颜色较深、较粗糙、非金属
灰尘朝上的世界法线 × 斑块噪声(灰尘从上方落下并沉积)颜色较浅,粗糙度约为 0.9
细节变化粗糙度上的细噪声(±25%)最省力的真实感提升;切勿使用平坦的粗糙度值
单纯的曲率效果看起来会像程序生成,而且分布均匀。务必乘入噪声,让某些区域磨损严重,另一些区域则没有磨损。少即是多:磨损值 0.2–0.4 会呈现“使用过”的效果,0.7 以上则会显得“荒废”。

smart_material.py

  • 在每个 Principled BSDF 前(基础色、粗糙度、金属度)插入一个 TX_Layers 组,并记录原始设置,因此 --remove 能准确还原连线和值。重复运行会就地更新数值。所有图层强度都作为组节点的输入,方便直接调整。
  • 曲率,实时且可移植(Cycles + EEVEE,无需烘焙):TX_Curvature 点属性是 --edge-width 范围内(单位:m,默认 0.02)邻点高程的平均值。它不受密度影响:带宽约等于边缘宽度。将宽度设为大致等于倒角宽度(道具为 1–3 cm,建筑为 5–10 cm)。开销:每 30k 个顶点约 1.5 秒。
  • 它需要中等多边形密度(倒角/支撑边)。当中位边长大于边缘宽度的 4 倍时,结果会附带一条 note:磨损会扩散到整个面上。对于低多边形游戏网格,可从高模烘焙(bake_maps.py --high ... --maps normal ao curvature),并传入 --curvature-map/--ao-map(以 Non-Color 加载,通过 --uv 读取)。
  • 噪声采用物体空间(--scale = 特征尺寸,单位:m),因此资产移动时遮罩会附着其上。镜像/链接的副本会共用同一图案;若出现此情况,可调整 --scale 或物体。
  • 颜色采用 sRGB 0–1。默认值:涂漆下方为钢材(0.56, 0.57, 0.58,金属度 1,粗糙度 0.35)。涂漆下方为木材时,使用 --under-color 0.45 0.32 0.2 --under-metallic 0 --under-roughness 0.7。

用于游戏引擎

游戏引擎不会运行 Blender 节点树。将结果烘焙到一组纹理中:bake_maps.py -- --low SM_Crate --maps basecolor roughness metallic normal --pack-orm(自烘焙,不使用 --high)。然后运行 build_pbr_material.py --textures 并导出。使用 blender-asset-qa 和带灯光的 look 检查结果。

贴花(decal.py)

  • 在最靠近 --at 的表面点放置一个细分平面,使其朝向法线,并按 --rotation 旋转。Shrinkwrap(投射到表面上方)会让它与表面保持 --offset(2 mm)的间距。它设为父级对象,无阴影,使用 Dithered alpha,高度会随图像宽高比变化。
  • 它会像 blender-asset-qa 一样测量每个三角形处的间隙,并将 --subdiv 加倍(最高到 128),直到平坦三角形不再陷入凸面折痕。结果会报告 gap_min_m/gap_max_m。切勿将贴花间距设为 0:这必然会造成 Z 冲突。
  • 游戏中:网格贴花每个都会占用一次绘制调用,并需要进行 Alpha 排序。将共用同一图集的贴花合并为一个网格;动态贴花使用引擎投射器(UE Decal Actor、Unity URP Decal Projector、Godot Decal);或者将其烘焙进基础纹理。

Trim 贴图、平铺、绘制

Trim 贴图、通过顶点颜色混合实现平铺、手绘/纹理绘制(5.2 画笔资源)以及无界面像素写入:references/trims-tiling-painting.md。

注意事项

  • 遮罩纹理(曲率、AO、粗糙度、ID)必须设置为 非颜色。脚本会强制设置,但手动创建的节点通常不会。
  • 计算曲率或设置 --scale 前,先应用缩放。两者都基于世界空间尺寸。
  • TX_Curvature 是网格数据。之后应用修改器或重新网格化会使其失效,因此拓扑发生变化后要重新运行。
  • 视口 EEVEE 与 Cycles:遮罩结果完全相同(不会使用 Bevel/Pointiness/AO 着色器节点,因为这些节点仅适用于 Cycles 或基于屏幕空间)。

评论

支持 Markdown