aframeenvironmentpbr

Aframe 1.0.4 - setting scene.environment does not update materials


So I saw an old post here:

https://discourse.threejs.org/t/is-there-a-way-to-increase-scene-environment-map-exposure-without-affecting-unlit-materials/13458/4

That says... "If you apply the env map to Scene.environment, it is automatically used as the environment map for all physical materials in the scene (assumed the material’s envmap is not set)."

So tried this using an Aframe component on the scene:

AFRAME.registerComponent('setenvironment', {
  init: function () {
    var sceneEl = this.el;
    var loader = new THREE.CubeTextureLoader();
    loader.setPath('./');

    var textureCube = loader.load([
      './images/py.png', './images/pz.png',
      './images/nx.png', './images/ny.png',
      './images/px.png', './images/nz.png'
    ]);
    textureCube.encoding = THREE.sRGBEncoding;
    sceneEl.object3D.environment = textureCube;
  }
});

The environment attribute is successfully set, but the other objects materials still have envMap set to null and the environment lighting does not take effect on the materials.

Any ideas?


Solution

  • aframe 1.0.4 uses three.js revision 111dev. The scene's environment property was introduced in revision 112 (source).

    If you use the aframe master build - it seems to be working properly (as its based on three.js r119).

    Otherwise, you'll have to iterate through the meshes, and set the material.envMap property manually.