PBR次时代两种流派
- 金属流(metal-roughness)
- 基础色贴图(basecolor)
- 粗糙度贴图(roughness)
- 金属度贴图(metallc)
- 高光流(specular-glossiness)
- 基础色贴图(diffuse/albedo)
- 高光贴图 (glossiness)
- 光泽度贴图 (specular)

ThreeJS
- MeshPhysicalMaterial 是金属流
- MeshStandardSGMaterial 是高光流(继承MeshPhysicalMaterial)
MeshPhysicalMaterial
#ifdef PHYSICAL
#define REFLECTIVITY
#define IOR
#define CLEARCOAT
#define TRANSMISSION
#endif
MeshStandardSGMaterial
- shader里自己的define信息和删除父类的define信息
this.defines.STANDARD_SG = '';
delete this.metalness;
delete this.roughness;
delete this.metalnessMap;
delete this.roughnessMap;
this._extraUniforms = {
specular: { value: new THREE.Color().setHex(0x000000) },
glossiness: { value: 0 },
specularMap: { value: null },
glossinessMap: { value: null }
};
- 给uniform添加参数
- 删除或添加define信息
- glossiness类同
get specular() {
return this._extraUniforms.specular.value;
}
set specular(v) {
this._extraUniforms.specular.value = v;
}
get specularMap() {
return this._extraUniforms.specularMap.value;
}
set specularMap(v) {
this._extraUniforms.specularMap.value = v;
if (v) {
this.defines.USE_SPECULARMAP = '';
} else {
delete this.defines.USE_SPECULARMAP;
}
}