PBR金属流和高光流

1,296 阅读1分钟

PBR次时代两种流派

  • 金属流(metal-roughness)
    • 基础色贴图(basecolor)
    • 粗糙度贴图(roughness)
    • 金属度贴图(metallc)
  • 高光流(specular-glossiness)
    • 基础色贴图(diffuse/albedo)
    • 高光贴图 (glossiness)
    • 光泽度贴图 (specular) image.png

ThreeJS

  • MeshPhysicalMaterial 是金属流
  • MeshStandardSGMaterial 是高光流(继承MeshPhysicalMaterial)

MeshPhysicalMaterial

  • PHYSICAL比standard多了的东西
#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;
  • 添加uniform
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;
        }
}