PBR材质与纹理贴图

167 阅读1分钟

PBR材质简介

// 所谓PBR就是,基于物理的渲染(physically-based rendering)
 MeshLambertMaterial: **Lambert光照模型**(漫反射)
 MeshPhongMaterial:**Phong光照模型**(漫反射、高光反射)

PBR材质金属度和粗糙度

// **金属度**`metalness`
// **粗糙度**`roughness`

# 环境贴图.envMap(金属效果)(PBR一般需要使用环境贴图)

### `CubeTextureLoader`加载环境贴图
// 加载环境贴图
// 加载周围环境6个方向贴图
// 上下左右前后6张贴图构成一个立方体空间
// 'px.jpg', 'nx.jpg':x轴正方向、负方向贴图  p:正positive  n:负negative
// 'py.jpg', 'ny.jpg':y轴贴图
// 'pz.jpg', 'nz.jpg':z轴贴图
const textureCube = new THREE.CubeTextureLoader()
    .setPath('./环境贴图/环境贴图0/')
    .load(['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg']);
    // CubeTexture表示立方体纹理对象,父类是纹理对象Texture 
### `MeshStandardMaterial`环境贴图属性`.envMap`
// 加载环境贴图
const textureCube = new THREE.CubeTextureLoader()
    .setPath('./环境贴图/环境贴图0/')
    .load(['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg']);
### `MeshStandardMaterial`环境贴图属性`.envMap`
new THREE.MeshStandardMaterial({
    metalness: 1.0,
    roughness: 0.5,
    envMap: textureCube, //设置pbr材质环境贴图
})    
### 环境贴图反射率`.envMapIntensity`
// envMapIntensity:控制环境贴图对mesh表面影响程度
//默认值1, 设置为0.0,相当于没有环境贴图
obj.material.envMapIntensity = 1.0;
// 如果你希望环境贴图影响场景中scene所有Mesh,可以通过Scene的场景环境属性`.environment`实现,把环境贴图对应纹理对象设置为`.environment`的属性值即可。
// 环境贴图纹理对象textureCube作为.environment属性值,影响所有模型
scene.environment = textureCube;