Blockbench PBR材质完全指南:3步搞定金属度粗糙度贴图与MER通道合并
【免费下载链接】blockbenchBlockbench - A low poly 3D model editor项目地址: https://gitcode.com/GitHub_Trending/bl/blockbench
3D模型里的金属件,进引擎后常常"纸板化"——没有反射、发闷,PBR质感完全丢失。问题根源通常只有一个:材质缺金属度和粗糙度数据。Blockbench PBR材质用了一个很轻的办法解决它:把金属度、发射度、粗糙度数据塞进同一张贴图的 RGB 通道(即 MER 贴图),挂到材质组上,低多边形模型也能立刻拥有接近真实金属件的材质表现。
为什么需要Blockbench PBR材质:表面由两张贴灰度图描述
PBR(基于物理的渲染)是按物理规律计算光线与表面交互的照明模型。它的好处是不用手动"画高光",而是给引擎一组描述性贴图,由光照系统自己算出真实的反射效果。其中最关键的两个描述就是金属度与粗糙度:
- 金属度贴图:告诉着色器"这块区域有多像金属"。纯黑是完全非金属(木头、布料),纯白是纯金属(钢板、币面),中间灰是过渡状态,比如氧化金属或喷涂层。还有一个容易忽略的点:真实金属反射的是环境而不是自身颜色,所以基础色里金属区域别用高饱和色硬画"金色",光泽要靠反射去表现。
- 粗糙度贴图:控制反射的散开程度。纯黑是镜面光滑(镜子、湿滑面),纯白是完全粗糙(砂纸、水泥),中间灰介于两者之间(塑料、皮革)。粗糙区域多撒一些噪点细节,质感会更"耐看"。
金属度灰度速查表
| 灰度值 | 表面属性 | 典型材质 |
|---|---|---|
| 0(纯黑) | 完全非金属 | 木材、布料、皮革 |
| 128 左右(中灰) | 半金属过渡 | 氧化金属、喷漆表面 |
| 255(纯白) | 纯金属 | 钢、铜、镀金件 |
粗糙度灰度速查表
| 灰度值 | 表面属性 | 典型材质 |
|---|---|---|
| 0(纯黑) | 镜面光滑 | 镜面、湿滑表面 |
| 128 左右(中灰) | 半光滑 | 塑料、磨损金属 |
| 255(纯白) | 完全粗糙 | 砂纸、混凝土 |
绘制时记住一条主线就够了:金属部件涂白、非金属涂黑;磨损和划痕越多,粗糙度数值越高。
MER通道三步合并法:一条数据流装进一张图
每种属性单独存一张贴图,内存开销会迅速膨胀,社区因此流行"通道打包":把不同数据写进同一张 RGBA 贴图的不同通道。Blockbench 遵循 MER 方案:
- R 通道 → 金属度
- G 通道 → 发射度
- B 通道 → 粗糙度
- A 通道→ 可留给透明度或其他用途
合并三步:① 建一张与基础色同分辨率的贴图(低多边形模型 64x64 到 256x256 足够);② 分别把金属度灰度画进 R 通道、发射度画进 G 通道、粗糙度画进 B 通道;③ 在材质组里把这张贴图标记为mer通道。渲染时,js/texturing/texture_groups.js 的updateMaterial()会把各通道抽取成对应的 PBR 贴图:
generateMap(0, 'metalnessMap'); // R → 金属度 generateMap(1, 'emissiveMap'); // G → 发射度 generateMap(2, 'roughnessMap'); // B → 粗糙度发射度通道有个细节值得注意:它不是一张独立的"发光颜色图",而是拿基础色乘以 G 通道灰度生成的(发光色 = 基础色 × G/255)。所以某处 G=255 时,该区域会用自己的基础色发亮;G=0 则完全不发光。
在纹理列表里,每张图的角色由 js/texturing/textures.js 中的pbr_channel属性管理:右键任意贴图,可在 color / normal / height / mer 之间切换,立即生效。
Blockbench材质组创建与配置流程
材质组(Texture Group)是把多张贴图组织成一个 PBR 材质单元的容器,操作路径如下:
- 在纹理面板选中基础色贴图(可多选带入其余贴图),点击Create Material按钮。注意当前格式必须支持 PBR 才会出现这个入口。
- 创建时 Blockbench 会按文件名自动推断通道:名称含
height的归到高度通道,含[._-]normal的归到法线通道,含[._-]mer[._-]的归到 mer 通道。所以把文件命名为gear_mer.png就能少一步手动切换。 - 打开材质配置面板,为 color / MER / 高度(或法线)槽位分别选择"指定贴图"或"直接填统一数值"。挂了 MER 贴图后,逐像素灰度生效;不挂贴图时,在配置里直接输入统一的金属度、粗糙度值即可。
- 切到材质显示模式查看效果。绘制 mer 或 height 贴图时,材质会实时更新;环境光强度默认 0.8,模型偏灰偏闷时可以在这附近微调。
从基础色一键生成金属粗糙度数据
不想手绘三个通道的话,纹理菜单里的Generate PBR Map工具可以从基础色贴图里采样数据:支持平均值、亮度、饱和度、色相或直接取 R/G/B 通道作为来源,再经过输入范围、输出范围重映射,还能勾选反转。生成结果会以附加图层的方式写入 MER 贴图的对应通道。一个常见用法是按亮度提取粗糙度(基础色亮的区域更粗糙,或勾选反转后暗处更粗糙),并把参数存成预设,套用到后续贴图。
完整案例:青铜齿轮从绘制到导出
以一枚"青铜齿轮"为例,全程沿用上面建立的低多边形 PBR 工作流。
绘制青铜齿轮的MER贴图
- 基础色(64x64):齿轮齿面填中亮度的青铜色,轴孔处略深,点缀几个暗色斑点模拟氧化坑;木质轴段用棕色。记住金属色别太饱和,给反射留余地。
- MER 贴图(同为 64x64):
- R 通道:齿轮金属部分纯白 255,木质轴段纯黑 0。
- G 通道:整张纯黑(这件没有自发光需求)。
- B 通道:齿轮主体约 128 中灰(磨损金属);齿缘和轮体外圈叠加 150–200 的划痕噪点(磨损更粗糙);木质轴段给约 220 的高值(木头本身粗糙)。
- 材质组配置:基础色挂到 color 槽、MER 贴图挂到 mer 槽。挂了贴图后统一数值不再起作用,最终效果由你画的逐像素数据决定。
- 预览调优:在材质模式下观察齿面高光反射、边缘磨损与木轴的哑光感。如果金属显得"发蜡",把齿面 B 通道数值调低(降低粗糙度)。
导出GLB/OBJ与PBR纹理选项
跨平台交换首选GLB:GLTF 导出器(js/lib/GLTFExporter.js)会把金属度/粗糙度数据打包进 glTF 标准的pbrMetallicRoughness字段,Unity、Unreal、three.js 都能直接读取。选 OBJ 时,材质会被写入配套的.mtl文件,但 MTL 对 PBR 贴图的支持有限,更适合简单展示或几何交换。
另外提醒:贴图务必用无损格式(PNG)保存。MER 贴图一旦走 JPEG 之类的有损压缩,通道数据会被压缩噪点污染,金属和粗糙度会糊在一起。
材质不生效排查清单
⚠️ 刚上手 PBR 时几乎都会踩下面这些坑,动手排查前先过一遍这张表:
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
| 金属区域无反光,整体像塑料 | MER 贴图未标记为 mer 通道,或 R 通道没填数据 | 右键贴图把 PBR 通道切到 mer;检查 R 通道黑白数据 |
| 粗糙度怎么调都没变化 | B 通道为空(全 0)或被压缩噪点污染 | 重新绘制灰度;贴图存为无损 PNG |
| 整体偏亮 / 偏暗 | 环境光强度不合适 | 把材质环境光强度调到 0.5–1.0 区间微调 |
| 贴图拉伸,金属区错位 | 基础色与 MER 分辨率或 UV 不一致 | 统一分辨率(如都 64x64 或 256x256),对齐 UV 布局 |
| 画了自发光区域却发黑 | G 通道为 0 | G=255 时按基础色全亮发光,G=0 则无发光 |
| 引擎里识别不出金属属性 | 导出了 OBJ,PBR 贴图丢失 | 改导 GLB,或单独交付金属度/粗糙度贴图 |
如果都不命中,再回头核对两点:材质组类型是否开启(只有 is_material 的材质组会参与材质构建),以及纹理的pbr_channel是否指对了角色。
下一步:次表面散射、texture_set 导入与插件自动化
金属做完之后,路还可以往这几个方向走:
- 次表面散射:Bedrock 的 texture_set 支持 subsurface 数值(材质配置里有对应开关,格式版本会升到 1.21.30),玉石、皮肤这类半透明材质会更可信。手上若已有现成的
texture_set.json资源,Blockbench 可以直接导入并自动还原材质组与通道分配。 - 参考照片工作流:动手前拍几张真实金属、粗糙表面的照片,作为参考图放进视口对照绘制,纹理质量会明显提升。
- 插件自动化:批量模型需要同款材质时,用 Blockbench API(js/api.ts)写个插件,从基础色一键生成 MER 贴图——前面提到的 Generate PBR Map 预设,本质上就是这个思路的官方实现。
金属度粗糙度贴图是低多边形模型上性价比最高的一次升级:几何不动,质感先变。先按上面的流程做一枚青铜齿轮,等反射在材质模式下亮起来的那一刻,这套工作流你就彻底通了。
【免费下载链接】blockbenchBlockbench - A low poly 3D model editor项目地址: https://gitcode.com/GitHub_Trending/bl/blockbench
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考