Skip to content

RenderingService

Configures the WebGL renderer (shadow map, tone mapping, exposure, pixel ratio), tracks per-frame stats, and provides screenshot and render-to-target helpers. Post-processing is owned by PostProcessingService; this service forwards enable/disable through to it.

Access

Registered under the name "rendering". Depends on environment.

ts
import { RenderingService } from "@optellix/xviewr-sdk";

await viewer.ready();
const rendering = viewer.getService<RenderingService>("rendering");

Public API

Configuration

  • updateConfig(config: Partial<RenderingConfig>): void
  • setQuality(quality: "low" | "medium" | "high"): void — preset that adjusts pixel ratio, shadows, and post-processing.
  • setWireframe(enabled: boolean): void
  • setPostProcessingEnabled(enabled: boolean): Promise<void>

Rendering

  • render(): void — used by ViewerCore.render() when active.
  • createRenderTarget(width: number, height: number, options?): THREE.WebGLRenderTarget
  • renderToTarget(target, scene, camera, clear?): void
  • takeScreenshot(width?: number, height?: number): string — returns a PNG data URL with the configured background composited in.

Effects (legacy three.js EffectComposer path)

  • addEffect(id: string, effect: RenderEffect): boolean
  • removeEffect(id: string): boolean

For new code, use PostProcessingService.addPass() instead.

Stats and accessors

  • getStats(): RenderingStats
  • recordRenderStats(renderTime: number): void
  • getViewerRoot(): THREE.Object3D
  • getViewerCamera(): THREE.Camera
  • getViewerRenderer(): THREE.WebGLRenderer

Events

EventPayload
rendering:config-updated{ oldConfig, newConfig }
rendering:effect-added{ id, effect }
rendering:effect-removed{ id }
rendering:wireframe-changed{ enabled }
rendering:quality-changed{ quality }

Example

ts
const rendering = viewer.getService<RenderingService>("rendering");

rendering.updateConfig({
  shadowMapEnabled: true,
  shadowMapType: "PCFSoftShadowMap",
  toneMappingType: "ACESFilmic",
  exposure: 1.1,
});

rendering.setQuality("high");

const dataUrl = rendering.takeScreenshot(1920, 1080);

Configuration

ts
interface RenderingConfig {
  enablePostProcessing: boolean;
  enableSSAO: boolean;
  enableBloom: boolean;
  enableToneMapping: boolean;
  enableGammaCorrection: boolean;
  enableAntiAliasing: boolean;
  shadowMapEnabled: boolean;
  shadowMapType: ShadowMapType;
  toneMappingType: ToneMappingType;
  exposure: number;
  pixelRatio: number;
}

type ShadowMapType = "BasicShadowMap" | "PCFShadowMap" | "PCFSoftShadowMap";
type ToneMappingType = "Linear" | "Reinhard" | "Cineon" | "ACESFilmic";
type RenderQuality = "low" | "medium" | "high";

interface RenderEffect {
  id: string;
  name: string;
  pass: any;        // THREE.Pass
  enabled: boolean;
  properties?: Record<string, any>;
}

interface RenderingStats {
  frameCount: number;
  lastTime: number;
  fps: number;
  renderTime: number;
  triangles: number;
  drawCalls: number;
}

XViewr SDK and xConvert CLI documentation.