1. THREE.sRGBEncoding

纹理中包含的颜色信息(.map, .emissiveMap, 和 .specularMap)在glTF中总是使用sRGB颜色空间,而顶点颜色和材质属性(.color, .emissive, .specular) 则使用线性颜色空间。在典型的渲染工作流程中,纹理会被渲染器转换为线性颜色空间,进行光照计算,然后最终输出会被转换回 sRGB 颜色空间并显示在屏幕上。

  • 在使用 glTF 的时候将 WebGLRenderer 进行配置:renderer.outputEncoding = THREE.sRGBEncoding;
/**
  * 创建渲染器对象
  */
const renderer = new THREE.WebGLRenderer({
  antialias: true,
  alpha: true,
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(width, height);
renderer.outputEncoding = THREE.sRGBEncoding;
renderer.setClearColor(0x00ffff, 1);
  • 当从外部加载纹理(例如,使用 TextureLoader)并将纹理应用到 glTF 模型,则必须给定对应的颜色空间与朝向:
carModel.traverse((object) => {
  if (object.type === 'Mesh') {
    if (object.name === '车标') {
      object.material.map = new THREE.TextureLoader().load('./gltf/Image_0.png');
      object.material.map.encoding = THREE.sRGBEncoding;
      object.material.map.flipY = false;
    }
  }
});
Copyright © tomgou 2022 all right reserved,powered by Gitbook该文章修订时间: 2022-09-15 12:35:19

results matching ""

    No results matching ""