
Use this page when the scene is already in the native 3D render path and you need exact routing for draw submission, camera control, lights, shadows, or post-processing.
aura.draw3daura.camera3daura.lightaura.light and aura.draw3d sections in the canonical 3D contract.| Namespace | Exact Signatures | Additional Method Names | Native | Web |
|---|---|---|---|---|
aura.draw3d |
13 | 0 | supported |
unsupported |
aura.camera3d |
10 | 0 | supported |
unsupported |
aura.light |
14 | 0 | supported |
unsupported |
3D draw submission, fog, skybox, billboards, and postfx controls.
supportedunsupported130aura.draw3d.billboard( textureHandleOrSource: | number | { dataTextureHandle: number; }, options: { x: number; y: number; z: number; width: number; height: number; mode?: "face" | "axis"; color?: Color; frameX?: number; frameY?: number; frameW?: number; frameH?: number; atlasWidth?: number; atlasHeight?: number; } ): void
aura.draw3d.clear3d(color?: Color): void
aura.draw3d.clearFog(): void
aura.draw3d.createMesh( vertices: Array<{ position: [number, number, number]; normal?: [number, number, number]; uv?: [number, number]; color?: [number, number, number, number]; jointIndices?: [number, number, number, number]; jointWeights?: [number, number, number, number]; }>, indices: number[] ): MeshHandle
aura.draw3d.drawMesh(mesh: MeshHandle, material: MaterialHandle, transform?: { position?: Vec3; rotation?: Vec3; scale?: Vec3; }): void
aura.draw3d.drawMeshInstanced( mesh: MeshHandle, material: MaterialHandle, transforms: Array<{ position?: Vec3; rotation?: Vec3; scale?: Vec3; }> ): void
aura.draw3d.drawSkybox(path: string): void
aura.draw3d.getPostFXState(): { passes: Array<{ pass: string; enabled: boolean; strength: number; radius: number; threshold: number; customParams: Record<string, number>; index: number; isCustom: boolean; }>; resolvedSteps: Array<{ pass: string; targetSlot: string | null; pingPongPhase: boolean; usesShaderPipeline: boolean; inputMatchesOriginalScene: boolean; index: number; }>; targetChain: { intermediateTargets: string[]; intermediateTargetCount: number; pingPong: boolean; composeMode: "replace" | "additive" | "multiply"; }; customShaderBindings: Array<{ binding: number; name: string; type: string; semantic: string; }>; customShaderContract: { deterministicOrder: boolean; supportsDepthTexture: boolean; supportsOriginalSceneTexture: boolean; supportsCameraInfoInUniform: boolean; supportsNormalBuffer: boolean; supportsIntermediateBufferReads: boolean; customParamSlots: number; inputTextureSemantic: string; originalSceneSemantic: string; orderingSemantic: string; }; totalPasses: number; enabledPasses: number; mutationCount: number; orderFingerprint: number; targetChainFingerprint: number; customPassCount: number; customParamFingerprint: number; lastOperation: string; lastReasonCode: string; lastOk: boolean; }
aura.draw3d.registerPostFXShader( name: string, wgslSource: string ): { ok: boolean; name: string; error?: string; }
aura.draw3d.removePostFXPass(pass: string): { ok: boolean; operation: "removePostFXPass"; reasonCode: string; pass: string | null; }
aura.draw3d.setFog(options: { mode: "linear" | "exp" | "exp2"; color?: Color | ColorRgb; near?: number; far?: number; density?: number; atmosphere?: { enabled?: boolean; baseY?: number; falloff?: number; rayStrength?: number; rayDecay?: number; rayExposure?: number; }; }): void
aura.draw3d.setPostFXEnabled( pass: string, enabled: boolean ): { ok: boolean; operation: "setPostFXEnabled"; reasonCode: string; pass: string | null; }
aura.draw3d.setPostFXPass( pass: string, options?: { enabled?: boolean; strength?: number; radius?: number; threshold?: number; customParams?: Record<string, number>; targetChain?: { intermediateTargets?: string[]; pingPong?: boolean; composeMode?: "replace" | "additive" | "multiply"; }; } ): { ok: boolean; operation: "setPostFXPass"; reasonCode: string; pass: string | null; }
3D camera projection, transforms, and control helpers.
supportedunsupported100aura.camera3d.getControlState(): { profile: "none" | "orbit"; active: boolean; orbit: { yaw: number; pitch: number; distance: number; target: Vec3; rotateSpeed: number; panSpeed: number; zoomSpeed: number; damping: number; minDistance: number; maxDistance: number; minPitchDeg: number; maxPitchDeg: number; }; }
aura.camera3d.getProjectionMatrix(): Mat4
aura.camera3d.getViewMatrix(): Mat4
aura.camera3d.lookAt(x: number, y: number, z: number): void
aura.camera3d.perspective(fovDeg: number, near: number, far: number): void
aura.camera3d.setControlProfile( profile: "none" | "orbit", options?: { rotateSpeed?: number; panSpeed?: number; zoomSpeed?: number; damping?: number; // clamped to [0, 1] minDistance?: number; // > 0, clamped to deterministic safe range maxDistance?: number; // > 0, clamped to deterministic safe range minPitchDeg?: number; // clamped to [-89, 89] maxPitchDeg?: number; // clamped to [-89, 89] } ): void
aura.camera3d.setFOV(fovDeg: number): void
aura.camera3d.setPosition(x: number, y: number, z: number): void
aura.camera3d.setTarget(x: number, y: number, z: number): void
aura.camera3d.updateControls( dtSeconds: number, input?: { rotateX?: number; rotateY?: number; panX?: number; panY?: number; zoom?: number; } ): void
3D light lifecycle and shadow-control surface.
supportedunsupported140aura.light.ambient(color: Color, intensity: number): LightHandle
aura.light.configureDirectionalShadows(options: { enabled?: boolean; quality?: "low" | "medium" | "high"; bias?: number; normalBias?: number; filterMode?: "hard" | "pcf"; filterRadius?: number; cascadeCount?: number; tileResolution?: number; lambda?: number; blendWidth?: number; shadowFar?: number; stabilizeCascades?: boolean; }): void
aura.light.configureShadow(lightId: LightHandle, options: { enabled?: boolean; quality?: "low" | "medium" | "high"; bias?: number; normalBias?: number; filterMode?: "hard" | "pcf"; filterRadius?: number; }): void
aura.light.directional(direction: Vec3, color: Color, intensity: number): LightHandle
aura.light.getShadowState(lightId?: LightHandle): { shadowBudget: number; shadowCastingCount: number; budgetSaturated: boolean; shadowedPointLightCount: number; shadowedSpotLightCount: number; rendererActive: boolean; effectiveShadowCastingCount: number; effectivePointLightCount: number; effectiveSpotLightCount: number; directionalPassCount: number; multiLightSlotCount: number; multiLightPassCount: number; shadowDrawCount: number; directional: { enabled: boolean; quality: "low" | "medium" | "high"; bias: number; normalBias: number; filterMode: "hard" | "pcf"; filterRadius: number; cascadeCount: number; tileResolution: number; lambda: number; blendWidth: number; shadowFar: number; stabilizeCascades: boolean; }; } | { lightId: LightHandle; type: "directional" | "point" | "spot"; enabled: boolean; quality: "low" | "medium" | "high"; bias: number; normalBias: number; filterMode: "hard" | "pcf"; filterRadius: number; rendererActive: boolean; effectiveEnabled: boolean; effectiveQuality: "low" | "medium" | "high"; effectiveBias: number; effectiveSlotCount: number; } | null
aura.light.getShadowStats(): { shadowCastingCount: number; shadowBudget: number; budgetSaturated: boolean; directionalShadowEnabled: boolean; directionalQuality: "low" | "medium" | "high"; directionalBias: number; directionalNormalBias: number; directionalFilterMode: "hard" | "pcf"; directionalFilterRadius: number; directionalCascadeCount: number; directionalTileResolution: number; directionalLambda: number; directionalBlendWidth: number; directionalShadowFar: number; directionalStabilizeCascades: boolean; directionalTexelSnapErrorMax: number; shadowedPointLightCount: number; shadowedSpotLightCount: number; rendererActive: boolean; effectiveShadowCastingCount: number; effectivePointLightCount: number; effectiveSpotLightCount: number; directionalPassCount: number; multiLightSlotCount: number; multiLightPassCount: number; shadowDrawCount: number; }
aura.light.hemisphere( skyColor: Color, groundColor: Color, intensity: number, upDirection?: Vec3 ): LightHandle
aura.light.point(position: Vec3, color: Color, intensity: number, range: number): LightHandle
aura.light.remove(handle: LightHandle): void
aura.light.setShadowBudget(maxLights: number): void
aura.light.setShadowCasting(lightId: LightHandle, enabled: boolean): void
aura.light.setShadowQuality( lightId: LightHandle, quality: "low" | "medium" | "high" ): void
aura.light.spot( position: Vec3, direction: Vec3, color: Color, intensity: number, range: number, angleRadians: number ): LightHandle
aura.light.update(handle: LightHandle, props: { position?: Vec3; direction?: Vec3; color?: Color; intensity?: number; range?: number; angle?: number; angleRadians?: number; skyColor?: Color; groundColor?: Color; hemisphereIntensity?: number; skyIntensity?: number; upDirection?: Vec3; }): void
aura.light and aura.draw3d sections in the canonical 3D contract.