Обновления материала Three.js GLTF не сохраняют цвет - PullRequest
0 голосов
/ 03 января 2019

У меня есть объект GLTF в моей сцене, и когда я впервые загружаю модель, соответствующая текстура рендерится с ней очень хорошо (текстура впервые определена в GLTF json):

enter image description here

Теперь я хочу иметь возможность обновить текстуру материала GLTF.Я делаю это следующим образом:

this.gltf.scene.traverse(
  (child) => {
    if (child.name == 'defaultMaterial') {
      this.rootMaterial = child.material;
      child.material.map = texture;
      child.material.map.needsUpdate = true;
    }
  }
);

Когда материал обновляется, он выглядит блеклым и неправильно освещенным:

enter image description here

IМне интересно, если метод, который я использую для переопределения материала, не обновляется должным образом, ИЛИ, возможно, материал, как это определено в структуре JSON GLTF, пропускает настройки, так как текстура перезаписана.В этом случае я не уверен, как ПРОСТО изменить изображение или реплицировать параметры в Mesh.

Я недостаточно знаю о GLTF или моделировании, чтобы я мог разобраться в этом.

Прилагается определение модели на случай, если она прояснит ситуацию:

{
  "accessors": [
    {
      "bufferView": 2,
      "componentType": 5126,
      "count": 2469,
      "max": [
        0.40150400996208191,
        1,
        0.40150400996208191
      ],
      "min": [
        -0.40150400996208191,
        -1,
        -0.40150400996208191
      ],
      "type": "VEC3"
    },
    {
      "bufferView": 2,
      "byteOffset": 29628,
      "componentType": 5126,
      "count": 2469,
      "max": [
        1,
        1,
        1
      ],
      "min": [
        -1,
        -1,
        -1
      ],
      "type": "VEC3"
    },
    {
      "bufferView": 3,
      "componentType": 5126,
      "count": 2469,
      "max": [
        1,
        0.9930080771446228,
        0.99999946355819702,
        1
      ],
      "min": [
        -0.99999970197677612,
        -0.99982893466949463,
        -1,
        -1
      ],
      "type": "VEC4"
    },
    {
      "bufferView": 1,
      "componentType": 5126,
      "count": 2469,
      "max": [
        0.99194198846817017,
        0.99000000953674316
      ],
      "min": [
        0.0099999997764825821,
        0.0099999997764825821
      ],
      "type": "VEC2"
    },
    {
      "bufferView": 0,
      "componentType": 5125,
      "count": 12984,
      "max": [
        2468
      ],
      "min": [
        0
      ],
      "type": "SCALAR"
    }
  ],
  "asset": {
    "extras": {
      "author": "jmvfx (https://sketchfab.com/jmvfx)",
      "license": "SKETCHFAB Standard (https://sketchfab.com/licenses)",
      "source": "https://sketchfab.com/models/aff40b3b41e84de5a4d92d5fd1995b8d",
      "title": "Dark Angels - Monster Never Die?"
    },
    "generator": "Sketchfab-3.31.2",
    "version": "2.0"
  },
  "bufferViews": [
    {
      "buffer": 0,
      "byteLength": 51936,
      "byteOffset": 0,
      "name": "floatBufferViews",
      "target": 34963
    },
    {
      "buffer": 0,
      "byteLength": 19752,
      "byteOffset": 51936,
      "byteStride": 8,
      "name": "floatBufferViews",
      "target": 34962
    },
    {
      "buffer": 0,
      "byteLength": 59256,
      "byteOffset": 71688,
      "byteStride": 12,
      "name": "floatBufferViews",
      "target": 34962
    },
    {
      "buffer": 0,
      "byteLength": 39504,
      "byteOffset": 130944,
      "byteStride": 16,
      "name": "floatBufferViews",
      "target": 34962
    }
  ],
  "buffers": [
    {
      "byteLength": 170448,
      "uri": "scene.bin"
    }
  ],
  "images": [
    {
      "uri": "textures/initialShadingGroup_metallicRoughness.png"
    },
    {
      "uri": "textures/initialShadingGroup_normal.png"
    },
    {
      "uri": "textures/standard.jpg"
    }
  ],
  "materials": [
    {
      "doubleSided": true,
      "emissiveFactor": [
        0,
        0,
        0
      ],
      "name": "initialShadingGroup",
      "normalTexture": {
        "index": 1,
        "scale": 1,
        "texCoord": 0
      },
      "occlusionTexture": {
        "index": 0,
        "strength": 1,
        "texCoord": 0
      },
      "pbrMetallicRoughness": {
        "baseColorFactor": [
          1,
          1,
          1,
          1
        ],
        "baseColorTexture": {
          "index": 2,
          "texCoord": 0
        },
        "metallicFactor": 1,
        "metallicRoughnessTexture": {
          "index": 0,
          "texCoord": 0
        },
        "roughnessFactor": 1
      }
    }
  ],
  "meshes": [
    {
      "name": "defaultMaterial",
      "primitives": [
        {
          "attributes": {
            "NORMAL": 1,
            "POSITION": 0,
            "TANGENT": 2,
            "TEXCOORD_0": 3
          },
          "indices": 4,
          "material": 0,
          "mode": 4
        }
      ]
    }
  ],
  "nodes": [
    {
      "children": [
        1
      ],
      "name": "RootNode (gltf orientation matrix)",
      "rotation": [
        -0.70710678118654746,
        -0,
        -0,
        0.70710678118654757
      ]
    },
    {
      "children": [
        2
      ],
      "name": "RootNode (model correction matrix)"
    },
    {
      "children": [
        3
      ],
      "matrix": [
        1,
        0,
        0,
        0,
        0,
        -4.3711390063094768e-08,
        0.999999999999999,
        0,
        0,
        -0.999999999999999,
        -4.3711390063094768e-08,
        0,
        0,
        0,
        0,
        1
      ],
      "name": "Collada visual scene group"
    },
    {
      "children": [
        4
      ],
      "name": "g"
    },
    {
      "mesh": 0,
      "name": "defaultMaterial"
    }
  ],
  "samplers": [
    {
      "magFilter": 9729,
      "minFilter": 9987,
      "wrapS": 10497,
      "wrapT": 10497
    }
  ],
  "scene": 0,
  "scenes": [
    {
      "name": "OSG_Scene",
      "nodes": [
        0
      ]
    }
  ],
  "textures": [
    {
      "sampler": 0,
      "source": 0
    },
    {
      "sampler": 0,
      "source": 1
    },
    {
      "sampler": 0,
      "source": 2
    }
  ]
}

Любой опытный взгляд на это будет очень полезен.

1 Ответ

0 голосов
/ 04 января 2019

Из раздела «Текстуры» в документах GLTFLoader вы можете настроить средство визуализации и новую текстуру для достижения наилучших результатов:

renderer.gammaOutput = true;
renderer.gammaFactor = 2.2;

// If texture is used for color information, set colorspace.
texture.encoding = THREE.sRGBEncoding;

// UVs use the convention that (0, 0) corresponds to the upper left corner of a texture.
texture.flipY = false;
...