@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,146 +1,146 @@
1
- import { DEG_TO_RAD } from "../../../src/core/math/DEG_TO_RAD.js";
2
- import { v3_quaternion_apply } from "../../../src/core/geom/vec3/v3_quaternion_apply.js";
3
- import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
4
- import { Camera } from "../../../src/engine/graphics/ecs/camera/Camera.js";
5
- import { Gizmo } from "../../../src/engine/graphics/render/gizmo/Gizmo.js";
6
- import { entity_is_editor_owned, SymbolicDisplay } from "./SymbolicDisplay.js";
7
-
8
- /**
9
- * @type {number[]}
10
- */
11
- const CAMERA_COLOR = [0.4, 0.9, 1, 1];
12
-
13
- /**
14
- * Which corners are joined: the near rectangle, the far one, and the four edges between them.
15
- *
16
- * @type {number[]}
17
- */
18
- const EDGES = [
19
- 0, 1, 1, 2, 2, 3, 3, 0,
20
- 4, 5, 5, 6, 6, 7, 7, 4,
21
- 0, 4, 1, 5, 2, 6, 3, 7
22
- ];
23
-
24
- /**
25
- * Eight frustum corners in world space, near plane first.
26
- *
27
- * @type {Float32Array}
28
- */
29
- const corners = new Float32Array(24);
30
-
31
- /**
32
- * @type {Float32Array}
33
- */
34
- const from = new Float32Array(3);
35
-
36
- /**
37
- * @type {Float32Array}
38
- */
39
- const to = new Float32Array(3);
40
-
41
- /**
42
- * The two depths the corners are taken at, near then far.
43
- *
44
- * @type {Float64Array}
45
- */
46
- const depths = new Float64Array(2);
47
-
48
- /**
49
- * The volume a camera entity can see.
50
- *
51
- * **Built from the component rather than from a renderer's camera object.** A camera entity has no
52
- * renderer object of its own, which is why the three `CameraHelper` this replaces could not survive
53
- * the port; everything the frustum needs — field of view, the two clip planes — is on the component,
54
- * and where the camera is and which way it faces is its `Transform`.
55
- * The one thing that is not is the aspect ratio, which belongs to the frame rather than to the
56
- * camera: it is the viewport's, exactly as the renderer's own is.
57
- *
58
- * **Perspective always, because that is what gets drawn.** `Camera.projectionType` carries an
59
- * orthographic option and no renderer in the program reads it — `CameraSystem3` copies the field of
60
- * view and the clip planes and nothing else — so a symbol that branched on it would be drawing a
61
- * projection the game cannot render.
62
- *
63
- * The transform's scale is deliberately not applied. A camera has no size, and a scaled entity
64
- * carrying one still sees exactly as far as its clip planes say.
65
- *
66
- * @see SymbolicDisplay
67
- */
68
- export class CameraSymbolicDisplay extends SymbolicDisplay {
69
- /**
70
- * Record a frustum per camera entity.
71
- *
72
- * The engine's viewport is expected to have a size: `preRender` is dispatched from inside a
73
- * frame, and a frame is not drawn into a collapsed viewport at all.
74
- *
75
- * @param {EntityComponentDataset} dataset
76
- */
77
- record(dataset) {
78
- const viewport = this.engine.graphics.viewport.size;
79
- const aspect = viewport.x / viewport.y;
80
-
81
- Gizmo.color = CAMERA_COLOR;
82
-
83
- dataset.traverseEntities([Camera, Transform], (camera, transform, entity) => {
84
- if (entity_is_editor_owned(dataset, entity)) {
85
- return;
86
- }
87
-
88
- this.#write_corners(camera, transform, aspect);
89
-
90
- for (let i = 0; i < 12; i++) {
91
- const a = EDGES[i * 2] * 3;
92
- const b = EDGES[i * 2 + 1] * 3;
93
-
94
- from[0] = corners[a];
95
- from[1] = corners[a + 1];
96
- from[2] = corners[a + 2];
97
-
98
- to[0] = corners[b];
99
- to[1] = corners[b + 1];
100
- to[2] = corners[b + 2];
101
-
102
- Gizmo.draw_line(from, to);
103
- }
104
- });
105
- }
106
-
107
- /**
108
- * @param {Camera} camera
109
- * @param {Transform} transform
110
- * @param {number} aspect
111
- */
112
- #write_corners(camera, transform, aspect) {
113
- const tangent = Math.tan(camera.fov.getValue() * DEG_TO_RAD / 2);
114
-
115
- const rotation = transform.rotation;
116
- const position = transform.position;
117
-
118
- // near plane first, then far, each anticlockwise from the top right as the camera sees it
119
- depths[0] = camera.clip_near;
120
- depths[1] = camera.clip_far;
121
-
122
- for (let plane = 0; plane < 2; plane++) {
123
- const depth = depths[plane];
124
-
125
- const half_height = depth * tangent;
126
- const half_width = half_height * aspect;
127
-
128
- for (let corner = 0; corner < 4; corner++) {
129
- const x = (corner === 0 || corner === 3) ? half_width : -half_width;
130
- const y = (corner === 0 || corner === 1) ? half_height : -half_height;
131
-
132
- const address = (plane * 4 + corner) * 3;
133
-
134
- v3_quaternion_apply(
135
- corners, address,
136
- x, y, depth,
137
- rotation.x, rotation.y, rotation.z, rotation.w
138
- );
139
-
140
- corners[address] += position.x;
141
- corners[address + 1] += position.y;
142
- corners[address + 2] += position.z;
143
- }
144
- }
145
- }
146
- }
1
+ import { DEG_TO_RAD } from "../../../src/core/math/DEG_TO_RAD.js";
2
+ import { v3_quaternion_apply } from "../../../src/core/geom/vec3/v3_quaternion_apply.js";
3
+ import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
4
+ import { Camera } from "../../../src/engine/graphics/ecs/camera/Camera.js";
5
+ import { Gizmo } from "../../../src/engine/graphics/render/gizmo/Gizmo.js";
6
+ import { entity_is_editor_owned, SymbolicDisplay } from "./SymbolicDisplay.js";
7
+
8
+ /**
9
+ * @type {number[]}
10
+ */
11
+ const CAMERA_COLOR = [0.4, 0.9, 1, 1];
12
+
13
+ /**
14
+ * Which corners are joined: the near rectangle, the far one, and the four edges between them.
15
+ *
16
+ * @type {number[]}
17
+ */
18
+ const EDGES = [
19
+ 0, 1, 1, 2, 2, 3, 3, 0,
20
+ 4, 5, 5, 6, 6, 7, 7, 4,
21
+ 0, 4, 1, 5, 2, 6, 3, 7
22
+ ];
23
+
24
+ /**
25
+ * Eight frustum corners in world space, near plane first.
26
+ *
27
+ * @type {Float32Array}
28
+ */
29
+ const corners = new Float32Array(24);
30
+
31
+ /**
32
+ * @type {Float32Array}
33
+ */
34
+ const from = new Float32Array(3);
35
+
36
+ /**
37
+ * @type {Float32Array}
38
+ */
39
+ const to = new Float32Array(3);
40
+
41
+ /**
42
+ * The two depths the corners are taken at, near then far.
43
+ *
44
+ * @type {Float64Array}
45
+ */
46
+ const depths = new Float64Array(2);
47
+
48
+ /**
49
+ * The volume a camera entity can see.
50
+ *
51
+ * **Built from the component rather than from a renderer's camera object.** A camera entity has no
52
+ * renderer object of its own, which is why the three `CameraHelper` this replaces could not survive
53
+ * the port; everything the frustum needs — field of view, the two clip planes — is on the component,
54
+ * and where the camera is and which way it faces is its `Transform`.
55
+ * The one thing that is not is the aspect ratio, which belongs to the frame rather than to the
56
+ * camera: it is the viewport's, exactly as the renderer's own is.
57
+ *
58
+ * **Perspective always, because that is what gets drawn.** `Camera.projectionType` carries an
59
+ * orthographic option and no renderer in the program reads it — `CameraSystem` copies the field of
60
+ * view and the clip planes and nothing else — so a symbol that branched on it would be drawing a
61
+ * projection the game cannot render.
62
+ *
63
+ * The transform's scale is deliberately not applied. A camera has no size, and a scaled entity
64
+ * carrying one still sees exactly as far as its clip planes say.
65
+ *
66
+ * @see SymbolicDisplay
67
+ */
68
+ export class CameraSymbolicDisplay extends SymbolicDisplay {
69
+ /**
70
+ * Record a frustum per camera entity.
71
+ *
72
+ * The engine's viewport is expected to have a size: `preRender` is dispatched from inside a
73
+ * frame, and a frame is not drawn into a collapsed viewport at all.
74
+ *
75
+ * @param {EntityComponentDataset} dataset
76
+ */
77
+ record(dataset) {
78
+ const viewport = this.engine.graphics.viewport.size;
79
+ const aspect = viewport.x / viewport.y;
80
+
81
+ Gizmo.color = CAMERA_COLOR;
82
+
83
+ dataset.traverseEntities([Camera, Transform], (camera, transform, entity) => {
84
+ if (entity_is_editor_owned(dataset, entity)) {
85
+ return;
86
+ }
87
+
88
+ this.#write_corners(camera, transform, aspect);
89
+
90
+ for (let i = 0; i < 12; i++) {
91
+ const a = EDGES[i * 2] * 3;
92
+ const b = EDGES[i * 2 + 1] * 3;
93
+
94
+ from[0] = corners[a];
95
+ from[1] = corners[a + 1];
96
+ from[2] = corners[a + 2];
97
+
98
+ to[0] = corners[b];
99
+ to[1] = corners[b + 1];
100
+ to[2] = corners[b + 2];
101
+
102
+ Gizmo.draw_line(from, to);
103
+ }
104
+ });
105
+ }
106
+
107
+ /**
108
+ * @param {Camera} camera
109
+ * @param {Transform} transform
110
+ * @param {number} aspect
111
+ */
112
+ #write_corners(camera, transform, aspect) {
113
+ const tangent = Math.tan(camera.fov.getValue() * DEG_TO_RAD / 2);
114
+
115
+ const rotation = transform.rotation;
116
+ const position = transform.position;
117
+
118
+ // near plane first, then far, each anticlockwise from the top right as the camera sees it
119
+ depths[0] = camera.clip_near;
120
+ depths[1] = camera.clip_far;
121
+
122
+ for (let plane = 0; plane < 2; plane++) {
123
+ const depth = depths[plane];
124
+
125
+ const half_height = depth * tangent;
126
+ const half_width = half_height * aspect;
127
+
128
+ for (let corner = 0; corner < 4; corner++) {
129
+ const x = (corner === 0 || corner === 3) ? half_width : -half_width;
130
+ const y = (corner === 0 || corner === 1) ? half_height : -half_height;
131
+
132
+ const address = (plane * 4 + corner) * 3;
133
+
134
+ v3_quaternion_apply(
135
+ corners, address,
136
+ x, y, depth,
137
+ rotation.x, rotation.y, rotation.z, rotation.w
138
+ );
139
+
140
+ corners[address] += position.x;
141
+ corners[address + 1] += position.y;
142
+ corners[address + 2] += position.z;
143
+ }
144
+ }
145
+ }
146
+ }
@@ -1,172 +1,172 @@
1
- import { v3_quaternion_apply } from "../../../src/core/geom/vec3/v3_quaternion_apply.js";
2
- import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
3
- import { Light } from "../../../src/engine/graphics/ecs/light/Light.js";
4
- import { LightType } from "../../../src/engine/graphics/ecs/light/LightType.js";
5
- import { Gizmo } from "../../../src/engine/graphics/render/gizmo/Gizmo.js";
6
- import { gizmo_draw_wire_circle } from "./gizmo_draw_wire_circle.js";
7
- import { entity_is_editor_owned, SymbolicDisplay } from "./SymbolicDisplay.js";
8
-
9
- /**
10
- * @type {number[]}
11
- */
12
- const LIGHT_COLOR = [1, 0.9, 0.3, 1];
13
-
14
- /**
15
- * How many straight pieces a drawn circle is made of. Enough to read as round at the distance an
16
- * editor looks at a light from, and few enough that a scene full of lights is not a scene full of
17
- * lines.
18
- *
19
- * @type {number}
20
- */
21
- const CIRCLE_SEGMENTS = 24;
22
-
23
- /**
24
- * How far a directional light's arrow reaches, in world units. It has no range to draw — that is
25
- * what makes it directional — so the length is the symbol's own and says only which way.
26
- *
27
- * @type {number}
28
- */
29
- const DIRECTION_LENGTH = 2;
30
-
31
- /**
32
- * @type {number}
33
- */
34
- const DIRECTION_DISC_RADIUS = 0.5;
35
-
36
- /**
37
- * @type {Float32Array}
38
- */
39
- const origin = new Float32Array(3);
40
-
41
- /**
42
- * @type {Float32Array}
43
- */
44
- const forward = new Float32Array(3);
45
-
46
- /**
47
- * @type {Float32Array}
48
- */
49
- const right = new Float32Array(3);
50
-
51
- /**
52
- * @type {Float32Array}
53
- */
54
- const up = new Float32Array(3);
55
-
56
- /**
57
- * @type {Float32Array}
58
- */
59
- const rim_center = new Float32Array(3);
60
-
61
- /**
62
- * @type {Float32Array}
63
- */
64
- const rim_point = new Float32Array(3);
65
-
66
- /**
67
- * What a light reaches, drawn as the shape of its own type.
68
- *
69
- * **Range rather than a fixed-size badge.** three's `PointLightHelper` drew a unit sphere whatever
70
- * the light's distance was, so the symbol said where the light was and nothing about what it lit;
71
- * the useful question in an editor is the second one, and the component already answers it. Where
72
- * the light *is* stays answered too — the positioned marker draws that, on the same entity.
73
- *
74
- * **A light shines along its forward**, which is `LightSystem3`'s stated convention and puts it on
75
- * the transform's local +Z. The spot cone and the directional arrow are both built from that, so a
76
- * light that is turned in the editor turns its symbol with it.
77
- *
78
- * @see SymbolicDisplay
79
- */
80
- export class LightSymbolicDisplay extends SymbolicDisplay {
81
- /**
82
- * @param {EntityComponentDataset} dataset
83
- */
84
- record(dataset) {
85
- Gizmo.color = LIGHT_COLOR;
86
-
87
- dataset.traverseEntities([Light, Transform], (light, transform, entity) => {
88
- if (entity_is_editor_owned(dataset, entity)) {
89
- return;
90
- }
91
-
92
- const position = transform.position;
93
-
94
- origin[0] = position.x;
95
- origin[1] = position.y;
96
- origin[2] = position.z;
97
-
98
- switch (light.type.getValue()) {
99
- case LightType.POINT:
100
- Gizmo.draw_wire_sphere(origin, light.distance.getValue());
101
- break;
102
-
103
- case LightType.SPOT:
104
- this.#write_basis(transform);
105
- this.#draw_cone(light.angle.getValue(), light.distance.getValue());
106
- break;
107
-
108
- case LightType.DIRECTION:
109
- this.#write_basis(transform);
110
- this.#draw_arrow();
111
- break;
112
- }
113
- });
114
- }
115
-
116
- /**
117
- * Fill {@link forward}, {@link right} and {@link up} with the entity's own axes.
118
- *
119
- * @param {Transform} transform
120
- */
121
- #write_basis(transform) {
122
- const rotation = transform.rotation;
123
-
124
- v3_quaternion_apply(forward, 0, 0, 0, 1, rotation.x, rotation.y, rotation.z, rotation.w);
125
- v3_quaternion_apply(right, 0, 1, 0, 0, rotation.x, rotation.y, rotation.z, rotation.w);
126
- v3_quaternion_apply(up, 0, 0, 1, 0, rotation.x, rotation.y, rotation.z, rotation.w);
127
- }
128
-
129
- /**
130
- * Four edges to the rim of the cone, and the rim.
131
- *
132
- * @param {number} half_angle in radians, from the axis to the edge
133
- * @param {number} length
134
- */
135
- #draw_cone(half_angle, length) {
136
- const radius = Math.tan(half_angle) * length;
137
-
138
- for (let c = 0; c < 3; c++) {
139
- rim_center[c] = origin[c] + forward[c] * length;
140
- }
141
-
142
- // the four edges are the rim's own axis points, so an edge and the rim always meet
143
- for (let i = 0; i < 4; i++) {
144
- const angle = i * (Math.PI / 2);
145
-
146
- const cos = Math.cos(angle) * radius;
147
- const sin = Math.sin(angle) * radius;
148
-
149
- for (let c = 0; c < 3; c++) {
150
- rim_point[c] = rim_center[c] + right[c] * cos + up[c] * sin;
151
- }
152
-
153
- Gizmo.draw_line(origin, rim_point);
154
- }
155
-
156
- gizmo_draw_wire_circle(rim_center, right, up, radius, CIRCLE_SEGMENTS);
157
- }
158
-
159
- /**
160
- * A shaft along the direction, and a disc across it to say the light is a plane of rays rather
161
- * than a point.
162
- */
163
- #draw_arrow() {
164
- for (let c = 0; c < 3; c++) {
165
- rim_center[c] = origin[c] + forward[c] * DIRECTION_LENGTH;
166
- }
167
-
168
- Gizmo.draw_line(origin, rim_center);
169
-
170
- gizmo_draw_wire_circle(origin, right, up, DIRECTION_DISC_RADIUS, CIRCLE_SEGMENTS);
171
- }
172
- }
1
+ import { v3_quaternion_apply } from "../../../src/core/geom/vec3/v3_quaternion_apply.js";
2
+ import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
3
+ import { Light } from "../../../src/engine/graphics/ecs/light/Light.js";
4
+ import { LightType } from "../../../src/engine/graphics/ecs/light/LightType.js";
5
+ import { Gizmo } from "../../../src/engine/graphics/render/gizmo/Gizmo.js";
6
+ import { gizmo_draw_wire_circle } from "./gizmo_draw_wire_circle.js";
7
+ import { entity_is_editor_owned, SymbolicDisplay } from "./SymbolicDisplay.js";
8
+
9
+ /**
10
+ * @type {number[]}
11
+ */
12
+ const LIGHT_COLOR = [1, 0.9, 0.3, 1];
13
+
14
+ /**
15
+ * How many straight pieces a drawn circle is made of. Enough to read as round at the distance an
16
+ * editor looks at a light from, and few enough that a scene full of lights is not a scene full of
17
+ * lines.
18
+ *
19
+ * @type {number}
20
+ */
21
+ const CIRCLE_SEGMENTS = 24;
22
+
23
+ /**
24
+ * How far a directional light's arrow reaches, in world units. It has no range to draw — that is
25
+ * what makes it directional — so the length is the symbol's own and says only which way.
26
+ *
27
+ * @type {number}
28
+ */
29
+ const DIRECTION_LENGTH = 2;
30
+
31
+ /**
32
+ * @type {number}
33
+ */
34
+ const DIRECTION_DISC_RADIUS = 0.5;
35
+
36
+ /**
37
+ * @type {Float32Array}
38
+ */
39
+ const origin = new Float32Array(3);
40
+
41
+ /**
42
+ * @type {Float32Array}
43
+ */
44
+ const forward = new Float32Array(3);
45
+
46
+ /**
47
+ * @type {Float32Array}
48
+ */
49
+ const right = new Float32Array(3);
50
+
51
+ /**
52
+ * @type {Float32Array}
53
+ */
54
+ const up = new Float32Array(3);
55
+
56
+ /**
57
+ * @type {Float32Array}
58
+ */
59
+ const rim_center = new Float32Array(3);
60
+
61
+ /**
62
+ * @type {Float32Array}
63
+ */
64
+ const rim_point = new Float32Array(3);
65
+
66
+ /**
67
+ * What a light reaches, drawn as the shape of its own type.
68
+ *
69
+ * **Range rather than a fixed-size badge.** three's `PointLightHelper` drew a unit sphere whatever
70
+ * the light's distance was, so the symbol said where the light was and nothing about what it lit;
71
+ * the useful question in an editor is the second one, and the component already answers it. Where
72
+ * the light *is* stays answered too — the positioned marker draws that, on the same entity.
73
+ *
74
+ * **A light shines along its forward**, which is `LightSystem`'s stated convention and puts it on
75
+ * the transform's local +Z. The spot cone and the directional arrow are both built from that, so a
76
+ * light that is turned in the editor turns its symbol with it.
77
+ *
78
+ * @see SymbolicDisplay
79
+ */
80
+ export class LightSymbolicDisplay extends SymbolicDisplay {
81
+ /**
82
+ * @param {EntityComponentDataset} dataset
83
+ */
84
+ record(dataset) {
85
+ Gizmo.color = LIGHT_COLOR;
86
+
87
+ dataset.traverseEntities([Light, Transform], (light, transform, entity) => {
88
+ if (entity_is_editor_owned(dataset, entity)) {
89
+ return;
90
+ }
91
+
92
+ const position = transform.position;
93
+
94
+ origin[0] = position.x;
95
+ origin[1] = position.y;
96
+ origin[2] = position.z;
97
+
98
+ switch (light.type.getValue()) {
99
+ case LightType.POINT:
100
+ Gizmo.draw_wire_sphere(origin, light.distance.getValue());
101
+ break;
102
+
103
+ case LightType.SPOT:
104
+ this.#write_basis(transform);
105
+ this.#draw_cone(light.angle.getValue(), light.distance.getValue());
106
+ break;
107
+
108
+ case LightType.DIRECTION:
109
+ this.#write_basis(transform);
110
+ this.#draw_arrow();
111
+ break;
112
+ }
113
+ });
114
+ }
115
+
116
+ /**
117
+ * Fill {@link forward}, {@link right} and {@link up} with the entity's own axes.
118
+ *
119
+ * @param {Transform} transform
120
+ */
121
+ #write_basis(transform) {
122
+ const rotation = transform.rotation;
123
+
124
+ v3_quaternion_apply(forward, 0, 0, 0, 1, rotation.x, rotation.y, rotation.z, rotation.w);
125
+ v3_quaternion_apply(right, 0, 1, 0, 0, rotation.x, rotation.y, rotation.z, rotation.w);
126
+ v3_quaternion_apply(up, 0, 0, 1, 0, rotation.x, rotation.y, rotation.z, rotation.w);
127
+ }
128
+
129
+ /**
130
+ * Four edges to the rim of the cone, and the rim.
131
+ *
132
+ * @param {number} half_angle in radians, from the axis to the edge
133
+ * @param {number} length
134
+ */
135
+ #draw_cone(half_angle, length) {
136
+ const radius = Math.tan(half_angle) * length;
137
+
138
+ for (let c = 0; c < 3; c++) {
139
+ rim_center[c] = origin[c] + forward[c] * length;
140
+ }
141
+
142
+ // the four edges are the rim's own axis points, so an edge and the rim always meet
143
+ for (let i = 0; i < 4; i++) {
144
+ const angle = i * (Math.PI / 2);
145
+
146
+ const cos = Math.cos(angle) * radius;
147
+ const sin = Math.sin(angle) * radius;
148
+
149
+ for (let c = 0; c < 3; c++) {
150
+ rim_point[c] = rim_center[c] + right[c] * cos + up[c] * sin;
151
+ }
152
+
153
+ Gizmo.draw_line(origin, rim_point);
154
+ }
155
+
156
+ gizmo_draw_wire_circle(rim_center, right, up, radius, CIRCLE_SEGMENTS);
157
+ }
158
+
159
+ /**
160
+ * A shaft along the direction, and a disc across it to say the light is a plane of rays rather
161
+ * than a point.
162
+ */
163
+ #draw_arrow() {
164
+ for (let c = 0; c < 3; c++) {
165
+ rim_center[c] = origin[c] + forward[c] * DIRECTION_LENGTH;
166
+ }
167
+
168
+ Gizmo.draw_line(origin, rim_center);
169
+
170
+ gizmo_draw_wire_circle(origin, right, up, DIRECTION_DISC_RADIUS, CIRCLE_SEGMENTS);
171
+ }
172
+ }