@woosh/meep-engine 3.26.0 → 3.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +542 -0
  4. package/src/core/binary/lz4/LZ4_LEVEL.d.ts +33 -0
  5. package/src/core/binary/lz4/LZ4_LEVEL.d.ts.map +1 -0
  6. package/src/core/binary/lz4/LZ4_LEVEL.js +32 -0
  7. package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts +33 -0
  8. package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts.map +1 -0
  9. package/src/core/binary/lz4/lz4_compress_block_at_level.js +47 -0
  10. package/src/core/binary/lz4/lz4_compress_block_hc.d.ts +40 -0
  11. package/src/core/binary/lz4/lz4_compress_block_hc.d.ts.map +1 -0
  12. package/src/core/binary/lz4/lz4_compress_block_hc.js +1382 -0
  13. package/src/core/binary/lz4/lz4_decompress_block.d.ts +2 -1
  14. package/src/core/binary/lz4/lz4_decompress_block.d.ts.map +1 -1
  15. package/src/core/binary/lz4/lz4_decompress_block.js +31 -6
  16. package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts +15 -0
  17. package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts.map +1 -0
  18. package/src/core/geom/3d/mat4/m4_linear_determinant.js +24 -0
  19. package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts +4 -2
  20. package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts.map +1 -1
  21. package/src/core/geom/3d/mat4/m4_normal_matrix3.js +21 -11
  22. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +14 -7
  23. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  24. package/src/core/geom/3d/shape/HeightMapShape3D.js +87 -78
  25. package/src/engine/Engine.d.ts.map +1 -1
  26. package/src/engine/Engine.js +38 -1
  27. package/src/engine/graphics3/GraphicsEngine.d.ts +5 -1
  28. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  29. package/src/engine/graphics3/GraphicsEngine.js +834 -830
  30. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  31. package/src/shade/RENDERER_CONTRACT.md +19 -10
  32. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +1 -1
  33. package/src/shade/playground/vgeo_runtime/README.md +186 -27
  34. package/src/shade/playground/vgeo_runtime/index.html +112 -62
  35. package/src/shade/playground/vgeo_runtime/main.js +678 -88
  36. package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +18 -0
  37. package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -0
  38. package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.js +23 -5
  39. package/src/shade/playground/vgeo_scene/README.md +408 -0
  40. package/src/shade/playground/vgeo_scene/index.html +144 -0
  41. package/src/shade/playground/vgeo_scene/main.d.ts +2 -0
  42. package/src/shade/playground/vgeo_scene/main.d.ts.map +1 -0
  43. package/src/shade/playground/vgeo_scene/main.js +1716 -0
  44. package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -1
  45. package/src/shade/renderer/Renderer.d.ts +4 -1
  46. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  47. package/src/shade/renderer/Renderer.js +5 -2
  48. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -2
  49. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +11 -0
  50. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  51. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +16 -8
  52. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  53. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +16 -11
  54. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  55. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +3 -29
  56. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts +22 -0
  57. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts.map +1 -0
  58. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.js +49 -0
  59. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +77 -7
  60. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +36 -23
  61. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +17 -14
  62. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +19 -1
  63. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
  64. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +21 -1
  65. package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.d.ts.map +1 -1
  66. package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.js +5 -9
  67. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts +32 -0
  68. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts.map +1 -0
  69. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +59 -0
  70. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -0
  71. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts +44 -0
  72. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts.map +1 -0
  73. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +36 -0
  74. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -0
  75. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_levels.js → level/vgeo_build_levels.js} +61 -95
  76. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts +19 -0
  77. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts.map +1 -0
  78. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.js → level/vgeo_build_root_group.js} +1 -1
  79. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +73 -0
  80. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -0
  81. package/src/shade/renderer/geometry/virtual/build/{VirtualGeometryMesh.js → mesh/VirtualGeometryMesh.js} +7 -7
  82. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +29 -0
  83. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -0
  84. package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_normals.js → mesh/vgeo_compute_vertex_normals.js} +3 -3
  85. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +31 -0
  86. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -0
  87. package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_tangents.js → mesh/vgeo_compute_vertex_tangents.js} +5 -5
  88. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +46 -0
  89. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -0
  90. package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.js → mesh/vgeo_normalize_source.js} +9 -9
  91. package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts +13 -0
  92. package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts.map +1 -0
  93. package/src/shade/renderer/geometry/virtual/build/{vgeo_assemble_pages.js → page/vgeo_assemble_pages.js} +63 -16
  94. package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts +13 -0
  95. package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts.map +1 -0
  96. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.js → page/vgeo_build_page_nodes.js} +4 -4
  97. package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts +22 -0
  98. package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts.map +1 -0
  99. package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.js → page/vgeo_page_node_count.js} +2 -2
  100. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +52 -0
  101. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -0
  102. package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.js → partition/VGeoFaceGraph.js} +1 -1
  103. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts +14 -0
  104. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -0
  105. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts +29 -0
  106. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts.map +1 -0
  107. package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.js → partition/vgeo_partition_graph.js} +2 -2
  108. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts +41 -0
  109. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts.map +1 -0
  110. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.js +92 -0
  111. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts +10 -0
  112. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts.map +1 -0
  113. package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.js → partition/vgeo_split_face_set.js} +12 -55
  114. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts +15 -0
  115. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -0
  116. package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set_packed.js → partition/vgeo_split_face_set_packed.js} +3 -3
  117. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts +12 -0
  118. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts.map +1 -0
  119. package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.js → sphere/vgeo_bounding_sphere.js} +3 -3
  120. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts +18 -0
  121. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts.map +1 -0
  122. package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.js → sphere/vgeo_containing_sphere.js} +3 -3
  123. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts +9 -0
  124. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts.map +1 -0
  125. package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.js → sphere/vgeo_sphere_inflate_to_contain.js} +1 -1
  126. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +24 -0
  127. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -0
  128. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +20 -0
  129. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -0
  130. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +14 -0
  131. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -0
  132. package/src/shade/renderer/geometry/virtual/build/{vgeo_extract_submesh.js → submesh/vgeo_extract_submesh.js} +5 -5
  133. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +12 -0
  134. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -0
  135. package/src/shade/renderer/geometry/virtual/build/{vgeo_gather_faces.js → submesh/vgeo_gather_faces.js} +2 -2
  136. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts +11 -0
  137. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts.map +1 -0
  138. package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.js → submesh/vgeo_narrow_indices.js} +3 -3
  139. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
  140. package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
  141. package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +10 -11
  142. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +22 -0
  143. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
  144. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +24 -0
  145. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts +8 -2
  146. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts.map +1 -1
  147. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.js +8 -2
  148. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +12 -0
  149. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
  150. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +13 -0
  151. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +8 -1
  152. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
  153. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +11 -3
  154. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +9 -0
  155. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
  156. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +10 -1
  157. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts +15 -0
  158. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts.map +1 -0
  159. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.js +15 -0
  160. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts +18 -0
  161. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts.map +1 -0
  162. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.js +17 -0
  163. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts +8 -0
  164. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts.map +1 -0
  165. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.js +7 -0
  166. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +3 -0
  167. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +16 -0
  168. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts +14 -0
  169. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts.map +1 -0
  170. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.js +13 -0
  171. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts +11 -0
  172. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts.map +1 -0
  173. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.js +10 -0
  174. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +28 -0
  175. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
  176. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +7 -3
  177. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +20 -0
  178. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -1
  179. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +20 -2
  180. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +4 -0
  181. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
  182. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +4 -0
  183. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +29 -3
  184. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
  185. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +81 -122
  186. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +40 -0
  187. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
  188. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +44 -0
  189. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +69 -0
  190. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -0
  191. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +236 -0
  192. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +14 -0
  193. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -1
  194. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +15 -0
  195. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts +31 -0
  196. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts.map +1 -0
  197. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.js +32 -0
  198. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +10 -0
  199. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -1
  200. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +21 -1
  201. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts +15 -0
  202. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts.map +1 -0
  203. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.js +84 -0
  204. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts +22 -0
  205. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -0
  206. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +96 -0
  207. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
  208. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +63 -3
  209. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  210. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +219 -17
  211. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  212. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +156 -11
  213. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +656 -0
  214. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +33 -36
  215. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  216. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +109 -193
  217. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +109 -29
  218. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  219. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +173 -105
  220. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +37 -0
  221. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +109 -26
  222. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +548 -0
  223. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +29 -50
  224. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  225. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +55 -487
  226. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +84 -0
  227. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -0
  228. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +393 -0
  229. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +234 -0
  230. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -0
  231. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +1388 -0
  232. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts +81 -0
  233. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts.map +1 -0
  234. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.js +89 -0
  235. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +53 -34
  236. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  237. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +407 -124
  238. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +100 -0
  239. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -0
  240. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +219 -0
  241. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts +17 -0
  242. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts.map +1 -0
  243. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.js +47 -0
  244. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts +20 -0
  245. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts.map +1 -0
  246. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.js +19 -0
  247. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  248. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -12
  249. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +8 -8
  250. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  251. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +11 -73
  252. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts +19 -0
  253. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -0
  254. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +98 -0
  255. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts +31 -0
  256. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -0
  257. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +99 -0
  258. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts +17 -0
  259. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts.map +1 -0
  260. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.js +39 -0
  261. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  262. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +18 -1
  263. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -1
  264. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +5 -15
  265. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts +3 -0
  266. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -0
  267. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +77 -0
  268. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts +3 -0
  269. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -0
  270. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +130 -0
  271. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  272. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +32 -37
  273. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  274. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +576 -230
  275. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +15 -18
  276. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  277. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +19 -28
  278. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  279. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +45 -25
  280. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
  281. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +11 -0
  282. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
  283. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +0 -1
  284. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +12 -10
  285. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +1 -0
  286. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +8 -0
  287. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +7 -2
  288. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -1
  289. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +8 -3
  290. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +2 -0
  291. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +19 -0
  292. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -1
  293. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +1 -1
  294. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts +5 -0
  295. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts.map +1 -0
  296. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.js +22 -0
  297. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts +14 -0
  298. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts.map +1 -0
  299. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.js +13 -0
  300. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts +17 -0
  301. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map +1 -0
  302. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.js +16 -0
  303. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +15 -0
  304. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -0
  305. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +16 -0
  306. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts +23 -0
  307. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts.map +1 -0
  308. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js +28 -0
  309. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts +2 -0
  310. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts.map +1 -0
  311. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js +13 -0
  312. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +10 -5
  313. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -1
  314. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +15 -6
  315. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +6 -1
  316. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
  317. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +38 -1
  318. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  319. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +4 -3
  320. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  321. package/src/shade/renderer/loader/gltf/load_gltf.js +0 -19
  322. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  323. package/src/shade/renderer/material/chunk_material_draw_side.d.ts +14 -0
  324. package/src/shade/renderer/material/chunk_material_draw_side.d.ts.map +1 -0
  325. package/src/shade/renderer/material/chunk_material_draw_side.js +34 -0
  326. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  327. package/src/shade/renderer/material/standard/fragment_gbuffer.js +8 -1
  328. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  329. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +6 -3
  330. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  331. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +6 -3
  332. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  333. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +13 -1
  334. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  335. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +19 -5
  336. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
  337. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +23 -5
  338. package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.d.ts.map +1 -1
  339. package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js +12 -5
  340. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  341. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -4
  342. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +22 -0
  343. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts.map +1 -0
  344. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -0
  345. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +2 -0
  346. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  347. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
  348. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +15 -0
  349. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -0
  350. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +35 -0
  351. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  352. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +3 -5
  353. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  354. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +3 -4
  355. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts +10 -1
  356. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
  357. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +38 -29
  358. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts +5 -0
  359. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts.map +1 -1
  360. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js +63 -55
  361. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  362. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -4
  363. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
  364. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +1 -0
  365. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
  366. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +7 -7
  367. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  368. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +83 -78
  369. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  370. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +44 -53
  371. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
  372. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -2
  373. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
  374. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -2
  375. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
  376. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +19 -2
  377. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +7 -4
  378. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  379. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -2
  380. package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.d.ts.map +1 -1
  381. package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.js +15 -4
  382. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  383. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +16 -5
  384. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.d.ts.map +1 -1
  385. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +16 -5
  386. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  387. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +2 -1
  388. package/src/shade/renderer/rasterize/native/rasterization_shader_resources.d.ts.map +1 -1
  389. package/src/shade/renderer/rasterize/native/rasterization_shader_resources.js +4 -0
  390. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  391. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +16 -7
  392. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  393. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +85 -89
  394. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  395. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +28 -32
  396. package/src/shade/renderer/scene/GPUSceneContext.d.ts +22 -2
  397. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  398. package/src/shade/renderer/scene/GPUSceneContext.js +61 -4
  399. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +19 -0
  400. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts.map +1 -1
  401. package/src/shade/renderer/scene/NODE3D_STRUCT.js +34 -0
  402. package/src/shade/renderer/scene/chunk_node3d_flags.d.ts +9 -0
  403. package/src/shade/renderer/scene/chunk_node3d_flags.d.ts.map +1 -0
  404. package/src/shade/renderer/scene/chunk_node3d_flags.js +23 -0
  405. package/src/shade/renderer/scene/chunk_scene_database_access.d.ts.map +1 -1
  406. package/src/shade/renderer/scene/chunk_scene_database_access.js +15 -1
  407. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  408. package/src/shade/renderer/scene/rows/GPUSceneRows.js +9 -1
  409. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts +7 -0
  410. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts.map +1 -1
  411. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js +16 -4
  412. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts +12 -0
  413. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -0
  414. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +18 -0
  415. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts +24 -0
  416. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts.map +1 -0
  417. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js +33 -0
  418. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  419. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +92 -16
  420. package/src/shade/renderer/view/GPUViewContext.d.ts +5 -0
  421. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  422. package/src/shade/renderer/view/GPUViewContext.js +21 -0
  423. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  424. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +74 -3
  425. package/src/shade/playground/vgeo_viewer/README.md +0 -150
  426. package/src/shade/playground/vgeo_viewer/cut_geometry.js +0 -460
  427. package/src/shade/playground/vgeo_viewer/index.html +0 -77
  428. package/src/shade/playground/vgeo_viewer/main.js +0 -1343
  429. package/src/shade/playground/vgeo_viewer/select_cut.js +0 -481
  430. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts +0 -258
  431. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts.map +0 -1
  432. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.js +0 -723
  433. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts +0 -49
  434. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts.map +0 -1
  435. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.js +0 -50
  436. package/src/shade/renderer/loader/gltf/fix_up_material_sides.js +0 -109
  437. package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.js +0 -78
  438. package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +0 -100
  439. package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.js +0 -26
  440. package/src/shade/renderer/shader/chunk/jobs/NOTES.md +0 -47
  441. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts +0 -3
  442. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts.map +0 -1
  443. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.js +0 -102
  444. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.js → level/VGeoLevel.js} +0 -0
  445. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.js → level/VGeoLevelOptions.js} +0 -0
  446. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.js → level/VGeoLevelSummary.js} +0 -0
  447. /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.js → partition/vgeo_graph_components.js} +0 -0
  448. /package/src/shade/renderer/geometry/virtual/build/{VGeoGatheredFaces.js → submesh/VGeoGatheredFaces.js} +0 -0
  449. /package/src/shade/renderer/geometry/virtual/build/{VGeoSubmesh.js → submesh/VGeoSubmesh.js} +0 -0
@@ -1,55 +1,63 @@
1
- import { assert } from "../../../../../core/assert.js";
2
- import { ShadeDrawMode } from "../../../material/ShadeDrawMode.js";
3
- import { ShadeDrawSide } from "../../../material/ShadeDrawSide.js";
4
- import { TransparencyMode } from "../../../material/TransparencyMode.js";
5
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
6
- import {
7
- RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE,
8
- RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE,
9
- RASTERIZATION_BUCKET_BIT_COUNT_DRAW_SIDE
10
- } from "./RASTERIZATION_BUCKET_LIMIT.js";
11
-
12
- // A field of N bits is masked with (1 << N) - 1, not N + 1 (the two coincide only at N == 2,
13
- // which is the value all three enums happen to have today).
14
- const mask_alpha = (1 << RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE) - 1;
15
- const shift_alpha = 0;
16
-
17
- const mask_primitive = (1 << RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE) - 1;
18
- const shift_primitive = shift_alpha + RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE;
19
-
20
- const mask_side = (1 << RASTERIZATION_BUCKET_BIT_COUNT_DRAW_SIDE) - 1;
21
- const shift_side = shift_primitive + RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE;
22
-
23
- /**
24
- * @see TransparencyMode
25
- * @see ShadeDrawMode
26
- * @see rasterization_material_bucket
27
- * @type {CodeChunk}
28
- */
29
- export const chunk_rasterization_material_bucket = CodeChunk.from(
30
- //language=WGSL
31
- `
32
- fn rasterization_material_bucket( alpha_mode: u32, draw_mode: u32, side: u32 ) -> u32{
33
- return ( ( alpha_mode & ${mask_alpha} ) << ${shift_alpha} )
34
- | ( ( draw_mode & ${mask_primitive} ) << ${shift_primitive} )
35
- | ( ( side & ${mask_side} ) << ${shift_side} );
36
- }
37
- `
38
- );
39
-
40
- /**
41
- * @see chunk_rasterization_material_bucket
42
- * @param {number|TransparencyMode} alpha_mode
43
- * @param {number|ShadeDrawMode} draw_mode
44
- * @param {number|ShadeDrawSide} side
45
- * @return {number}
46
- */
47
- export function rasterization_material_bucket(alpha_mode, draw_mode, side) {
48
- assert.enum(alpha_mode, TransparencyMode);
49
- assert.enum(draw_mode, ShadeDrawMode);
50
- assert.enum(side, ShadeDrawSide);
51
-
52
- return ((alpha_mode & mask_alpha) << shift_alpha)
53
- | ((draw_mode & mask_primitive) << shift_primitive)
54
- | ((side & mask_side) << shift_side);
55
- }
1
+ import { assert } from "../../../../../core/assert.js";
2
+ import { ShadeDrawMode } from "../../../material/ShadeDrawMode.js";
3
+ import { ShadeDrawSide } from "../../../material/ShadeDrawSide.js";
4
+ import { TransparencyMode } from "../../../material/TransparencyMode.js";
5
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
6
+ import {
7
+ RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE,
8
+ RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE
9
+ } from "./RASTERIZATION_BUCKET_LIMIT.js";
10
+
11
+ // A field of N bits is masked with (1 << N) - 1, not N + 1 (the two coincide only at N == 2,
12
+ // which is the value both of these enums happen to have today).
13
+ const mask_alpha = (1 << RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE) - 1;
14
+ const shift_alpha = 0;
15
+
16
+ const mask_primitive = (1 << RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE) - 1;
17
+ const shift_primitive = shift_alpha + RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE;
18
+
19
+ // the last field carries no mask: it is a boolean by construction, not an enum being narrowed
20
+ const shift_double_sided = shift_primitive + RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE;
21
+
22
+ /**
23
+ * A bucket is a pipeline state, and the third field is the only thing a {@link ShadeDrawSide}
24
+ * still says about one: whether it culls at all. `Front` and `Back` land in the same bucket —
25
+ * a back-sided material is a front-sided one whose winding the vertex shader reverses — so a
26
+ * scene that mixes them draws in one pass, through one expansion chain.
27
+ *
28
+ * @see TransparencyMode
29
+ * @see ShadeDrawMode
30
+ * @see rasterization_material_bucket
31
+ * @type {CodeChunk}
32
+ */
33
+ export const chunk_rasterization_material_bucket = CodeChunk.from(
34
+ //language=WGSL
35
+ `
36
+ fn rasterization_material_bucket( alpha_mode: u32, draw_mode: u32, side: u32 ) -> u32{
37
+ let double_sided = u32( side == ${ShadeDrawSide.Double}u );
38
+
39
+ return ( ( alpha_mode & ${mask_alpha} ) << ${shift_alpha} )
40
+ | ( ( draw_mode & ${mask_primitive} ) << ${shift_primitive} )
41
+ | ( double_sided << ${shift_double_sided} );
42
+ }
43
+ `
44
+ );
45
+
46
+ /**
47
+ * @see chunk_rasterization_material_bucket
48
+ * @param {number|TransparencyMode} alpha_mode
49
+ * @param {number|ShadeDrawMode} draw_mode
50
+ * @param {number|ShadeDrawSide} side
51
+ * @return {number}
52
+ */
53
+ export function rasterization_material_bucket(alpha_mode, draw_mode, side) {
54
+ assert.enum(alpha_mode, TransparencyMode);
55
+ assert.enum(draw_mode, ShadeDrawMode);
56
+ assert.enum(side, ShadeDrawSide);
57
+
58
+ const double_sided = side === ShadeDrawSide.Double ? 1 : 0;
59
+
60
+ return ((alpha_mode & mask_alpha) << shift_alpha)
61
+ | ((draw_mode & mask_primitive) << shift_primitive)
62
+ | (double_sided << shift_double_sided);
63
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"shader_meshlets_extract_bucket.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js"],"names":[],"mappings":"AAiEA,2DAIG;8BA/D2B,qCAAqC"}
1
+ {"version":3,"file":"shader_meshlets_extract_bucket.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js"],"names":[],"mappings":"AAgEA,2DAIG;8BA9D2B,qCAAqC"}
@@ -13,11 +13,10 @@ import {
13
13
 
14
14
  const resources = new ShaderResourceSetDescriptor();
15
15
 
16
- // per-dispatch, four bytes, read-only: immediate data rather than a uniform buffer — the same
17
- // shape shader_read_out_bucket already uses
18
- resources.setImmediate("bucket_index", U32_CONTAINER_STRUCT);
19
-
16
+ // TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
17
+ // dispatchWorkgroupsIndirect, so this reads 65535 and culls everything. Revert 22893f0a7.
20
18
  resources.createGroup()
19
+ .addUniform("bucket_index", U32_CONTAINER_STRUCT)
21
20
  .addStorageBuffer("bucket_data", WebGPUStruct.from({
22
21
  headers: RASTERIZATION_BUCKET_SORT_OUTPUT_HEADER_STRUCT_READ,
23
22
  elements: WebGPUArray.from(MESHLET_DEFINITION_STRUCT)
@@ -1 +1 @@
1
- {"version":3,"file":"graph_meshlets_rasterize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;GAaG;AACH;IAX+B,KAAK;IACD,IAAI;IACZ,cAAc,EAA9B,MAAM;IACU,KAAK,EAArB,MAAM;IACwB,eAAe;IAC1B,aAAa,GAAhC,MAAM,EAAE;IACW,QAAQ,GAA3B,MAAM,EAAE;IACiB,eAAe;IACtB,aAAa,GAA/B,OAAO;IACN,CAAC,KAAK,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAE,CAAC,CA0IzC"}
1
+ {"version":3,"file":"graph_meshlets_rasterize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;GAaG;AACH;IAX+B,KAAK;IACD,IAAI;IACZ,cAAc,EAA9B,MAAM;IACU,KAAK,EAArB,MAAM;IACwB,eAAe;IAC1B,aAAa,GAAhC,MAAM,EAAE;IACW,QAAQ,GAA3B,MAAM,EAAE;IACiB,eAAe;IACtB,aAAa,GAA/B,OAAO;IACN,CAAC,KAAK,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAE,CAAC,CA2IzC"}
@@ -117,6 +117,7 @@ export function graph_meshlets_rasterize({
117
117
  meshlet_data: scene.geometries.meshlets.buffer_data,
118
118
  meshlet_metadata: scene.geometries.meshlets.buffer_metadata,
119
119
  geometries: geometry_context.buffer_metadata,
120
+ materials: scene.materials.metadata_table.buffer,
120
121
  meshlets: input_meshlets,
121
122
  }
122
123
  });
@@ -1 +1 @@
1
- {"version":3,"file":"pass_mesh_cull.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,qCAJW,qBAAqB,0EAoD/B;AAvED;IACI,yBAAqB;IACrB,4BAAwB;IAExB,YAAQ;IAER;;OAEG;IACH,yBAAQ;IAER,qBAAiB;IACjB,gBAAY;IAEZ,gBAAY;CACf"}
1
+ {"version":3,"file":"pass_mesh_cull.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js"],"names":[],"mappings":"AAyBA;;;;;GAKG;AACH,qCAJW,qBAAqB,0EAmD/B;AAtED;IACI,yBAAqB;IACrB,4BAAwB;IAExB,YAAQ;IAER;;OAEG;IACH,yBAAQ;IAER,qBAAiB;IACjB,gBAAY;IAEZ,gBAAY;CACf"}
@@ -1,3 +1,4 @@
1
+ import { assert } from "../../../../../core/assert.js";
1
2
  import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
3
  import { shader_hzb_mesh_filter_2way } from "../../cull/hzb/shader_hzb_mesh_filter_2way.js"
3
4
  import { U32_CONTAINER_STRUCT } from "../../../shader/type/U32_CONTAINER_STRUCT.js";
@@ -44,6 +45,7 @@ export function pass_mesh_cull(data, resources, context) {
44
45
 
45
46
  const bucket_id = data.bucket_index;
46
47
 
48
+ assert.isNonNegativeInteger(bucket_id, 'bucket_id');
47
49
 
48
50
  build_indirect_compute_dispatch_command(
49
51
  COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
@@ -55,17 +57,15 @@ export function pass_mesh_cull(data, resources, context) {
55
57
  0
56
58
  );
57
59
 
58
- const bucket_index = encoder.allocateTransientValueBuffer(
59
- U32_CONTAINER_STRUCT,
60
- {
61
- value: bucket_id,
62
- }
63
- );
60
+ // TODO(chrome-153): transient uniform, not an immediate value — see the shader.
61
+ const u_bucket_index = encoder.allocateTransientValueBuffer(U32_CONTAINER_STRUCT, {
62
+ value: bucket_id,
63
+ });
64
64
 
65
65
  shader_hzb_mesh_filter_2way.dispatchIndirect({
66
66
  encoder,
67
67
  bindings: {
68
- bucket_index,
68
+ bucket_index: u_bucket_index,
69
69
  camera_previous: view_ctx.gpu_previous_camera_state.buffer,
70
70
  bucket_data,
71
71
  scene_database: gpu_scene.scene_database_buffer,
@@ -1 +1 @@
1
- {"version":3,"file":"graph_extract_meshes_from_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH;IAN+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACU,SAAS,EAAzB,MAAM;IACuB,MAAM;IACjC,MAAM,CA2DlB"}
1
+ {"version":3,"file":"graph_extract_meshes_from_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH;IAN+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACU,SAAS,EAAzB,MAAM;IACuB,MAAM;IACjC,MAAM,CAgElB"}
@@ -1,79 +1,84 @@
1
- import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
2
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
- import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
4
- import {
5
- build_indirect_compute_dispatch_command,
6
- INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
7
- } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
8
- import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
9
- import { shader_read_out_bucket } from "../bucket/shader_read_out_bucket.js";
10
-
11
- /**
12
- * Extract a single bucket's mesh indices out of a bucket-sorted mesh buffer.
13
- * Produces a flat {@link COLLECTION_U32_STRUCT_READ} buffer.
14
- *
15
- * @param {Object} options
16
- * @param {FrameGraph} options.graph
17
- * @param {number} options.buckets bucket-sorted meshes resource ID
18
- * @param {number} options.bucket_id
19
- * @param {GPUCollectionLimits} options.limits
20
- * @returns {number} resource ID of extracted mesh list
21
- */
22
- export function graph_extract_meshes_from_bucket({
23
- graph,
24
- buckets,
25
- bucket_id,
26
- limits,
27
- }) {
28
-
29
- /**
30
- *
31
- * @param data
32
- * @param {FramePassResources} resources
33
- * @param {GraphicsExecutionContext} context
34
- */
35
- function execute(data, resources, context) {
36
- const encoder = context.encoder;
37
-
38
- const buckets = resources.get(data.buckets);
39
- const output = resources.get(data.output);
40
- const command = resources.get(data.command);
41
-
42
- const bucket_id = data.bucket_id;
43
-
44
- build_indirect_compute_dispatch_command(
45
- COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
46
- encoder,
47
- buckets,
48
- // the bucketed buffer header consists of pairs of u32 values (count,offset)
49
- bucket_id * (u32.size * 2),
50
- command,
51
- 0
52
- );
53
-
54
- shader_read_out_bucket.dispatchIndirect({
55
- encoder,
56
- command,
57
- bindings: {
58
- settings: { bucket_id },
59
- input: buckets,
60
- output,
61
- }
62
- });
63
- }
64
-
65
- const data = {};
66
-
67
- const pass = graph.add("extract meshes from bucket", data, execute);
68
-
69
- data.buckets = pass.read(buckets);
70
- data.bucket_id = bucket_id;
71
- data.command = pass.create("command", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
72
- data.output = pass.create("output", BufferResourceDescriptor.from(
73
- limits.compute_buffer_size(RasterizationCollectionType.Meshes),
74
- GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
75
- 0, 16 // clear count
76
- ));
77
-
78
- return data.output;
1
+ import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
2
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
4
+ import {
5
+ build_indirect_compute_dispatch_command,
6
+ INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
7
+ } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
8
+ import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
9
+ import { PUSH_CONSTANTS, shader_read_out_bucket } from "../bucket/shader_read_out_bucket.js";
10
+
11
+ /**
12
+ * Extract a single bucket's mesh indices out of a bucket-sorted mesh buffer.
13
+ * Produces a flat {@link COLLECTION_U32_STRUCT_READ} buffer.
14
+ *
15
+ * @param {Object} options
16
+ * @param {FrameGraph} options.graph
17
+ * @param {number} options.buckets bucket-sorted meshes resource ID
18
+ * @param {number} options.bucket_id
19
+ * @param {GPUCollectionLimits} options.limits
20
+ * @returns {number} resource ID of extracted mesh list
21
+ */
22
+ export function graph_extract_meshes_from_bucket({
23
+ graph,
24
+ buckets,
25
+ bucket_id,
26
+ limits,
27
+ }) {
28
+
29
+ /**
30
+ *
31
+ * @param data
32
+ * @param {FramePassResources} resources
33
+ * @param {GraphicsExecutionContext} context
34
+ */
35
+ function execute(data, resources, context) {
36
+ const encoder = context.encoder;
37
+
38
+ const buckets = resources.get(data.buckets);
39
+ const output = resources.get(data.output);
40
+ const command = resources.get(data.command);
41
+
42
+ const bucket_id = data.bucket_id;
43
+
44
+ build_indirect_compute_dispatch_command(
45
+ COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
46
+ encoder,
47
+ buckets,
48
+ // the bucketed buffer header consists of pairs of u32 values (count,offset)
49
+ bucket_id * (u32.size * 2),
50
+ command,
51
+ 0
52
+ );
53
+
54
+ // TODO(chrome-153): transient uniform, not an immediate value — see the shader.
55
+ const u_settings = encoder.allocateTransientValueBuffer(PUSH_CONSTANTS, {
56
+ bucket_id,
57
+ });
58
+
59
+ shader_read_out_bucket.dispatchIndirect({
60
+ encoder,
61
+ command,
62
+ bindings: {
63
+ settings: u_settings,
64
+ input: buckets,
65
+ output,
66
+ }
67
+ });
68
+ }
69
+
70
+ const data = {};
71
+
72
+ const pass = graph.add("extract meshes from bucket", data, execute);
73
+
74
+ data.buckets = pass.read(buckets);
75
+ data.bucket_id = bucket_id;
76
+ data.command = pass.create("command", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
77
+ data.output = pass.create("output", BufferResourceDescriptor.from(
78
+ limits.compute_buffer_size(RasterizationCollectionType.Meshes),
79
+ GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
80
+ 0, 16 // clear count
81
+ ));
82
+
83
+ return data.output;
79
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_scene_fast.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;GAUG;AACH;;;;;;;IAFa;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAC,CAoJ3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAJ+B,KAAK;IACC,GAAG;IACA,MAAM;SA8C7C"}
1
+ {"version":3,"file":"graph_rasterize_scene_fast.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;GAUG;AACH;;;;;;;IAFa;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAC,CA0I3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAJ+B,KAAK;IACC,GAAG;IACA,MAAM;SA8C7C"}
@@ -12,6 +12,7 @@ import { graph_expand_meshes_to_meshlets } from "../expand/mesh/graph_expand_mes
12
12
  import { graph_vgeo_expand_if_enabled } from "../../geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js";
13
13
  import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
14
14
  import { construct_primitive_state } from "../bucket/construct_primitive_state.js";
15
+ import { rasterization_opaque_buckets } from "../bucket/rasterization_opaque_buckets.js";
15
16
  import { graph_mesh_frustum_cull } from "../compute/graph_mesh_frustum_cull.js";
16
17
  import { graph_rasterize_meshes_alpha_tested } from "../native/graph_rasterize_meshes_alpha_tested.js";
17
18
  import { graph_extract_meshes_from_bucket } from "./graph_extract_meshes_from_bucket.js";
@@ -75,59 +76,49 @@ export function graph_rasterize_scene_fast_raw({
75
76
  // rasterize each active opaque bucket in a single pass, with no occlusion filtering
76
77
  let is_first_draw = true;
77
78
 
78
- for (const draw_mode of Object.values(ShadeDrawMode)) {
79
- for (const side of Object.values(ShadeDrawSide)) {
80
-
81
- const bucket_id = rasterization_material_bucket(TransparencyMode.Opaque, draw_mode, side);
82
-
83
- if (!active_buckets.has(bucket_id)) {
84
- // no matching materials, skip
85
- continue;
86
- }
87
-
88
- const gr_bucket_meshes = graph_extract_meshes_from_bucket({
89
- graph,
90
- buckets: gr_render_buckets,
91
- bucket_id,
92
- limits,
93
- });
94
-
95
- let gr_bucket_meshlets = graph_expand_meshes_to_meshlets({
96
- graph,
97
- input_meshes: gr_bucket_meshes,
98
- scene: scene_ctx,
99
- expected_output_size: limits.compute_buffer_size(RasterizationCollectionType.Meshlets),
100
- limits,
101
- });
102
-
103
- // the seam: this bucket's virtual-geometry instances select their cut and append it to
104
- // the same collection, which is the whole of what the rest of this function is told
105
- gr_bucket_meshlets = graph_vgeo_expand_if_enabled({
106
- graph,
107
- input_meshes: gr_bucket_meshes,
108
- output_meshlets: gr_bucket_meshlets,
109
- view: view_ctx,
110
- limits,
111
- });
112
-
113
- graph_record_stat(graph, limits.stats, RasterizationCollectionType.Meshlets, gr_bucket_meshlets);
114
-
115
- const primitive_state = construct_primitive_state(draw_mode, side, job.cull_policy);
116
-
117
- [target_depth, targets_color] = graph_meshlets_rasterize({
118
- graph,
119
- view: view_ctx,
120
- input_meshlets: gr_bucket_meshlets,
121
- depth: target_depth,
122
- color_targets: targets_color,
123
- pass_descriptor: job.opaque_pass,
124
- clear_targets: is_first_draw,
125
- primitive_state,
126
- viewport,
127
- });
128
-
129
- is_first_draw = false;
130
- }
79
+ for (const { draw_mode, side, bucket_id } of rasterization_opaque_buckets(active_buckets)) {
80
+ const gr_bucket_meshes = graph_extract_meshes_from_bucket({
81
+ graph,
82
+ buckets: gr_render_buckets,
83
+ bucket_id,
84
+ limits,
85
+ });
86
+
87
+ let gr_bucket_meshlets = graph_expand_meshes_to_meshlets({
88
+ graph,
89
+ input_meshes: gr_bucket_meshes,
90
+ scene: scene_ctx,
91
+ expected_output_size: limits.compute_buffer_size(RasterizationCollectionType.Meshlets),
92
+ limits,
93
+ });
94
+
95
+ // the seam: this bucket's virtual-geometry instances select their cut and append it to
96
+ // the same collection, which is the whole of what the rest of this function is told
97
+ gr_bucket_meshlets = graph_vgeo_expand_if_enabled({
98
+ graph,
99
+ input_meshes: gr_bucket_meshes,
100
+ output_meshlets: gr_bucket_meshlets,
101
+ view: view_ctx,
102
+ limits,
103
+ });
104
+
105
+ graph_record_stat(graph, limits.stats, RasterizationCollectionType.Meshlets, gr_bucket_meshlets);
106
+
107
+ const primitive_state = construct_primitive_state(draw_mode, side, job.cull_policy);
108
+
109
+ [target_depth, targets_color] = graph_meshlets_rasterize({
110
+ graph,
111
+ view: view_ctx,
112
+ input_meshlets: gr_bucket_meshlets,
113
+ depth: target_depth,
114
+ color_targets: targets_color,
115
+ pass_descriptor: job.opaque_pass,
116
+ clear_targets: is_first_draw,
117
+ primitive_state,
118
+ viewport,
119
+ });
120
+
121
+ is_first_draw = false;
131
122
  }
132
123
 
133
124
  // alpha-tested: reuse the existing native pass but skip HZB filtering by passing hzb=-1
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_forward_shade_standard_fragment_brick4.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js"],"names":[],"mappings":"AA4BA,qEAwJC;0BA3JyB,oCAAoC"}
1
+ {"version":3,"file":"chunk_forward_shade_standard_fragment_brick4.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js"],"names":[],"mappings":"AA6BA,qEA2JC;0BA9JyB,oCAAoC"}
@@ -1,4 +1,5 @@
1
1
  import { chunk_shade_standard_material_direct } from "../../deferred/chunk_shade_standard_material_direct.js";
2
+ import { chunk_material_draw_side } from "../../material/chunk_material_draw_side.js";
2
3
  import { chunk_decode_tangent_normal } from "../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
3
4
  import { INDIRECT_LIGHT_INTENSITY } from "../../deferred/INDIRECT_LIGHT_INTENSITY.js";
4
5
  import {
@@ -38,8 +39,10 @@ fn forward_shade_standard_fragment(
38
39
  let t_normal = decode_tangent_normal(textureSample(texture_normal, texture_normal_sampler, vert.uv));
39
40
  var world_shading_normal:vec3<f32> = normalize( world_tangent_frame * t_normal );
40
41
 
41
- // flip normal if fragment is back-facing,
42
- if(!front_facing) {
42
+ // flip the normal when looking at the surface's back. The raw front_facing cannot say:
43
+ // a back-sided material emits its winding reversed on purpose, so its "front" faces
44
+ // are the surface's back.
45
+ if(!material_fragment_faces_front(front_facing, material_info.draw_side)) {
43
46
  world_shading_normal = -world_shading_normal;
44
47
  }
45
48
 
@@ -177,5 +180,6 @@ fn forward_shade_standard_fragment(
177
180
  chunk_compute_indirect_specular,
178
181
  chunk_brick4_sample_forward_indirect,
179
182
  chunk_compute_specular_occlusion,
183
+ chunk_material_draw_side,
180
184
  ]
181
185
  )
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_forward_shade_standard_fragment_ibl.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,kEA6IC;0BApJyB,oCAAoC"}
1
+ {"version":3,"file":"chunk_forward_shade_standard_fragment_ibl.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,kEAgJC;0BAvJyB,oCAAoC"}
@@ -1,4 +1,5 @@
1
1
  import { chunk_shade_standard_material_direct } from "../../deferred/chunk_shade_standard_material_direct.js";
2
+ import { chunk_material_draw_side } from "../../material/chunk_material_draw_side.js";
2
3
  import { chunk_decode_tangent_normal } from "../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
3
4
  import { chunk_get_ibl_irradiance } from "../../deferred/indirect/chunk_get_ibl_irradiance.js";
4
5
  import { chunk_get_ibl_radiance } from "../../deferred/indirect/chunk_get_ibl_radiance.js";
@@ -41,8 +42,10 @@ fn forward_shade_standard_fragment(
41
42
  let t_normal = decode_tangent_normal(textureSample(texture_normal, texture_normal_sampler, vert.uv));
42
43
  var world_shading_normal:vec3<f32> = normalize( world_tangent_frame * t_normal );
43
44
 
44
- // flip normal if fragment is back-facing,
45
- if(!front_facing) {
45
+ // flip the normal when looking at the surface's back. The raw front_facing cannot say:
46
+ // a back-sided material emits its winding reversed on purpose, so its "front" faces
47
+ // are the surface's back.
48
+ if(!material_fragment_faces_front(front_facing, material_info.draw_side)) {
46
49
  world_shading_normal = -world_shading_normal;
47
50
  }
48
51
 
@@ -169,5 +172,6 @@ fn forward_shade_standard_fragment(
169
172
  chunk_get_ibl_radiance,
170
173
  chunk_get_ibl_irradiance,
171
174
  chunk_compute_specular_occlusion,
175
+ chunk_material_draw_side,
172
176
  ]
173
177
  )
@@ -1 +1 @@
1
- {"version":3,"file":"vertex_shader_chunk.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/vertex_shader_chunk.js"],"names":[],"mappings":"AAUA,4CAoDE;0BAvDwB,oCAAoC"}
1
+ {"version":3,"file":"vertex_shader_chunk.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/vertex_shader_chunk.js"],"names":[],"mappings":"AAeA,4CAgEE;0BAnEwB,oCAAoC"}
@@ -1,7 +1,12 @@
1
+ import { chunk_triangle_winding_is_reversed } from "../chunk_triangle_winding_is_reversed.js";
2
+ import { chunk_node3d_flags } from "../../scene/chunk_node3d_flags.js";
1
3
  import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
2
4
  import {
3
5
  chunk_compute_normal_matrix_from_m4
4
6
  } from "../../shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js";
7
+ import {
8
+ chunk_triangle_list_reverse_winding
9
+ } from "../../shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js";
5
10
  import {
6
11
  chunk_read_meshlet_vertex_by_draw_index
7
12
  } from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_vertex_by_draw_index.js";
@@ -26,9 +31,16 @@ fn main(
26
31
  let mesh = scene_read_mesh(&scene_database, meshlet_def.mesh);
27
32
  let node = scene_read_node(&scene_database, mesh.node);
28
33
 
34
+ // the tangent frame's handedness turns on the reflection alone: looking at a surface's back
35
+ // does not change which way its +V runs, and a back-sided material is only a way of looking
36
+ let is_mirrored = node3d_global_is_mirrored(node);
37
+
29
38
  let geo_vertex = read_meshlet_vertex_by_draw_index(
30
39
  meshlet_header,
31
- meshlet_vertex_id,
40
+ triangle_list_reverse_winding(
41
+ meshlet_vertex_id,
42
+ triangle_winding_is_reversed(node, material_info.draw_side)
43
+ ),
32
44
  );
33
45
 
34
46
  let instance_matrix = node.global;
@@ -47,7 +59,9 @@ fn main(
47
59
  output.normal = normalize(normal_model_matrix * geo_vertex.normal);
48
60
 
49
61
  let geometry_tangent = geo_vertex.tangent;
50
- let world_tangent = vec4( normalize( normal_model_matrix * geometry_tangent.xyz ), geometry_tangent.w );
62
+ // a reflection changes the tangent frame's handedness — see NODE3D_GLOBAL_FLAG_MIRRORED
63
+ let tangent_handedness = select(geometry_tangent.w, -geometry_tangent.w, is_mirrored);
64
+ let world_tangent = vec4( normalize( normal_model_matrix * geometry_tangent.xyz ), tangent_handedness );
51
65
  output.tangent = world_tangent;
52
66
 
53
67
  output.color = geo_vertex.color * material_info.albedo_color.rgb;
@@ -59,5 +73,8 @@ fn main(
59
73
  chunk_compute_normal_matrix_from_m4,
60
74
  chunk_read_meshlet_vertex_by_draw_index,
61
75
  chunk_scene_database_access,
76
+ chunk_node3d_flags,
77
+ chunk_triangle_winding_is_reversed,
78
+ chunk_triangle_list_reverse_winding,
62
79
  ]
63
80
  );
@@ -61,8 +61,9 @@ stacked-card case the way the reference did and MBOIT did not. MBOIT stays selec
61
61
  Its orchestrator [`graph_rasterize_meshes_transparent_oit.js`](../oit/graph_rasterize_meshes_transparent_oit.js)
62
62
  records, per frame:
63
63
 
64
- 1. `filter_materials_by_bucket` twice — `(Transparent, Triangles, Front)` and `(…, Double)`;
65
- `ShadeDrawSide.Back` transparent materials are dropped ([`:545-561`](../oit/graph_rasterize_meshes_transparent_oit.js)).
64
+ 1. `filter_materials_by_bucket` twice — `(Transparent, Triangles, Front)` and `(…, Double)`.
65
+ *2026-09-16: `ShadeDrawSide.Back` transparent materials used to be dropped here. They are not any
66
+ more — `Back` and `Front` are one bucket now, so asking for either returns both.*
66
67
  2. `graph_prepare_meshlet_draw_commands_by_material` twice — copy bucket, HZB mesh filter, expand to meshlets,
67
68
  HZB meshlet filter, count/scan/sort by material, build one indirect draw command per material.
68
69
  3. `MBOIT/generate moments` twice (front clears, double loads) — additive MRT into `r32float` + `rgba32float`,
@@ -486,8 +487,10 @@ unambiguous, must not break anything else, and must not be situational:
486
487
  known to be that.
487
488
  - **Sparse voxel texture** (slide 122) — *no*. The deck's own future work.
488
489
  - **Chroma skew** (§4).
489
- - **`ShadeDrawSide.Back` transparent materials** — dropped today by MBOIT; the same filter is used here so the
490
- two modes draw the same set. Fixing it is a bucket-filter change that belongs to both.
490
+ - **`ShadeDrawSide.Back` transparent materials** — ~~dropped today by MBOIT; the same filter is used here so
491
+ the two modes draw the same set. Fixing it is a bucket-filter change that belongs to both.~~ **Done,
492
+ 2026-09-16 (`ca95ad3ac`)**, and it was the bucket-filter change this predicted: `Back` is `Front` with
493
+ the winding reversed in the vertex shader, so both modes draw it and neither needed a third pass.
491
494
  - **Exposing the tunables on `Renderer`** — the constants in `AVBOIT_CONSTANTS.js` are the knobs; whether any
492
495
  deserves a public field is a question for after the page in §6 has been looked at. *Revision 2:* one did —
493
496
  the transmission tint, because it changes a material's meaning rather than a quality/cost trade; it lives