关于 scenario-blender-texturing-shading
面向创作写实或风格化材质的艺术家的 Blender 5.2 贴图与着色技能。其节点工具包可构建分层遮罩效果,并在烘焙前通过 EEVEE 和 Cycles 检查材质表现。
主要功能
- 01从纹理集构建 PBR 材质
- 02用分层遮罩制作磨损与污渍
- 03程序化与手绘材质
- 04角色皮肤、眼睛和头发着色
- 05材质审计与渲染预览
适用场景
- 01为道具添加边缘磨损和污垢
- 02制作风格化皮肤与眼睛材质
- 03在不同光照下检查粗糙度与浮雕
- 04烘焙程序化材质以便导出
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-blender-texturing-shading安装后在 Claude Code 中输入/scenario-blender-texturing-shading确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/critique.mdexpert-notes.mdprocedures.mdsources.mdscripts/bx_materials.py详细介绍
纹理与着色(Blender 5.2)
专业着色会将分层遮罩接入符合物理规律的数值:先用干净的底层(扫描素材集或纯色),再用对比鲜明的黑白遮罩来放置颜色、粗糙度、高度和次表面散射,且全部都能在节点中编辑。应在两种引擎的真实光照下评估数值,最后再烘焙,以便移植。如果这里提到的同级技能不在你可用的技能中,请让用户安装它(npx skills add scenario-labs/skills --skill <name>);如果无人值守,则根据工具架构继续操作,并指出这一缺失。
必备背景: scenario-blender-expert(执行渠道、审查流程、5.2 API 更改)。 烘焙贴图:scenario-blender-uv-baking。灯光与最终渲染: scenario-blender-lighting-rendering。
工具包:scripts/bx_materials.py(构建器、无头绘制、检查;
由 tests/code/blender-texturing-shading/ 测试)。
sys.path.append("<this skill>/scripts"); import bx_materials as M。
核心原则(专家经验要点)
- 数据贴图应设为 Non-Color,遵循“不是看起来更好,而是数值正确”(Price)。只有基础色和 发射使用 sRGB。
- 法线贴图和置换二选一,绝不同时使用(Price,Cycles 负责人 Brecht 已确认):它们编码 相同的起伏。需要组合高度或真正置换时使用置换;导出和确保 8 位精度时使用法线贴图。
- 使用遮罩,而不是绘制颜色。 Kaspar 和 Price 会将每种效果都制作为灰度遮罩,接入 Mix 或 HSV 因子;颜色放在 A/B 输入中。遮罩需要足够对比度(收紧 Color Ramp 色标),否则几乎看不出来。同一遮罩可驱动粗糙度、高度和 SSS。
- 写实风格:扫描素材集加遮罩;风格化:程序化(Price 与 Kaspar、Ryan King 的做法)。Kaspar 会将照片提炼为其图案(模糊加颗粒提取),再自行添加污渍,并在最后烘焙以便移植(导出、缩短 EEVEE 加载时间),而不是为了提升 Cycles 速度。
- 皮肤和头发的微细节应体现在粗糙度中,而不是凹凸中(Kaspar);通过 HSV Value 调整粗糙度,切勿拔掉贴图(Price)。Specular 保持为 0.5。Bump Distance 应设为贴图 0..1 范围所代表的实际高度:调低 Distance,而不是 Strength(Kaspar)。
- **真实评估:**使用 Standard 视图、均匀的中灰背景、设为黑色的 Base Color 以观察 粗糙度、强烈的背光和下方的灯光(Kaspar);用掠射光观察起伏(Price);用无光照模式检查手绘反照率(Abbitt)。用 EEVEE 迭代,用 Cycles 检验真实效果,两者必须一致(Kaspar)。
- SSS 应符合解剖结构(Kaspar):耳朵、鼻子、眼睑、嘴唇和指尖处较高;骨骼覆盖处较低。 使用黑白遮罩,Map Range 用于设置数值。
- Bevel、AO、Pointiness 和 Random Per Island 仅适用于 Cycles,且 Bevel/AO 具有随机性 [新增,实测]:EEVEE 不显示 Bevel 边缘;无论采样数是多少,经过阈值处理的实时遮罩都会产生 17% 到 18% 的小数金属度。请先烘焙再进行阈值处理,或使用顶点曲率。
优先确定的事项
| 输入 | 影响 | 未明确说明时的默认值 |
|---|---|---|
| 目标:Cycles 静帧、EEVEE、游戏引擎 | 使用仅支持 Cycles 的节点还是烘焙;AO 放入反照率(渲染)还是 ORM(游戏) | 最终效果使用 Cycles,EEVEE 并排对比 |
| 风格:写实或风格化 | 扫描素材集 + 污垢,还是程序化或手绘光照 | 克制的风格化(Kaspar) |
| UV 和变形 | UV 图像、盒投影还是基于 Object 的程序化纹理 | 刚性物体、无 UV:盒投影;会变形:仅使用 UV |
| 比例 | 瓷砖尺寸、凹凸/置换的米数 | 使用实际米数,应用比例(所有专家均如此) |
| 纹素预算、导出 | 主体绘制使用 2K 到 4K,大型平铺表面使用 4K 到 8K | 主体道具使用 2K,glTF ORM,OpenGL 法线 |
工作流
- 每个部件的基础处理。 为材质添加前缀,移除占位符,设置
diffuse_color;在漫反射颜色通道中挑选颜色值(matcap 让 Kaspar 的皮肤过于苍白)。应用缩放。门槛:M.value_report(objs)无问题。 - 基础材质。 设置:
M.pbr_from_textures(mat, M.find_texture_set(dir), uv_map=...):按用途设置颜色空间,将 AO 以因子 1 混合(Price:恢复 AO 阴影,修复了阴影的闪光;游戏项目使用ao_mode="gltf"),只有没有法线贴图时才添加凹凸;height_as="displacement"会移除法线贴图,并设置 Cubic 插值、Displacement 和 Bump;Poliigon 的 Scale 设为 0.2(固定 20 cm 范围);添加 Simple 细分并平滑着色。UV 平铺尺寸 = 纹理集的实际尺寸。刚性物体、无 UV:projection="BOX"。程序化材质:使用 Object 坐标(变形网格使用 UV),Noise Detail 最多为 5(每级成本翻倍,Price)。门槛:M.audit_material(mat, obj)无错误。 - 遮罩。 Kaspar 的规则是根据顶点密度选择遮罩频率:大范围柔和遮罩使用顶点颜色(Price 的环境也使用顶点颜色:平铺 UV 会重复图像笔触,布局也会变化),精细或导出的细节使用图像,衣摆使用 UV 条带。无头模式:
M.mask_from_points、M.write_vertex_values、M.smooth_attribute、M.curvature_attribute、M.TexelMap+M.project。Price 的 Color Burn:用对比度渐变的高度图(B)对柔和遮罩(A)执行 Color Burn,使遮罩沿砖块断开或进入勾缝(程序 P18)。门槛:将每个遮罩渲染为自发光材质。 - 图层。
M.add_wear(mat, edge_color=..., edge_roughness=..., edge_metallic=1)会添加变化、凹处/污垢和掉漆边缘。混合模式:Multiply 使颜色变暗(污垢、霉菌),Screen 使颜色变亮(泛碱、亮部;Add 会超过 1),Subtract 用于高度链以表现剥落(Price)。链条顺序决定年代感(污垢之前的贴花看起来更旧)。贴花:将 Alpha 接入 Factor,Extension 设为 Clip(M.add_decal)。门槛:M.preview(objs, out, rigs=("studio", "roughness")):效果应顺着形体和水流路径分布,不应均匀重复;打破重复感。 - 角色特定处理。
M.stylized_skin(mat, obj=body)(遮罩为col_brighter/col_darker/col_lips/col_sss/col_rough);每个眼睛物体分别使用M.stylized_eye(原点位于眼球中心),并添加M.cornea_material,设置cornea.visible_shadow = False;头发高光:在与发丝方向对齐的 UV 映射上使用带 Tangent 的 Anisotropic(仅限 Cycles)。门槛:rigs=("backlit",):耳朵、鼻孔、嘴唇和手指透出红光;正面不显蜡质;巩膜为灰白色。 - 风格化手绘光照(Abbitt):顶部较亮、底部较暗,凹处使用 Multiply,肢体末端使用 Screen。无头模式:根据曲率属性使用
M.painted_light(mat, obj),烘焙 Emit,并用rigs=("unlit",)检查效果。 - 在遮罩无法定位的地方进行绘制。 GUI:笔刷是资产(
Paint Hard/Soft、Airbrush、Blur、Smear、Fill、Mask);出厂默认的 5.2 会话中,笔刷和统一颜色设置好之前,绘制结果为黑色;笔触从屏幕投射,因此要正对表面(Abbitt);擦除需要 alpha 通道;向外扩展 8 到 12 px(Kaspar、Abbitt)。使用M.gui_texture_stroke():它会强制重绘(投射绘制会被上一次绘制的深度缓冲遮挡:一次运行中,在设置调用里发出的笔触只绘制了 162 个纹素,而非约 14,000 个;另一次运行中则覆盖完整),并对印章点进行重新采样。无头模式:M.TexelMap+M.paint_stroke按世界距离绘制,包括接缝;然后使用M.dilate,再使用M.save_image(脚本不会将图像与.blend一同保存)。门槛:渲染视图应跨越接缝。 - 外观开发检查与烘焙。 使用
M.preview(EEVEE 和 Cycles,studio、backlit、roughness)、M.value_report、带标签的帧和节点组(Kaspar、Price)。通过 Emission 烘焙程序化通道,采样数至少为 30,并通过使用贴图重建材质来验证(scenario-blender-uv-baking)。
数值
| 数值 | 数值 | 来源 |
|---|---|---|
| 电介质反照率/金属反射率 | sRGB 约为 30 到 240/180 到 255;金属度为 0 或 1 | 范围[新增];二元金属度:Ryan King、Price |
| 皮肤粗糙度 | 0.68 到 0.72,粗糙区域为 0.72 到 1,嘴唇和口腔约为 0.4 | Kaspar |
| 毛孔 | Voronoi Smooth F1 缩放值为 100 和 200,噪声混合比例为 0.2 到 0.25 | Kaspar,使用其 UV |
| 皮肤 SSS 尺度(5.2) | 0.005 到 0.04 m | 在 0.33 m 头部上测量;Kaspar 的 v1 中 0.02 到 0.15 在 5.2 中呈现蜡质效果 |
| 凹凸 | Distance 约为 0.001,织物的 Strength 为 0.1 到 0.2 | Kaspar |
| 置换 | Scale 为 0.2(Poliigon),Midlevel 为 0.5,Cubic,16 位源图像 | Price |
| 砖墙粗糙度 | 约为 0.7 | Price |
| 颜色微调 | 色相在 0.5 的正负 0.04 范围内 | Price |
| 噪声细节 | 不超过 5 | Price |
| 磨损倒角半径 | 1 m 木箱上为 0.04 | 测量值 |
| 涂料渗色/岛间距 | 8 到 12 px/0.01 到 0.05 | Kaspar、Abbitt |
| 绘制高度 | 2K、32 位浮点、底值为 0.5、Non-Color | Kaspar;0.5 灰色底值也来自 Ryan King |
| 烘焙采样数 | 至少 30 | Kaspar |
质量门槛
可测量:
M.audit_material(mat, obj):按角色设置颜色空间,不能将图像直接接入 Normal,明确指定 UV 映射,Bump Distance 不超过 0.05,不能使用 Add Shader 或直接相加的法线,设置 Emission Strength,不能使用灰色常量金属度,标记法线贴图加置换、非 Cubic 置换图像、Noise Detail 高于 6、未保存的图像。M.value_report(objs):电介质反照率在 30 到 243 sRGB 范围内(范围外低于 2%),金属度高于 180,分数金属度低于 5%(实时 Bevel/AO 磨损在烘焙前会超过此值),粗糙度标准差高于 0.01。- 应用缩放;颜色属性命名为
col_*,并与每个 Attribute 节点完全匹配(Kaspar、 Price)。
视觉效果:M.preview 中 EEVEE 与 Cycles 几乎一致;粗糙度行显示出变化;只有皮肤较薄处才有背光辉光;掠射光能显示起伏且没有阶梯状条纹;远处的重复纹理已被打散;逐层静音渲染时,每层都有所贡献(Price);以人体参考物校准比例。
常见错误
| 错误 | 表现 | 修正 |
|---|---|---|
| 数据贴图保留为 sRGB | 凸起变形,高光错误 | Non-Color |
| 同时使用法线贴图和置换(Node Wrangler 默认设置) | 浮雕效果重叠或破损 | 只保留一个 |
| 置换没有几何体或 Catmull-Clark | 没有变化,或边角变圆 | 使用 Simple subdivision,平滑着色 |
| 4.5 之前版本的 Bump Distance 设为 1.0 | 阶梯感,像塑料 | 使用真实高度,约为 0.001 到 0.01 |
| 设置了 Emission Color,Strength 却为 0 | 没有发光 | 将 Strength 设为大于 0 |
| 在 5.2 中使用 Kaspar 的 v1 SSS 数值 | 耳朵呈蜡白色 | 设为 0.005 到 0.04,并检查背光效果 |
| 在 EEVEE 或游戏中使用 Bevel 磨损或 Pointiness | 磨损效果缺失 | 烘焙,或使用 curvature_attribute |
| 对实时 Bevel/AO 金属效果使用阈值 | 边缘呈颗粒状灰色 | 先烘焙,再设置阈值 |
| EEVEE 中的角膜外壳使用默认厚度 | 虹膜放大 | 将 Thickness 设为 0(cornea_material) |
| 直接使用 Noise 生成遮罩 | 效果几乎不可见 | 使用渐变或 Map Range 增强对比度 |
| 设置完成后立即绘制笔画 | 只绘制出部分或没有绘制,且每次运行结果不同 | 先重新绘制(gui_texture_stroke) |
| 从未设置绘制颜色/新建颜色属性 | 笔画呈黑色/遮罩呈白色 | 设置颜色;先写入零值 |
| 在绑定模型上使用 Box projection 或 Generated 坐标 | 纹理漂移 | 使用 UV 坐标 |
Blender 5.2 注意事项
- Principled v2:Subsurface Weight/Scale(没有 Subsurface Color)、Specular IOR Level、Transmission Weight、Coat、Emission Strength 默认值为 0。通过名称获取插槽;Mix 节点通过索引获取(RGBA:A=6,B=7, Result=2)。
- 色彩空间
sRGB、Non-Color、Linear Rec.709。Displacement 节点的 Scale 默认值为 0.01; 使用material.displacement_method(而不是material.cycles);EEVEE 从 4.2 开始支持置换(Displacement and Bump)。 use_nodes已弃用;surface_render_method取代blend_method;折射需要use_raytrace_refraction以及场景光线追踪。- EEVEE 不支持各向异性、Bevel、Pointiness、Random Per Island(已验证)。Random Walk SSS 在 5.2 中重新缩放。Musgrave 已整合到 Noise 中。
- 笔刷是资产;自定义笔刷需要使用 "Save Changes to Asset"(Abbitt);
image_brush_type;Blur 对应SOFTEN;取样颜色使用Shift+X。 - 在 Object 模式下,无界面运行时也可使用
paint.vertex_color_dirt;字节图像存储编码值,保存为 PNG 时,浮点Linear Rec.709图像会转换为 sRGB。
参考资料
references/procedures.md:每个阶段经过测试的代码(纹理集、 置换规则、盒式投影、磨损、曲率、贴花、皮肤、眼睛、各向异性、GUI 和 无界面绘制、高通、检查、摄像机射线世界、陶土切换、绘制光照、Color Burn 遮罩、物理 UV 比例)。references/expert-notes.md:各位专家的推理、时间戳,以及 分歧和用于裁定的条件。references/critique.md:用于评判自己的渲染和节点树的标准。references/sources.md:所有来源视频、凭据和最佳时间戳。