@woosh/meep-engine 3.12.0 → 3.13.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.
Files changed (285) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  3. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  4. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  5. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  6. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  7. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  8. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  9. package/src/shade/RENDERER_CONTRACT.md +2 -1
  10. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  11. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  12. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  13. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
  14. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  15. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  16. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  17. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  18. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  19. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  20. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  21. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  22. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  23. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  24. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  25. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  26. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  27. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  28. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  29. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  30. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  31. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  32. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  33. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
  34. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  35. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
  36. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  37. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
  38. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
  39. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
  40. package/src/shade/renderer/Renderer.d.ts +0 -6
  41. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  42. package/src/shade/renderer/Renderer.js +0 -29
  43. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  44. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  45. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  46. package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
  47. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  48. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  49. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  50. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
  51. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  52. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
  53. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  54. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  55. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
  56. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  57. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
  58. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  59. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
  60. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  61. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
  62. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  63. package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
  64. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  65. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  66. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  67. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
  68. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  69. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
  70. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  71. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  72. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  73. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  74. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  75. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  76. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  77. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  78. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  79. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  80. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
  81. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  82. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
  83. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
  85. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  87. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  88. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  89. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  90. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  91. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  92. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  93. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  94. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  96. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  98. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
  100. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  101. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  102. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  104. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  106. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  108. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
  109. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  110. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  111. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  112. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
  113. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  114. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
  115. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  116. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
  117. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  118. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  119. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  120. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  121. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  122. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  123. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
  124. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  125. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
  126. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  127. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  128. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  129. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  130. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  132. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  133. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  134. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  135. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  136. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  137. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  138. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
  139. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  140. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  141. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  142. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  143. package/src/shade/renderer/particles/graph_particles.js +5 -3
  144. package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
  145. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  146. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
  147. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
  149. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
  151. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
  153. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  154. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  155. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  156. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  157. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  158. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  159. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  160. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  161. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  162. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  163. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
  164. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  165. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  166. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  167. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  168. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  169. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  170. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  171. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  172. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  173. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  174. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  175. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
  176. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  177. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  178. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  179. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  180. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  181. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  182. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  183. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
  184. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  185. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
  186. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  187. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  188. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  189. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  190. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  191. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  192. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  193. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  194. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  195. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  196. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  197. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  198. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  199. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  200. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
  201. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  202. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  203. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  204. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  205. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  206. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  207. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  209. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  210. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  211. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  212. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  213. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  214. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  215. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  216. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  217. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  218. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  219. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
  220. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
  222. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
  224. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  225. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  226. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  227. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  228. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  229. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  230. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  231. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  232. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  233. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  234. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
  235. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  236. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
  237. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  238. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
  239. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  240. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
  241. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  242. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
  243. package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
  244. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  245. package/src/shade/renderer/shader/ComputeShader.js +14 -17
  246. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  247. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  248. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  249. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  250. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  251. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  252. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
  253. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  254. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  255. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  256. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  257. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  258. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  260. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  261. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
  262. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  263. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  264. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  265. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
  266. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  267. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  268. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  269. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  270. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  271. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  272. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  273. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  274. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  275. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +233 -231
  276. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  277. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  278. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  279. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  280. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  281. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  282. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  283. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  284. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  285. package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
@@ -1,192 +1,192 @@
1
- import {
2
- VIZ_BUFFER_INVALID_MESH_VALUE
3
- } from "../../rasterize/native/viz/VIZ_BUFFER_INVALID_MESH_VALUE.js";
4
- import { ATORUS_UNIFORMS_STRUCT } from "../../postprocess/denoise/fragment_shader_denoise_ao.js";
5
- import { chunk_filter_gaussian } from "../../shader/chunk/filter/chunk_filter_gaussian.js";
6
- import {
7
- METRO_L1_IRRADIANCE_STRUCT
8
- } from "../../shader/chunk/spherical_harmonics/l1i/chunk_convert_to_irradiance_sh.js";
9
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
10
- import { ImageShader } from "../../shader/ImageShader.js";
11
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
12
- import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
13
- import { chunk_texture_load_sh } from "./chunk_texture_load_sh.js";
14
- import { LIGHTMAP_SH_COLOR_TARGETS_DESCRIPTOR } from "./LIGHTMAP_SH_COLOR_TARGETS_DESCRIPTOR.js";
15
- import { LIGHTMAP_SH_FRAGMENT_OUTPUT } from "./LIGHTMAP_SH_FRAGMENT_OUTPUT.js";
16
-
17
-
18
- const resources = new ShaderResourceSetDescriptor();
19
-
20
- resources.createGroup()
21
- .addUniform("settings", ATORUS_UNIFORMS_STRUCT);
22
-
23
- resources.createGroup()
24
- .addTexture("viz_buffer", "uint")
25
- .addTexture("lightmap_Y", "unfilterable-float")
26
- .addTexture("lightmap_CoCg", "unfilterable-float")
27
-
28
- /**
29
- * We can use this to derive a single variance value
30
- * @type {CodeChunk}
31
- */
32
- export const chunk_estimate_sh_similarity = CodeChunk.from(
33
- //language=WGSL
34
- `
35
- fn estimate_sh_similarity(
36
- a: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref},
37
- b: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref}
38
- ) -> f32 {
39
- // extract dominant luma direction
40
- // Metro encodes SH coeffcients in axis-aligned way (L11, L1_1, L10) with L00 being in forth position (w)
41
-
42
- let a_luma_direction = a.Y.xyz / a.Y.w;
43
- let b_luma_direction = b.Y.xyz / b.Y.w;
44
-
45
- const DIRECTION_PHI = 10.0;
46
-
47
- // Soften the direction, so that there is always some similarity. The exponent argument is a
48
- // DISTANCE (0 = aligned, 1 = opposite), so aligned directions get the highest weight.
49
- let direction_similarity = exp( - max(0.0001, ( 1.0 - dot(a_luma_direction, b_luma_direction) ) * 0.5) / DIRECTION_PHI);
50
-
51
- const LUMA_PHI = 10.0;
52
-
53
- let luma_similarity = exp( - max(0.0001, abs( a.Y.w - b.Y.w )) / LUMA_PHI);
54
-
55
- const COLOR_PHI = 3.0;
56
-
57
- let color_similarity = exp( min(0.0, -dot(vec2(a.CoCg * a.Y.w), vec2(b.CoCg * b.Y.w))) / COLOR_PHI );
58
-
59
- return luma_similarity * color_similarity * direction_similarity;
60
- }
61
- `, [
62
- METRO_L1_IRRADIANCE_STRUCT.declaration_chunk,
63
- ]
64
- );
65
-
66
- const chunk_edge_stopping_weight = CodeChunk.from(
67
- //language=WGSL
68
- `
69
- fn edge_stopping_weight(
70
- center_viz: vec2u,
71
- sample_viz: vec2u,
72
- center_sh: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref},
73
- sample_sh: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref},
74
- ) -> f32{
75
- var result: f32 = 1.0;
76
-
77
- // different meshes
78
- result *= select(0.0,1.0,center_viz.x == sample_viz.x);
79
-
80
- result *= estimate_sh_similarity(center_sh, sample_sh);
81
-
82
- return saturate(result);
83
- }
84
- `, [
85
- METRO_L1_IRRADIANCE_STRUCT.declaration_chunk,
86
- chunk_estimate_sh_similarity
87
- ]
88
- );
89
-
90
-
91
- const body = CodeChunk.from(
92
- //language=WGSL
93
- `
94
-
95
- @fragment
96
- fn main(
97
- @builtin(position) coord: vec4<f32>,
98
- ) -> ${LIGHTMAP_SH_FRAGMENT_OUTPUT.wgsl_ref}{
99
- let ipos = vec2<i32>(coord.xy);
100
- let screen_size = vec2<i32>(textureDimensions(lightmap_Y));
101
-
102
- let center_sh = texture_load_sh(ipos);
103
-
104
- var accummulated_sample = center_sh;
105
- var sum_weight = 1.0;
106
-
107
- let center_viz = textureLoad(viz_buffer, ipos, 0).rg;
108
-
109
- if(center_viz.x == ${VIZ_BUFFER_INVALID_MESH_VALUE}){
110
- // not a valid sample
111
- discard ;
112
- }
113
-
114
- // TODO compute variance and mean
115
- // use similarity measure code for variance
116
-
117
- // TODO drive blur using variance
118
-
119
- // TODO use G-buffer to drive world-space edge-weight metric
120
-
121
- // TODO for texels with very high variance we can relax the directional component (L1 of SH)
122
-
123
- const KERNEL_SIZE = 7;
124
-
125
- for(var y = -KERNEL_SIZE; y <= KERNEL_SIZE; y++){
126
- for(var x = -KERNEL_SIZE; x <= KERNEL_SIZE; x++){
127
-
128
- if(x == 0 && y == 0){
129
- // skip center sample
130
- continue;
131
- }
132
-
133
- let offset = vec2<i32>(x, y);
134
-
135
- let p = ipos + offset;
136
- let inside = all(p >= vec2(0, 0)) && all(p < screen_size);
137
-
138
- if(!inside){
139
- continue;
140
- }
141
-
142
- const GAUSSIAN_SIGMA = KERNEL_SIZE*0.25;
143
-
144
- let kernel = filter_gaussian( GAUSSIAN_SIGMA, f32(x) ) * filter_gaussian( GAUSSIAN_SIGMA, f32(y) );
145
-
146
- let sample_viz = textureLoad(viz_buffer, p, 0).rg;
147
-
148
- let sample_sh = texture_load_sh(p);
149
-
150
- // edge-stopping function
151
- let edge_weight = edge_stopping_weight(
152
- center_viz,
153
- sample_viz,
154
- center_sh,
155
- sample_sh
156
- );
157
-
158
- let weight = edge_weight * kernel;
159
-
160
-
161
- accummulated_sample.Y += sample_sh.Y * weight;
162
- accummulated_sample.CoCg += sample_sh.CoCg * weight;
163
-
164
- sum_weight += weight;
165
-
166
- }
167
- }
168
-
169
- accummulated_sample.Y /= sum_weight;
170
- accummulated_sample.CoCg /= sum_weight;
171
-
172
- return ${LIGHTMAP_SH_FRAGMENT_OUTPUT.make({
173
- Y:"accummulated_sample.Y",
174
- CoCg:"accummulated_sample.CoCg"
175
- })};
176
- }
177
- `, [
178
- chunk_edge_stopping_weight,
179
- chunk_texture_load_sh,
180
- LIGHTMAP_SH_FRAGMENT_OUTPUT.declaration_chunk,
181
- METRO_L1_IRRADIANCE_STRUCT.declaration_chunk,
182
- chunk_filter_gaussian,
183
- ]);
184
-
185
- export const shader_lightmap_denoise_sh = ImageShader.from({
186
- descriptor: ShaderDescriptor.from({
187
- label: "Light Map / denoise SH",
188
- body,
189
- resources,
190
- }),
191
- targets: LIGHTMAP_SH_COLOR_TARGETS_DESCRIPTOR
1
+ import {
2
+ VIZ_BUFFER_INVALID_MESH_VALUE
3
+ } from "../../rasterize/native/viz/VIZ_BUFFER_INVALID_MESH_VALUE.js";
4
+ import { ATORUS_UNIFORMS_STRUCT } from "../../postprocess/denoise/fragment_shader_denoise_ao.js";
5
+ import { chunk_filter_gaussian } from "../../shader/chunk/filter/chunk_filter_gaussian.js";
6
+ import {
7
+ METRO_L1_IRRADIANCE_STRUCT
8
+ } from "../../shader/chunk/spherical_harmonics/l1i/chunk_convert_to_irradiance_sh.js";
9
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
10
+ import { ImageShader } from "../../shader/ImageShader.js";
11
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
12
+ import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
13
+ import { chunk_texture_load_sh } from "./chunk_texture_load_sh.js";
14
+ import { LIGHTMAP_SH_COLOR_TARGETS_DESCRIPTOR } from "./LIGHTMAP_SH_COLOR_TARGETS_DESCRIPTOR.js";
15
+ import { LIGHTMAP_SH_FRAGMENT_OUTPUT } from "./LIGHTMAP_SH_FRAGMENT_OUTPUT.js";
16
+
17
+
18
+ const resources = new ShaderResourceSetDescriptor();
19
+
20
+ // per-pass, four bytes, read-only: immediate data rather than a uniform buffer
21
+ resources.setImmediate("settings", ATORUS_UNIFORMS_STRUCT);
22
+
23
+ resources.createGroup()
24
+ .addTexture("viz_buffer", "uint")
25
+ .addTexture("lightmap_Y", "unfilterable-float")
26
+ .addTexture("lightmap_CoCg", "unfilterable-float")
27
+
28
+ /**
29
+ * We can use this to derive a single variance value
30
+ * @type {CodeChunk}
31
+ */
32
+ export const chunk_estimate_sh_similarity = CodeChunk.from(
33
+ //language=WGSL
34
+ `
35
+ fn estimate_sh_similarity(
36
+ a: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref},
37
+ b: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref}
38
+ ) -> f32 {
39
+ // extract dominant luma direction
40
+ // Metro encodes SH coeffcients in axis-aligned way (L11, L1_1, L10) with L00 being in forth position (w)
41
+
42
+ let a_luma_direction = a.Y.xyz / a.Y.w;
43
+ let b_luma_direction = b.Y.xyz / b.Y.w;
44
+
45
+ const DIRECTION_PHI = 10.0;
46
+
47
+ // Soften the direction, so that there is always some similarity. The exponent argument is a
48
+ // DISTANCE (0 = aligned, 1 = opposite), so aligned directions get the highest weight.
49
+ let direction_similarity = exp( - max(0.0001, ( 1.0 - dot(a_luma_direction, b_luma_direction) ) * 0.5) / DIRECTION_PHI);
50
+
51
+ const LUMA_PHI = 10.0;
52
+
53
+ let luma_similarity = exp( - max(0.0001, abs( a.Y.w - b.Y.w )) / LUMA_PHI);
54
+
55
+ const COLOR_PHI = 3.0;
56
+
57
+ let color_similarity = exp( min(0.0, -dot(vec2(a.CoCg * a.Y.w), vec2(b.CoCg * b.Y.w))) / COLOR_PHI );
58
+
59
+ return luma_similarity * color_similarity * direction_similarity;
60
+ }
61
+ `, [
62
+ METRO_L1_IRRADIANCE_STRUCT.declaration_chunk,
63
+ ]
64
+ );
65
+
66
+ const chunk_edge_stopping_weight = CodeChunk.from(
67
+ //language=WGSL
68
+ `
69
+ fn edge_stopping_weight(
70
+ center_viz: vec2u,
71
+ sample_viz: vec2u,
72
+ center_sh: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref},
73
+ sample_sh: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref},
74
+ ) -> f32{
75
+ var result: f32 = 1.0;
76
+
77
+ // different meshes
78
+ result *= select(0.0,1.0,center_viz.x == sample_viz.x);
79
+
80
+ result *= estimate_sh_similarity(center_sh, sample_sh);
81
+
82
+ return saturate(result);
83
+ }
84
+ `, [
85
+ METRO_L1_IRRADIANCE_STRUCT.declaration_chunk,
86
+ chunk_estimate_sh_similarity
87
+ ]
88
+ );
89
+
90
+
91
+ const body = CodeChunk.from(
92
+ //language=WGSL
93
+ `
94
+
95
+ @fragment
96
+ fn main(
97
+ @builtin(position) coord: vec4<f32>,
98
+ ) -> ${LIGHTMAP_SH_FRAGMENT_OUTPUT.wgsl_ref}{
99
+ let ipos = vec2<i32>(coord.xy);
100
+ let screen_size = vec2<i32>(textureDimensions(lightmap_Y));
101
+
102
+ let center_sh = texture_load_sh(ipos);
103
+
104
+ var accummulated_sample = center_sh;
105
+ var sum_weight = 1.0;
106
+
107
+ let center_viz = textureLoad(viz_buffer, ipos, 0).rg;
108
+
109
+ if(center_viz.x == ${VIZ_BUFFER_INVALID_MESH_VALUE}){
110
+ // not a valid sample
111
+ discard ;
112
+ }
113
+
114
+ // TODO compute variance and mean
115
+ // use similarity measure code for variance
116
+
117
+ // TODO drive blur using variance
118
+
119
+ // TODO use G-buffer to drive world-space edge-weight metric
120
+
121
+ // TODO for texels with very high variance we can relax the directional component (L1 of SH)
122
+
123
+ const KERNEL_SIZE = 7;
124
+
125
+ for(var y = -KERNEL_SIZE; y <= KERNEL_SIZE; y++){
126
+ for(var x = -KERNEL_SIZE; x <= KERNEL_SIZE; x++){
127
+
128
+ if(x == 0 && y == 0){
129
+ // skip center sample
130
+ continue;
131
+ }
132
+
133
+ let offset = vec2<i32>(x, y);
134
+
135
+ let p = ipos + offset;
136
+ let inside = all(p >= vec2(0, 0)) && all(p < screen_size);
137
+
138
+ if(!inside){
139
+ continue;
140
+ }
141
+
142
+ const GAUSSIAN_SIGMA = KERNEL_SIZE*0.25;
143
+
144
+ let kernel = filter_gaussian( GAUSSIAN_SIGMA, f32(x) ) * filter_gaussian( GAUSSIAN_SIGMA, f32(y) );
145
+
146
+ let sample_viz = textureLoad(viz_buffer, p, 0).rg;
147
+
148
+ let sample_sh = texture_load_sh(p);
149
+
150
+ // edge-stopping function
151
+ let edge_weight = edge_stopping_weight(
152
+ center_viz,
153
+ sample_viz,
154
+ center_sh,
155
+ sample_sh
156
+ );
157
+
158
+ let weight = edge_weight * kernel;
159
+
160
+
161
+ accummulated_sample.Y += sample_sh.Y * weight;
162
+ accummulated_sample.CoCg += sample_sh.CoCg * weight;
163
+
164
+ sum_weight += weight;
165
+
166
+ }
167
+ }
168
+
169
+ accummulated_sample.Y /= sum_weight;
170
+ accummulated_sample.CoCg /= sum_weight;
171
+
172
+ return ${LIGHTMAP_SH_FRAGMENT_OUTPUT.make({
173
+ Y:"accummulated_sample.Y",
174
+ CoCg:"accummulated_sample.CoCg"
175
+ })};
176
+ }
177
+ `, [
178
+ chunk_edge_stopping_weight,
179
+ chunk_texture_load_sh,
180
+ LIGHTMAP_SH_FRAGMENT_OUTPUT.declaration_chunk,
181
+ METRO_L1_IRRADIANCE_STRUCT.declaration_chunk,
182
+ chunk_filter_gaussian,
183
+ ]);
184
+
185
+ export const shader_lightmap_denoise_sh = ImageShader.from({
186
+ descriptor: ShaderDescriptor.from({
187
+ label: "Light Map / denoise SH",
188
+ body,
189
+ resources,
190
+ }),
191
+ targets: LIGHTMAP_SH_COLOR_TARGETS_DESCRIPTOR
192
192
  })
@@ -1 +1 @@
1
- {"version":3,"file":"shader_lightmap_accummulate_tile.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js"],"names":[],"mappings":"AAoDA,2DA8BE;4BA7E0B,gCAAgC"}
1
+ {"version":3,"file":"shader_lightmap_accummulate_tile.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js"],"names":[],"mappings":"AAuDA,2DA8BE;4BAhF0B,gCAAgC"}
@@ -1,83 +1,86 @@
1
- import { vec2u } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
3
- import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
4
- import { INDIRECT_MATERIAL_ARRAY_TYPE } from "../../../material/resident/INDIRECT_MATERIAL_ARRAY_TYPE.js";
5
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
6
- import { ImageShader } from "../../../shader/ImageShader.js";
7
- import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
8
- import { ShaderDescriptor } from "../../../shader/ShaderDescriptor.js";
9
- import { sr_create_group_RTX } from "../../../geometry/sr_create_group_RTX.js";
10
-
11
- const PUSH_CONSTANTS = WebGPUStruct.from({
12
- /**
13
- * Offset into the light map where the tile maps onto
14
- */
15
- offset: vec2u,
16
-
17
- });
18
-
19
- const resources = new ShaderResourceSetDescriptor();
20
-
21
- sr_create_group_RTX(resources);
22
-
23
- resources.createGroup()
24
- .addUniform("materials", INDIRECT_MATERIAL_ARRAY_TYPE)
25
- .addTexture("textures", "unfilterable-float", "2d-array")
26
- .addTexture("tNoise", "uint")
27
-
28
- resources.createGroup()
29
- .addStorageBuffer("light_data", WebGPUArray.u32)
30
- .addTexture("tEnvironment", "unfilterable-float", "2d")
31
-
32
- resources.createGroup()
33
- .addUniform("settings", PUSH_CONSTANTS)
34
- .addTexture("viz_buffer", "uint") // [mesh, triangle]
35
-
36
-
37
- const body = CodeChunk.from(
38
- //language=WGSL
39
- `
40
-
41
- @fragment
42
- fn main(
43
- @builtin(position) coord: vec4<f32>,
44
- ) -> @location(0) vec4<f32>{
45
-
46
- let ipos = vec2<i32>(coord.xy);
47
-
48
-
49
- }
50
- `
51
- );
52
-
53
- export const shader_lightmap_accummulate_tile = ImageShader.from({
54
- descriptor: ShaderDescriptor.from({
55
- label: "Lightmap accummulate tile",
56
- body,
57
- resources,
58
- }),
59
- targets: [
60
- // Y
61
- {
62
- format: "rgba32float",
63
- blend: {
64
- color: {
65
- operation: "add",
66
- srcFactor: "one",
67
- dstFactor: "one",
68
- }
69
- }
70
- },
71
- // CoCg
72
- {
73
- format: "rg32float",
74
- blend: {
75
- color: {
76
- operation: "add",
77
- srcFactor: "one",
78
- dstFactor: "one",
79
- }
80
- }
81
- }
82
- ]
1
+ import { vec2u } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
3
+ import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
4
+ import { INDIRECT_MATERIAL_ARRAY_TYPE } from "../../../material/resident/INDIRECT_MATERIAL_ARRAY_TYPE.js";
5
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
6
+ import { ImageShader } from "../../../shader/ImageShader.js";
7
+ import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
8
+ import { ShaderDescriptor } from "../../../shader/ShaderDescriptor.js";
9
+ import { sr_create_group_RTX } from "../../../geometry/sr_create_group_RTX.js";
10
+
11
+ const PUSH_CONSTANTS = WebGPUStruct.from({
12
+ /**
13
+ * Offset into the light map where the tile maps onto
14
+ */
15
+ offset: vec2u,
16
+
17
+ });
18
+
19
+ const resources = new ShaderResourceSetDescriptor();
20
+
21
+ // per-dispatch, eight bytes, read-only: immediate data rather than a uniform buffer. The material
22
+ // table beside it is scene state and stays bound.
23
+ resources.setImmediate("settings", PUSH_CONSTANTS);
24
+
25
+ sr_create_group_RTX(resources);
26
+
27
+ resources.createGroup()
28
+ .addUniform("materials", INDIRECT_MATERIAL_ARRAY_TYPE)
29
+ .addTexture("textures", "unfilterable-float", "2d-array")
30
+ .addTexture("tNoise", "uint")
31
+
32
+ resources.createGroup()
33
+ .addStorageBuffer("light_data", WebGPUArray.u32)
34
+ .addTexture("tEnvironment", "unfilterable-float", "2d")
35
+
36
+ resources.createGroup()
37
+ .addTexture("viz_buffer", "uint") // [mesh, triangle]
38
+
39
+
40
+ const body = CodeChunk.from(
41
+ //language=WGSL
42
+ `
43
+
44
+ @fragment
45
+ fn main(
46
+ @builtin(position) coord: vec4<f32>,
47
+ ) -> @location(0) vec4<f32>{
48
+
49
+ let ipos = vec2<i32>(coord.xy);
50
+
51
+
52
+ }
53
+ `
54
+ );
55
+
56
+ export const shader_lightmap_accummulate_tile = ImageShader.from({
57
+ descriptor: ShaderDescriptor.from({
58
+ label: "Lightmap accummulate tile",
59
+ body,
60
+ resources,
61
+ }),
62
+ targets: [
63
+ // Y
64
+ {
65
+ format: "rgba32float",
66
+ blend: {
67
+ color: {
68
+ operation: "add",
69
+ srcFactor: "one",
70
+ dstFactor: "one",
71
+ }
72
+ }
73
+ },
74
+ // CoCg
75
+ {
76
+ format: "rg32float",
77
+ blend: {
78
+ color: {
79
+ operation: "add",
80
+ srcFactor: "one",
81
+ dstFactor: "one",
82
+ }
83
+ }
84
+ }
85
+ ]
83
86
  })
@@ -1 +1 @@
1
- {"version":3,"file":"graph_particles.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/graph_particles.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH;IApBkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,GAAG;QACI,QAAQ;QACR,OAAO;QACP,SAAS;QACT,IAAI;QACJ,UAAU;QACV,WAAW;QACX,IAAI;QACJ,QAAQ;QACR,cAAc;QACd,aAAa;QACb,SAAS;;IAChB,QAAQ,EAAvB,MAAM;IACS,KAAK;QACC,EAAE,EAAvB,MAAM;QACe,IAAI,EAAzB,MAAM;QACe,KAAK,EAA1B,MAAM;QACe,WAAW,EAAhC,MAAM;;;;;;;;EAoFhB"}
1
+ {"version":3,"file":"graph_particles.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/graph_particles.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH;IApBkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,GAAG;QACI,QAAQ;QACR,OAAO;QACP,SAAS;QACT,IAAI;QACJ,UAAU;QACV,WAAW;QACX,IAAI;QACJ,QAAQ;QACR,cAAc;QACd,aAAa;QACb,SAAS;;IAChB,QAAQ,EAAvB,MAAM;IACS,KAAK;QACC,EAAE,EAAvB,MAAM;QACe,IAAI,EAAzB,MAAM;QACe,KAAK,EAA1B,MAAM;QACe,WAAW,EAAhC,MAAM;;;;;;;;EAsFhB"}
@@ -92,8 +92,10 @@ export function graph_particles({ graph, gpu, capacity, frame }) {
92
92
  bindings: {
93
93
  emitters: gr_emitters, program: gr_program, vm_constants: gr_constants,
94
94
  pool, spawn_requests: gr_spawn, alive_out: alive_write, dead, counters,
95
- u_dt: frame.dt, u_time: frame.time, u_frame: frame.index,
96
- u_count: frame.spawn_count, u_capacity: capacity,
95
+ settings: {
96
+ u_dt: frame.dt, u_time: frame.time, u_frame: frame.index,
97
+ u_count: frame.spawn_count, u_capacity: capacity,
98
+ },
97
99
  },
98
100
  group_count: [Math.ceil(frame.spawn_count / PARTICLE_EMIT_WORKGROUP_SIZE), 1, 1],
99
101
  });
@@ -111,7 +113,7 @@ export function graph_particles({ graph, gpu, capacity, frame }) {
111
113
  bindings: {
112
114
  emitters: gr_emitters, program: gr_program, vm_constants: gr_constants,
113
115
  pool, alive_in: gr_alive_read, alive_out: alive_write, dead, counters,
114
- u_dt: frame.dt, u_time: frame.time, u_frame: frame.index,
116
+ settings: { u_dt: frame.dt, u_time: frame.time, u_frame: frame.index },
115
117
  },
116
118
  command: gr_dispatch,
117
119
  });
@@ -177,7 +177,6 @@ async function main() {
177
177
  if (requests.length > 0) device.queue.writeBuffer(spawnRequests, 0, requests);
178
178
 
179
179
  const cmd = ShadeGPUCommandContext.create(graphics);
180
- const u = (type, value) => cmd.allocateTransientValueBuffer(type, value, GPUBufferUsage.UNIFORM);
181
180
  const colorView = context.getCurrentTexture().createView();
182
181
 
183
182
  // --- geometry pass: clear colour + reverse-Z depth (far = 0), lit, writes depth ---
@@ -196,19 +195,19 @@ async function main() {
196
195
  if (requests.length > 0) {
197
196
  shader_particle_emit.dispatchThreads({
198
197
  encoder: cmd,
199
- bindings: { emitters, program, vm_constants: constants, pool, spawn_requests: spawnRequests, alive_out: aliveWrite, dead, counters, u_dt: u(f32, dt), u_time: u(f32, now / 1000), u_frame: u(u32, system.frame), u_count: u(u32, requests.length), u_capacity: u(u32, CAPACITY) },
198
+ bindings: { emitters, program, vm_constants: constants, pool, spawn_requests: spawnRequests, alive_out: aliveWrite, dead, counters, settings: { u_dt: dt, u_time: now / 1000, u_frame: system.frame, u_count: requests.length, u_capacity: CAPACITY } },
200
199
  thread_count_x: requests.length,
201
200
  });
202
201
  }
203
202
  shader_particle_simulate.dispatchIndirect({
204
203
  encoder: cmd,
205
- bindings: { emitters, program, vm_constants: constants, pool, alive_in: aliveRead, alive_out: aliveWrite, dead, counters, u_dt: u(f32, dt), u_time: u(f32, now / 1000), u_frame: u(u32, system.frame) },
204
+ bindings: { emitters, program, vm_constants: constants, pool, alive_in: aliveRead, alive_out: aliveWrite, dead, counters, settings: { u_dt: dt, u_time: now / 1000, u_frame: system.frame } },
206
205
  command: dispatchArgs,
207
206
  });
208
207
  // Snapshot the final alive count (next frame's simulate input) + write this frame's draw args.
209
208
  shader_particle_build_indirect.dispatch({
210
209
  encoder: cmd,
211
- bindings: { counters, dispatch_args: dispatchArgs, draw_args: drawArgs, u_workgroup_size: u(u32, PARTICLE_SIMULATE_WORKGROUP_SIZE) },
210
+ bindings: { counters, dispatch_args: dispatchArgs, draw_args: drawArgs, u_workgroup_size: PARTICLE_SIMULATE_WORKGROUP_SIZE },
212
211
  group_count_x: 1,
213
212
  });
214
213
 
@@ -1 +1 @@
1
- {"version":3,"file":"shader_particle_emit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_emit.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;GAYG;AAEH,2CAHU,aAAa,CAGwB;AA+E/C,iDAIG;8BAlH2B,+BAA+B"}
1
+ {"version":3,"file":"shader_particle_emit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_emit.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;GAYG;AAEH,2CAHU,aAAa,CAGwB;AA6F/C,iDAIG;8BAhI2B,+BAA+B"}