Orillusion

Orillusion, a Pure WebGPU 3D Engine

Orillusion (Orillusion/orillusion (https://github.com/Orillusion/orillusion 5,220 ), MIT, about 5,200 stars, @orillusion/core 0.9.2) is a 3D engine built for WebGPU only, with no WebGL path: an entity-component design (Object3D plus components such as MeshRenderer, Camera3D and lights), physically based materials, clustered lighting, shadows, dynamic diffuse global illumination (DDGI), post-processing, and add-on packages for particles, physics (Ammo and Rapier) and media. Its ES module build loads from a CDN, so BookNest's six books, as boxes as thick as their page counts, render in a few lines:

demos/ch04/orillusion-books.html: six BookNest books in OrillusionHTMLLive
<canvas id="stage" width="1280" height="440" style="width:640px;height:220px"></canvas>
<script type="module">
import { Engine3D, Scene3D, Object3D, Camera3D, View3D, DirectLight, MeshRenderer,
  BoxGeometry, LitMaterial, Color, Vector3, AtmosphericComponent } from
  'https://cdn.jsdelivr.net/npm/@orillusion/core@0.9.2/dist/orillusion.es.js';
const engine = await Engine3D.init({ canvasConfig: { canvas: stage } });  // adapter, device
const scene = new Scene3D();
scene.addComponent(AtmosphericComponent);                // a sky, which also lights the scene
const eye = new Object3D(), camera = eye.addComponent(Camera3D);    // behavior = components
camera.perspective(40, 640 / 220, 0.1, 100);
camera.lookAt(new Vector3(0, 1.2, 5.2), new Vector3(0, 0.1, 0));
const sun = new Object3D();
sun.rotationX = 30, sun.rotationY = 160, sun.addComponent(DirectLight).intensity = 1.5;
scene.addChild(eye), scene.addChild(sun);
const colors = ['#1f5f8b', '#5b3f99', '#e09a10', '#3f7d3a', '#b5452f', '#2a9d8f'];
[312, 428, 256, 198, 344, 176].forEach((pages, i) => {  // booknest-data.json page counts
  const book = new Object3D(), mesh = book.addComponent(MeshRenderer);
  mesh.geometry = new BoxGeometry(0.9, 1.6, pages / 400);
  mesh.material = new LitMaterial();
  mesh.material.baseColor = new Color().hexToRGB(parseInt(colors[i].slice(1), 16));
  mesh.material.roughness = 0.6;
  book.x = (i - 2.5) * 1.15, book.rotationY = -25;
  scene.addChild(book);
});
const view = new View3D();
view.scene = scene, view.camera = camera;
engine.startRenderView(view);                            // starts the render loop
setTimeout(() => { window.__done = true; }, 1500);
</script>
Browser output of Listing 4.112
Browser output of 112

A first try called Engine3D.startRenderView(view) and failed with "not a function": in 0.9.2, Engine3D.init() returns an engine instance, and startRenderView() belongs to it. The published build also logs "Engine Version 0.9.1". A young API moves, so pin the version you tested.

Dropping WebGL lets Orillusion design around compute shaders and storage buffers without a fallback path, which is also why it cannot run at all where WebGPU is missing.