threejs学习系列之五:纹理贴图相关

122 阅读2分钟

1.纹理对象Texture做为材质的颜色贴图,材质的颜色贴图属性map是一个纹理对象Texture

可以通过修改几何体顶点数据上的uv坐标,来调整模型表面上纹理贴图的表现

2.纹理对象的平铺设置

const texture2 = new THREE.TextureLoader().load("./assets/textures/crate.gif"); //加载图片得到纹理
texture2.wrapS = THREE.MirroredRepeatWrapping; //横向对称重复
texture2.wrapT = THREE.RepeatWrapping; //纵向重复
texture2.repeat.set(4, 4); //两个方向上重复的数量

3.Texture.offset.x 贴图在模型上x方向上的偏移,可以理解相当于几何体顶点的uv坐标改变了,其实没有改变

4.解决纹理贴图颜色偏差

设置渲染器RendereroutputColorSpace属性与纹理贴图TexturecolorSpace属性值保持一致,为以下四个之一

  • NoColorSpace ---不设颜色空间
  • SRGBColorSpace ---rgb颜色空间
  • LinearSRGBColorSpace ---线性rgb颜色空间
  • DisplayP3ColorSpace; ---display p3颜色空间

5.纹理贴图 Texture 的flipY属性

如果模型上的纹理贴图是倒立的,则设置 texture.flipY = !texture.flipY;,即可将贴图正过来

6.环境贴图 envMap

①基础模型材质:MeshBasicMaterial,漫反射材质: MeshLambertMaterial ,高光材质:MeshPhongMaterial,标准物理材质: MeshStandardMaterial,物理材质: MeshPhysicalMaterial都有环境贴图属性 evnMap

②环境贴图属性 evnMap是一个立方体纹理对象THREE.CubeTexture,用CubeTextureLoader加载六张图返回一个立方体纹理对象,赋值给evnMap

③环境贴图属性 evnMap所指向的立方体纹理对象 THREE.CubeTexture的属性colorSpace要和渲染器、纹理贴图map设置成一样的值,用于解决颜色偏差

④可以将场景Scene的环境属性.environment,设置成一个立方体纹理对象,这样所有持有物理材质的模型就都具有环境贴图的效果了,也就是说不需要对场景中所有物理材质设置环境贴图 evnMap了

7.标准物理材质: MeshStandardMaterial的三个属性

  1. 金属度metalness 取值范围(0-1)
  2. 粗糙度roughness取值范围(0-1)
  3. 环境贴图强度 envMapIntensity,取值范围(0-1)

8.物理材质 MeshPhysicalMaterial的属性

MeshPhysicalMaterialMeshStandardMaterial的子类

  1. 透明层(清漆层) clearcoat,取值范围(0-1)
  2. 透明层粗糙度 clearcoatRoughness,取值范围(0-1)
  3. 透光率 transmission,取值范围(0-1)
  4. 反射率 reflectivity,取值范围(0-1)
  5. 折射率 ior,取值范围(1.0到2.333)
  6. 光泽 sheen
  7. 光泽颜色 sheenColor
  8. 光泽颜色贴图 sheenColorMap
  9. ...