@woosh/meep-engine 3.11.3 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/README.md +14 -18
  2. package/editor/SelectionVisualizer.js +127 -127
  3. package/editor/entity_world_bounds.js +27 -27
  4. package/editor/particles/rebuildParticleEmitter.js +31 -31
  5. package/editor/process/SymbolicDisplayProcess.js +1 -1
  6. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  7. package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
  8. package/editor/prototypeEditorShell.js +156 -156
  9. package/editor/selection/editor_pick.js +130 -130
  10. package/editor/selection/screen_rect_frustum.js +119 -119
  11. package/editor/tools/v2/TransformControls.js +971 -971
  12. package/package.json +1 -1
  13. package/src/engine/Engine.d.ts +3 -3
  14. package/src/engine/Engine.d.ts.map +1 -1
  15. package/src/engine/Engine.js +726 -726
  16. package/src/engine/EngineHarness.d.ts +1 -1
  17. package/src/engine/EngineHarness.js +590 -590
  18. package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
  19. package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
  20. package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
  21. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
  22. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  23. package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
  24. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
  25. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
  26. package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
  27. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
  28. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
  29. package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
  30. package/src/engine/graphics/ecs/water/Water.js +104 -104
  31. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
  32. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
  33. package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
  35. package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
  36. package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
  37. package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
  38. package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
  39. package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
  40. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
  41. package/src/engine/graphics3/AnimationSystem.js +352 -0
  42. package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
  43. package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
  44. package/src/engine/graphics3/AnimationSystem3.js +6 -348
  45. package/src/engine/graphics3/CameraSystem.d.ts +49 -0
  46. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
  47. package/src/engine/graphics3/CameraSystem.js +170 -0
  48. package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
  49. package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
  50. package/src/engine/graphics3/CameraSystem3.js +6 -166
  51. package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
  52. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
  53. package/src/engine/graphics3/DebugDrawSystem.js +205 -0
  54. package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
  55. package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
  56. package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
  57. package/src/engine/graphics3/DecalSystem.d.ts +81 -0
  58. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
  59. package/src/engine/graphics3/DecalSystem.js +441 -0
  60. package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
  61. package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
  62. package/src/engine/graphics3/DecalSystem3.js +6 -437
  63. package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
  64. package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
  65. package/src/engine/graphics3/FogOfWarSystem.js +265 -0
  66. package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
  67. package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
  68. package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
  69. package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
  70. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
  71. package/src/engine/graphics3/GraphicsEngine.js +790 -0
  72. package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
  73. package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
  74. package/src/engine/graphics3/GraphicsEngine3.js +6 -786
  75. package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
  76. package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
  77. package/src/engine/graphics3/HighlightSystem.js +241 -0
  78. package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
  79. package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
  80. package/src/engine/graphics3/HighlightSystem3.js +6 -237
  81. package/src/engine/graphics3/LightSystem.d.ts +40 -0
  82. package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
  83. package/src/engine/graphics3/LightSystem.js +211 -0
  84. package/src/engine/graphics3/LightSystem3.d.ts +6 -36
  85. package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
  86. package/src/engine/graphics3/LightSystem3.js +6 -207
  87. package/src/engine/graphics3/MeshSystem.d.ts +106 -0
  88. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
  89. package/src/engine/graphics3/MeshSystem.js +647 -0
  90. package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
  91. package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
  92. package/src/engine/graphics3/MeshSystem3.js +6 -642
  93. package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
  94. package/src/engine/graphics3/ParticipatingMedia.js +203 -203
  95. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
  96. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
  97. package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
  98. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
  99. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
  100. package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
  101. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
  102. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
  103. package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
  104. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
  105. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
  106. package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
  107. package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
  108. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
  109. package/src/engine/graphics3/PathDisplaySystem.js +309 -0
  110. package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
  111. package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
  112. package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
  113. package/src/engine/graphics3/Pickable.d.ts +1 -1
  114. package/src/engine/graphics3/Pickable.js +65 -65
  115. package/src/engine/graphics3/PickingQuery.d.ts +1 -1
  116. package/src/engine/graphics3/PickingQuery.js +48 -48
  117. package/src/engine/graphics3/PickingSystem.d.ts +67 -0
  118. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
  119. package/src/engine/graphics3/PickingSystem.js +273 -0
  120. package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
  121. package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
  122. package/src/engine/graphics3/PickingSystem3.js +6 -269
  123. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
  124. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
  125. package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
  126. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
  127. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
  128. package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
  129. package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
  130. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
  131. package/src/engine/graphics3/TerrainSystem.js +566 -0
  132. package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
  133. package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
  134. package/src/engine/graphics3/TerrainSystem3.js +6 -562
  135. package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
  136. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
  137. package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
  138. package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
  139. package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
  140. package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
  141. package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
  142. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
  143. package/src/engine/graphics3/Trail3DSystem.js +221 -0
  144. package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
  145. package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
  146. package/src/engine/graphics3/Trail3DSystem3.js +6 -217
  147. package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
  148. package/src/engine/graphics3/VolumetricLightMap.js +2 -2
  149. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
  150. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
  151. package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
  152. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
  153. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
  154. package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
  155. package/src/engine/graphics3/WaterSystem.d.ts +59 -0
  156. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
  157. package/src/engine/graphics3/WaterSystem.js +293 -0
  158. package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
  159. package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
  160. package/src/engine/graphics3/WaterSystem3.js +6 -289
  161. package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
  162. package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
  163. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
  164. package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
  165. package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
  166. package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
  167. package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
  168. package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
  169. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
  170. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  171. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
  172. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
  173. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  174. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
  175. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
  176. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  177. package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
  178. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
  179. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
  180. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
  181. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
  182. package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
  183. package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
  184. package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
  185. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
  186. package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
  187. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  188. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
  189. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  190. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
  191. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  192. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
  193. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
  194. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
  195. package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
  196. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
  197. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  198. package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
  199. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
  201. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  202. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
  203. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  204. package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
  205. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  206. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
  207. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  208. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
  209. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  210. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
  211. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  212. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
  213. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  214. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
  215. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  216. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
  217. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  218. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
  219. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
  220. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  221. package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
  222. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
  223. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  224. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
  225. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
  226. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
  227. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  228. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
  229. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
  230. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
  231. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  232. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
  233. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
  234. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
  235. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  236. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
  237. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
  238. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
  239. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
  240. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  241. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  242. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
  243. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  244. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
  245. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  246. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
  247. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  248. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
  249. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  250. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
  251. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  252. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
  253. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
  254. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
  255. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
  256. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
  257. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
  258. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
  259. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  260. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
  261. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
  262. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  263. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
  264. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
  265. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
  266. package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
  267. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  268. package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
  269. package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
  270. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  271. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
  272. package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
  273. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  274. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
  275. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  276. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
  277. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  278. package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
  279. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  280. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
  281. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  282. package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
  283. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
  284. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
  285. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
  286. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  287. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
  288. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  289. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
  290. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  291. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
  292. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
  293. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
  294. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  295. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
  296. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  297. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
  298. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  299. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
  300. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
  301. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
  302. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
  303. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +2 -2
  304. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  305. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
  306. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
  307. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
  308. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  309. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
  310. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  311. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
  312. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  313. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
  314. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
  315. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
  316. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  317. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
  318. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  319. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
  320. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
  321. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
  322. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
  323. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
  324. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  325. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
  326. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  327. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
  328. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  329. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
  330. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  331. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
  332. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  333. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
  334. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  335. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
  336. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
  337. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
  338. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  339. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
  340. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
  341. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
  342. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
  343. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
  344. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
  345. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
  346. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
  347. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  348. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
  349. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  350. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
  351. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  352. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
  353. package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
  354. package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
  355. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
  356. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
  357. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
  358. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
  359. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
  360. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
  361. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
  362. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
  363. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  364. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
  365. package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
  366. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  367. package/src/shade/renderer/shader/ComputeShader.js +350 -296
  368. package/src/shade/renderer/shader/ImageShader.js +217 -217
  369. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
  370. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  371. package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
  372. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
  373. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
  374. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
  375. package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
  376. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
  377. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
  378. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
  379. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  380. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
  381. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
  382. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  383. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +12 -15
  384. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
  385. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  386. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
  387. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
  388. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  389. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
  390. package/src/shade/renderer/water/shader_water.js +246 -246
  391. package/src/shade/vitest.setup.mjs +1 -1
  392. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
  393. package/src/view/minimap/Minimap.d.ts +2 -2
  394. package/src/view/minimap/Minimap.d.ts.map +1 -1
  395. package/src/view/minimap/Minimap.js +225 -225
  396. package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
  397. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  398. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  399. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
  400. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
  401. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
@@ -1,566 +1,10 @@
1
- import { assert } from "../../core/assert.js";
2
- import {
3
- bvh_query_user_data_intersects_frustum
4
- } from "../../core/bvh2/bvh3/query/bvh_query_user_data_intersects_frustum.js";
5
- import { SignalBinding } from "../../core/events/signal/SignalBinding.js";
6
- import { noop } from "../../core/function/noop.js";
7
- import { m4_invert } from "../../core/geom/3d/mat4/m4_invert.js";
8
- import { GameAssetType } from "../asset/GameAssetType.js";
9
- import { ImageRGBADataLoader } from "../asset/loaders/image/ImageRGBADataLoader.js";
10
- import { System } from "../ecs/System.js";
11
- import Terrain from "../ecs/terrain/ecs/Terrain.js";
12
- import { TerrainFlags } from "../ecs/terrain/ecs/TerrainFlags.js";
13
- import { tile_geometry_to_meshlets } from "../ecs/terrain/tiles/tile_geometry_to_meshlets.js";
14
- import { Transform } from "../ecs/transform/Transform.js";
15
- import { t64_copy_from_transform } from "../ecs/transform/t64_copy_from_transform.js";
16
- import { t64_equals_transform } from "../ecs/transform/t64_equals_transform.js";
17
- import { sampler2d_ensure_uint8_RGBA } from "../graphics/texture/sampler/sampler2d_ensure_uint8_RGBA.js";
18
- import { Sampler2D } from "../graphics/texture/sampler/Sampler2D.js";
19
- import { WHITE_PIXEL_DATA_URL } from "../graphics/WHITE_PIXEL_DATA_URL.js";
20
- import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
21
- import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
22
- import { StandardShadeMaterial } from "../../shade/renderer/material/StandardShadeMaterial.js";
23
- import { Mesh } from "../../shade/renderer/scene/Mesh.js";
24
- import { GPUTerrainSplatRenderer } from "./terrain/GPUTerrainSplatRenderer.js";
25
- import { pack_terrain_row_table } from "./terrain/pack_terrain_row_table.js";
1
+ import { TerrainSystem } from "./TerrainSystem.js";
26
2
 
27
3
  /**
28
- * Tile indices a frustum query answers with. Module-static because the query runs every frame and
29
- * every terrain shares one shape of answer.
4
+ * @deprecated Renamed to {@link TerrainSystem}. The trailing `3` marked the 2.x 3.x renderer transition;
5
+ * the 2.x name it disambiguated against is gone, so the suffix no longer distinguishes anything.
30
6
  *
31
- * @type {number[]}
7
+ * Kept as a re-export rather than removed: this is a library, and an import path is as much a
8
+ * published interface as a class name.
32
9
  */
33
- const SCRATCH_TILE_INDICES = [];
34
-
35
- /**
36
- * What the overlay's sprite is until an authored one loads — the same white pixel the component's
37
- * own default URL names, held as pixels so nothing has to decode a data URL to draw a grid.
38
- *
39
- * @type {Sampler2D}
40
- */
41
- const WHITE_SPRITE = Sampler2D.uint8(4, 1, 1);
42
- WHITE_SPRITE.data.fill(255);
43
-
44
- /**
45
- * Draws terrain under Shade: each built tile becomes one meshlet-encoded mesh in the scene, and a
46
- * pass after the opaque geometry textures the lot.
47
- *
48
- * **The tile is the unit, not the terrain.** Tiles are built on demand as the camera sees them and
49
- * destroyed as it leaves, which is the streaming the tile manager already does; this system follows
50
- * that with scene membership rather than deciding anything about it.
51
- *
52
- * **Tile vertices are already in terrain space** — the height-field builder positions each tile
53
- * within the whole grid rather than at its own origin — so every tile mesh carries the terrain
54
- * entity's transform and nothing else. That is also why the tile's own raycast inverts the same
55
- * matrix.
56
- *
57
- * **Texturing is a full-screen pass, not a material** (U3b, D40): the tiles draw with one flat
58
- * material, and at {@link FramePhase.AfterGBuffer} the splat mix and grid overlay are painted over
59
- * every pixel the visibility buffer attributes to a tile — the architecture decals built (D23),
60
- * keyed on mesh rows rather than froxels. Registered before `DecalSystem3` in the profile, which
61
- * is what puts scorch marks on top of the textured ground rather than under it.
62
- *
63
- * **It does not call `Terrain.link`.** That method binds a three `ShaderMaterial` through
64
- * `graphics.getMaterialManager()`, which `GraphicsEngine3` does not have and will not; the parts of
65
- * linking that are not about three — starting the tile build service — are done here directly.
66
- */
67
- export class TerrainSystem3 extends System {
68
- dependencies = [Terrain];
69
-
70
- /**
71
- * @type {GraphicsEngine3}
72
- */
73
- #graphics;
74
-
75
- /**
76
- * @type {RenderExtension|null}
77
- */
78
- #extension = null;
79
-
80
- /**
81
- * The scene this system writes into, received rather than created so terrain, meshes and lights
82
- * all land in the one the facade draws.
83
- *
84
- * @type {Scene}
85
- */
86
- #scene;
87
-
88
- /**
89
- * @type {AssetManager}
90
- */
91
- #assetManager;
92
-
93
- /**
94
- * What each terrain entity has in the scene.
95
- *
96
- * @type {Map<number, {terrain: Terrain, material: StandardShadeMaterial, meshes: Map<TerrainTile, Mesh>, bindings: SignalBinding[]}>}
97
- */
98
- #entries = new Map();
99
-
100
- /**
101
- * @param {GraphicsEngine3} graphics
102
- * @param {Scene} scene
103
- * @param {AssetManager} assetManager
104
- */
105
- constructor(graphics, scene, assetManager) {
106
- super();
107
-
108
- assert.defined(graphics, 'graphics');
109
- assert.defined(scene, 'scene');
110
- assert.defined(assetManager, 'assetManager');
111
-
112
- this.#graphics = graphics;
113
- this.#scene = scene;
114
- this.#assetManager = assetManager;
115
- }
116
-
117
- async startup(entityManager) {
118
- this.entityManager = entityManager;
119
-
120
- this.#extension = this.#graphics.add_extension(new TerrainExtension(this));
121
-
122
- // the terrain's own layer loading decodes images; the decoder is renderer-neutral and the
123
- // legacy system registers the same one
124
- await this.#assetManager.tryRegisterLoader(GameAssetType.Image, new ImageRGBADataLoader());
125
- }
126
-
127
- async shutdown(entityManager) {
128
- if (this.#extension !== null) {
129
- this.#graphics.remove_extension(this.#extension);
130
-
131
- this.#extension = null;
132
- }
133
-
134
- for (const entity of Array.from(this.#entries.keys())) {
135
- this.#drop(entity);
136
- }
137
- }
138
-
139
- /**
140
- * @param {Terrain} terrain
141
- * @param {number} entity
142
- */
143
- link(terrain, entity) {
144
- if (!terrain.getFlag(TerrainFlags.Built)) {
145
- terrain.build(this.#assetManager);
146
- }
147
-
148
- const entry = {
149
- terrain,
150
- /*
151
- One material for the whole terrain, and a flat one on purpose: the splat pass rewrites
152
- the albedo after the G-buffer is drawn (U3b), so what the material contributes is the
153
- other three channels — roughness 1 and metalness 0, which is exactly what the legacy
154
- splat shader forced.
155
- */
156
- material: new StandardShadeMaterial(),
157
- meshes: new Map(),
158
- bindings: [],
159
- renderer: new GPUTerrainSplatRenderer(),
160
- /**
161
- * The pass's per-frame tables and settings, reused between frames.
162
- */
163
- rows: new Uint32Array(0),
164
- scales: new Float32Array(0),
165
- world_to_terrain: new Float32Array(16),
166
- inv_world_size: new Float32Array(2),
167
- grid_transform: new Float32Array(4),
168
- grid_resolution: new Float32Array(2),
169
- sprite: WHITE_SPRITE
170
- };
171
-
172
- entry.material.name = 'terrain';
173
- entry.material.roughness_factor = 1;
174
- entry.material.metallic_factor = 0;
175
-
176
- this.#entries.set(entity, entry);
177
-
178
- const manager = terrain.tiles;
179
-
180
- const built = new SignalBinding(manager.on.tileBuilt, tile => this.#add_tile(entity, tile));
181
- const destroyed = new SignalBinding(manager.on.tileDestroyed, tile => this.#remove_tile(entity, tile));
182
- const sprite = new SignalBinding(terrain.overlay.tileImage.onChanged, () => this.#load_sprite(entity, terrain));
183
-
184
- built.link();
185
- destroyed.link();
186
- sprite.link();
187
-
188
- entry.bindings.push(built, destroyed, sprite);
189
-
190
- this.#load_sprite(entity, terrain);
191
-
192
- terrain.startBuildService();
193
-
194
- // tiles that were already standing before this system saw the entity
195
- for (const tile of manager.tiles) {
196
- if (tile.isBuilt) {
197
- this.#add_tile(entity, tile);
198
- }
199
- }
200
- }
201
-
202
- /**
203
- * @param {Terrain} terrain
204
- * @param {number} entity
205
- */
206
- unlink(terrain, entity) {
207
- terrain.stopBuildService();
208
-
209
- this.#drop(entity);
210
- }
211
-
212
- update(timeDelta) {
213
- const em = this.entityManager;
214
-
215
- if (em === null) {
216
- return;
217
- }
218
-
219
- const ecd = em.dataset;
220
-
221
- if (ecd === null) {
222
- return;
223
- }
224
-
225
- ecd.traverseComponents(Terrain, (terrain, entity) => {
226
- const transform = ecd.getComponent(entity, Transform);
227
-
228
- if (transform !== undefined) {
229
- // the raycast inverts this to bring a ray into terrain space, so it has to track
230
- // the entity whether or not anything is drawn
231
- terrain.transform = transform.matrix;
232
- }
233
-
234
- this.#place(entity, transform);
235
-
236
- this.#build_visible_tiles(terrain);
237
- });
238
- }
239
-
240
- /**
241
- * Ask for the tiles the camera can see. The manager owns what that costs — a tile already built
242
- * or already building is not requested again.
243
- *
244
- * @param {Terrain} terrain
245
- */
246
- #build_visible_tiles(terrain) {
247
- const camera = this.#graphics.camera.camera;
248
-
249
- const manager = terrain.tiles;
250
-
251
- const hit_count = bvh_query_user_data_intersects_frustum(
252
- SCRATCH_TILE_INDICES, 0,
253
- manager.bvh, camera.frustum
254
- );
255
-
256
- for (let i = 0; i < hit_count; i++) {
257
- const tile = manager.tiles[SCRATCH_TILE_INDICES[i]];
258
-
259
- if (tile.isBuilt || tile.isBuildInProgress) {
260
- continue;
261
- }
262
-
263
- const position = tile.gridPosition;
264
-
265
- manager.build(position.x, position.y, noop, noop);
266
- }
267
- }
268
-
269
- /**
270
- * @param {number} entity
271
- * @param {TerrainTile} tile
272
- */
273
- #add_tile(entity, tile) {
274
- const entry = this.#entries.get(entity);
275
-
276
- if (entry === undefined) {
277
- return;
278
- }
279
-
280
- if (entry.meshes.has(tile)) {
281
- // a rebuilt tile replaces what it had rather than accumulating
282
- this.#remove_tile(entity, tile);
283
- }
284
-
285
- const geometry = tile_geometry_to_meshlets({
286
- vertices: tile.vertices,
287
- normals: tile.normals,
288
- uvs: tile.uvs,
289
- indices: tile.indices
290
- }, `terrain tile ${tile.gridPosition.x},${tile.gridPosition.y}`);
291
-
292
- const mesh = Mesh.from(geometry, entry.material);
293
-
294
- entry.meshes.set(tile, mesh);
295
-
296
- this.#scene.add(mesh);
297
-
298
- const ecd = this.entityManager === null ? null : this.entityManager.dataset;
299
-
300
- if (ecd !== null) {
301
- this.#place(entity, ecd.getComponent(entity, Transform));
302
- }
303
- }
304
-
305
- /**
306
- * @param {number} entity
307
- * @param {TerrainTile} tile
308
- */
309
- #remove_tile(entity, tile) {
310
- const entry = this.#entries.get(entity);
311
-
312
- if (entry === undefined) {
313
- return;
314
- }
315
-
316
- const mesh = entry.meshes.get(tile);
317
-
318
- if (mesh === undefined) {
319
- return;
320
- }
321
-
322
- this.#scene.remove(mesh);
323
-
324
- entry.meshes.delete(tile);
325
- }
326
-
327
- /**
328
- * @param {number} entity
329
- * @param {Transform|undefined} transform
330
- */
331
- #place(entity, transform) {
332
- if (transform === undefined) {
333
- return;
334
- }
335
-
336
- const entry = this.#entries.get(entity);
337
-
338
- if (entry === undefined) {
339
- return;
340
- }
341
-
342
- for (const mesh of entry.meshes.values()) {
343
- /*
344
- A tile already standing where it belongs is left alone, and it is the common case:
345
- {@link update} places on a poll rather than on the entity's transform signals, because a
346
- terrain may be linked before it has a `Transform` at all. `updateMatrices` bumps a
347
- version whether or not anything moved, and downstream that version is what makes the
348
- scene database upload a row and the top-level acceleration structure rebuild itself —
349
- a whole-tree treelet optimisation and a fresh GPU buffer, once a frame, for a ground
350
- that has not moved since the level loaded (E19).
351
- */
352
- if (t64_equals_transform(mesh.transform_local, transform)) {
353
- continue;
354
- }
355
-
356
- t64_copy_from_transform(mesh.transform_local, transform);
357
-
358
- mesh.updateMatrices();
359
- }
360
- }
361
-
362
- /**
363
- * @param {number} entity
364
- */
365
- #drop(entity) {
366
- const entry = this.#entries.get(entity);
367
-
368
- if (entry === undefined) {
369
- return;
370
- }
371
-
372
- for (let i = 0; i < entry.bindings.length; i++) {
373
- entry.bindings[i].unlink();
374
- }
375
-
376
- for (const mesh of entry.meshes.values()) {
377
- this.#scene.remove(mesh);
378
- }
379
-
380
- entry.renderer.destroy();
381
-
382
- this.#entries.delete(entity);
383
- }
384
-
385
- /**
386
- * Fetch the overlay's cell sprite. The default is the white pixel the component names by data
387
- * URL, held here as pixels — a grid with no authored sprite is the cell colours themselves,
388
- * and nothing decodes a data URL to get there.
389
- *
390
- * @param {number} entity
391
- * @param {Terrain} terrain
392
- */
393
- #load_sprite(entity, terrain) {
394
- const entry = this.#entries.get(entity);
395
-
396
- if (entry === undefined) {
397
- return;
398
- }
399
-
400
- const url = terrain.overlay.baseTileImage;
401
-
402
- if (url === WHITE_PIXEL_DATA_URL) {
403
- entry.sprite = WHITE_SPRITE;
404
-
405
- return;
406
- }
407
-
408
- this.#assetManager.promise(url, GameAssetType.Image).then(asset => {
409
- if (this.#entries.get(entity) !== entry || terrain.overlay.baseTileImage !== url) {
410
- // unlinked, or re-authored while the image was in flight
411
- return;
412
- }
413
-
414
- entry.sprite = sampler2d_ensure_uint8_RGBA(asset.create());
415
- });
416
- }
417
-
418
- /**
419
- * Everything the splat pass draws one terrain from, assembled against the scene that will be
420
- * asked for the rows. What the pass consumes and what a gate inspects are deliberately the
421
- * same object — the same reason `DecalSystem3` exposes its packed records.
422
- *
423
- * @param {number} entity
424
- * @param {GPUSceneContext} scene
425
- * @returns {object|null} `null` when this terrain has nothing on screen to texture — no tiles
426
- * built, or none of them in the scene database yet
427
- */
428
- splat_frame(entity, scene) {
429
- const entry = this.#entries.get(entity);
430
-
431
- if (entry === undefined || entry.meshes.size === 0) {
432
- return null;
433
- }
434
-
435
- const packed = pack_terrain_row_table({ meshes: entry.meshes, scene, table: entry.rows });
436
-
437
- entry.rows = packed.table;
438
-
439
- if (packed.size === 0) {
440
- return null;
441
- }
442
-
443
- const terrain = entry.terrain;
444
-
445
- const invertible = m4_invert(entry.world_to_terrain, terrain.transform);
446
-
447
- assert.equal(invertible, true, 'terrain transform is not invertible');
448
-
449
- const world_x = terrain.size.x * terrain.gridScale;
450
- const world_y = terrain.size.y * terrain.gridScale;
451
-
452
- entry.inv_world_size[0] = 1 / world_x;
453
- entry.inv_world_size[1] = 1 / world_y;
454
-
455
- const grid_transform = terrain.gridTransform;
456
-
457
- entry.grid_transform[0] = grid_transform.scale_x;
458
- entry.grid_transform[1] = grid_transform.scale_y;
459
- entry.grid_transform[2] = grid_transform.offset_x;
460
- entry.grid_transform[3] = grid_transform.offset_y;
461
-
462
- entry.grid_resolution[0] = terrain.size.x;
463
- entry.grid_resolution[1] = terrain.size.y;
464
-
465
- const layers = terrain.layers;
466
- const layer_count = layers.count();
467
-
468
- if (entry.scales.length < layer_count * 2) {
469
- entry.scales = new Float32Array(layer_count * 2);
470
- }
471
-
472
- // the legacy `updateLayerScales`, computed at the source instead of read off a texture
473
- for (let i = 0; i < layer_count; i++) {
474
- const layer = layers.get(i);
475
-
476
- entry.scales[i * 2] = world_x / layer.size.x;
477
- entry.scales[i * 2 + 1] = world_y / layer.size.y;
478
- }
479
-
480
- const splat = terrain.splat;
481
- const layer_image = layers.sampler;
482
-
483
- if (layer_count > 0) {
484
- // `Terrain.build` and `addLayer` keep all three in step; a mismatch is an upstream bug
485
- // that would draw the wrong layer, silently
486
- assert.equal(splat.depth, layer_count, 'splat weight layers disagree with the layer list');
487
- assert.equal(layer_image.depth, layer_count, 'layer texture depth disagrees with the layer list');
488
- }
489
-
490
- return {
491
- rows: entry.rows,
492
- row_count: packed.size,
493
- scales: entry.scales,
494
- layer_count,
495
- world_to_terrain: entry.world_to_terrain,
496
- inv_world_size: entry.inv_world_size,
497
- grid_transform: entry.grid_transform,
498
- grid_resolution: entry.grid_resolution,
499
- weights: {
500
- data: splat.weightData,
501
- width: splat.size.x,
502
- height: splat.size.y,
503
- depth: splat.depth,
504
- version: splat.weights.version
505
- },
506
- layer_image: {
507
- data: layer_image.data,
508
- width: layer_image.width,
509
- height: layer_image.height,
510
- depth: layer_image.depth,
511
- version: layer_image.version
512
- },
513
- overlay: terrain.overlay.sampler,
514
- sprite: entry.sprite
515
- };
516
- }
517
-
518
- /**
519
- * @param {FrameContext} frame
520
- */
521
- record(frame) {
522
- for (const entity of this.#entries.keys()) {
523
- const splat = this.splat_frame(entity, frame.view.scene);
524
-
525
- if (splat === null) {
526
- // nothing of this terrain on screen; the frame keeps the albedo it already had
527
- continue;
528
- }
529
-
530
- splat.frame = frame;
531
-
532
- this.#entries.get(entity).renderer.graph_draw(splat);
533
- }
534
- }
535
- }
536
-
537
- /**
538
- * The splat and the grid overlay are a full-screen pass writing a replacement albedo, so this is
539
- * {@link FramePhase.AfterGBuffer} — the one phase where the G-buffer may be published into.
540
- *
541
- * Everything that paints on top of the ground declares itself after this rather than being
542
- * registered after it; {@link DecalExtension} is the one that does.
543
- */
544
- export class TerrainExtension extends RenderExtension {
545
- name = "terrain";
546
-
547
- phase = FramePhase.AfterGBuffer;
548
-
549
- /**
550
- * @type {TerrainSystem3}
551
- */
552
- #system;
553
-
554
- /**
555
- * @param {TerrainSystem3} system
556
- */
557
- constructor(system) {
558
- super();
559
-
560
- this.#system = system;
561
- }
562
-
563
- record(frame) {
564
- this.#system.record(frame);
565
- }
566
- }
10
+ export const TerrainSystem3 = TerrainSystem;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shows an entity's tooltip when the pointer is over it, under Shade.
3
+ *
4
+ * **The target is a promise, and that is the visible difference.** The renderer this replaces
5
+ * answered "what is under the pointer" inside the call that asked, by walking every visible mesh and
6
+ * raycasting three's geometry. Picking here is asynchronous and batched by contract (I-9), because
7
+ * the backend it is built for reads entity ids off the visibility buffer — a frame late, a batch at
8
+ * a time. So the answer arrives a tick after the question, and a tooltip appears a tick later than
9
+ * it used to. That is a change to the UI's timing, not to what it points at.
10
+ *
11
+ * **One ray, one answer, and it is the nearest thing.** The old path tested only entities that
12
+ * carried a tooltip, so a chest behind a wall described itself through the wall. This asks what the
13
+ * pointer is on and takes what comes back: something in front without a tooltip means no tooltip,
14
+ * which is both what the player can see and the only thing an id read off a pixel could ever say.
15
+ *
16
+ * **{@link Pickable} governs what can be found.** An entity with a tooltip and no `Pickable` is not
17
+ * in the picking index and has no tooltip in practice — the opt-in is authored next to the tooltip
18
+ * itself.
19
+ *
20
+ * The delay is a delay before a tooltip *appears*. Once one is up the pointer is asked about on
21
+ * every tick, so moving off an entity takes the tooltip away without waiting again.
22
+ */
23
+ export class TooltipComponentSystem extends System<any> {
24
+ /**
25
+ * @param {GraphicsEngine} graphics
26
+ * @param {TooltipManager} tooltips
27
+ * @param {PointerDevice} pointer
28
+ * @param {Localization} localization
29
+ * @param {PickingSystem} picking
30
+ */
31
+ constructor({ graphics, tooltips, pointer, localization, picking }: GraphicsEngine);
32
+ dependencies: (typeof TooltipComponent)[];
33
+ /**
34
+ * How long the pointer has to rest before a tooltip appears, in seconds.
35
+ *
36
+ * @type {number}
37
+ */
38
+ display_delay: number;
39
+ /**
40
+ * The screen-space rectangle the tooltip points at. Follows the pointer while a tooltip is up.
41
+ *
42
+ * @readonly
43
+ * @type {Rectangle}
44
+ */
45
+ readonly target: Rectangle;
46
+ /**
47
+ * Which entity the tooltip currently on screen describes, or {@link PickingResult.NOTHING}.
48
+ *
49
+ * @returns {number}
50
+ */
51
+ get tip_entity(): number;
52
+ startup(entityManager: any): Promise<void>;
53
+ shutdown(entityManager: any): Promise<void>;
54
+ /**
55
+ * @param {TooltipComponent} tooltip
56
+ * @param {number} entity
57
+ */
58
+ unlink(tooltip: TooltipComponent, entity: number): void;
59
+ update(time_delta: any): void;
60
+ #private;
61
+ }
62
+ import { System } from "../ecs/System.js";
63
+ import { TooltipComponent } from "../ecs/tooltip/TooltipComponent.js";
64
+ import Rectangle from "../../core/geom/2d/Rectangle.js";
65
+ //# sourceMappingURL=TooltipComponentSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TooltipComponentSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/TooltipComponentSystem.js"],"names":[],"mappings":"AAgCA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IA0EI;;;;;;OAMG;IACH,oFAcC;IA9FD,0CAAkC;IAElC;;;;OAIG;IACH,eAFU,MAAM,CAEI;IAEpB;;;;;OAKG;IACH,iBAFU,SAAS,CAEM;IAiFzB;;;;OAIG;IACH,yBAEC;IAED,2CAMC;IAED,4CAMC;IAED;;;OAGG;IACH,gBAHW,gBAAgB,UAChB,MAAM,QAOhB;IAED,8BAyBC;;CAmHJ;uBAlUsB,kBAAkB;iCACR,oCAAoC;sBAL/C,iCAAiC"}