@woosh/meep-engine 3.11.2 → 3.12.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/README.md +14 -18
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/SelectionVisualizer.js +127 -127
- package/editor/entity_world_bounds.js +27 -27
- package/editor/particles/rebuildParticleEmitter.js +31 -31
- package/editor/process/SymbolicDisplayProcess.js +1 -1
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/prototypeEditorShell.js +156 -156
- package/editor/selection/editor_pick.js +130 -130
- package/editor/selection/screen_rect_frustum.js +119 -119
- package/editor/tools/v2/TransformControls.js +971 -971
- package/package.json +1 -1
- package/src/engine/Engine.d.ts +3 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +726 -726
- package/src/engine/EngineHarness.d.ts +1 -1
- package/src/engine/EngineHarness.js +590 -590
- package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
- package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
- package/src/engine/graphics/ecs/water/Water.js +104 -104
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
- package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationSystem.js +352 -0
- package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem3.js +6 -348
- package/src/engine/graphics3/CameraSystem.d.ts +49 -0
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
- package/src/engine/graphics3/CameraSystem.js +170 -0
- package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
- package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem3.js +6 -166
- package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DebugDrawSystem.js +205 -0
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
- package/src/engine/graphics3/DecalSystem.d.ts +81 -0
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DecalSystem.js +441 -0
- package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
- package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem3.js +6 -437
- package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FogOfWarSystem.js +265 -0
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
- package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
- package/src/engine/graphics3/GraphicsEngine.js +790 -0
- package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine3.js +6 -786
- package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
- package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/HighlightSystem.js +241 -0
- package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem3.js +6 -237
- package/src/engine/graphics3/LightSystem.d.ts +40 -0
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/LightSystem.js +211 -0
- package/src/engine/graphics3/LightSystem3.d.ts +6 -36
- package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem3.js +6 -207
- package/src/engine/graphics3/MeshSystem.d.ts +106 -0
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSystem.js +647 -0
- package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
- package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem3.js +6 -642
- package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
- package/src/engine/graphics3/ParticipatingMedia.js +203 -203
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
- package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
- package/src/engine/graphics3/PathDisplaySystem.js +309 -0
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
- package/src/engine/graphics3/Pickable.d.ts +1 -1
- package/src/engine/graphics3/Pickable.js +65 -65
- package/src/engine/graphics3/PickingQuery.d.ts +1 -1
- package/src/engine/graphics3/PickingQuery.js +48 -48
- package/src/engine/graphics3/PickingSystem.d.ts +67 -0
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
- package/src/engine/graphics3/PickingSystem.js +273 -0
- package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
- package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem3.js +6 -269
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
- package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
- package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TerrainSystem.js +566 -0
- package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem3.js +6 -562
- package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
- package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
- package/src/engine/graphics3/Trail3DSystem.js +221 -0
- package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem3.js +6 -217
- package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
- package/src/engine/graphics3/VolumetricLightMap.js +2 -2
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
- package/src/engine/graphics3/WaterSystem.d.ts +59 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/WaterSystem.js +293 -0
- package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
- package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem3.js +6 -289
- package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
- package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
- package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
- package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
- package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
- 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/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
- 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/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
- package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
- 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 +164 -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/buffer/graph_inspect_gpu_buffer.js +136 -136
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +10 -9
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
- package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
- package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
- package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
- 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/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
- 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_count_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
- 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 +57 -57
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
- 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/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
- 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/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
- 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/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
- package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +350 -292
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +217 -214
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +46 -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/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
- 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.js +1 -1
- package/src/shade/renderer/volumetrics/NOTES.md +238 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -145
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +38 -15
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +14 -2
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +591 -577
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +17 -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 +20 -2
- 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 +53 -3
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +175 -59
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
- package/src/shade/renderer/water/shader_water.js +246 -246
- package/src/shade/vitest.setup.mjs +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +8 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +1325 -1297
- package/src/view/minimap/Minimap.d.ts +2 -2
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +225 -225
- package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
- 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,143 +1,142 @@
|
|
|
1
|
-
import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
-
import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
|
|
4
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
-
import {
|
|
8
|
-
BVH_NODE_BOUNDS_WORD,
|
|
9
|
-
BVH_NODE_CHILD_1_WORD,
|
|
10
|
-
BVH_NODE_CHILD_2_WORD,
|
|
11
|
-
BVH_NODE_STRIDE_WORDS
|
|
12
|
-
} from "./BVH_BUFFER_LAYOUT.js";
|
|
13
|
-
import { BVH_BUILD_SETTINGS_STRUCT, BVH_NO_ROOT_WORD } from "./BVH_BUILD_SETTINGS_STRUCT.js";
|
|
14
|
-
import { chunk_bvh_determine_range } from "./chunk_bvh_determine_range.js";
|
|
15
|
-
import { chunk_bvh_find_split } from "./chunk_bvh_find_split.js";
|
|
16
|
-
|
|
17
|
-
export const BVH_EMIT_WORKGROUP_SIZE = 64;
|
|
18
|
-
|
|
19
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
20
|
-
resources.createGroup()
|
|
21
|
-
.addUniform("settings", BVH_BUILD_SETTINGS_STRUCT)
|
|
22
|
-
// sorted Morton codes, and the leaf index each one came from
|
|
23
|
-
.addStorageBuffer("keys", WebGPUArray.from(u32), false)
|
|
24
|
-
.addStorageBuffer("values", WebGPUArray.from(u32), false)
|
|
25
|
-
.addStorageBuffer("leaf_bounds", WebGPUArray.from(f32), false)
|
|
26
|
-
.addStorageBuffer("leaf_payload", WebGPUArray.from(u32), false)
|
|
27
|
-
// `{root: u32, nodes: array<BVH2_NODE_STRUCT>}`, written flat
|
|
28
|
-
.addStorageBuffer("nodes", WebGPUArray.from(u32), true)
|
|
29
|
-
// parent of every node, indexed the same way the node buffer is
|
|
30
|
-
.addStorageBuffer("parents", WebGPUArray.from(u32), true)
|
|
31
|
-
// which node each leaf ordinal lives at — see the shader's note on why this is written out
|
|
32
|
-
.addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), true);
|
|
33
|
-
|
|
34
|
-
const body = CodeChunk.from(
|
|
35
|
-
//language=WGSL
|
|
36
|
-
`
|
|
37
|
-
const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
|
|
38
|
-
const NODE_BOUNDS = ${BVH_NODE_BOUNDS_WORD}u;
|
|
39
|
-
const NODE_CHILD_1 = ${BVH_NODE_CHILD_1_WORD}u;
|
|
40
|
-
const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
|
|
41
|
-
const NO_ROOT_WORD = ${BVH_NO_ROOT_WORD}u;
|
|
42
|
-
|
|
43
|
-
fn bvh_node_word(node: u32) -> u32 {
|
|
44
|
-
return settings.node_word_offset + node * NODE_STRIDE;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
@compute @workgroup_size(${BVH_EMIT_WORKGROUP_SIZE}, 1, 1)
|
|
48
|
-
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
49
|
-
let i = gid.x;
|
|
50
|
-
let n = settings.element_count;
|
|
51
|
-
|
|
52
|
-
if (i >= n) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Leaf j lives at node (n-1)+j, internal node k at node k. Root is internal node 0 by Karras's
|
|
57
|
-
// construction — it is the node whose range is the whole array.
|
|
58
|
-
let leaf_source = values[i];
|
|
59
|
-
let leaf_node = (n - 1u) + i;
|
|
60
|
-
|
|
61
|
-
let bounds_source = leaf_source * 6u;
|
|
62
|
-
let leaf_word = bvh_node_word(leaf_node);
|
|
63
|
-
|
|
64
|
-
for (var k = 0u; k < 6u; k += 1u) {
|
|
65
|
-
nodes[leaf_word + NODE_BOUNDS + k] = bitcast<u32>(leaf_bounds[bounds_source + k]);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
nodes[leaf_word + NODE_CHILD_1] = BVH_NULL_NODE;
|
|
69
|
-
nodes[leaf_word + NODE_CHILD_2] = leaf_payload[leaf_source];
|
|
70
|
-
|
|
71
|
-
// Where the leaves are is an output of construction, not a convention two kernels have to
|
|
72
|
-
// share. For this layout it is (n-1)+i and the refit could work it out — but a tree that was
|
|
73
|
-
// copied rather than built has its leaves wherever its builder put them, and the refit reads
|
|
74
|
-
// this the same way for both.
|
|
75
|
-
leaf_nodes[i] = leaf_node;
|
|
76
|
-
|
|
77
|
-
// n leaves, n-1 internal nodes — the tail thread has only a leaf to write.
|
|
78
|
-
if (i < n - 1u) {
|
|
79
|
-
let range = bvh_determine_range(&keys, n, i);
|
|
80
|
-
|
|
81
|
-
let first = range.x;
|
|
82
|
-
let last = range.y;
|
|
83
|
-
|
|
84
|
-
let split = bvh_find_split(&keys, n, first, last);
|
|
85
|
-
|
|
86
|
-
// A subrange of one element is a leaf; otherwise it is owned by the internal node whose
|
|
87
|
-
// left boundary sits at that code index.
|
|
88
|
-
let child_1 = select(split, (n - 1u) + split, split == first);
|
|
89
|
-
let child_2 = select(split + 1u, (n - 1u) + split + 1u, split + 1u == last);
|
|
90
|
-
|
|
91
|
-
let node_word = bvh_node_word(i);
|
|
92
|
-
|
|
93
|
-
nodes[node_word + NODE_CHILD_1] = child_1;
|
|
94
|
-
nodes[node_word + NODE_CHILD_2] = child_2;
|
|
95
|
-
|
|
96
|
-
// The refit climbs these; internal-node bounds are its business, not this pass's.
|
|
97
|
-
parents[child_1] = i;
|
|
98
|
-
parents[child_2] = i;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (i == 0u) {
|
|
102
|
-
// Constant by construction, but a tree whose format has a root word has consumers that read
|
|
103
|
-
// it. A BLAS has none — its root is node 0 by convention — and says so with NO_ROOT_WORD.
|
|
104
|
-
if (settings.root_word_offset != NO_ROOT_WORD) {
|
|
105
|
-
nodes[settings.root_word_offset] = 0u;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Where the refit's climb stops.
|
|
109
|
-
parents[0] = BVH_NULL_NODE;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
`, [
|
|
113
|
-
BVH_NULL_NODE_DEFINITION,
|
|
114
|
-
chunk_bvh_determine_range,
|
|
115
|
-
chunk_bvh_find_split,
|
|
116
|
-
]);
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Karras hierarchy emission — pass 3 of {@link graph_bvh_build_lbvh}, and a transliteration of
|
|
120
|
-
* {@link ebvh_build_hierarchy_radix} with the DXR Fallback's index layout: internal node `k` at node
|
|
121
|
-
* `k` (root = 0), leaf `j` at node `(n-1)+j`, `2n-1` nodes in total.
|
|
122
|
-
*
|
|
123
|
-
* Node indices are local to the tree; where node 0 actually lands is `settings.node_word_offset`,
|
|
124
|
-
* so the same kernel writes a TLAS that owns its buffer and a BLAS that is a tenant in a shared
|
|
125
|
-
* arena. Root-at-node-0 is what both conventions want, which is why one kernel can serve them.
|
|
126
|
-
*
|
|
127
|
-
* One dispatch of `n` threads with a tail `if`, which is the canonical LBVH formulation: thread `i`
|
|
128
|
-
* always writes leaf `(n-1)+i`, and threads below `n-1` additionally derive internal node `i`'s
|
|
129
|
-
* range and split and wire its two children.
|
|
130
|
-
*
|
|
131
|
-
* Barrier-free, atomic-free, subgroup-free, and a pure function of the sorted keys — deliberately,
|
|
132
|
-
* because that is what lets the WGSL emulator execute this kernel point-wise in vitest against the
|
|
133
|
-
* in-repo CPU oracle, duplicate-code runs and all. Internal-node bounds are left to
|
|
134
|
-
* {@link shader_bvh_refit}.
|
|
135
|
-
*
|
|
136
|
-
* @type {ComputeShader}
|
|
137
|
-
*/
|
|
138
|
-
export const shader_bvh_emit_hierarchy = ComputeShader.from({
|
|
139
|
-
label: "BVHBuild/EmitHierarchy",
|
|
140
|
-
resources,
|
|
141
|
-
body,
|
|
142
|
-
|
|
143
|
-
});
|
|
1
|
+
import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
|
|
4
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import {
|
|
8
|
+
BVH_NODE_BOUNDS_WORD,
|
|
9
|
+
BVH_NODE_CHILD_1_WORD,
|
|
10
|
+
BVH_NODE_CHILD_2_WORD,
|
|
11
|
+
BVH_NODE_STRIDE_WORDS
|
|
12
|
+
} from "./BVH_BUFFER_LAYOUT.js";
|
|
13
|
+
import { BVH_BUILD_SETTINGS_STRUCT, BVH_NO_ROOT_WORD } from "./BVH_BUILD_SETTINGS_STRUCT.js";
|
|
14
|
+
import { chunk_bvh_determine_range } from "./chunk_bvh_determine_range.js";
|
|
15
|
+
import { chunk_bvh_find_split } from "./chunk_bvh_find_split.js";
|
|
16
|
+
|
|
17
|
+
export const BVH_EMIT_WORKGROUP_SIZE = 64;
|
|
18
|
+
|
|
19
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
20
|
+
resources.createGroup()
|
|
21
|
+
.addUniform("settings", BVH_BUILD_SETTINGS_STRUCT)
|
|
22
|
+
// sorted Morton codes, and the leaf index each one came from
|
|
23
|
+
.addStorageBuffer("keys", WebGPUArray.from(u32), false)
|
|
24
|
+
.addStorageBuffer("values", WebGPUArray.from(u32), false)
|
|
25
|
+
.addStorageBuffer("leaf_bounds", WebGPUArray.from(f32), false)
|
|
26
|
+
.addStorageBuffer("leaf_payload", WebGPUArray.from(u32), false)
|
|
27
|
+
// `{root: u32, nodes: array<BVH2_NODE_STRUCT>}`, written flat
|
|
28
|
+
.addStorageBuffer("nodes", WebGPUArray.from(u32), true)
|
|
29
|
+
// parent of every node, indexed the same way the node buffer is
|
|
30
|
+
.addStorageBuffer("parents", WebGPUArray.from(u32), true)
|
|
31
|
+
// which node each leaf ordinal lives at — see the shader's note on why this is written out
|
|
32
|
+
.addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), true);
|
|
33
|
+
|
|
34
|
+
const body = CodeChunk.from(
|
|
35
|
+
//language=WGSL
|
|
36
|
+
`
|
|
37
|
+
const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
|
|
38
|
+
const NODE_BOUNDS = ${BVH_NODE_BOUNDS_WORD}u;
|
|
39
|
+
const NODE_CHILD_1 = ${BVH_NODE_CHILD_1_WORD}u;
|
|
40
|
+
const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
|
|
41
|
+
const NO_ROOT_WORD = ${BVH_NO_ROOT_WORD}u;
|
|
42
|
+
|
|
43
|
+
fn bvh_node_word(node: u32) -> u32 {
|
|
44
|
+
return settings.node_word_offset + node * NODE_STRIDE;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@compute @workgroup_size(${BVH_EMIT_WORKGROUP_SIZE}, 1, 1)
|
|
48
|
+
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
49
|
+
let i = gid.x;
|
|
50
|
+
let n = settings.element_count;
|
|
51
|
+
|
|
52
|
+
if (i >= n) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Leaf j lives at node (n-1)+j, internal node k at node k. Root is internal node 0 by Karras's
|
|
57
|
+
// construction — it is the node whose range is the whole array.
|
|
58
|
+
let leaf_source = values[i];
|
|
59
|
+
let leaf_node = (n - 1u) + i;
|
|
60
|
+
|
|
61
|
+
let bounds_source = leaf_source * 6u;
|
|
62
|
+
let leaf_word = bvh_node_word(leaf_node);
|
|
63
|
+
|
|
64
|
+
for (var k = 0u; k < 6u; k += 1u) {
|
|
65
|
+
nodes[leaf_word + NODE_BOUNDS + k] = bitcast<u32>(leaf_bounds[bounds_source + k]);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
nodes[leaf_word + NODE_CHILD_1] = BVH_NULL_NODE;
|
|
69
|
+
nodes[leaf_word + NODE_CHILD_2] = leaf_payload[leaf_source];
|
|
70
|
+
|
|
71
|
+
// Where the leaves are is an output of construction, not a convention two kernels have to
|
|
72
|
+
// share. For this layout it is (n-1)+i and the refit could work it out — but a tree that was
|
|
73
|
+
// copied rather than built has its leaves wherever its builder put them, and the refit reads
|
|
74
|
+
// this the same way for both.
|
|
75
|
+
leaf_nodes[i] = leaf_node;
|
|
76
|
+
|
|
77
|
+
// n leaves, n-1 internal nodes — the tail thread has only a leaf to write.
|
|
78
|
+
if (i < n - 1u) {
|
|
79
|
+
let range = bvh_determine_range(&keys, n, i);
|
|
80
|
+
|
|
81
|
+
let first = range.x;
|
|
82
|
+
let last = range.y;
|
|
83
|
+
|
|
84
|
+
let split = bvh_find_split(&keys, n, first, last);
|
|
85
|
+
|
|
86
|
+
// A subrange of one element is a leaf; otherwise it is owned by the internal node whose
|
|
87
|
+
// left boundary sits at that code index.
|
|
88
|
+
let child_1 = select(split, (n - 1u) + split, split == first);
|
|
89
|
+
let child_2 = select(split + 1u, (n - 1u) + split + 1u, split + 1u == last);
|
|
90
|
+
|
|
91
|
+
let node_word = bvh_node_word(i);
|
|
92
|
+
|
|
93
|
+
nodes[node_word + NODE_CHILD_1] = child_1;
|
|
94
|
+
nodes[node_word + NODE_CHILD_2] = child_2;
|
|
95
|
+
|
|
96
|
+
// The refit climbs these; internal-node bounds are its business, not this pass's.
|
|
97
|
+
parents[child_1] = i;
|
|
98
|
+
parents[child_2] = i;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (i == 0u) {
|
|
102
|
+
// Constant by construction, but a tree whose format has a root word has consumers that read
|
|
103
|
+
// it. A BLAS has none — its root is node 0 by convention — and says so with NO_ROOT_WORD.
|
|
104
|
+
if (settings.root_word_offset != NO_ROOT_WORD) {
|
|
105
|
+
nodes[settings.root_word_offset] = 0u;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Where the refit's climb stops.
|
|
109
|
+
parents[0] = BVH_NULL_NODE;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
`, [
|
|
113
|
+
BVH_NULL_NODE_DEFINITION,
|
|
114
|
+
chunk_bvh_determine_range,
|
|
115
|
+
chunk_bvh_find_split,
|
|
116
|
+
]);
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Karras hierarchy emission — pass 3 of {@link graph_bvh_build_lbvh}, and a transliteration of
|
|
120
|
+
* {@link ebvh_build_hierarchy_radix} with the DXR Fallback's index layout: internal node `k` at node
|
|
121
|
+
* `k` (root = 0), leaf `j` at node `(n-1)+j`, `2n-1` nodes in total.
|
|
122
|
+
*
|
|
123
|
+
* Node indices are local to the tree; where node 0 actually lands is `settings.node_word_offset`,
|
|
124
|
+
* so the same kernel writes a TLAS that owns its buffer and a BLAS that is a tenant in a shared
|
|
125
|
+
* arena. Root-at-node-0 is what both conventions want, which is why one kernel can serve them.
|
|
126
|
+
*
|
|
127
|
+
* One dispatch of `n` threads with a tail `if`, which is the canonical LBVH formulation: thread `i`
|
|
128
|
+
* always writes leaf `(n-1)+i`, and threads below `n-1` additionally derive internal node `i`'s
|
|
129
|
+
* range and split and wire its two children.
|
|
130
|
+
*
|
|
131
|
+
* Barrier-free, atomic-free, subgroup-free, and a pure function of the sorted keys — deliberately,
|
|
132
|
+
* because that is what lets the WGSL emulator execute this kernel point-wise in vitest against the
|
|
133
|
+
* in-repo CPU oracle, duplicate-code runs and all. Internal-node bounds are left to
|
|
134
|
+
* {@link shader_bvh_refit}.
|
|
135
|
+
*
|
|
136
|
+
* @type {ComputeShader}
|
|
137
|
+
*/
|
|
138
|
+
export const shader_bvh_emit_hierarchy = ComputeShader.from({
|
|
139
|
+
label: "BVHBuild/EmitHierarchy",
|
|
140
|
+
resources,
|
|
141
|
+
body,
|
|
142
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_bvh_morton.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js"],"names":[],"mappings":"AAQA,2CAA4C;AAwD5C;;;;;;;;;;;;GAYG;AACH,gCAFU,aAAa,
|
|
1
|
+
{"version":3,"file":"shader_bvh_morton.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js"],"names":[],"mappings":"AAQA,2CAA4C;AAwD5C;;;;;;;;;;;;GAYG;AACH,gCAFU,aAAa,CAMpB;8BA7E2B,+BAA+B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_bvh_refit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js"],"names":[],"mappings":"AAcA,0CAA2C;AAqG3C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,+BAFU,aAAa,
|
|
1
|
+
{"version":3,"file":"shader_bvh_refit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js"],"names":[],"mappings":"AAcA,0CAA2C;AAqG3C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,+BAFU,aAAa,CAMpB;8BAvI2B,+BAA+B"}
|
|
@@ -1,141 +1,140 @@
|
|
|
1
|
-
import { atomic_u32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
-
import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
|
|
4
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
-
import {
|
|
8
|
-
BVH_NODE_BOUNDS_WORD,
|
|
9
|
-
BVH_NODE_CHILD_1_WORD,
|
|
10
|
-
BVH_NODE_CHILD_2_WORD,
|
|
11
|
-
BVH_NODE_STRIDE_WORDS
|
|
12
|
-
} from "./BVH_BUFFER_LAYOUT.js";
|
|
13
|
-
import { BVH_BUILD_SETTINGS_STRUCT } from "./BVH_BUILD_SETTINGS_STRUCT.js";
|
|
14
|
-
|
|
15
|
-
export const BVH_REFIT_WORKGROUP_SIZE = 64;
|
|
16
|
-
|
|
17
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
18
|
-
resources.createGroup()
|
|
19
|
-
.addUniform("settings", BVH_BUILD_SETTINGS_STRUCT)
|
|
20
|
-
.addStorageBuffer("parents", WebGPUArray.from(u32), false)
|
|
21
|
-
// node index of each leaf ordinal; the only thing this pass knows about the tree's layout
|
|
22
|
-
.addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), false)
|
|
23
|
-
// one arrival counter per internal node; must be zero at the start of every build
|
|
24
|
-
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
25
|
-
// The same buffer the emission pass wrote as typed nodes, bound flat and atomic here. Every
|
|
26
|
-
// word this pass touches is communicated between workgroups, so every access to it is an
|
|
27
|
-
// atomic one — the strictest formulation WGSL offers, and the discipline the plan's R1 rests on.
|
|
28
|
-
.addStorageBuffer("nodes", WebGPUArray.from(atomic_u32), true);
|
|
29
|
-
|
|
30
|
-
const body = CodeChunk.from(
|
|
31
|
-
//language=WGSL
|
|
32
|
-
`
|
|
33
|
-
const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
|
|
34
|
-
const NODE_BOUNDS = ${BVH_NODE_BOUNDS_WORD}u;
|
|
35
|
-
const NODE_CHILD_1 = ${BVH_NODE_CHILD_1_WORD}u;
|
|
36
|
-
const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
|
|
37
|
-
|
|
38
|
-
fn bvh_node_word(node: u32) -> u32 {
|
|
39
|
-
return settings.node_word_offset + node * NODE_STRIDE;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
fn bvh_parent(node: u32) -> u32 {
|
|
43
|
-
return parents[settings.parents_offset + node];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
fn bvh_read_bounds_low(node_word: u32) -> vec3<f32> {
|
|
47
|
-
return vec3<f32>(
|
|
48
|
-
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS])),
|
|
49
|
-
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 1u])),
|
|
50
|
-
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 2u])),
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
fn bvh_read_bounds_high(node_word: u32) -> vec3<f32> {
|
|
55
|
-
return vec3<f32>(
|
|
56
|
-
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 3u])),
|
|
57
|
-
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 4u])),
|
|
58
|
-
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 5u])),
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@compute @workgroup_size(${BVH_REFIT_WORKGROUP_SIZE}, 1, 1)
|
|
63
|
-
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
64
|
-
let i = gid.x;
|
|
65
|
-
let n = settings.element_count;
|
|
66
|
-
|
|
67
|
-
if (i >= n) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Start above leaf i and climb. Which node that leaf is comes from the tree rather than from a
|
|
72
|
-
// layout this kernel assumes, so a tree that was built and a tree that was copied refit alike.
|
|
73
|
-
var node = bvh_parent(leaf_nodes[settings.leaf_nodes_offset + i]);
|
|
74
|
-
|
|
75
|
-
loop {
|
|
76
|
-
if (node == BVH_NULL_NODE) {
|
|
77
|
-
// climbed past the root
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// An internal node has exactly two children, so exactly two climbs pass through it. The
|
|
82
|
-
// first arrival exits — its sibling's subtree is still being fitted, and it has nothing to
|
|
83
|
-
// wait ON: no spin, no assumption about anyone else's forward progress. The second arrival
|
|
84
|
-
// finds both children written and owns the node from here up.
|
|
85
|
-
let arrivals = atomicAdd(&counters[node], 1u);
|
|
86
|
-
|
|
87
|
-
if (arrivals == 0u) {
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
let node_word = bvh_node_word(node);
|
|
92
|
-
|
|
93
|
-
let child_1 = atomicLoad(&nodes[node_word + NODE_CHILD_1]);
|
|
94
|
-
let child_2 = atomicLoad(&nodes[node_word + NODE_CHILD_2]);
|
|
95
|
-
|
|
96
|
-
let word_1 = bvh_node_word(child_1);
|
|
97
|
-
let word_2 = bvh_node_word(child_2);
|
|
98
|
-
|
|
99
|
-
let low = min(bvh_read_bounds_low(word_1), bvh_read_bounds_low(word_2));
|
|
100
|
-
let high = max(bvh_read_bounds_high(word_1), bvh_read_bounds_high(word_2));
|
|
101
|
-
|
|
102
|
-
atomicStore(&nodes[node_word + NODE_BOUNDS], bitcast<u32>(low.x));
|
|
103
|
-
atomicStore(&nodes[node_word + NODE_BOUNDS + 1u], bitcast<u32>(low.y));
|
|
104
|
-
atomicStore(&nodes[node_word + NODE_BOUNDS + 2u], bitcast<u32>(low.z));
|
|
105
|
-
atomicStore(&nodes[node_word + NODE_BOUNDS + 3u], bitcast<u32>(high.x));
|
|
106
|
-
atomicStore(&nodes[node_word + NODE_BOUNDS + 4u], bitcast<u32>(high.y));
|
|
107
|
-
atomicStore(&nodes[node_word + NODE_BOUNDS + 5u], bitcast<u32>(high.z));
|
|
108
|
-
|
|
109
|
-
node = bvh_parent(node);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
`, [
|
|
113
|
-
BVH_NULL_NODE_DEFINITION,
|
|
114
|
-
]);
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Bottom-up AABB refit — pass 4 of {@link graph_bvh_build_lbvh}, and the last thing a build does.
|
|
118
|
-
*
|
|
119
|
-
* One thread per leaf climbs the `parents` chain from the node `leaf_nodes` says that leaf occupies,
|
|
120
|
-
* taking an arrival counter at each internal node on the way. Nothing waits: the thread that arrives first at a node simply
|
|
121
|
-
* dies, and the one that arrives second is guaranteed both children are complete, because the only
|
|
122
|
-
* way to arrive is to have finished a child. That is the whole synchronisation, and it assumes
|
|
123
|
-
* atomic-word visibility rather than any scheduling fairness — which is why it sits on the accepted
|
|
124
|
-
* side of the engine's line on cross-workgroup communication.
|
|
125
|
-
*
|
|
126
|
-
* The counters must be zero when the pass starts; the graph declares them with a clear range so a
|
|
127
|
-
* pool-reused buffer is cleared and a fresh one arrives zeroed already.
|
|
128
|
-
*
|
|
129
|
-
* The same pass serves refit-only updates (topology frozen, leaf bounds rewritten) — which is what
|
|
130
|
-
* per-frame skinned BLAS needs — so it exists as a standalone dispatch rather than fused into
|
|
131
|
-
* emission. Node indices are local to the tree and `settings.node_word_offset` says where node 0
|
|
132
|
-
* lands, so a BLAS living inside the shared geometry arena refits through this same kernel.
|
|
133
|
-
*
|
|
134
|
-
* @type {ComputeShader}
|
|
135
|
-
*/
|
|
136
|
-
export const shader_bvh_refit = ComputeShader.from({
|
|
137
|
-
label: "BVHBuild/Refit",
|
|
138
|
-
resources,
|
|
139
|
-
body,
|
|
140
|
-
|
|
141
|
-
});
|
|
1
|
+
import { atomic_u32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
|
|
4
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import {
|
|
8
|
+
BVH_NODE_BOUNDS_WORD,
|
|
9
|
+
BVH_NODE_CHILD_1_WORD,
|
|
10
|
+
BVH_NODE_CHILD_2_WORD,
|
|
11
|
+
BVH_NODE_STRIDE_WORDS
|
|
12
|
+
} from "./BVH_BUFFER_LAYOUT.js";
|
|
13
|
+
import { BVH_BUILD_SETTINGS_STRUCT } from "./BVH_BUILD_SETTINGS_STRUCT.js";
|
|
14
|
+
|
|
15
|
+
export const BVH_REFIT_WORKGROUP_SIZE = 64;
|
|
16
|
+
|
|
17
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
18
|
+
resources.createGroup()
|
|
19
|
+
.addUniform("settings", BVH_BUILD_SETTINGS_STRUCT)
|
|
20
|
+
.addStorageBuffer("parents", WebGPUArray.from(u32), false)
|
|
21
|
+
// node index of each leaf ordinal; the only thing this pass knows about the tree's layout
|
|
22
|
+
.addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), false)
|
|
23
|
+
// one arrival counter per internal node; must be zero at the start of every build
|
|
24
|
+
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
25
|
+
// The same buffer the emission pass wrote as typed nodes, bound flat and atomic here. Every
|
|
26
|
+
// word this pass touches is communicated between workgroups, so every access to it is an
|
|
27
|
+
// atomic one — the strictest formulation WGSL offers, and the discipline the plan's R1 rests on.
|
|
28
|
+
.addStorageBuffer("nodes", WebGPUArray.from(atomic_u32), true);
|
|
29
|
+
|
|
30
|
+
const body = CodeChunk.from(
|
|
31
|
+
//language=WGSL
|
|
32
|
+
`
|
|
33
|
+
const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
|
|
34
|
+
const NODE_BOUNDS = ${BVH_NODE_BOUNDS_WORD}u;
|
|
35
|
+
const NODE_CHILD_1 = ${BVH_NODE_CHILD_1_WORD}u;
|
|
36
|
+
const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
|
|
37
|
+
|
|
38
|
+
fn bvh_node_word(node: u32) -> u32 {
|
|
39
|
+
return settings.node_word_offset + node * NODE_STRIDE;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
fn bvh_parent(node: u32) -> u32 {
|
|
43
|
+
return parents[settings.parents_offset + node];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
fn bvh_read_bounds_low(node_word: u32) -> vec3<f32> {
|
|
47
|
+
return vec3<f32>(
|
|
48
|
+
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS])),
|
|
49
|
+
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 1u])),
|
|
50
|
+
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 2u])),
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
fn bvh_read_bounds_high(node_word: u32) -> vec3<f32> {
|
|
55
|
+
return vec3<f32>(
|
|
56
|
+
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 3u])),
|
|
57
|
+
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 4u])),
|
|
58
|
+
bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 5u])),
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@compute @workgroup_size(${BVH_REFIT_WORKGROUP_SIZE}, 1, 1)
|
|
63
|
+
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
64
|
+
let i = gid.x;
|
|
65
|
+
let n = settings.element_count;
|
|
66
|
+
|
|
67
|
+
if (i >= n) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Start above leaf i and climb. Which node that leaf is comes from the tree rather than from a
|
|
72
|
+
// layout this kernel assumes, so a tree that was built and a tree that was copied refit alike.
|
|
73
|
+
var node = bvh_parent(leaf_nodes[settings.leaf_nodes_offset + i]);
|
|
74
|
+
|
|
75
|
+
loop {
|
|
76
|
+
if (node == BVH_NULL_NODE) {
|
|
77
|
+
// climbed past the root
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// An internal node has exactly two children, so exactly two climbs pass through it. The
|
|
82
|
+
// first arrival exits — its sibling's subtree is still being fitted, and it has nothing to
|
|
83
|
+
// wait ON: no spin, no assumption about anyone else's forward progress. The second arrival
|
|
84
|
+
// finds both children written and owns the node from here up.
|
|
85
|
+
let arrivals = atomicAdd(&counters[node], 1u);
|
|
86
|
+
|
|
87
|
+
if (arrivals == 0u) {
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let node_word = bvh_node_word(node);
|
|
92
|
+
|
|
93
|
+
let child_1 = atomicLoad(&nodes[node_word + NODE_CHILD_1]);
|
|
94
|
+
let child_2 = atomicLoad(&nodes[node_word + NODE_CHILD_2]);
|
|
95
|
+
|
|
96
|
+
let word_1 = bvh_node_word(child_1);
|
|
97
|
+
let word_2 = bvh_node_word(child_2);
|
|
98
|
+
|
|
99
|
+
let low = min(bvh_read_bounds_low(word_1), bvh_read_bounds_low(word_2));
|
|
100
|
+
let high = max(bvh_read_bounds_high(word_1), bvh_read_bounds_high(word_2));
|
|
101
|
+
|
|
102
|
+
atomicStore(&nodes[node_word + NODE_BOUNDS], bitcast<u32>(low.x));
|
|
103
|
+
atomicStore(&nodes[node_word + NODE_BOUNDS + 1u], bitcast<u32>(low.y));
|
|
104
|
+
atomicStore(&nodes[node_word + NODE_BOUNDS + 2u], bitcast<u32>(low.z));
|
|
105
|
+
atomicStore(&nodes[node_word + NODE_BOUNDS + 3u], bitcast<u32>(high.x));
|
|
106
|
+
atomicStore(&nodes[node_word + NODE_BOUNDS + 4u], bitcast<u32>(high.y));
|
|
107
|
+
atomicStore(&nodes[node_word + NODE_BOUNDS + 5u], bitcast<u32>(high.z));
|
|
108
|
+
|
|
109
|
+
node = bvh_parent(node);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
`, [
|
|
113
|
+
BVH_NULL_NODE_DEFINITION,
|
|
114
|
+
]);
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Bottom-up AABB refit — pass 4 of {@link graph_bvh_build_lbvh}, and the last thing a build does.
|
|
118
|
+
*
|
|
119
|
+
* One thread per leaf climbs the `parents` chain from the node `leaf_nodes` says that leaf occupies,
|
|
120
|
+
* taking an arrival counter at each internal node on the way. Nothing waits: the thread that arrives first at a node simply
|
|
121
|
+
* dies, and the one that arrives second is guaranteed both children are complete, because the only
|
|
122
|
+
* way to arrive is to have finished a child. That is the whole synchronisation, and it assumes
|
|
123
|
+
* atomic-word visibility rather than any scheduling fairness — which is why it sits on the accepted
|
|
124
|
+
* side of the engine's line on cross-workgroup communication.
|
|
125
|
+
*
|
|
126
|
+
* The counters must be zero when the pass starts; the graph declares them with a clear range so a
|
|
127
|
+
* pool-reused buffer is cleared and a fresh one arrives zeroed already.
|
|
128
|
+
*
|
|
129
|
+
* The same pass serves refit-only updates (topology frozen, leaf bounds rewritten) — which is what
|
|
130
|
+
* per-frame skinned BLAS needs — so it exists as a standalone dispatch rather than fused into
|
|
131
|
+
* emission. Node indices are local to the tree and `settings.node_word_offset` says where node 0
|
|
132
|
+
* lands, so a BLAS living inside the shared geometry arena refits through this same kernel.
|
|
133
|
+
*
|
|
134
|
+
* @type {ComputeShader}
|
|
135
|
+
*/
|
|
136
|
+
export const shader_bvh_refit = ComputeShader.from({
|
|
137
|
+
label: "BVHBuild/Refit",
|
|
138
|
+
resources,
|
|
139
|
+
body,
|
|
140
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_radix_sort_histogram.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js"],"names":[],"mappings":"AAkEA;;;;;;;;;;;;GAYG;AACH,0CAFU,aAAa,
|
|
1
|
+
{"version":3,"file":"shader_radix_sort_histogram.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js"],"names":[],"mappings":"AAkEA;;;;;;;;;;;;GAYG;AACH,0CAFU,aAAa,CAMpB;8BAhF2B,+BAA+B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_radix_sort_scatter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js"],"names":[],"mappings":"AA8KA;;;;;;;;;;;GAWG;AACH,wCAFU,aAAa,
|
|
1
|
+
{"version":3,"file":"shader_radix_sort_scatter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js"],"names":[],"mappings":"AA8KA;;;;;;;;;;;GAWG;AACH,wCAFU,aAAa,CAMpB;8BA1L2B,+BAA+B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_cull_lights.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/cluster/cull/graph_cull_lights.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_cull_lights.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/cluster/cull/graph_cull_lights.js"],"names":[],"mappings":"AAqKA;;;;;;GAMG;AACH,uFAkBC"}
|