Lit GLB material with vertex colors applies light incorrectly

Describe the bug

When importing a GLB file that has vertex colors, ambient lighting does not affect the model at all and directional light seems to apply only half as strong as for materials that use diffuse color or texture.

To Reproduce

Steps to reproduce the behavior:

  1. Go to https://threejs.org/editor/
  2. Import the attached file
    LightAffectBug.zip
  3. Add an ambient light via Add/AmbientLight
  4. Note that the top part stays black
  5. Add a directional light via Add/DirectionalLight

Expected behavior

Ambient light affects material and directional light affects material same as other materials.

Screenshots

Expected:
image

Actual: Ambient Light Intensity 10
image

Actual: Directional Light Intensity 2
image

Platform:

[X] Device: [Desktop, Mobile]
[X] OS: [Windows, MacOS, Linux, Android, iOS]
[X] Browser: [Chrome, Firefox, Safari, Edge]
[X] Three.js version: [r126]

1 possible answer(s) on “Lit GLB material with vertex colors applies light incorrectly

  1. The materials in the top section have metalness values (metallicFactor in glTF) of 1.0. To quote @WestLangley, who phrased this well in an older comment:

    The diffuse reflectance of a pure metallic material is zero. Metals only reflect specularly, so the pure metal in our model should not respond to the AmbientLight.

    So, it’s correct that fully metallic materials appear dark under fully ambient lighting. For best results you’d want to provide an environment map (scene.environment or material.envMap), which the three.js Editor does not include by default.