@woosh/meep-engine 3.26.0 → 3.28.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 (449) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +542 -0
  4. package/src/core/binary/lz4/LZ4_LEVEL.d.ts +33 -0
  5. package/src/core/binary/lz4/LZ4_LEVEL.d.ts.map +1 -0
  6. package/src/core/binary/lz4/LZ4_LEVEL.js +32 -0
  7. package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts +33 -0
  8. package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts.map +1 -0
  9. package/src/core/binary/lz4/lz4_compress_block_at_level.js +47 -0
  10. package/src/core/binary/lz4/lz4_compress_block_hc.d.ts +40 -0
  11. package/src/core/binary/lz4/lz4_compress_block_hc.d.ts.map +1 -0
  12. package/src/core/binary/lz4/lz4_compress_block_hc.js +1382 -0
  13. package/src/core/binary/lz4/lz4_decompress_block.d.ts +2 -1
  14. package/src/core/binary/lz4/lz4_decompress_block.d.ts.map +1 -1
  15. package/src/core/binary/lz4/lz4_decompress_block.js +31 -6
  16. package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts +15 -0
  17. package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts.map +1 -0
  18. package/src/core/geom/3d/mat4/m4_linear_determinant.js +24 -0
  19. package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts +4 -2
  20. package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts.map +1 -1
  21. package/src/core/geom/3d/mat4/m4_normal_matrix3.js +21 -11
  22. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +14 -7
  23. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  24. package/src/core/geom/3d/shape/HeightMapShape3D.js +87 -78
  25. package/src/engine/Engine.d.ts.map +1 -1
  26. package/src/engine/Engine.js +38 -1
  27. package/src/engine/graphics3/GraphicsEngine.d.ts +5 -1
  28. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  29. package/src/engine/graphics3/GraphicsEngine.js +834 -830
  30. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  31. package/src/shade/RENDERER_CONTRACT.md +19 -10
  32. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +1 -1
  33. package/src/shade/playground/vgeo_runtime/README.md +186 -27
  34. package/src/shade/playground/vgeo_runtime/index.html +112 -62
  35. package/src/shade/playground/vgeo_runtime/main.js +678 -88
  36. package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +18 -0
  37. package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -0
  38. package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.js +23 -5
  39. package/src/shade/playground/vgeo_scene/README.md +408 -0
  40. package/src/shade/playground/vgeo_scene/index.html +144 -0
  41. package/src/shade/playground/vgeo_scene/main.d.ts +2 -0
  42. package/src/shade/playground/vgeo_scene/main.d.ts.map +1 -0
  43. package/src/shade/playground/vgeo_scene/main.js +1716 -0
  44. package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -1
  45. package/src/shade/renderer/Renderer.d.ts +4 -1
  46. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  47. package/src/shade/renderer/Renderer.js +5 -2
  48. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -2
  49. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +11 -0
  50. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  51. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +16 -8
  52. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  53. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +16 -11
  54. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  55. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +3 -29
  56. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts +22 -0
  57. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts.map +1 -0
  58. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.js +49 -0
  59. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +77 -7
  60. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +36 -23
  61. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +17 -14
  62. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +19 -1
  63. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
  64. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +21 -1
  65. package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.d.ts.map +1 -1
  66. package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.js +5 -9
  67. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts +32 -0
  68. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts.map +1 -0
  69. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +59 -0
  70. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -0
  71. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts +44 -0
  72. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts.map +1 -0
  73. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +36 -0
  74. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -0
  75. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_levels.js → level/vgeo_build_levels.js} +61 -95
  76. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts +19 -0
  77. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts.map +1 -0
  78. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.js → level/vgeo_build_root_group.js} +1 -1
  79. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +73 -0
  80. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -0
  81. package/src/shade/renderer/geometry/virtual/build/{VirtualGeometryMesh.js → mesh/VirtualGeometryMesh.js} +7 -7
  82. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +29 -0
  83. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -0
  84. package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_normals.js → mesh/vgeo_compute_vertex_normals.js} +3 -3
  85. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +31 -0
  86. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -0
  87. package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_tangents.js → mesh/vgeo_compute_vertex_tangents.js} +5 -5
  88. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +46 -0
  89. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -0
  90. package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.js → mesh/vgeo_normalize_source.js} +9 -9
  91. package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts +13 -0
  92. package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts.map +1 -0
  93. package/src/shade/renderer/geometry/virtual/build/{vgeo_assemble_pages.js → page/vgeo_assemble_pages.js} +63 -16
  94. package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts +13 -0
  95. package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts.map +1 -0
  96. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.js → page/vgeo_build_page_nodes.js} +4 -4
  97. package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts +22 -0
  98. package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts.map +1 -0
  99. package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.js → page/vgeo_page_node_count.js} +2 -2
  100. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +52 -0
  101. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -0
  102. package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.js → partition/VGeoFaceGraph.js} +1 -1
  103. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts +14 -0
  104. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -0
  105. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts +29 -0
  106. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts.map +1 -0
  107. package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.js → partition/vgeo_partition_graph.js} +2 -2
  108. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts +41 -0
  109. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts.map +1 -0
  110. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.js +92 -0
  111. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts +10 -0
  112. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts.map +1 -0
  113. package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.js → partition/vgeo_split_face_set.js} +12 -55
  114. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts +15 -0
  115. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -0
  116. package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set_packed.js → partition/vgeo_split_face_set_packed.js} +3 -3
  117. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts +12 -0
  118. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts.map +1 -0
  119. package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.js → sphere/vgeo_bounding_sphere.js} +3 -3
  120. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts +18 -0
  121. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts.map +1 -0
  122. package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.js → sphere/vgeo_containing_sphere.js} +3 -3
  123. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts +9 -0
  124. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts.map +1 -0
  125. package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.js → sphere/vgeo_sphere_inflate_to_contain.js} +1 -1
  126. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +24 -0
  127. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -0
  128. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +20 -0
  129. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -0
  130. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +14 -0
  131. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -0
  132. package/src/shade/renderer/geometry/virtual/build/{vgeo_extract_submesh.js → submesh/vgeo_extract_submesh.js} +5 -5
  133. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +12 -0
  134. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -0
  135. package/src/shade/renderer/geometry/virtual/build/{vgeo_gather_faces.js → submesh/vgeo_gather_faces.js} +2 -2
  136. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts +11 -0
  137. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts.map +1 -0
  138. package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.js → submesh/vgeo_narrow_indices.js} +3 -3
  139. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
  140. package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
  141. package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +10 -11
  142. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +22 -0
  143. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
  144. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +24 -0
  145. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts +8 -2
  146. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts.map +1 -1
  147. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.js +8 -2
  148. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +12 -0
  149. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
  150. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +13 -0
  151. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +8 -1
  152. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
  153. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +11 -3
  154. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +9 -0
  155. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
  156. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +10 -1
  157. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts +15 -0
  158. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts.map +1 -0
  159. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.js +15 -0
  160. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts +18 -0
  161. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts.map +1 -0
  162. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.js +17 -0
  163. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts +8 -0
  164. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts.map +1 -0
  165. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.js +7 -0
  166. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +3 -0
  167. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +16 -0
  168. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts +14 -0
  169. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts.map +1 -0
  170. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.js +13 -0
  171. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts +11 -0
  172. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts.map +1 -0
  173. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.js +10 -0
  174. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +28 -0
  175. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
  176. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +7 -3
  177. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +20 -0
  178. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -1
  179. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +20 -2
  180. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +4 -0
  181. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
  182. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +4 -0
  183. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +29 -3
  184. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
  185. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +81 -122
  186. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +40 -0
  187. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
  188. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +44 -0
  189. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +69 -0
  190. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -0
  191. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +236 -0
  192. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +14 -0
  193. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -1
  194. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +15 -0
  195. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts +31 -0
  196. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts.map +1 -0
  197. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.js +32 -0
  198. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +10 -0
  199. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -1
  200. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +21 -1
  201. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts +15 -0
  202. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts.map +1 -0
  203. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.js +84 -0
  204. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts +22 -0
  205. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -0
  206. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +96 -0
  207. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
  208. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +63 -3
  209. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  210. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +219 -17
  211. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  212. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +156 -11
  213. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +656 -0
  214. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +33 -36
  215. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  216. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +109 -193
  217. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +109 -29
  218. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  219. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +173 -105
  220. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +37 -0
  221. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +109 -26
  222. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +548 -0
  223. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +29 -50
  224. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  225. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +55 -487
  226. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +84 -0
  227. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -0
  228. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +393 -0
  229. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +234 -0
  230. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -0
  231. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +1388 -0
  232. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts +81 -0
  233. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts.map +1 -0
  234. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.js +89 -0
  235. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +53 -34
  236. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  237. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +407 -124
  238. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +100 -0
  239. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -0
  240. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +219 -0
  241. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts +17 -0
  242. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts.map +1 -0
  243. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.js +47 -0
  244. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts +20 -0
  245. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts.map +1 -0
  246. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.js +19 -0
  247. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  248. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -12
  249. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +8 -8
  250. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  251. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +11 -73
  252. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts +19 -0
  253. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -0
  254. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +98 -0
  255. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts +31 -0
  256. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -0
  257. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +99 -0
  258. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts +17 -0
  259. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts.map +1 -0
  260. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.js +39 -0
  261. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  262. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +18 -1
  263. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -1
  264. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +5 -15
  265. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts +3 -0
  266. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -0
  267. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +77 -0
  268. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts +3 -0
  269. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -0
  270. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +130 -0
  271. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  272. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +32 -37
  273. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  274. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +576 -230
  275. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +15 -18
  276. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  277. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +19 -28
  278. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  279. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +45 -25
  280. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
  281. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +11 -0
  282. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
  283. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +0 -1
  284. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +12 -10
  285. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +1 -0
  286. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +8 -0
  287. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +7 -2
  288. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -1
  289. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +8 -3
  290. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +2 -0
  291. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +19 -0
  292. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -1
  293. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +1 -1
  294. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts +5 -0
  295. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts.map +1 -0
  296. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.js +22 -0
  297. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts +14 -0
  298. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts.map +1 -0
  299. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.js +13 -0
  300. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts +17 -0
  301. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map +1 -0
  302. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.js +16 -0
  303. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +15 -0
  304. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -0
  305. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +16 -0
  306. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts +23 -0
  307. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts.map +1 -0
  308. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js +28 -0
  309. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts +2 -0
  310. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts.map +1 -0
  311. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js +13 -0
  312. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +10 -5
  313. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -1
  314. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +15 -6
  315. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +6 -1
  316. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
  317. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +38 -1
  318. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  319. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +4 -3
  320. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  321. package/src/shade/renderer/loader/gltf/load_gltf.js +0 -19
  322. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  323. package/src/shade/renderer/material/chunk_material_draw_side.d.ts +14 -0
  324. package/src/shade/renderer/material/chunk_material_draw_side.d.ts.map +1 -0
  325. package/src/shade/renderer/material/chunk_material_draw_side.js +34 -0
  326. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  327. package/src/shade/renderer/material/standard/fragment_gbuffer.js +8 -1
  328. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  329. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +6 -3
  330. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  331. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +6 -3
  332. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  333. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +13 -1
  334. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  335. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +19 -5
  336. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
  337. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +23 -5
  338. package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.d.ts.map +1 -1
  339. package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js +12 -5
  340. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  341. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -4
  342. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +22 -0
  343. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts.map +1 -0
  344. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -0
  345. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +2 -0
  346. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  347. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
  348. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +15 -0
  349. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -0
  350. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +35 -0
  351. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  352. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +3 -5
  353. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  354. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +3 -4
  355. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts +10 -1
  356. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
  357. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +38 -29
  358. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts +5 -0
  359. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts.map +1 -1
  360. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js +63 -55
  361. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  362. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -4
  363. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
  364. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +1 -0
  365. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
  366. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +7 -7
  367. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  368. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +83 -78
  369. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  370. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +44 -53
  371. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
  372. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -2
  373. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
  374. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -2
  375. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
  376. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +19 -2
  377. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +7 -4
  378. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  379. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -2
  380. package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.d.ts.map +1 -1
  381. package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.js +15 -4
  382. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  383. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +16 -5
  384. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.d.ts.map +1 -1
  385. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +16 -5
  386. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  387. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +2 -1
  388. package/src/shade/renderer/rasterize/native/rasterization_shader_resources.d.ts.map +1 -1
  389. package/src/shade/renderer/rasterize/native/rasterization_shader_resources.js +4 -0
  390. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  391. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +16 -7
  392. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  393. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +85 -89
  394. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  395. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +28 -32
  396. package/src/shade/renderer/scene/GPUSceneContext.d.ts +22 -2
  397. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  398. package/src/shade/renderer/scene/GPUSceneContext.js +61 -4
  399. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +19 -0
  400. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts.map +1 -1
  401. package/src/shade/renderer/scene/NODE3D_STRUCT.js +34 -0
  402. package/src/shade/renderer/scene/chunk_node3d_flags.d.ts +9 -0
  403. package/src/shade/renderer/scene/chunk_node3d_flags.d.ts.map +1 -0
  404. package/src/shade/renderer/scene/chunk_node3d_flags.js +23 -0
  405. package/src/shade/renderer/scene/chunk_scene_database_access.d.ts.map +1 -1
  406. package/src/shade/renderer/scene/chunk_scene_database_access.js +15 -1
  407. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  408. package/src/shade/renderer/scene/rows/GPUSceneRows.js +9 -1
  409. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts +7 -0
  410. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts.map +1 -1
  411. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js +16 -4
  412. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts +12 -0
  413. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -0
  414. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +18 -0
  415. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts +24 -0
  416. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts.map +1 -0
  417. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js +33 -0
  418. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  419. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +92 -16
  420. package/src/shade/renderer/view/GPUViewContext.d.ts +5 -0
  421. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  422. package/src/shade/renderer/view/GPUViewContext.js +21 -0
  423. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  424. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +74 -3
  425. package/src/shade/playground/vgeo_viewer/README.md +0 -150
  426. package/src/shade/playground/vgeo_viewer/cut_geometry.js +0 -460
  427. package/src/shade/playground/vgeo_viewer/index.html +0 -77
  428. package/src/shade/playground/vgeo_viewer/main.js +0 -1343
  429. package/src/shade/playground/vgeo_viewer/select_cut.js +0 -481
  430. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts +0 -258
  431. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts.map +0 -1
  432. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.js +0 -723
  433. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts +0 -49
  434. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts.map +0 -1
  435. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.js +0 -50
  436. package/src/shade/renderer/loader/gltf/fix_up_material_sides.js +0 -109
  437. package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.js +0 -78
  438. package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +0 -100
  439. package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.js +0 -26
  440. package/src/shade/renderer/shader/chunk/jobs/NOTES.md +0 -47
  441. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts +0 -3
  442. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts.map +0 -1
  443. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.js +0 -102
  444. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.js → level/VGeoLevel.js} +0 -0
  445. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.js → level/VGeoLevelOptions.js} +0 -0
  446. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.js → level/VGeoLevelSummary.js} +0 -0
  447. /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.js → partition/vgeo_graph_components.js} +0 -0
  448. /package/src/shade/renderer/geometry/virtual/build/{VGeoGatheredFaces.js → submesh/VGeoGatheredFaces.js} +0 -0
  449. /package/src/shade/renderer/geometry/virtual/build/{VGeoSubmesh.js → submesh/VGeoSubmesh.js} +0 -0
@@ -6,7 +6,8 @@
6
6
  * its low nibble the match length less four; either saturates at fifteen and continues in whole
7
7
  * bytes, a 255 meaning "and more". The match's distance is a 16-bit little-endian offset back from
8
8
  * the write head, and it is allowed to reach into bytes this same sequence is producing — that
9
- * overlap is how the format codes runs, so the copy has to go a byte at a time.
9
+ * overlap is how the format codes runs, so a match that reaches back less far than it is long is
10
+ * copied a byte at a time.
10
11
  *
11
12
  * Blocks here are independent: a match reaches back no further than `destination_offset`, never
12
13
  * into whatever a previous block left in the buffer. That is what `LZ4_compress_default` produces
@@ -1 +1 @@
1
- {"version":3,"file":"lz4_decompress_block.d.ts","sourceRoot":"","sources":["../../../../../src/core/binary/lz4/lz4_decompress_block.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,kDATW,UAAU,sBACV,MAAM,mBACN,MAAM,UACN,UAAU,iBACV,MAAM,cACN,MAAM,GACJ,MAAM,CA8GlB"}
1
+ {"version":3,"file":"lz4_decompress_block.d.ts","sourceRoot":"","sources":["../../../../../src/core/binary/lz4/lz4_decompress_block.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,kDATW,UAAU,sBACV,MAAM,mBACN,MAAM,UACN,UAAU,iBACV,MAAM,cACN,MAAM,GACJ,MAAM,CAyHlB"}
@@ -1,5 +1,18 @@
1
1
  import { assert } from "../../assert.js";
2
2
 
3
+ /**
4
+ * Runs shorter than this are cheaper to copy a byte at a time than to hand to `set` or
5
+ * `copyWithin`, whose call overhead dominates until there is a memmove's worth of work behind it.
6
+ * Both halves earn their keep, and on real geometry it is the literals that carry the win: four
7
+ * fifths of a decoded `.vgeo` page arrives as literal runs of about thirty-five bytes, while its
8
+ * matches average nine and stay in the loop whatever this is set to.
9
+ *
10
+ * Swept on 2,267 real pages at both block shapes. The top of the curve is broad — anything from
11
+ * sixteen up is most of the win — and this is where it sits, which is also where
12
+ * {@link lz4_compress_block} put its own, arrived at separately and on literals alone.
13
+ */
14
+ const BULK_COPY_LENGTH = 32;
15
+
3
16
  /**
4
17
  * Decode one LZ4 block.
5
18
  *
@@ -8,7 +21,8 @@ import { assert } from "../../assert.js";
8
21
  * its low nibble the match length less four; either saturates at fifteen and continues in whole
9
22
  * bytes, a 255 meaning "and more". The match's distance is a 16-bit little-endian offset back from
10
23
  * the write head, and it is allowed to reach into bytes this same sequence is producing — that
11
- * overlap is how the format codes runs, so the copy has to go a byte at a time.
24
+ * overlap is how the format codes runs, so a match that reaches back less far than it is long is
25
+ * copied a byte at a time.
12
26
  *
13
27
  * Blocks here are independent: a match reaches back no further than `destination_offset`, never
14
28
  * into whatever a previous block left in the buffer. That is what `LZ4_compress_default` produces
@@ -72,8 +86,12 @@ export function lz4_decompress_block(destination, destination_offset, destinatio
72
86
  );
73
87
  }
74
88
 
75
- for (let i = 0; i < literal_length; i++) {
76
- destination[d + i] = source[s + i];
89
+ if (literal_length >= BULK_COPY_LENGTH) {
90
+ destination.set(source.subarray(s, s + literal_length), d);
91
+ } else {
92
+ for (let i = 0; i < literal_length; i++) {
93
+ destination[d + i] = source[s + i];
94
+ }
77
95
  }
78
96
 
79
97
  d += literal_length;
@@ -127,9 +145,16 @@ export function lz4_decompress_block(destination, destination_offset, destinatio
127
145
  );
128
146
  }
129
147
 
130
- // a byte at a time: the match is allowed to overlap what it is writing, which is how runs are coded
131
- for (let i = 0; i < match_length; i++) {
132
- destination[d + i] = destination[match_position + i];
148
+ // A match that does not reach back as far as it is long overlaps the bytes it is writing, and
149
+ // that is how the format codes runs: `copyWithin` moves as if through a temporary, so it
150
+ // would lay down one copy of the pattern where the format means it to repeat. Only a match
151
+ // clear of its own output can take it, and the byte loop below is the run.
152
+ if (match_length >= BULK_COPY_LENGTH && match_offset >= match_length) {
153
+ destination.copyWithin(d, match_position, match_position + match_length);
154
+ } else {
155
+ for (let i = 0; i < match_length; i++) {
156
+ destination[d + i] = destination[match_position + i];
157
+ }
133
158
  }
134
159
 
135
160
  d += match_length;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Determinant of the linear (upper-left 3x3) part of a 4x4 transform.
3
+ *
4
+ * The sign is the interesting part: it is negative exactly when the transform reflects — an odd
5
+ * number of negative scale axes anywhere in the chain that produced it. A reflection reverses the
6
+ * winding order of every triangle drawn under it and flips the handedness of its tangent frame,
7
+ * so renderers have to know. The magnitude is the volume scale factor.
8
+ *
9
+ * The translation column cannot affect it, which is why only the 3x3 is read.
10
+ *
11
+ * @param {number[]|Float32Array} m 16-element, column-major 4x4 matrix
12
+ * @returns {number}
13
+ */
14
+ export function m4_linear_determinant(m: number[] | Float32Array): number;
15
+ //# sourceMappingURL=m4_linear_determinant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"m4_linear_determinant.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_linear_determinant.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,yCAHW,MAAM,EAAE,GAAC,YAAY,GACnB,MAAM,CAYlB"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Determinant of the linear (upper-left 3x3) part of a 4x4 transform.
3
+ *
4
+ * The sign is the interesting part: it is negative exactly when the transform reflects — an odd
5
+ * number of negative scale axes anywhere in the chain that produced it. A reflection reverses the
6
+ * winding order of every triangle drawn under it and flips the handedness of its tangent frame,
7
+ * so renderers have to know. The magnitude is the volume scale factor.
8
+ *
9
+ * The translation column cannot affect it, which is why only the 3x3 is read.
10
+ *
11
+ * @param {number[]|Float32Array} m 16-element, column-major 4x4 matrix
12
+ * @returns {number}
13
+ */
14
+ export function m4_linear_determinant(m) {
15
+ // columns of the upper-left 3x3 (column-major)
16
+ const c0_x = m[0], c0_y = m[1], c0_z = m[2];
17
+ const c1_x = m[4], c1_y = m[5], c1_z = m[6];
18
+ const c2_x = m[8], c2_y = m[9], c2_z = m[10];
19
+
20
+ // dot(c0, cross(c1, c2))
21
+ return c0_x * (c1_y * c2_z - c1_z * c2_y)
22
+ + c0_y * (c1_z * c2_x - c1_x * c2_z)
23
+ + c0_z * (c1_x * c2_y - c1_y * c2_x);
24
+ }
@@ -4,8 +4,10 @@
4
4
  *
5
5
  * The normal matrix is the transpose of the inverse of the linear part of the transform. The
6
6
  * cofactor matrix equals `det(M) * (M^-1)^T`, so it points the same direction as the true normal
7
- * matrix and avoids an explicit matrix inversion. The `det(M)` scale factor is irrelevant because
8
- * the transformed normals must be re-normalized afterwards anyway.
7
+ * matrix and avoids an explicit matrix inversion. The `det(M)` magnitude is irrelevant because the
8
+ * transformed normals must be re-normalized afterwards anyway — its *sign* is not. Under a
9
+ * reflection the cofactor matrix points every normal into the surface instead of out of it, so the
10
+ * result is re-oriented by the determinant's sign.
9
11
  *
10
12
  * NOTE: the resulting matrix produces scaled (non-unit) vectors — normalize the output of any
11
13
  * transform performed with it.
@@ -1 +1 @@
1
- {"version":3,"file":"m4_normal_matrix3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_normal_matrix3.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,uCAHW,MAAM,EAAE,GAAC,YAAY,KACrB,MAAM,EAAE,GAAC,YAAY,QAsB/B"}
1
+ {"version":3,"file":"m4_normal_matrix3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_normal_matrix3.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAHW,MAAM,EAAE,GAAC,YAAY,KACrB,MAAM,EAAE,GAAC,YAAY,QA8B/B"}
@@ -4,8 +4,10 @@
4
4
  *
5
5
  * The normal matrix is the transpose of the inverse of the linear part of the transform. The
6
6
  * cofactor matrix equals `det(M) * (M^-1)^T`, so it points the same direction as the true normal
7
- * matrix and avoids an explicit matrix inversion. The `det(M)` scale factor is irrelevant because
8
- * the transformed normals must be re-normalized afterwards anyway.
7
+ * matrix and avoids an explicit matrix inversion. The `det(M)` magnitude is irrelevant because the
8
+ * transformed normals must be re-normalized afterwards anyway — its *sign* is not. Under a
9
+ * reflection the cofactor matrix points every normal into the surface instead of out of it, so the
10
+ * result is re-oriented by the determinant's sign.
9
11
  *
10
12
  * NOTE: the resulting matrix produces scaled (non-unit) vectors — normalize the output of any
11
13
  * transform performed with it.
@@ -23,17 +25,25 @@ export function m4_normal_matrix3(out, m) {
23
25
  const c2_x = m[8], c2_y = m[9], c2_z = m[10];
24
26
 
25
27
  // column 0 = cross(c1, c2)
26
- out[0] = c1_y * c2_z - c1_z * c2_y;
27
- out[1] = c1_z * c2_x - c1_x * c2_z;
28
- out[2] = c1_x * c2_y - c1_y * c2_x;
28
+ const cofactor_0_x = c1_y * c2_z - c1_z * c2_y;
29
+ const cofactor_0_y = c1_z * c2_x - c1_x * c2_z;
30
+ const cofactor_0_z = c1_x * c2_y - c1_y * c2_x;
31
+
32
+ // dot(c0, cross(c1, c2)) is the determinant, and the cross is already in hand
33
+ const determinant = c0_x * cofactor_0_x + c0_y * cofactor_0_y + c0_z * cofactor_0_z;
34
+ const orientation = determinant < 0 ? -1 : 1;
35
+
36
+ out[0] = cofactor_0_x * orientation;
37
+ out[1] = cofactor_0_y * orientation;
38
+ out[2] = cofactor_0_z * orientation;
29
39
 
30
40
  // column 1 = cross(c2, c0)
31
- out[3] = c2_y * c0_z - c2_z * c0_y;
32
- out[4] = c2_z * c0_x - c2_x * c0_z;
33
- out[5] = c2_x * c0_y - c2_y * c0_x;
41
+ out[3] = (c2_y * c0_z - c2_z * c0_y) * orientation;
42
+ out[4] = (c2_z * c0_x - c2_x * c0_z) * orientation;
43
+ out[5] = (c2_x * c0_y - c2_y * c0_x) * orientation;
34
44
 
35
45
  // column 2 = cross(c0, c1)
36
- out[6] = c0_y * c1_z - c0_z * c1_y;
37
- out[7] = c0_z * c1_x - c0_x * c1_z;
38
- out[8] = c0_x * c1_y - c0_y * c1_x;
46
+ out[6] = (c0_y * c1_z - c0_z * c1_y) * orientation;
47
+ out[7] = (c0_z * c1_x - c0_x * c1_z) * orientation;
48
+ out[8] = (c0_x * c1_y - c0_y * c1_x) * orientation;
39
49
  }
@@ -184,13 +184,20 @@ export class HeightMapShape3D extends AbstractShape3D {
184
184
  * (the shared {@link tri3_raycast} convention). A cast from below the terrain
185
185
  * therefore reports a downward normal, not the surface's true upward one.
186
186
  *
187
- * A hit landing exactly ON a sub-cell boundary gets the normal of one of the
188
- * facets meeting there, and which one follows from traversal order: this walks
189
- * the grid along the ray, the narrowphase enumerates it row-major, so on a grid
190
- * line — and especially a grid corner, where four facets meet — the two can
191
- * name different facets. The hit POINT still agrees; a faceted surface simply
192
- * has no single normal at a seam. Measure-zero, and called out because it is
193
- * the only place the two answers part company.
187
+ * A hit landing exactly ON a seam between facets gets the normal of one of the
188
+ * facets meeting there. INSIDE a sub-cell the two paths agree — they split on
189
+ * the same D–B diagonal and break the resulting tie in favour of the same
190
+ * facet — which matters because that diagonal runs through the sub-cell's
191
+ * centre, so a cast down the middle of a cell lands on it routinely rather
192
+ * than exceptionally.
193
+ *
194
+ * BETWEEN sub-cells they can differ, and which facet each names follows from
195
+ * traversal order: this walks the grid along the ray, the narrowphase
196
+ * enumerates it row-major, so on a grid line — and especially a grid corner,
197
+ * where four facets meet — the two can name different facets. The hit POINT
198
+ * still agrees; a faceted surface simply has no single normal at a seam.
199
+ * Measure-zero, and called out because it is the only place the two answers
200
+ * part company.
194
201
  *
195
202
  * `size.y` does NOT bound the query. Sampler values are not clamped to it (see
196
203
  * the class docstring), so clipping the ray to the height range that
@@ -1 +1 @@
1
- {"version":3,"file":"HeightMapShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/HeightMapShape3D.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH;IA4DI;;;;;;;;;;;OAWG;IACH,wCATW,MAAM,UACN,MAAM,UACN,MAAM,gBACN,OAAO,iBACP,MAAM,GAGJ,gBAAgB,CAqB5B;IA1FD;;;;;OAKG;IACH,sBAFU,OAAO,CAEkB;IAEnC;;;;;;;OAOG;IACH,eAFU,OAAO,CAEW;IAE5B;;;;;OAKG;IACH,SAFU,YAAY,IAAI,CAEX;IAEf;;;;;;;;;;;;;;;;OAgBG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;OAKG;IACH,eAA6B;IAG7B,6BAA2B;IAE3B,6BAA2B;IAC3B,6BAA2B;IAmC3B;;;;;;;;;OASG;IACH,sBA+CC;IAED;;;;;;OAMG;IACH,yBAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;;;OAQG;IACH,8BALW,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAelB;IAED,wCA8BC;IAED,oCA2BC;IAED;;;;;;;;OAQG;IACH,6CAmBC;IAED;;;;OAIG;IACH,4DA2BC;IAED;;;;;;;;;OASG;IACH,qGAEC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyDG;IACH,aAJW,YAAY,GAAC,MAAM,EAAE,cAEnB,OAAO,CAyNnB;IAED,kFAiBC;IA6CD;;;OAGG;IACH,cAHW,gBAAgB,GACd,OAAO,CAUnB;IAWL;;;;;;OAMG;IACH,6BAFU,OAAO,CAE4B;CAT5C;gCA5tB+B,sBAAsB;wBAD9B,kBAAkB"}
1
+ {"version":3,"file":"HeightMapShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/HeightMapShape3D.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH;IA4DI;;;;;;;;;;;OAWG;IACH,wCATW,MAAM,UACN,MAAM,UACN,MAAM,gBACN,OAAO,iBACP,MAAM,GAGJ,gBAAgB,CAqB5B;IA1FD;;;;;OAKG;IACH,sBAFU,OAAO,CAEkB;IAEnC;;;;;;;OAOG;IACH,eAFU,OAAO,CAEW;IAE5B;;;;;OAKG;IACH,SAFU,YAAY,IAAI,CAEX;IAEf;;;;;;;;;;;;;;;;OAgBG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;OAKG;IACH,eAA6B;IAG7B,6BAA2B;IAE3B,6BAA2B;IAC3B,6BAA2B;IAmC3B;;;;;;;;;OASG;IACH,sBA8CC;IAED;;;;;;OAMG;IACH,yBAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;;;OAQG;IACH,8BALW,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAelB;IAED,wCA6BC;IAED,oCA2BC;IAED;;;;;;;;OAQG;IACH,6CAmBC;IAED;;;;OAIG;IACH,4DA2BC;IAED;;;;;;;;;OASG;IACH,qGAEC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgEG;IACH,aAJW,YAAY,GAAC,MAAM,EAAE,cAEnB,OAAO,CA0NnB;IAED,kFAiBC;IA6CD;;;OAGG;IACH,cAHW,gBAAgB,GACd,OAAO,CAUnB;IAWL;;;;;;OAMG;IACH,6BAFU,OAAO,CAE4B;CAT5C;gCAluB+B,sBAAsB;wBAD9B,kBAAkB"}
@@ -2,9 +2,12 @@ import { hash_mix3 } from "../../../math/hash/hash_mix3.js";
2
2
  import { hash_mix2 } from "../../../math/hash/hash_mix2.js";
3
3
  import { assert } from "../../../assert.js";
4
4
  import { clamp } from "../../../math/clamp.js";
5
+ import { clamp_index } from "../../../math/clamp_index.js";
5
6
  import { optional_equality } from "../../../model/object/optional_equality.js";
6
7
  import { optional_hash } from "../../../model/object/optional_hash.js";
7
8
  import { tri3_raycast } from "../triangle/tri3_raycast.js";
9
+ import { v3_cross } from "../../vec3/v3_cross.js";
10
+ import { v3_dot } from "../../vec3/v3_dot.js";
8
11
  import { v3_length } from "../../vec3/v3_length.js";
9
12
  import { Vector3 } from "../../Vector3.js";
10
13
  import { AbstractShape3D } from "./AbstractShape3D.js";
@@ -192,14 +195,13 @@ export class HeightMapShape3D extends AbstractShape3D {
192
195
  u_y *= u_inv;
193
196
  u_z *= u_inv;
194
197
 
195
- // v = u × n (for n=+Y, u=+X this gives v=+Z, the intuitive choice)
196
- const v_x = u_y * nz - u_z * ny;
197
- const v_y = u_z * nx - u_x * nz;
198
- const v_z = u_x * ny - u_y * nx;
199
-
200
198
  const b = this._basis;
199
+
201
200
  b[0] = u_x; b[1] = u_y; b[2] = u_z;
202
- b[3] = v_x; b[4] = v_y; b[5] = v_z;
201
+
202
+ // v = u × n (for n=+Y, u=+X this gives v=+Z, the intuitive choice)
203
+ v3_cross(b, 3, u_x, u_y, u_z, nx, ny, nz);
204
+
203
205
  b[6] = nx; b[7] = ny; b[8] = nz;
204
206
 
205
207
  this._basis_orientation_x = nx;
@@ -233,8 +235,8 @@ export class HeightMapShape3D extends AbstractShape3D {
233
235
  const b = this._basis;
234
236
 
235
237
  // project onto basis u and basis v
236
- const u_coord = b[0] * px + b[1] * py + b[2] * pz;
237
- const v_coord = b[3] * px + b[4] * py + b[5] * pz;
238
+ const u_coord = v3_dot(b[0], b[1], b[2], px, py, pz);
239
+ const v_coord = v3_dot(b[3], b[4], b[5], px, py, pz);
238
240
 
239
241
  const u01 = u_coord / this.size[0] + 0.5;
240
242
  const v01 = v_coord / this.size[2] + 0.5;
@@ -266,11 +268,10 @@ export class HeightMapShape3D extends AbstractShape3D {
266
268
 
267
269
  const uv_extent = Math.abs(cu) * half_u + Math.abs(cv) * half_v;
268
270
 
269
- const h_lo = ch < 0 ? ch * sy : 0;
270
- const h_hi = ch > 0 ? ch * sy : 0;
271
+ const h_extent = ch * sy;
271
272
 
272
- result[k] = -uv_extent + h_lo;
273
- result[k + 3] = uv_extent + h_hi;
273
+ result[k] = -uv_extent + Math.min(h_extent, 0);
274
+ result[k + 3] = uv_extent + Math.max(h_extent, 0);
274
275
  }
275
276
  }
276
277
 
@@ -284,9 +285,9 @@ export class HeightMapShape3D extends AbstractShape3D {
284
285
  const b = this._basis;
285
286
 
286
287
  // project into heightmap-local frame (u, v, h)
287
- const u_coord = b[0] * px + b[1] * py + b[2] * pz;
288
- const v_coord = b[3] * px + b[4] * py + b[5] * pz;
289
- const h_coord = b[6] * px + b[7] * py + b[8] * pz;
288
+ const u_coord = v3_dot(b[0], b[1], b[2], px, py, pz);
289
+ const v_coord = v3_dot(b[3], b[4], b[5], px, py, pz);
290
+ const h_coord = v3_dot(b[6], b[7], b[8], px, py, pz);
290
291
 
291
292
  const half_u = this.size[0] * 0.5;
292
293
  const half_v = this.size[2] * 0.5;
@@ -321,9 +322,9 @@ export class HeightMapShape3D extends AbstractShape3D {
321
322
 
322
323
  const b = this._basis;
323
324
 
324
- const u_coord = b[0] * px + b[1] * py + b[2] * pz;
325
- const v_coord = b[3] * px + b[4] * py + b[5] * pz;
326
- const h_coord = b[6] * px + b[7] * py + b[8] * pz;
325
+ const u_coord = v3_dot(b[0], b[1], b[2], px, py, pz);
326
+ const v_coord = v3_dot(b[3], b[4], b[5], px, py, pz);
327
+ const h_coord = v3_dot(b[6], b[7], b[8], px, py, pz);
327
328
 
328
329
  const u01 = u_coord / this.size[0] + 0.5;
329
330
  const v01 = v_coord / this.size[2] + 0.5;
@@ -347,8 +348,8 @@ export class HeightMapShape3D extends AbstractShape3D {
347
348
 
348
349
  const b = this._basis;
349
350
 
350
- const u_coord = b[0] * rx + b[1] * ry + b[2] * rz;
351
- const v_coord = b[3] * rx + b[4] * ry + b[5] * rz;
351
+ const u_coord = v3_dot(b[0], b[1], b[2], rx, ry, rz);
352
+ const v_coord = v3_dot(b[3], b[4], b[5], rx, ry, rz);
352
353
 
353
354
  const half_u = this.size[0] * 0.5;
354
355
  const half_v = this.size[2] * 0.5;
@@ -407,13 +408,20 @@ export class HeightMapShape3D extends AbstractShape3D {
407
408
  * (the shared {@link tri3_raycast} convention). A cast from below the terrain
408
409
  * therefore reports a downward normal, not the surface's true upward one.
409
410
  *
410
- * A hit landing exactly ON a sub-cell boundary gets the normal of one of the
411
- * facets meeting there, and which one follows from traversal order: this walks
412
- * the grid along the ray, the narrowphase enumerates it row-major, so on a grid
413
- * line — and especially a grid corner, where four facets meet — the two can
414
- * name different facets. The hit POINT still agrees; a faceted surface simply
415
- * has no single normal at a seam. Measure-zero, and called out because it is
416
- * the only place the two answers part company.
411
+ * A hit landing exactly ON a seam between facets gets the normal of one of the
412
+ * facets meeting there. INSIDE a sub-cell the two paths agree — they split on
413
+ * the same D–B diagonal and break the resulting tie in favour of the same
414
+ * facet — which matters because that diagonal runs through the sub-cell's
415
+ * centre, so a cast down the middle of a cell lands on it routinely rather
416
+ * than exceptionally.
417
+ *
418
+ * BETWEEN sub-cells they can differ, and which facet each names follows from
419
+ * traversal order: this walks the grid along the ray, the narrowphase
420
+ * enumerates it row-major, so on a grid line — and especially a grid corner,
421
+ * where four facets meet — the two can name different facets. The hit POINT
422
+ * still agrees; a faceted surface simply has no single normal at a seam.
423
+ * Measure-zero, and called out because it is the only place the two answers
424
+ * part company.
417
425
  *
418
426
  * `size.y` does NOT bound the query. Sampler values are not clamped to it (see
419
427
  * the class docstring), so clipping the ray to the height range that
@@ -473,10 +481,10 @@ export class HeightMapShape3D extends AbstractShape3D {
473
481
  // Body → heightmap-local footprint coordinates. The basis is orthonormal,
474
482
  // so the direction stays unit and `t` is the same distance in both frames;
475
483
  // the height component is never needed, the triangles carry it.
476
- const o_u = b[0] * o_x + b[1] * o_y + b[2] * o_z;
477
- const o_v = b[3] * o_x + b[4] * o_y + b[5] * o_z;
478
- const d_u = b[0] * d_x + b[1] * d_y + b[2] * d_z;
479
- const d_v = b[3] * d_x + b[4] * d_y + b[5] * d_z;
484
+ const o_u = v3_dot(b[0], b[1], b[2], o_x, o_y, o_z);
485
+ const o_v = v3_dot(b[3], b[4], b[5], o_x, o_y, o_z);
486
+ const d_u = v3_dot(b[0], b[1], b[2], d_x, d_y, d_z);
487
+ const d_v = v3_dot(b[3], b[4], b[5], d_x, d_y, d_z);
480
488
 
481
489
  const half_u = size_x * 0.5;
482
490
  const half_v = size_z * 0.5;
@@ -489,22 +497,22 @@ export class HeightMapShape3D extends AbstractShape3D {
489
497
 
490
498
  if (d_u > RAY_SLAB_EPSILON || d_u < -RAY_SLAB_EPSILON) {
491
499
  const inv = 1 / d_u;
492
- let t0 = (-half_u - o_u) * inv;
493
- let t1 = (half_u - o_u) * inv;
494
- if (t0 > t1) { const s = t0; t0 = t1; t1 = s; }
495
- if (t0 > t_enter) t_enter = t0;
496
- if (t1 < t_exit) t_exit = t1;
500
+ const t0 = (-half_u - o_u) * inv;
501
+ const t1 = (half_u - o_u) * inv;
502
+
503
+ t_enter = Math.max(t_enter, Math.min(t0, t1));
504
+ t_exit = Math.min(t_exit, Math.max(t0, t1));
497
505
  } else if (o_u < -half_u || o_u > half_u) {
498
506
  return false;
499
507
  }
500
508
 
501
509
  if (d_v > RAY_SLAB_EPSILON || d_v < -RAY_SLAB_EPSILON) {
502
510
  const inv = 1 / d_v;
503
- let t0 = (-half_v - o_v) * inv;
504
- let t1 = (half_v - o_v) * inv;
505
- if (t0 > t1) { const s = t0; t0 = t1; t1 = s; }
506
- if (t0 > t_enter) t_enter = t0;
507
- if (t1 < t_exit) t_exit = t1;
511
+ const t0 = (-half_v - o_v) * inv;
512
+ const t1 = (half_v - o_v) * inv;
513
+
514
+ t_enter = Math.max(t_enter, Math.min(t0, t1));
515
+ t_exit = Math.min(t_exit, Math.max(t0, t1));
508
516
  } else if (o_v < -half_v || o_v > half_v) {
509
517
  return false;
510
518
  }
@@ -528,34 +536,33 @@ export class HeightMapShape3D extends AbstractShape3D {
528
536
  const g_u = (o_u + d_u * t_enter + half_u) * per_cell_u;
529
537
  const g_v = (o_v + d_v * t_enter + half_v) * per_cell_v;
530
538
 
531
- // Clamped because the slab clip lands the entry point ON the boundary,
532
- // where rounding can put it a ULP outside the grid.
533
- let i = Math.floor(g_u);
534
- let j = Math.floor(g_v);
535
-
536
- if (i < 0) i = 0; else if (i > seg_u - 1) i = seg_u - 1;
537
- if (j < 0) j = 0; else if (j > seg_v - 1) j = seg_v - 1;
539
+ // Clamped to the grid because the slab clip lands the entry point ON the
540
+ // boundary, where rounding can put it a ULP outside.
541
+ let i = clamp_index(Math.floor(g_u), seg_u);
542
+ let j = clamp_index(Math.floor(g_v), seg_v);
538
543
 
544
+ // `t_next` is the distance at which the ray leaves the starting cell
545
+ // through that axis' far grid line, `t_delta` the distance a whole cell
546
+ // costs thereafter. A zero rate leaves both at Infinity: that axis is
547
+ // never the one the walk steps along.
539
548
  let step_i = 0, t_delta_u = Infinity, t_next_u = Infinity;
540
- if (rate_u > 0) {
541
- step_i = 1;
542
- t_delta_u = 1 / rate_u;
543
- t_next_u = t_enter + (i + 1 - g_u) * t_delta_u;
544
- } else if (rate_u < 0) {
545
- step_i = -1;
546
- t_delta_u = -1 / rate_u;
547
- t_next_u = t_enter + (i - g_u) / rate_u;
549
+ if (rate_u !== 0) {
550
+ // the grid line the starting cell is left through: its far side
551
+ // in the direction of travel
552
+ const exit_line = rate_u > 0 ? i + 1 : i;
553
+
554
+ step_i = rate_u > 0 ? 1 : -1;
555
+ t_delta_u = Math.abs(1 / rate_u);
556
+ t_next_u = t_enter + (exit_line - g_u) / rate_u;
548
557
  }
549
558
 
550
559
  let step_j = 0, t_delta_v = Infinity, t_next_v = Infinity;
551
- if (rate_v > 0) {
552
- step_j = 1;
553
- t_delta_v = 1 / rate_v;
554
- t_next_v = t_enter + (j + 1 - g_v) * t_delta_v;
555
- } else if (rate_v < 0) {
556
- step_j = -1;
557
- t_delta_v = -1 / rate_v;
558
- t_next_v = t_enter + (j - g_v) / rate_v;
560
+ if (rate_v !== 0) {
561
+ const exit_line = rate_v > 0 ? j + 1 : j;
562
+
563
+ step_j = rate_v > 0 ? 1 : -1;
564
+ t_delta_v = Math.abs(1 / rate_v);
565
+ t_next_v = t_enter + (exit_line - g_v) / rate_v;
559
566
  }
560
567
 
561
568
  const inv_seg_u = 1 / seg_u;
@@ -607,25 +614,27 @@ export class HeightMapShape3D extends AbstractShape3D {
607
614
  const Dy = uy * u_lo + vy * v_hi + ny * hD;
608
615
  const Dz = uz * u_lo + vz * v_hi + nz * hD;
609
616
 
610
- // tri3_raycast writes hit[3..5] only for a hit inside the budget it
611
- // was given, so handing the second triangle the first's distance
612
- // leaves the nearer one's normal standing. Both can claim a point on
613
- // the shared D–B diagonal, and this keeps the second where the
614
- // narrowphase's copy of the same test keeps the first — the seam case
615
- // the docstring calls out.
616
- let best = tri3_raycast(
617
+ // Tested in reverse enumeration order, and that is what decides the
618
+ // tie. The two facets share the D–B diagonal — which runs through the
619
+ // sub-cell's centre, so a ray landing on it is the ordinary case, not a
620
+ // corner one — and a ray that lands on it hits both at one distance.
621
+ // `refine_ray_concave` enumerates (A,D,B) first and lets a later
622
+ // triangle win only by a strictly smaller distance, so the facet it
623
+ // names is (A,D,B). tri3_raycast admits `t <= tMax` and writes hit[3..5]
624
+ // only on a hit, so testing (D,C,B) first and handing (A,D,B) its
625
+ // distance as the budget lets the equal hit overwrite the normal — and
626
+ // the two paths name the same facet.
627
+ const t_dcb = tri3_raycast(
617
628
  hit, 3, o_x, o_y, o_z, d_x, d_y, d_z, t_max,
618
- Ax, Ay, Az, Dx, Dy, Dz, Bx, By, Bz
629
+ Dx, Dy, Dz, Cx, Cy, Cz, Bx, By, Bz
619
630
  );
620
631
 
621
- const t_second = tri3_raycast(
622
- hit, 3, o_x, o_y, o_z, d_x, d_y, d_z, best < t_max ? best : t_max,
623
- Dx, Dy, Dz, Cx, Cy, Cz, Bx, By, Bz
632
+ const t_adb = tri3_raycast(
633
+ hit, 3, o_x, o_y, o_z, d_x, d_y, d_z, Math.min(t_dcb, t_max),
634
+ Ax, Ay, Az, Dx, Dy, Dz, Bx, By, Bz
624
635
  );
625
636
 
626
- if (t_second < best) {
627
- best = t_second;
628
- }
637
+ const best = Math.min(t_adb, t_dcb);
629
638
 
630
639
  if (best !== Infinity) {
631
640
  hit[0] = o_x + d_x * best;
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../../src/engine/Engine.js"],"names":[],"mappings":";6BAoCa,OAAO,8BAA8B,EAAE,cAAc;AA6BlE;IAoEI;;;;;;;;;OASG;IACH,sBARW,cAAc;QAEU,aAAa,GAArC,aAAa;QACK,cAAc,GAAhC,OAAO;QACW,WAAW,GAA7B,OAAO;QACW,KAAK,GAAvB,OAAO;OA2OjB;IAhSD;;;OAGG;IACH,UAFU,cAAc,GAAC,IAAI,CAEb;IAEhB;;;OAGG;IACH,OAFU,WAAW,GAAC,IAAI,CAEb;IAEb,qBAA4B;IAE5B;;;;;;;;;OASG;IACH,0BAFU,uBAAuB,CAEe;IAEhD;;;OAGG;IACH,kBAFU,mBAAmB,CAEO;IAEpC;;;;OAIG;IACH,iBAFU,MAAM,CAEM;IAEtB;;;;OAIG;IACH,mBAFU,kBAAkB,CAEa;IAoBrC;;;OAGG;IACH,UAFU,cAAc,CAEA;IAKxB;;;OAGG;IACH,aAFU,gBAAgB,CAEe;IAGzC,yCAAkE;IAK9D,6BAAkC;IAMtC;;;OAGG;IACH,cAFU,aAAa,MAAM,CAAC,CAK5B;IAEF,8CAiCE;IA4BF;;;OAGG;IACH,SAFU,WAAW,CAEoB;IAEzC;;;OAGG;IACH,oCAA0C;IAE1C;;;OAGG;IACH,sCAFU,2BAA2B,CAE+B;IAEpE,yBAAoC;IAGpC;;OAEG;IACH,aAAkB;IAElB;;;OAGG;IACH,SAFU,OAAO,CAEwB;IAGzC,2BAAsC;IAuCtC;;;OAGG;IACH,KAFU,SAAS,CAEO;IAE1B;;;OAGG;IACH,uBAFU,YAAY,CAEqD;IAI3E;;;;MAIC;IA6BD;;;OAGG;IACH,kBAFU,OAAO,CAEW;IAwIhC,wBAgCC;IApBG,oBAAwB;IAsB5B,2BAgCC;IAED,oBAiBC;IAED;;;OAGG;IACH,+CAUC;IAED,eA6BC;IAED;;;OAGG;IACH,sBAkEC;IAqBD;;OAEG;IACH,sBAyCC;IAED,aAEC;IAED;;OAEG;IACH,4BAOC;IAIL;;;OAGG;IACH,mBAFU,OAAO,CAEQ;;CAPxB;+BApwB8B,+BAA+B;wBAUtC,wBAAwB;0BApBtB,0CAA0C;wCAcN,iDAAiD;oCAG3E,iCAAiC;mBAElD,wBAAwB;+BArBZ,gDAAgD;iCAO9C,+CAA+C;8BAGlD,wBAAwB;6BALzB,yBAAyB;uCAIf,6DAA6D;4BASxE,0BAA0B;+BApBvB,iCAAiC;4CAapB,qDAAqD;AAejG;;GAEG;AAGH;IACI,gDAA2D;IAC3D,0BAAkC;IAClC,iCAAyC;CAC5C;6BAtC4B,sCAAsC;sBA2B7C,mBAAmB;yBAJhB,yBAAyB;8BALpB,kCAAkC;2BADrC,mCAAmC;8BADhC,kCAAkC;sBAZ1C,+BAA+B;+BAKtB,qCAAqC;4BAPxC,kCAAkC;oBAH1C,yBAAyB"}
1
+ {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../../src/engine/Engine.js"],"names":[],"mappings":";6BAoCa,OAAO,8BAA8B,EAAE,cAAc;AA6BlE;IA4EI;;;;;;;;;OASG;IACH,sBARW,cAAc;QAEU,aAAa,GAArC,aAAa;QACK,cAAc,GAAhC,OAAO;QACW,WAAW,GAA7B,OAAO;QACW,KAAK,GAAvB,OAAO;OA2OjB;IAhSD;;;OAGG;IACH,UAFU,cAAc,GAAC,IAAI,CAEb;IAEhB;;;OAGG;IACH,OAFU,WAAW,GAAC,IAAI,CAEb;IAEb,qBAA4B;IAE5B;;;;;;;;;OASG;IACH,0BAFU,uBAAuB,CAEe;IAEhD;;;OAGG;IACH,kBAFU,mBAAmB,CAEO;IAEpC;;;;OAIG;IACH,iBAFU,MAAM,CAEM;IAEtB;;;;OAIG;IACH,mBAFU,kBAAkB,CAEa;IAoBrC;;;OAGG;IACH,UAFU,cAAc,CAEA;IAKxB;;;OAGG;IACH,aAFU,gBAAgB,CAEe;IAGzC,yCAAkE;IAK9D,6BAAkC;IAMtC;;;OAGG;IACH,cAFU,aAAa,MAAM,CAAC,CAK5B;IAEF,8CAiCE;IA4BF;;;OAGG;IACH,SAFU,WAAW,CAEoB;IAEzC;;;OAGG;IACH,oCAA0C;IAE1C;;;OAGG;IACH,sCAFU,2BAA2B,CAE+B;IAEpE,yBAAoC;IAGpC;;OAEG;IACH,aAAkB;IAElB;;;OAGG;IACH,SAFU,OAAO,CAEwB;IAGzC,2BAAsC;IAuCtC;;;OAGG;IACH,KAFU,SAAS,CAEO;IAE1B;;;OAGG;IACH,uBAFU,YAAY,CAEqD;IAI3E;;;;MAIC;IA6BD;;;OAGG;IACH,kBAFU,OAAO,CAEW;IAwIhC,wBAgCC;IApBG,oBAAwB;IAsB5B,2BAgCC;IAED,oBAiBC;IAED;;;OAGG;IACH,+CAUC;IAED,eAkDC;IAED;;;OAGG;IACH,sBA0EC;IAqBD;;OAEG;IACH,sBAyCC;IAED,aAEC;IAED;;OAEG;IACH,4BAOC;IAIL;;;OAGG;IACH,mBAFU,OAAO,CAEQ;;CAPxB;+BAzyB8B,+BAA+B;wBAUtC,wBAAwB;0BApBtB,0CAA0C;wCAcN,iDAAiD;oCAG3E,iCAAiC;mBAElD,wBAAwB;+BArBZ,gDAAgD;iCAO9C,+CAA+C;8BAGlD,wBAAwB;6BALzB,yBAAyB;uCAIf,6DAA6D;4BASxE,0BAA0B;+BApBvB,iCAAiC;4CAapB,qDAAqD;AAejG;;GAEG;AAGH;IACI,gDAA2D;IAC3D,0BAAkC;IAClC,iCAAyC;CAC5C;6BAtC4B,sCAAsC;sBA2B7C,mBAAmB;yBAJhB,yBAAyB;8BALpB,kCAAkC;2BADrC,mCAAmC;8BADhC,kCAAkC;sBAZ1C,+BAA+B;+BAKtB,qCAAqC;4BAPxC,kCAAkC;oBAH1C,yBAAyB"}
@@ -66,6 +66,14 @@ const FOCUSABLE_SELECTOR = 'input, textarea, select, button, a[href], [contented
66
66
  class Engine {
67
67
  #last_frame_timestamp = 0;
68
68
 
69
+ /**
70
+ * Simulation time, in seconds, as of the last drawn frame — the anchor {@link Engine#render}
71
+ * measures its delta against. Simulation time, not wall clock, so it does not move while the
72
+ * simulation is paused.
73
+ * @type {number}
74
+ */
75
+ #last_render_simulation_time = 0;
76
+
69
77
  /**
70
78
  * Handle of the pending render-loop frame, `-1` when the loop is not running
71
79
  * @type {number}
@@ -629,7 +637,28 @@ class Engine {
629
637
 
630
638
  const t0 = performance.now();
631
639
 
632
- graphics.render();
640
+ /*
641
+ Simulation seconds since the last DRAWN frame — what everything the renderer advances
642
+ steps by: GPU particles, the animation tick, exposure adaptation.
643
+
644
+ Taken from the simulation clock rather than measured here, because that is the clock
645
+ those things belong to: it freezes while the simulation is paused, and it carries the
646
+ scene's speed modifiers (see SceneManager), so a paused game holds its particles still
647
+ and a slowed one slows them. A wall-clock measurement would do neither.
648
+
649
+ `updateElapsedTime` advances the clock and reads it without touching the anchor
650
+ `getDelta` keeps, so this does not consume the delta the entity manager's tick is
651
+ about to be handed.
652
+
653
+ Moved only when a frame is actually drawn, so simulation time that passes while
654
+ rendering is off is caught up by the next frame rather than lost.
655
+ */
656
+ const simulation_time = this.ticker.clock.updateElapsedTime();
657
+ const time_delta_seconds = simulation_time - this.#last_render_simulation_time;
658
+
659
+ this.#last_render_simulation_time = simulation_time;
660
+
661
+ graphics.render(time_delta_seconds);
633
662
 
634
663
  const t1 = performance.now();
635
664
  const frame_time = (t1 - t0) / 1000;
@@ -694,6 +723,14 @@ class Engine {
694
723
 
695
724
  //start simulation
696
725
  this.ticker.start({ maxTimeout: 200 });
726
+
727
+ /*
728
+ The render delta's anchor, purged for the same reason `Ticker#start` purges the tick's:
729
+ `Ticker#stop` leaves the clock running, so a stopped engine keeps accruing simulation
730
+ time and a restart would otherwise hand the first drawn frame the whole gap. After
731
+ start(), not before — start() itself advances the clock past that gap.
732
+ */
733
+ this.#last_render_simulation_time = this.ticker.clock.updateElapsedTime();
697
734
  //self.uiController.init(self);
698
735
 
699
736
  //load options
@@ -351,7 +351,11 @@ export class GraphicsEngine {
351
351
  /**
352
352
  * Draw a frame, if there is anything to draw it with.
353
353
  *
354
- * @param {number} [time_delta_seconds]
354
+ * @param {number} [time_delta_seconds] simulation seconds to advance the frame by — GPU
355
+ * particles, the animation tick and exposure adaptation all step by this. Defaults to zero, so
356
+ * a caller that just wants the current state on screen (a scene transition, a preview) draws it
357
+ * without moving anything. It deliberately does NOT default to a frame's worth of time: doing
358
+ * that silently ran the simulation at a fixed 60 Hz regardless of the real clock.
355
359
  * @returns {boolean} whether a frame was submitted
356
360
  */
357
361
  render(time_delta_seconds?: number): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphicsEngine.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GraphicsEngine.js"],"names":[],"mappings":"AA0DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH;IACI;;;;;OAKG;IACH,gCAEC;IAUD;;;;OAIG;IACH,yBAEC;IA0DG;;;;;;OAMG;IACH,QAFU,kBAAkB,CAEsB;IAElD;QACI;;;;;;;;WAQG;mBADO,MAAM;QAIhB;;;;;WAKG;oBADO,MAAM;QAIhB;;;;WAIG;qBADO,MAAM;QAIhB;;;;;;;WAOG;;QAGH;;;;;WAKG;;MAEN;IAID;;;;;OAKG;IACH,4BAFU,OAAO,CAEyB;IAE1C;;;;;;OAMG;IACH,UAFU,SAAS,CAEY;IAG/B;;OAEG;IACH,YAFU,iBAAiB,GAAC,IAAI,CAEV;IAEtB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;OAEG;IACH,YAFU,MAAM,CAEG;IAoBvB;;;;;;;;;;;;OAYG;IACH,mDAEC;IAED;;;;;;;;OAQG;IACH,iBAFW,KAAK,QAoBf;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,6BAFW,YAAY,QAStB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,yBAHW,eAAe,GACb,eAAe,CAa3B;IAED;;;;;;;;;;OAUG;IACH,uBAHW,UAAU,GACR,MAAM,CAclB;IAED;;;;;;OAMG;IACH,4BAHW,eAAe,GACb,OAAO,CAgBnB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,qBALW,KAAK,GACH,eAAe,GAAC,IAAI,CAehC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,yBARW,KAAK,UACL,MAAM,SACN,MAAM,UACN,MAAM,GACJ,QAAQ,SAAS,CAAC,CAwD9B;IAED;;;;OAIG;IACH,0BAEC;IAED;;;;;;;;;;OAUG;IACH,SAFa,QAAQ,IAAI,CAAC,CAkDzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,qBAFW,iBAAiB,QAc3B;IAED;;;;;OAKG;IACH,aAiBC;IASD;;;;;;;;OAQG;IACH,8BAHW,OAAO,GAAC,OAAO,UACf,OAAO,GAAC,OAAO,QAQzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBALW,MAAM,KACN,MAAM,UACN,OAAO,aACP,OAAO,QAIjB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,mBAyBC;IAED;;;;;OAKG;IACH,4BAHW,MAAM,GACJ,OAAO,CAoDnB;;CACJ;sBA7yBY,OAAO,4BAA4B,EAAE,OAAO;yBAC5C,OAAO,8CAA8C,EAAE,UAAU;8BACjE,OAAO,mDAAmD,EAAE,eAAe;8BAC3E,OAAO,+CAA+C,EAAE,eAAe;2BACvE,OAAO,8CAA8C,EAAE,YAAY;qBACnE,OAAO,kCAAkC,EAAE,MAAM;yBAdrC,kCAAkC;mCAMxB,yBAAyB;mBAZzC,oCAAoC;wBAC/B,4BAA4B;sBAQ9B,kCAAkC;yCAJf,kDAAkD;sBAErE,qCAAqC;0BACjC,0CAA0C"}
1
+ {"version":3,"file":"GraphicsEngine.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GraphicsEngine.js"],"names":[],"mappings":"AA0DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH;IACI;;;;;OAKG;IACH,gCAEC;IAUD;;;;OAIG;IACH,yBAEC;IA0DG;;;;;;OAMG;IACH,QAFU,kBAAkB,CAEsB;IAElD;QACI;;;;;;;;WAQG;mBADO,MAAM;QAIhB;;;;;WAKG;oBADO,MAAM;QAIhB;;;;WAIG;qBADO,MAAM;QAIhB;;;;;;;WAOG;;QAGH;;;;;WAKG;;MAEN;IAID;;;;;OAKG;IACH,4BAFU,OAAO,CAEyB;IAE1C;;;;;;OAMG;IACH,UAFU,SAAS,CAEY;IAG/B;;OAEG;IACH,YAFU,iBAAiB,GAAC,IAAI,CAEV;IAEtB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;OAEG;IACH,YAFU,MAAM,CAEG;IAoBvB;;;;;;;;;;;;OAYG;IACH,mDAEC;IAED;;;;;;;;OAQG;IACH,iBAFW,KAAK,QAoBf;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,6BAFW,YAAY,QAStB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,yBAHW,eAAe,GACb,eAAe,CAa3B;IAED;;;;;;;;;;OAUG;IACH,uBAHW,UAAU,GACR,MAAM,CAclB;IAED;;;;;;OAMG;IACH,4BAHW,eAAe,GACb,OAAO,CAgBnB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,qBALW,KAAK,GACH,eAAe,GAAC,IAAI,CAehC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,yBARW,KAAK,UACL,MAAM,SACN,MAAM,UACN,MAAM,GACJ,QAAQ,SAAS,CAAC,CAwD9B;IAED;;;;OAIG;IACH,0BAEC;IAED;;;;;;;;;;OAUG;IACH,SAFa,QAAQ,IAAI,CAAC,CAkDzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,qBAFW,iBAAiB,QAc3B;IAED;;;;;OAKG;IACH,aAiBC;IASD;;;;;;;;OAQG;IACH,8BAHW,OAAO,GAAC,OAAO,UACf,OAAO,GAAC,OAAO,QAQzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBALW,MAAM,KACN,MAAM,UACN,OAAO,aACP,OAAO,QAIjB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,mBAyBC;IAED;;;;;;;;;OASG;IACH,4BAPW,MAAM,GAKJ,OAAO,CAoDnB;;CACJ;sBAjzBY,OAAO,4BAA4B,EAAE,OAAO;yBAC5C,OAAO,8CAA8C,EAAE,UAAU;8BACjE,OAAO,mDAAmD,EAAE,eAAe;8BAC3E,OAAO,+CAA+C,EAAE,eAAe;2BACvE,OAAO,8CAA8C,EAAE,YAAY;qBACnE,OAAO,kCAAkC,EAAE,MAAM;yBAdrC,kCAAkC;mCAMxB,yBAAyB;mBAZzC,oCAAoC;wBAC/B,4BAA4B;sBAQ9B,kCAAkC;yCAJf,kDAAkD;sBAErE,qCAAqC;0BACjC,0CAA0C"}