@woosh/meep-engine 3.30.0 → 3.32.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 (1627) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/package.json +3 -1
  4. package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
  5. package/src/core/binary/BinaryBuffer.js +42 -14
  6. package/src/core/binary/BitImage2.d.ts.map +1 -1
  7. package/src/core/binary/BitImage2.js +2 -6
  8. package/src/core/binary/BitSet.js +5 -5
  9. package/src/core/binary/compression/chunks_to_stream.d.ts +24 -0
  10. package/src/core/binary/compression/chunks_to_stream.d.ts.map +1 -0
  11. package/src/core/binary/compression/chunks_to_stream.js +35 -0
  12. package/src/core/binary/compression/compress_bytes.d.ts +3 -4
  13. package/src/core/binary/compression/compress_bytes.d.ts.map +1 -1
  14. package/src/core/binary/compression/compress_bytes.js +6 -17
  15. package/src/core/binary/compression/decompress_bytes.d.ts +1 -2
  16. package/src/core/binary/compression/decompress_bytes.d.ts.map +1 -1
  17. package/src/core/binary/compression/decompress_bytes.js +4 -15
  18. package/src/core/binary/compression/decompress_bytes_into.d.ts.map +1 -1
  19. package/src/core/binary/compression/decompress_bytes_into.js +2 -13
  20. package/src/core/binary/ctz32.d.ts +12 -4
  21. package/src/core/binary/ctz32.d.ts.map +1 -1
  22. package/src/core/binary/ctz32.js +23 -41
  23. package/src/core/binary/lsb_32.d.ts +10 -2
  24. package/src/core/binary/lsb_32.d.ts.map +1 -1
  25. package/src/core/binary/lsb_32.js +17 -12
  26. package/src/core/binary/lz4/lz4_compress_block_hc.js +2 -2
  27. package/src/core/binary/type/DataTypeIndices.d.ts +39 -0
  28. package/src/core/binary/type/DataTypeIndices.d.ts.map +1 -1
  29. package/src/core/binary/type/DataTypeIndices.js +38 -1
  30. package/src/core/binary/type/Type.d.ts.map +1 -1
  31. package/src/core/binary/type/Type.js +6 -1
  32. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +3 -3
  33. package/src/core/bvh8/bvh8_geometry_validate.d.ts.map +1 -1
  34. package/src/core/bvh8/bvh8_geometry_validate.js +2 -88
  35. package/src/core/bvh8/bvh8_geometry_validate_bounds.d.ts +25 -0
  36. package/src/core/bvh8/bvh8_geometry_validate_bounds.d.ts.map +1 -0
  37. package/src/core/bvh8/bvh8_geometry_validate_bounds.js +105 -0
  38. package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts.map +1 -1
  39. package/src/core/bvh8/bvh8_geometry_validate_indirect.js +2 -91
  40. package/src/core/clipboard/obtainClipBoard.d.ts +4 -0
  41. package/src/core/clipboard/obtainClipBoard.d.ts.map +1 -1
  42. package/src/core/clipboard/obtainClipBoard.js +29 -8
  43. package/src/core/clipboard/safeClipboardReadText.d.ts.map +1 -1
  44. package/src/core/clipboard/safeClipboardReadText.js +73 -38
  45. package/src/core/clipboard/safeClipboardWriteText.d.ts.map +1 -1
  46. package/src/core/clipboard/safeClipboardWriteText.js +11 -9
  47. package/src/core/collection/array/iterator/ArrayIteratorRandom.d.ts.map +1 -1
  48. package/src/core/collection/array/iterator/ArrayIteratorRandom.js +6 -0
  49. package/src/core/collection/heap/IndexedFloatMinHeap.d.ts +6 -0
  50. package/src/core/collection/heap/IndexedFloatMinHeap.d.ts.map +1 -1
  51. package/src/core/collection/heap/IndexedFloatMinHeap.js +14 -0
  52. package/src/core/collection/list/FilteredListProjection.d.ts.map +1 -1
  53. package/src/core/collection/list/FilteredListProjection.js +7 -54
  54. package/src/core/collection/list/List.d.ts +4 -0
  55. package/src/core/collection/list/List.d.ts.map +1 -1
  56. package/src/core/collection/list/List.js +10 -52
  57. package/src/core/collection/list/SortedListProjection.d.ts +7 -0
  58. package/src/core/collection/list/SortedListProjection.d.ts.map +1 -1
  59. package/src/core/collection/list/SortedListProjection.js +12 -0
  60. package/src/core/collection/list/list_apply_ordered_diff.d.ts +37 -0
  61. package/src/core/collection/list/list_apply_ordered_diff.d.ts.map +1 -0
  62. package/src/core/collection/list/list_apply_ordered_diff.js +87 -0
  63. package/src/core/collection/map/BiMap.d.ts.map +1 -1
  64. package/src/core/collection/map/BiMap.js +19 -6
  65. package/src/core/collection/map/HashMap.d.ts.map +1 -1
  66. package/src/core/collection/map/HashMap.js +38 -11
  67. package/src/core/collection/queue/Deque.d.ts +2 -2
  68. package/src/core/collection/queue/Deque.d.ts.map +1 -1
  69. package/src/core/collection/queue/Deque.js +12 -1
  70. package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
  71. package/src/core/collection/table/RowFirstTable.js +15 -2
  72. package/src/core/collection/table/serializeRowFirstTable.d.ts.map +1 -1
  73. package/src/core/collection/table/serializeRowFirstTable.js +2 -3
  74. package/src/core/color/operations/color_lerp.d.ts.map +1 -1
  75. package/src/core/color/operations/color_lerp.js +77 -55
  76. package/src/core/color/sRGB/linear_to_sRGB.d.ts.map +1 -1
  77. package/src/core/color/sRGB/linear_to_sRGB.js +3 -1
  78. package/src/core/debug/matchers/AllOf.d.ts +2 -1
  79. package/src/core/debug/matchers/AllOf.d.ts.map +1 -1
  80. package/src/core/debug/matchers/AllOf.js +1 -1
  81. package/src/core/debug/matchers/AnyOf.d.ts +2 -1
  82. package/src/core/debug/matchers/AnyOf.d.ts.map +1 -1
  83. package/src/core/debug/matchers/AnyOf.js +1 -1
  84. package/src/core/debug/matchers/CombinableMatcher.d.ts +2 -1
  85. package/src/core/debug/matchers/CombinableMatcher.d.ts.map +1 -1
  86. package/src/core/debug/matchers/CombinableMatcher.js +1 -1
  87. package/src/core/debug/matchers/DescribeAs.d.ts +2 -1
  88. package/src/core/debug/matchers/DescribeAs.d.ts.map +1 -1
  89. package/src/core/debug/matchers/DescribeAs.js +2 -1
  90. package/src/core/debug/matchers/IsAnything.d.ts +2 -1
  91. package/src/core/debug/matchers/IsAnything.d.ts.map +1 -1
  92. package/src/core/debug/matchers/IsAnything.js +2 -1
  93. package/src/core/debug/matchers/IsEqual.d.ts +2 -1
  94. package/src/core/debug/matchers/IsEqual.d.ts.map +1 -1
  95. package/src/core/debug/matchers/IsEqual.js +2 -1
  96. package/src/core/debug/matchers/IsFinite.d.ts +2 -1
  97. package/src/core/debug/matchers/IsFinite.d.ts.map +1 -1
  98. package/src/core/debug/matchers/IsFinite.js +2 -1
  99. package/src/core/debug/matchers/IsIn.d.ts +2 -1
  100. package/src/core/debug/matchers/IsIn.d.ts.map +1 -1
  101. package/src/core/debug/matchers/IsIn.js +2 -1
  102. package/src/core/debug/matchers/IsInteger.d.ts +2 -1
  103. package/src/core/debug/matchers/IsInteger.d.ts.map +1 -1
  104. package/src/core/debug/matchers/IsInteger.js +2 -1
  105. package/src/core/debug/matchers/IsIterableContaining.d.ts +2 -1
  106. package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
  107. package/src/core/debug/matchers/IsIterableContaining.js +1 -1
  108. package/src/core/debug/matchers/IsNot.d.ts +2 -1
  109. package/src/core/debug/matchers/IsNot.d.ts.map +1 -1
  110. package/src/core/debug/matchers/IsNot.js +2 -1
  111. package/src/core/debug/matchers/IsNull.d.ts +2 -1
  112. package/src/core/debug/matchers/IsNull.d.ts.map +1 -1
  113. package/src/core/debug/matchers/IsNull.js +2 -1
  114. package/src/core/debug/matchers/IsUndefined.d.ts +2 -1
  115. package/src/core/debug/matchers/IsUndefined.d.ts.map +1 -1
  116. package/src/core/debug/matchers/IsUndefined.js +2 -1
  117. package/src/core/events/signal/Signal.d.ts +15 -0
  118. package/src/core/events/signal/Signal.d.ts.map +1 -1
  119. package/src/core/events/signal/Signal.js +857 -820
  120. package/src/core/fsm/simple/SimpleStateMachineDescription.d.ts.map +1 -1
  121. package/src/core/fsm/simple/SimpleStateMachineDescription.js +4 -3
  122. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_bruteforce.d.ts.map +1 -1
  123. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_bruteforce.js +6 -1
  124. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts +1 -1
  125. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts.map +1 -1
  126. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.js +6 -7
  127. package/src/core/geom/2d/hash-grid/SpatialHashGrid.d.ts.map +1 -1
  128. package/src/core/geom/2d/hash-grid/SpatialHashGrid.js +23 -6
  129. package/src/core/geom/2d/line/ray2_ray2_compute_intersection_array_2d.d.ts.map +1 -1
  130. package/src/core/geom/2d/line/ray2_ray2_compute_intersection_array_2d.js +13 -1
  131. package/src/core/geom/3d/aabb/aabb3_raycast_hit_point.d.ts.map +1 -1
  132. package/src/core/geom/3d/aabb/aabb3_raycast_hit_point.js +53 -32
  133. package/src/core/geom/3d/atlas/segment/atlas_chart_growth_cost.d.ts +40 -0
  134. package/src/core/geom/3d/atlas/segment/atlas_chart_growth_cost.d.ts.map +1 -0
  135. package/src/core/geom/3d/atlas/segment/atlas_chart_growth_cost.js +54 -0
  136. package/src/core/geom/3d/atlas/segment/atlas_segment_charts.d.ts +21 -3
  137. package/src/core/geom/3d/atlas/segment/atlas_segment_charts.d.ts.map +1 -1
  138. package/src/core/geom/3d/atlas/segment/atlas_segment_charts.js +24 -15
  139. package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.d.ts +6 -3
  140. package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.d.ts.map +1 -1
  141. package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.js +9 -15
  142. package/src/core/geom/3d/cone/cone_compute_plane_side.d.ts.map +1 -1
  143. package/src/core/geom/3d/cone/cone_compute_plane_side.js +31 -19
  144. package/src/core/geom/3d/equirectangular/equirectangular_direction_to_uv.d.ts +11 -1
  145. package/src/core/geom/3d/equirectangular/equirectangular_direction_to_uv.d.ts.map +1 -1
  146. package/src/core/geom/3d/equirectangular/equirectangular_direction_to_uv.js +11 -1
  147. package/src/core/geom/3d/equirectangular/equirectangular_uv_to_direction.d.ts +11 -1
  148. package/src/core/geom/3d/equirectangular/equirectangular_uv_to_direction.d.ts.map +1 -1
  149. package/src/core/geom/3d/equirectangular/equirectangular_uv_to_direction.js +11 -1
  150. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
  151. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +55 -0
  152. package/src/core/geom/3d/frustum/frustum_from_projection_matrix_array.d.ts +14 -0
  153. package/src/core/geom/3d/frustum/frustum_from_projection_matrix_array.d.ts.map +1 -1
  154. package/src/core/geom/3d/frustum/frustum_from_projection_matrix_array.js +17 -1
  155. package/src/core/geom/3d/gjk/gjk.d.ts +15 -0
  156. package/src/core/geom/3d/gjk/gjk.d.ts.map +1 -1
  157. package/src/core/geom/3d/gjk/gjk.js +15 -0
  158. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
  159. package/src/core/geom/3d/gjk/gjk_epa_penetration.js +18 -0
  160. package/src/core/geom/3d/hash-grid/PointHashGrid3.d.ts +32 -3
  161. package/src/core/geom/3d/hash-grid/PointHashGrid3.d.ts.map +1 -1
  162. package/src/core/geom/3d/hash-grid/PointHashGrid3.js +36 -3
  163. package/src/core/geom/3d/morton/v3_morton_encode_lut.d.ts.map +1 -1
  164. package/src/core/geom/3d/morton/v3_morton_encode_lut.js +11 -4
  165. package/src/core/geom/3d/morton/v3_morton_encode_normalized.d.ts +16 -4
  166. package/src/core/geom/3d/morton/v3_morton_encode_normalized.d.ts.map +1 -1
  167. package/src/core/geom/3d/morton/v3_morton_encode_normalized.js +21 -8
  168. package/src/core/geom/3d/normal/spherical/encode_unit_to_spheremap.d.ts.map +1 -1
  169. package/src/core/geom/3d/normal/spherical/encode_unit_to_spheremap.js +17 -3
  170. package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.d.ts +10 -0
  171. package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.d.ts.map +1 -1
  172. package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.js +46 -49
  173. package/src/core/geom/3d/octahedra/octahedral_uv_to_direction.d.ts +13 -1
  174. package/src/core/geom/3d/octahedra/octahedral_uv_to_direction.d.ts.map +1 -1
  175. package/src/core/geom/3d/octahedra/octahedral_uv_to_direction.js +36 -39
  176. package/src/core/geom/3d/quadric/quadric3_to_tensor_m3_inverse.d.ts +4 -1
  177. package/src/core/geom/3d/quadric/quadric3_to_tensor_m3_inverse.d.ts.map +1 -1
  178. package/src/core/geom/3d/quadric/quadric3_to_tensor_m3_inverse.js +22 -4
  179. package/src/core/geom/3d/quaternion/quat3_canonicalize_sign_run.d.ts +38 -0
  180. package/src/core/geom/3d/quaternion/quat3_canonicalize_sign_run.d.ts.map +1 -0
  181. package/src/core/geom/3d/quaternion/quat3_canonicalize_sign_run.js +76 -0
  182. package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.d.ts +11 -0
  183. package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.d.ts.map +1 -1
  184. package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.js +14 -34
  185. package/src/core/geom/3d/shape/PosedShape3D.d.ts +9 -0
  186. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  187. package/src/core/geom/3d/shape/PosedShape3D.js +43 -0
  188. package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
  189. package/src/core/geom/3d/shape/UnionShape3D.js +20 -3
  190. package/src/core/geom/3d/shape/json/type_adapters.d.ts +11 -2
  191. package/src/core/geom/3d/shape/json/type_adapters.d.ts.map +1 -1
  192. package/src/core/geom/3d/shape/json/type_adapters.js +36 -12
  193. package/src/core/geom/3d/sphere/harmonics/sh3_sample_irradiance_by_direction.d.ts +13 -0
  194. package/src/core/geom/3d/sphere/harmonics/sh3_sample_irradiance_by_direction.d.ts.map +1 -1
  195. package/src/core/geom/3d/sphere/harmonics/sh3_sample_irradiance_by_direction.js +17 -4
  196. package/src/core/geom/3d/tetrahedra/tetrahedral_flip_layouts.d.ts +88 -0
  197. package/src/core/geom/3d/tetrahedra/tetrahedral_flip_layouts.d.ts.map +1 -0
  198. package/src/core/geom/3d/tetrahedra/tetrahedral_flip_layouts.js +108 -0
  199. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -1
  200. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +13 -31
  201. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -1
  202. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +14 -22
  203. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -1
  204. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +96 -26
  205. package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.d.ts.map +1 -1
  206. package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.js +17 -6
  207. package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.d.ts +27 -0
  208. package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.d.ts.map +1 -1
  209. package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.js +101 -0
  210. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +3 -0
  211. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -1
  212. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +5 -57
  213. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.d.ts.map +1 -1
  214. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.js +2 -34
  215. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.d.ts.map +1 -1
  216. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.js +2 -43
  217. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +54 -33
  218. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  219. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +229 -68
  220. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  221. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +4 -15
  222. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_mesh_split_pinched_vertices.d.ts.map +1 -1
  223. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_mesh_split_pinched_vertices.js +13 -1
  224. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.d.ts.map +1 -1
  225. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.js +3 -1
  226. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  227. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +22 -3
  228. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_count_faces.d.ts +17 -2
  229. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_count_faces.d.ts.map +1 -1
  230. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_count_faces.js +28 -4
  231. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -1
  232. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +8 -1
  233. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces_weighted.d.ts.map +1 -1
  234. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces_weighted.js +10 -2
  235. package/src/core/geom/3d/topology/struct/binary/query/bt_face_island_flood_fill.d.ts.map +1 -1
  236. package/src/core/geom/3d/topology/struct/binary/query/bt_face_island_flood_fill.js +2 -0
  237. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.d.ts.map +1 -1
  238. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.js +25 -5
  239. package/src/core/geom/3d/triangle/tri3_compute_normal.d.ts +5 -1
  240. package/src/core/geom/3d/triangle/tri3_compute_normal.d.ts.map +1 -1
  241. package/src/core/geom/3d/triangle/tri3_compute_normal.js +8 -1
  242. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
  243. package/src/core/geom/3d/triangle/tri3_ray_intersection.js +15 -3
  244. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.d.ts +2 -1
  245. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.d.ts.map +1 -1
  246. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.js +2 -1
  247. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.d.ts +1 -1
  248. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.d.ts.map +1 -1
  249. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.js +8 -1
  250. package/src/core/geom/vec/vector_normalize.d.ts.map +1 -1
  251. package/src/core/geom/vec/vector_normalize.js +5 -1
  252. package/src/core/geom/vec3/v3_slerp.d.ts.map +1 -1
  253. package/src/core/geom/vec3/v3_slerp.js +69 -4
  254. package/src/core/geom/vec4/v4_max_axis.d.ts +28 -0
  255. package/src/core/geom/vec4/v4_max_axis.d.ts.map +1 -0
  256. package/src/core/geom/vec4/v4_max_axis.js +41 -0
  257. package/src/core/graph/coloring/colorizeGraph.js +10 -7
  258. package/src/core/graph/layout/graph_peel_topological_layer.d.ts.map +1 -1
  259. package/src/core/graph/layout/graph_peel_topological_layer.js +16 -2
  260. package/src/core/json/JsonUtils.d.ts.map +1 -1
  261. package/src/core/json/JsonUtils.js +6 -2
  262. package/src/core/json/abstractJSONSerializer.d.ts.map +1 -1
  263. package/src/core/json/abstractJSONSerializer.js +5 -1
  264. package/src/core/lang/reactive/ReactiveOperatorType.d.ts +20 -0
  265. package/src/core/lang/reactive/ReactiveOperatorType.d.ts.map +1 -1
  266. package/src/core/lang/reactive/ReactiveOperatorType.js +34 -12
  267. package/src/core/localization/LanguageMetadata.d.ts +2 -1
  268. package/src/core/localization/LanguageMetadata.d.ts.map +1 -1
  269. package/src/core/localization/LanguageMetadata.js +6 -0
  270. package/src/core/localization/Localization.d.ts.map +1 -1
  271. package/src/core/localization/Localization.js +23 -10
  272. package/src/core/localization/LocalizationEngine.d.ts.map +1 -1
  273. package/src/core/localization/LocalizationEngine.js +4 -0
  274. package/src/core/math/fract.d.ts.map +1 -1
  275. package/src/core/math/fract.js +4 -3
  276. package/src/core/math/hash/squirrel3.d.ts +10 -2
  277. package/src/core/math/hash/squirrel3.d.ts.map +1 -1
  278. package/src/core/math/hash/squirrel3.js +16 -8
  279. package/src/core/math/linalg/m2/m2_polar_decomp_noS.d.ts +7 -0
  280. package/src/core/math/linalg/m2/m2_polar_decomp_noS.d.ts.map +1 -1
  281. package/src/core/math/linalg/m2/m2_polar_decomp_noS.js +20 -1
  282. package/src/core/math/physics/pdf/pdf_normal.d.ts +11 -3
  283. package/src/core/math/physics/pdf/pdf_normal.d.ts.map +1 -1
  284. package/src/core/math/physics/pdf/pdf_normal.js +25 -11
  285. package/src/core/math/solveQuadratic.d.ts.map +1 -1
  286. package/src/core/math/solveQuadratic.js +22 -3
  287. package/src/core/math/statistics/computeStatisticalPartialMedian.d.ts +9 -2
  288. package/src/core/math/statistics/computeStatisticalPartialMedian.d.ts.map +1 -1
  289. package/src/core/math/statistics/computeStatisticalPartialMedian.js +12 -6
  290. package/src/core/math/statistics/computeStatisticalPercentile.d.ts.map +1 -1
  291. package/src/core/math/statistics/computeStatisticalPercentile.js +9 -2
  292. package/src/core/math/statistics/gaussian_amplitude.d.ts +10 -1
  293. package/src/core/math/statistics/gaussian_amplitude.d.ts.map +1 -1
  294. package/src/core/math/statistics/gaussian_amplitude.js +20 -15
  295. package/src/core/model/BooleanVector3.d.ts.map +1 -1
  296. package/src/core/model/BooleanVector3.js +18 -2
  297. package/src/core/model/BoundedValue.d.ts +9 -0
  298. package/src/core/model/BoundedValue.d.ts.map +1 -1
  299. package/src/core/model/BoundedValue.js +30 -3
  300. package/src/core/model/ObservedBoolean.d.ts.map +1 -1
  301. package/src/core/model/ObservedBoolean.js +22 -2
  302. package/src/core/model/ObservedEnum.d.ts.map +1 -1
  303. package/src/core/model/ObservedEnum.js +6 -2
  304. package/src/core/model/node-graph/NodeGraph.d.ts +6 -1
  305. package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
  306. package/src/core/model/node-graph/NodeGraph.js +22 -4
  307. package/src/core/model/node-graph/json/deserializeNodeGraphFromJSON.d.ts.map +1 -1
  308. package/src/core/model/node-graph/json/deserializeNodeGraphFromJSON.js +3 -1
  309. package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts.map +1 -1
  310. package/src/core/model/node-graph/json/serializeNodeGraphToJSON.js +5 -0
  311. package/src/core/model/node-graph/type/DataType.d.ts.map +1 -1
  312. package/src/core/model/node-graph/type/DataType.js +8 -0
  313. package/src/core/model/node-graph/type/ParametricDataType.d.ts.map +1 -1
  314. package/src/core/model/node-graph/type/ParametricDataType.js +19 -0
  315. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
  316. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +5 -0
  317. package/src/core/model/reactive/js/compileReactiveToJS.d.ts +22 -0
  318. package/src/core/model/reactive/js/compileReactiveToJS.d.ts.map +1 -1
  319. package/src/core/model/reactive/js/compileReactiveToJS.js +113 -219
  320. package/src/core/model/reactive/model/ReactiveBinaryExpression.d.ts.map +1 -1
  321. package/src/core/model/reactive/model/ReactiveBinaryExpression.js +8 -2
  322. package/src/core/model/reactive/model/comparative/ReactiveEquals.d.ts.map +1 -1
  323. package/src/core/model/reactive/model/comparative/ReactiveEquals.js +3 -1
  324. package/src/core/model/reactive/model/comparative/ReactiveNotEquals.d.ts.map +1 -1
  325. package/src/core/model/reactive/model/comparative/ReactiveNotEquals.js +2 -1
  326. package/src/core/model/reactive/model/terminal/ReactiveLiteralString.d.ts.map +1 -1
  327. package/src/core/model/reactive/model/terminal/ReactiveLiteralString.js +4 -2
  328. package/src/core/model/stat/Stat.d.ts.map +1 -1
  329. package/src/core/model/stat/Stat.js +4 -0
  330. package/src/core/parser/seedVariablesIntoTemplateString.d.ts.map +1 -1
  331. package/src/core/parser/seedVariablesIntoTemplateString.js +5 -0
  332. package/src/core/parser/simple/readArrayLiteral.d.ts.map +1 -1
  333. package/src/core/parser/simple/readArrayLiteral.js +7 -0
  334. package/src/core/parser/simple/readHexToken.d.ts +3 -0
  335. package/src/core/parser/simple/readHexToken.d.ts.map +1 -1
  336. package/src/core/parser/simple/readHexToken.js +39 -106
  337. package/src/core/parser/simple/readNumberToken.d.ts.map +1 -1
  338. package/src/core/parser/simple/readNumberToken.js +13 -4
  339. package/src/core/parser/simple/readUnsignedIntegerToken.d.ts +2 -0
  340. package/src/core/parser/simple/readUnsignedIntegerToken.d.ts.map +1 -1
  341. package/src/core/parser/simple/readUnsignedIntegerToken.js +31 -71
  342. package/src/core/parser/simple/read_digits.d.ts +31 -0
  343. package/src/core/parser/simple/read_digits.d.ts.map +1 -0
  344. package/src/core/parser/simple/read_digits.js +74 -0
  345. package/src/core/primitives/numbers/number_format_by_thousands.d.ts.map +1 -1
  346. package/src/core/primitives/numbers/number_format_by_thousands.js +16 -1
  347. package/src/core/primitives/numbers/number_pretty_print.d.ts.map +1 -1
  348. package/src/core/primitives/numbers/number_pretty_print.js +6 -1
  349. package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
  350. package/src/core/process/executor/ConcurrentExecutor.js +36 -0
  351. package/src/core/process/task/Task.d.ts +8 -0
  352. package/src/core/process/task/Task.d.ts.map +1 -1
  353. package/src/core/process/task/Task.js +12 -1
  354. package/src/core/process/task/TaskGroup.d.ts +6 -0
  355. package/src/core/process/task/TaskGroup.d.ts.map +1 -1
  356. package/src/core/process/task/TaskGroup.js +7 -1
  357. package/src/core/process/undo/ActionProcessor.d.ts +12 -0
  358. package/src/core/process/undo/ActionProcessor.d.ts.map +1 -1
  359. package/src/core/process/undo/ActionProcessor.js +41 -15
  360. package/src/core/process/worker/OnDemandWorkerManager.d.ts.map +1 -1
  361. package/src/core/process/worker/OnDemandWorkerManager.js +6 -1
  362. package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
  363. package/src/core/process/worker/WorkerBuilder.js +27 -5
  364. package/src/engine/Clock.d.ts.map +1 -1
  365. package/src/engine/Clock.js +11 -0
  366. package/src/engine/Engine.d.ts.map +1 -1
  367. package/src/engine/Engine.js +107 -6
  368. package/src/engine/achievements/AchievementManager.d.ts.map +1 -1
  369. package/src/engine/achievements/AchievementManager.js +16 -1
  370. package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
  371. package/src/engine/animation/clip/ecd_bind_animation_curve.js +17 -6
  372. package/src/engine/animation/clip/hemisphere_align_quaternion_values.d.ts +19 -10
  373. package/src/engine/animation/clip/hemisphere_align_quaternion_values.d.ts.map +1 -1
  374. package/src/engine/animation/clip/hemisphere_align_quaternion_values.js +19 -23
  375. package/src/engine/animation/keyed2/AnimationTrackPlayback.d.ts +1 -1
  376. package/src/engine/animation/keyed2/AnimationTrackPlayback.d.ts.map +1 -1
  377. package/src/engine/animation/keyed2/AnimationTrackPlayback.js +21 -4
  378. package/src/engine/asset/AssetManager.d.ts.map +1 -1
  379. package/src/engine/asset/AssetManager.js +11 -3
  380. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +1 -0
  381. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  382. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +28 -0
  383. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  384. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +14 -0
  385. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +23 -2
  386. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  387. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2122 -2078
  388. package/src/engine/ecs/Entity.d.ts.map +1 -1
  389. package/src/engine/ecs/Entity.js +43 -7
  390. package/src/engine/ecs/EntityBlueprint.d.ts.map +1 -1
  391. package/src/engine/ecs/EntityBlueprint.js +13 -4
  392. package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
  393. package/src/engine/ecs/EntityComponentDataset.js +95 -9
  394. package/src/engine/ecs/EntityManager.d.ts +16 -0
  395. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  396. package/src/engine/ecs/EntityManager.js +112 -37
  397. package/src/engine/ecs/EntityObserver.d.ts +7 -0
  398. package/src/engine/ecs/EntityObserver.d.ts.map +1 -1
  399. package/src/engine/ecs/EntityObserver.js +8 -1
  400. package/src/engine/ecs/System.d.ts +23 -0
  401. package/src/engine/ecs/System.d.ts.map +1 -1
  402. package/src/engine/ecs/System.js +25 -0
  403. package/src/engine/ecs/components/Tag.d.ts.map +1 -1
  404. package/src/engine/ecs/components/Tag.js +4 -1
  405. package/src/engine/ecs/computeComponentClassName.d.ts +13 -1
  406. package/src/engine/ecs/computeComponentClassName.d.ts.map +1 -1
  407. package/src/engine/ecs/computeComponentClassName.js +11 -1
  408. package/src/engine/ecs/dynamic_actions/DynamicActorSystem.d.ts.map +1 -1
  409. package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +11 -0
  410. package/src/engine/ecs/fow/FogOfWar.d.ts.map +1 -1
  411. package/src/engine/ecs/fow/FogOfWar.js +37 -11
  412. package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
  413. package/src/engine/ecs/parent/EntityNode.js +8 -0
  414. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  415. package/src/engine/ecs/speaker/VoiceSystem.js +9 -0
  416. package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.d.ts +15 -0
  417. package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.d.ts.map +1 -1
  418. package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.js +18 -0
  419. package/src/engine/ecs/system/AbstractContextSystem.d.ts.map +1 -1
  420. package/src/engine/ecs/system/AbstractContextSystem.js +14 -4
  421. package/src/engine/ecs/system/SystemEntityContext.d.ts +12 -0
  422. package/src/engine/ecs/system/SystemEntityContext.d.ts.map +1 -1
  423. package/src/engine/ecs/system/SystemEntityContext.js +23 -0
  424. package/src/engine/ecs/system_validate_class.d.ts.map +1 -1
  425. package/src/engine/ecs/system_validate_class.js +6 -2
  426. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +37 -8
  427. package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
  428. package/src/engine/ecs/terrain/tiles/TerrainTile.js +45 -3
  429. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
  430. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +5 -8
  431. package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
  432. package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +62 -7
  433. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.d.ts +9 -0
  434. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.d.ts.map +1 -1
  435. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.js +13 -0
  436. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.d.ts +11 -0
  437. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.d.ts.map +1 -1
  438. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.js +78 -13
  439. package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.d.ts.map +1 -1
  440. package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.js +22 -8
  441. package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.d.ts.map +1 -1
  442. package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.js +18 -2
  443. package/src/engine/graphics/geometry/geometry_construct_triangle_normal.d.ts +3 -1
  444. package/src/engine/graphics/geometry/geometry_construct_triangle_normal.d.ts.map +1 -1
  445. package/src/engine/graphics/geometry/geometry_construct_triangle_normal.js +3 -1
  446. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +32 -0
  447. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -0
  448. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +53 -0
  449. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +22 -2
  450. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
  451. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1201 -1160
  452. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts +0 -1
  453. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +1 -1
  454. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +10 -5
  455. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts.map +1 -1
  456. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.js +23 -0
  457. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts +1 -1
  458. package/src/engine/graphics/sh3/path_tracer/texture/apply_texture_clamping_to_coordinate.d.ts.map +1 -1
  459. package/src/engine/graphics/sh3/path_tracer/texture/apply_texture_clamping_to_coordinate.js +6 -1
  460. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
  461. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +20 -0
  462. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +1 -0
  463. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  464. package/src/engine/graphics/texture/atlas/TextureAtlas.js +24 -5
  465. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
  466. package/src/engine/graphics/texture/sampler/Sampler2D.js +14 -1
  467. package/src/engine/graphics/texture/sampler/sampler2d_sub_copy_same_item_size.d.ts.map +1 -1
  468. package/src/engine/graphics/texture/sampler/sampler2d_sub_copy_same_item_size.js +16 -5
  469. package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.d.ts.map +1 -1
  470. package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.js +29 -8
  471. package/src/engine/graphics/texture/sampler/serialization/TextureBinaryBufferSerializer.d.ts.map +1 -1
  472. package/src/engine/graphics/texture/sampler/serialization/TextureBinaryBufferSerializer.js +8 -3
  473. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
  474. package/src/engine/graphics3/DebugDrawSystem.js +6 -2
  475. package/src/engine/graphics3/DecalSystem.d.ts +5 -4
  476. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  477. package/src/engine/graphics3/DecalSystem.js +5 -4
  478. package/src/engine/graphics3/GraphicsEngine.d.ts +40 -7
  479. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  480. package/src/engine/graphics3/GraphicsEngine.js +92 -7
  481. package/src/engine/graphics3/MeshSystem.d.ts +7 -0
  482. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  483. package/src/engine/graphics3/MeshSystem.js +681 -661
  484. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +1 -0
  485. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
  486. package/src/engine/graphics3/ParticleEmitterSystem.js +1 -0
  487. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
  488. package/src/engine/graphics3/PathDisplaySystem.js +311 -307
  489. package/src/engine/graphics3/TerrainSystem.d.ts +10 -40
  490. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
  491. package/src/engine/graphics3/TerrainSystem.js +186 -185
  492. package/src/engine/graphics3/Trail3DSystem.d.ts +28 -19
  493. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  494. package/src/engine/graphics3/Trail3DSystem.js +57 -64
  495. package/src/engine/graphics3/debug/gizmo_write_geometry.d.ts.map +1 -1
  496. package/src/engine/graphics3/debug/gizmo_write_geometry.js +7 -59
  497. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  498. package/src/engine/graphics3/decal/GPUDecalRenderer.js +23 -7
  499. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  500. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +29 -6
  501. package/src/engine/graphics3/path/tube_stream_write_geometry.d.ts.map +1 -1
  502. package/src/engine/graphics3/path/tube_stream_write_geometry.js +7 -56
  503. package/src/engine/graphics3/register_instance_animation.d.ts +3 -3
  504. package/src/engine/graphics3/register_instance_animation.js +3 -3
  505. package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.d.ts +77 -0
  506. package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.d.ts.map +1 -0
  507. package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.js +485 -0
  508. package/src/engine/graphics3/terrain/TerrainShadeMaterial.d.ts +103 -0
  509. package/src/engine/graphics3/terrain/TerrainShadeMaterial.d.ts.map +1 -0
  510. package/src/engine/graphics3/terrain/TerrainShadeMaterial.js +130 -0
  511. package/src/engine/graphics3/terrain/chunk_terrain_material_surface.d.ts +23 -0
  512. package/src/engine/graphics3/terrain/chunk_terrain_material_surface.d.ts.map +1 -0
  513. package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +68 -0
  514. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +1 -1
  515. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +8 -59
  516. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
  517. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +10 -0
  518. package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
  519. package/src/engine/input/devices/PointerDevice.js +58 -5
  520. package/src/engine/input/ecs/ism/InputMapProgram.d.ts.map +1 -1
  521. package/src/engine/input/ecs/ism/InputMapProgram.js +13 -0
  522. package/src/engine/input/ecs/systems/InputControllerSystem.d.ts +1 -0
  523. package/src/engine/input/ecs/systems/InputControllerSystem.d.ts.map +1 -1
  524. package/src/engine/input/ecs/systems/InputControllerSystem.js +52 -2
  525. package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts.map +1 -1
  526. package/src/engine/intelligence/behavior/composite/ParallelBehavior.js +8 -0
  527. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.d.ts.map +1 -1
  528. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.js +7 -0
  529. package/src/engine/intelligence/behavior/decorator/RepeatUntilSuccessBehavior.d.ts.map +1 -1
  530. package/src/engine/intelligence/behavior/decorator/RepeatUntilSuccessBehavior.js +14 -0
  531. package/src/engine/intelligence/behavior/ecs/BehaviorSystem.d.ts.map +1 -1
  532. package/src/engine/intelligence/behavior/ecs/BehaviorSystem.js +13 -0
  533. package/src/engine/interpolation/InterpolationLog.d.ts +51 -4
  534. package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
  535. package/src/engine/interpolation/InterpolationLog.js +132 -2
  536. package/src/engine/interpolation/InterpolationSystem.d.ts +113 -35
  537. package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
  538. package/src/engine/interpolation/InterpolationSystem.js +674 -50
  539. package/src/engine/network/NetworkSession.d.ts +176 -47
  540. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  541. package/src/engine/network/NetworkSession.js +1462 -272
  542. package/src/engine/network/README.md +106 -3
  543. package/src/engine/network/SMOOTHNESS_DESIGN.md +392 -0
  544. package/src/engine/network/adapters/PoseCorrection.d.ts +50 -0
  545. package/src/engine/network/adapters/PoseCorrection.d.ts.map +1 -0
  546. package/src/engine/network/adapters/PoseCorrection.js +211 -0
  547. package/src/engine/network/adapters/TransformReplicationAdapter.d.ts +1 -0
  548. package/src/engine/network/adapters/TransformReplicationAdapter.d.ts.map +1 -1
  549. package/src/engine/network/adapters/TransformReplicationAdapter.js +17 -0
  550. package/src/engine/network/adapters/VelocityCorrection.d.ts +31 -0
  551. package/src/engine/network/adapters/VelocityCorrection.d.ts.map +1 -0
  552. package/src/engine/network/adapters/VelocityCorrection.js +71 -0
  553. package/src/engine/network/adapters/replicate_transform64.d.ts +13 -0
  554. package/src/engine/network/adapters/replicate_transform64.d.ts.map +1 -0
  555. package/src/engine/network/adapters/replicate_transform64.js +18 -0
  556. package/src/engine/network/adapters/rigid_body_of.d.ts +22 -0
  557. package/src/engine/network/adapters/rigid_body_of.d.ts.map +1 -0
  558. package/src/engine/network/adapters/rigid_body_of.js +33 -0
  559. package/src/engine/network/correction/Correction.d.ts +120 -0
  560. package/src/engine/network/correction/Correction.d.ts.map +1 -0
  561. package/src/engine/network/correction/Correction.js +143 -0
  562. package/src/engine/network/ecs/NetworkSystem.d.ts +36 -7
  563. package/src/engine/network/ecs/NetworkSystem.d.ts.map +1 -1
  564. package/src/engine/network/ecs/NetworkSystem.js +49 -7
  565. package/src/engine/network/orchestrator/NetworkPeer.d.ts +50 -1
  566. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  567. package/src/engine/network/orchestrator/NetworkPeer.js +143 -10
  568. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +38 -2
  569. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  570. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +58 -10
  571. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +68 -2
  572. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
  573. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +299 -18
  574. package/src/engine/network/replication/Replicator.d.ts +8 -1
  575. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  576. package/src/engine/network/replication/Replicator.js +50 -6
  577. package/src/engine/network/sim/ActionLog.d.ts +5 -2
  578. package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
  579. package/src/engine/network/sim/ActionLog.js +5 -2
  580. package/src/engine/network/sim/RewindEngine.d.ts.map +1 -1
  581. package/src/engine/network/sim/RewindEngine.js +6 -0
  582. package/src/engine/network/sim/SimActionExecutor.d.ts +48 -3
  583. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
  584. package/src/engine/network/sim/SimActionExecutor.js +152 -6
  585. package/src/engine/network/sim/SmoothingState.d.ts +54 -2
  586. package/src/engine/network/sim/SmoothingState.d.ts.map +1 -1
  587. package/src/engine/network/sim/SmoothingState.js +107 -3
  588. package/src/engine/network/state/MutationLedger.d.ts.map +1 -1
  589. package/src/engine/network/state/MutationLedger.js +18 -2
  590. package/src/engine/network/state/PredictionHistory.d.ts +67 -0
  591. package/src/engine/network/state/PredictionHistory.d.ts.map +1 -0
  592. package/src/engine/network/state/PredictionHistory.js +145 -0
  593. package/src/engine/network/time/RenderPlayout.d.ts +2 -1
  594. package/src/engine/network/time/RenderPlayout.d.ts.map +1 -1
  595. package/src/engine/network/time/RenderPlayout.js +174 -163
  596. package/src/engine/network/transport/DeferredTransport.d.ts +57 -0
  597. package/src/engine/network/transport/DeferredTransport.d.ts.map +1 -0
  598. package/src/engine/network/transport/DeferredTransport.js +143 -0
  599. package/src/engine/network/transport/LoopbackTransport.d.ts +8 -0
  600. package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -1
  601. package/src/engine/network/transport/LoopbackTransport.js +12 -1
  602. package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -1
  603. package/src/engine/network/transport/ReliableCommandPipeline.js +20 -0
  604. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
  605. package/src/engine/network/transport/adapters/NodeUDPTransport.js +11 -2
  606. package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -1
  607. package/src/engine/network/transport/adapters/WebTransportTransport.js +8 -1
  608. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts +2 -1
  609. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +1 -1
  610. package/src/engine/network/transport/fragments/FragmentAssembler.js +67 -3
  611. package/src/engine/network/transport/fragments/fragment_send.d.ts +8 -0
  612. package/src/engine/network/transport/fragments/fragment_send.d.ts.map +1 -1
  613. package/src/engine/network/transport/fragments/fragment_send.js +17 -7
  614. package/src/engine/network/transport/fragments/packet_size.d.ts +6 -0
  615. package/src/engine/network/transport/fragments/packet_size.d.ts.map +1 -1
  616. package/src/engine/network/transport/fragments/packet_size.js +6 -0
  617. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  618. package/src/engine/physics/ccd/linear_sweep.js +19 -1
  619. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +7 -3
  620. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  621. package/src/engine/physics/cloth/ecs/ClothWorld.js +34 -4
  622. package/src/engine/physics/cloth/solver/cloth_self_find.js +17 -0
  623. package/src/engine/physics/contact/ManifoldStore.d.ts +20 -1
  624. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
  625. package/src/engine/physics/contact/ManifoldStore.js +24 -2
  626. package/src/engine/physics/ecs/PhysicsSystem.d.ts +51 -88
  627. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  628. package/src/engine/physics/ecs/PhysicsSystem.js +82 -217
  629. package/src/engine/physics/ecs/is_sensor.d.ts +24 -0
  630. package/src/engine/physics/ecs/is_sensor.d.ts.map +1 -1
  631. package/src/engine/physics/ecs/is_sensor.js +39 -0
  632. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +18 -4
  633. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  634. package/src/engine/physics/fluid/ecs/FluidComponent.js +29 -8
  635. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  636. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +8 -0
  637. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  638. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +8 -0
  639. package/src/engine/physics/fluid/solver/NOTES.md +46 -0
  640. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +1 -1
  641. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +1 -1
  642. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +1 -1
  643. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +1 -1
  644. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +1 -1
  645. package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts.map +1 -1
  646. package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js +8 -0
  647. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -1
  648. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +8 -0
  649. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -1
  650. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +8 -0
  651. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts +5 -0
  652. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
  653. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +5 -0
  654. package/src/engine/physics/integration/integrate_velocity.d.ts +15 -0
  655. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
  656. package/src/engine/physics/integration/integrate_velocity.js +15 -0
  657. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
  658. package/src/engine/physics/island/IslandBuilder.js +6 -7
  659. package/src/engine/physics/mls-mpm/MLS_MPM.d.ts.map +1 -1
  660. package/src/engine/physics/mls-mpm/MLS_MPM.js +29 -13
  661. package/src/engine/physics/mls-mpm/mls_mpm_demo_scene.d.ts +29 -0
  662. package/src/engine/physics/mls-mpm/mls_mpm_demo_scene.d.ts.map +1 -0
  663. package/src/engine/physics/mls-mpm/mls_mpm_demo_scene.js +44 -0
  664. package/src/engine/physics/mls-mpm/testMLS_MPM.js +3 -3
  665. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  666. package/src/engine/physics/narrowphase/narrowphase_step.js +74 -11
  667. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
  668. package/src/engine/physics/queries/overlap_shape.js +92 -45
  669. package/src/engine/physics/queries/raycast.d.ts.map +1 -1
  670. package/src/engine/physics/queries/raycast.js +55 -43
  671. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
  672. package/src/engine/physics/queries/shape_cast.js +185 -174
  673. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
  674. package/src/engine/physics/solver/solve_contacts.js +42 -19
  675. package/src/engine/plugin/EnginePluginManager.d.ts +10 -0
  676. package/src/engine/plugin/EnginePluginManager.d.ts.map +1 -1
  677. package/src/engine/plugin/EnginePluginManager.js +54 -1
  678. package/src/engine/plugin/PluginReferenceContext.d.ts.map +1 -1
  679. package/src/engine/plugin/PluginReferenceContext.js +7 -3
  680. package/src/engine/reference/v2/Reference.d.ts +9 -0
  681. package/src/engine/reference/v2/Reference.d.ts.map +1 -1
  682. package/src/engine/reference/v2/Reference.js +39 -2
  683. package/src/engine/simulation/Ticker.d.ts.map +1 -1
  684. package/src/engine/simulation/Ticker.js +20 -1
  685. package/src/engine/sound/ecs/SoundListenerSystem.d.ts +27 -0
  686. package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
  687. package/src/engine/sound/ecs/SoundListenerSystem.js +82 -21
  688. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  689. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +394 -356
  690. package/src/engine/sound/material/concrete/SoundMaterialComposition.d.ts.map +1 -1
  691. package/src/engine/sound/material/concrete/SoundMaterialComposition.js +54 -17
  692. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.d.ts.map +1 -1
  693. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +34 -3
  694. package/src/engine/sound/simulation/core/AcousticSolution.d.ts +5 -0
  695. package/src/engine/sound/simulation/core/AcousticSolution.d.ts.map +1 -1
  696. package/src/engine/sound/simulation/core/AcousticSolution.js +5 -0
  697. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts +8 -0
  698. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
  699. package/src/engine/sound/simulation/definition/AcousticMaterial.js +8 -0
  700. package/src/engine/sound/simulation/probe/probe_visibility_augment.d.ts +6 -4
  701. package/src/engine/sound/simulation/probe/probe_visibility_augment.d.ts.map +1 -1
  702. package/src/engine/sound/simulation/probe/probe_visibility_augment.js +19 -7
  703. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts +39 -0
  704. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts.map +1 -1
  705. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.js +130 -1
  706. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +3 -2
  707. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -1
  708. package/src/engine/sound/simulation/render/ProbeReverbRenderer.js +15 -1
  709. package/src/engine/sound/sopra/SopraEngine.d.ts +10 -0
  710. package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
  711. package/src/engine/sound/sopra/SopraEngine.js +486 -440
  712. package/src/engine/sound/sopra/runtime/BusGraph.d.ts +29 -0
  713. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
  714. package/src/engine/sound/sopra/runtime/BusGraph.js +69 -2
  715. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
  716. package/src/engine/sound/sopra/runtime/EventInstance.js +130 -9
  717. package/src/engine/ui/GUIEngine.d.ts +14 -0
  718. package/src/engine/ui/GUIEngine.d.ts.map +1 -1
  719. package/src/engine/ui/GUIEngine.js +52 -4
  720. package/src/format/image/avif/api/apply_transformations.d.ts +2 -1
  721. package/src/format/image/avif/api/apply_transformations.d.ts.map +1 -1
  722. package/src/format/image/avif/api/apply_transformations.js +129 -120
  723. package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
  724. package/src/format/image/avif/api/convert_to_rgba.js +35 -2
  725. package/src/format/image/avif/api/decode_image_item.d.ts +2 -1
  726. package/src/format/image/avif/api/decode_image_item.d.ts.map +1 -1
  727. package/src/format/image/avif/api/decode_image_item.js +322 -234
  728. package/src/format/image/avif/av1/decode/decode_av1_still.js +329 -309
  729. package/src/format/image/avif/av1/encode/encode_tile.js +2349 -2331
  730. package/src/format/image/avif/av1/entropy/symbol_cost.d.ts.map +1 -1
  731. package/src/format/image/avif/av1/entropy/symbol_cost.js +86 -76
  732. package/src/format/image/avif/heif/AvifFile.d.ts +11 -0
  733. package/src/format/image/avif/heif/AvifFile.d.ts.map +1 -1
  734. package/src/format/image/avif/heif/AvifFile.js +154 -142
  735. package/src/format/image/avif/heif/find_item_properties.d.ts +23 -0
  736. package/src/format/image/avif/heif/find_item_properties.d.ts.map +1 -0
  737. package/src/format/image/avif/heif/find_item_properties.js +36 -0
  738. package/src/format/image/avif/heif/parse_avif_file.js +6 -3
  739. package/src/format/image/avif/heif/read_item_data.d.ts.map +1 -1
  740. package/src/format/image/avif/heif/read_item_data.js +131 -97
  741. package/src/format/image/jpeg/decodeScan.d.ts.map +1 -1
  742. package/src/format/image/jpeg/decodeScan.js +17 -0
  743. package/src/format/scene/gltf/gltf_parse_container.d.ts.map +1 -1
  744. package/src/format/scene/gltf/gltf_parse_container.js +61 -41
  745. package/src/format/scene/gltf/gltf_read_accessor.d.ts +21 -0
  746. package/src/format/scene/gltf/gltf_read_accessor.d.ts.map +1 -1
  747. package/src/format/scene/gltf/gltf_read_accessor.js +37 -0
  748. package/src/format/scene/usd/usd_compose_transform.d.ts.map +1 -1
  749. package/src/format/scene/usd/usd_compose_transform.js +56 -6
  750. package/src/format/texture/basis/transcode/fit_endpoints.d.ts +6 -0
  751. package/src/format/texture/basis/transcode/fit_endpoints.d.ts.map +1 -1
  752. package/src/format/texture/basis/transcode/fit_endpoints.js +33 -39
  753. package/src/generation/filtering/numeric/CellFilterCache.d.ts +17 -0
  754. package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
  755. package/src/generation/filtering/numeric/CellFilterCache.js +36 -3
  756. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts +9 -0
  757. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts.map +1 -1
  758. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +37 -6
  759. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
  760. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +8 -21
  761. package/src/generation/grid/actions/grid_obstacle_write_grid_point.d.ts +28 -0
  762. package/src/generation/grid/actions/grid_obstacle_write_grid_point.d.ts.map +1 -0
  763. package/src/generation/grid/actions/grid_obstacle_write_grid_point.js +41 -0
  764. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts +15 -1
  765. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
  766. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +17 -3
  767. package/src/generation/markers/actions/MarkerNodeProcessingRuleSet.d.ts.map +1 -1
  768. package/src/generation/markers/actions/MarkerNodeProcessingRuleSet.js +16 -1
  769. package/src/generation/placement/action/GridCellActionWriteFilterToLayer.d.ts.map +1 -1
  770. package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +8 -1
  771. package/src/generation/theme/TerrainTheme.d.ts.map +1 -1
  772. package/src/generation/theme/TerrainTheme.js +20 -1
  773. package/src/shade/RENDERER_CONTRACT.md +63 -8
  774. package/src/shade/descriptor/texture/format/gpu_texture_formats_copy_compatible.d.ts +23 -0
  775. package/src/shade/descriptor/texture/format/gpu_texture_formats_copy_compatible.d.ts.map +1 -0
  776. package/src/shade/descriptor/texture/format/gpu_texture_formats_copy_compatible.js +28 -0
  777. package/src/shade/descriptor/texture/format/gpu_texture_formats_view_compatible.d.ts +25 -0
  778. package/src/shade/descriptor/texture/format/gpu_texture_formats_view_compatible.d.ts.map +1 -0
  779. package/src/shade/descriptor/texture/format/gpu_texture_formats_view_compatible.js +42 -0
  780. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +5 -0
  781. package/src/shade/device/ShadeGPUCommandContext.d.ts +15 -2
  782. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  783. package/src/shade/device/ShadeGPUCommandContext.js +1003 -857
  784. package/src/shade/device/mock/SoftwareGPUBindGroup.d.ts +38 -1
  785. package/src/shade/device/mock/SoftwareGPUBindGroup.d.ts.map +1 -1
  786. package/src/shade/device/mock/SoftwareGPUBindGroup.js +73 -1
  787. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts.map +1 -1
  788. package/src/shade/device/mock/SoftwareGPUBuffer.js +5 -0
  789. package/src/shade/device/mock/SoftwareGPUCommandBuffer.d.ts +34 -0
  790. package/src/shade/device/mock/SoftwareGPUCommandBuffer.d.ts.map +1 -1
  791. package/src/shade/device/mock/SoftwareGPUCommandBuffer.js +71 -1
  792. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +15 -0
  793. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
  794. package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +109 -1
  795. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
  796. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +51 -0
  797. package/src/shade/device/mock/SoftwareGPUDevice.d.ts +5 -1
  798. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  799. package/src/shade/device/mock/SoftwareGPUDevice.js +58 -1
  800. package/src/shade/device/mock/SoftwareGPUPipeline.d.ts +1 -0
  801. package/src/shade/device/mock/SoftwareGPUPipeline.d.ts.map +1 -1
  802. package/src/shade/device/mock/SoftwareGPUPipeline.js +17 -11
  803. package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
  804. package/src/shade/device/mock/SoftwareGPUQueue.js +41 -0
  805. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  806. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +24 -0
  807. package/src/shade/device/mock/SoftwareGPUTexture.d.ts +11 -1
  808. package/src/shade/device/mock/SoftwareGPUTexture.d.ts.map +1 -1
  809. package/src/shade/device/mock/SoftwareGPUTexture.js +45 -8
  810. package/src/shade/device/mock/SoftwareGPUTextureView.d.ts +20 -1
  811. package/src/shade/device/mock/SoftwareGPUTextureView.d.ts.map +1 -1
  812. package/src/shade/device/mock/SoftwareGPUTextureView.js +28 -1
  813. package/src/shade/device/mock/recorded_binding_kind_mismatches.d.ts +20 -0
  814. package/src/shade/device/mock/recorded_binding_kind_mismatches.d.ts.map +1 -0
  815. package/src/shade/device/mock/recorded_binding_kind_mismatches.js +84 -0
  816. package/src/shade/device/mock/texture_copy.d.ts.map +1 -1
  817. package/src/shade/device/mock/texture_copy.js +41 -3
  818. package/src/shade/device/mock/texture_view_resource.d.ts +26 -0
  819. package/src/shade/device/mock/texture_view_resource.d.ts.map +1 -0
  820. package/src/shade/device/mock/texture_view_resource.js +47 -0
  821. package/src/shade/device/timing/GPUTimer.d.ts.map +1 -1
  822. package/src/shade/device/timing/GPUTimer.js +35 -21
  823. package/src/shade/playground/caldera/caldera_format.d.ts +28 -1
  824. package/src/shade/playground/caldera/caldera_format.d.ts.map +1 -1
  825. package/src/shade/playground/caldera/caldera_format.js +37 -0
  826. package/src/shade/playground/caldera/main.js +12 -2
  827. package/src/shade/playground/frame_rate_meter.d.ts +92 -0
  828. package/src/shade/playground/frame_rate_meter.d.ts.map +1 -0
  829. package/src/shade/playground/frame_rate_meter.js +147 -0
  830. package/src/shade/playground/particle_ecs/main.js +53 -7
  831. package/src/shade/playground/particle_ecs/moonlit_environment.js +2 -2
  832. package/src/shade/playground/particle_stats_readback.d.ts +58 -0
  833. package/src/shade/playground/particle_stats_readback.d.ts.map +1 -0
  834. package/src/shade/playground/particle_stats_readback.js +83 -0
  835. package/src/shade/playground/particle_system/main.js +378 -325
  836. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  837. package/src/shade/playground/skinned_blas_refit/main.js +7 -2
  838. package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
  839. package/src/shade/playground/sponza_path_trace/main.js +398 -393
  840. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  841. package/src/shade/playground/volumetrics_froxel/main.js +941 -936
  842. package/src/shade/renderer/GraphicsContext.d.ts +9 -1
  843. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  844. package/src/shade/renderer/GraphicsContext.js +61 -17
  845. package/src/shade/renderer/Renderer.d.ts +66 -5
  846. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  847. package/src/shade/renderer/Renderer.js +337 -29
  848. package/src/shade/renderer/animation/ANIMATION_CLIP_STATE_STRUCT.d.ts +4 -7
  849. package/src/shade/renderer/animation/ANIMATION_CLIP_STATE_STRUCT.d.ts.map +1 -1
  850. package/src/shade/renderer/animation/ANIMATION_CLIP_STATE_STRUCT.js +19 -16
  851. package/src/shade/renderer/animation/ANIMATION_CURVE_HEADER_STRUCT.js +11 -11
  852. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +14 -18
  853. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
  854. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +95 -24
  855. package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_STRUCT.d.ts +5 -4
  856. package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_STRUCT.d.ts.map +1 -1
  857. package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_STRUCT.js +7 -4
  858. package/src/shade/renderer/animation/ANIMATION_SKIN_STRUCT.d.ts +6 -12
  859. package/src/shade/renderer/animation/ANIMATION_SKIN_STRUCT.d.ts.map +1 -1
  860. package/src/shade/renderer/animation/ANIMATION_SKIN_STRUCT.js +9 -16
  861. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts +6 -5
  862. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
  863. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +12 -5
  864. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +83 -95
  865. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  866. package/src/shade/renderer/animation/GPUAnimationManager.js +496 -629
  867. package/src/shade/renderer/animation/chunk_animation_curve_evaluate.d.ts +10 -14
  868. package/src/shade/renderer/animation/chunk_animation_curve_evaluate.d.ts.map +1 -1
  869. package/src/shade/renderer/animation/chunk_animation_curve_evaluate.js +40 -67
  870. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  871. package/src/shade/renderer/animation/chunk_pose_accumulator.js +13 -4
  872. package/src/shade/renderer/animation/shader_animation_apply.d.ts +14 -8
  873. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  874. package/src/shade/renderer/animation/shader_animation_apply.js +129 -128
  875. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
  876. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -2
  877. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
  878. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +3 -2
  879. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts +12 -7
  880. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  881. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +107 -104
  882. package/src/shade/renderer/binding/BindingResource.d.ts +36 -1
  883. package/src/shade/renderer/binding/BindingResource.d.ts.map +1 -1
  884. package/src/shade/renderer/binding/BindingResource.js +36 -3
  885. package/src/shade/renderer/binding/BufferBinding.d.ts +8 -0
  886. package/src/shade/renderer/binding/BufferBinding.d.ts.map +1 -1
  887. package/src/shade/renderer/binding/BufferBinding.js +21 -0
  888. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.d.ts +11 -2
  889. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.d.ts.map +1 -1
  890. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.js +95 -13
  891. package/src/shade/renderer/buffer/GPUBufferUploadAllocator.d.ts +60 -0
  892. package/src/shade/renderer/buffer/GPUBufferUploadAllocator.d.ts.map +1 -0
  893. package/src/shade/renderer/buffer/GPUBufferUploadAllocator.js +202 -0
  894. package/src/shade/renderer/buffer/GPUUploadBlock.d.ts +68 -0
  895. package/src/shade/renderer/buffer/GPUUploadBlock.d.ts.map +1 -0
  896. package/src/shade/renderer/buffer/GPUUploadBlock.js +97 -0
  897. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +19 -0
  898. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  899. package/src/shade/renderer/buffer/table/GPUDatabase.js +114 -1
  900. package/src/shade/renderer/buffer/table/GPUDatabaseDefinition.d.ts +132 -1
  901. package/src/shade/renderer/buffer/table/GPUDatabaseDefinition.d.ts.map +1 -1
  902. package/src/shade/renderer/buffer/table/GPUDatabaseDefinition.js +384 -1
  903. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -1
  904. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1332 -1323
  905. package/src/shade/renderer/buffer/table/GPUTableLink.d.ts +67 -0
  906. package/src/shade/renderer/buffer/table/GPUTableLink.d.ts.map +1 -0
  907. package/src/shade/renderer/buffer/table/GPUTableLink.js +76 -0
  908. package/src/shade/renderer/buffer/table/GPUTableRange.d.ts +72 -0
  909. package/src/shade/renderer/buffer/table/GPUTableRange.d.ts.map +1 -0
  910. package/src/shade/renderer/buffer/table/GPUTableRange.js +82 -0
  911. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +106 -5
  912. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  913. package/src/shade/renderer/buffer/table/GPUTypedTable.js +444 -28
  914. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
  915. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +28 -5
  916. package/src/shade/renderer/buffer/table/GPU_DATABASE_NULL.d.ts +14 -0
  917. package/src/shade/renderer/buffer/table/GPU_DATABASE_NULL.d.ts.map +1 -0
  918. package/src/shade/renderer/buffer/table/GPU_DATABASE_NULL.js +13 -0
  919. package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts +80 -0
  920. package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -0
  921. package/src/shade/renderer/buffer/table/gpu_database_check_links.js +456 -0
  922. package/src/shade/renderer/buffer/table/gpu_table_field_word.d.ts +17 -0
  923. package/src/shade/renderer/buffer/table/gpu_table_field_word.d.ts.map +1 -0
  924. package/src/shade/renderer/buffer/table/gpu_table_field_word.js +111 -0
  925. package/src/shade/renderer/buffer/table/gpu_table_range_well_formed.d.ts +20 -0
  926. package/src/shade/renderer/buffer/table/gpu_table_range_well_formed.d.ts.map +1 -0
  927. package/src/shade/renderer/buffer/table/gpu_table_range_well_formed.js +27 -0
  928. package/src/shade/renderer/camera/CameraManager.d.ts +11 -0
  929. package/src/shade/renderer/camera/CameraManager.d.ts.map +1 -1
  930. package/src/shade/renderer/camera/CameraManager.js +18 -0
  931. package/src/shade/renderer/create_frame_loop.d.ts +16 -0
  932. package/src/shade/renderer/create_frame_loop.d.ts.map +1 -1
  933. package/src/shade/renderer/create_frame_loop.js +16 -0
  934. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts +23 -0
  935. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts.map +1 -1
  936. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.js +27 -32
  937. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.d.ts +9 -7
  938. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.d.ts.map +1 -1
  939. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.js +16 -108
  940. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.d.ts +135 -0
  941. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.d.ts.map +1 -0
  942. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.js +296 -0
  943. package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.d.ts +22 -9
  944. package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.d.ts.map +1 -1
  945. package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.js +30 -138
  946. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  947. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +185 -167
  948. package/src/shade/renderer/dynamic/GPUDynamicMeshResidencyTable.d.ts +49 -0
  949. package/src/shade/renderer/dynamic/GPUDynamicMeshResidencyTable.d.ts.map +1 -0
  950. package/src/shade/renderer/dynamic/GPUDynamicMeshResidencyTable.js +185 -0
  951. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +24 -0
  952. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -0
  953. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +49 -0
  954. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.d.ts +18 -0
  955. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.d.ts.map +1 -0
  956. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.js +54 -0
  957. package/src/shade/renderer/dynamic/dynamic_mesh_live_bounds.d.ts +26 -0
  958. package/src/shade/renderer/dynamic/dynamic_mesh_live_bounds.d.ts.map +1 -0
  959. package/src/shade/renderer/dynamic/dynamic_mesh_live_bounds.js +96 -0
  960. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +102 -0
  961. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -0
  962. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +364 -0
  963. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  964. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +153 -177
  965. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +20 -0
  966. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -0
  967. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +136 -0
  968. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_occupancy.d.ts +20 -0
  969. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_occupancy.d.ts.map +1 -0
  970. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_occupancy.js +106 -0
  971. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +32 -0
  972. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -0
  973. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +163 -0
  974. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +13 -2
  975. package/src/shade/renderer/fow/GPUFogOfWarRenderer.d.ts.map +1 -1
  976. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +5 -14
  977. package/src/shade/renderer/fow/fow_obtain_mask.d.ts +17 -0
  978. package/src/shade/renderer/fow/fow_obtain_mask.d.ts.map +1 -0
  979. package/src/shade/renderer/fow/fow_obtain_mask.js +41 -0
  980. package/src/shade/renderer/frame_jitter_applies.d.ts +21 -0
  981. package/src/shade/renderer/frame_jitter_applies.d.ts.map +1 -0
  982. package/src/shade/renderer/frame_jitter_applies.js +23 -0
  983. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  984. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +128 -3
  985. package/src/shade/renderer/geometry/geometry_obtain_attribute.d.ts +42 -0
  986. package/src/shade/renderer/geometry/geometry_obtain_attribute.d.ts.map +1 -0
  987. package/src/shade/renderer/geometry/geometry_obtain_attribute.js +83 -0
  988. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +12 -0
  989. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  990. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +65 -0
  991. package/src/shade/renderer/geometry/meshlet/build/geometry_to_meshlets_greedy.d.ts.map +1 -1
  992. package/src/shade/renderer/geometry/meshlet/build/geometry_to_meshlets_greedy.js +4 -1
  993. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +5 -0
  994. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
  995. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +23 -1
  996. package/src/shade/renderer/geometry/normals/encode_normals_to_octahedral_u32.d.ts.map +1 -1
  997. package/src/shade/renderer/geometry/normals/encode_normals_to_octahedral_u32.js +4 -1
  998. package/src/shade/renderer/geometry/normals/geometry_build_tangents.d.ts.map +1 -1
  999. package/src/shade/renderer/geometry/normals/geometry_build_tangents.js +39 -1
  1000. package/src/shade/renderer/geometry/util/geometry_merge.d.ts.map +1 -1
  1001. package/src/shade/renderer/geometry/util/geometry_merge.js +18 -2
  1002. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +77 -39
  1003. package/src/shade/renderer/geometry/virtual/build/gltf/gltf_collect_geometries.d.ts.map +1 -1
  1004. package/src/shade/renderer/geometry/virtual/build/gltf/gltf_collect_geometries.js +31 -2
  1005. package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts +18 -0
  1006. package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts.map +1 -1
  1007. package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.js +19 -0
  1008. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts +8 -0
  1009. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts.map +1 -1
  1010. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.js +9 -0
  1011. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
  1012. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +10 -1
  1013. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
  1014. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +4 -0
  1015. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -1
  1016. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +12 -0
  1017. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
  1018. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +10 -1
  1019. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +21 -0
  1020. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  1021. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +33 -1
  1022. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  1023. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +63 -2
  1024. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +17 -0
  1025. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
  1026. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +39 -0
  1027. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  1028. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +7 -0
  1029. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode.d.ts.map +1 -1
  1030. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode.js +23 -2
  1031. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.d.ts.map +1 -1
  1032. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.js +22 -1
  1033. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode.d.ts.map +1 -1
  1034. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode.js +23 -2
  1035. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.d.ts.map +1 -1
  1036. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.js +22 -1
  1037. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +2 -1
  1038. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
  1039. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +12 -53
  1040. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  1041. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +2 -1
  1042. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_patch_texel_coord.d.ts +17 -0
  1043. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_patch_texel_coord.d.ts.map +1 -0
  1044. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_patch_texel_coord.js +38 -0
  1045. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_read_patch_texel.d.ts.map +1 -1
  1046. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_read_patch_texel.js +16 -10
  1047. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +1 -1
  1048. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
  1049. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +25 -14
  1050. package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +94 -0
  1051. package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts +10 -7
  1052. package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts.map +1 -1
  1053. package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js +10 -7
  1054. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  1055. package/src/shade/renderer/light/GPULightCollection.js +22 -1
  1056. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  1057. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +26 -0
  1058. package/src/shade/renderer/light/cluster/chunk_cluster_keep_smallest.d.ts +21 -0
  1059. package/src/shade/renderer/light/cluster/chunk_cluster_keep_smallest.d.ts.map +1 -0
  1060. package/src/shade/renderer/light/cluster/chunk_cluster_keep_smallest.js +47 -0
  1061. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  1062. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +12 -8
  1063. package/src/shade/renderer/light/environment/equirectangular_zenith_first_direction_to_uv.d.ts +36 -0
  1064. package/src/shade/renderer/light/environment/equirectangular_zenith_first_direction_to_uv.d.ts.map +1 -0
  1065. package/src/shade/renderer/light/environment/equirectangular_zenith_first_direction_to_uv.js +41 -0
  1066. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  1067. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +17 -1
  1068. package/src/shade/renderer/light/environment/octahedral_uv_to_direction.d.ts +5 -13
  1069. package/src/shade/renderer/light/environment/octahedral_uv_to_direction.d.ts.map +1 -1
  1070. package/src/shade/renderer/light/environment/octahedral_uv_to_direction.js +10 -30
  1071. package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.d.ts +31 -0
  1072. package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.d.ts.map +1 -0
  1073. package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.js +45 -0
  1074. package/src/shade/renderer/light/environment/resample_cube_to_octahedral.js +2 -2
  1075. package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts.map +1 -1
  1076. package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.js +11 -8
  1077. package/src/shade/renderer/light/model/SpotLight.d.ts +10 -1
  1078. package/src/shade/renderer/light/model/SpotLight.d.ts.map +1 -1
  1079. package/src/shade/renderer/light/model/SpotLight.js +11 -3
  1080. package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
  1081. package/src/shade/renderer/light/model/io/light_record_directional.js +3 -1
  1082. package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
  1083. package/src/shade/renderer/light/model/io/light_record_point.js +3 -1
  1084. package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
  1085. package/src/shade/renderer/light/model/io/light_record_spot.js +3 -1
  1086. package/src/shade/renderer/loader/gltf/gltf_base_url.d.ts +20 -0
  1087. package/src/shade/renderer/loader/gltf/gltf_base_url.d.ts.map +1 -0
  1088. package/src/shade/renderer/loader/gltf/gltf_base_url.js +27 -0
  1089. package/src/shade/renderer/loader/gltf/gltf_create_material.d.ts.map +1 -1
  1090. package/src/shade/renderer/loader/gltf/gltf_create_material.js +50 -10
  1091. package/src/shade/renderer/loader/gltf/load_gltf.d.ts +4 -0
  1092. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  1093. package/src/shade/renderer/loader/gltf/load_gltf.js +28 -56
  1094. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  1095. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts.map +1 -1
  1096. package/src/shade/renderer/loader/gltf/tiny-gltf.js +843 -843
  1097. package/src/shade/renderer/material/GPUMaterialContext.d.ts +63 -26
  1098. package/src/shade/renderer/material/GPUMaterialContext.d.ts.map +1 -1
  1099. package/src/shade/renderer/material/GPUMaterialContext.js +255 -390
  1100. package/src/shade/renderer/material/GPUMaterialManager.d.ts +51 -1
  1101. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  1102. package/src/shade/renderer/material/GPUMaterialManager.js +345 -91
  1103. package/src/shade/renderer/material/ShadeMaterial.d.ts +21 -0
  1104. package/src/shade/renderer/material/ShadeMaterial.d.ts.map +1 -1
  1105. package/src/shade/renderer/material/ShadeMaterial.js +31 -0
  1106. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  1107. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +25 -6
  1108. package/src/shade/renderer/material/standard/SHADING_MATERIAL_RESOURCE_GROUP.d.ts +10 -0
  1109. package/src/shade/renderer/material/standard/SHADING_MATERIAL_RESOURCE_GROUP.d.ts.map +1 -1
  1110. package/src/shade/renderer/material/standard/SHADING_MATERIAL_RESOURCE_GROUP.js +14 -2
  1111. package/src/shade/renderer/material/standard/STANDARD_MATERIAL_TEMPLATE.d.ts +12 -0
  1112. package/src/shade/renderer/material/standard/STANDARD_MATERIAL_TEMPLATE.d.ts.map +1 -0
  1113. package/src/shade/renderer/material/standard/STANDARD_MATERIAL_TEMPLATE.js +166 -0
  1114. package/src/shade/renderer/material/standard/VT_MATERIAL_TEMPLATE.d.ts +10 -0
  1115. package/src/shade/renderer/material/standard/VT_MATERIAL_TEMPLATE.d.ts.map +1 -0
  1116. package/src/shade/renderer/material/standard/VT_MATERIAL_TEMPLATE.js +141 -0
  1117. package/src/shade/renderer/material/standard/chunk_standard_material_surface.d.ts +29 -0
  1118. package/src/shade/renderer/material/standard/chunk_standard_material_surface.d.ts.map +1 -0
  1119. package/src/shade/renderer/material/standard/chunk_standard_material_surface.js +92 -0
  1120. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +74 -28
  1121. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  1122. package/src/shade/renderer/material/standard/fragment_gbuffer.js +165 -67
  1123. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.d.ts +27 -18
  1124. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.d.ts.map +1 -1
  1125. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +70 -91
  1126. package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts +9 -6
  1127. package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts.map +1 -1
  1128. package/src/shade/renderer/material/standard/material_gbuffer_vertex.js +13 -14
  1129. package/src/shade/renderer/material/template/GPUMaterialServices.d.ts +73 -0
  1130. package/src/shade/renderer/material/template/GPUMaterialServices.d.ts.map +1 -0
  1131. package/src/shade/renderer/material/template/GPUMaterialServices.js +79 -0
  1132. package/src/shade/renderer/material/template/ShadeMaterialTemplate.d.ts +170 -0
  1133. package/src/shade/renderer/material/template/ShadeMaterialTemplate.d.ts.map +1 -0
  1134. package/src/shade/renderer/material/template/ShadeMaterialTemplate.js +234 -0
  1135. package/src/shade/renderer/material/template/chunk_material_surface.d.ts +47 -0
  1136. package/src/shade/renderer/material/template/chunk_material_surface.d.ts.map +1 -0
  1137. package/src/shade/renderer/material/template/chunk_material_surface.js +116 -0
  1138. package/src/shade/renderer/material/template/flat_material_template_spec_support.d.ts +22 -0
  1139. package/src/shade/renderer/material/template/flat_material_template_spec_support.d.ts.map +1 -0
  1140. package/src/shade/renderer/material/template/flat_material_template_spec_support.js +78 -0
  1141. package/src/shade/renderer/material/template/material_metadata_neutral.d.ts +15 -0
  1142. package/src/shade/renderer/material/template/material_metadata_neutral.d.ts.map +1 -0
  1143. package/src/shade/renderer/material/template/material_metadata_neutral.js +46 -0
  1144. package/src/shade/renderer/material/template/material_template_of.d.ts +10 -0
  1145. package/src/shade/renderer/material/template/material_template_of.d.ts.map +1 -0
  1146. package/src/shade/renderer/material/template/material_template_of.js +20 -0
  1147. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +5 -0
  1148. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
  1149. package/src/shade/renderer/object_property/chunk_write_object_property.js +7 -1
  1150. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +7 -1
  1151. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  1152. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -2
  1153. package/src/shade/renderer/particles/DESIGN.md +7 -0
  1154. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
  1155. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +81 -68
  1156. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +22 -3
  1157. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  1158. package/src/shade/renderer/particles/isa/ParticleVMISA.js +30 -3
  1159. package/src/shade/renderer/particles/isa/particle_assembly.js +41 -1
  1160. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +7 -1
  1161. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
  1162. package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +23 -17
  1163. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +1 -1
  1164. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +10 -9
  1165. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
  1166. package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +4 -3
  1167. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
  1168. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +1 -1
  1169. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
  1170. package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +12 -4
  1171. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
  1172. package/src/shade/renderer/particles/optimizer/pass_peephole.js +11 -10
  1173. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
  1174. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +12 -10
  1175. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
  1176. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +12 -4
  1177. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  1178. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +7 -0
  1179. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts +4 -0
  1180. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -1
  1181. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +47 -88
  1182. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -1
  1183. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +22 -68
  1184. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
  1185. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +5 -3
  1186. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  1187. package/src/shade/renderer/particles/vm/ParticleVMReference.js +17 -1
  1188. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  1189. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +12 -2
  1190. package/src/shade/renderer/postprocess/TemporalJitterSequence.d.ts +44 -0
  1191. package/src/shade/renderer/postprocess/TemporalJitterSequence.d.ts.map +1 -0
  1192. package/src/shade/renderer/postprocess/TemporalJitterSequence.js +104 -0
  1193. package/src/shade/renderer/postprocess/chunk_find_nearest_depth.d.ts +25 -0
  1194. package/src/shade/renderer/postprocess/chunk_find_nearest_depth.d.ts.map +1 -0
  1195. package/src/shade/renderer/postprocess/chunk_find_nearest_depth.js +74 -0
  1196. package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
  1197. package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +19 -4
  1198. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  1199. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +12 -1
  1200. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  1201. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -0
  1202. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  1203. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +18 -3
  1204. package/src/shade/renderer/postprocess/eye/shader_autoexposure_read_histogram.d.ts.map +1 -1
  1205. package/src/shade/renderer/postprocess/eye/shader_autoexposure_read_histogram.js +17 -4
  1206. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts +29 -0
  1207. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -0
  1208. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +69 -0
  1209. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +4 -16
  1210. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  1211. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +10 -52
  1212. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts +0 -16
  1213. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  1214. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +23 -55
  1215. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts +4 -1
  1216. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts.map +1 -1
  1217. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +4 -1
  1218. package/src/shade/renderer/postprocess/motion_blur/chunk_motion_blur_resolution.d.ts +18 -0
  1219. package/src/shade/renderer/postprocess/motion_blur/chunk_motion_blur_resolution.d.ts.map +1 -0
  1220. package/src/shade/renderer/postprocess/motion_blur/chunk_motion_blur_resolution.js +43 -0
  1221. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts +5 -1
  1222. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts.map +1 -1
  1223. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.js +12 -2
  1224. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  1225. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +33 -6
  1226. package/src/shade/renderer/postprocess/nss/NSS.d.ts +16 -8
  1227. package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
  1228. package/src/shade/renderer/postprocess/nss/NSS.js +37 -35
  1229. package/src/shade/renderer/postprocess/nss/chunk_nss_find_nearest_depth.d.ts +2 -2
  1230. package/src/shade/renderer/postprocess/nss/chunk_nss_find_nearest_depth.d.ts.map +1 -1
  1231. package/src/shade/renderer/postprocess/nss/chunk_nss_find_nearest_depth.js +28 -61
  1232. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  1233. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +296 -291
  1234. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  1235. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +13 -0
  1236. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  1237. package/src/shade/renderer/postprocess/ssr/SSR.js +9 -7
  1238. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts +14 -0
  1239. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  1240. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +53 -25
  1241. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts +11 -1
  1242. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts.map +1 -1
  1243. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.js +11 -1
  1244. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +46 -0
  1245. package/src/shade/renderer/postprocess/ssr/prefilter/shader_ssr_prefilter.d.ts.map +1 -1
  1246. package/src/shade/renderer/postprocess/ssr/prefilter/shader_ssr_prefilter.js +7 -0
  1247. package/src/shade/renderer/postprocess/ssr/shader/chunk_ssr_depth_thickness.d.ts +32 -0
  1248. package/src/shade/renderer/postprocess/ssr/shader/chunk_ssr_depth_thickness.d.ts.map +1 -0
  1249. package/src/shade/renderer/postprocess/ssr/shader/chunk_ssr_depth_thickness.js +41 -0
  1250. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  1251. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +11 -6
  1252. package/src/shade/renderer/postprocess/taa/TAA.d.ts +13 -4
  1253. package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
  1254. package/src/shade/renderer/postprocess/taa/TAA.js +29 -48
  1255. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.d.ts +11 -0
  1256. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.d.ts.map +1 -1
  1257. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.js +25 -4
  1258. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts +8 -0
  1259. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts.map +1 -1
  1260. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.js +14 -42
  1261. package/src/shade/renderer/rasterize/RasterizationJob.d.ts +4 -2
  1262. package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
  1263. package/src/shade/renderer/rasterize/RasterizationJob.js +3 -1
  1264. package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts +57 -0
  1265. package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -0
  1266. package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +133 -0
  1267. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
  1268. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +17 -0
  1269. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  1270. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +30 -4
  1271. package/src/shade/renderer/rasterize/bucket/rasterization_has_opaque_bucket.d.ts +3 -1
  1272. package/src/shade/renderer/rasterize/bucket/rasterization_has_opaque_bucket.d.ts.map +1 -1
  1273. package/src/shade/renderer/rasterize/bucket/rasterization_has_opaque_bucket.js +3 -1
  1274. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  1275. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +74 -68
  1276. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  1277. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +11 -1
  1278. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  1279. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +70 -64
  1280. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.d.ts.map +1 -1
  1281. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.js +3 -4
  1282. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  1283. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +8 -2
  1284. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  1285. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +134 -88
  1286. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  1287. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +3 -4
  1288. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  1289. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +7 -5
  1290. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  1291. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +59 -29
  1292. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  1293. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +3 -4
  1294. package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
  1295. package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +5 -2
  1296. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  1297. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +3 -4
  1298. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  1299. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +28 -20
  1300. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts +20 -0
  1301. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +1 -1
  1302. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js +25 -0
  1303. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
  1304. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +2 -1
  1305. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
  1306. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +2 -1
  1307. package/src/shade/renderer/rasterize/forward/forward_template_pipeline.d.ts +40 -0
  1308. package/src/shade/renderer/rasterize/forward/forward_template_pipeline.d.ts.map +1 -0
  1309. package/src/shade/renderer/rasterize/forward/forward_template_pipeline.js +86 -0
  1310. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts +11 -0
  1311. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
  1312. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +13 -2
  1313. package/src/shade/renderer/rasterize/graph_clear_raster_targets.d.ts +38 -0
  1314. package/src/shade/renderer/rasterize/graph_clear_raster_targets.d.ts.map +1 -0
  1315. package/src/shade/renderer/rasterize/graph_clear_raster_targets.js +105 -0
  1316. package/src/shade/renderer/rasterize/native/alpha_tested_pass_resources.d.ts +59 -1
  1317. package/src/shade/renderer/rasterize/native/alpha_tested_pass_resources.d.ts.map +1 -1
  1318. package/src/shade/renderer/rasterize/native/alpha_tested_pass_resources.js +109 -7
  1319. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +16 -1
  1320. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  1321. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +13 -1
  1322. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +247 -0
  1323. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +20 -2
  1324. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +1 -1
  1325. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_coverage.d.ts +17 -0
  1326. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_coverage.d.ts.map +1 -0
  1327. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_coverage.js +25 -0
  1328. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts +4 -5
  1329. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts.map +1 -1
  1330. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.js +7 -6
  1331. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_mark.d.ts +17 -0
  1332. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_mark.d.ts.map +1 -0
  1333. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_mark.js +51 -0
  1334. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_premultiplied_contribution.d.ts +23 -0
  1335. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_premultiplied_contribution.d.ts.map +1 -0
  1336. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_premultiplied_contribution.js +77 -0
  1337. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  1338. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +16 -20
  1339. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts +8 -2
  1340. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -1
  1341. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +57 -43
  1342. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts +8 -2
  1343. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -1
  1344. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +57 -43
  1345. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts.map +1 -1
  1346. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.js +8 -2
  1347. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +7 -2
  1348. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
  1349. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +67 -58
  1350. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts +8 -2
  1351. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  1352. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +186 -156
  1353. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts +2 -2
  1354. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
  1355. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +36 -28
  1356. package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts +14 -12
  1357. package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts.map +1 -1
  1358. package/src/shade/renderer/rasterize/native/material_draw_indirect.js +29 -23
  1359. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  1360. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +16 -22
  1361. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.d.ts +33 -0
  1362. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.d.ts.map +1 -0
  1363. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +123 -0
  1364. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts +7 -2
  1365. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
  1366. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +227 -218
  1367. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +8 -2
  1368. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
  1369. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +112 -180
  1370. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts +8 -2
  1371. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts.map +1 -1
  1372. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +110 -178
  1373. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts +7 -2
  1374. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  1375. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +242 -204
  1376. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +1 -1
  1377. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  1378. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +21 -1
  1379. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  1380. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +12 -20
  1381. package/src/shade/renderer/restir/reservoir/shader.d.ts.map +1 -1
  1382. package/src/shade/renderer/restir/reservoir/shader.js +27 -1
  1383. package/src/shade/renderer/scene/GPUSceneContext.d.ts +2 -1
  1384. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  1385. package/src/shade/renderer/scene/GPUSceneContext.js +11 -9
  1386. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +22 -0
  1387. package/src/shade/renderer/scene/SceneManager.d.ts +10 -0
  1388. package/src/shade/renderer/scene/SceneManager.d.ts.map +1 -1
  1389. package/src/shade/renderer/scene/SceneManager.js +17 -0
  1390. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -1
  1391. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +164 -144
  1392. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +10 -0
  1393. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  1394. package/src/shade/renderer/scene/rows/GPUSceneRows.js +14 -0
  1395. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
  1396. package/src/shade/renderer/scene/serialization/serialize_scene.js +2 -6
  1397. package/src/shade/renderer/shader/ComputeShader.d.ts +5 -0
  1398. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  1399. package/src/shade/renderer/shader/ComputeShader.js +358 -353
  1400. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts.map +1 -1
  1401. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.js +15 -1
  1402. package/src/shade/renderer/shader/chunk/binary/chunk_encode_f16.d.ts +11 -2
  1403. package/src/shade/renderer/shader/chunk/binary/chunk_encode_f16.d.ts.map +1 -1
  1404. package/src/shade/renderer/shader/chunk/binary/chunk_encode_f16.js +33 -13
  1405. package/src/shade/renderer/shader/chunk/brdf/chunk_D_GGX.d.ts.map +1 -1
  1406. package/src/shade/renderer/shader/chunk/brdf/chunk_D_GGX.js +31 -3
  1407. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_decode32_morton2.d.ts +10 -1
  1408. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_decode32_morton2.d.ts.map +1 -1
  1409. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_decode32_morton2.js +23 -8
  1410. package/src/shade/renderer/shader/chunk/camera/chunk_pixel_radius_to_world.d.ts +8 -1
  1411. package/src/shade/renderer/shader/chunk/camera/chunk_pixel_radius_to_world.d.ts.map +1 -1
  1412. package/src/shade/renderer/shader/chunk/camera/chunk_pixel_radius_to_world.js +12 -5
  1413. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray.d.ts +15 -1
  1414. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray.d.ts.map +1 -1
  1415. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray.js +24 -28
  1416. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray_v2.d.ts +5 -0
  1417. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray_v2.d.ts.map +1 -1
  1418. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray_v2.js +18 -13
  1419. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.d.ts.map +1 -1
  1420. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.js +1 -47
  1421. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast.d.ts +10 -0
  1422. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast.d.ts.map +1 -1
  1423. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast.js +23 -8
  1424. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast_positive.d.ts +7 -0
  1425. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast_positive.d.ts.map +1 -1
  1426. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast_positive.js +12 -25
  1427. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_slab_span.d.ts +32 -0
  1428. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_slab_span.d.ts.map +1 -0
  1429. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_slab_span.js +52 -0
  1430. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_view_depth_range.d.ts +20 -0
  1431. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_view_depth_range.d.ts.map +1 -0
  1432. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_view_depth_range.js +42 -0
  1433. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_octahedral_uv_wrap.d.ts +10 -1
  1434. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_octahedral_uv_wrap.d.ts.map +1 -1
  1435. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_octahedral_uv_wrap.js +18 -3
  1436. package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_encode_u32.d.ts.map +1 -1
  1437. package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_encode_u32.js +8 -4
  1438. package/src/shade/renderer/shader/chunk/grid/chunk_folded_workgroup_index.d.ts +24 -0
  1439. package/src/shade/renderer/shader/chunk/grid/chunk_folded_workgroup_index.d.ts.map +1 -0
  1440. package/src/shade/renderer/shader/chunk/grid/chunk_folded_workgroup_index.js +36 -0
  1441. package/src/shade/renderer/shader/chunk/grid/chunk_grid3d_to_index.d.ts +6 -0
  1442. package/src/shade/renderer/shader/chunk/grid/chunk_grid3d_to_index.d.ts.map +1 -1
  1443. package/src/shade/renderer/shader/chunk/grid/chunk_grid3d_to_index.js +6 -0
  1444. package/src/shade/renderer/shader/chunk/light/INCIDENT_LIGHT_STRUCT.d.ts.map +1 -1
  1445. package/src/shade/renderer/shader/chunk/light/INCIDENT_LIGHT_STRUCT.js +6 -1
  1446. package/src/shade/renderer/shader/chunk/light/io/chunk_get_spot_light_info.d.ts.map +1 -1
  1447. package/src/shade/renderer/shader/chunk/light/io/chunk_get_spot_light_info.js +6 -1
  1448. package/src/shade/renderer/shader/chunk/material/chunk_albedo_unpremultiply.d.ts +24 -0
  1449. package/src/shade/renderer/shader/chunk/material/chunk_albedo_unpremultiply.d.ts.map +1 -0
  1450. package/src/shade/renderer/shader/chunk/material/chunk_albedo_unpremultiply.js +31 -0
  1451. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg2d.js +2 -2
  1452. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg3d16.js +1 -1
  1453. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg4d.js +1 -1
  1454. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_validate_hit.d.ts.map +1 -1
  1455. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_validate_hit.js +8 -4
  1456. package/src/shade/renderer/shader/chunk/sdf/chunk_mesh_sdf_soft_shadow.d.ts.map +1 -1
  1457. package/src/shade/renderer/shader/chunk/sdf/chunk_mesh_sdf_soft_shadow.js +17 -3
  1458. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.d.ts +4 -0
  1459. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.d.ts.map +1 -1
  1460. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +4 -0
  1461. package/src/shade/renderer/shader/graph/graph_import_typed_buffer.d.ts +2 -1
  1462. package/src/shade/renderer/shader/graph/graph_import_typed_buffer.d.ts.map +1 -1
  1463. package/src/shade/renderer/shader/graph/graph_import_typed_buffer.js +15 -28
  1464. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +8 -0
  1465. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  1466. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +203 -192
  1467. package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
  1468. package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +12 -0
  1469. package/src/shade/renderer/shader/type/WebGPUArray.d.ts.map +1 -1
  1470. package/src/shade/renderer/shader/type/WebGPUArray.js +25 -1
  1471. package/src/shade/renderer/shader/type/queue_typed_buffer_update.d.ts.map +1 -1
  1472. package/src/shade/renderer/shader/type/queue_typed_buffer_update.js +15 -0
  1473. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  1474. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +10 -9
  1475. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts +12 -2
  1476. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -1
  1477. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +210 -196
  1478. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +10 -3
  1479. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -1
  1480. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +219 -194
  1481. package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts +32 -0
  1482. package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts.map +1 -0
  1483. package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.js +47 -0
  1484. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
  1485. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +11 -1
  1486. package/src/shade/renderer/texture/ShadeTexture.d.ts +16 -0
  1487. package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
  1488. package/src/shade/renderer/texture/ShadeTexture.js +17 -0
  1489. package/src/shade/renderer/texture/TextureManager.d.ts +22 -5
  1490. package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
  1491. package/src/shade/renderer/texture/TextureManager.js +109 -6
  1492. package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.d.ts.map +1 -1
  1493. package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -2
  1494. package/src/shade/renderer/texture/download_texture_data.d.ts.map +1 -1
  1495. package/src/shade/renderer/texture/download_texture_data.js +12 -4
  1496. package/src/shade/renderer/texture/encode/shader_texture_encode_astc_4x4.d.ts.map +1 -1
  1497. package/src/shade/renderer/texture/encode/shader_texture_encode_astc_4x4.js +66 -63
  1498. package/src/shade/renderer/texture/encode/shader_texture_encode_bc1.d.ts.map +1 -1
  1499. package/src/shade/renderer/texture/encode/shader_texture_encode_bc1.js +63 -60
  1500. package/src/shade/renderer/texture/encode/shader_texture_encode_bc4.d.ts.map +1 -1
  1501. package/src/shade/renderer/texture/encode/shader_texture_encode_bc4.js +79 -76
  1502. package/src/shade/renderer/texture/encode/shader_texture_encode_bc4_snorm.d.ts.map +1 -1
  1503. package/src/shade/renderer/texture/encode/shader_texture_encode_bc4_snorm.js +67 -64
  1504. package/src/shade/renderer/texture/encode/shader_texture_encode_bc5.d.ts.map +1 -1
  1505. package/src/shade/renderer/texture/encode/shader_texture_encode_bc5.js +70 -67
  1506. package/src/shade/renderer/texture/encode/shader_texture_encode_bc5_snorm.d.ts.map +1 -1
  1507. package/src/shade/renderer/texture/encode/shader_texture_encode_bc5_snorm.js +66 -63
  1508. package/src/shade/renderer/texture/encode/shader_texture_encode_bc6h.d.ts.map +1 -1
  1509. package/src/shade/renderer/texture/encode/shader_texture_encode_bc6h.js +65 -62
  1510. package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts.map +1 -1
  1511. package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.js +61 -58
  1512. package/src/shade/renderer/texture/format/texture_format_from_shade_image.d.ts +7 -1
  1513. package/src/shade/renderer/texture/format/texture_format_from_shade_image.d.ts.map +1 -1
  1514. package/src/shade/renderer/texture/format/texture_format_from_shade_image.js +100 -95
  1515. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.d.ts.map +1 -1
  1516. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +59 -68
  1517. package/src/shade/renderer/texture/mipmaps/filters/mipmap_shader_code_wronski2021.d.ts +30 -1
  1518. package/src/shade/renderer/texture/mipmaps/filters/mipmap_shader_code_wronski2021.d.ts.map +1 -1
  1519. package/src/shade/renderer/texture/mipmaps/filters/mipmap_shader_code_wronski2021.js +37 -20
  1520. package/src/shade/renderer/texture/texture_descriptor_from_texture_shade.js +73 -73
  1521. package/src/shade/renderer/view/ViewManager.d.ts +8 -0
  1522. package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
  1523. package/src/shade/renderer/view/ViewManager.js +15 -0
  1524. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  1525. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +516 -507
  1526. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
  1527. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +272 -260
  1528. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  1529. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +160 -134
  1530. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -0
  1531. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  1532. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +243 -62
  1533. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  1534. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +110 -7
  1535. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  1536. package/src/shade/wgsl/validate_wgsl_source.js +57 -0
  1537. package/src/view/asset/AssetLoaderStatusView.d.ts.map +1 -1
  1538. package/src/view/asset/AssetLoaderStatusView.js +8 -0
  1539. package/src/view/common/LabelView.d.ts.map +1 -1
  1540. package/src/view/common/LabelView.js +4 -0
  1541. package/src/view/common/ListView.d.ts +6 -2
  1542. package/src/view/common/ListView.d.ts.map +1 -1
  1543. package/src/view/common/ListView.js +27 -7
  1544. package/src/view/common/TabbedView.d.ts.map +1 -1
  1545. package/src/view/common/TabbedView.js +8 -0
  1546. package/src/view/common/VirtualListView.d.ts.map +1 -1
  1547. package/src/view/common/VirtualListView.js +17 -1
  1548. package/src/view/common/dnd/DropTarget.d.ts.map +1 -1
  1549. package/src/view/common/dnd/DropTarget.js +18 -0
  1550. package/src/view/elements/DropDownSelectionView.d.ts.map +1 -1
  1551. package/src/view/elements/DropDownSelectionView.js +8 -0
  1552. package/src/view/elements/image/SvgImageView.d.ts.map +1 -1
  1553. package/src/view/elements/image/SvgImageView.js +8 -0
  1554. package/src/view/elements/navigation/ViewStack.d.ts.map +1 -1
  1555. package/src/view/elements/navigation/ViewStack.js +4 -0
  1556. package/src/view/elements/notify/NotificationView.d.ts.map +1 -1
  1557. package/src/view/elements/notify/NotificationView.js +4 -0
  1558. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
  1559. package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +8 -0
  1560. package/src/view/elements/radial/RadialMenu.d.ts.map +1 -1
  1561. package/src/view/elements/radial/RadialMenu.js +4 -0
  1562. package/src/view/minimap/Minimap.d.ts.map +1 -1
  1563. package/src/view/minimap/Minimap.js +8 -0
  1564. package/src/view/minimap/MinimapCanvasView.d.ts.map +1 -1
  1565. package/src/view/minimap/MinimapCanvasView.js +21 -1
  1566. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  1567. package/src/view/minimap/dom/MinimapCameraView.js +232 -220
  1568. package/src/view/minimap/dom/MinimapMarkerView.d.ts.map +1 -1
  1569. package/src/view/minimap/dom/MinimapMarkerView.js +8 -0
  1570. package/src/view/minimap/minimap_focus_area.d.ts +5 -0
  1571. package/src/view/minimap/minimap_focus_area.d.ts.map +1 -1
  1572. package/src/view/minimap/minimap_focus_area.js +22 -0
  1573. package/src/view/tooltip/TooltipManager.d.ts.map +1 -1
  1574. package/src/view/tooltip/TooltipManager.js +16 -4
  1575. package/src/core/geom/3d/atlas/atlas_bench_lib.d.ts +0 -73
  1576. package/src/core/geom/3d/atlas/atlas_bench_lib.d.ts.map +0 -1
  1577. package/src/core/geom/3d/atlas/atlas_bench_lib.js +0 -315
  1578. package/src/engine/graphics/ecs/mesh/MeshEvents.d.ts +0 -6
  1579. package/src/engine/graphics/ecs/mesh/MeshEvents.d.ts.map +0 -1
  1580. package/src/engine/graphics/ecs/mesh/MeshEvents.js +0 -16
  1581. package/src/engine/graphics/ecs/mesh/commonObject3DFastMatrixUpdate.d.ts +0 -2
  1582. package/src/engine/graphics/ecs/mesh/commonObject3DFastMatrixUpdate.d.ts.map +0 -1
  1583. package/src/engine/graphics/ecs/mesh/commonObject3DFastMatrixUpdate.js +0 -37
  1584. package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts +0 -8
  1585. package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts.map +0 -1
  1586. package/src/engine/graphics/ecs/mesh/copyToVector3.js +0 -18
  1587. package/src/engine/graphics/ecs/mesh/object3DFastMatrixUpdate.d.ts +0 -6
  1588. package/src/engine/graphics/ecs/mesh/object3DFastMatrixUpdate.d.ts.map +0 -1
  1589. package/src/engine/graphics/ecs/mesh/object3DFastMatrixUpdate.js +0 -18
  1590. package/src/engine/graphics/ecs/mesh/rootObject3DFastMatrixUpdate.d.ts +0 -6
  1591. package/src/engine/graphics/ecs/mesh/rootObject3DFastMatrixUpdate.d.ts.map +0 -1
  1592. package/src/engine/graphics/ecs/mesh/rootObject3DFastMatrixUpdate.js +0 -14
  1593. package/src/engine/graphics/ecs/mesh/setMesh.d.ts +0 -16
  1594. package/src/engine/graphics/ecs/mesh/setMesh.d.ts.map +0 -1
  1595. package/src/engine/graphics/ecs/mesh/setMesh.js +0 -55
  1596. package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.d.ts +0 -13
  1597. package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.d.ts.map +0 -1
  1598. package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.js +0 -99
  1599. package/src/engine/graphics/ecs/mesh/skeleton/HumanoidBoneType.d.ts +0 -25
  1600. package/src/engine/graphics/ecs/mesh/skeleton/HumanoidBoneType.d.ts.map +0 -1
  1601. package/src/engine/graphics/ecs/mesh/skeleton/HumanoidBoneType.js +0 -29
  1602. package/src/engine/graphics/ecs/mesh/updateMeshTransform.d.ts +0 -6
  1603. package/src/engine/graphics/ecs/mesh/updateMeshTransform.d.ts.map +0 -1
  1604. package/src/engine/graphics/ecs/mesh/updateMeshTransform.js +0 -15
  1605. package/src/engine/graphics/ecs/mesh/updateNodeByTransformAndBBB.d.ts +0 -8
  1606. package/src/engine/graphics/ecs/mesh/updateNodeByTransformAndBBB.d.ts.map +0 -1
  1607. package/src/engine/graphics/ecs/mesh/updateNodeByTransformAndBBB.js +0 -14
  1608. package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.d.ts +0 -59
  1609. package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.d.ts.map +0 -1
  1610. package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.js +0 -481
  1611. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +0 -22
  1612. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +0 -1
  1613. package/src/engine/graphics3/terrain/pack_terrain_row_table.js +0 -48
  1614. package/src/engine/graphics3/terrain/shader_terrain_splat.d.ts +0 -26
  1615. package/src/engine/graphics3/terrain/shader_terrain_splat.d.ts.map +0 -1
  1616. package/src/engine/graphics3/terrain/shader_terrain_splat.js +0 -215
  1617. package/src/shade/renderer/animation/ANIMATION_BOUND_TRACK_GROUP_STRUCT.d.ts +0 -25
  1618. package/src/shade/renderer/animation/ANIMATION_BOUND_TRACK_GROUP_STRUCT.d.ts.map +0 -1
  1619. package/src/shade/renderer/animation/ANIMATION_BOUND_TRACK_GROUP_STRUCT.js +0 -57
  1620. package/src/shade/renderer/animation/ANIMATION_KEYFRAME_BLOCK_STRUCT.d.ts +0 -26
  1621. package/src/shade/renderer/animation/ANIMATION_KEYFRAME_BLOCK_STRUCT.d.ts.map +0 -1
  1622. package/src/shade/renderer/animation/ANIMATION_KEYFRAME_BLOCK_STRUCT.js +0 -50
  1623. package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_BLOCK_STRUCT.d.ts +0 -29
  1624. package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_BLOCK_STRUCT.d.ts.map +0 -1
  1625. package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_BLOCK_STRUCT.js +0 -62
  1626. package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts +0 -46
  1627. package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts.map +0 -1
@@ -1,661 +1,681 @@
1
- import { assert } from "../../core/assert.js";
2
- import { aabb3_array_combine } from "../../core/geom/3d/aabb/aabb3_array_combine.js";
3
- import { aabb3_matrix4_project } from "../../core/geom/3d/aabb/aabb3_matrix4_project.js";
4
- import { Scene } from "../../shade/renderer/scene/Scene.js";
5
- import { System } from "../ecs/System.js";
6
- import { Transform64 } from "../ecs/transform/Transform64.js";
7
- import { TRANSFORM64_EVENT_CHANGE } from "../ecs/transform/TRANSFORM64_EVENT_CHANGE.js";
8
- import { TRANSFORM_ATTACHMENT_EVENT_CHANGE } from "../ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js";
9
- import { ShadedGeometry } from "../graphics/ecs/mesh-v2/ShadedGeometry.js";
10
- import { SGMesh } from "../graphics/ecs/mesh-v2/aggregate/SGMesh.js";
11
- import { prefab_compile } from "./prefab/prefab_compile.js";
12
- import { prefab_instance_destroy, prefab_instantiate } from "./prefab/prefab_instantiate.js";
13
- import {
14
- register_instance_animation,
15
- unregister_instance_animation
16
- } from "./register_instance_animation.js";
17
-
18
- /**
19
- * @typedef {import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
20
- * @typedef {import("../../shade/renderer/loader/SceneBundle.js").SceneBundle} SceneBundle
21
- * @typedef {import("./prefab/Prefab.js").Prefab} Prefab
22
- * @typedef {import("./prefab/PrefabInstance.js").PrefabInstance} PrefabInstance
23
- * @typedef {import("./register_instance_animation.js").InstanceAnimationRegistration} InstanceAnimationRegistration
24
- * @typedef {import("./GraphicsEngine.js").GraphicsEngine} GraphicsEngine
25
- */
26
-
27
- /**
28
- * What {@link MeshSystem.mesh_entities_of} answers for an entity with nothing in the scene.
29
- *
30
- * @type {Int32Array}
31
- */
32
- const NO_ENTITIES = new Int32Array(0);
33
-
34
- const SCRATCH_BOUNDS = new Float32Array(6);
35
-
36
- /**
37
- * What one entity has: its model, once loaded, as entities; the ids the GPU issued for the model's
38
- * skins; and what is listening on its behalf.
39
- */
40
- class Entry {
41
- /**
42
- * @type {number}
43
- */
44
- entity = -1;
45
-
46
- /**
47
- * @type {SGMesh}
48
- */
49
- model = null;
50
-
51
- /**
52
- * @type {Transform64}
53
- */
54
- transform = null;
55
-
56
- /**
57
- * The model as entities, or null until it has loaded.
58
- *
59
- * @type {PrefabInstance|null}
60
- */
61
- instance = null;
62
-
63
- /**
64
- * What the GPU gave back for the instance's skins, or null while there is nothing registered —
65
- * no model yet, no device yet, or a renderer restart that has not been drained.
66
- *
67
- * @type {InstanceAnimationRegistration|null}
68
- */
69
- animation = null;
70
-
71
- /**
72
- * The GPU context the instance's entities hold their rows in, or null while they hold none.
73
- *
74
- * @type {GPUSceneContext|null}
75
- */
76
- context = null;
77
-
78
- /**
79
- * Fires when the placing entity's world transform moves.
80
- *
81
- * @type {function(): void}
82
- */
83
- on_moved = null;
84
-
85
- /**
86
- * One per entity of the instance, firing when that entity's offset from its parent moves —
87
- * a joint an IK solver, a ragdoll or a cloth wrote.
88
- *
89
- * @type {Map<number, function(): void>}
90
- */
91
- on_offset_moved = new Map();
92
- }
93
-
94
- /**
95
- * Puts models into the scene as entities, and keeps their rows where the entities say.
96
- *
97
- * **A model is a prefab, and a placement is entities.** A loaded bundle is compiled once per url
98
- * ({@link prefab_compile}) and spawned once per entity that wears it
99
- * ({@link prefab_instantiate}): every node of the file becomes an entity attached to its parent's,
100
- * named, drawing where it draws, with the placing entity as the root. What used to be a private
101
- * copy of a node tree per placement is the dataset's own hierarchy, addressable by every system —
102
- * IK finds a foot by name, cloth seeds from joints, gameplay asks where a socket is — and the
103
- * renderer's tables are indexed by those entities, at `entity + 1`.
104
- *
105
- * **It owns the scene and tells the facade to draw it**, rather than the facade handing a graph out
106
- * for anyone to write into.
107
- *
108
- * **Rows need a device, and registration does too.** A model loads whenever it loads, and there
109
- * may be no renderer yet; {@link update} attaches every instance's entities to the scene's GPU
110
- * context when one arrives, registers its skins with the animation manager, and does both again
111
- * after a renderer restart. Driving the clips is not this system's business — that is the
112
- * animation systems' — but a clip nothing has registered cannot be driven by anyone, which is why
113
- * the instance is handed out ({@link instance_of}) rather than kept.
114
- */
115
- export class MeshSystem extends System {
116
- /**
117
- * @type {GraphicsEngine}
118
- */
119
- #graphics;
120
-
121
- /**
122
- * The scene this system writes into and the facade draws. Received rather than created: lights
123
- * come from a system of their own, and both have to be putting content into the same scene for
124
- * either to be visible.
125
- *
126
- * @type {Scene}
127
- */
128
- #scene;
129
-
130
- /**
131
- * Loaded and compiled models, by url. A level places the same model many times over, and
132
- * loading it once per placement would be the dominant cost of opening one; compiling it once
133
- * per placement would be the next.
134
- *
135
- * @type {Map<string, Promise<Prefab>>}
136
- */
137
- #models = new Map();
138
-
139
- /**
140
- * @type {Map<number, Entry>}
141
- */
142
- #entries = new Map();
143
-
144
- /**
145
- * Shade's GPU state for {@link scene}, as of the last {@link update}. Held to answer one
146
- * question: has the renderer been replaced since the last frame, so that everything placed has
147
- * to be attached and registered again.
148
- *
149
- * @type {GPUSceneContext|null}
150
- */
151
- #context = null;
152
-
153
- /**
154
- * Entries whose instance is not attached to {@link #context} — either because it has just
155
- * loaded, or because a restart invalidated what it had. A queue rather than a scan over every
156
- * entity, because this is per-frame work and the answer is almost always "nothing to do".
157
- *
158
- * @type {Entry[]}
159
- */
160
- #unregistered = [];
161
-
162
- /**
163
- * Entities whose `SGMesh` carried no url when it was linked.
164
- *
165
- * `SGMesh.url` is an accessor with no change signal behind it, and the game assigns it late as a
166
- * matter of course: `GeneratedArmySystem` puts the component on an army entity and fills the
167
- * url in from a promise, once the army it generated has picked the leader whose model the army
168
- * wears. So a url that is missing at link time is the normal path to a model rather than an
169
- * edge case, and the only way to notice one arriving is to look again.
170
- *
171
- * @type {Entry[]}
172
- */
173
- #awaiting_url = [];
174
-
175
- /**
176
- * Loads a glTF into Shade's own representation. Injected rather than imported so that the
177
- * system can be driven in a spec without a network or a device — the loader is the one genuine
178
- * boundary here.
179
- *
180
- * @type {function(string): Promise<SceneBundle>}
181
- */
182
- #load;
183
-
184
- /**
185
- * @param {GraphicsEngine} graphics
186
- * @param {Scene} scene
187
- * @param {function(string): Promise<SceneBundle>} load
188
- */
189
- constructor(graphics, scene, load) {
190
- super();
191
-
192
- assert.defined(graphics, 'graphics');
193
- assert.equal(scene.isScene, true, 'scene.isScene !== true');
194
- assert.typeOf(load, 'function', 'load');
195
-
196
- this.#graphics = graphics;
197
- this.#scene = scene;
198
- this.#load = load;
199
-
200
- this.dependencies = [SGMesh, Transform64];
201
- }
202
-
203
- /**
204
- * @returns {Scene}
205
- */
206
- get scene() {
207
- return this.#scene;
208
- }
209
-
210
- /**
211
- * The model an entity is showing, as entities: its skins and clips addressed to them, and its
212
- * nodes by name.
213
- *
214
- * Handed out rather than copied because an animation driver has to know *which* instance it is
215
- * bound to: a model swap builds a new one, and a driver still holding the old one would be
216
- * driving entities that have gone. The object's identity is the only signal that says so.
217
- *
218
- * @param {number} entity
219
- * @returns {PrefabInstance|null} `null` for an entity this system has never seen, or one
220
- * whose model has not finished loading
221
- */
222
- instance_of(entity) {
223
- const entry = this.#entries.get(entity);
224
-
225
- if (entry === undefined) {
226
- return null;
227
- }
228
-
229
- return entry.instance;
230
- }
231
-
232
- /**
233
- * What the GPU's animation manager gave back for that instance — the skin ids, in the
234
- * instance's own order.
235
- *
236
- * Same reasoning as {@link instance_of} and a stronger version of it: these ids belong to one
237
- * renderer, and a restart voids every one of them. The object is replaced when that happens, so
238
- * a driver that compares it against what it bound against notices in the same frame.
239
- *
240
- * @param {number} entity
241
- * @returns {InstanceAnimationRegistration|null} `null` while there is nothing registered — no
242
- * model yet, no device yet, or a renderer restart that has not been drained
243
- */
244
- animation_of(entity) {
245
- const entry = this.#entries.get(entity);
246
-
247
- if (entry === undefined) {
248
- return null;
249
- }
250
-
251
- return entry.animation;
252
- }
253
-
254
- /**
255
- * The entities of an entity's model that draw — one per primitive of the file. Each holds the
256
- * `meshes` row `entity + 1`, which is what the visibility buffer writes for every pixel it
257
- * covers; anything that has to say something about a particular model's meshes starts here.
258
- *
259
- * @param {number} entity
260
- * @returns {Int32Array} empty for an entity with nothing in the scene — never seen, or still
261
- * loading, and neither is an error. Not to be kept: a model swap replaces it
262
- */
263
- mesh_entities_of(entity) {
264
- const entry = this.#entries.get(entity);
265
-
266
- if (entry === undefined || entry.instance === null) {
267
- return NO_ENTITIES;
268
- }
269
-
270
- return entry.instance.mesh_entities;
271
- }
272
-
273
- /**
274
- * Where an entity's model is, in world space: the union of its primitives' geometry bounds
275
- * under their own entities' world transforms — which the ECS composes, so this answers with no
276
- * device and with no frame of latency, from what the simulation knows. The box the renderer
277
- * culls by is derived on the GPU from the same and is not consulted.
278
- *
279
- * A skinned primitive answers at its rest pose, under the frame its skin deforms in.
280
- *
281
- * @param {ArrayLike<number>|number[]|Float32Array} target aabb3, order `x0,y0,z0,x1,y1,z1`
282
- * @param {number} entity
283
- * @returns {boolean} `false` when the entity has nothing in the scene — it may be an entity this
284
- * system has never seen, or one whose model is still loading, and neither is an error
285
- */
286
- compute_world_bounds(target, entity) {
287
- const entry = this.#entries.get(entity);
288
-
289
- if (entry === undefined || entry.instance === null) {
290
- return false;
291
- }
292
-
293
- const dataset = this.entityManager.dataset;
294
- const primitives = entry.instance.mesh_entities;
295
-
296
- let found = false;
297
-
298
- for (let i = 0; i < primitives.length; i++) {
299
- const primitive = primitives[i];
300
-
301
- if (!dataset.entityExists(primitive)) {
302
- continue;
303
- }
304
-
305
- const geometry = dataset.getComponent(primitive, ShadedGeometry);
306
- const world = dataset.getComponent(primitive, Transform64);
307
-
308
- if (geometry === undefined || world === undefined || geometry.geometry === null) {
309
- continue;
310
- }
311
-
312
- // a Transform64's matrix starts at element 0, so it is its own mat4 argument
313
- aabb3_matrix4_project(SCRATCH_BOUNDS, geometry.geometry.bounding_box, world);
314
-
315
- // combining the first box with itself is how it lands in `target` — one operation
316
- // for both cases, rather than a copy that only ever runs once
317
- aabb3_array_combine(target, 0, found ? target : SCRATCH_BOUNDS, 0, SCRATCH_BOUNDS, 0);
318
-
319
- found = true;
320
- }
321
-
322
- return found;
323
- }
324
-
325
- async startup(entityManager) {
326
- this.entityManager = entityManager;
327
-
328
- // the scene's rows are this dataset's entities; the first system to place one says so
329
- const dataset = entityManager.dataset;
330
- const scene = this.#scene;
331
-
332
- assert.ok(
333
- scene.dataset === null || scene.dataset === undefined || scene.dataset === dataset,
334
- 'the scene is bound to another dataset'
335
- );
336
-
337
- scene.dataset = dataset;
338
-
339
- this.#graphics.set_scene(scene);
340
- }
341
-
342
- async shutdown(entityManager) {
343
- for (const entity of Array.from(this.#entries.keys())) {
344
- this.#drop(entity);
345
- }
346
-
347
- this.#models.clear();
348
-
349
- this.#context = null;
350
- this.#unregistered.length = 0;
351
- }
352
-
353
- /**
354
- * Tell the GPU about the models that have arrived since the last frame: their entities take
355
- * their rows, and their skins reach `GPUAnimationManager`.
356
- *
357
- * The manager hangs off the scene's GPU context, which exists only while there is a device, so
358
- * neither can happen where instances are built (a model loads whenever it loads, including
359
- * before the renderer has started). Registration is documented eventually-consistent at both
360
- * entry points, so a frame of latency here costs nothing: the ids are live immediately and the
361
- * chains that drive deformation are built when every joint has its row.
362
- *
363
- * A restart is the same event seen from here: the context object changes, every id and every
364
- * row the old one issued is void, and everything currently placed queues up again.
365
- *
366
- * @param {number} time_delta_seconds
367
- */
368
- update(time_delta_seconds) {
369
- this.#collect_arrived_urls();
370
-
371
- const context = this.#graphics.scene_context(this.#scene);
372
-
373
- if (context === null) {
374
- // No device — before the first start, or after a stop. Nothing is registered while
375
- // this holds, and the next context to arrive is a change like any other.
376
- return;
377
- }
378
-
379
- if (context !== this.#context) {
380
- this.#invalidate_registrations(context);
381
- }
382
-
383
- const waiting = this.#unregistered;
384
-
385
- if (waiting.length === 0) {
386
- return;
387
- }
388
-
389
- /*
390
- **A throw in here does not cost one model, it costs the session.** The list is cleared after
391
- the loop, so a registration that throws partway leaves the entries before it *already
392
- registered* and *still queued*: the next update registers them a second time, `bind` finds
393
- the entity already bound to another skin, and that assertion then fires once a frame for as
394
- long as the game runs. Registering one entry at a time and taking it off the list as it
395
- succeeds is the shape of the fix; what to do with an entry that *cannot* be registered is
396
- the open question, which is why it is written down here rather than fixed.
397
- */
398
- for (let i = 0; i < waiting.length; i++) {
399
- this.#register(waiting[i], context);
400
- }
401
-
402
- waiting.length = 0;
403
- }
404
-
405
- /**
406
- * Load the models of entities whose url has turned up since the last frame.
407
- *
408
- * Ahead of everything the device gates, because a model arrives whenever it arrives and there
409
- * may be no renderer yet — the same bargain {@link #attach} makes with registration.
410
- */
411
- #collect_arrived_urls() {
412
- const waiting = this.#awaiting_url;
413
-
414
- for (let i = waiting.length - 1; i >= 0; i--) {
415
- const entry = waiting[i];
416
-
417
- if (entry.model.url === null) {
418
- continue;
419
- }
420
-
421
- waiting.splice(i, 1);
422
-
423
- this.#attach(entry, entry.model.url);
424
- }
425
- }
426
-
427
- /**
428
- * A different renderer is drawing this scene now, so nothing that has been registered still is.
429
- *
430
- * @param {GPUSceneContext} context
431
- */
432
- #invalidate_registrations(context) {
433
- this.#context = context;
434
-
435
- const waiting = this.#unregistered;
436
-
437
- waiting.length = 0;
438
-
439
- for (const entry of this.#entries.values()) {
440
- if (entry.instance === null) {
441
- continue;
442
- }
443
-
444
- entry.animation = null;
445
- entry.context = null;
446
-
447
- waiting.push(entry);
448
- }
449
- }
450
-
451
- /**
452
- * Give an instance's entities their rows in a context, and its skins to the animation manager.
453
- *
454
- * Every entity of the model takes a `transforms` row — a joint composes on the GPU, a grouping
455
- * node is what its children compose under — and the placing entity takes one too, so the whole
456
- * hierarchy composes from it. The primitives' `meshes` rows are `ShadedGeometrySystem`'s.
457
- *
458
- * @param {Entry} entry
459
- * @param {GPUSceneContext} context
460
- */
461
- #register(entry, context) {
462
- const rows = context.rows;
463
- const entities = entry.instance.entities;
464
-
465
- for (let i = 0; i < entities.length; i++) {
466
- rows.acquire(entities[i]);
467
- }
468
-
469
- entry.animation = register_instance_animation(context, entry.instance);
470
- entry.context = context;
471
- }
472
-
473
- /**
474
- * @param {SGMesh} model
475
- * @param {Transform64} transform
476
- * @param {number} entity
477
- */
478
- link(model, transform, entity) {
479
- const entry = new Entry();
480
-
481
- entry.entity = entity;
482
- entry.model = model;
483
- entry.transform = transform;
484
-
485
- this.#entries.set(entity, entry);
486
-
487
- // The placing entity's own row is marked when its transform moves, not on a poll: an
488
- // entity that has not moved costs nothing, which is the same bargain the scene database
489
- // makes downstream. A Transform64 has no signals of its own, so the announcement comes from
490
- // the dataset. The entities under it follow through the attachment system and need no
491
- // marking of their own for a move of the root — the GPU composes them.
492
- entry.on_moved = () => {
493
- if (entry.context !== null) {
494
- entry.context.rows.mark_world(entity);
495
- }
496
- };
497
-
498
- this.entityManager.dataset.addEntityEventListener(entity, TRANSFORM64_EVENT_CHANGE, entry.on_moved);
499
-
500
- if (model.url === null) {
501
- // nothing to show yet; {@link update} watches for the url arriving
502
- this.#awaiting_url.push(entry);
503
-
504
- return;
505
- }
506
-
507
- this.#attach(entry, model.url);
508
- }
509
-
510
- /**
511
- * @param {SGMesh} model
512
- * @param {Transform64} transform
513
- * @param {number} entity
514
- */
515
- unlink(model, transform, entity) {
516
- this.#drop(entity);
517
- }
518
-
519
- /**
520
- * The prefab for a url, loading and compiling it on first mention.
521
- *
522
- * @param {string} url
523
- * @returns {Promise<Prefab>}
524
- */
525
- #model(url) {
526
- let prefab = this.#models.get(url);
527
-
528
- if (prefab === undefined) {
529
- prefab = this.#load(url).then(bundle => prefab_compile(bundle));
530
-
531
- this.#models.set(url, prefab);
532
- }
533
-
534
- return prefab;
535
- }
536
-
537
- /**
538
- * Load and compile the model if it has not been seen, then spawn it under the entity.
539
- *
540
- * @param {Entry} entry
541
- * @param {string} url
542
- */
543
- async #attach(entry, url) {
544
- const entity = entry.entity;
545
-
546
- const prefab = await this.#model(url);
547
-
548
- /*
549
- Which entry this load is for was decided before the wait rather than after it. A load is in
550
- flight for as long as a fetch and a decode take, and the entity can leave and come back
551
- inside that window — so asking `#entries` afterwards answers "the entry this entity has
552
- now", which may be a different one. Spawning for that one would leave a model in the scene
553
- nothing owns.
554
- */
555
- if (this.#entries.get(entity) !== entry) {
556
- // the entity left while its model was in flight, or left and came back as another
557
- // entry — both ordinary at level-load rates
558
- return;
559
- }
560
-
561
- const dataset = this.entityManager.dataset;
562
-
563
- const instance = prefab_instantiate(prefab, dataset, entity);
564
-
565
- entry.instance = instance;
566
-
567
- // A joint's offset moving — an IK solver, a ragdoll, a cloth writing it — is that joint's
568
- // row. The world transforms the attachment system composes below it are not: the GPU
569
- // composes those itself, from the offsets.
570
- const entities = instance.entities;
571
-
572
- for (let i = 1; i < entities.length; i++) {
573
- const member = entities[i];
574
-
575
- const on_offset_moved = () => {
576
- if (entry.context !== null) {
577
- entry.context.rows.mark_local(member);
578
- }
579
- };
580
-
581
- entry.on_offset_moved.set(member, on_offset_moved);
582
-
583
- dataset.addEntityEventListener(member, TRANSFORM_ATTACHMENT_EVENT_CHANGE, on_offset_moved);
584
- }
585
-
586
- // The GPU hears about it on the next update rather than here: a model finishes loading
587
- // whenever it finishes, and there may be no device to tell.
588
- this.#unregistered.push(entry);
589
- }
590
-
591
- /**
592
- * @param {number} entity
593
- */
594
- #drop(entity) {
595
- const entry = this.#entries.get(entity);
596
-
597
- if (entry === undefined) {
598
- return;
599
- }
600
-
601
- this.#entries.delete(entity);
602
-
603
- const dataset = this.entityManager.dataset;
604
-
605
- if (dataset.entityExists(entity)) {
606
- dataset.removeEntityEventListener(entity, TRANSFORM64_EVENT_CHANGE, entry.on_moved);
607
- }
608
-
609
- const waiting = this.#unregistered.indexOf(entry);
610
-
611
- if (waiting !== -1) {
612
- // it left before the GPU was ever told about it
613
- this.#unregistered.splice(waiting, 1);
614
- }
615
-
616
- const awaiting = this.#awaiting_url.indexOf(entry);
617
-
618
- if (awaiting !== -1) {
619
- // it left before it ever had a model to load
620
- this.#awaiting_url.splice(awaiting, 1);
621
- }
622
-
623
- const instance = entry.instance;
624
-
625
- if (instance === null) {
626
- return;
627
- }
628
-
629
- entry.instance = null;
630
-
631
- for (const [member, listener] of entry.on_offset_moved) {
632
- if (dataset.entityExists(member)) {
633
- dataset.removeEntityEventListener(member, TRANSFORM_ATTACHMENT_EVENT_CHANGE, listener);
634
- }
635
- }
636
-
637
- entry.on_offset_moved.clear();
638
-
639
- // A destroyed context must not be handed its rows or its ids back: a renderer restart
640
- // takes the GPU scene context with it, and what the old one issued means nothing to the
641
- // context that replaces it — so the entry forgets them rather than returning them.
642
- if (entry.context !== null && entry.context === this.#graphics.scene_context(this.#scene)) {
643
- const rows = entry.context.rows;
644
- const entities = instance.entities;
645
-
646
- for (let i = 0; i < entities.length; i++) {
647
- rows.release(entities[i]);
648
- }
649
-
650
- if (entry.animation !== null) {
651
- unregister_instance_animation(entry.animation);
652
- }
653
- }
654
-
655
- entry.animation = null;
656
- entry.context = null;
657
-
658
- // the entities the model became are the model, so they go with it
659
- prefab_instance_destroy(dataset, instance);
660
- }
661
- }
1
+ import { assert } from "../../core/assert.js";
2
+ import { aabb3_array_combine } from "../../core/geom/3d/aabb/aabb3_array_combine.js";
3
+ import { aabb3_matrix4_project } from "../../core/geom/3d/aabb/aabb3_matrix4_project.js";
4
+ import { Scene } from "../../shade/renderer/scene/Scene.js";
5
+ import { System } from "../ecs/System.js";
6
+ import { Transform64 } from "../ecs/transform/Transform64.js";
7
+ import { TRANSFORM64_EVENT_CHANGE } from "../ecs/transform/TRANSFORM64_EVENT_CHANGE.js";
8
+ import { TRANSFORM_ATTACHMENT_EVENT_CHANGE } from "../ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js";
9
+ import { ShadedGeometry } from "../graphics/ecs/mesh-v2/ShadedGeometry.js";
10
+ import { SGMesh } from "../graphics/ecs/mesh-v2/aggregate/SGMesh.js";
11
+ import { prefab_compile } from "./prefab/prefab_compile.js";
12
+ import { prefab_instance_destroy, prefab_instantiate } from "./prefab/prefab_instantiate.js";
13
+ import {
14
+ register_instance_animation,
15
+ unregister_instance_animation
16
+ } from "./register_instance_animation.js";
17
+
18
+ /**
19
+ * @typedef {import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
20
+ * @typedef {import("../../shade/renderer/loader/SceneBundle.js").SceneBundle} SceneBundle
21
+ * @typedef {import("./prefab/Prefab.js").Prefab} Prefab
22
+ * @typedef {import("./prefab/PrefabInstance.js").PrefabInstance} PrefabInstance
23
+ * @typedef {import("./register_instance_animation.js").InstanceAnimationRegistration} InstanceAnimationRegistration
24
+ * @typedef {import("./GraphicsEngine.js").GraphicsEngine} GraphicsEngine
25
+ */
26
+
27
+ /**
28
+ * What {@link MeshSystem.mesh_entities_of} answers for an entity with nothing in the scene.
29
+ *
30
+ * @type {Int32Array}
31
+ */
32
+ const NO_ENTITIES = new Int32Array(0);
33
+
34
+ const SCRATCH_BOUNDS = new Float32Array(6);
35
+
36
+ /**
37
+ * What one entity has: its model, once loaded, as entities; the ids the GPU issued for the model's
38
+ * skins; and what is listening on its behalf.
39
+ */
40
+ class Entry {
41
+ /**
42
+ * @type {number}
43
+ */
44
+ entity = -1;
45
+
46
+ /**
47
+ * @type {SGMesh}
48
+ */
49
+ model = null;
50
+
51
+ /**
52
+ * @type {Transform64}
53
+ */
54
+ transform = null;
55
+
56
+ /**
57
+ * The model as entities, or null until it has loaded.
58
+ *
59
+ * @type {PrefabInstance|null}
60
+ */
61
+ instance = null;
62
+
63
+ /**
64
+ * What the GPU gave back for the instance's skins, or null while there is nothing registered —
65
+ * no model yet, no device yet, or a renderer restart that has not been drained.
66
+ *
67
+ * @type {InstanceAnimationRegistration|null}
68
+ */
69
+ animation = null;
70
+
71
+ /**
72
+ * The GPU context the instance's entities hold their rows in, or null while they hold none.
73
+ *
74
+ * @type {GPUSceneContext|null}
75
+ */
76
+ context = null;
77
+
78
+ /**
79
+ * Fires when the placing entity's world transform moves.
80
+ *
81
+ * @type {function(): void}
82
+ */
83
+ on_moved = null;
84
+
85
+ /**
86
+ * One per entity of the instance, firing when that entity's offset from its parent moves —
87
+ * a joint an IK solver, a ragdoll or a cloth wrote.
88
+ *
89
+ * @type {Map<number, function(): void>}
90
+ */
91
+ on_offset_moved = new Map();
92
+ }
93
+
94
+ /**
95
+ * Puts models into the scene as entities, and keeps their rows where the entities say.
96
+ *
97
+ * **A model is a prefab, and a placement is entities.** A loaded bundle is compiled once per url
98
+ * ({@link prefab_compile}) and spawned once per entity that wears it
99
+ * ({@link prefab_instantiate}): every node of the file becomes an entity attached to its parent's,
100
+ * named, drawing where it draws, with the placing entity as the root. What used to be a private
101
+ * copy of a node tree per placement is the dataset's own hierarchy, addressable by every system —
102
+ * IK finds a foot by name, cloth seeds from joints, gameplay asks where a socket is — and the
103
+ * renderer's tables are indexed by those entities, at `entity + 1`.
104
+ *
105
+ * **It owns the scene and tells the facade to draw it**, rather than the facade handing a graph out
106
+ * for anyone to write into.
107
+ *
108
+ * **Rows need a device, and registration does too.** A model loads whenever it loads, and there
109
+ * may be no renderer yet; {@link update} attaches every instance's entities to the scene's GPU
110
+ * context when one arrives, registers its skins with the animation manager, and does both again
111
+ * after a renderer restart. Driving the clips is not this system's business — that is the
112
+ * animation systems' — but a clip nothing has registered cannot be driven by anyone, which is why
113
+ * the instance is handed out ({@link instance_of}) rather than kept.
114
+ */
115
+ export class MeshSystem extends System {
116
+ /**
117
+ * @type {GraphicsEngine}
118
+ */
119
+ #graphics;
120
+
121
+ /**
122
+ * The scene this system writes into and the facade draws. Received rather than created: lights
123
+ * come from a system of their own, and both have to be putting content into the same scene for
124
+ * either to be visible.
125
+ *
126
+ * @type {Scene}
127
+ */
128
+ #scene;
129
+
130
+ /**
131
+ * Loaded and compiled models, by url. A level places the same model many times over, and
132
+ * loading it once per placement would be the dominant cost of opening one; compiling it once
133
+ * per placement would be the next.
134
+ *
135
+ * @type {Map<string, Promise<Prefab>>}
136
+ */
137
+ #models = new Map();
138
+
139
+ /**
140
+ * @type {Map<number, Entry>}
141
+ */
142
+ #entries = new Map();
143
+
144
+ /**
145
+ * Shade's GPU state for {@link scene}, as of the last {@link update}. Held to answer one
146
+ * question: has the renderer been replaced since the last frame, so that everything placed has
147
+ * to be attached and registered again.
148
+ *
149
+ * @type {GPUSceneContext|null}
150
+ */
151
+ #context = null;
152
+
153
+ /**
154
+ * Entries whose instance is not attached to {@link #context} — either because it has just
155
+ * loaded, or because a restart invalidated what it had. A queue rather than a scan over every
156
+ * entity, because this is per-frame work and the answer is almost always "nothing to do".
157
+ *
158
+ * @type {Entry[]}
159
+ */
160
+ #unregistered = [];
161
+
162
+ /**
163
+ * Entities whose `SGMesh` carried no url when it was linked.
164
+ *
165
+ * `SGMesh.url` is an accessor with no change signal behind it, and the game assigns it late as a
166
+ * matter of course: `GeneratedArmySystem` puts the component on an army entity and fills the
167
+ * url in from a promise, once the army it generated has picked the leader whose model the army
168
+ * wears. So a url that is missing at link time is the normal path to a model rather than an
169
+ * edge case, and the only way to notice one arriving is to look again.
170
+ *
171
+ * @type {Entry[]}
172
+ */
173
+ #awaiting_url = [];
174
+
175
+ /**
176
+ * Loads a glTF into Shade's own representation. Injected rather than imported so that the
177
+ * system can be driven in a spec without a network or a device — the loader is the one genuine
178
+ * boundary here.
179
+ *
180
+ * @type {function(string): Promise<SceneBundle>}
181
+ */
182
+ #load;
183
+
184
+ /**
185
+ * @param {GraphicsEngine} graphics
186
+ * @param {Scene} scene
187
+ * @param {function(string): Promise<SceneBundle>} load
188
+ */
189
+ constructor(graphics, scene, load) {
190
+ super();
191
+
192
+ assert.defined(graphics, 'graphics');
193
+ assert.equal(scene.isScene, true, 'scene.isScene !== true');
194
+ assert.typeOf(load, 'function', 'load');
195
+
196
+ this.#graphics = graphics;
197
+ this.#scene = scene;
198
+ this.#load = load;
199
+
200
+ this.dependencies = [SGMesh, Transform64];
201
+ }
202
+
203
+ /**
204
+ * @returns {Scene}
205
+ */
206
+ get scene() {
207
+ return this.#scene;
208
+ }
209
+
210
+ /**
211
+ * The model an entity is showing, as entities: its skins and clips addressed to them, and its
212
+ * nodes by name.
213
+ *
214
+ * Handed out rather than copied because an animation driver has to know *which* instance it is
215
+ * bound to: a model swap builds a new one, and a driver still holding the old one would be
216
+ * driving entities that have gone. The object's identity is the only signal that says so.
217
+ *
218
+ * **A model swap is remove-component then add-component.** Reassigning {@link SGMesh#url} on an
219
+ * attached mesh is NOT one and is not observed: `link` reads the url once, the only other
220
+ * reader is the {@link #collect_arrived_urls} drain that an entry leaves permanently the first
221
+ * frame a url is present, and the component's setter raises no signal. Noticing it would mean
222
+ * comparing a url per mesh entity per frame, which is the opposite of the bargain the rest of
223
+ * this system makes — an entity that has not moved costs nothing.
224
+ *
225
+ * @param {number} entity
226
+ * @returns {PrefabInstance|null} `null` for an entity this system has never seen, or one
227
+ * whose model has not finished loading
228
+ */
229
+ instance_of(entity) {
230
+ const entry = this.#entries.get(entity);
231
+
232
+ if (entry === undefined) {
233
+ return null;
234
+ }
235
+
236
+ return entry.instance;
237
+ }
238
+
239
+ /**
240
+ * What the GPU's animation manager gave back for that instance — the skin ids, in the
241
+ * instance's own order.
242
+ *
243
+ * Same reasoning as {@link instance_of} and a stronger version of it: these ids belong to one
244
+ * renderer, and a restart voids every one of them. The object is replaced when that happens, so
245
+ * a driver that compares it against what it bound against notices in the same frame.
246
+ *
247
+ * @param {number} entity
248
+ * @returns {InstanceAnimationRegistration|null} `null` while there is nothing registered — no
249
+ * model yet, no device yet, or a renderer restart that has not been drained
250
+ */
251
+ animation_of(entity) {
252
+ const entry = this.#entries.get(entity);
253
+
254
+ if (entry === undefined) {
255
+ return null;
256
+ }
257
+
258
+ return entry.animation;
259
+ }
260
+
261
+ /**
262
+ * The entities of an entity's model that draw — one per primitive of the file. Each holds the
263
+ * `meshes` row `entity + 1`, which is what the visibility buffer writes for every pixel it
264
+ * covers; anything that has to say something about a particular model's meshes starts here.
265
+ *
266
+ * @param {number} entity
267
+ * @returns {Int32Array} empty for an entity with nothing in the scene — never seen, or still
268
+ * loading, and neither is an error. Not to be kept: a model swap replaces it
269
+ */
270
+ mesh_entities_of(entity) {
271
+ const entry = this.#entries.get(entity);
272
+
273
+ if (entry === undefined || entry.instance === null) {
274
+ return NO_ENTITIES;
275
+ }
276
+
277
+ return entry.instance.mesh_entities;
278
+ }
279
+
280
+ /**
281
+ * Where an entity's model is, in world space: the union of its primitives' geometry bounds
282
+ * under their own entities' world transforms — which the ECS composes, so this answers with no
283
+ * device and with no frame of latency, from what the simulation knows. The box the renderer
284
+ * culls by is derived on the GPU from the same and is not consulted.
285
+ *
286
+ * A skinned primitive answers at its rest pose, under the frame its skin deforms in.
287
+ *
288
+ * @param {ArrayLike<number>|number[]|Float32Array} target aabb3, order `x0,y0,z0,x1,y1,z1`
289
+ * @param {number} entity
290
+ * @returns {boolean} `false` when the entity has nothing in the scene — it may be an entity this
291
+ * system has never seen, or one whose model is still loading, and neither is an error
292
+ */
293
+ compute_world_bounds(target, entity) {
294
+ const entry = this.#entries.get(entity);
295
+
296
+ if (entry === undefined || entry.instance === null) {
297
+ return false;
298
+ }
299
+
300
+ const dataset = this.entityManager.dataset;
301
+ const primitives = entry.instance.mesh_entities;
302
+
303
+ let found = false;
304
+
305
+ for (let i = 0; i < primitives.length; i++) {
306
+ const primitive = primitives[i];
307
+
308
+ if (!dataset.entityExists(primitive)) {
309
+ continue;
310
+ }
311
+
312
+ const geometry = dataset.getComponent(primitive, ShadedGeometry);
313
+ const world = dataset.getComponent(primitive, Transform64);
314
+
315
+ if (geometry === undefined || world === undefined || geometry.geometry === null) {
316
+ continue;
317
+ }
318
+
319
+ // a Transform64's matrix starts at element 0, so it is its own mat4 argument
320
+ aabb3_matrix4_project(SCRATCH_BOUNDS, geometry.geometry.bounding_box, world);
321
+
322
+ // combining the first box with itself is how it lands in `target` — one operation
323
+ // for both cases, rather than a copy that only ever runs once
324
+ aabb3_array_combine(target, 0, found ? target : SCRATCH_BOUNDS, 0, SCRATCH_BOUNDS, 0);
325
+
326
+ found = true;
327
+ }
328
+
329
+ return found;
330
+ }
331
+
332
+ async startup(entityManager) {
333
+ this.entityManager = entityManager;
334
+
335
+ // the scene's rows are this dataset's entities; the first system to place one says so
336
+ const dataset = entityManager.dataset;
337
+ const scene = this.#scene;
338
+
339
+ assert.ok(
340
+ scene.dataset === null || scene.dataset === undefined || scene.dataset === dataset,
341
+ 'the scene is bound to another dataset'
342
+ );
343
+
344
+ scene.dataset = dataset;
345
+
346
+ this.#graphics.set_scene(scene);
347
+ }
348
+
349
+ async shutdown(entityManager) {
350
+ for (const entity of Array.from(this.#entries.keys())) {
351
+ this.#drop(entity);
352
+ }
353
+
354
+ this.#models.clear();
355
+
356
+ this.#context = null;
357
+ this.#unregistered.length = 0;
358
+ }
359
+
360
+ /**
361
+ * Tell the GPU about the models that have arrived since the last frame: their entities take
362
+ * their rows, and their skins reach `GPUAnimationManager`.
363
+ *
364
+ * The manager hangs off the scene's GPU context, which exists only while there is a device, so
365
+ * neither can happen where instances are built (a model loads whenever it loads, including
366
+ * before the renderer has started). Registration is documented eventually-consistent at both
367
+ * entry points, so a frame of latency here costs nothing: the ids are live immediately, and
368
+ * what drives the deformation — a clip's bindings, a skin's meshes — follows when every entity
369
+ * it names has its row.
370
+ *
371
+ * A restart is the same event seen from here: the context object changes, every id and every
372
+ * row the old one issued is void, and everything currently placed queues up again.
373
+ *
374
+ * @param {number} time_delta_seconds
375
+ */
376
+ update(time_delta_seconds) {
377
+ this.#collect_arrived_urls();
378
+
379
+ const context = this.#graphics.scene_context(this.#scene);
380
+
381
+ if (context === null) {
382
+ // No device — before the first start, or after a stop. Nothing is registered while
383
+ // this holds, and the next context to arrive is a change like any other.
384
+ return;
385
+ }
386
+
387
+ if (context !== this.#context) {
388
+ this.#invalidate_registrations(context);
389
+ }
390
+
391
+ const waiting = this.#unregistered;
392
+
393
+ if (waiting.length === 0) {
394
+ return;
395
+ }
396
+
397
+ /*
398
+ **A throw in here must not cost the session.** The list used to be cleared after the loop,
399
+ so a registration that threw partway left the entries before it *already registered* and
400
+ *still queued*: the next update registered them a second time, `bind` found the entity
401
+ already bound to another skin, and that assertion then fired once a frame for as long as
402
+ the game ran — one failed model converted into permanent corruption of an unrelated one.
403
+
404
+ So an entry comes off the list BEFORE it is registered, and can never be registered twice
405
+ whatever happens next. The open question this leaves — what to do with an entry that
406
+ *cannot* be registered — is answered the only way a frame loop can afford: it is dropped,
407
+ once, with a message. That model does not appear; every other one does, and the next frame
408
+ is a normal frame.
409
+ */
410
+ const entries = waiting.slice();
411
+
412
+ waiting.length = 0;
413
+
414
+ for (let i = 0; i < entries.length; i++) {
415
+ const entry = entries[i];
416
+
417
+ try {
418
+ this.#register(entry, context);
419
+ } catch (e) {
420
+ console.error(`MeshSystem: failed to register entity ${entry.entity} ('${entry.model?.url}'), dropping it`, e);
421
+ }
422
+ }
423
+ }
424
+
425
+ /**
426
+ * Load the models of entities whose url has turned up since the last frame.
427
+ *
428
+ * Ahead of everything the device gates, because a model arrives whenever it arrives and there
429
+ * may be no renderer yet — the same bargain {@link #attach} makes with registration.
430
+ */
431
+ #collect_arrived_urls() {
432
+ const waiting = this.#awaiting_url;
433
+
434
+ for (let i = waiting.length - 1; i >= 0; i--) {
435
+ const entry = waiting[i];
436
+
437
+ if (entry.model.url === null) {
438
+ continue;
439
+ }
440
+
441
+ waiting.splice(i, 1);
442
+
443
+ this.#attach(entry, entry.model.url);
444
+ }
445
+ }
446
+
447
+ /**
448
+ * A different renderer is drawing this scene now, so nothing that has been registered still is.
449
+ *
450
+ * @param {GPUSceneContext} context
451
+ */
452
+ #invalidate_registrations(context) {
453
+ this.#context = context;
454
+
455
+ const waiting = this.#unregistered;
456
+
457
+ waiting.length = 0;
458
+
459
+ for (const entry of this.#entries.values()) {
460
+ if (entry.instance === null) {
461
+ continue;
462
+ }
463
+
464
+ entry.animation = null;
465
+ entry.context = null;
466
+
467
+ waiting.push(entry);
468
+ }
469
+ }
470
+
471
+ /**
472
+ * Give an instance's entities their rows in a context, and its skins to the animation manager.
473
+ *
474
+ * Every entity of the model takes a `transforms` row — a joint composes on the GPU, a grouping
475
+ * node is what its children compose under — and the placing entity takes one too, so the whole
476
+ * hierarchy composes from it. The primitives' `meshes` rows are `ShadedGeometrySystem`'s.
477
+ *
478
+ * @param {Entry} entry
479
+ * @param {GPUSceneContext} context
480
+ */
481
+ #register(entry, context) {
482
+ const rows = context.rows;
483
+ const entities = entry.instance.entities;
484
+
485
+ for (let i = 0; i < entities.length; i++) {
486
+ rows.acquire(entities[i]);
487
+ }
488
+
489
+ entry.animation = register_instance_animation(context, entry.instance);
490
+ entry.context = context;
491
+ }
492
+
493
+ /**
494
+ * @param {SGMesh} model
495
+ * @param {Transform64} transform
496
+ * @param {number} entity
497
+ */
498
+ link(model, transform, entity) {
499
+ const entry = new Entry();
500
+
501
+ entry.entity = entity;
502
+ entry.model = model;
503
+ entry.transform = transform;
504
+
505
+ this.#entries.set(entity, entry);
506
+
507
+ // The placing entity's own row is marked when its transform moves, not on a poll: an
508
+ // entity that has not moved costs nothing, which is the same bargain the scene database
509
+ // makes downstream. A Transform64 has no signals of its own, so the announcement comes from
510
+ // the dataset. The entities under it follow through the attachment system and need no
511
+ // marking of their own for a move of the root — the GPU composes them.
512
+ entry.on_moved = () => {
513
+ if (entry.context !== null) {
514
+ entry.context.rows.mark_world(entity);
515
+ }
516
+ };
517
+
518
+ this.entityManager.dataset.addEntityEventListener(entity, TRANSFORM64_EVENT_CHANGE, entry.on_moved);
519
+
520
+ if (model.url === null) {
521
+ // nothing to show yet; {@link update} watches for the url arriving
522
+ this.#awaiting_url.push(entry);
523
+
524
+ return;
525
+ }
526
+
527
+ this.#attach(entry, model.url);
528
+ }
529
+
530
+ /**
531
+ * @param {SGMesh} model
532
+ * @param {Transform64} transform
533
+ * @param {number} entity
534
+ */
535
+ unlink(model, transform, entity) {
536
+ this.#drop(entity);
537
+ }
538
+
539
+ /**
540
+ * The prefab for a url, loading and compiling it on first mention.
541
+ *
542
+ * @param {string} url
543
+ * @returns {Promise<Prefab>}
544
+ */
545
+ #model(url) {
546
+ let prefab = this.#models.get(url);
547
+
548
+ if (prefab === undefined) {
549
+ prefab = this.#load(url).then(bundle => prefab_compile(bundle));
550
+
551
+ this.#models.set(url, prefab);
552
+ }
553
+
554
+ return prefab;
555
+ }
556
+
557
+ /**
558
+ * Load and compile the model if it has not been seen, then spawn it under the entity.
559
+ *
560
+ * @param {Entry} entry
561
+ * @param {string} url
562
+ */
563
+ async #attach(entry, url) {
564
+ const entity = entry.entity;
565
+
566
+ const prefab = await this.#model(url);
567
+
568
+ /*
569
+ Which entry this load is for was decided before the wait rather than after it. A load is in
570
+ flight for as long as a fetch and a decode take, and the entity can leave and come back
571
+ inside that window — so asking `#entries` afterwards answers "the entry this entity has
572
+ now", which may be a different one. Spawning for that one would leave a model in the scene
573
+ nothing owns.
574
+ */
575
+ if (this.#entries.get(entity) !== entry) {
576
+ // the entity left while its model was in flight, or left and came back as another
577
+ // entry — both ordinary at level-load rates
578
+ return;
579
+ }
580
+
581
+ const dataset = this.entityManager.dataset;
582
+
583
+ const instance = prefab_instantiate(prefab, dataset, entity);
584
+
585
+ entry.instance = instance;
586
+
587
+ // A joint's offset moving — an IK solver, a ragdoll, a cloth writing it — is that joint's
588
+ // row. The world transforms the attachment system composes below it are not: the GPU
589
+ // composes those itself, from the offsets.
590
+ const entities = instance.entities;
591
+
592
+ for (let i = 1; i < entities.length; i++) {
593
+ const member = entities[i];
594
+
595
+ const on_offset_moved = () => {
596
+ if (entry.context !== null) {
597
+ entry.context.rows.mark_local(member);
598
+ }
599
+ };
600
+
601
+ entry.on_offset_moved.set(member, on_offset_moved);
602
+
603
+ dataset.addEntityEventListener(member, TRANSFORM_ATTACHMENT_EVENT_CHANGE, on_offset_moved);
604
+ }
605
+
606
+ // The GPU hears about it on the next update rather than here: a model finishes loading
607
+ // whenever it finishes, and there may be no device to tell.
608
+ this.#unregistered.push(entry);
609
+ }
610
+
611
+ /**
612
+ * @param {number} entity
613
+ */
614
+ #drop(entity) {
615
+ const entry = this.#entries.get(entity);
616
+
617
+ if (entry === undefined) {
618
+ return;
619
+ }
620
+
621
+ this.#entries.delete(entity);
622
+
623
+ const dataset = this.entityManager.dataset;
624
+
625
+ if (dataset.entityExists(entity)) {
626
+ dataset.removeEntityEventListener(entity, TRANSFORM64_EVENT_CHANGE, entry.on_moved);
627
+ }
628
+
629
+ const waiting = this.#unregistered.indexOf(entry);
630
+
631
+ if (waiting !== -1) {
632
+ // it left before the GPU was ever told about it
633
+ this.#unregistered.splice(waiting, 1);
634
+ }
635
+
636
+ const awaiting = this.#awaiting_url.indexOf(entry);
637
+
638
+ if (awaiting !== -1) {
639
+ // it left before it ever had a model to load
640
+ this.#awaiting_url.splice(awaiting, 1);
641
+ }
642
+
643
+ const instance = entry.instance;
644
+
645
+ if (instance === null) {
646
+ return;
647
+ }
648
+
649
+ entry.instance = null;
650
+
651
+ for (const [member, listener] of entry.on_offset_moved) {
652
+ if (dataset.entityExists(member)) {
653
+ dataset.removeEntityEventListener(member, TRANSFORM_ATTACHMENT_EVENT_CHANGE, listener);
654
+ }
655
+ }
656
+
657
+ entry.on_offset_moved.clear();
658
+
659
+ // A destroyed context must not be handed its rows or its ids back: a renderer restart
660
+ // takes the GPU scene context with it, and what the old one issued means nothing to the
661
+ // context that replaces it — so the entry forgets them rather than returning them.
662
+ if (entry.context !== null && entry.context === this.#graphics.scene_context(this.#scene)) {
663
+ const rows = entry.context.rows;
664
+ const entities = instance.entities;
665
+
666
+ for (let i = 0; i < entities.length; i++) {
667
+ rows.release(entities[i]);
668
+ }
669
+
670
+ if (entry.animation !== null) {
671
+ unregister_instance_animation(entry.animation);
672
+ }
673
+ }
674
+
675
+ entry.animation = null;
676
+ entry.context = null;
677
+
678
+ // the entities the model became are the model, so they go with it
679
+ prefab_instance_destroy(dataset, instance);
680
+ }
681
+ }