¿Cómo se atraviesa correctamente una malla cargada con GLTFLoader para recorrer todas las capas?
Estoy tratando de hacer un pase de floración selectivo simple en un modelo atravesando todas las partes del modelo, configurándolas en la capa de floración y luego renderizando las capas originales + florecidas combinadas. Sin embargo, como podemos ver en las imágenes a continuación, solo se encuentra la parte exterior amarilla del modelo durante el recorrido, ¿alguien sabe cómo extraer el resto del modelo para la configuración de capas?
Para la reproducción, el modelo se puede descargar desde aquí: https://github.com/whatsmycode/Models/blob/master/PrimaryIonDrive.glb
Este es el código que uso actualmente:
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; let BLOOM_LAYER = 1; new GLTFLoader().load( 'models/PrimaryIonDrive.glb', function ( gltf ) { const model = gltf.scene; model.traverse( function( child ) { child.layers.enable(BLOOM_LAYER); }); scene.add( model ); });Esta es la imagen resultante, la floración se aplica solo a los anillos exteriores amarillos.
Esta es solo la máscara de floración.
El problema era que no había agregado las luces de punto y ambientales a ambas capas. El objeto florecido tiene propiedades que requieren luz para mostrar color en todas las partes, excepto en los anillos amarillos que emiten. Para solucionar el problema, simplemente habilité las luces para ambas capas antes de agregar las luces a la escena.
const pointLight = new THREE.PointLight(0xffffff); pointLight.layers.enable(ENTIRE_LAYER); pointLight.layers.enable(BLOOM_LAYER); const ambientLight = new THREE.AmbientLight(0xffffff); ambientLight.layers.enable(ENTIRE_LAYER); ambientLight.layers.enable(BLOOM_LAYER); scene.add(pointLight, ambientLight);