@woosh/meep-engine 3.11.1 → 3.11.3
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/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +294 -290
- package/src/engine/graphics3/ParticipatingMedia.d.ts +111 -0
- package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMedia.js +203 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts +34 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.js +73 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +87 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +184 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +16 -2
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +28 -4
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +5 -2
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +564 -451
- package/src/shade/device/ShadeGPUCommandContext.d.ts +18 -2
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +994 -940
- package/src/shade/device/immediate_data_supported.d.ts +33 -0
- package/src/shade/device/immediate_data_supported.d.ts.map +1 -0
- package/src/shade/device/immediate_data_supported.js +53 -0
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +18 -0
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +24 -0
- package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts +7 -0
- package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +49 -1
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +20 -2
- package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts +65 -0
- package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts.map +1 -0
- package/src/shade/device/mock/SoftwareGPUImmediateData.js +160 -0
- package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +7 -0
- package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +50 -0
- package/src/shade/device/mock/pipeline_immediate_size.d.ts +11 -0
- package/src/shade/device/mock/pipeline_immediate_size.d.ts.map +1 -0
- package/src/shade/device/mock/pipeline_immediate_size.js +18 -0
- package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/PipelineLayoutManager.js +1 -0
- package/src/shade/playground/volumetrics_froxel/README.md +104 -1
- package/src/shade/playground/volumetrics_froxel/index.html +20 -1
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +298 -0
- package/src/shade/playground/volumetrics_froxel/measure.d.ts +119 -0
- package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -0
- package/src/shade/playground/volumetrics_froxel/measure.js +559 -0
- package/src/shade/renderer/GraphicsContext.d.ts +9 -2
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +13 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +22 -18
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +145 -142
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +34 -0
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +36 -0
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +20 -0
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +25 -0
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +14 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +163 -177
- package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts +20 -0
- package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.js +46 -0
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +11 -1
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +57 -27
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +19 -1
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +69 -33
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +13 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +35 -35
- package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts +13 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_params.js +38 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts +17 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js +29 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts +21 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.js +42 -0
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts +2 -2
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +165 -84
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +215 -204
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +79 -67
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +6 -2
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +4 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +341 -345
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -3
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +77 -81
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +5 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +6 -2
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +4 -1
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +26 -0
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +32 -0
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js +17 -6
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +69 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.js +22 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts +16 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js +41 -0
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts +11 -0
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.js +15 -19
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js +44 -0
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js +1 -4
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +7 -1
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
- package/src/shade/renderer/shader/compiler/CodeChunk.js +37 -2
- package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.js +6 -0
- package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +1 -1
- package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +1 -1
- package/src/shade/renderer/shader/graph/graph_image_pass.js +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_bindings.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_bindings.js +7 -0
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts +3 -1
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +12 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +1 -0
- package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts +21 -0
- package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts.map +1 -0
- package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.js +21 -0
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +59 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +195 -2
- package/src/shade/renderer/shader/type/type_has_arrays.d.ts +14 -0
- package/src/shade/renderer/shader/type/type_has_arrays.d.ts.map +1 -0
- package/src/shade/renderer/shader/type/type_has_arrays.js +33 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts +14 -13
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +133 -129
- package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewSkyContext.js +169 -173
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +480 -315
- package/src/shade/renderer/volumetrics/NOTES.md +887 -8
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +5 -0
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +21 -2
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +26 -0
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/SceneVolumetrics.js +64 -21
- package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.js +84 -28
- package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.d.ts +98 -0
- package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.js +111 -0
- package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.d.ts +84 -0
- package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.js +252 -0
- package/src/shade/renderer/volumetrics/chunk_integrate_optical_depth.js +75 -75
- package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.d.ts +43 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts +20 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.js +48 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts +38 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +130 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +18 -3
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +193 -70
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +16 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +83 -15
- 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 +29 -18
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +260 -260
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +58 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +290 -0
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +25 -0
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.js +33 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +2228 -2215
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +210 -2
- package/src/shade/wgsl/emulator/cpu_texture_gather.d.ts +69 -0
- package/src/shade/wgsl/emulator/cpu_texture_gather.d.ts.map +1 -0
- package/src/shade/wgsl/emulator/cpu_texture_gather.js +148 -0
- package/src/shade/wgsl/emulator/cpu_texture_sample.d.ts +16 -0
- package/src/shade/wgsl/emulator/cpu_texture_sample.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/cpu_texture_sample.js +176 -172
- package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts +0 -2
- package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.js +0 -1
|
@@ -1,129 +1,133 @@
|
|
|
1
|
-
import { LIGHT_DATABASE_SPEC } from "../../../light/LIGHT_DATABASE_SPEC.js";
|
|
2
|
-
import { chunk_cone_sample_direction } from "../../../shader/chunk/geometry/cone/chunk_cone_sample_direction.js";
|
|
3
|
-
import {
|
|
4
|
-
chunk_uv_octahedral_unit_encode
|
|
5
|
-
} from "../../../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_encode.js";
|
|
6
|
-
import { chunk_random } from "../../../shader/chunk/random/chunk_random.js";
|
|
7
|
-
import { chunk_random_round_vec2 } from "../../../shader/chunk/random/chunk_random_round_vec2.js";
|
|
8
|
-
import { chunk_random_vec2 } from "../../../shader/chunk/random/chunk_random_vec2.js";
|
|
9
|
-
import { chunk_uv_to_texel_coordinate } from "../../../shader/chunk/texture/chunk_uv_to_texel_coordinate.js";
|
|
10
|
-
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
11
|
-
import { chunk_get_shadow_offsets } from "./chunk_get_shadow_offsets.js";
|
|
12
|
-
import { chunk_contact_harden_pcf_kernel } from "./dpcf/chunk_contact_harden_pcf_kernel.js";
|
|
13
|
-
import { chunk_max_penumbra_percentage } from "./dpcf/chunk_max_penumbra_percentage.js";
|
|
14
|
-
|
|
15
|
-
const SHADOW_POINT_DESCRIPTOR = LIGHT_DATABASE_SPEC.get('shadow_point');
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Cone-sampled point shadow PCF
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* the
|
|
32
|
-
* this light's
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* @
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
let
|
|
57
|
-
let
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
let
|
|
61
|
-
let
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
let
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
let
|
|
75
|
-
let
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
let cone_aperture = 2.0 * max_penumbra_percentage(light_radius, light_radius);
|
|
82
|
-
|
|
83
|
-
var occluders: f32 = 0.0;
|
|
84
|
-
var occluder_dist_sum: f32 = 0.0;
|
|
85
|
-
|
|
86
|
-
for (var tap: u32 = 0u; tap < 8u; tap++) {
|
|
87
|
-
|
|
88
|
-
let xi = random_vec2();
|
|
89
|
-
|
|
90
|
-
let perturbed_dir = cone_sample_direction(dir_light_to_surface, cone_aperture, xi);
|
|
91
|
-
|
|
92
|
-
let octahedral_uv = uv_octahedral_unit_encode(perturbed_dir);
|
|
93
|
-
let local_texel = uv_to_texel_coordinate(octahedral_uv, face_size);
|
|
94
|
-
|
|
95
|
-
//
|
|
96
|
-
let rounded_local_texel = random_round_vec2(local_texel);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
let
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
1
|
+
import { LIGHT_DATABASE_SPEC } from "../../../light/LIGHT_DATABASE_SPEC.js";
|
|
2
|
+
import { chunk_cone_sample_direction } from "../../../shader/chunk/geometry/cone/chunk_cone_sample_direction.js";
|
|
3
|
+
import {
|
|
4
|
+
chunk_uv_octahedral_unit_encode
|
|
5
|
+
} from "../../../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_encode.js";
|
|
6
|
+
import { chunk_random } from "../../../shader/chunk/random/chunk_random.js";
|
|
7
|
+
import { chunk_random_round_vec2 } from "../../../shader/chunk/random/chunk_random_round_vec2.js";
|
|
8
|
+
import { chunk_random_vec2 } from "../../../shader/chunk/random/chunk_random_vec2.js";
|
|
9
|
+
import { chunk_uv_to_texel_coordinate } from "../../../shader/chunk/texture/chunk_uv_to_texel_coordinate.js";
|
|
10
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
11
|
+
import { chunk_get_shadow_offsets } from "./chunk_get_shadow_offsets.js";
|
|
12
|
+
import { chunk_contact_harden_pcf_kernel } from "./dpcf/chunk_contact_harden_pcf_kernel.js";
|
|
13
|
+
import { chunk_max_penumbra_percentage } from "./dpcf/chunk_max_penumbra_percentage.js";
|
|
14
|
+
|
|
15
|
+
const SHADOW_POINT_DESCRIPTOR = LIGHT_DATABASE_SPEC.get('shadow_point');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Cone-sampled point shadow PCF: 8 random directions inside a cone around the receiver-to-light
|
|
19
|
+
* vector, each re-encoded to the light's octahedral map, one `textureLoad` per tap, ending in
|
|
20
|
+
* {@link chunk_contact_harden_pcf_kernel}. Tap directions come from {@link chunk_random}, which the
|
|
21
|
+
* calling shader (deferred lighting / volumetrics) initialises per invocation, so neighbouring
|
|
22
|
+
* pixels decorrelate without a rotation table or a blue-noise disk.
|
|
23
|
+
*
|
|
24
|
+
* The aperture is the GDC bulb-radius scaling in {@link chunk_max_penumbra_percentage}; the factor
|
|
25
|
+
* of 2 carries over the texels → tangent-plane conversion an earlier disk-based variant used (1
|
|
26
|
+
* atlas texel ≈ 2/face_dim of Δn.xy near the +Z pole), so the angular footprint stays comparable.
|
|
27
|
+
*
|
|
28
|
+
* Addressing: `atlas_aabb` is the INNER octahedral surface, and the cube → octahedral remap
|
|
29
|
+
* surrounds it with a `SHADOWMAP_ATLAS_BORDER`-texel skirt holding
|
|
30
|
+
* `inner[texture_octahedral_wrap_texel_coordinates(local)]`. Under the bilinear convention
|
|
31
|
+
* `uv * size - 0.5` a uv on the edge of the square rounds to -1 or `size` — one texel into that
|
|
32
|
+
* skirt, which is this light's own wrapped data. The encode always lands in [0, 1]² and the round
|
|
33
|
+
* can overshoot by at most one texel, so the aperture needs no clamp.
|
|
34
|
+
*
|
|
35
|
+
* @see chunk_cone_sample_direction
|
|
36
|
+
* @type {CodeChunk}
|
|
37
|
+
*/
|
|
38
|
+
export const chunk_shadowmap_sample_point2 = CodeChunk.from(
|
|
39
|
+
//language=WGSL
|
|
40
|
+
`
|
|
41
|
+
fn shadowmap_sample_point(
|
|
42
|
+
database: ptr<storage, array<u32>>,
|
|
43
|
+
shadow_id: u32,
|
|
44
|
+
position_ws: vec3f,
|
|
45
|
+
surface_normal_ws: vec3f,
|
|
46
|
+
light_position_ws: vec3f,
|
|
47
|
+
light_max_distance: f32,
|
|
48
|
+
light_radius: f32,
|
|
49
|
+
) -> f32 {
|
|
50
|
+
const NORMAL_BIAS_SCALE = 2.0;
|
|
51
|
+
const DEPTH_OFFSET_BIAS = 0.0001;
|
|
52
|
+
|
|
53
|
+
let atlas_aabb = ${SHADOW_POINT_DESCRIPTOR.marshalling_method_read}(database, shadow_id);
|
|
54
|
+
|
|
55
|
+
// unbiased distance and light direction, used to compute the bias amounts
|
|
56
|
+
let to_light_unbiased = light_position_ws - position_ws;
|
|
57
|
+
let dist_to_light_unbiased = length(to_light_unbiased);
|
|
58
|
+
let light_direction = to_light_unbiased / max(dist_to_light_unbiased, 1e-6);
|
|
59
|
+
|
|
60
|
+
let world_pixel_size = 2.0 * dist_to_light_unbiased / max(atlas_aabb.z, 1.0);
|
|
61
|
+
let shadowmap_bias = get_shadow_offsets(surface_normal_ws, light_direction);
|
|
62
|
+
let normal_offset = world_pixel_size * shadowmap_bias.x * surface_normal_ws * NORMAL_BIAS_SCALE;
|
|
63
|
+
|
|
64
|
+
// re-evaluate direction and distance from the normal-biased position
|
|
65
|
+
let to_surface = (position_ws + normal_offset) - light_position_ws;
|
|
66
|
+
let distance_to_center = length(to_surface);
|
|
67
|
+
|
|
68
|
+
// Direction the cube faces captured: FROM LIGHT TO SURFACE
|
|
69
|
+
let dir_light_to_surface = to_surface / max(distance_to_center, 1e-6);
|
|
70
|
+
|
|
71
|
+
let face_size = vec2u(atlas_aabb.zw);
|
|
72
|
+
|
|
73
|
+
// reverse-Z convention: close to light -> 1, at or beyond light_max_distance -> 0.
|
|
74
|
+
let radial = distance_to_center / max(light_max_distance, 1e-6);
|
|
75
|
+
let depth_bias = DEPTH_OFFSET_BIAS * shadowmap_bias.y;
|
|
76
|
+
let reference_depth = (1.0 - saturate(radial)) + depth_bias;
|
|
77
|
+
|
|
78
|
+
// Cone aperture (~ tan of the half-angle). max_penumbra_percentage is the GDC formula mapping
|
|
79
|
+
// bulb radius to a fraction of the atlas face; the 2× factor is the texels → tangent-plane
|
|
80
|
+
// conversion. Unclamped — see the header on why any aperture stays addressable.
|
|
81
|
+
let cone_aperture = 2.0 * max_penumbra_percentage(light_radius, light_radius);
|
|
82
|
+
|
|
83
|
+
var occluders: f32 = 0.0;
|
|
84
|
+
var occluder_dist_sum: f32 = 0.0;
|
|
85
|
+
|
|
86
|
+
for (var tap: u32 = 0u; tap < 8u; tap++) {
|
|
87
|
+
|
|
88
|
+
let xi = random_vec2();
|
|
89
|
+
|
|
90
|
+
let perturbed_dir = cone_sample_direction(dir_light_to_surface, cone_aperture, xi);
|
|
91
|
+
|
|
92
|
+
let octahedral_uv = uv_octahedral_unit_encode(perturbed_dir);
|
|
93
|
+
let local_texel = uv_to_texel_coordinate(octahedral_uv, face_size);
|
|
94
|
+
|
|
95
|
+
// one of the two neighbours at random rather than a blend of them: stochastic bilinear
|
|
96
|
+
let rounded_local_texel = random_round_vec2(local_texel);
|
|
97
|
+
|
|
98
|
+
// Signed: the round reaches -1 at a uv of 0, and the skirt is where that tap belongs. Via
|
|
99
|
+
// u32 the -1 would be an indeterminate conversion — 0xFFFFFFFF reaches the skirt through
|
|
100
|
+
// the wrapping add, 0 silently reads the opposite edge of the inner surface. i32 is exact
|
|
101
|
+
// here, and the inner origin is at least SHADOWMAP_ATLAS_BORDER, so the sum is positive.
|
|
102
|
+
let sample_texel = vec2<u32>(vec2<i32>(rounded_local_texel) + vec2<i32>(atlas_aabb.xy));
|
|
103
|
+
|
|
104
|
+
let stored = textureLoad(shadowmapAtlas, sample_texel, 0);
|
|
105
|
+
let dist = stored - reference_depth;
|
|
106
|
+
|
|
107
|
+
// Per-tap binary compare; reverse-Z + step(0, stored - ref) ⇒ 1 = occluded.
|
|
108
|
+
let occluded = step(0.0, dist);
|
|
109
|
+
|
|
110
|
+
occluders += occluded;
|
|
111
|
+
occluder_dist_sum += dist * occluded;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return contact_harden_pcf_kernel(
|
|
115
|
+
occluders,
|
|
116
|
+
occluder_dist_sum,
|
|
117
|
+
reference_depth,
|
|
118
|
+
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
`, [
|
|
122
|
+
SHADOW_POINT_DESCRIPTOR.chunk_read,
|
|
123
|
+
chunk_cone_sample_direction,
|
|
124
|
+
chunk_contact_harden_pcf_kernel,
|
|
125
|
+
chunk_get_shadow_offsets,
|
|
126
|
+
chunk_max_penumbra_percentage,
|
|
127
|
+
chunk_random,
|
|
128
|
+
chunk_uv_octahedral_unit_encode,
|
|
129
|
+
chunk_uv_to_texel_coordinate,
|
|
130
|
+
chunk_random_round_vec2,
|
|
131
|
+
chunk_random_vec2,
|
|
132
|
+
]
|
|
133
|
+
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUViewSkyContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/view/GPUViewSkyContext.js"],"names":[],"mappings":"AAiBA;IAsBI;;;OAGG;IACH,uCAgBC;IA5BD;;;OAGG;IACH,wCAEC;IA0BD,2BAIC;IAED;;;;OAIG;IACH,+
|
|
1
|
+
{"version":3,"file":"GPUViewSkyContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/view/GPUViewSkyContext.js"],"names":[],"mappings":"AAiBA;IAsBI;;;OAGG;IACH,uCAgBC;IA5BD;;;OAGG;IACH,wCAEC;IA0BD,2BAIC;IAED;;;;OAIG;IACH,+DAuDC;IAED,mCAiCC;IA5BG,yBAA2B;IAyB3B,kCAA4B;IAKhC,gBAEC;;CACJ;kCA7JiC,iCAAiC"}
|
|
@@ -1,174 +1,170 @@
|
|
|
1
|
-
import { m3_cm_compose_transform } from "../../../core/geom/mat3/m3_cm_compose_transform.js";
|
|
2
|
-
import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
|
|
3
|
-
import { Sampler2D } from "../../../engine/graphics/texture/sampler/Sampler2D.js";
|
|
4
|
-
import sampler2d_to_html_canvas
|
|
5
|
-
from "../../../engine/graphics/texture/sampler/sampler2d_to_html_canvas.js";
|
|
6
|
-
import { writeCssTransformMatrix } from "../../../view/writeCssTransformMatrix.js";
|
|
7
|
-
import { TextureResourceDescriptor } from "../../device/graph/TextureResourceDescriptor.js";
|
|
8
|
-
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
9
|
-
import { SPHERE_PROBE_MIPMAP_LEVELS } from "../light/environment/DEFINES.js";
|
|
10
|
-
import { graph_filter_environment_map } from "../light/environment/graph_filter_environment_map.js";
|
|
11
|
-
import { shader_sky_irradiance_lut } from "../atmosphere/shader_sky_irradiance_lut.js";
|
|
12
|
-
import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
|
|
13
|
-
import { GPUTextureContext } from "../texture/GPUTextureContext.js";
|
|
14
|
-
import { sampler_linear_to_sRGB } from "../texture/sampler_linear_to_sRGB.js";
|
|
15
|
-
|
|
16
|
-
let debug_counter = 0;
|
|
17
|
-
|
|
18
|
-
export class GPUViewSkyContext {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @type {GraphicsContext}
|
|
23
|
-
*/
|
|
24
|
-
#graphics;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @type {GPUTextureContext}
|
|
28
|
-
*/
|
|
29
|
-
#lut_sky;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* @returns {GPUTextureContext}
|
|
35
|
-
*/
|
|
36
|
-
get irradiance_lut() {
|
|
37
|
-
return this.#lut_sky;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
42
|
-
* @param {GraphicsContext} graphics
|
|
43
|
-
*/
|
|
44
|
-
constructor(graphics) {
|
|
45
|
-
this.#graphics = graphics;
|
|
46
|
-
|
|
47
|
-
const device = graphics.device;
|
|
48
|
-
|
|
49
|
-
this.#lut_sky = new GPUTextureContext(device);
|
|
50
|
-
this.#lut_sky.descriptor.label = "Sky / Irradiance LUT";
|
|
51
|
-
this.#lut_sky.descriptor.format = "rgba16float";
|
|
52
|
-
this.#lut_sky.descriptor.mipLevelCount = SPHERE_PROBE_MIPMAP_LEVELS;
|
|
53
|
-
this.#lut_sky.descriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT
|
|
54
|
-
| GPUTextureUsage.TEXTURE_BINDING
|
|
55
|
-
| GPUTextureUsage.STORAGE_BINDING
|
|
56
|
-
| GPUTextureUsage.COPY_SRC
|
|
57
|
-
;
|
|
58
|
-
this.#lut_sky.resize(1024, 1024);
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
#needs_update = true;
|
|
63
|
-
|
|
64
|
-
set needs_update(v) {
|
|
65
|
-
if (v) {
|
|
66
|
-
this.#needs_update = true;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
*
|
|
72
|
-
* @param {GPUCameraContext} camera
|
|
73
|
-
* @param {GPUSceneContext} scene
|
|
74
|
-
*/
|
|
75
|
-
update(camera, scene) {
|
|
76
|
-
|
|
77
|
-
if (!this.#needs_update) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
this.#needs_update = false;
|
|
82
|
-
|
|
83
|
-
// ensure base sky LUTs are up-to-date
|
|
84
|
-
/**
|
|
85
|
-
*
|
|
86
|
-
* @type {GPUSky}
|
|
87
|
-
*/
|
|
88
|
-
const scene_sky = scene.sky;
|
|
89
|
-
scene_sky.update();
|
|
90
|
-
|
|
91
|
-
const graph = new FrameGraph("sky update");
|
|
92
|
-
|
|
93
|
-
const command_ctx = ShadeGPUCommandContext.create(
|
|
94
|
-
this.#graphics,
|
|
95
|
-
"Renderer/main"
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
const gr_transmittance = graph.import_resource("transmittance", TextureResourceDescriptor.fromTexture(scene_sky.lut_transmittance.gpu_texture), scene_sky.lut_transmittance);
|
|
99
|
-
const gr_multiscatter = graph.import_resource("multiscatter", TextureResourceDescriptor.fromTexture(scene_sky.lut_multiple_scattering.gpu_texture), scene_sky.lut_multiple_scattering);
|
|
100
|
-
const gr_sky = graph.import_resource("sky_irradiance", TextureResourceDescriptor.fromTexture(this.#lut_sky.gpu_texture), this.#lut_sky);
|
|
101
|
-
|
|
102
|
-
let [out] = graph_image_pass({
|
|
103
|
-
graph,
|
|
104
|
-
shader: shader_sky_irradiance_lut,
|
|
105
|
-
inputs: {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
canvas
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
this.
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
destroy() {
|
|
172
|
-
this.#lut_sky.destroy();
|
|
173
|
-
}
|
|
1
|
+
import { m3_cm_compose_transform } from "../../../core/geom/mat3/m3_cm_compose_transform.js";
|
|
2
|
+
import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
|
|
3
|
+
import { Sampler2D } from "../../../engine/graphics/texture/sampler/Sampler2D.js";
|
|
4
|
+
import sampler2d_to_html_canvas
|
|
5
|
+
from "../../../engine/graphics/texture/sampler/sampler2d_to_html_canvas.js";
|
|
6
|
+
import { writeCssTransformMatrix } from "../../../view/writeCssTransformMatrix.js";
|
|
7
|
+
import { TextureResourceDescriptor } from "../../device/graph/TextureResourceDescriptor.js";
|
|
8
|
+
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
9
|
+
import { SPHERE_PROBE_MIPMAP_LEVELS } from "../light/environment/DEFINES.js";
|
|
10
|
+
import { graph_filter_environment_map } from "../light/environment/graph_filter_environment_map.js";
|
|
11
|
+
import { shader_sky_irradiance_lut } from "../atmosphere/shader_sky_irradiance_lut.js";
|
|
12
|
+
import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
|
|
13
|
+
import { GPUTextureContext } from "../texture/GPUTextureContext.js";
|
|
14
|
+
import { sampler_linear_to_sRGB } from "../texture/sampler_linear_to_sRGB.js";
|
|
15
|
+
|
|
16
|
+
let debug_counter = 0;
|
|
17
|
+
|
|
18
|
+
export class GPUViewSkyContext {
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @type {GraphicsContext}
|
|
23
|
+
*/
|
|
24
|
+
#graphics;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @type {GPUTextureContext}
|
|
28
|
+
*/
|
|
29
|
+
#lut_sky;
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @returns {GPUTextureContext}
|
|
35
|
+
*/
|
|
36
|
+
get irradiance_lut() {
|
|
37
|
+
return this.#lut_sky;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* @param {GraphicsContext} graphics
|
|
43
|
+
*/
|
|
44
|
+
constructor(graphics) {
|
|
45
|
+
this.#graphics = graphics;
|
|
46
|
+
|
|
47
|
+
const device = graphics.device;
|
|
48
|
+
|
|
49
|
+
this.#lut_sky = new GPUTextureContext(device);
|
|
50
|
+
this.#lut_sky.descriptor.label = "Sky / Irradiance LUT";
|
|
51
|
+
this.#lut_sky.descriptor.format = "rgba16float";
|
|
52
|
+
this.#lut_sky.descriptor.mipLevelCount = SPHERE_PROBE_MIPMAP_LEVELS;
|
|
53
|
+
this.#lut_sky.descriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT
|
|
54
|
+
| GPUTextureUsage.TEXTURE_BINDING
|
|
55
|
+
| GPUTextureUsage.STORAGE_BINDING
|
|
56
|
+
| GPUTextureUsage.COPY_SRC
|
|
57
|
+
;
|
|
58
|
+
this.#lut_sky.resize(1024, 1024);
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#needs_update = true;
|
|
63
|
+
|
|
64
|
+
set needs_update(v) {
|
|
65
|
+
if (v) {
|
|
66
|
+
this.#needs_update = true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
*
|
|
72
|
+
* @param {GPUCameraContext} camera
|
|
73
|
+
* @param {GPUSceneContext} scene
|
|
74
|
+
*/
|
|
75
|
+
update(camera, scene) {
|
|
76
|
+
|
|
77
|
+
if (!this.#needs_update) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
this.#needs_update = false;
|
|
82
|
+
|
|
83
|
+
// ensure base sky LUTs are up-to-date
|
|
84
|
+
/**
|
|
85
|
+
*
|
|
86
|
+
* @type {GPUSky}
|
|
87
|
+
*/
|
|
88
|
+
const scene_sky = scene.sky;
|
|
89
|
+
scene_sky.update();
|
|
90
|
+
|
|
91
|
+
const graph = new FrameGraph("sky update");
|
|
92
|
+
|
|
93
|
+
const command_ctx = ShadeGPUCommandContext.create(
|
|
94
|
+
this.#graphics,
|
|
95
|
+
"Renderer/main"
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
const gr_transmittance = graph.import_resource("transmittance", TextureResourceDescriptor.fromTexture(scene_sky.lut_transmittance.gpu_texture), scene_sky.lut_transmittance);
|
|
99
|
+
const gr_multiscatter = graph.import_resource("multiscatter", TextureResourceDescriptor.fromTexture(scene_sky.lut_multiple_scattering.gpu_texture), scene_sky.lut_multiple_scattering);
|
|
100
|
+
const gr_sky = graph.import_resource("sky_irradiance", TextureResourceDescriptor.fromTexture(this.#lut_sky.gpu_texture), this.#lut_sky);
|
|
101
|
+
|
|
102
|
+
let [out] = graph_image_pass({
|
|
103
|
+
graph,
|
|
104
|
+
shader: shader_sky_irradiance_lut,
|
|
105
|
+
inputs: {
|
|
106
|
+
camera: camera.buffer,
|
|
107
|
+
|
|
108
|
+
light_data: scene.lights.buffer_data,
|
|
109
|
+
|
|
110
|
+
tSkyLutTransmittance: gr_transmittance,
|
|
111
|
+
tSkyLutMultiscatter: gr_multiscatter
|
|
112
|
+
},
|
|
113
|
+
output: [gr_sky]
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// convolve
|
|
117
|
+
out = graph_filter_environment_map({
|
|
118
|
+
graph,
|
|
119
|
+
map: out
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
command_ctx.encodeGraph(graph);
|
|
123
|
+
|
|
124
|
+
command_ctx.finish();
|
|
125
|
+
|
|
126
|
+
debug_counter++;
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
// this.debug(3);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async debug(mip = 0) {
|
|
133
|
+
if (this.__debug_waiting) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
this.__debug_waiting = true;
|
|
138
|
+
|
|
139
|
+
const texture = this.#lut_sky;
|
|
140
|
+
|
|
141
|
+
const data = await texture.download(mip);
|
|
142
|
+
|
|
143
|
+
const s = new Sampler2D(data, 4, texture.size[0] >> mip, texture.size[1] >> mip);
|
|
144
|
+
sampler_linear_to_sRGB(s);
|
|
145
|
+
|
|
146
|
+
const canvas = sampler2d_to_html_canvas(s, 255, 0, this.__debug_canvas);
|
|
147
|
+
|
|
148
|
+
if (this.__debug_canvas === undefined) {
|
|
149
|
+
|
|
150
|
+
canvas.style.zIndex = "100";
|
|
151
|
+
canvas.style.position = "absolute";
|
|
152
|
+
canvas.style.bottom = `${32}px`;
|
|
153
|
+
canvas.style.right = `${32}px`;
|
|
154
|
+
|
|
155
|
+
const transform = new Float32Array(9);
|
|
156
|
+
m3_cm_compose_transform(transform, 0, 0, 1, -1, 0, 0, 0);
|
|
157
|
+
writeCssTransformMatrix(transform, canvas);
|
|
158
|
+
|
|
159
|
+
document.body.appendChild(canvas);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
this.__debug_canvas = canvas;
|
|
163
|
+
|
|
164
|
+
this.__debug_waiting = false;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
destroy() {
|
|
168
|
+
this.#lut_sky.destroy();
|
|
169
|
+
}
|
|
174
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUViewVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUViewVolumetrics.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUViewVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUViewVolumetrics.js"],"names":[],"mappings":"AA4BA;IAyHI;;;;OAIG;IACH,qDAqBC;IA/GD;;OAEG;IACH,8BAOC;IAjBD;;OAEG;IACH,2BAEC;IA6BD;;OAEG;IACH,4BAEC;IAZD;;OAEG;IACH,yBAEC;IAwFD,gBAWC;IAiND;;;;;;;OAOG;IACH;;;MAyEC;;CAEJ"}
|