@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
|
@@ -34,12 +34,35 @@ import { chunk_calculate_multiscattering } from "./chunk_calculate_multiscatteri
|
|
|
34
34
|
import { chunk_camera_ray_planar_depth_scale } from "./chunk_camera_ray_planar_depth_scale.js";
|
|
35
35
|
import { chunk_volumetrics_froxel_content_offset } from "./chunk_volumetrics_froxel_content_offset.js";
|
|
36
36
|
import { chunk_integrate_optical_depth } from "./chunk_integrate_optical_depth.js";
|
|
37
|
+
import {
|
|
38
|
+
chunk_volumetrics_sun_optical_depth,
|
|
39
|
+
volumetrics_sun_shadow_texture_name
|
|
40
|
+
} from "./chunk_volumetrics_sun_optical_depth.js";
|
|
41
|
+
import { VOLUMETRICS_SUN_SHADOW_CASCADE_COUNT } from "./VOLUMETRICS_SUN_SHADOW_RESOLUTION.js";
|
|
37
42
|
import { chunk_volumetrics_column_jitter } from "./chunk_volumetrics_column_jitter.js";
|
|
43
|
+
import { chunk_volumetrics_local_light_shadow } from "./chunk_volumetrics_local_light_shadow.js";
|
|
38
44
|
import { VOLUMETRICS_METADATA_STRUCT } from "./VOLUMETRICS_METADATA_STRUCT.js";
|
|
39
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Workgroup shape of this pass, `[x, y, z]` in froxels, read by both the `@workgroup_size` below
|
|
48
|
+
* and the dispatch in `graph_build_volumetrics` so the two cannot drift.
|
|
49
|
+
*
|
|
50
|
+
* Flat in z. Lights are binned into 3D clusters and the largest distance between neighbouring
|
|
51
|
+
* clusters is along depth, so a group spanning z is the one spanning the most unrelated light
|
|
52
|
+
* lists.
|
|
53
|
+
*
|
|
54
|
+
* 64 invocations — one wave64, two warps — is a deliberate trade: 16x16x1 measures faster on the
|
|
55
|
+
* RTX 4090 this was benchmarked on, and is kept off because that part's register file is unusually
|
|
56
|
+
* large and the result is not expected to generalize (AMD favours smaller groups). NOTES.md carries
|
|
57
|
+
* the numbers and the reasoning.
|
|
58
|
+
*
|
|
59
|
+
* @type {number[]}
|
|
60
|
+
*/
|
|
61
|
+
export const VOLUMETRICS_LIGHTING_WORKGROUP_RESOLUTION = [8, 8, 1];
|
|
62
|
+
|
|
40
63
|
const resources = new ShaderResourceSetDescriptor();
|
|
41
64
|
|
|
42
|
-
resources.createGroup()
|
|
65
|
+
const primary_group = resources.createGroup()
|
|
43
66
|
.addUniform("volumetrics_metadata", VOLUMETRICS_METADATA_STRUCT)
|
|
44
67
|
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
45
68
|
.addUniform("view", VIEW_UNIFORM_STRUCT)
|
|
@@ -48,8 +71,16 @@ resources.createGroup()
|
|
|
48
71
|
.addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
|
|
49
72
|
.addTexture("tSTBN_vec3", "unfilterable-float", "3d")
|
|
50
73
|
.addTexture("tParticipatingMedia0", "float", "3d")
|
|
51
|
-
.addTexture("tParticipatingMedia1", "float", "3d")
|
|
52
|
-
|
|
74
|
+
.addTexture("tParticipatingMedia1", "float", "3d");
|
|
75
|
+
|
|
76
|
+
// Q-04: the sun's optical depth, pre-integrated along the light axis by
|
|
77
|
+
// shader_volumetrics_build_sun_shadow_volume, one cascade per texture and innermost first.
|
|
78
|
+
// Sampled, not marched.
|
|
79
|
+
for (let cascade = 0; cascade < VOLUMETRICS_SUN_SHADOW_CASCADE_COUNT; cascade++) {
|
|
80
|
+
primary_group.addTexture(volumetrics_sun_shadow_texture_name(cascade), "float", "3d");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
primary_group.addStorageTexture("tLighting", "rgba16float", "3d", "write-only")
|
|
53
84
|
|
|
54
85
|
// Lighting information
|
|
55
86
|
resources.createGroup()
|
|
@@ -66,7 +97,7 @@ resources.createGroup()
|
|
|
66
97
|
const body = CodeChunk.from(
|
|
67
98
|
//language=WGSL
|
|
68
99
|
`
|
|
69
|
-
@compute @workgroup_size(
|
|
100
|
+
@compute @workgroup_size(${VOLUMETRICS_LIGHTING_WORKGROUP_RESOLUTION.join(",")})
|
|
70
101
|
fn main(
|
|
71
102
|
@builtin(global_invocation_id) voxel_coord : vec3<u32>
|
|
72
103
|
){
|
|
@@ -199,7 +230,7 @@ fn main(
|
|
|
199
230
|
|
|
200
231
|
let sun = get_directional_light_info_by_index(&light_data, directional_index);
|
|
201
232
|
|
|
202
|
-
let sun_lut_uv = sky_lut_compute_uv(position_ws, sun.direction);
|
|
233
|
+
let sun_lut_uv = sky_lut_compute_uv(position_ws, sun.direction, vec2<f32>(textureDimensions(tSunTransmittance)));
|
|
203
234
|
|
|
204
235
|
let shadow_term = shadowmap_get_directional_light_visibility(
|
|
205
236
|
&light_data,
|
|
@@ -222,14 +253,37 @@ fn main(
|
|
|
222
253
|
sun_lut_uv, 0.0
|
|
223
254
|
).rgb;
|
|
224
255
|
|
|
225
|
-
// .
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
256
|
+
// Q-04. Every froxel on this sun ray is asking for the same integral, one increment
|
|
257
|
+
// apart, and the march recomputes all of it from scratch for each: O(froxels * steps)
|
|
258
|
+
// to produce O(froxels) of information. The sun is where that is worst, because its
|
|
259
|
+
// tmax is the distance to the sun clipped to the frustum, so the march spans the whole
|
|
260
|
+
// grid rather than the few metres a lamp's does.
|
|
261
|
+
//
|
|
262
|
+
// So read the answer out of the cascades built once this frame with their axis on the
|
|
263
|
+
// sun, where the increment relation IS the storage — see
|
|
264
|
+
// shader_volumetrics_build_sun_shadow_volume. Same quantity, same units, one fetch.
|
|
265
|
+
//
|
|
266
|
+
// The march below is not an alternative to it, it is what is left for the lights the
|
|
267
|
+
// cascades do not cover: a second directional light, since there is one ladder and it
|
|
268
|
+
// is aligned to one direction, and the two cases that cannot place a box at all, which
|
|
269
|
+
// sun_shadow_light_index reports by holding a value no light index can equal.
|
|
270
|
+
var optical_depth: vec3<f32>;
|
|
271
|
+
|
|
272
|
+
if (directional_index == volumetrics_metadata.sun_shadow_light_index) {
|
|
273
|
+
|
|
274
|
+
optical_depth = volumetrics_sun_optical_depth(position_ws);
|
|
275
|
+
|
|
276
|
+
} else {
|
|
277
|
+
|
|
278
|
+
// .direction points TOWARD the light; march the optical-depth ray toward the light (+direction).
|
|
279
|
+
let shadow_ray = ${RAY_STRUCT.make({
|
|
280
|
+
origin: "position_ws",
|
|
281
|
+
direction: "sun.direction",
|
|
282
|
+
tmax: "sun.distance",
|
|
283
|
+
})};
|
|
284
|
+
|
|
285
|
+
optical_depth = integrate_optical_depth(shadow_ray);
|
|
286
|
+
}
|
|
233
287
|
|
|
234
288
|
let ms = calculate_multiscattering(
|
|
235
289
|
optical_depth,
|
|
@@ -284,7 +338,16 @@ fn main(
|
|
|
284
338
|
volumetrics_metadata.ms_extinction_decay
|
|
285
339
|
);
|
|
286
340
|
|
|
287
|
-
|
|
341
|
+
// Before this, integrate_optical_depth was the ONLY thing occluding a local light:
|
|
342
|
+
// the medium shadowed itself and geometry did not shadow it at all, so a torch behind a
|
|
343
|
+
// wall lit the fog through the wall and a light through a window cast no shaft. The
|
|
344
|
+
// directional loop above has always multiplied its shadow map in; this is the same
|
|
345
|
+
// operation for the clustered lights, which is what Frostbite and UE both do in the
|
|
346
|
+
// froxel pass. One nearest atlas tap rather than the deferred path's filter kernel —
|
|
347
|
+
// see the chunk for why that is not a compromise here.
|
|
348
|
+
let shadow_term = volumetrics_point_light_shadow(&light_data, light_index, position_ws);
|
|
349
|
+
|
|
350
|
+
inScatteringSum += shadow_term * ms * direct_light.color;
|
|
288
351
|
}
|
|
289
352
|
|
|
290
353
|
for (var k = 0u; k < spot_count; k++) {
|
|
@@ -316,7 +379,10 @@ fn main(
|
|
|
316
379
|
volumetrics_metadata.ms_extinction_decay
|
|
317
380
|
);
|
|
318
381
|
|
|
319
|
-
|
|
382
|
+
// see the point loop above
|
|
383
|
+
let shadow_term = volumetrics_spot_light_shadow(&light_data, light_index, position_ws);
|
|
384
|
+
|
|
385
|
+
inScatteringSum += shadow_term * ms * direct_light.color;
|
|
320
386
|
}
|
|
321
387
|
}
|
|
322
388
|
|
|
@@ -350,10 +416,12 @@ fn main(
|
|
|
350
416
|
chunk_get_point_light_info_by_index,
|
|
351
417
|
chunk_get_spot_light_info_by_index,
|
|
352
418
|
chunk_shadowmap_get_light_visibility,
|
|
419
|
+
chunk_volumetrics_local_light_shadow,
|
|
353
420
|
chunk_sky_lut_compute_uv,
|
|
354
421
|
|
|
355
422
|
RAY_STRUCT.declaration_chunk,
|
|
356
423
|
chunk_integrate_optical_depth,
|
|
424
|
+
chunk_volumetrics_sun_optical_depth,
|
|
357
425
|
chunk_calculate_multiscattering,
|
|
358
426
|
chunk_rgb_to_luminance,
|
|
359
427
|
chunk_volumetrics_column_jitter,
|
package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_volumetrics_build_participating_media.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_volumetrics_build_participating_media.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js"],"names":[],"mappings":"AAsMA,yEAIE;8BArL4B,4BAA4B"}
|
|
@@ -12,7 +12,9 @@ import { chunk_rgb_to_luminance } from "../shader/chunk/color/chunk_rgb_to_lumin
|
|
|
12
12
|
import { AABB3_STRUCT } from "../shader/chunk/geometry/aabb3/AABB3_STRUCT.js";
|
|
13
13
|
import { chunk_aabb3_intersects_frustum } from "../shader/chunk/geometry/aabb3/chunk_aabb3_intersects_frustum.js";
|
|
14
14
|
import { chunk_frustum_slice } from "../shader/chunk/geometry/frustum/chunk_frustum_slice.js";
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
chunk_frustum_transform_plane_matrix
|
|
17
|
+
} from "../shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js";
|
|
16
18
|
import { chunk_mat4_extract_scale } from "../shader/chunk/geometry/mat4/chunk_mat4_extract_scale.js";
|
|
17
19
|
import { chunk_random } from "../shader/chunk/random/chunk_random.js";
|
|
18
20
|
import { chunk_random_initialize } from "../shader/chunk/random/chunk_random_initialize.js";
|
|
@@ -101,44 +103,53 @@ fn main(
|
|
|
101
103
|
var particle_diameter = 0.0;
|
|
102
104
|
var scattering_luma_sum = 0.0;
|
|
103
105
|
var anisotropic_g = 0.0;
|
|
104
|
-
|
|
106
|
+
|
|
105
107
|
for(var i=0u; i < scene_volumetrics_metadata.instance_count; i++){
|
|
106
|
-
|
|
108
|
+
|
|
107
109
|
let volume = scene_volumes[i];
|
|
108
|
-
|
|
109
|
-
//
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
|
|
111
|
+
// Transform froxel into volume's coordinate space. Points go world -> local through
|
|
112
|
+
// transform_inverse, so planes go by the transpose of *its* inverse, which is just
|
|
113
|
+
// transpose(transform) — already resident, where deriving it costs a generic 4x4 inverse.
|
|
114
|
+
// Full 4x4 rather than a 3x3 basis: the last row carries the translation, and that is what
|
|
115
|
+
// supplies each transformed plane's distance term.
|
|
116
|
+
let local_frustum = frustum_transform_plane_matrix(froxel_frustum, transpose(volume.transform));
|
|
117
|
+
|
|
112
118
|
const unit_bounds = ${AABB3_STRUCT.make({
|
|
113
119
|
min: "vec3(-0.5)",
|
|
114
120
|
max: "vec3(0.5)",
|
|
115
121
|
})};
|
|
116
|
-
|
|
117
|
-
// TODO we can check intersection degree, if froxel is 100% inside the volume - we can skip costly coverage computation.
|
|
118
|
-
|
|
122
|
+
|
|
119
123
|
let aabb_intersects = aabb3_intersects_frustum(unit_bounds, local_frustum);
|
|
120
|
-
|
|
124
|
+
|
|
121
125
|
if(!aabb_intersects){
|
|
122
126
|
// skip
|
|
123
127
|
continue;
|
|
124
128
|
}
|
|
125
|
-
|
|
129
|
+
|
|
130
|
+
// A froxel proved to lie entirely inside the volume has a coverage of exactly 1.0 and, deep
|
|
131
|
+
// enough in, a fade of exactly 1.0 — both skippable. It is not done here because it does not
|
|
132
|
+
// pay: proving it needs the froxel's 8 vertices, which cost the same 8 three-plane
|
|
133
|
+
// intersections the coverage estimator spends, and only 7 to 33 percent of froxels qualify.
|
|
134
|
+
// NOTES.md has the measured hit rates and the arithmetic, and
|
|
135
|
+
// volumetrics_froxel_containment.spec.js keeps the geometry proven if the balance changes.
|
|
136
|
+
|
|
126
137
|
// estimate volume coverage to avoid aliasing and get a better overlap test
|
|
127
138
|
var volume_coverage = frustum_unit_box_coverage(local_frustum);
|
|
128
|
-
|
|
139
|
+
|
|
129
140
|
if(volume_coverage == 0.0){
|
|
130
141
|
// skip
|
|
131
142
|
continue;
|
|
132
143
|
}
|
|
133
|
-
|
|
144
|
+
|
|
134
145
|
let world_scale = mat4_extract_scale(volume.transform);
|
|
135
|
-
|
|
146
|
+
|
|
136
147
|
let edge_fade_factor = compute_volume_fade_factor(
|
|
137
148
|
local_frustum,
|
|
138
149
|
world_scale,
|
|
139
|
-
volume.fade_distance
|
|
150
|
+
volume.fade_distance
|
|
140
151
|
);
|
|
141
|
-
|
|
152
|
+
|
|
142
153
|
let weight = volume.density * volume_coverage * edge_fade_factor;
|
|
143
154
|
|
|
144
155
|
let volume_scattering = volume.particle_spec.scattering * weight;
|
|
@@ -172,7 +183,7 @@ fn main(
|
|
|
172
183
|
chunk_density_mie,
|
|
173
184
|
chunk_cluster_depth_from_z_slice,
|
|
174
185
|
chunk_frustum_slice,
|
|
175
|
-
|
|
186
|
+
chunk_frustum_transform_plane_matrix,
|
|
176
187
|
chunk_aabb3_intersects_frustum,
|
|
177
188
|
chunk_compute_near_far_from_projection,
|
|
178
189
|
chunk_random_initialize,
|