Skip to content
bg2 engine

SceneRenderer

The SceneRenderer class provides a high-level component for rendering scene graphs. It manages the camera, geometry transformation propagation (up and down), lights, render queue population, frame update/clean-up, per-layer draw calls and shadow map rendering.

import SceneRenderer from "bg2e-js/ts/render/SceneRenderer.js";
import WebGLRenderer from "bg2e-js/ts/render/webgl/Renderer.js";
const sceneRoot = new Node("root"); // Create scene graph root (see documentation for scene package)
const camera = new Node("Camera");
camera.addComponent(new CameraComponent());
sceneRoot.addChild(camera);
// ... add meshes, lights ...
const sceneRenderer = myRenderer.factory.scene(); // Create from factory
await sceneRenderer.init(); // Initialize renderer
// In the frame callback:
scene.bindRenderer(camera);
await sceneRenderer.frame(sceneRoot, delta);
// In the display callback:
sceneRenderer.draw(); // Renders all layers

Initializes the scene renderer. Loads shaders and registers render queues for standard layers (OPAQUE_DEFAULT, TRANSPARENT_DEFAULT).

async frame(sceneRoot: Node, delta: number): Promise<void>

Section titled “async frame(sceneRoot: Node, delta: number): Promise<void>”

Updates and renders the scene. Processes the render queue, transforms propagation (up + down passes through nodes), per-layer rendering and updates global shader state.

Parameters:

  • sceneRoot — The root Node of the scene graph to render.
  • delta — Time delta in milliseconds since last frame (for camera animations in user scripts, e.g. orbitCamera).

Draws all render layers from the queue. Calls drawRenderQueue() for each layer (opaque, transparent) and shadow maps (_renderShadowMaps).

async setEnvironment(env: Environment): Promise<void>

Section titled “async setEnvironment(env: Environment): Promise<void>”

Sets the environment for IBL (image-based lighting). Propagates it to the shader. Use this when an environment has been loaded and updated with env.updateMaps():

await scene.setEnvironment(environment); // After env.load(...) and env.updateMaps()

Override these methods in app controllers to forward user input events:

Calls dispatchKeyDown(evt) on the root node. Used for key press events. Override to handle specific keys before event propagation runs (super.onKey(evt) then custom handling or return to stop).

Calls dispatchKeyUp(evt) on the root node.

Calls dispatchMouseDown(evt) on the root node.

Calls dispatchMouseUp(evt) on the root node.

Calls dispatchMouseMove(evt) on the root node. Override to stop propagation for drag operations (return super.onMouseMove(evt);).

Calls dispatchMouseDrag(evt) on the root node. Override to stop propagation for drag operations.

Calls dispatchMouseWheel(evt) on the root node. Override to stop propagation for wheel operations.

Calls dispatchTouchStart(evt) on the root node. For touch screen devices.

Calls dispatchTouchMove(evt) on the root node.

Calls dispatchTouchEnd(evt) on the root node.

PropertyTypeDescription
layerOpacity{ [key: string]: number } | undefinedPer-layer opacity map. Returns undefined by default (no attenuation). Set this to enable depth-based transparency for layers.
sceneRenderer.layerOpacity = { opacity: 0.5 }; // Attenuate all layers by 50%