Hemisphere Light
HemisphereLight blends a sky color and ground color based on the surface normal direction.
Controls
Benchmark
Runs fixed workloads with warmup frames, repeated samples, p50/p95 FPS and frame timing, workload counters, pipeline timings, and JSON output.
import * as EASEL from "easel";
const scene = new EASEL.Scene();
const camera = new EASEL.PerspectiveCamera({
fov: 45,
aspect: width / height,
near: 0.1,
far: 100,
});
camera.position.set(0, 2, 10);
const hemi = new EASEL.HemisphereLight(0x8888ff, 0x443322, 1);
scene.add(hemi);
const mat = new EASEL.LambertMaterial({ color: 0x999999 });
const sphere = new EASEL.Mesh(new EASEL.SphereGeometry(1, 24, 16), mat);
sphere.position.set(-3, 0, 0);
const box = new EASEL.Mesh(new EASEL.BoxGeometry(1.5, 1.5, 1.5), mat);
const torus = new EASEL.Mesh(new EASEL.TorusGeometry(0.8, 0.3, 16, 32), mat);
torus.position.set(3, 0, 0);import * as THREE from "three";
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 100);
camera.position.set(0, 2, 10);
const hemi = new THREE.HemisphereLight(0x8888ff, 0x443322, 1);
scene.add(hemi);
const mat = new THREE.MeshLambertMaterial({ color: 0x999999 });
const sphere = new THREE.Mesh(new THREE.SphereGeometry(1, 24, 16), mat);
sphere.position.set(-3, 0, 0);
const box = new THREE.Mesh(new THREE.BoxGeometry(1.5, 1.5, 1.5), mat);
const torus = new THREE.Mesh(new THREE.TorusGeometry(0.8, 0.3, 16, 32), mat);
torus.position.set(3, 0, 0);