Appearance
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>): voidsetQuality(quality: "low" | "medium" | "high"): void— preset that adjusts pixel ratio, shadows, and post-processing.setWireframe(enabled: boolean): voidsetPostProcessingEnabled(enabled: boolean): Promise<void>
Rendering
render(): void— used byViewerCore.render()when active.createRenderTarget(width: number, height: number, options?): THREE.WebGLRenderTargetrenderToTarget(target, scene, camera, clear?): voidtakeScreenshot(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): booleanremoveEffect(id: string): boolean
For new code, use PostProcessingService.addPass() instead.
Stats and accessors
getStats(): RenderingStatsrecordRenderStats(renderTime: number): voidgetViewerRoot(): THREE.Object3DgetViewerCamera(): THREE.CameragetViewerRenderer(): THREE.WebGLRenderer
Events
| Event | Payload |
|---|---|
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;
}