@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,441 +1,10 @@
1
- import { assert } from "../../core/assert.js";
2
- import { LoadingCache } from "../../core/cache/LoadingCache.js";
3
- import { strictEquals } from "../../core/function/strictEquals.js";
4
- import { computeStringHash } from "../../core/primitives/strings/computeStringHash.js";
5
- import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
6
- import { TerrainExtension } from "./TerrainSystem3.js";
7
- import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.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 { Transform } from "../ecs/transform/Transform.js";
12
- import { Decal } from "../graphics/ecs/decal/v2/Decal.js";
13
- import { ReferencedTextureAtlas } from "../graphics/texture/atlas/ReferencedTextureAtlas.js";
14
- import { sampler2d_ensure_uint8_RGBA } from "../graphics/texture/sampler/sampler2d_ensure_uint8_RGBA.js";
15
- import { DecalAtlas } from "./decal/DecalAtlas.js";
16
- import { DecalAtlasFill } from "./decal/DecalAtlasFill.js";
17
- import { decal_atlas_max_lod } from "./decal/decal_atlas_border.js";
18
- import {
19
- decal_identity_normal,
20
- decal_identity_orm,
21
- decal_pack_orm
22
- } from "./decal/decal_material_samplers.js";
23
- import { DECAL_RECORD_WORD_COUNT } from "./decal/DECAL_GPU_RECORD.js";
24
- import { sort_decals_by_priority, write_decal_record } from "./decal/decal_gpu_records.js";
25
- import { GPUDecalRenderer } from "./decal/GPUDecalRenderer.js";
1
+ import { DecalSystem } from "./DecalSystem.js";
26
2
 
27
3
  /**
28
- * Paints the game's decals into the G-buffer under Shade.
4
+ * @deprecated Renamed to {@link DecalSystem}. 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.
29
6
  *
30
- * **A decal is a surface override, not a tint** (D22): it carries albedo, a tangent-space normal,
31
- * roughness, metalness and emission, and it writes them into the G-buffer before anything is lit —
32
- * so ambient occlusion, screen-space reflection and shading all see a decal exactly as they see the
33
- * surface it is painted on. The renderer this replaces could only lerp diffuse colour inside a
34
- * forward shader.
35
- *
36
- * **Decals reach opaque surfaces only, by construction.** The G-buffer is all they touch and
37
- * transparency composites later, so a decal will never appear on water.
38
- *
39
- * The records are rebuilt every frame. That sounds wasteful and is the cheaper arrangement: the
40
- * froxel binning depends on the camera and so has to run every frame regardless, and rebuilding the
41
- * records alongside it means nothing has to watch a decal's colour for changes — which matters,
42
- * because the signal that would be watched does not fire for alpha-only edits.
43
- */
44
- export class DecalSystem3 extends System {
45
- dependencies = [Decal, Transform];
46
-
47
- /**
48
- * @type {GraphicsEngine3}
49
- */
50
- #graphics;
51
-
52
- /**
53
- * @type {AssetManager}
54
- */
55
- #assets;
56
-
57
- /**
58
- * @type {GPUDecalRenderer}
59
- */
60
- #renderer = new GPUDecalRenderer();
61
-
62
- /**
63
- * Three atlases, because their contents want different mip filters and different border fills —
64
- * and because albedo is sRGB while the other two are not.
65
- *
66
- * @type {DecalAtlas}
67
- */
68
- #atlas_albedo = new DecalAtlas(DecalAtlasFill.PremultipliedCoverage);
69
-
70
- /**
71
- * @type {DecalAtlas}
72
- */
73
- #atlas_normal = new DecalAtlas(DecalAtlasFill.EdgeExtend);
74
-
75
- /**
76
- * @type {DecalAtlas}
77
- */
78
- #atlas_orm = new DecalAtlas(DecalAtlasFill.EdgeExtend);
79
-
80
- /**
81
- * @type {ReferencedTextureAtlas}
82
- */
83
- #referenced_albedo = new ReferencedTextureAtlas(this.#atlas_albedo);
84
-
85
- /**
86
- * @type {ReferencedTextureAtlas}
87
- */
88
- #referenced_normal = new ReferencedTextureAtlas(this.#atlas_normal);
89
-
90
- /**
91
- * @type {ReferencedTextureAtlas}
92
- */
93
- #referenced_orm = new ReferencedTextureAtlas(this.#atlas_orm);
94
-
95
- /**
96
- * What every decal authoring no maps of its own shares. One patch each, packed once.
97
- *
98
- * @type {Sampler2D}
99
- */
100
- #identity_normal = decal_identity_normal();
101
-
102
- /**
103
- * @type {Sampler2D}
104
- */
105
- #identity_orm = decal_identity_orm();
106
-
107
- /**
108
- * @type {LoadingCache<string, Sampler2D>}
109
- */
110
- #textures;
111
-
112
- /**
113
- * The decals to draw, in link order until {@link update} sorts them into draw order.
114
- *
115
- * @type {Array<{entity: number, decal: Decal, transform: Transform, patches: object, listener: Function}>}
116
- */
117
- #entries = [];
118
-
119
- /**
120
- * @type {Map<number, object>}
121
- */
122
- #by_entity = new Map();
123
-
124
- /**
125
- * @type {Float32Array}
126
- */
127
- #records = new Float32Array(0);
128
-
129
- /**
130
- * @type {number}
131
- */
132
- #record_count = 0;
133
-
134
- /**
135
- * @type {RenderExtension|null}
136
- */
137
- #extension = null;
138
-
139
- /**
140
- * What the pass draws. Read-only — the decals follow the entities.
141
- *
142
- * @returns {Array}
143
- */
144
- get decals() {
145
- return this.#entries;
146
- }
147
-
148
- /**
149
- * @returns {number} decals packed for the GPU by the last update
150
- */
151
- get record_count() {
152
- return this.#record_count;
153
- }
154
-
155
- /**
156
- * What was packed, for a gate that wants to see it. Read-only.
157
- *
158
- * @returns {Float32Array}
159
- */
160
- get records() {
161
- return this.#records;
162
- }
163
-
164
- /**
165
- * @param {GraphicsEngine3} graphics
166
- * @param {AssetManager} assets
167
- */
168
- constructor(graphics, assets) {
169
- super();
170
-
171
- assert.defined(graphics, 'graphics');
172
- assert.defined(assets, 'assets');
173
-
174
- this.#graphics = graphics;
175
- this.#assets = assets;
176
-
177
- this.#textures = new LoadingCache({
178
- load: key => this.#assets.promise(key, GameAssetType.Image)
179
- .then(asset => sampler2d_ensure_uint8_RGBA(asset.create())),
180
- keyHashFunction: computeStringHash,
181
- keyEqualityFunction: strictEquals
182
- });
183
- }
184
-
185
- async startup(entityManager) {
186
- this.entityManager = entityManager;
187
-
188
- const assets = this.#assets;
189
-
190
- if (!assets.hasLoaderForType(GameAssetType.Image)) {
191
- await assets.registerLoader(GameAssetType.Image, new ImageRGBADataLoader());
192
- }
193
-
194
- this.#extension = this.#graphics.add_extension(new DecalExtension(this));
195
- }
196
-
197
- async shutdown(entityManager) {
198
- if (this.#extension !== null) {
199
- this.#graphics.remove_extension(this.#extension);
200
-
201
- this.#extension = null;
202
- }
203
-
204
- this.#renderer.destroy();
205
-
206
- this.#entries.length = 0;
207
- this.#by_entity.clear();
208
- this.#record_count = 0;
209
- }
210
-
211
- /**
212
- * @param {Decal} decal
213
- * @param {Transform} transform
214
- * @param {number} entity
215
- */
216
- link(decal, transform, entity) {
217
- const entry = {
218
- entity,
219
- decal,
220
- transform,
221
- /**
222
- * Atlas patches, acquired as the textures arrive. A decal whose albedo has not loaded
223
- * yet is not packed at all — there is nothing to draw with, and drawing it with the
224
- * identity patch would put a white square on the ground until the image landed.
225
- */
226
- patches: { albedo: null, normal: null, orm: null }
227
- };
228
-
229
- this.#entries.push(entry);
230
- this.#by_entity.set(entity, entry);
231
-
232
- this.#acquire(entry);
233
- }
234
-
235
- /**
236
- * @param {Decal} decal
237
- * @param {Transform} transform
238
- * @param {number} entity
239
- */
240
- unlink(decal, transform, entity) {
241
- const entry = this.#by_entity.get(entity);
242
-
243
- if (entry === undefined) {
244
- return;
245
- }
246
-
247
- this.#release(entry);
248
-
249
- const index = this.#entries.indexOf(entry);
250
-
251
- if (index !== -1) {
252
- this.#entries.splice(index, 1);
253
- }
254
-
255
- this.#by_entity.delete(entity);
256
- }
257
-
258
- /**
259
- * @param {object} entry
260
- */
261
- #release(entry) {
262
- const patches = entry.patches;
263
-
264
- if (patches.albedo !== null) {
265
- patches.albedo.release();
266
- patches.albedo = null;
267
- }
268
-
269
- if (patches.normal !== null) {
270
- patches.normal.release();
271
- patches.normal = null;
272
- }
273
-
274
- if (patches.orm !== null) {
275
- patches.orm.release();
276
- patches.orm = null;
277
- }
278
- }
279
-
280
- /**
281
- * Fetch this decal's textures and take a reference on the atlas patch each lands in.
282
- *
283
- * Reference counted, because combat spawns a footprint decal per step and every one of them
284
- * names the same file: packing a patch per footprint would repack three atlases and regenerate
285
- * their mip chains several times a second.
286
- *
287
- * @param {object} entry
288
- */
289
- #acquire(entry) {
290
- const decal = entry.decal;
291
-
292
- const albedo_uri = decal.albedo_uri;
293
-
294
- if (albedo_uri === "") {
295
- return;
296
- }
297
-
298
- this.#textures.get(albedo_uri).then(sampler => {
299
- if (this.#by_entity.get(entry.entity) !== entry) {
300
- // unlinked while the image was in flight
301
- return;
302
- }
303
-
304
- entry.patches.albedo = this.#referenced_albedo.acquire(sampler);
305
- });
306
-
307
- if (decal.uri_normal === "") {
308
- entry.patches.normal = this.#referenced_normal.acquire(this.#identity_normal);
309
- } else {
310
- this.#textures.get(decal.uri_normal).then(sampler => {
311
- if (this.#by_entity.get(entry.entity) !== entry) {
312
- return;
313
- }
314
-
315
- entry.patches.normal = this.#referenced_normal.acquire(sampler);
316
- });
317
- }
318
-
319
- if (decal.uri_orm === "" && decal.uri_emissive === "") {
320
- entry.patches.orm = this.#referenced_orm.acquire(this.#identity_orm);
321
-
322
- return;
323
- }
324
-
325
- Promise.all([
326
- decal.uri_orm === "" ? null : this.#textures.get(decal.uri_orm),
327
- decal.uri_emissive === "" ? null : this.#textures.get(decal.uri_emissive)
328
- ]).then(([orm, emissive]) => {
329
- if (this.#by_entity.get(entry.entity) !== entry) {
330
- return;
331
- }
332
-
333
- entry.patches.orm = this.#referenced_orm.acquire(decal_pack_orm(orm, emissive));
334
- });
335
- }
336
-
337
- update(timeDelta) {
338
- const entries = this.#entries;
339
-
340
- sort_decals_by_priority(entries);
341
-
342
- this.#atlas_albedo.update();
343
- this.#atlas_normal.update();
344
- this.#atlas_orm.update();
345
-
346
- const required = entries.length * DECAL_RECORD_WORD_COUNT;
347
-
348
- if (this.#records.length < required) {
349
- this.#records = new Float32Array(required);
350
- }
351
-
352
- const records = this.#records;
353
-
354
- let count = 0;
355
-
356
- for (let i = 0; i < entries.length; i++) {
357
- const entry = entries[i];
358
- const patches = entry.patches;
359
-
360
- if (patches.albedo === null || patches.normal === null || patches.orm === null) {
361
- // still waiting on an image; a decal is packed once it can be drawn properly
362
- continue;
363
- }
364
-
365
- const albedo = patches.albedo.getValue();
366
- const normal = patches.normal.getValue();
367
- const orm = patches.orm.getValue();
368
-
369
- write_decal_record(
370
- records,
371
- count * DECAL_RECORD_WORD_COUNT,
372
- entry.decal,
373
- entry.transform.matrix,
374
- { albedo: albedo.uv, normal: normal.uv, orm: orm.uv },
375
- {
376
- albedo: decal_atlas_max_lod(albedo.padding),
377
- normal: decal_atlas_max_lod(normal.padding),
378
- orm: decal_atlas_max_lod(orm.padding)
379
- }
380
- );
381
-
382
- count++;
383
- }
384
-
385
- this.#record_count = count;
386
- }
387
-
388
- /**
389
- * @param {FrameContext} frame
390
- */
391
- record(frame) {
392
- if (this.#record_count === 0) {
393
- /*
394
- Nothing to paint, so the frame keeps the G-buffer it already had. Skipping is what makes
395
- the replacement design free when no decal is on screen — the pass reads and rewrites
396
- every pixel when it runs.
397
- */
398
- return;
399
- }
400
-
401
- this.#renderer.graph_draw({
402
- frame,
403
- records: this.#records,
404
- record_count: this.#record_count,
405
- atlas_albedo: this.#atlas_albedo.sampler,
406
- atlas_normal: this.#atlas_normal.sampler,
407
- atlas_orm: this.#atlas_orm.sampler
408
- });
409
- }
410
- }
411
-
412
- /**
413
- * **After the terrain**, because the decal composite has to see the textured ground rather than
414
- * precede it. That requirement used to be met by putting a registration call above an `await` and
415
- * writing a comment about it; here it is the declaration below.
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.
416
9
  */
417
- export class DecalExtension extends RenderExtension {
418
- name = "decals";
419
-
420
- phase = FramePhase.AfterGBuffer;
421
-
422
- after = [TerrainExtension];
423
-
424
- /**
425
- * @type {DecalSystem3}
426
- */
427
- #system;
428
-
429
- /**
430
- * @param {DecalSystem3} system
431
- */
432
- constructor(system) {
433
- super();
434
-
435
- this.#system = system;
436
- }
437
-
438
- record(frame) {
439
- this.#system.record(frame);
440
- }
441
- }
10
+ export const DecalSystem3 = DecalSystem;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Draws the level's fog of war under Shade.
3
+ *
4
+ * **The mask stays where it was.** `FogOfWar` owns a CPU `Sampler2D` and a distance field, and every
5
+ * gameplay query — what a unit can see, what the AI may know, whether an entity is drawn at all —
6
+ * reads them. None of that moves to the GPU; the renderer is handed the same array, as a texture.
7
+ *
8
+ * **The composite is a pass at {@link FramePhase.AfterTransparency}.** That is the last phase where
9
+ * the frame's colour and its depth are the same size — after it the image is upscaled to the output
10
+ * resolution while the depth buffer stays at the internal one — and the fog is a screen-space read
11
+ * of depth, so the two have to agree texel for texel. It also puts the fog inside the tonemapper
12
+ * rather than over it, which is what the phase is for.
13
+ */
14
+ export class FogOfWarSystem extends System<any> {
15
+ /**
16
+ * @param {GraphicsEngine} graphics
17
+ */
18
+ constructor(graphics: GraphicsEngine);
19
+ dependencies: (typeof Terrain | typeof FogOfWar)[];
20
+ /**
21
+ * What the pass draws. Read-only — the fields follow the entities.
22
+ *
23
+ * @returns {FogField[]}
24
+ */
25
+ get fields(): FogField[];
26
+ startup(entityManager: any): Promise<void>;
27
+ shutdown(entityManager: any): Promise<void>;
28
+ /**
29
+ * @param {FrameContext} frame
30
+ */
31
+ record(frame: FrameContext): void;
32
+ /**
33
+ * @param {FogOfWar} fow
34
+ * @param {Terrain} terrain
35
+ * @param {number} entity
36
+ */
37
+ link(fow: FogOfWar, terrain: Terrain, entity: number): void;
38
+ /**
39
+ * @param {FogOfWar} fow
40
+ * @param {Terrain} terrain
41
+ * @param {number} entity
42
+ */
43
+ unlink(fow: FogOfWar, terrain: Terrain, entity: number): void;
44
+ update(timeDelta: any): void;
45
+ #private;
46
+ }
47
+ /**
48
+ * **Last among the content extensions**, because the fog conceals and therefore belongs over
49
+ * everything it is meant to conceal — particles, trails, the path display and the selection
50
+ * highlight all draw before it and are all subject to it. Written down here rather than being a
51
+ * property of where a registration call happened to sit, which is how it came to be wrong.
52
+ *
53
+ * The declaration is stated from this side, over the content extensions, so that adding another one
54
+ * is a change to that extension and not to this list. {@link DebugDrawExtension} is the one thing
55
+ * that goes after the fog, and it says so itself.
56
+ */
57
+ export class FogOfWarExtension extends RenderExtension {
58
+ /**
59
+ * @param {FogOfWarSystem} system
60
+ */
61
+ constructor(system: FogOfWarSystem);
62
+ after: (typeof HighlightExtension | typeof ParticleExtension | typeof PathDisplayExtension | typeof TrailExtension)[];
63
+ record(frame: any): void;
64
+ #private;
65
+ }
66
+ import { System } from "../ecs/System.js";
67
+ import Terrain from "../ecs/terrain/ecs/Terrain.js";
68
+ import { FogOfWar } from "../ecs/fow/FogOfWar.js";
69
+ import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
70
+ import { HighlightExtension } from "./HighlightSystem.js";
71
+ import { ParticleExtension } from "./ParticleEmitterSystem.js";
72
+ import { PathDisplayExtension } from "./PathDisplaySystem.js";
73
+ import { TrailExtension } from "./Trail3DSystem.js";
74
+ //# sourceMappingURL=FogOfWarSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FogOfWarSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/FogOfWarSystem.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;GAYG;AACH;IAwCI;;OAEG;IACH,sCAMC;IAhDD,mDAAmC;IA8BnC;;;;OAIG;IACH,yBAEC;IAaD,2CAIC;IAED,4CAeC;IAED;;OAEG;IACH,kCAwBC;IAED;;;;OAIG;IACH,UAJW,QAAQ,WACR,OAAO,UACP,MAAM,QA8BhB;IAED;;;;OAIG;IACH,YAJW,QAAQ,WACR,OAAO,UACP,MAAM,QAkBhB;IAED,6BASC;;CA4BJ;AAED;;;;;;;;;GASG;AACH;IAYI;;OAEG;IACH,oBAFW,cAAc,EAMxB;IAdD,sHAAsF;IAgBtF,yBAEC;;CACJ;uBAzPsB,kBAAkB;oBADrB,+BAA+B;yBAH1B,wBAAwB;gCAHjB,mDAAmD;mCALhD,sBAAsB;kCACvB,4BAA4B;qCACzB,wBAAwB;+BAC9B,oBAAoB"}