Repository navigation
decode.webgpu.Class.GainMapNode
@monogrid/gainmap-js / decode/webgpu / GainMapNode
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:71
A TSL texture node holding the HDR image decoded from an SDR image + gain map.
The decode runs on the GPU into a HalfFloat render target, and only when something changed (textures loaded/swapped or any uniform value changed): sampling the node costs a single texture read, like any other texture.
The node updates itself before rendering whenever it is part of a rendered node graph
(material, scene.backgroundNode, ...). When only its texture is used (node.value,
e.g. scene.environment = node.value) call GainMapNode.decode yourself.
Re-decoding also flags the texture for PMREM regeneration, so environment maps are recomputed only when the image actually changes.
node.value gets its final size once loaded: three.js PMREMs don't follow texture resizes,
so assign it to scene.environment (or pmremTexture()) after load.
import { GainMapNode } from '@monogrid/gainmap-js/webgpu'
import { equirectUV } from 'three/tsl'
const hdr = new GainMapNode()
.setTextures(sdrTexture, gainMapTexture)
.setMetadata(metadata)
material.colorNode = hdr
scene.backgroundNode = hdr.sample(equirectUV())
hdr.maxDisplayBoost.value = 2 // re-decodes once, on the next framenew GainMapNode():
GainMapNode
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:83
GainMapNode
protected_material:NodeMaterial
Defined in: src/core/webgpu/RenderTargetNode.ts:42
protected_quadMesh:QuadMesh
Defined in: src/core/webgpu/RenderTargetNode.ts:41
readonlyrenderTarget:RenderTarget
Defined in: src/core/webgpu/RenderTargetNode.ts:33
The render target holding the result
revision:
number=0
Defined in: src/core/webgpu/RenderTargetNode.ts:39
Incremented every time the render target is rendered, nodes depending on this one use it to know when to render again
readonlyuniforms:GainMapNodeUniforms
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:77
Shared textures and uniforms
get gainMap():
Texture<unknown,TextureEventMap>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:118
The gain map recovery texture (linear)
Texture<unknown, TextureEventMap>
get gainMapMax():
UniformNode<"vec3",Vector3>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:129
UniformNode<"vec3", Vector3>
get gainMapMin():
UniformNode<"vec3",Vector3>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:127
UniformNode<"vec3", Vector3>
get gamma():
UniformNode<"vec3",Vector3>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:121
UniformNode<"vec3", Vector3>
get hdrCapacityMax():
UniformNode<"float",number>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:133
GainMapMetadata.hdrCapacityMax
UniformNode<"float", number>
get hdrCapacityMin():
UniformNode<"float",number>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:131
GainMapMetadata.hdrCapacityMin
UniformNode<"float", number>
get height():
number
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:147
Height of the SDR image, 0 until loaded
number
get maxDisplayBoost():
UniformNode<"float",number>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:138
GainmapDecodingParameters.maxDisplayBoost
Non Logarithmic space
UniformNode<"float", number>
get offsetHdr():
UniformNode<"vec3",Vector3>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:125
UniformNode<"vec3", Vector3>
get offsetSdr():
UniformNode<"vec3",Vector3>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:123
UniformNode<"vec3", Vector3>
get sdr():
Texture<unknown,TextureEventMap>
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:116
The SDR rendition texture (sRGB)
Texture<unknown, TextureEventMap>
get value():
Texture
Defined in: src/core/webgpu/RenderTargetNode.ts:139
Texture
set value(
value):void
Defined in: src/core/webgpu/RenderTargetNode.ts:133
Texture
void
get width():
number
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:141
Width of the SDR image, 0 until loaded
number
get
statictype():string
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:72
string
protected_getDependencies():RenderTargetNode[]
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:201
Render target nodes read by this node, rendered (if needed) before this one
RenderTargetNode._getDependencies
protected_getState():number[]
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:191
Values the result depends on, compared with === to the ones of the last render
number[]
protected_onRender():void
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:208
Called after the render target has been rendered
void
clone():
GainMapNode
Defined in: src/core/webgpu/RenderTargetNode.ts:147
Clones created by sample() & co. are plain TextureNodes reading this node's texture,
they keep it updated before rendering as well
GainMapNode
decode(
renderer):boolean
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:220
Decodes the image into GainMapNode.renderTarget, only if something changed since the last decode.
Called automatically when the node is part of a rendered node graph.
WebGPURenderer
boolean
true if the image was decoded
dispose():
void
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:238
Disposes the render target, the SDR and gain map textures (unless they belong to other render target nodes)
void
invalidate():
GainMapNode
Defined in: src/core/webgpu/RenderTargetNode.ts:87
Forces a render the next time RenderTargetNode.render is called, use it when something the node can't track changed (e.g. a custom input node)
GainMapNode
render(
renderer):boolean
Defined in: src/core/webgpu/RenderTargetNode.ts:100
Renders into RenderTargetNode.renderTarget, only if something changed since the last render.
Called automatically when the node is part of a rendered node graph.
WebGPURenderer
boolean
true if the render target was rendered
setMetadata(
metadata):GainMapNode
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:178
Copies the gain map metadata into the uniforms.
Also sets maxDisplayBoost to fully restore the HDR range.
GainMapNode
setTextures(
sdr,gainMap):GainMapNode
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:162
Sets the SDR and gain map textures. The SDR texture is expected in sRGB color space, the gain map in linear.
Render target nodes (e.g. the sdr and gainMap nodes of a GainMapEncoder) are accepted as well:
they are rendered before decoding and the image is decoded again whenever they change.
Texture<unknown, TextureEventMap> | RenderTargetNode
Texture<unknown, TextureEventMap> | RenderTargetNode
GainMapNode
updateBefore(
frame):undefined
Defined in: src/decode/webgpu/nodes/GainMapNode.ts:229
Calls GainMapNode.decode once per render, before the node is evaluated.
NodeFrame
undefined
RenderTargetNode.updateBefore