Meshes stay dark until lights hit them. Combine ambient + directional lights for readability. For realistic-ish shading use MeshStandardMaterial: tune roughness (matte vs glossy) and metalness — still real-time friendly on phones when you keep geometry modest.
// Lights + standard material
scene.add(new THREE.AmbientLight(0xffffff, 0.35));
const dir = new THREE.DirectionalLight(0xffeedd, 1.2);
dir.position.set(3, 5, 4);
scene.add(dir);
const mat = new THREE.MeshStandardMaterial({
color: 0x6f4e37,
roughness: 0.45,
metalness: 0.35
});
Move directional lights like the sun — angle matters more than intensity alone.
Module 3 groups objects so transforms cascade.