@woosh/meep-engine 3.50.0 → 3.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/engine/graphics3/make_default_environment.d.ts.map +1 -1
- package/src/engine/graphics3/make_default_environment.js +11 -5
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/particle_ecs/moonlit_environment.d.ts.map +1 -1
- package/src/shade/playground/particle_ecs/moonlit_environment.js +11 -5
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -1
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +3 -1
- package/src/shade/playground/tonemap_sdr/README.md +5 -3
- package/src/shade/renderer/Renderer.d.ts +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +43 -15
- package/src/shade/renderer/ShadeToneMappingMode.d.ts +3 -2
- package/src/shade/renderer/ShadeToneMappingMode.js +15 -4
- package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts +3 -0
- package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sample_environment_color.js +11 -8
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -0
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +227 -215
- package/src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.d.ts.map +1 -1
- package/src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.js +2 -0
- package/src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.js +4 -2
- package/src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.d.ts.map +1 -1
- package/src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.js +4 -2
- package/src/shade/renderer/deferred/shader_background.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_background.js +4 -2
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts +38 -0
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.js +97 -0
- package/src/shade/renderer/deferred/{TonemapDisplaySettings.d.ts → tonemap/TonemapDisplaySettings.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/TonemapDisplaySettings.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{TonemapDisplaySettings.js → tonemap/TonemapDisplaySettings.js} +5 -5
- package/src/shade/renderer/deferred/{shader_tonemap_HDR.d.ts → tonemap/shader_tonemap_HDR.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR.js → tonemap/shader_tonemap_HDR.js} +9 -9
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts +17 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.js +101 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.d.ts → tonemap/shader_tonemap_HDR_none.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.js → tonemap/shader_tonemap_HDR_none.js} +6 -6
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.d.ts → tonemap/shader_tonemap_HDR_pbr_neutral.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.js → tonemap/shader_tonemap_HDR_pbr_neutral.js} +8 -8
- package/src/shade/renderer/deferred/{shader_tonemap_LDR.d.ts → tonemap/shader_tonemap_LDR.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR.js → tonemap/shader_tonemap_LDR.js} +10 -10
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts +10 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.js +77 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.d.ts → tonemap/shader_tonemap_LDR_none.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.js → tonemap/shader_tonemap_LDR_none.js} +7 -7
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.d.ts → tonemap/shader_tonemap_LDR_pbr_neutral.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.js → tonemap/shader_tonemap_LDR_pbr_neutral.js} +8 -8
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +3 -1
- package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.js +3 -1
- package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.js +3 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +3 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +4 -2
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +44 -0
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.d.ts +2 -1
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.js +3 -2
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.d.ts +14 -0
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js +25 -0
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +3 -4
- package/src/shade/renderer/light/environment/octahedral_skirt_matches.d.ts +19 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_matches.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_matches.js +67 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.d.ts +16 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.js +35 -0
- package/src/shade/renderer/light/environment/resample_cube_to_octahedral.d.ts +7 -2
- package/src/shade/renderer/light/environment/resample_cube_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/resample_cube_to_octahedral.js +23 -7
- package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts +8 -2
- package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.js +24 -7
- package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.d.ts +12 -0
- package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.js +54 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +2 -2
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +5 -4
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +13 -9
- package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_project_environment_sh.js +3 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +3 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +3 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +3 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +3 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +3 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +0 -5
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +0 -6
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +4 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -0
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +3 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +160 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +5 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +15 -5
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts +41 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.js +692 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.js +446 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +68 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +32 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +163 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +10 -3
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +12 -4
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.js +27 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.js +24 -0
- package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.d.ts +18 -1
- package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.js +45 -27
- package/src/shade/renderer/view/GPUViewSkyContext.js +169 -169
- package/src/shade/renderer/volumetrics/NOTES.md +209 -0
- package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.js +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.d.ts +36 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.js +129 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +75 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.d.ts +26 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.js +110 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -14
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +9 -4
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts +31 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.js +139 -0
- package/src/shade/renderer/deferred/TonemapDisplaySettings.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +0 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import {
|
|
3
|
+
ACES2_BLOCK_FLOATS,
|
|
4
|
+
ACES2_LIMITING_REC709,
|
|
5
|
+
aces2_transform_block_write
|
|
6
|
+
} from "../../shader/chunk/color/tonemap/aces/aces2_transform_block.js";
|
|
7
|
+
import { PAPER_WHITE_NITS } from "../../shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* What {@link shader_tonemap_HDR_aces} binds as `aces2_tables`: two ACES 2.0 output transforms, each its parameters and
|
|
11
|
+
* gamut tables, both limited to Rec.709, the gamut of the SDR picture they expand.
|
|
12
|
+
*
|
|
13
|
+
* 1. An SDR display, 100 cd/m². The pass runs it backwards, from the SDR picture to the scene.
|
|
14
|
+
* 2. This display: the peak over the paper white, times 100 cd/m². A display at or under the paper white gets
|
|
15
|
+
* 100 cd/m², which the pass does not read.
|
|
16
|
+
*
|
|
17
|
+
* Both take SDR white for 100 cd/m², ACES 2.0's reference, so an SDR picture expanded for a display keeps SDR white
|
|
18
|
+
* where the paper white puts it.
|
|
19
|
+
*
|
|
20
|
+
* Building one transform takes 7 to 13 ms, so the tables are built on the first {@link update} rather than with the
|
|
21
|
+
* renderer, and again only when the display's peak changes.
|
|
22
|
+
*/
|
|
23
|
+
export class TonemapAces2Tables {
|
|
24
|
+
/**
|
|
25
|
+
* Both blocks, the SDR one first. Zero until the first {@link update}.
|
|
26
|
+
* @type {Float32Array}
|
|
27
|
+
*/
|
|
28
|
+
data = new Float32Array(2 * ACES2_BLOCK_FLOATS);
|
|
29
|
+
|
|
30
|
+
#peak_nits = NaN;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @type {GPUBuffer|null}
|
|
34
|
+
*/
|
|
35
|
+
#buffer = null;
|
|
36
|
+
|
|
37
|
+
#uploaded = false;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Build the tables for a display, if they are not built for it already.
|
|
41
|
+
*
|
|
42
|
+
* @param {number} peak_nits the display's peak, cd/m²
|
|
43
|
+
* @returns {boolean} whether {@link data} changed
|
|
44
|
+
*/
|
|
45
|
+
update(peak_nits) {
|
|
46
|
+
assert.isNumber(peak_nits, 'peak_nits');
|
|
47
|
+
assert.greaterThan(peak_nits, 0, 'peak_nits');
|
|
48
|
+
|
|
49
|
+
if (peak_nits === this.#peak_nits) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (Number.isNaN(this.#peak_nits)) {
|
|
54
|
+
aces2_transform_block_write(this.data, 0, 100, ACES2_LIMITING_REC709);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const headroom = Math.max(peak_nits / PAPER_WHITE_NITS, 1);
|
|
58
|
+
|
|
59
|
+
aces2_transform_block_write(this.data, ACES2_BLOCK_FLOATS, 100 * headroom, ACES2_LIMITING_REC709);
|
|
60
|
+
|
|
61
|
+
this.#peak_nits = peak_nits;
|
|
62
|
+
this.#uploaded = false;
|
|
63
|
+
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The tables on the device, written if they changed since the last call.
|
|
69
|
+
*
|
|
70
|
+
* @param {GPUDevice} device
|
|
71
|
+
* @returns {GPUBuffer}
|
|
72
|
+
*/
|
|
73
|
+
gpu_buffer(device) {
|
|
74
|
+
if (this.#buffer === null) {
|
|
75
|
+
this.#buffer = device.createBuffer({
|
|
76
|
+
label: "tonemap/aces2 tables",
|
|
77
|
+
size: this.data.byteLength,
|
|
78
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
79
|
+
});
|
|
80
|
+
this.#uploaded = false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (!this.#uploaded) {
|
|
84
|
+
device.queue.writeBuffer(this.#buffer, 0, this.data);
|
|
85
|
+
this.#uploaded = true;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return this.#buffer;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
destroy() {
|
|
92
|
+
if (this.#buffer !== null) {
|
|
93
|
+
this.#buffer.destroy();
|
|
94
|
+
this.#buffer = null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -46,5 +46,5 @@ export const TONEMAP_SETTINGS_REC2020: WebGPUStruct;
|
|
|
46
46
|
* TonemapDisplaySettings}.
|
|
47
47
|
*/
|
|
48
48
|
export const TONEMAP_SETTINGS_REC2020_PEAK: WebGPUStruct;
|
|
49
|
-
import { WebGPUStruct } from "
|
|
49
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
50
50
|
//# sourceMappingURL=TonemapDisplaySettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TonemapDisplaySettings.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/TonemapDisplaySettings.js"],"names":[],"mappings":"AAiDA;;;;;;;;;GASG;AACH;IACI,qCAAqD;IACrD,qCAAqD;IACrD,qCAAqD;IAErD,sCAA8C;IAC9C,sCAA8C;IAC9C,sCAA8C;IAE9C;;;OAGG;IACH,WAFU,MAAM,CAEC;IAMjB;;;;;OAKG;IACH,oCAHW,oBAAoB,GAAC,MAAM,QAkBrC;CACJ;AAqBD;;GAEG;AACH,mDAAqF;AAErF;;;GAGG;AACH,wDAAmG;AAEnG;;GAEG;AACH,oDAAuF;AAEvF;;;GAGG;AACH,yDAAqG;6BAzIxE,mCAAmC"}
|
package/src/shade/renderer/deferred/{TonemapDisplaySettings.js → tonemap/TonemapDisplaySettings.js}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { m3_rgb_to_xyz_from_primaries } from "
|
|
2
|
-
import { m3_invert } from "
|
|
3
|
-
import { m3_multiply } from "
|
|
4
|
-
import { f32, vec3f } from "
|
|
5
|
-
import { WebGPUStruct } from "
|
|
1
|
+
import { m3_rgb_to_xyz_from_primaries } from "../../../../core/color/xyz/m3_rgb_to_xyz_from_primaries.js";
|
|
2
|
+
import { m3_invert } from "../../../../core/geom/mat3/m3_invert.js";
|
|
3
|
+
import { m3_multiply } from "../../../../core/geom/mat3/m3_multiply.js";
|
|
4
|
+
import { f32, vec3f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
5
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
6
6
|
|
|
7
7
|
// chromaticities of red, green and blue; every space here has a D65 white, so none needs chromatic adaptation
|
|
8
8
|
const PRIMARIES_REC709 = [0.640, 0.330, 0.300, 0.600, 0.150, 0.060];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_tonemap_HDR.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/shader_tonemap_HDR.js"],"names":[],"mappings":"AA4DA;;;;;GAKG;AACH,iCAFU,WAAW,CAclB;4BAvEyB,6BAA6B"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { F32_CONTAINER_STRUCT } from "
|
|
1
|
+
import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js";
|
|
2
2
|
import { TONEMAP_SETTINGS_REC2020_PEAK } from "./TonemapDisplaySettings.js";
|
|
3
|
-
import { chunk_CRM_FROM_REC709_TO_REC2020 } from "
|
|
4
|
-
import { chunk_sRGBTransferOETF } from "
|
|
5
|
-
import { chunk_PAPER_WHITE_NITS } from "
|
|
6
|
-
import { chunk_tonemap_gt7 } from "
|
|
7
|
-
import { CodeChunk } from "
|
|
8
|
-
import { ImageShader } from "
|
|
9
|
-
import { ShaderResourceSetDescriptor } from "
|
|
10
|
-
import { ShaderDescriptor } from "
|
|
3
|
+
import { chunk_CRM_FROM_REC709_TO_REC2020 } from "../../shader/chunk/color/conversion/chunk_CRM_FROM_REC709_TO_REC2020.js";
|
|
4
|
+
import { chunk_sRGBTransferOETF } from "../../shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
5
|
+
import { chunk_PAPER_WHITE_NITS } from "../../shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js";
|
|
6
|
+
import { chunk_tonemap_gt7 } from "../../shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js";
|
|
7
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
8
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
9
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
10
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
11
11
|
|
|
12
12
|
const resources = new ShaderResourceSetDescriptor();
|
|
13
13
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The HDR output with {@link ShadeToneMappingMode.ACES}, as Unreal Engine 5.8 does it with its default "Filmic" method
|
|
3
|
+
* on a display past 100 cd/m²: the SDR picture of {@link shader_tonemap_LDR_aces}, taken back to the scene through the
|
|
4
|
+
* inverse ACES 2.0 output transform for an SDR display, and rendered again with the ACES 2.0 output transform for this
|
|
5
|
+
* display, limited to Rec.709 as the SDR picture is. Written in the canvas's primaries, extended, where 1.0 is SDR
|
|
6
|
+
* white.
|
|
7
|
+
*
|
|
8
|
+
* A display at or under the paper white shows the SDR picture.
|
|
9
|
+
*
|
|
10
|
+
* Binds `aces2_tables`, the two transforms' parameters and gamut tables, which {@link TonemapAces2Tables} builds for
|
|
11
|
+
* the display.
|
|
12
|
+
*
|
|
13
|
+
* @type {ImageShader}
|
|
14
|
+
*/
|
|
15
|
+
export const shader_tonemap_HDR_aces: ImageShader;
|
|
16
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
17
|
+
//# sourceMappingURL=shader_tonemap_HDR_aces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_tonemap_HDR_aces.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.js"],"names":[],"mappings":"AA0EA;;;;;;;;;;;;;GAaG;AACH,sCAFU,WAAW,CAclB;4BA1FyB,6BAA6B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js";
|
|
2
|
+
import { f32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
3
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
4
|
+
import { TONEMAP_SETTINGS_REC709_PEAK } from "./TonemapDisplaySettings.js";
|
|
5
|
+
import { chunk_sRGBTransferOETF } from "../../shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
6
|
+
import { ACES2_BLOCK_FLOATS } from "../../shader/chunk/color/tonemap/aces/aces2_transform_block.js";
|
|
7
|
+
import { chunk_aces2_output_transform } from "../../shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.js";
|
|
8
|
+
import { chunk_tonemap_ue_filmic } from "../../shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js";
|
|
9
|
+
import { chunk_PAPER_WHITE_NITS } from "../../shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js";
|
|
10
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
11
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
12
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
13
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
14
|
+
|
|
15
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
16
|
+
|
|
17
|
+
resources.setImmediate("settings", TONEMAP_SETTINGS_REC709_PEAK);
|
|
18
|
+
resources.createGroup()
|
|
19
|
+
.addTexture("input_color", "float")
|
|
20
|
+
.addUniform("exposure", F32_CONTAINER_STRUCT)
|
|
21
|
+
// two ACES 2.0 output transforms, TonemapAces2Tables: 100 cd/m² first, then the display's headroom
|
|
22
|
+
.addStorageBuffer("aces2_tables", WebGPUArray.from(f32))
|
|
23
|
+
|
|
24
|
+
const body = CodeChunk.from(
|
|
25
|
+
//language=WGSL
|
|
26
|
+
`
|
|
27
|
+
const ACES2_SDR_BLOCK: u32 = 0u;
|
|
28
|
+
const ACES2_DISPLAY_BLOCK: u32 = ${ACES2_BLOCK_FLOATS}u;
|
|
29
|
+
|
|
30
|
+
@fragment
|
|
31
|
+
fn main(
|
|
32
|
+
@builtin(position) coord : vec4<f32>,
|
|
33
|
+
) -> @location(0) vec4<f32> {
|
|
34
|
+
|
|
35
|
+
// scene color in linear Rec. 709
|
|
36
|
+
var color = textureLoad(input_color, vec2i(coord.xy), 0).rgb;
|
|
37
|
+
|
|
38
|
+
// Apply exposure
|
|
39
|
+
color *= exposure.value;
|
|
40
|
+
|
|
41
|
+
// the SDR picture first, which is what Unreal 5.8 does with Filmic on any display
|
|
42
|
+
let film = tonemap_ue_filmic(color);
|
|
43
|
+
|
|
44
|
+
var picture = film;
|
|
45
|
+
|
|
46
|
+
if (settings.peak_nits > PAPER_WHITE_NITS) {
|
|
47
|
+
// back to the scene through ACES 2.0 at SDR white, then out again through ACES 2.0 at the display's peak over
|
|
48
|
+
// the paper white. Both transforms take SDR white for 100 cd/m² and both are limited to Rec.709, the SDR
|
|
49
|
+
// picture's own gamut, so as the headroom shrinks to none the picture becomes the SDR one.
|
|
50
|
+
let aces = aces2_inverse(ACES2_SDR_BLOCK, film);
|
|
51
|
+
picture = aces2_forward(ACES2_DISPLAY_BLOCK, aces);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// into the primaries the canvas reports it was configured with (Renderer#configure_context): Display P3, or
|
|
55
|
+
// sRGB where the browser would not configure P3
|
|
56
|
+
let color_display = mat3x3<f32>(
|
|
57
|
+
settings.display_from_rec709_c0,
|
|
58
|
+
settings.display_from_rec709_c1,
|
|
59
|
+
settings.display_from_rec709_c2
|
|
60
|
+
) * picture;
|
|
61
|
+
|
|
62
|
+
// NOTE: no dithering, colorspace is wide
|
|
63
|
+
|
|
64
|
+
// apply gamma. Note that gamma is the same for "Display P3" and "sRGB"
|
|
65
|
+
return vec4(sRGBTransferOETF(color_display), 1.0);
|
|
66
|
+
}
|
|
67
|
+
`, [
|
|
68
|
+
chunk_tonemap_ue_filmic,
|
|
69
|
+
chunk_aces2_output_transform,
|
|
70
|
+
chunk_PAPER_WHITE_NITS,
|
|
71
|
+
chunk_sRGBTransferOETF,
|
|
72
|
+
]
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The HDR output with {@link ShadeToneMappingMode.ACES}, as Unreal Engine 5.8 does it with its default "Filmic" method
|
|
77
|
+
* on a display past 100 cd/m²: the SDR picture of {@link shader_tonemap_LDR_aces}, taken back to the scene through the
|
|
78
|
+
* inverse ACES 2.0 output transform for an SDR display, and rendered again with the ACES 2.0 output transform for this
|
|
79
|
+
* display, limited to Rec.709 as the SDR picture is. Written in the canvas's primaries, extended, where 1.0 is SDR
|
|
80
|
+
* white.
|
|
81
|
+
*
|
|
82
|
+
* A display at or under the paper white shows the SDR picture.
|
|
83
|
+
*
|
|
84
|
+
* Binds `aces2_tables`, the two transforms' parameters and gamut tables, which {@link TonemapAces2Tables} builds for
|
|
85
|
+
* the display.
|
|
86
|
+
*
|
|
87
|
+
* @type {ImageShader}
|
|
88
|
+
*/
|
|
89
|
+
export const shader_tonemap_HDR_aces = new ImageShader({
|
|
90
|
+
descriptor: ShaderDescriptor.from({
|
|
91
|
+
label: "Tonemap/HDR/aces",
|
|
92
|
+
resources,
|
|
93
|
+
body
|
|
94
|
+
}),
|
|
95
|
+
targets: [
|
|
96
|
+
{
|
|
97
|
+
label: "tone-mapped",
|
|
98
|
+
format: "rgba16float"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_tonemap_HDR_none.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_none.js"],"names":[],"mappings":"AA+CA;;;;;GAKG;AACH,sCAFU,WAAW,CAclB;4BA7DyB,6BAA6B"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { F32_CONTAINER_STRUCT } from "
|
|
1
|
+
import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js";
|
|
2
2
|
import { TONEMAP_SETTINGS_REC709 } from "./TonemapDisplaySettings.js";
|
|
3
|
-
import { chunk_sRGBTransferOETF } from "
|
|
4
|
-
import { CodeChunk } from "
|
|
5
|
-
import { ImageShader } from "
|
|
6
|
-
import { ShaderResourceSetDescriptor } from "
|
|
7
|
-
import { ShaderDescriptor } from "
|
|
3
|
+
import { chunk_sRGBTransferOETF } from "../../shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
4
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
8
8
|
|
|
9
9
|
const resources = new ShaderResourceSetDescriptor();
|
|
10
10
|
resources.setImmediate("settings", TONEMAP_SETTINGS_REC709);
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* @type {ImageShader}
|
|
7
7
|
*/
|
|
8
8
|
export const shader_tonemap_HDR_pbr_neutral: ImageShader;
|
|
9
|
-
import { ImageShader } from "
|
|
9
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
10
10
|
//# sourceMappingURL=shader_tonemap_HDR_pbr_neutral.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_tonemap_HDR_pbr_neutral.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_pbr_neutral.js"],"names":[],"mappings":"AA4DA;;;;;;GAMG;AACH,6CAFU,WAAW,CAclB;4BAzEyB,6BAA6B"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { F32_CONTAINER_STRUCT } from "
|
|
1
|
+
import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js";
|
|
2
2
|
import { TONEMAP_SETTINGS_REC709_PEAK } from "./TonemapDisplaySettings.js";
|
|
3
|
-
import { chunk_sRGBTransferOETF } from "
|
|
4
|
-
import { chunk_PAPER_WHITE_NITS } from "
|
|
5
|
-
import { chunk_tonemap_khronos_pbr } from "
|
|
6
|
-
import { CodeChunk } from "
|
|
7
|
-
import { ImageShader } from "
|
|
8
|
-
import { ShaderResourceSetDescriptor } from "
|
|
9
|
-
import { ShaderDescriptor } from "
|
|
3
|
+
import { chunk_sRGBTransferOETF } from "../../shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
4
|
+
import { chunk_PAPER_WHITE_NITS } from "../../shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js";
|
|
5
|
+
import { chunk_tonemap_khronos_pbr } from "../../shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js";
|
|
6
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
7
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
8
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
9
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
10
10
|
|
|
11
11
|
const resources = new ShaderResourceSetDescriptor();
|
|
12
12
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_tonemap_LDR.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/shader_tonemap_LDR.js"],"names":[],"mappings":"AA6DA;;;;;GAKG;AACH,iCAFU,WAAW,CAclB;4BArEyB,6BAA6B"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { F32_CONTAINER_STRUCT } from "
|
|
1
|
+
import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js";
|
|
2
2
|
import { TONEMAP_SETTINGS_REC2020 } from "./TonemapDisplaySettings.js";
|
|
3
|
-
import { chunk_CRM_FROM_REC709_TO_REC2020 } from "
|
|
4
|
-
import { chunk_sRGBTransferOETF } from "
|
|
5
|
-
import { chunk_PAPER_WHITE_NITS } from "
|
|
6
|
-
import { chunk_tonemap_gt7 } from "
|
|
3
|
+
import { chunk_CRM_FROM_REC709_TO_REC2020 } from "../../shader/chunk/color/conversion/chunk_CRM_FROM_REC709_TO_REC2020.js";
|
|
4
|
+
import { chunk_sRGBTransferOETF } from "../../shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
5
|
+
import { chunk_PAPER_WHITE_NITS } from "../../shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js";
|
|
6
|
+
import { chunk_tonemap_gt7 } from "../../shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js";
|
|
7
7
|
import {
|
|
8
8
|
chunk_dither_color_8bit_triangle_noise
|
|
9
|
-
} from "
|
|
10
|
-
import { CodeChunk } from "
|
|
11
|
-
import { ImageShader } from "
|
|
12
|
-
import { ShaderResourceSetDescriptor } from "
|
|
13
|
-
import { ShaderDescriptor } from "
|
|
9
|
+
} from "../../shader/chunk/texture/dither/chunk_dither_color_8bit_triangle_noise.js";
|
|
10
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
11
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
12
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
13
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
14
14
|
|
|
15
15
|
const resources = new ShaderResourceSetDescriptor();
|
|
16
16
|
resources.setImmediate("settings", TONEMAP_SETTINGS_REC2020);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SDR output with {@link ShadeToneMappingMode.ACES}: exposure, Unreal Engine's default "Filmic" tone mapping, the
|
|
3
|
+
* canvas's primaries, the sRGB transfer curve and an 8-bit dither. {@link shader_tonemap_HDR_aces} expands the same
|
|
4
|
+
* picture into an HDR display's headroom.
|
|
5
|
+
*
|
|
6
|
+
* @type {ImageShader}
|
|
7
|
+
*/
|
|
8
|
+
export const shader_tonemap_LDR_aces: ImageShader;
|
|
9
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
10
|
+
//# sourceMappingURL=shader_tonemap_LDR_aces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_tonemap_LDR_aces.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.js"],"names":[],"mappings":"AAyDA;;;;;;GAMG;AACH,sCAFU,WAAW,CAclB;4BApEyB,6BAA6B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js";
|
|
2
|
+
import { TONEMAP_SETTINGS_REC709 } from "./TonemapDisplaySettings.js";
|
|
3
|
+
import { chunk_sRGBTransferOETF } from "../../shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
4
|
+
import { chunk_tonemap_ue_filmic } from "../../shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js";
|
|
5
|
+
import {
|
|
6
|
+
chunk_dither_color_8bit_triangle_noise
|
|
7
|
+
} from "../../shader/chunk/texture/dither/chunk_dither_color_8bit_triangle_noise.js";
|
|
8
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
9
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
10
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
11
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
12
|
+
|
|
13
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
14
|
+
resources.setImmediate("settings", TONEMAP_SETTINGS_REC709);
|
|
15
|
+
resources.createGroup()
|
|
16
|
+
.addTexture("input_color", "float")
|
|
17
|
+
.addUniform("exposure", F32_CONTAINER_STRUCT)
|
|
18
|
+
|
|
19
|
+
const body = CodeChunk.from(
|
|
20
|
+
//language=WGSL
|
|
21
|
+
`
|
|
22
|
+
@fragment
|
|
23
|
+
fn main(
|
|
24
|
+
@builtin(position) coord : vec4<f32>,
|
|
25
|
+
) -> @location(0) vec4<f32> {
|
|
26
|
+
|
|
27
|
+
// scene color in linear Rec. 709
|
|
28
|
+
var color = textureLoad(input_color, vec2i(coord.xy), 0).rgb;
|
|
29
|
+
|
|
30
|
+
color *= exposure.value;
|
|
31
|
+
|
|
32
|
+
// Unreal's default SDR rendering, in Rec.709 and within it
|
|
33
|
+
color = tonemap_ue_filmic(color);
|
|
34
|
+
|
|
35
|
+
// into the primaries the canvas reports it was configured with (Renderer#configure_context): Display P3, or
|
|
36
|
+
// sRGB where the browser would not configure P3. A Rec.709 colour sits inside both.
|
|
37
|
+
let color_display = mat3x3<f32>(
|
|
38
|
+
settings.display_from_rec709_c0,
|
|
39
|
+
settings.display_from_rec709_c1,
|
|
40
|
+
settings.display_from_rec709_c2
|
|
41
|
+
) * color;
|
|
42
|
+
|
|
43
|
+
// apply gamma. Note that gamma is the same for "Display P3" and "sRGB"
|
|
44
|
+
color = sRGBTransferOETF(color_display);
|
|
45
|
+
|
|
46
|
+
// apply dither to remove color banding
|
|
47
|
+
color += dither_color_8bit_triangle_noise(coord.xy);
|
|
48
|
+
|
|
49
|
+
return vec4(color, 1.0);
|
|
50
|
+
}
|
|
51
|
+
`, [
|
|
52
|
+
chunk_tonemap_ue_filmic,
|
|
53
|
+
chunk_dither_color_8bit_triangle_noise,
|
|
54
|
+
chunk_sRGBTransferOETF,
|
|
55
|
+
]
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The SDR output with {@link ShadeToneMappingMode.ACES}: exposure, Unreal Engine's default "Filmic" tone mapping, the
|
|
60
|
+
* canvas's primaries, the sRGB transfer curve and an 8-bit dither. {@link shader_tonemap_HDR_aces} expands the same
|
|
61
|
+
* picture into an HDR display's headroom.
|
|
62
|
+
*
|
|
63
|
+
* @type {ImageShader}
|
|
64
|
+
*/
|
|
65
|
+
export const shader_tonemap_LDR_aces = new ImageShader({
|
|
66
|
+
descriptor: ShaderDescriptor.from({
|
|
67
|
+
label: "Tonemap/LDR/aces",
|
|
68
|
+
resources,
|
|
69
|
+
body
|
|
70
|
+
}),
|
|
71
|
+
targets: [
|
|
72
|
+
{
|
|
73
|
+
label: "tone-mapped",
|
|
74
|
+
format: "rgba8unorm"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_tonemap_LDR_none.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_none.js"],"names":[],"mappings":"AAoDA;;;;;GAKG;AACH,sCAFU,WAAW,CAclB;4BA/DyB,6BAA6B"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { F32_CONTAINER_STRUCT } from "
|
|
1
|
+
import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js";
|
|
2
2
|
import { TONEMAP_SETTINGS_REC709 } from "./TonemapDisplaySettings.js";
|
|
3
|
-
import { chunk_sRGBTransferOETF } from "
|
|
3
|
+
import { chunk_sRGBTransferOETF } from "../../shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
4
4
|
import {
|
|
5
5
|
chunk_dither_color_8bit_triangle_noise
|
|
6
|
-
} from "
|
|
7
|
-
import { CodeChunk } from "
|
|
8
|
-
import { ImageShader } from "
|
|
9
|
-
import { ShaderResourceSetDescriptor } from "
|
|
10
|
-
import { ShaderDescriptor } from "
|
|
6
|
+
} from "../../shader/chunk/texture/dither/chunk_dither_color_8bit_triangle_noise.js";
|
|
7
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
8
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
9
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
10
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
11
11
|
|
|
12
12
|
const resources = new ShaderResourceSetDescriptor();
|
|
13
13
|
resources.setImmediate("settings", TONEMAP_SETTINGS_REC709);
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* @type {ImageShader}
|
|
7
7
|
*/
|
|
8
8
|
export const shader_tonemap_LDR_pbr_neutral: ImageShader;
|
|
9
|
-
import { ImageShader } from "
|
|
9
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
10
10
|
//# sourceMappingURL=shader_tonemap_LDR_pbr_neutral.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_tonemap_LDR_pbr_neutral.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_pbr_neutral.js"],"names":[],"mappings":"AAwDA;;;;;;GAMG;AACH,6CAFU,WAAW,CAclB;4BAnEyB,6BAA6B"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { F32_CONTAINER_STRUCT } from "
|
|
1
|
+
import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js";
|
|
2
2
|
import { TONEMAP_SETTINGS_REC709 } from "./TonemapDisplaySettings.js";
|
|
3
|
-
import { chunk_sRGBTransferOETF } from "
|
|
4
|
-
import { chunk_tonemap_khronos_pbr } from "
|
|
3
|
+
import { chunk_sRGBTransferOETF } from "../../shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
4
|
+
import { chunk_tonemap_khronos_pbr } from "../../shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js";
|
|
5
5
|
import {
|
|
6
6
|
chunk_dither_color_8bit_triangle_noise
|
|
7
|
-
} from "
|
|
8
|
-
import { CodeChunk } from "
|
|
9
|
-
import { ImageShader } from "
|
|
10
|
-
import { ShaderResourceSetDescriptor } from "
|
|
11
|
-
import { ShaderDescriptor } from "
|
|
7
|
+
} from "../../shader/chunk/texture/dither/chunk_dither_color_8bit_triangle_noise.js";
|
|
8
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
9
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
10
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
11
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
12
12
|
|
|
13
13
|
const resources = new ShaderResourceSetDescriptor();
|
|
14
14
|
resources.setImmediate("settings", TONEMAP_SETTINGS_REC709);
|
|
@@ -136,7 +136,7 @@ export class GPUFluidCascade {
|
|
|
136
136
|
* @param {*} _resources
|
|
137
137
|
* @param {{encoder: ShadeGPUCommandContext}} context
|
|
138
138
|
*/
|
|
139
|
-
static "__#
|
|
139
|
+
static "__#264@#execute_restrict"(record: object, _resources: any, context: {
|
|
140
140
|
encoder: ShadeGPUCommandContext;
|
|
141
141
|
}): void;
|
|
142
142
|
/**
|
|
@@ -144,7 +144,7 @@ export class GPUFluidCascade {
|
|
|
144
144
|
* @param {*} _resources
|
|
145
145
|
* @param {{encoder: ShadeGPUCommandContext}} context
|
|
146
146
|
*/
|
|
147
|
-
static "__#
|
|
147
|
+
static "__#264@#execute_fill"(record: object, _resources: any, context: {
|
|
148
148
|
encoder: ShadeGPUCommandContext;
|
|
149
149
|
}): void;
|
|
150
150
|
/**
|
|
@@ -152,7 +152,7 @@ export class GPUFluidCascade {
|
|
|
152
152
|
* @param {import("../../../engine/graphics/render/frame_graph/FramePassResources.js").FramePassResources} resources
|
|
153
153
|
* @param {{encoder: ShadeGPUCommandContext}} context
|
|
154
154
|
*/
|
|
155
|
-
static "__#
|
|
155
|
+
static "__#264@#execute"(record: object, resources: import("../../../engine/graphics/render/frame_graph/FramePassResources.js").FramePassResources, context: {
|
|
156
156
|
encoder: ShadeGPUCommandContext;
|
|
157
157
|
}): void;
|
|
158
158
|
/**
|
|
@@ -56,7 +56,7 @@ export class GPUFluidCascadeStack {
|
|
|
56
56
|
* @param {*} _resources
|
|
57
57
|
* @param {{encoder: import("../../device/ShadeGPUCommandContext.js").ShadeGPUCommandContext}} context
|
|
58
58
|
*/
|
|
59
|
-
static "__#
|
|
59
|
+
static "__#266@#execute_publish"(pass: object, _resources: any, context: {
|
|
60
60
|
encoder: import("../../device/ShadeGPUCommandContext.js").ShadeGPUCommandContext;
|
|
61
61
|
}): void;
|
|
62
62
|
/**
|
|
@@ -90,19 +90,19 @@ export class GPUFluidForcing {
|
|
|
90
90
|
* @param {number} clear_size bytes cleared from 0 when the pool reuses the buffer
|
|
91
91
|
* @returns {BufferResourceDescriptor}
|
|
92
92
|
*/
|
|
93
|
-
static "__#
|
|
93
|
+
static "__#267@#descriptor"(kept: BufferResourceDescriptor[], role: number, size: number, usage: number, clear_size: number): BufferResourceDescriptor;
|
|
94
94
|
/**
|
|
95
95
|
* @param {object} record
|
|
96
96
|
* @param {FramePassResources} resources
|
|
97
97
|
* @param {{encoder: ShadeGPUCommandContext}} context
|
|
98
98
|
*/
|
|
99
|
-
static "__#
|
|
99
|
+
static "__#267@#execute_extract"(record: object, resources: FramePassResources, context: {
|
|
100
100
|
encoder: ShadeGPUCommandContext;
|
|
101
101
|
}): void;
|
|
102
|
-
static "__#
|
|
103
|
-
static "__#
|
|
104
|
-
static "__#
|
|
105
|
-
static "__#
|
|
102
|
+
static "__#267@#execute_clear"(record: any, _resources: any, context: any): void;
|
|
103
|
+
static "__#267@#execute_query"(record: any, resources: any, context: any): void;
|
|
104
|
+
static "__#267@#execute_command"(record: any, resources: any, context: any): void;
|
|
105
|
+
static "__#267@#execute_apply"(record: any, resources: any, context: any): void;
|
|
106
106
|
/**
|
|
107
107
|
* @param {object} options
|
|
108
108
|
* @param {GPUDevice} options.device
|