@woosh/meep-engine 3.12.0 → 3.13.1

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.
Files changed (301) hide show
  1. package/package.json +1 -1
  2. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  3. package/src/core/geom/3d/shape/ConvexHullShape3D.js +41 -25
  4. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  5. package/src/core/geom/3d/shape/PosedShape3D.js +7 -2
  6. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  7. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  8. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  9. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  10. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  11. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  12. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  13. package/src/shade/RENDERER_CONTRACT.md +2 -1
  14. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  15. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  16. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  17. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +755 -0
  18. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  19. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  20. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  21. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  22. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  23. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  24. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  25. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  26. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  27. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  28. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  29. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  30. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  31. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  32. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  33. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  34. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  35. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  36. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  37. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
  38. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  39. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
  40. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  41. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
  42. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
  43. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
  44. package/src/shade/renderer/Renderer.d.ts +0 -6
  45. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  46. package/src/shade/renderer/Renderer.js +0 -29
  47. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  48. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  49. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  50. package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
  51. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  52. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  53. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  54. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
  55. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  56. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
  57. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  58. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  59. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
  60. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  61. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
  62. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  63. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
  64. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  65. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
  66. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  67. package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
  68. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  69. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  70. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  71. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
  72. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  73. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
  74. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  75. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  76. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  77. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  78. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  79. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  80. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  81. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  82. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  83. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
  85. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
  87. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  88. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
  89. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  90. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  91. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  92. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  93. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  94. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  96. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  98. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  100. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  101. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  102. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
  104. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  106. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  108. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  109. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  110. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  111. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  112. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
  113. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  114. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  115. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  116. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
  117. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  118. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
  119. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  120. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
  121. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  122. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  123. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  124. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  125. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  126. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  127. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
  128. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  129. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
  130. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  132. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  133. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  134. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  135. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  136. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  137. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  138. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  139. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  140. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  141. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  142. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
  143. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  144. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  145. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  146. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  147. package/src/shade/renderer/particles/graph_particles.js +5 -3
  148. package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
  149. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
  151. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
  153. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
  155. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  156. package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
  157. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  158. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  159. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  160. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  161. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  162. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  163. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  164. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  165. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  166. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  167. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
  168. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  169. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  170. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  171. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  172. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  173. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  174. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  175. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  176. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  177. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  178. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  179. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
  180. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  181. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  182. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  183. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  184. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  185. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  186. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  187. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
  188. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  189. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
  190. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  191. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  192. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  193. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  194. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  195. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  196. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  197. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  198. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  199. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  200. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  201. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  202. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  203. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  204. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
  205. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  206. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  207. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  209. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  210. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  211. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  212. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  213. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  214. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  215. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  216. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  217. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  218. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  219. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  220. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  222. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
  224. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  225. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
  226. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  227. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
  228. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  229. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  230. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  231. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  232. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  233. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  234. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  235. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  236. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  237. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  238. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
  239. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  240. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
  241. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  242. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
  243. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  244. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
  245. package/src/shade/renderer/scene/Mesh.d.ts.map +1 -1
  246. package/src/shade/renderer/scene/Mesh.js +4 -6
  247. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  248. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
  249. package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
  250. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  251. package/src/shade/renderer/shader/ComputeShader.js +14 -17
  252. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  253. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  254. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  255. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  256. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  257. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +16 -7
  258. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1342 -1326
  260. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +13 -0
  261. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  262. package/src/shade/renderer/shadow/map/Shadowmap.js +14 -0
  263. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts +79 -0
  264. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -0
  265. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +196 -0
  266. package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts +91 -0
  267. package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts.map +1 -0
  268. package/src/shade/renderer/shadow/map/ShadowmapRegistry.js +156 -0
  269. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  270. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  271. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  272. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  273. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  274. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  275. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  276. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  277. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
  278. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  279. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  280. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  281. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
  282. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  283. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  284. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  285. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  286. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  287. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  288. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  289. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  290. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  291. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +233 -231
  292. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  293. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  294. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  295. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  296. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  297. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  298. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  299. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  300. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  301. package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Pure JavaScript game engine. Fully featured and production ready.",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.12.0",
9
+ "version": "3.13.1",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexHullShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/ConvexHullShape3D.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IA8CI;;;;;;;OAOG;IACH,sBAJW,YAAY,WACZ,WAAW,GACT,iBAAiB,CAQ7B;IA1DD;;;;OAIG;IACH,UAFU,YAAY,CAES;IAE/B;;;;OAIG;IACH,SAFU,WAAW,CAEQ;IAE7B;;;;;;OAMG;IACH,cAFU,WAAW,CAEa;IAElC,0BAA0B;IAC1B,YADW,WAAW,CACU;IAEhC;;;;;;OAMG;IACH,iBAA+B;IAE/B,oCAAoC;IACpC,eAA6B;IAE7B,8BAA8B;IAC9B,iBAAa;IAEb,8BAA8B;IAC9B,uBAAmB;IAkBnB;;;OAGG;IACH,kBA8EC;IAKD,wCAIC;IAED;;;;;OAKG;IACH,qGAwCC;IAED;;;;;;;;OAQG;IACH,yCAEC;IAED;;;;OAIG;IACH,wCAEC;IAED,qCAkBC;IAED;;;OAGG;IACH,oCAgBC;IAED;;;OAGG;IACH,6CAiBC;IAED,mEAEC;IAED,4DAoBC;IAGD;;;OAGG;IACH,cAHW,iBAAiB,GACf,OAAO,CAanB;IAcL;;;;OAIG;IACH,8BAFU,OAAO,CAE8B;CAP9C;gCAvX+B,sBAAsB"}
1
+ {"version":3,"file":"ConvexHullShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/ConvexHullShape3D.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IA8CI;;;;;;;OAOG;IACH,sBAJW,YAAY,WACZ,WAAW,GACT,iBAAiB,CAQ7B;IA1DD;;;;OAIG;IACH,UAFU,YAAY,CAES;IAE/B;;;;OAIG;IACH,SAFU,WAAW,CAEQ;IAE7B;;;;;;OAMG;IACH,cAFU,WAAW,CAEa;IAElC,0BAA0B;IAC1B,YADW,WAAW,CACU;IAEhC;;;;;;OAMG;IACH,iBAA+B;IAE/B,oCAAoC;IACpC,eAA6B;IAE7B,8BAA8B;IAC9B,iBAAa;IAEb,8BAA8B;IAC9B,uBAAmB;IAkBnB;;;OAGG;IACH,kBAkFC;IAUD,wCAQC;IAED;;;;;OAKG;IACH,qGAwCC;IAED;;;;;;;;OAQG;IACH,yCAEC;IAED;;;;OAIG;IACH,wCAEC;IAED,qCAkBC;IAED;;;OAGG;IACH,oCAgBC;IAED;;;OAGG;IACH,6CAiBC;IAED,mEAEC;IAED,4DAwBC;IAGD;;;OAGG;IACH,cAHW,iBAAiB,GACf,OAAO,CAanB;IAcL;;;;OAIG;IACH,8BAFU,OAAO,CAE8B;CAP9C;gCAtY+B,sBAAsB"}
@@ -1,10 +1,10 @@
1
1
  import { hash_mix2 } from "../../../math/hash/hash_mix2.js";
2
2
  import { computeHashFloat } from "../../../primitives/numbers/computeHashFloat.js";
3
+ import { aabb3_from_v3_array } from "../aabb/aabb3_from_v3_array.js";
4
+ import { convex_polyhedron3_raycast } from "../polyhedron/convex_polyhedron3_raycast.js";
3
5
  import { tri3_closest_point } from "../triangle/tri3_closest_point.js";
4
6
  import { AbstractShape3D } from "./AbstractShape3D.js";
5
7
  import { compute_signed_distance_gradient_by_sampling } from "./util/compute_signed_distance_gradient_by_sampling.js";
6
- import { aabb3_from_v3_array } from "../aabb/aabb3_from_v3_array.js";
7
- import { convex_polyhedron3_raycast } from "../polyhedron/convex_polyhedron3_raycast.js";
8
8
 
9
9
  /**
10
10
  * Convex polyhedron collider.
@@ -161,9 +161,13 @@ export class ConvexHullShape3D extends AbstractShape3D {
161
161
  // Σ a·n === Σ (a − o)·n over a closed surface, since Σ n = 0.
162
162
  vol6 += (ax - ox) * nx + (ay - oy) * ny + (az - oz) * nz;
163
163
 
164
- nx /= len; ny /= len; nz /= len;
164
+ nx /= len;
165
+ ny /= len;
166
+ nz /= len;
165
167
  const o = f * 4;
166
- planes[o] = nx; planes[o + 1] = ny; planes[o + 2] = nz;
168
+ planes[o] = nx;
169
+ planes[o + 1] = ny;
170
+ planes[o + 2] = nz;
167
171
  planes[o + 3] = nx * ax + ny * ay + nz * az;
168
172
  }
169
173
  this.__planes = planes;
@@ -178,13 +182,22 @@ export class ConvexHullShape3D extends AbstractShape3D {
178
182
  this.face_loops = idx;
179
183
  }
180
184
 
181
- get volume() { return this.__volume; }
182
- get surface_area() { return this.__surface_area; }
185
+ get volume() {
186
+ return this.__volume;
187
+ }
188
+
189
+ get surface_area() {
190
+ return this.__surface_area;
191
+ }
183
192
 
184
193
  compute_bounding_box(result) {
185
194
  const b = this.__bbox;
186
- result[0] = b[0]; result[1] = b[1]; result[2] = b[2];
187
- result[3] = b[3]; result[4] = b[4]; result[5] = b[5];
195
+ result[0] = b[0];
196
+ result[1] = b[1];
197
+ result[2] = b[2];
198
+ result[3] = b[3];
199
+ result[4] = b[4];
200
+ result[5] = b[5];
188
201
  }
189
202
 
190
203
  /**
@@ -201,9 +214,9 @@ export class ConvexHullShape3D extends AbstractShape3D {
201
214
  ) {
202
215
 
203
216
  const v = this.vertices;
204
- const vc = v.length / 3;
217
+ const vertex_array_length = v.length;
205
218
 
206
- if (vc === 0) {
219
+ if (vertex_array_length === 0) {
207
220
 
208
221
  result[result_offset] = 0;
209
222
  result[result_offset + 1] = 0;
@@ -212,27 +225,27 @@ export class ConvexHullShape3D extends AbstractShape3D {
212
225
  return;
213
226
  }
214
227
 
215
- let best = -Infinity;
216
- let bi = 0;
228
+ let best_distance = -Infinity;
229
+ let best_offset = 0;
217
230
 
218
- for (let i = 0; i < vc; i++) {
231
+ for (let offset = 0; offset < vertex_array_length; offset += 3) {
219
232
 
220
- const v_x = v[i * 3];
221
- const v_y = v[i * 3 + 1];
222
- const v_z = v[i * 3 + 2];
233
+ const v_x = v[offset];
234
+ const v_y = v[offset + 1];
235
+ const v_z = v[offset + 2];
223
236
 
224
237
  const d = direction_x * v_x + direction_y * v_y + direction_z * v_z;
225
238
 
226
- if (d > best) {
227
- best = d;
228
- bi = i;
239
+ if (d > best_distance) {
240
+ best_distance = d;
241
+ best_offset = offset;
229
242
  }
230
243
 
231
244
  }
232
245
 
233
- result[result_offset] = v[bi * 3];
234
- result[result_offset + 1] = v[bi * 3 + 1];
235
- result[result_offset + 2] = v[bi * 3 + 2];
246
+ result[result_offset] = v[best_offset];
247
+ result[result_offset + 1] = v[best_offset + 1];
248
+ result[result_offset + 2] = v[best_offset + 2];
236
249
  }
237
250
 
238
251
  /**
@@ -342,10 +355,14 @@ export class ConvexHullShape3D extends AbstractShape3D {
342
355
  const d2 = tri3_closest_point(scratch_closest, 0, px, py, pz, ax, ay, az, bx, by, bz, cx, cy, cz);
343
356
  if (d2 < best_d2) {
344
357
  best_d2 = d2;
345
- bx_ = scratch_closest[0]; by_ = scratch_closest[1]; bz_ = scratch_closest[2];
358
+ bx_ = scratch_closest[0];
359
+ by_ = scratch_closest[1];
360
+ bz_ = scratch_closest[2];
346
361
  }
347
362
  }
348
- result[0] = bx_; result[1] = by_; result[2] = bz_;
363
+ result[0] = bx_;
364
+ result[1] = by_;
365
+ result[2] = bz_;
349
366
  }
350
367
 
351
368
 
@@ -387,4 +404,3 @@ ConvexHullShape3D.prototype.isConvexHullShape3D = true;
387
404
 
388
405
  // closest-point-on-triangle output for the surface-scan query helpers
389
406
  const scratch_closest = new Float64Array(3);
390
- const scratch_point = new Float64Array(3);
@@ -1 +1 @@
1
- {"version":3,"file":"PosedShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/PosedShape3D.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAEI,mCAAmC;IACnC,OADW,eAAe,GAAC,IAAI,CAClB;IAEb,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IAEP;;;;;;;OAOG;IACH,aAJW,eAAe,YACf,UAAQ;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,YACpC,aAAW;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAM1D;IAoED,wCASC;IA4BD;;;;;;;OAOG;IACH,gCAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,GAChC,MAAM,CAKlB;IAED;;;;;OAKG;IACH,sBAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,GAChC,OAAO,CAKnB;IAGL;;;;OAIG;IACH,yBAFU,OAAO,CAEoB;;CAPpC;gCAlL+B,sBAAsB"}
1
+ {"version":3,"file":"PosedShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/PosedShape3D.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAEI,mCAAmC;IACnC,OADW,eAAe,GAAC,IAAI,CAClB;IAEb,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IAEP;;;;;;;OAOG;IACH,aAJW,eAAe,YACf,UAAQ;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,YACpC,aAAW;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAM1D;IAyED,wCASC;IA4BD;;;;;;;OAOG;IACH,gCAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,GAChC,MAAM,CAKlB;IAED;;;;;OAKG;IACH,sBAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,GAChC,OAAO,CAKnB;IAGL;;;;OAIG;IACH,yBAFU,OAAO,CAEoB;;CAPpC;gCAvL+B,sBAAsB"}
@@ -86,7 +86,10 @@ export class PosedShape3D extends AbstractShape3D {
86
86
  // inline here at the cost of ~7 extra lines per direction.
87
87
  // See core/geom/vec3/v3_quat3_apply.js for the canonical form
88
88
  // — this is a literal expansion of it.
89
- const qx = this.qx, qy = this.qy, qz = this.qz, qw = this.qw;
89
+ const qx = this.qx;
90
+ const qy = this.qy;
91
+ const qz = this.qz;
92
+ const qw = this.qw;
90
93
 
91
94
  // Rotate world direction into body frame via the conjugate
92
95
  // quaternion: v_local = q* · v_world · q. Conjugate xyz are
@@ -105,7 +108,9 @@ export class PosedShape3D extends AbstractShape3D {
105
108
 
106
109
  // Rotate the body-local support point back to world: v_world =
107
110
  // q · v_local · q*.
108
- const lsx = scratch_local[0], lsy = scratch_local[1], lsz = scratch_local[2];
111
+ const lsx = scratch_local[0];
112
+ const lsy = scratch_local[1];
113
+ const lsz = scratch_local[2];
109
114
 
110
115
  const tsx = qw * lsx + qy * lsz - qz * lsy;
111
116
  const tsy = qw * lsy + qz * lsx - qx * lsz;
@@ -10,7 +10,7 @@ import { TextureFilterType } from "../../../shade/renderer/texture/TextureFilter
10
10
  import { SAMPLER_LINEAR_UPSCALE } from "../../../shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js";
11
11
  import { graph_build_decal_clusters } from "./graph_build_decal_clusters.js";
12
12
  import { DECAL_RECORD_WORD_COUNT } from "./DECAL_GPU_RECORD.js";
13
- import { DECAL_COMPOSITE_SETTINGS, shader_decal_composite } from "./shader_decal_composite.js";
13
+ import { shader_decal_composite } from "./shader_decal_composite.js";
14
14
  import { build_light_cluster_parameters } from "../../../shade/renderer/light/cluster/build_light_cluster_parameters.js";
15
15
  import { DECAL_CLUSTER_RESOLUTION_Z } from "./DECAL_CLUSTER.js";
16
16
 
@@ -190,12 +190,12 @@ export class GPUDecalRenderer {
190
190
  const encoder = context.encoder;
191
191
  const graphics = context.graphics;
192
192
 
193
- const settings = encoder.allocateTransientValueBuffer(DECAL_COMPOSITE_SETTINGS, {
193
+ const settings = {
194
194
  cluster_params,
195
195
  screen_resolution: resolution,
196
196
  distance_min: camera.camera.near,
197
197
  distance_max: camera.camera.far,
198
- });
198
+ };
199
199
 
200
200
  const sampler = graphics.samplers.obtain(SAMPLER_LINEAR_UPSCALE);
201
201
 
@@ -1 +1 @@
1
- {"version":3,"file":"shader_decal_composite.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_decal_composite.js"],"names":[],"mappings":"AA8DA,oDAKG;AAmSH;;;;;;;;;;;;GAYG;AACH,qCAFU,WAAW,CAclB;6BApV0B,qDAAqD;4BAPtD,+CAA+C"}
1
+ {"version":3,"file":"shader_decal_composite.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_decal_composite.js"],"names":[],"mappings":"AA8DA,oDAKG;AAqSH;;;;;;;;;;;;GAYG;AACH,qCAFU,WAAW,CAclB;6BAtV0B,qDAAqD;4BAPtD,+CAA+C"}
@@ -69,9 +69,11 @@ export const DECAL_COMPOSITE_SETTINGS = WebGPUStruct.from({
69
69
 
70
70
  const resources = new ShaderResourceSetDescriptor();
71
71
 
72
+ // per-draw, 32 bytes, read-only: immediate data rather than a uniform buffer. camera stays bound.
73
+ resources.setImmediate("settings", DECAL_COMPOSITE_SETTINGS);
74
+
72
75
  resources.createGroup()
73
- .addUniform("camera", CAMERA_UNIFORM_STRUCT)
74
- .addUniform("settings", DECAL_COMPOSITE_SETTINGS);
76
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT);
75
77
 
76
78
  /*
77
79
  The two integer targets are declared as such, exactly as `shader_deferred_main` declares the same
@@ -1 +1 @@
1
- {"version":3,"file":"GPUHighlightRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/highlight/GPUHighlightRenderer.js"],"names":[],"mappings":"AAkBA;;;;;;GAMG;AACH;IAWI;;;;;;;;;OASG;IACH;QAN8B,KAAK;QACN,KAAK,EAAvB,WAAW;QACE,UAAU,EAAvB,MAAM;QACO,SAAS,EAAtB,MAAM;QACJ,MAAM,CA+BlB;IAmED,gBAOC;;CACJ"}
1
+ {"version":3,"file":"GPUHighlightRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/highlight/GPUHighlightRenderer.js"],"names":[],"mappings":"AAiBA;;;;;;GAMG;AACH;IAWI;;;;;;;;;OASG;IACH;QAN8B,KAAK;QACN,KAAK,EAAvB,WAAW;QACE,UAAU,EAAvB,MAAM;QACO,SAAS,EAAtB,MAAM;QACJ,MAAM,CA+BlB;IAmED,gBAOC;;CACJ"}
@@ -3,7 +3,6 @@ import { round_up } from "../../../core/math/round_up.js";
3
3
  import { SceneColor } from "../../../shade/renderer/extension/SceneColor.js";
4
4
  import { ViewTextures } from "../../../shade/renderer/extension/ViewTextures.js";
5
5
  import {
6
- HIGHLIGHT_OUTLINE_SETTINGS,
7
6
  shader_highlight_outline
8
7
  } from "./shader_highlight_outline.js";
9
8
 
@@ -88,11 +87,11 @@ export class GPUHighlightRenderer {
88
87
 
89
88
  const color = resources.get(data.color);
90
89
 
91
- const settings = encoder.allocateTransientValueBuffer(HIGHLIGHT_OUTLINE_SETTINGS, {
90
+ const settings = {
92
91
  screen_resolution: resolution,
93
92
  table_size,
94
93
  thickness
95
- });
94
+ };
96
95
 
97
96
  shader_highlight_outline.draw({
98
97
  encoder,
@@ -1,150 +1,150 @@
1
- import { BlendState } from "../../../shade/descriptor/blend/BlendState.js";
2
- import { CodeChunk } from "../../../shade/renderer/shader/compiler/CodeChunk.js";
3
- import { ImageShader } from "../../../shade/renderer/shader/ImageShader.js";
4
- import {
5
- ShaderResourceSetDescriptor
6
- } from "../../../shade/renderer/shader/resource/ShaderResourceSetDescriptor.js";
7
- import { ShaderDescriptor } from "../../../shade/renderer/shader/ShaderDescriptor.js";
8
- import { f32, u32, vec2u } from "../../../shade/renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
9
- import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js";
10
- import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
11
- import { chunk_highlight_lookup } from "./chunk_highlight_lookup.js";
12
-
13
- export const HIGHLIGHT_OUTLINE_SETTINGS = WebGPUStruct.from({
14
- screen_resolution: vec2u,
15
-
16
- /**
17
- * How many rows the lookup table has, which is one past the highest mesh row that was
18
- * highlighted when it was packed.
19
- */
20
- table_size: u32,
21
-
22
- /**
23
- * Outline width in pixels.
24
- */
25
- thickness: f32,
26
- });
27
-
28
- const resources = new ShaderResourceSetDescriptor();
29
-
30
- resources.createGroup()
31
- .addUniform("settings", HIGHLIGHT_OUTLINE_SETTINGS);
32
-
33
- resources.createGroup()
34
- .addTexture("viz_mesh", "uint");
35
-
36
- resources.createGroup()
37
- .addStorageBuffer("highlight_table", WebGPUArray.u32);
38
-
39
- const body = CodeChunk.from(
40
- //language=WGSL
41
- `
42
- @fragment
43
- fn main(
44
- @builtin(position) coord : vec4<f32>,
45
- ) -> @location(0) vec4<f32> {
46
-
47
- let here = vec2<i32>(coord.xy);
48
-
49
- let resolution = vec2<i32>(settings.screen_resolution);
50
-
51
- let table_size = settings.table_size;
52
-
53
- let own = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, here, 0).r, table_size);
54
-
55
- /*
56
- The outline sits **outside** the silhouette. A pixel that is itself the highlighted mesh is left
57
- alone — a highlight marks a unit without painting over it, which is the whole reason the legacy
58
- path dilated its mask outwards before compositing.
59
- */
60
- if (own.a > 0.0) {
61
- discard;
62
- }
63
-
64
- let thickness = settings.thickness;
65
-
66
- let radius = i32(ceil(thickness));
67
-
68
- /*
69
- The strongest highlight within reach, by coverage. Nearest would need a second comparison and
70
- would look the same: two highlights close enough to overlap an outline this thin are the same
71
- size on screen, and the brighter one is the one the eye follows.
72
- */
73
- var found = vec4<f32>(0.0);
74
-
75
- for (var dy = -radius; dy <= radius; dy++) {
76
- for (var dx = -radius; dx <= radius; dx++) {
77
- let offset = vec2<f32>(f32(dx), f32(dy));
78
-
79
- // a disc rather than a square, so the outline is the same width in every direction
80
- if (dot(offset, offset) > thickness * thickness) {
81
- continue;
82
- }
83
-
84
- let at = here + vec2<i32>(dx, dy);
85
-
86
- if (any(at < vec2<i32>(0)) || any(at >= resolution)) {
87
- continue;
88
- }
89
-
90
- let neighbour = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, at, 0).r, table_size);
91
-
92
- if (neighbour.a > found.a) {
93
- found = neighbour;
94
- }
95
- }
96
- }
97
-
98
- if (found.a <= 0.0) {
99
- discard;
100
- }
101
-
102
- // premultiplied, which is how the table stores it and how the blend state consumes it
103
- return found;
104
- }
105
- `, [
106
- chunk_highlight_lookup
107
- ]
108
- );
109
-
110
- /**
111
- * Paints an outline around every highlighted mesh, straight off the visibility buffer.
112
- *
113
- * **There is no second geometry pass, no dilation and no blur.** The renderer this replaces drew
114
- * every highlighted object again into an id target of its own, ping-ponged two render targets to
115
- * dilate the mask, blurred it, and decoded ids back to colours to composite — five render targets, a
116
- * duplicated scene graph and its own skinned material variant. Shade already writes a per-pixel mesh
117
- * id while drawing the frame, so an outline is a neighbourhood test on an integer texture and
118
- * nothing more.
119
- *
120
- * **What that costs is the contract change in D27**: the visibility buffer knows only what was
121
- * rasterized, so a unit standing behind a building is outlined where it can be seen and nowhere
122
- * else. The old mask was drawn with the depth buffer cleared and showed through everything.
123
- *
124
- * @type {ImageShader}
125
- */
126
- export const shader_highlight_outline = ImageShader.from({
127
- descriptor: ShaderDescriptor.from({
128
- label: "Highlight outline",
129
- resources,
130
- body
131
- }),
132
- targets: [
133
- {
134
- label: "outlined",
135
- format: "rgba16float",
136
- blend: BlendState.from({
137
- color: {
138
- operation: "add",
139
- srcFactor: "one",
140
- dstFactor: "one-minus-src-alpha"
141
- },
142
- alpha: {
143
- operation: "add",
144
- srcFactor: "one",
145
- dstFactor: "one-minus-src-alpha"
146
- }
147
- })
148
- }
149
- ]
150
- });
1
+ import { BlendState } from "../../../shade/descriptor/blend/BlendState.js";
2
+ import { CodeChunk } from "../../../shade/renderer/shader/compiler/CodeChunk.js";
3
+ import { ImageShader } from "../../../shade/renderer/shader/ImageShader.js";
4
+ import {
5
+ ShaderResourceSetDescriptor
6
+ } from "../../../shade/renderer/shader/resource/ShaderResourceSetDescriptor.js";
7
+ import { ShaderDescriptor } from "../../../shade/renderer/shader/ShaderDescriptor.js";
8
+ import { f32, u32, vec2u } from "../../../shade/renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
9
+ import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js";
10
+ import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
11
+ import { chunk_highlight_lookup } from "./chunk_highlight_lookup.js";
12
+
13
+ export const HIGHLIGHT_OUTLINE_SETTINGS = WebGPUStruct.from({
14
+ screen_resolution: vec2u,
15
+
16
+ /**
17
+ * How many rows the lookup table has, which is one past the highest mesh row that was
18
+ * highlighted when it was packed.
19
+ */
20
+ table_size: u32,
21
+
22
+ /**
23
+ * Outline width in pixels.
24
+ */
25
+ thickness: f32,
26
+ });
27
+
28
+ const resources = new ShaderResourceSetDescriptor();
29
+
30
+ // per-draw, 16 bytes, read-only: immediate data rather than a uniform buffer
31
+ resources.setImmediate("settings", HIGHLIGHT_OUTLINE_SETTINGS);
32
+
33
+ resources.createGroup()
34
+ .addTexture("viz_mesh", "uint");
35
+
36
+ resources.createGroup()
37
+ .addStorageBuffer("highlight_table", WebGPUArray.u32);
38
+
39
+ const body = CodeChunk.from(
40
+ //language=WGSL
41
+ `
42
+ @fragment
43
+ fn main(
44
+ @builtin(position) coord : vec4<f32>,
45
+ ) -> @location(0) vec4<f32> {
46
+
47
+ let here = vec2<i32>(coord.xy);
48
+
49
+ let resolution = vec2<i32>(settings.screen_resolution);
50
+
51
+ let table_size = settings.table_size;
52
+
53
+ let own = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, here, 0).r, table_size);
54
+
55
+ /*
56
+ The outline sits **outside** the silhouette. A pixel that is itself the highlighted mesh is left
57
+ alone — a highlight marks a unit without painting over it, which is the whole reason the legacy
58
+ path dilated its mask outwards before compositing.
59
+ */
60
+ if (own.a > 0.0) {
61
+ discard;
62
+ }
63
+
64
+ let thickness = settings.thickness;
65
+
66
+ let radius = i32(ceil(thickness));
67
+
68
+ /*
69
+ The strongest highlight within reach, by coverage. Nearest would need a second comparison and
70
+ would look the same: two highlights close enough to overlap an outline this thin are the same
71
+ size on screen, and the brighter one is the one the eye follows.
72
+ */
73
+ var found = vec4<f32>(0.0);
74
+
75
+ for (var dy = -radius; dy <= radius; dy++) {
76
+ for (var dx = -radius; dx <= radius; dx++) {
77
+ let offset = vec2<f32>(f32(dx), f32(dy));
78
+
79
+ // a disc rather than a square, so the outline is the same width in every direction
80
+ if (dot(offset, offset) > thickness * thickness) {
81
+ continue;
82
+ }
83
+
84
+ let at = here + vec2<i32>(dx, dy);
85
+
86
+ if (any(at < vec2<i32>(0)) || any(at >= resolution)) {
87
+ continue;
88
+ }
89
+
90
+ let neighbour = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, at, 0).r, table_size);
91
+
92
+ if (neighbour.a > found.a) {
93
+ found = neighbour;
94
+ }
95
+ }
96
+ }
97
+
98
+ if (found.a <= 0.0) {
99
+ discard;
100
+ }
101
+
102
+ // premultiplied, which is how the table stores it and how the blend state consumes it
103
+ return found;
104
+ }
105
+ `, [
106
+ chunk_highlight_lookup
107
+ ]
108
+ );
109
+
110
+ /**
111
+ * Paints an outline around every highlighted mesh, straight off the visibility buffer.
112
+ *
113
+ * **There is no second geometry pass, no dilation and no blur.** The renderer this replaces drew
114
+ * every highlighted object again into an id target of its own, ping-ponged two render targets to
115
+ * dilate the mask, blurred it, and decoded ids back to colours to composite — five render targets, a
116
+ * duplicated scene graph and its own skinned material variant. Shade already writes a per-pixel mesh
117
+ * id while drawing the frame, so an outline is a neighbourhood test on an integer texture and
118
+ * nothing more.
119
+ *
120
+ * **What that costs is the contract change in D27**: the visibility buffer knows only what was
121
+ * rasterized, so a unit standing behind a building is outlined where it can be seen and nowhere
122
+ * else. The old mask was drawn with the depth buffer cleared and showed through everything.
123
+ *
124
+ * @type {ImageShader}
125
+ */
126
+ export const shader_highlight_outline = ImageShader.from({
127
+ descriptor: ShaderDescriptor.from({
128
+ label: "Highlight outline",
129
+ resources,
130
+ body
131
+ }),
132
+ targets: [
133
+ {
134
+ label: "outlined",
135
+ format: "rgba16float",
136
+ blend: BlendState.from({
137
+ color: {
138
+ operation: "add",
139
+ srcFactor: "one",
140
+ dstFactor: "one-minus-src-alpha"
141
+ },
142
+ alpha: {
143
+ operation: "add",
144
+ srcFactor: "one",
145
+ dstFactor: "one-minus-src-alpha"
146
+ }
147
+ })
148
+ }
149
+ ]
150
+ });
@@ -64,11 +64,11 @@ export class FluidObstacleSystem extends System<any> {
64
64
  /**
65
65
  * @param {FluidComponent} fluid
66
66
  */
67
- static "__#356@#refresh_masks"(fluid: FluidComponent): void;
67
+ static "__#362@#refresh_masks"(fluid: FluidComponent): void;
68
68
  /**
69
69
  * @param {FluidComponent} fluid
70
70
  */
71
- static "__#356@#clear_field"(fluid: FluidComponent): void;
71
+ static "__#362@#clear_field"(fluid: FluidComponent): void;
72
72
  /**
73
73
  * Mark every cell of `fluid` whose centre lies within `inflation` of the
74
74
  * posed shape as solid. Iteration is clipped to the shape's world AABB
@@ -80,7 +80,7 @@ export class FluidObstacleSystem extends System<any> {
80
80
  * @param {number} inflation world-units SDF threshold
81
81
  * @param {Float64Array} point length-3 scratch
82
82
  */
83
- static "__#356@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
83
+ static "__#362@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
84
84
  /**
85
85
  * Write the obstacle's translation velocity onto every face of every cell
86
86
  * it voxelized — the moving-wall boundary condition. Runs AFTER the mask
@@ -100,7 +100,7 @@ export class FluidObstacleSystem extends System<any> {
100
100
  * @param {number} wvy
101
101
  * @param {number} wvz
102
102
  */
103
- static "__#356@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
103
+ static "__#362@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
104
104
  constructor();
105
105
  dependencies: (typeof FluidObstacle)[];
106
106
  components_used: (ResourceAccessSpecification<typeof Transform> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof FluidComponent> | ResourceAccessSpecification<typeof FluidObstacle>)[];
@@ -541,7 +541,8 @@ frame or is removed and re-added keeps its buffers.
541
541
  | `internal_resolution_scale` | render internally below output resolution; `DynamicResolutionScaling` drives it from frame time |
542
542
  | `pixel_ratio`, `output_resolution`, `aspect_ratio`, `resize(x, y)` | |
543
543
  | `motion_blur`, `dof`, `dof_unreal`, `nss`, `restir_di`, `path_tracer` | sub-objects with their own settings |
544
- | `frame_count`, `add_debug_frame(n)` | |
544
+ | `frame_count` | |
545
+ | `profile_session` | assign a `GPUProfileSession` to record GPU timings; null when nothing is profiling |
545
546
 
546
547
  ---
547
548
 
@@ -19,6 +19,23 @@ export class ComputePipelineDescriptor extends PipelineDescriptorBase {
19
19
  */
20
20
  static fromJSON(json: GPUComputePipelineDescriptor): ComputePipelineDescriptor;
21
21
  compute: ProgrammableStage;
22
+ /**
23
+ * `[x, y, z]` of this pipeline's `@workgroup_size`.
24
+ *
25
+ * Read once, when the code is set, and kept — the source cannot change under a descriptor
26
+ * without going back through one of the factories, each of which reads it again. So every
27
+ * consumer downstream, a profile capture included, gets the number for free.
28
+ *
29
+ * Frozen, because it is handed out by reference to per-pass profile records and a descriptor
30
+ * that outlives a whole capture must not be mutable through one of them.
31
+ *
32
+ * Takes no part in {@link equals} or {@link hash}: it is derived from `compute.module`, which
33
+ * both already cover, and a cache key computed two ways is a cache that can disagree with
34
+ * itself.
35
+ *
36
+ * @returns {readonly number[]}
37
+ */
38
+ get workgroup_size(): readonly number[];
22
39
  /**
23
40
  *
24
41
  * @param {GPUComputePipelineDescriptor} json
@@ -35,6 +52,7 @@ export class ComputePipelineDescriptor extends PipelineDescriptorBase {
35
52
  * @type {boolean}
36
53
  */
37
54
  readonly isComputePipelineDescriptor: boolean;
55
+ #private;
38
56
  }
39
57
  import { PipelineDescriptorBase } from "../PipelineDescriptorBase.js";
40
58
  import { ProgrammableStage } from "../ProgrammableStage.js";
@@ -1 +1 @@
1
- {"version":3,"file":"ComputePipelineDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js"],"names":[],"mappings":"AAQA;IAGI;;;;;OAKG;IACH,mBAJW,MAAM,QACN,MAAM,UACN,wBAAwB,6BAalC;IAED;;;;;OAKG;IACH,wEALW,MAAM,6BAyBhB;IAED;;;OAGG;IACH,+EAMC;IA3DD,2BAAkC;IA6DlC;;;OAGG;IACH,mDAMC;IAED;;;;OAIG;IACH,cAHW,yBAAyB,GACxB,OAAO,CAMlB;IAUL;;;OAGG;IACH,sCAFU,OAAO,CAE8C;CAN9D;uCAhGsC,8BAA8B;kCAEnC,yBAAyB;yCADlB,gCAAgC"}
1
+ {"version":3,"file":"ComputePipelineDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js"],"names":[],"mappings":"AAqBA;IAuDI;;;;;OAKG;IACH,mBAJW,MAAM,QACN,MAAM,UACN,wBAAwB,6BAelC;IAED;;;;;OAKG;IACH,wEALW,MAAM,6BA2BhB;IAED;;;OAGG;IACH,+EAMC;IAnHD,2BAAkC;IAOlC;;;;;;;;;;;;;;;OAeG;IACH,wCAEC;IA4FD;;;OAGG;IACH,mDAUC;IAED;;;;OAIG;IACH,cAHW,yBAAyB,GACxB,OAAO,CAMlB;IAUL;;;OAGG;IACH,sCAFU,OAAO,CAE8C;;CAN9D;uCAtKsC,8BAA8B;kCAEnC,yBAAyB;yCADlB,gCAAgC"}