@woosh/meep-engine 3.14.0 → 3.14.2

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 (220) hide show
  1. package/README.md +33 -64
  2. package/package.json +1 -1
  3. package/src/avif/native/DECISIONS.md +544 -536
  4. package/src/avif/native/heif/parse_avif_file.d.ts.map +1 -1
  5. package/src/avif/native/heif/parse_avif_file.js +384 -383
  6. package/src/avif/native/heif/parse_image_grid.d.ts.map +1 -1
  7. package/src/avif/native/heif/parse_image_grid.js +49 -48
  8. package/src/basis/BasisBitReader.d.ts +77 -0
  9. package/src/basis/BasisBitReader.d.ts.map +1 -0
  10. package/src/basis/BasisBitReader.js +231 -0
  11. package/src/basis/BasisHuffmanTable.d.ts +53 -0
  12. package/src/basis/BasisHuffmanTable.d.ts.map +1 -0
  13. package/src/basis/BasisHuffmanTable.js +263 -0
  14. package/src/basis/basis_read_huffman_table.d.ts +20 -0
  15. package/src/basis/basis_read_huffman_table.d.ts.map +1 -0
  16. package/src/basis/basis_read_huffman_table.js +187 -0
  17. package/src/basis/etc1s/Etc1sSelectorHistory.d.ts +50 -0
  18. package/src/basis/etc1s/Etc1sSelectorHistory.d.ts.map +1 -0
  19. package/src/basis/etc1s/Etc1sSelectorHistory.js +89 -0
  20. package/src/basis/etc1s/etc1s_block_colors.d.ts +14 -0
  21. package/src/basis/etc1s/etc1s_block_colors.d.ts.map +1 -0
  22. package/src/basis/etc1s/etc1s_block_colors.js +75 -0
  23. package/src/basis/etc1s/etc1s_decode_slice.d.ts +57 -0
  24. package/src/basis/etc1s/etc1s_decode_slice.d.ts.map +1 -0
  25. package/src/basis/etc1s/etc1s_decode_slice.js +258 -0
  26. package/src/basis/etc1s/etc1s_read_endpoint_codebook.d.ts +48 -0
  27. package/src/basis/etc1s/etc1s_read_endpoint_codebook.d.ts.map +1 -0
  28. package/src/basis/etc1s/etc1s_read_endpoint_codebook.js +111 -0
  29. package/src/basis/etc1s/etc1s_read_selector_codebook.d.ts +42 -0
  30. package/src/basis/etc1s/etc1s_read_selector_codebook.d.ts.map +1 -0
  31. package/src/basis/etc1s/etc1s_read_selector_codebook.js +127 -0
  32. package/src/basis/etc1s/etc1s_read_slice_tables.d.ts +54 -0
  33. package/src/basis/etc1s/etc1s_read_slice_tables.d.ts.map +1 -0
  34. package/src/basis/etc1s/etc1s_read_slice_tables.js +47 -0
  35. package/src/basis/transcode/build_range_plan.js +54 -0
  36. package/src/basis/transcode/etc1s_to_bc1.d.ts +24 -0
  37. package/src/basis/transcode/etc1s_to_bc1.d.ts.map +1 -0
  38. package/src/basis/transcode/etc1s_to_bc1.js +205 -0
  39. package/src/basis/transcode/etc1s_to_bc7.d.ts +30 -0
  40. package/src/basis/transcode/etc1s_to_bc7.d.ts.map +1 -0
  41. package/src/basis/transcode/etc1s_to_bc7.js +496 -0
  42. package/src/basis/transcode/fit_endpoints.d.ts +59 -0
  43. package/src/basis/transcode/fit_endpoints.d.ts.map +1 -0
  44. package/src/basis/transcode/fit_endpoints.js +226 -0
  45. package/src/{avif/native/isobmff → core/binary}/ByteCursor.d.ts +19 -6
  46. package/src/core/binary/ByteCursor.d.ts.map +1 -0
  47. package/src/{avif/native/isobmff → core/binary}/ByteCursor.js +41 -14
  48. package/src/engine/EngineHarness.js +1 -1
  49. package/src/engine/asset/codec/Codec.d.ts.map +1 -0
  50. package/src/engine/asset/codec/CodecWithFallback.d.ts.map +1 -0
  51. package/src/engine/asset/{loaders/image/codec → codec}/CodecWithFallback.js +2 -2
  52. package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +4 -4
  53. package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts +1 -1
  54. package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts.map +1 -1
  55. package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +1 -1
  56. package/src/engine/asset/loaders/image/codec/NativeImageDecoder.d.ts +1 -1
  57. package/src/engine/asset/loaders/image/codec/NativeImageDecoder.d.ts.map +1 -1
  58. package/src/engine/asset/loaders/image/codec/NativeImageDecoder.js +1 -1
  59. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts +1 -1
  60. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts.map +1 -1
  61. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.js +1 -1
  62. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  63. package/src/engine/graphics/texture/atlas/TextureAtlas.js +13 -0
  64. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
  65. package/src/engine/physics/broadphase/generate_pairs.js +7 -1
  66. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  67. package/src/ktx2/KTX2_IDENTIFIER.d.ts +14 -0
  68. package/src/ktx2/KTX2_IDENTIFIER.d.ts.map +1 -0
  69. package/src/ktx2/KTX2_IDENTIFIER.js +15 -0
  70. package/src/ktx2/KhrDfModel.d.ts +35 -0
  71. package/src/ktx2/KhrDfModel.d.ts.map +1 -0
  72. package/src/ktx2/KhrDfModel.js +49 -0
  73. package/src/ktx2/SupercompressionScheme.d.ts +16 -0
  74. package/src/ktx2/SupercompressionScheme.d.ts.map +1 -0
  75. package/src/ktx2/SupercompressionScheme.js +23 -0
  76. package/src/ktx2/ktx2_read.d.ts +71 -0
  77. package/src/ktx2/ktx2_read.d.ts.map +1 -0
  78. package/src/ktx2/ktx2_read.js +581 -0
  79. package/src/ktx2/ktx2_read_basis_lz_global_data.d.ts +27 -0
  80. package/src/ktx2/ktx2_read_basis_lz_global_data.d.ts.map +1 -0
  81. package/src/ktx2/ktx2_read_basis_lz_global_data.js +189 -0
  82. package/src/ktx2/vk_format_to_texture_format.d.ts +55 -0
  83. package/src/ktx2/vk_format_to_texture_format.d.ts.map +1 -0
  84. package/src/ktx2/vk_format_to_texture_format.js +290 -0
  85. package/src/shade/descriptor/GPUTextureUsage.d.ts +23 -0
  86. package/src/shade/descriptor/GPUTextureUsage.d.ts.map +1 -0
  87. package/src/shade/descriptor/GPUTextureUsage.js +24 -0
  88. package/src/shade/descriptor/WebGPUExtensionType.d.ts +3 -0
  89. package/src/shade/descriptor/WebGPUExtensionType.js +26 -0
  90. package/src/shade/descriptor/texture/TextureDescriptor.d.ts +2 -6
  91. package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
  92. package/src/shade/descriptor/texture/TextureDescriptor.js +24 -40
  93. package/src/shade/descriptor/texture/format/TextureFormat.d.ts +125 -0
  94. package/src/shade/descriptor/texture/format/TextureFormat.d.ts.map +1 -0
  95. package/src/shade/descriptor/texture/format/TextureFormat.js +146 -0
  96. package/src/shade/descriptor/texture/format/gpu_texture_format_info.d.ts +60 -0
  97. package/src/shade/descriptor/texture/format/gpu_texture_format_info.d.ts.map +1 -1
  98. package/src/shade/descriptor/texture/format/gpu_texture_format_info.js +102 -0
  99. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  100. package/src/shade/device/graph/TextureResourceDescriptor.js +160 -155
  101. package/src/shade/device/mock/SoftwareGPUQueue.d.ts +11 -4
  102. package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
  103. package/src/shade/device/mock/SoftwareGPUQueue.js +31 -37
  104. package/src/shade/device/mock/SoftwareGPUTexture.d.ts.map +1 -1
  105. package/src/shade/device/mock/SoftwareGPUTexture.js +8 -4
  106. package/src/shade/device/timing/profile/frame_graph_extract_topology.d.ts.map +1 -1
  107. package/src/shade/device/timing/profile/frame_graph_extract_topology.js +164 -174
  108. package/src/shade/playground/ground_seam/README.md +235 -0
  109. package/src/shade/playground/ground_seam/capture_scene_color.d.ts +45 -0
  110. package/src/shade/playground/ground_seam/capture_scene_color.d.ts.map +1 -0
  111. package/src/shade/playground/ground_seam/capture_scene_color.js +242 -0
  112. package/src/shade/playground/ground_seam/depth_step_across_seam.d.ts +11 -0
  113. package/src/shade/playground/ground_seam/depth_step_across_seam.d.ts.map +1 -0
  114. package/src/shade/playground/ground_seam/depth_step_across_seam.js +185 -0
  115. package/src/shade/playground/ground_seam/index.html +195 -0
  116. package/src/shade/playground/ground_seam/main.d.ts +2 -0
  117. package/src/shade/playground/ground_seam/main.d.ts.map +1 -0
  118. package/src/shade/playground/ground_seam/main.js +879 -0
  119. package/src/shade/playground/ground_seam/make_grid_texture.d.ts +29 -0
  120. package/src/shade/playground/ground_seam/make_grid_texture.d.ts.map +1 -0
  121. package/src/shade/playground/ground_seam/make_grid_texture.js +105 -0
  122. package/src/shade/playground/ground_seam/make_ground.d.ts +70 -0
  123. package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -0
  124. package/src/shade/playground/ground_seam/make_ground.js +161 -0
  125. package/src/shade/playground/ground_seam/measure_flicker.d.ts +71 -0
  126. package/src/shade/playground/ground_seam/measure_flicker.d.ts.map +1 -0
  127. package/src/shade/playground/ground_seam/measure_flicker.js +531 -0
  128. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  129. package/src/shade/renderer/Renderer.js +2519 -2511
  130. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +275 -274
  132. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  133. package/src/shade/renderer/light/GPULightCollection.js +323 -314
  134. package/src/shade/renderer/lightmap/GPULightMap.js +336 -336
  135. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  136. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +12 -2
  137. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  138. package/src/shade/renderer/material/standard/fragment_gbuffer.js +3 -1
  139. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  140. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  141. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +3 -1
  142. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  143. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
  144. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.js +3 -1
  145. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
  146. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.js +3 -1
  147. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_tangent_normal.d.ts +28 -0
  148. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_tangent_normal.d.ts.map +1 -0
  149. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_tangent_normal.js +39 -0
  150. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_full.d.ts +45 -0
  151. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_full.d.ts.map +1 -1
  152. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_full.js +94 -61
  153. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_solve.d.ts +24 -0
  154. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_solve.d.ts.map +1 -0
  155. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_solve.js +43 -0
  156. package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +1462 -0
  157. package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
  158. package/src/shade/renderer/texture/TextureManager.js +20 -8
  159. package/src/shade/renderer/texture/TextureRole.d.ts +19 -0
  160. package/src/shade/renderer/texture/TextureRole.d.ts.map +1 -0
  161. package/src/shade/renderer/texture/TextureRole.js +26 -0
  162. package/src/shade/renderer/texture/TextureVariantSet.d.ts +71 -0
  163. package/src/shade/renderer/texture/TextureVariantSet.d.ts.map +1 -0
  164. package/src/shade/renderer/texture/TextureVariantSet.js +105 -0
  165. package/src/shade/renderer/texture/download_texture_data.d.ts.map +1 -1
  166. package/src/shade/renderer/texture/download_texture_data.js +22 -0
  167. package/src/shade/renderer/texture/format/gpu_texture_compression_support.d.ts +15 -0
  168. package/src/shade/renderer/texture/format/gpu_texture_compression_support.d.ts.map +1 -0
  169. package/src/shade/renderer/texture/format/gpu_texture_compression_support.js +50 -0
  170. package/src/shade/renderer/texture/format/gpu_texture_format_can_generate_mipmaps.d.ts +27 -0
  171. package/src/shade/renderer/texture/format/gpu_texture_format_can_generate_mipmaps.d.ts.map +1 -0
  172. package/src/shade/renderer/texture/format/gpu_texture_format_can_generate_mipmaps.js +65 -0
  173. package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts +11 -0
  174. package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -0
  175. package/src/shade/renderer/texture/format/infer_format_from_parameters.js +88 -0
  176. package/src/shade/renderer/texture/format/texture_format_from_shade_image.d.ts +24 -0
  177. package/src/shade/renderer/texture/format/texture_format_from_shade_image.d.ts.map +1 -0
  178. package/src/shade/renderer/texture/format/texture_format_from_shade_image.js +71 -0
  179. package/src/shade/renderer/texture/format/texture_format_preference.d.ts +22 -0
  180. package/src/shade/renderer/texture/format/texture_format_preference.d.ts.map +1 -0
  181. package/src/shade/renderer/texture/format/texture_format_preference.js +89 -0
  182. package/src/shade/renderer/texture/format/texture_variant_select.d.ts +24 -0
  183. package/src/shade/renderer/texture/format/texture_variant_select.d.ts.map +1 -0
  184. package/src/shade/renderer/texture/format/texture_variant_select.js +38 -0
  185. package/src/shade/renderer/texture/shade_texture_might_have_alpha.d.ts +9 -1
  186. package/src/shade/renderer/texture/shade_texture_might_have_alpha.d.ts.map +1 -1
  187. package/src/shade/renderer/texture/shade_texture_might_have_alpha.js +73 -8
  188. package/src/shade/renderer/texture/source/AlphaMode.d.ts +27 -0
  189. package/src/shade/renderer/texture/source/AlphaMode.d.ts.map +1 -0
  190. package/src/shade/renderer/texture/source/AlphaMode.js +52 -0
  191. package/src/shade/renderer/texture/source/ShadeImage.d.ts +33 -0
  192. package/src/shade/renderer/texture/source/ShadeImage.d.ts.map +1 -1
  193. package/src/shade/renderer/texture/source/ShadeImage.js +74 -0
  194. package/src/shade/renderer/texture/source/ShadeTexelData.d.ts +78 -0
  195. package/src/shade/renderer/texture/source/ShadeTexelData.d.ts.map +1 -0
  196. package/src/shade/renderer/texture/source/ShadeTexelData.js +158 -0
  197. package/src/shade/renderer/texture/texture_descriptor_from_texture_shade.d.ts +0 -10
  198. package/src/shade/renderer/texture/texture_descriptor_from_texture_shade.d.ts.map +1 -1
  199. package/src/shade/renderer/texture/texture_descriptor_from_texture_shade.js +73 -175
  200. package/src/shade/renderer/texture/texture_write_level.d.ts +32 -0
  201. package/src/shade/renderer/texture/texture_write_level.d.ts.map +1 -0
  202. package/src/shade/renderer/texture/texture_write_level.js +77 -0
  203. package/src/shade/renderer/texture/texture_write_to_gpu.d.ts +8 -1
  204. package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
  205. package/src/shade/renderer/texture/texture_write_to_gpu.js +62 -37
  206. package/src/shade/renderer/texture/virtual/source/VTSourceImage.d.ts +8 -0
  207. package/src/shade/renderer/texture/virtual/source/VTSourceImage.d.ts.map +1 -1
  208. package/src/shade/renderer/texture/virtual/source/VTSourceImage.js +8 -0
  209. package/src/shade/util/texture_mip_extent.d.ts +49 -0
  210. package/src/shade/util/texture_mip_extent.d.ts.map +1 -0
  211. package/src/shade/util/texture_mip_extent.js +87 -0
  212. package/src/avif/native/isobmff/ByteCursor.d.ts.map +0 -1
  213. package/src/engine/asset/loaders/image/codec/Codec.d.ts.map +0 -1
  214. package/src/engine/asset/loaders/image/codec/CodecWithFallback.d.ts.map +0 -1
  215. package/src/shade/util/compute_max_mip_count.d.ts +0 -8
  216. package/src/shade/util/compute_max_mip_count.d.ts.map +0 -1
  217. package/src/shade/util/compute_max_mip_count.js +0 -27
  218. /package/src/engine/asset/{loaders/image/codec → codec}/Codec.d.ts +0 -0
  219. /package/src/engine/asset/{loaders/image/codec → codec}/Codec.js +0 -0
  220. /package/src/engine/asset/{loaders/image/codec → codec}/CodecWithFallback.d.ts +0 -0
package/README.md CHANGED
@@ -31,21 +31,8 @@ tiers to author, no per-device profiles, no exposure value to pick, no shadow ca
31
31
  hand-tune. You put a scene together, it looks right, and it holds its frame rate across a wide
32
32
  range of hardware without you doing anything about it.
33
33
 
34
- <!--
35
- PLACEHOLDER - two claims were removed from the opening because nothing in the repository
36
- supports them. Both may be true; neither is verifiable from source. Restore with specifics.
37
-
38
- 1. "shipped in commercial Steam releases" - needs the titles. Verified 2026-09-01: zero Steam app
39
- IDs, zero steamworks/steam_api references, zero named shipped products anywhere in the tree.
40
- The only game the repo names is the codename "mir", whose own README says it is unpublished.
41
- Every other occurrence of "Steam" is Steam Audio cited as a design reference. Naming even one
42
- title is worth more than the generic sentence was.
43
-
44
- 2. "Built over 10+ years" - git history runs 2020-04-19 to 2026-09-01 (6y4m, 7,652 commits), with
45
- no earlier commit by author or committer date. If the 10 years predates this repository, say
46
- so; otherwise "in development since 2020" is defensible as written.
47
- -->
48
-
34
+ In development since 2013, shipped in a commercial Steam release, and held to **~15,000 tests** -
35
+ determinism, adversarial and shader-emulation suites among them.
49
36
 
50
37
  ---
51
38
 
@@ -77,8 +64,9 @@ type names come from.
77
64
  extend the frame by declaring where your work goes, not by patching the renderer.
78
65
 
79
66
  If you want the mechanisms behind these - visibility buffer, meshlet clustering, clustered lighting,
80
- occlusion culling, the frame graph - they are in **[the renderer contract](src/shade/RENDERER_CONTRACT.md)**,
81
- which also covers how to put a model on the screen and how to add your own work to the frame.
67
+ occlusion culling, the frame graph - they are in **the renderer contract**, which ships in the
68
+ package at `src/shade/RENDERER_CONTRACT.md`. It also covers how to put a model on the screen and
69
+ how to add your own work to the frame.
82
70
 
83
71
  ## How the features interact
84
72
 
@@ -140,8 +128,8 @@ Two things to know. Anti-aliasing is the only thing that upscales, so switching
140
128
  resolution scale is below full leaves the frame un-upscaled. And if you drive the `Renderer`
141
129
  directly rather than through `Engine`, none of this is wired for you.
142
130
 
143
- A neural upscaler ships alongside the default one - a port of ARM's Neural Super Sampling, weights
144
- included, no setup needed - one assignment away at `renderer.upscale_type = ShadeUpscalerType.NSS`.
131
+ A neural network-based upscaler ships alongside the default one, weights included and no setup
132
+ needed - one assignment away at `renderer.upscale_type = ShadeUpscalerType.NSS`.
145
133
 
146
134
  ## Correct by default
147
135
 
@@ -182,7 +170,11 @@ targets WebGPU, and everything above follows from that.
182
170
  The floor is fixed and checked before anything is created: WebGPU plus a small set of capabilities
183
171
  that mainstream desktop GPUs have had for years. Hardware that does not clear it gets a clear
184
172
  failure message written to be shown to a person, rather than a degraded picture. The exact features
185
- and limits are in [§2 of the contract](src/shade/RENDERER_CONTRACT.md).
173
+ and limits are in §2 of `src/shade/RENDERER_CONTRACT.md`.
174
+
175
+ To see what a given browser and GPU actually report, open
176
+ **[webgpu.report](https://webgpu.report/)** on the machine in question - it lists the adapter's
177
+ features and limits, which is what the floor is checked against.
186
178
 
187
179
  ## Numbers
188
180
 
@@ -195,30 +187,7 @@ The renderer records `.sgpt` GPU profile captures - per-pass timings, and at hig
195
187
  the frame-graph structure, dispatch and draw counts. Assign a
196
188
  `GPUProfileSession({ level: GPUProfileLevel.WORKLOAD })` to `renderer.profile_session`, call
197
189
  `start()`, run frames, and `stop()` returns an `ArrayBuffer` to write out. The recorder and the
198
- [format specification](src/shade/device/timing/profile/SGPT_FORMAT.md) both ship in this package.
199
-
200
- <!--
201
- BENCHMARK TABLE - do not fill from memory or estimate. Needs a real measured run.
202
- Verified 2026-09-01: no end-to-end renderer frame-time measurement exists anywhere in this
203
- repository, and no measurement against three.js / PlayCanvas / Unity / Babylon exists in any form.
204
- Do not write "several times faster than three.js" until there is a reproducible run behind it.
205
-
206
- | Scene | Hardware | Resolution | Frame time | Draw calls | Triangles | Lights |
207
- |---|---|---|---|---|---|---|
208
- | | | | | | | |
209
-
210
- To fill this, the following must be measured and recorded:
211
- 1. A PUBLIC scene. None currently exists - all four playground entry points are dev-server-only
212
- and three need assets from the gitignored, unpublished `test_assets/`. Publishing one scene
213
- the reader can open is a prerequisite for every row of this table.
214
- 2. Whole-frame time at a named resolution on a NAMED GPU (not "4070-class"), with the swap chain
215
- confirmed not to be the limiter - volumetrics_froxel/README.md:83 records 1080p reading a flat
216
- ~16.5 ms under presentation throttling, which is what makes its 28 ms figure at :189 unusable.
217
- 3. Draw-call and triangle counts from the same run - both are already in an .sgpt capture.
218
- 4. The same scene at two or three resolutions, to show the dynamic-resolution curve.
219
- 5. Optional and unusually strong: publish the .sgpt capture itself alongside the numbers.
220
- The writer already ships; the viewer needs deploying (it is currently `"private": true`).
221
- -->
190
+ format specification (`src/shade/device/timing/profile/SGPT_FORMAT.md`) both ship in this package.
222
191
 
223
192
  ---
224
193
 
@@ -233,39 +202,39 @@ The rest of what a game needs, in the same package. Each links out to its own do
233
202
  with the determinism covered by replay tests - which is what lets it sit under rollback netcode.
234
203
  Convex and mesh collision, continuous collision detection for fast movers, and bodies that stop
235
204
  costing anything once they settle. A raycast vehicle, a character controller that handles stairs
236
- and slopes, and inverse kinematics. [Fluid simulation](src/engine/physics/mls-mpm/README.md) is
205
+ and slopes, and inverse kinematics. [Fluid simulation](https://meep.company-named.com/docs/physics/fluid/) is
237
206
  separate and can run off the main thread.
238
207
  * **Audio.** The Wwise/FMOD feature set without the middleware: events, a mixer bus tree, real-time
239
208
  parameters, voice stealing, snapshots and ducking, all authored as engine data you can serialize.
240
- Opt-in [acoustic simulation](src/engine/sound/simulation/README.md) adds occlusion, transmission
209
+ Opt-in [acoustic simulation](https://meep.company-named.com/docs/audio/overview/) adds occlusion, transmission
241
210
  and reverb driven by the scene's own geometry.
242
- * **[Networking](src/engine/network/README.md).** Server-authoritative rollback: client-side
243
- prediction, reconciliation, and binary snapshots. Transports for WebRTC, WebTransport, WebSocket
244
- and Node UDP, plus loopback and deliberately lossy ones for tests. Bandwidth metering, packet
245
- record and replay, and cross-peer desync detection.
246
- * **Navigation & AI.** Grid A\*, and a [navigation mesh](src/engine/navigation/mesh/README.md) with
247
- any-angle paths and obstacle carving at build time. Behaviour trees and blackboards, [Monte-Carlo
248
- tree search](src/engine/intelligence/mcts/README.md) for agents that search a game tree rather
249
- than follow one, and a planner for spending limited resources. Ray, box, frustum and point queries
250
- against the scene.
251
- * **Procedural generation.** [A rule-driven grid generator](src/generation): cellular automata,
252
- layered grids, rule sets that place markers and spawn entities, theme-driven selection. Generation
211
+ * **[Networking](https://meep.company-named.com/docs/platform/networking/).** Server-authoritative
212
+ rollback: client-side prediction, reconciliation, and binary snapshots. Transports for WebRTC,
213
+ WebTransport, WebSocket and Node UDP, plus loopback and deliberately lossy ones for tests.
214
+ Bandwidth metering, packet record and replay, and cross-peer desync detection.
215
+ * **Navigation & AI.** Grid A\*, and a [navigation
216
+ mesh](https://meep.company-named.com/docs/physics/navigation-meshes/) with any-angle paths and
217
+ obstacle carving at build time. Behaviour trees and blackboards, [Monte-Carlo tree
218
+ search](https://meep.company-named.com/docs/ai-and-simulation/) for agents that search a game tree
219
+ rather than follow one, and a planner for spending limited resources. Ray, box, frustum and point
220
+ queries against the scene.
221
+ * **Procedural generation.** [A rule-driven grid
222
+ generator](https://meep.company-named.com/docs/generation/overview/): cellular automata, layered
223
+ grids, rule sets that place markers and spawn entities, theme-driven selection. Generation
253
224
  composes as tasks over shared state, so building a world is a graph of steps rather than a script.
254
225
  * **Assets & codecs.** glTF, including meshopt compression, loading into **entities** rather than
255
226
  one opaque tree. PNG, JPEG and AVIF decoded in-engine - the AV1 codec is a from-scratch encoder
256
227
  *and* decoder in pure JavaScript, no WebAssembly. Web-first asset streaming, and binary
257
228
  serialization that upgrades across versions.
258
- * **Tooling.** An in-app editor that attaches to and detaches from a running engine. [GPU profile
259
- capture](src/shade/device/timing/profile/SGPT_FORMAT.md) that records per-pass timings and leaves
260
- the build entirely when you don't import it. A software WebGPU implementation and a WGSL
261
- interpreter, so shaders and pipelines are testable on machines with no GPU.
229
+ * **Tooling.** An in-app editor that attaches to and detaches from a running engine. GPU profile
230
+ capture that records per-pass timings and leaves the build entirely when you don't import it. A
231
+ software WebGPU implementation and a WGSL interpreter, so shaders and pipelines are testable on
232
+ machines with no GPU.
262
233
  * **Everything smaller.** Input across touch, mouse, keyboard and gamepad behind one abstraction ·
263
234
  an optional DOM UI layer, replaceable with React or Vue · colour management with perceptual
264
235
  spaces, HDR transfer functions, tone mapping and gamut clipping · node graphs · achievements ·
265
236
  localisation · key-value storage over IndexedDB.
266
237
 
267
- Held to **~15,000 tests** - determinism, adversarial and shader-emulation suites among them.
268
-
269
238
  ---
270
239
 
271
240
  ## Shipping a build
@@ -298,5 +267,5 @@ raise that ceiling for a one-time fee per project, and add 24 months of major-ve
298
267
  Short version: ship anything you like, just don't redistribute the source and don't build a
299
268
  competing engine.
300
269
 
301
- See [LICENSE](LICENSE) for the terms covering this package, and the
270
+ See the `LICENSE` file in the package for the terms covering this package, and the
302
271
  [pricing page](https://meep.company-named.com/pricing/) for the tier ladder.
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.14.0",
9
+ "version": "3.14.2",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",