Code

Three.js

Lighting

Intermediate Three coloured PointLights (red, blue, yellow) orbit a white MeshStandardMaterial sphere, painting dynamic colour onto its surface. Three.js Docs

// White sphere with PBR material
const sphere = new THREE.Mesh(
  new THREE.SphereGeometry(0.9, 64, 64),
  new THREE.MeshStandardMaterial({
    color: 0xffffff,
    roughness: 0.25,
    metalness: 0.1
  })
);
scene.add(sphere);

// Three coloured orbiting point lights
const lightDefs = [
  { color: 0xff4433, radius: 2.8 },
  { color: 0x33aaff, radius: 2.8 },
  { color: 0xffcc00, radius: 2.8 },
];

const lights = lightDefs.map({ color, radius } => {
  const light = new THREE.PointLight(color, 3, 10);
  scene.add(light);
  return { light, radius };
});

let t = 0;
function animate() {
  lights.forEach(({ light, radius }, i) => {
    const a = t + (i / 3) * Math.PI * 2;
    light.position.set(
      Math.cos(a) * radius,
      Math.sin(t * 0.6 + i * 1.2) * 0.8,
      Math.sin(a) * radius
    );
  });
  t += 0.016;
  renderer.render(scene, camera);
  requestAnimationFrame(animate);
}