- 图形学
【免费下载链接】glTF
glTF – Runtime 3D Asset Delivery
ADOBE_materials_clearcoat_tint 是 glTF 2.0 扩展体系中的一项 Vendor 扩展(由 Adobe 提出,当前状态为 Complete),其作用是为KHR_materials_clearcoat提供的清漆(clearcoat)层定义颜色着色(tint),从而精确控制透过清漆层的光线颜色与强度,模拟深红色清漆、琥珀色涂层、有色保护漆等真实物理材质。读完本文你将掌握:如何在一个 glTF 2.0 材质上组合声明这两个扩展、clearcoatTintFactor与clearcoatTintTexture两个属性的语义与使用规则、清漆着色的 BRDF 计算公式,以及该扩展在 glTF 对象模型(ObjectModel)与KHR_texture_transform交互下的完整数据指针。
扩展定位:给清漆层"上色"
在 glTF 2.0 的 PBR 体系中,KHR_materials_clearcoat 扩展为材质叠加一层透明的清漆(clear coat),用于表现车漆、木器清漆、塑料保护层等表面。默认情况下这层清漆是"无色"的——它只通过 Fresnel 反射与微表面 BRDF 影响光照,自身不吸收颜色。
ADOBE_materials_clearcoat_tint正是为了补上这个缺口:它在清漆层上定义"透射色"(tint),即允许通过清漆层的颜色。这与现实世界中带色清漆(如深红色木器漆、琥珀色透明涂层)的物理行为一致:光线穿过有色涂层时,部分颜色被吸收。
依赖与排除条件
根据 关联文档 的规范说明:
- 依赖:该扩展基于 glTF 2.0 规范编写,且必须与
KHR_materials_clearcoat同时定义在同一个材质上; - 排除:不得用于同时使用
KHR_materials_pbrSpecularGlossiness或KHR_materials_unlit的材质(与KHR_materials_clearcoat自身的排除规则一致)。
从命名与层级看,该扩展属于 Vendor 扩展(前缀ADOBE),在 extensions/README.md 的 Vendor Extensions 列表中登记,不被 Khronos IP 框架覆盖。
在 glTF 材质上声明 tint
最小可用示例
将ADOBE_materials_clearcoat_tint扩展加到任何已经声明了KHR_materials_clearcoat的 glTF 材质上即可。下面来自关联文档的示例定义了一个带深红色清漆的材质:
{ "materials": [ { "name": "varnish", "extensions": { "KHR_materials_clearcoat": { "clearcoatFactor": 1.0 }, "ADOBE_materials_clearcoat_tint": { "clearcoatTintFactor": [ 0.4, 0.1, 0.1 ] } } } ] }在这个例子中:
KHR_materials_clearcoat.clearcoatFactor = 1.0表示清漆层强度为满值,清漆层完全生效;ADOBE_materials_clearcoat_tint.clearcoatTintFactor = [0.4, 0.1, 0.1]表示清漆允许透射的颜色偏向深红(红色通道透射 40%,绿、蓝通道各透射 10%),其余光线被吸收。
属性表
根据关联文档及对应的 JSON Schema,该扩展只贡献两个属性:
| 属性 | 类型 | 描述 | 必填 / 默认值 |
|---|---|---|---|
| clearcoatTintFactor | number[3] | 清漆着色(tint)的颜色因子 | 否,默认[1.0, 1.0, 1.0] |
| clearcoatTintTexture | textureInfo | 清漆层的着色纹理 | 否 |
两个属性的语义与底层约束
clearcoatTintFactor:清漆层的透射率
Schema(material.ADOBE_materials_clearcoat_tint.schema.json)对clearcoatTintFactor给出了精确约束:
- 类型为长度为 3 的数值数组(
minItems: 3、maxItems: 3),对应 RGB 三个通道; - 每个分量的取值范围为
0.0到1.0(minimum: 0.0、maximum: 1.0); - 默认值为
[1.0, 1.0, 1.0](白色); - 语义为"清漆层的透射率":黑色表示没有任何光线透过清漆层(全部被吸收),白色表示所有光线都透过;
- 与 glTF 2.0 核心规范一致,所有颜色因子均为线性空间(linear)数值。
clearcoatTintTexture:着色纹理
clearcoatTintTexture引用标准的textureInfo结构(包含index与texCoord),Schema 的gltf_detailedDescription说明:纹理值存储在sRGB 颜色空间,若未提供纹理则假定为白色(即不改变颜色)。这与核心规范"所有彩色纹理假定为 sRGB"的约定一致。
因子与纹理的乘法组合
与 glTF 中其他 factor/texture 组合的规则相同,两个值相乘得到最终的 tint 颜色:
clearcoat_tint.rgb = clearcoatTintFactor.rgb * clearcoatTintTexture.rgb着色如何进入 BRDF:修改 f_clearcoat 公式
清漆层的分层模型
要理解 tint 的作用位置,需要先回顾 KHR_materials_clearcoat 的分层模型。清漆效果通过一个微表面 BRDF 叠加在 glTF 2.0 Metallic-Roughness 材质之上:
# from glTF 2.0 Metallic-Roughness material (core) material = mix(dielectric_brdf, metal_brdf, metallic) # clearcoat clearcoat_brdf = specular_brdf( normal = clearcoatNormal, α = clearcoatRoughness^2) # layering coated_material = fresnel_coat( normal = clearcoatNormal, ior = 1.5, weight = clearcoat, base = material, layer = clearcoat_brdf)其中fresnel_coat使用 Schlick Fresnel 项按权重分层:
coated_material = mix(material, clearcoat_brdf, clearcoat * clearcoat_fresnel) clearcoat_fresnel = 0.04 + (1 - 0.04) * (1 - abs(VdotNc))^5加入 tint 后的着色公式
关联文档 说明:clearcoat_tint只对f_clearcoat公式作轻微修改——将(f_emissive + f_diffuse + f_specular)这一项乘以 tint,以表示来自清漆层下方所有光线的吸收:
clearcoatBlendFactor = clearcoatTexture.r * clearcoatFactor clearcoatFresnel = fresnel(0.04, NdotV) color = mix(vec3(1.0), clearcoat_tint, clearcoatBlendFactor) * (f_emissive + f_diffuse + f_specular) * (1.0 - clearcoatBlendFactor * clearcoatFresnel) + f_clearcoat * clearcoatBlendFactor公式要点拆解:
clearcoatBlendFactor由清漆强度纹理的 R 通道与clearcoatFactor相乘得到,控制清漆层的整体权重;mix(vec3(1.0), clearcoat_tint, clearcoatBlendFactor)根据清漆层的覆盖权重,在"无色(白色)"与"tint 颜色"之间插值——清漆越厚/权重越高,tint 颜色对下层光线的染色越明显;- 下层贡献
(f_emissive + f_diffuse + f_specular)先被 tint 调制(模拟透过有色涂层的光线吸收),再乘(1 - clearcoatBlendFactor * clearcoatFresnel)衰减; - 清漆层自身的反射贡献
f_clearcoat * clearcoatBlendFactor不受 tint 影响——反射发生在涂层表面,光线并未穿透涂层。
实现提示:所有实现都应采用相同的 BRDF 输入计算方式;BRDF 本身的具体实现可根据设备性能与资源约束而变化,详见 glTF 2.0 规范的 Appendix B(BRDF Implementation)。
在 glTF 对象模型中的位置与扩展交互
该扩展已被纳入 glTF 2.0 的对象模型(ObjectModel)定义。在 specification/2.0/ObjectModel.adoc 中,ADOBE_materials_clearcoat_tint的属性指针如下:
| Pointer | 类型 |
|---|---|
/materials/{}/extensions/ADOBE_materials_clearcoat_tint/clearcoatTintFactor | float3 |
与 KHR_texture_transform 的交互
当clearcoatTintTexture上同时声明了KHR_texture_transform扩展时,以下三个指针同样可被寻址(即支持对 tint 纹理做 UV 偏移、旋转与缩放):
| Pointer | 类型 |
|---|---|
/materials/{}/extensions/ADOBE_materials_clearcoat_tint/clearcoatTintTexture/extensions/KHR_texture_transform/offset | float2 |
/materials/{}/extensions/ADOBE_materials_clearcoat_tint/clearcoatTintTexture/extensions/KHR_texture_transform/rotation | float |
/materials/{}/extensions/ADOBE_materials_clearcoat_tint/clearcoatTintTexture/extensions/KHR_texture_transform/scale | float2 |
这使动画系统、材质变体系统等基于 JSON Pointer 的工具可以直接对 tint 属性做动画,例如让清漆颜色随时间渐变,或对 tint 纹理做 UV 动画。
完整实战示例:带纹理的着色清漆
将因子与纹理结合,可以构建更真实的材质。以下示例演示了一个"琥珀色清漆 + 着色纹理"的完整材质声明(纹理的 sRGB 值会与线性因子相乘):
{ "materials": [ { "name": "amber_varnish", "pbrMetallicRoughness": { "baseColorFactor": [0.8, 0.6, 0.4, 1.0] }, "extensions": { "KHR_materials_clearcoat": { "clearcoatFactor": 0.8, "clearcoatRoughnessFactor": 0.1 }, "ADOBE_materials_clearcoat_tint": { "clearcoatTintFactor": [1.0, 0.85, 0.6], "clearcoatTintTexture": { "index": 2, "texCoord": 0 } } } } ] }使用时需注意:该扩展必须与KHR_materials_clearcoat同时存在,且不得与KHR_materials_pbrSpecularGlossiness、KHR_materials_unlit混用;clearcoatTintFactor各分量取值在[0, 1]区间,未提供纹理时按白色处理。
参考资源
- 扩展规范:extensions/2.0/Vendor/ADOBE_materials_clearcoat_tint/README.md
- JSON Schema:material.ADOBE_materials_clearcoat_tint.schema.json
- 依赖的清漆扩展:KHR_materials_clearcoat
- 对象模型指针定义:ObjectModel.adoc
- 扩展索引与 Vendor 扩展列表:extensions/README.md
- 图形学
【免费下载链接】glTF
glTF – Runtime 3D Asset Delivery
相关推荐
探索Lamina:为ThreeJS打造的可扩展层级着色器材质
探索Lamina:为ThreeJS打造的可扩展层级着色器材质 项目介绍 Lamina是一款专为ThreeJS设计的可扩展层级着色器材质库。它通过层级系统,使得创
palera1n 越狱工具新手指南:3步完成旧iPhone的DFU引导与Rootless越狱
palera1n 越狱工具新手指南:3步完成旧iPhone的DFU引导与Rootless越狱 朋友把停更在 iOS 15 的 iPhone 7 Plus 拍在桌
图形学three.js 清漆材质深度指南:ClearcoatTest 模型与 KHR_materials_clearcoat 扩展解析
three.js 清漆材质深度指南:ClearcoatTest 模型与 KHR_materials_clearcoat 扩展解析 导读 本文以 three.js
前端3D渲染图形学
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考