关于 blender-texturing
面向技术美术的 Blender 纹理技能,用于制作分层磨损、污垢、灰尘、锈蚀和贴花。脚本可添加可编辑材质层并放置贴合表面的贴花,也可烘焙结果供游戏引擎使用。
主要功能
- 01程序化磨损、锈蚀、污垢与灰尘层
- 02适用于 Cycles 和 EEVEE 的实时曲率遮罩
- 03移除材质层时精确还原原状
- 04贴合表面的贴花放置
- 05烘焙 PBR 纹理集以供导出
适用场景
- 01为道具材质添加风化效果
- 02在墙面放置警示贴花
- 03为游戏资产烘焙材质
- 04使用曲率和 AO 贴图调整遮罩
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-texturing安装后在 Claude Code 中输入/blender-texturing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/trims-tiling-painting.mdscripts/_bpyx.pydecal.pysmart_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