Skip to content

Documentation / scene / Tonemap

Class: Tonemap ​

Defined in: libs/scene/src/posteffect/tonemap.ts:13

The tonemap post effect

Extends ​

Constructors ​

Constructor ​

new Tonemap(): Tonemap

Defined in: libs/scene/src/posteffect/tonemap.ts:28

Creates an instance of tonemap post effect

Returns ​

Tonemap

Overrides ​

AbstractPostEffect.constructor

Properties ​

_enabled ​

protected _enabled: boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:118

Inherited from ​

AbstractPostEffect._enabled


_layer ​

protected _layer: PostEffectLayer

Defined in: libs/scene/src/posteffect/posteffect.ts:119

Inherited from ​

AbstractPostEffect._layer

Accessors ​

disposed ​

Get Signature ​

get disposed(): boolean

Defined in: libs/base/dist/index.d.ts:6107

Returns ​

boolean

Inherited from ​

AbstractPostEffect.disposed


enabled ​

Get Signature ​

get enabled(): boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:130

Whether this post effect is enabled

Returns ​

boolean

Set Signature ​

set enabled(val): void

Defined in: libs/scene/src/posteffect/posteffect.ts:133

Parameters ​
val ​

boolean

Returns ​

void

Inherited from ​

AbstractPostEffect.enabled


layer ​

Get Signature ​

get layer(): PostEffectLayer

Defined in: libs/scene/src/posteffect/posteffect.ts:137

Whether this post effect will be rendered at opaque phase

Returns ​

PostEffectLayer

Inherited from ​

AbstractPostEffect.layer


dither ​

Get Signature ​

get dither(): boolean

Defined in: libs/scene/src/posteffect/tonemap.ts:47

Whether to dither the result before it is quantized to an 8-bit target.

Remarks ​

Costs a handful of ALU operations and removes the banding that shallow gradients -- bloom halos, smooth skies, fog -- otherwise show once rounded to 8 bits. The added noise is +-1 code value, below the visible threshold on any ordinary display. Only applied when this pass writes the final 8-bit target; a half-float intermediate is left untouched.

Turn it off when capturing frames for pixel comparison, where reproducible output matters more than smooth gradients.

Returns ​

boolean

Set Signature ​

set dither(val): void

Defined in: libs/scene/src/posteffect/tonemap.ts:50

Parameters ​
val ​

boolean

Returns ​

void


exposure ​

Get Signature ​

get exposure(): number

Defined in: libs/scene/src/posteffect/tonemap.ts:60

Exposure multiplier applied before the ACES curve.

Remarks ​

Physical lighting pre-exposes every light quantity on the CPU, so this stays at 1 there and only legacy uses it as a brightness control.

Returns ​

number

Set Signature ​

set exposure(val): void

Defined in: libs/scene/src/posteffect/tonemap.ts:63

Parameters ​
val ​

number

Returns ​

void

Methods ​

on() ​

on<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:630

IEventTarget.on

Type Parameters ​

K ​

K extends "dispose"

Parameters ​

type ​

K

listener ​

EventListener<{ dispose: []; }, K>

context? ​

unknown

Returns ​

void

Inherited from ​

AbstractPostEffect.on


once() ​

once<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:634

IEventTarget.once

Type Parameters ​

K ​

K extends "dispose"

Parameters ​

type ​

K

listener ​

EventListener<{ dispose: []; }, K>

context? ​

unknown

Returns ​

void

Inherited from ​

AbstractPostEffect.once


off() ​

off<K>(type, listener?, context?): void

Defined in: libs/base/dist/index.d.ts:638

IEventTarget.off

Type Parameters ​

K ​

K extends "dispose"

Parameters ​

type ​

K

listener? ​

EventListener<{ dispose: []; }>

context? ​

unknown

Returns ​

void

Inherited from ​

AbstractPostEffect.off


dispatchEvent() ​

dispatchEvent<K>(type, ...args): void

Defined in: libs/base/dist/index.d.ts:642

IEventTarget.dispatchEvent

Type Parameters ​

K ​

K extends "dispose"

Parameters ​

type ​

K

args ​

...object[K]

Returns ​

void

Inherited from ​

AbstractPostEffect.dispatchEvent


dispose() ​

dispose(): void

Defined in: libs/base/dist/index.d.ts:6108

Returns ​

void

Inherited from ​

AbstractPostEffect.dispose


needFlip() ​

needFlip(device): boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:145

Check if the post effect should be rendered upside down.

Parameters ​

device ​

AbstractDevice

The device object

Returns ​

boolean

true if the post effect should be rendered upside down

Inherited from ​

AbstractPostEffect.needFlip


requireMotionVectorTexture() ​

requireMotionVectorTexture(_ctx): boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:166

Checks whether this post effect requires the motion vector texture

Parameters ​

_ctx ​

DrawContext

Returns ​

boolean

true if the motion vector texture is required.

Inherited from ​

AbstractPostEffect.requireMotionVectorTexture


requireHiZTexture() ​

requireHiZTexture(_ctx): boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:170

Checks whether this post effect requires the Hi-Z depth pyramid.

Parameters ​

_ctx ​

DrawContext

Returns ​

boolean

Inherited from ​

AbstractPostEffect.requireHiZTexture


requireHiZNearest() ​

requireHiZNearest(_ctx): boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:181

Checks whether this post effect requires the Hi-Z pyramid's nearest-depth channel, which answers "how close is the nearest surface in this screen region" rather than the farthest-depth channel's occlusion question.

Implies AbstractPostEffect.requireHiZTexture; an effect that needs the nearest channel does not have to request the pyramid separately.

Parameters ​

_ctx ​

DrawContext

Returns ​

boolean

Inherited from ​

AbstractPostEffect.requireHiZNearest


requireSceneNormalTexture() ​

requireSceneNormalTexture(_ctx): boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:185

Checks whether this post effect requires opaque-scene world normals.

Parameters ​

_ctx ​

DrawContext

Returns ​

boolean

Inherited from ​

AbstractPostEffect.requireSceneNormalTexture


requireSceneRoughnessTexture() ​

requireSceneRoughnessTexture(_ctx): boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:189

Checks whether this post effect requires opaque-scene roughness data.

Parameters ​

_ctx ​

DrawContext

Returns ​

boolean

Inherited from ​

AbstractPostEffect.requireSceneRoughnessTexture


requireShadowMask() ​

requireShadowMask(_ctx): boolean

Defined in: libs/scene/src/posteffect/posteffect.ts:200

Checks whether this post effect requires the screen-space shadow mask.

When true and the mask was produced this frame, the effect can sample DrawContext.shadowMaskTexture in its apply() body; the graph keeps the mask alive for the effect's pass.

Parameters ​

_ctx ​

DrawContext

Returns ​

boolean

true if the shadow mask is required.

Inherited from ​

AbstractPostEffect.requireShadowMask


setup() ​

setup(s): RGHandle

Defined in: libs/scene/src/posteffect/posteffect.ts:239

Declare this effect's passes on the render graph.

The default implementation wraps AbstractPostEffect.apply into a single graph pass, so effects only overriding apply() work unchanged. Multi-pass effects override this method to declare each internal step as its own pass, calling PostEffectSetupContext.createOutput inside the final pass.

Parameters ​

s ​

PostEffectSetupContext

Build-time setup context.

Returns ​

RGHandle

The effect's output color handle.

Inherited from ​

AbstractPostEffect.setup


passThrough() ​

protected passThrough(ctx, inputColorTexture, srgbOutput, renderStates?): void

Defined in: libs/scene/src/posteffect/posteffect.ts:344

Parameters ​

ctx ​

DrawContext

Draw context

inputColorTexture ​

Texture2D

Input color texture

srgbOutput ​

boolean

Whether the result should be gamma corrected

renderStates? ​

RenderStateSet

Returns ​

void

Inherited from ​

AbstractPostEffect.passThrough


drawFullscreenQuad() ​

protected drawFullscreenQuad(renderStateSet?): void

Defined in: libs/scene/src/posteffect/posteffect.ts:363

Draws a fullscreen quad

Parameters ​

renderStateSet? ​

RenderStateSet

Render states that will be used when drawing the fullscreen quad.

Returns ​

void

Inherited from ​

AbstractPostEffect.drawFullscreenQuad


onDispose() ​

protected onDispose(): void

Defined in: libs/scene/src/posteffect/posteffect.ts:376

Returns ​

void

Inherited from ​

AbstractPostEffect.onDispose


requireLinearDepthTexture() ​

requireLinearDepthTexture(): boolean

Defined in: libs/scene/src/posteffect/tonemap.ts:67

Checks whether this post effect requires the linear depth texture

Returns ​

boolean

true if the linear depth texture is required.

Overrides ​

AbstractPostEffect.requireLinearDepthTexture


requireDepthAttachment() ​

requireDepthAttachment(): boolean

Defined in: libs/scene/src/posteffect/tonemap.ts:71

Checks whether this post effect requires the scene depth buffer

Returns ​

boolean

true if the scene depth buffer is required.

Overrides ​

AbstractPostEffect.requireDepthAttachment


apply() ​

apply(ctx, inputColorTexture, sceneDepthTexture, srgbOutput): void

Defined in: libs/scene/src/posteffect/tonemap.ts:75

Apply the post effect

Parameters ​

ctx ​

DrawContext

inputColorTexture ​

Texture2D

The previous scene color texture

sceneDepthTexture ​

Texture2D

The linear scene depth texture

srgbOutput ​

boolean

Whether the result should be gamma corrected

Returns ​

void

Remarks ​

The frame buffer of the post effect is already set when apply() is called.

Overrides ​

AbstractPostEffect.apply

Released under the MIT License.