@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
|
@@ -1,216 +1,228 @@
|
|
|
1
|
-
import { WebGPUArray } from "../shader/type/WebGPUArray.js";
|
|
2
|
-
import { CAMERA_UNIFORM_STRUCT } from "../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
3
|
-
import { ATMOSPHERE_HEIGHT_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js";
|
|
4
|
-
import {
|
|
5
|
-
C_MIE_ABSORPTION_DECLARATION,
|
|
6
|
-
C_MIE_SCATTERING_DECLARATION
|
|
7
|
-
} from "../shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js";
|
|
8
|
-
import { C_OZONE_DECLARATION } from "../shader/chunk/atmosphere/C_OZONE_DECLARATION.js";
|
|
9
|
-
import { C_RAYLEIGH_DECLARATION } from "../shader/chunk/atmosphere/C_RAYLEIGH_DECLARATION.js";
|
|
10
|
-
import { ATMOSPHERE_RADII_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js";
|
|
11
|
-
import { chunk_atmosphere_density } from "../shader/chunk/atmosphere/chunk_atmosphere_density.js";
|
|
12
|
-
import { chunk_atmosphere_ray_bounds } from "../shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js";
|
|
13
|
-
import {
|
|
14
|
-
chunk_position_relative_to_planet_center
|
|
15
|
-
} from "../shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js";
|
|
16
|
-
|
|
17
|
-
import {
|
|
18
|
-
chunk_phase_mie_cornette_shanks
|
|
19
|
-
} from "../shader/chunk/atmosphere/phase/chunk_phase_mie_cornette_shanks.js";
|
|
20
|
-
import { chunk_phase_rayleigh } from "../shader/chunk/atmosphere/phase/chunk_phase_rayleigh.js";
|
|
21
|
-
import { PLANET_RADIUS_DECLARATION } from "../shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js";
|
|
22
|
-
import { chunk_mat4_extract_position } from "../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
|
|
23
|
-
import {
|
|
24
|
-
chunk_uv_octahedral_unit_decode
|
|
25
|
-
} from "../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
|
|
26
|
-
import { chunk_light_get_sun } from "../shader/chunk/light/sky/chunk_sample_sky_color.js";
|
|
27
|
-
import { chunk_safe_acos } from "../shader/chunk/math/chunk_safe_acos.js";
|
|
28
|
-
import { PI_DECLARATION } from "../shader/chunk/math/PI_DECLARATION.js";
|
|
29
|
-
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
|
|
38
|
-
import {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
;
|
|
58
|
-
|
|
59
|
-
resources.createGroup()
|
|
60
|
-
.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
let
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
let
|
|
104
|
-
|
|
105
|
-
let
|
|
106
|
-
|
|
107
|
-
let
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
let
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
let
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
let
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
let
|
|
122
|
-
|
|
123
|
-
let
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
let
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
let
|
|
171
|
-
|
|
172
|
-
let
|
|
173
|
-
|
|
174
|
-
let
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
let
|
|
178
|
-
|
|
179
|
-
//
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
let
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
1
|
+
import { WebGPUArray } from "../shader/type/WebGPUArray.js";
|
|
2
|
+
import { CAMERA_UNIFORM_STRUCT } from "../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
3
|
+
import { ATMOSPHERE_HEIGHT_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js";
|
|
4
|
+
import {
|
|
5
|
+
C_MIE_ABSORPTION_DECLARATION,
|
|
6
|
+
C_MIE_SCATTERING_DECLARATION
|
|
7
|
+
} from "../shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js";
|
|
8
|
+
import { C_OZONE_DECLARATION } from "../shader/chunk/atmosphere/C_OZONE_DECLARATION.js";
|
|
9
|
+
import { C_RAYLEIGH_DECLARATION } from "../shader/chunk/atmosphere/C_RAYLEIGH_DECLARATION.js";
|
|
10
|
+
import { ATMOSPHERE_RADII_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js";
|
|
11
|
+
import { chunk_atmosphere_density } from "../shader/chunk/atmosphere/chunk_atmosphere_density.js";
|
|
12
|
+
import { chunk_atmosphere_ray_bounds } from "../shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js";
|
|
13
|
+
import {
|
|
14
|
+
chunk_position_relative_to_planet_center
|
|
15
|
+
} from "../shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js";
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
chunk_phase_mie_cornette_shanks
|
|
19
|
+
} from "../shader/chunk/atmosphere/phase/chunk_phase_mie_cornette_shanks.js";
|
|
20
|
+
import { chunk_phase_rayleigh } from "../shader/chunk/atmosphere/phase/chunk_phase_rayleigh.js";
|
|
21
|
+
import { PLANET_RADIUS_DECLARATION } from "../shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js";
|
|
22
|
+
import { chunk_mat4_extract_position } from "../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
|
|
23
|
+
import {
|
|
24
|
+
chunk_uv_octahedral_unit_decode
|
|
25
|
+
} from "../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
|
|
26
|
+
import { chunk_light_get_sun } from "../shader/chunk/light/sky/chunk_sample_sky_color.js";
|
|
27
|
+
import { chunk_safe_acos } from "../shader/chunk/math/chunk_safe_acos.js";
|
|
28
|
+
import { PI_DECLARATION } from "../shader/chunk/math/PI_DECLARATION.js";
|
|
29
|
+
import {
|
|
30
|
+
chunk_texture_octahedral_skirt_texel_uv
|
|
31
|
+
} from "../shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.js";
|
|
32
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
33
|
+
import { ImageShader } from "../shader/ImageShader.js";
|
|
34
|
+
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
35
|
+
import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
|
|
36
|
+
import { ATMOSPHERE_ALTITUDE_CUTOFF } from "./ATMOSPHERE_ALTITUDE_CUTOFF.js";
|
|
37
|
+
|
|
38
|
+
import { chunk_sample_multiscatter_lut_params } from "./chunk_sample_multiscatter_lut.js";
|
|
39
|
+
import { chunk_sample_transmittance_lut_params } from "./chunk_sample_transmittance_lut.js";
|
|
40
|
+
import { MIE_G } from "./MIE_G.js";
|
|
41
|
+
import { SAMPLER_SKY_LUT } from "./SAMPLER_SKY_LUT.js";
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Ray-march steps per texel. Compile-time on purpose: as a uniform the march could not be
|
|
45
|
+
* unrolled and its trip count had to be re-tested against an f32 every iteration.
|
|
46
|
+
* @type {number}
|
|
47
|
+
*/
|
|
48
|
+
const SKY_IRRADIANCE_LUT_STEPS = 32;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Side of the sky irradiance map, skirt included: it is an environment map like any other, so its
|
|
52
|
+
* level 0 carries the one-texel octahedral skirt (see `texture_octahedral_skirt_uv`).
|
|
53
|
+
* @type {number}
|
|
54
|
+
*/
|
|
55
|
+
export const SKY_IRRADIANCE_LUT_RESOLUTION = 1024;
|
|
56
|
+
|
|
57
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
58
|
+
|
|
59
|
+
resources.createGroup()
|
|
60
|
+
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
61
|
+
// "float" rather than the default "unfilterable-float": both LUTs are rgba16float,
|
|
62
|
+
// which is filterable in core WebGPU, so they go through the texture unit rather than a
|
|
63
|
+
// 4-tap manual bilinear -- see chunk_sample_transmittance_lut.
|
|
64
|
+
.addTexture("tSkyLutTransmittance", "float")
|
|
65
|
+
.addTexture("tSkyLutMultiscatter", "float")
|
|
66
|
+
.addSampler("sSkyLut", "filtering", SAMPLER_SKY_LUT)
|
|
67
|
+
;
|
|
68
|
+
|
|
69
|
+
resources.createGroup()
|
|
70
|
+
.addStorageBuffer("light_data", WebGPUArray.u32)
|
|
71
|
+
|
|
72
|
+
const chunk_raymarch_scattering = CodeChunk.from(
|
|
73
|
+
//language=WGSL
|
|
74
|
+
`
|
|
75
|
+
const SKY_IRRADIANCE_STEPS = ${SKY_IRRADIANCE_LUT_STEPS}u;
|
|
76
|
+
const SKY_IRRADIANCE_STEPS_F = f32(SKY_IRRADIANCE_STEPS);
|
|
77
|
+
|
|
78
|
+
fn raymarch_scattering(
|
|
79
|
+
origin_rel: vec3<f32>,
|
|
80
|
+
ray_dir: vec3<f32>,
|
|
81
|
+
sun_dir: vec3<f32>,
|
|
82
|
+
tMax: f32
|
|
83
|
+
) -> vec3<f32> {
|
|
84
|
+
let cosTheta = dot(ray_dir, sun_dir);
|
|
85
|
+
|
|
86
|
+
let miePhaseValue = phase_mie(cosTheta, ${MIE_G});
|
|
87
|
+
let rayleighPhaseValue = phase_rayleigh(-cosTheta);
|
|
88
|
+
|
|
89
|
+
var lum = vec3(0.0);
|
|
90
|
+
var transmittance = vec3(1.0);
|
|
91
|
+
|
|
92
|
+
var t = 0.0;
|
|
93
|
+
for (var step_i = 0u; step_i < SKY_IRRADIANCE_STEPS; step_i++) {
|
|
94
|
+
|
|
95
|
+
let newT = ((f32(step_i) + 0.3)/SKY_IRRADIANCE_STEPS_F)*tMax;
|
|
96
|
+
let dt = newT - t;
|
|
97
|
+
t = newT;
|
|
98
|
+
|
|
99
|
+
// One square root for the whole step. Marching the planet-relative position yields
|
|
100
|
+
// the altitude and the up vector from the same length, and both LUT lookups take
|
|
101
|
+
// that pair directly -- each used to recover it from a world position of its own,
|
|
102
|
+
// which was three lengths and two normalizes per step for one step's worth of work.
|
|
103
|
+
let step_rel = origin_rel + t * ray_dir;
|
|
104
|
+
let step_radius = length(step_rel);
|
|
105
|
+
let up = step_rel / step_radius;
|
|
106
|
+
|
|
107
|
+
let local_height = step_radius - ATMOSPHERE_GROUND_RADIUS;
|
|
108
|
+
let sun_cos_zenith_angle = dot(sun_dir, up);
|
|
109
|
+
|
|
110
|
+
let local_density = atmosphere_density(local_height);
|
|
111
|
+
|
|
112
|
+
let ozone_density = local_density.z;
|
|
113
|
+
let ozone_absorption = ozone_density * C_OZONE;
|
|
114
|
+
|
|
115
|
+
let mie_density = local_density.y;
|
|
116
|
+
let mie_absorption = mie_density * C_MIE_ABSORPTION;
|
|
117
|
+
let mie_scattering = mie_density * C_MIE_SCATTERING;
|
|
118
|
+
|
|
119
|
+
// note - taken from the Hillaire's atmosphere code: https://github.com/sebh/UnrealEngineSkyAtmosphere/blob/183ead5bdacc701b3b626347a680a2f3cd3d4fbd/Resources/RenderSkyCommon.hlsl#L248
|
|
120
|
+
let rayleigh_absorption = 0.0;
|
|
121
|
+
let rayleigh_scattering = local_density.x * C_RAYLEIGH;
|
|
122
|
+
|
|
123
|
+
let extinction = rayleigh_scattering + rayleigh_absorption + mie_scattering + mie_absorption + ozone_absorption;
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
let sample_transmittance = exp( -dt * extinction );
|
|
127
|
+
|
|
128
|
+
let sun_transmittance = sample_transmittance_lut_params(local_height, sun_cos_zenith_angle);
|
|
129
|
+
let psiMS = sample_multiscatter_lut_params(local_height, sun_cos_zenith_angle);
|
|
130
|
+
|
|
131
|
+
let rayleigh_in_scattering = rayleigh_scattering * ( rayleighPhaseValue * sun_transmittance + psiMS );
|
|
132
|
+
let mie_in_scattering = mie_scattering * ( miePhaseValue * sun_transmittance + psiMS );
|
|
133
|
+
let in_scattering = ( rayleigh_in_scattering + mie_in_scattering );
|
|
134
|
+
|
|
135
|
+
// Integrated scattering within path segment.
|
|
136
|
+
let scattering_integral = ( in_scattering - in_scattering * sample_transmittance ) / extinction;
|
|
137
|
+
|
|
138
|
+
lum += scattering_integral * transmittance;
|
|
139
|
+
|
|
140
|
+
transmittance *= sample_transmittance;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return lum;
|
|
144
|
+
}
|
|
145
|
+
`, [
|
|
146
|
+
ATMOSPHERE_RADII_DECLARATION,
|
|
147
|
+
chunk_atmosphere_density,
|
|
148
|
+
chunk_phase_mie_cornette_shanks,
|
|
149
|
+
chunk_phase_rayleigh,
|
|
150
|
+
chunk_sample_transmittance_lut_params,
|
|
151
|
+
chunk_sample_multiscatter_lut_params,
|
|
152
|
+
C_MIE_ABSORPTION_DECLARATION,
|
|
153
|
+
C_MIE_SCATTERING_DECLARATION,
|
|
154
|
+
C_OZONE_DECLARATION,
|
|
155
|
+
C_RAYLEIGH_DECLARATION,
|
|
156
|
+
]
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
const body = CodeChunk.from(
|
|
160
|
+
//language=WGSL
|
|
161
|
+
`
|
|
162
|
+
@fragment
|
|
163
|
+
fn main(
|
|
164
|
+
@builtin(position) coord: vec4<f32>,
|
|
165
|
+
@location(0) uv: vec2<f32>,
|
|
166
|
+
) -> @location(0) vec4<f32> {
|
|
167
|
+
|
|
168
|
+
var actual_view_position = mat4_extract_position(camera.transform);
|
|
169
|
+
|
|
170
|
+
let relative_position = position_relative_to_planet_center(actual_view_position);
|
|
171
|
+
|
|
172
|
+
let up = normalize(relative_position);
|
|
173
|
+
|
|
174
|
+
let height = length(relative_position);
|
|
175
|
+
|
|
176
|
+
// force view into valid range
|
|
177
|
+
let clamped_height = clamp(height , PLANET_RADIUS + ${ATMOSPHERE_ALTITUDE_CUTOFF}, PLANET_RADIUS + ATMOSPHERE_HEIGHT - ${ATMOSPHERE_ALTITUDE_CUTOFF});
|
|
178
|
+
|
|
179
|
+
// planet-relative, which is what both the bounds and the march want
|
|
180
|
+
let view_rel = up * clamped_height;
|
|
181
|
+
|
|
182
|
+
// skirt texels compute their interior twin's direction, so the skirt is a copy of it
|
|
183
|
+
let rayDir = uv_octahedral_unit_decode(texture_octahedral_skirt_texel_uv(vec2<u32>(coord.xy), ${SKY_IRRADIANCE_LUT_RESOLUTION}u));
|
|
184
|
+
|
|
185
|
+
let sun = light_get_sun();
|
|
186
|
+
|
|
187
|
+
let sunAltitude = ( 0.5 * PI ) - safe_acos( dot(-sun.direction, up) );
|
|
188
|
+
let sunDir = vec3(0.0, sin(sunAltitude), -cos(sunAltitude));
|
|
189
|
+
|
|
190
|
+
// one quadratic setup for both spheres, rather than two calls sharing an origin and a
|
|
191
|
+
// centre that differ only in radius
|
|
192
|
+
let bounds = atmosphere_ray_bounds(view_rel, rayDir);
|
|
193
|
+
|
|
194
|
+
let lum = raymarch_scattering(view_rel, rayDir, sunDir, bounds.t_max);
|
|
195
|
+
|
|
196
|
+
// TODO validate this, it "feels" wrong to me
|
|
197
|
+
let irradiance = lum * sun.color;
|
|
198
|
+
|
|
199
|
+
return vec4(irradiance, 1.0);
|
|
200
|
+
|
|
201
|
+
}
|
|
202
|
+
`, [
|
|
203
|
+
chunk_safe_acos,
|
|
204
|
+
chunk_light_get_sun,
|
|
205
|
+
chunk_position_relative_to_planet_center,
|
|
206
|
+
chunk_mat4_extract_position,
|
|
207
|
+
PLANET_RADIUS_DECLARATION,
|
|
208
|
+
ATMOSPHERE_HEIGHT_DECLARATION,
|
|
209
|
+
PI_DECLARATION,
|
|
210
|
+
chunk_atmosphere_ray_bounds,
|
|
211
|
+
chunk_uv_octahedral_unit_decode,
|
|
212
|
+
chunk_texture_octahedral_skirt_texel_uv,
|
|
213
|
+
chunk_raymarch_scattering,
|
|
214
|
+
]
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
export const shader_sky_irradiance_lut = new ImageShader({
|
|
218
|
+
descriptor: ShaderDescriptor.from({
|
|
219
|
+
label: "Sky / sky irradiance LUT",
|
|
220
|
+
body,
|
|
221
|
+
resources
|
|
222
|
+
}),
|
|
223
|
+
targets: [
|
|
224
|
+
{
|
|
225
|
+
format: "rgba16float"
|
|
226
|
+
}
|
|
227
|
+
]
|
|
216
228
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SHADING_LIGHT_RESOURCE_GROUP.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SHADING_LIGHT_RESOURCE_GROUP.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.js"],"names":[],"mappings":"AAWA,yEAAgF;8CAJlC,qDAAqD"}
|
|
@@ -7,12 +7,14 @@ import { ENVIRONMENT_MAP_RESOURCE } from "../light/environment/ENVIRONMENT_MAP_R
|
|
|
7
7
|
import { LIGHT_DATA_RESOURCE } from "../light/LIGHT_DATA_RESOURCE.js";
|
|
8
8
|
import { ShaderResourceGroupDescriptor } from "../shader/resource/ShaderResourceGroupDescriptor.js";
|
|
9
9
|
import { SHADOWMAP_ATLAS_RESOURCE, SHADOWMAP_COMPARE_SAMPLER_RESOURCE } from "../shadow/map/SHADOWMAP_RESOURCES.js";
|
|
10
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
10
11
|
|
|
11
12
|
export const SHADING_LIGHT_RESOURCE_GROUP = new ShaderResourceGroupDescriptor();
|
|
12
13
|
|
|
13
14
|
SHADING_LIGHT_RESOURCE_GROUP
|
|
14
15
|
.add(LIGHT_DATA_RESOURCE)
|
|
15
16
|
.add(ENVIRONMENT_MAP_RESOURCE)
|
|
17
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
16
18
|
// clusters
|
|
17
19
|
.add(LIGHT_CLUSTER_PARAMETERS_RESOURCE)
|
|
18
20
|
.add(LIGHT_CLUSTER_LOOKUP_RESOURCE)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_get_ibl_irradiance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_get_ibl_irradiance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,uCAFU,SAAS,CAYjB;0BAlBwB,oCAAoC"}
|
|
@@ -2,6 +2,7 @@ import { PI_DECLARATION } from "../../shader/chunk/math/PI_DECLARATION.js";
|
|
|
2
2
|
import { chunk_sample_environment_map } from "../../shader/chunk/texture/sample/chunk_sample_environment_map.js";
|
|
3
3
|
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
4
4
|
import { ENVIRONMENT_MAP_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_RESOURCE.js";
|
|
5
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* see https://github.com/mrdoob/three.js/blob/089e36db16a6fbaf8cd12fbc8b6abfa3beaa4801/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js#L4
|
|
@@ -11,7 +12,7 @@ export const chunk_get_ibl_irradiance = CodeChunk.from(
|
|
|
11
12
|
//language=WGSL
|
|
12
13
|
`
|
|
13
14
|
fn get_ibl_irradiance(normal: vec3<f32>) -> vec3<f32> {
|
|
14
|
-
return sample_environment_map(tEnvironment, normal, 1.0) * PI;
|
|
15
|
+
return sample_environment_map(tEnvironment, sEnvironment, normal, 1.0) * PI;
|
|
15
16
|
}
|
|
16
17
|
`, [
|
|
17
18
|
chunk_sample_environment_map,
|
|
@@ -19,4 +20,5 @@ fn get_ibl_irradiance(normal: vec3<f32>) -> vec3<f32> {
|
|
|
19
20
|
]
|
|
20
21
|
);
|
|
21
22
|
|
|
22
|
-
chunk_get_ibl_irradiance.requireResource(ENVIRONMENT_MAP_RESOURCE);
|
|
23
|
+
chunk_get_ibl_irradiance.requireResource(ENVIRONMENT_MAP_RESOURCE);
|
|
24
|
+
chunk_get_ibl_irradiance.requireResource(ENVIRONMENT_MAP_SAMPLER_RESOURCE);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_get_ibl_radiance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_get_ibl_radiance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,qCAFU,SAAS,CAqBZ;0BA3BmB,oCAAoC"}
|
|
@@ -2,6 +2,7 @@ import { PI_DECLARATION } from "../../shader/chunk/math/PI_DECLARATION.js";
|
|
|
2
2
|
import { chunk_sample_environment_map } from "../../shader/chunk/texture/sample/chunk_sample_environment_map.js";
|
|
3
3
|
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
4
4
|
import { ENVIRONMENT_MAP_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_RESOURCE.js";
|
|
5
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* @see https://github.com/mrdoob/three.js/blob/ac8d338cc4de9c9529cbdb0d256eb0fc50a86a93/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js#L22
|
|
@@ -21,11 +22,12 @@ fn get_ibl_radiance(
|
|
|
21
22
|
// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.
|
|
22
23
|
let sample_vector = normalize( mix( reflection_direction, normal_ws, roughness * roughness) );
|
|
23
24
|
|
|
24
|
-
return sample_environment_map(tEnvironment, sample_vector, roughness );
|
|
25
|
+
return sample_environment_map(tEnvironment, sEnvironment, sample_vector, roughness );
|
|
25
26
|
}
|
|
26
27
|
`, [
|
|
27
28
|
chunk_sample_environment_map,
|
|
28
29
|
PI_DECLARATION,
|
|
29
30
|
]);
|
|
30
31
|
|
|
31
|
-
chunk_get_ibl_radiance.requireResource(ENVIRONMENT_MAP_RESOURCE);
|
|
32
|
+
chunk_get_ibl_radiance.requireResource(ENVIRONMENT_MAP_RESOURCE);
|
|
33
|
+
chunk_get_ibl_radiance.requireResource(ENVIRONMENT_MAP_SAMPLER_RESOURCE);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_background.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/deferred/shader_background.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_background.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/deferred/shader_background.js"],"names":[],"mappings":"AAgDA,4CAiBE;4BA5D0B,0BAA0B"}
|
|
@@ -7,12 +7,14 @@ import { ImageShader } from "../shader/ImageShader.js";
|
|
|
7
7
|
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
8
8
|
import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
|
|
9
9
|
import { VIEW_UNIFORM_STRUCT } from "../view/VIEW_UNIFORM_STRUCT.js";
|
|
10
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
10
11
|
|
|
11
12
|
const resources = new ShaderResourceSetDescriptor();
|
|
12
13
|
resources.createGroup()
|
|
13
14
|
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
14
15
|
.addUniform("view", VIEW_UNIFORM_STRUCT)
|
|
15
|
-
.addTexture("tEnvironment")
|
|
16
|
+
.addTexture("tEnvironment", "float")
|
|
17
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
16
18
|
.addSampler("sLinear", "filtering", SamplerDescriptor.from({
|
|
17
19
|
magFilter: "linear",
|
|
18
20
|
}))
|
|
@@ -35,7 +37,7 @@ fn main(
|
|
|
35
37
|
// The direction is the unprojected vector itself (ignoring translation implicitly)
|
|
36
38
|
let view_direction = normalize(world_dir_h.xyz);
|
|
37
39
|
|
|
38
|
-
result = sample_environment_color(tEnvironment, view_direction);
|
|
40
|
+
result = sample_environment_color(tEnvironment, sEnvironment, view_direction);
|
|
39
41
|
|
|
40
42
|
return vec4(result, 1.0);
|
|
41
43
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What {@link shader_tonemap_HDR_aces} binds as `aces2_tables`: two ACES 2.0 output transforms, each its parameters and
|
|
3
|
+
* gamut tables, both limited to Rec.709, the gamut of the SDR picture they expand.
|
|
4
|
+
*
|
|
5
|
+
* 1. An SDR display, 100 cd/m². The pass runs it backwards, from the SDR picture to the scene.
|
|
6
|
+
* 2. This display: the peak over the paper white, times 100 cd/m². A display at or under the paper white gets
|
|
7
|
+
* 100 cd/m², which the pass does not read.
|
|
8
|
+
*
|
|
9
|
+
* Both take SDR white for 100 cd/m², ACES 2.0's reference, so an SDR picture expanded for a display keeps SDR white
|
|
10
|
+
* where the paper white puts it.
|
|
11
|
+
*
|
|
12
|
+
* Building one transform takes 7 to 13 ms, so the tables are built on the first {@link update} rather than with the
|
|
13
|
+
* renderer, and again only when the display's peak changes.
|
|
14
|
+
*/
|
|
15
|
+
export class TonemapAces2Tables {
|
|
16
|
+
/**
|
|
17
|
+
* Both blocks, the SDR one first. Zero until the first {@link update}.
|
|
18
|
+
* @type {Float32Array}
|
|
19
|
+
*/
|
|
20
|
+
data: Float32Array;
|
|
21
|
+
/**
|
|
22
|
+
* Build the tables for a display, if they are not built for it already.
|
|
23
|
+
*
|
|
24
|
+
* @param {number} peak_nits the display's peak, cd/m²
|
|
25
|
+
* @returns {boolean} whether {@link data} changed
|
|
26
|
+
*/
|
|
27
|
+
update(peak_nits: number): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* The tables on the device, written if they changed since the last call.
|
|
30
|
+
*
|
|
31
|
+
* @param {GPUDevice} device
|
|
32
|
+
* @returns {GPUBuffer}
|
|
33
|
+
*/
|
|
34
|
+
gpu_buffer(device: GPUDevice): GPUBuffer;
|
|
35
|
+
destroy(): void;
|
|
36
|
+
#private;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=TonemapAces2Tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TonemapAces2Tables.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/TonemapAces2Tables.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH;IACI;;;OAGG;IACH,MAFU,YAAY,CAE0B;IAWhD;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,OAAO,CAsBnB;IAED;;;;;OAKG;IACH,yCAgBC;IAED,gBAKC;;CACJ"}
|