@woosh/meep-engine 2.107.0 → 2.108.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 (315) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/meep.cjs +255 -172
  3. package/build/meep.min.js +1 -1
  4. package/build/meep.module.js +255 -173
  5. package/editor/tools/paint/TerrainHeightPaintTool.js +5 -5
  6. package/package.json +1 -1
  7. package/src/core/binary/float_to_uint8.d.ts +7 -0
  8. package/src/core/binary/float_to_uint8.d.ts.map +1 -0
  9. package/src/core/binary/{float2uint8.js → float_to_uint8.js} +1 -1
  10. package/src/core/binary/int32_to_binary_string.d.ts +3 -2
  11. package/src/core/binary/int32_to_binary_string.d.ts.map +1 -1
  12. package/src/core/binary/int32_to_binary_string.js +18 -14
  13. package/src/core/binary/split_by_3.spec.d.ts +2 -0
  14. package/src/core/binary/split_by_3.spec.d.ts.map +1 -0
  15. package/src/core/binary/split_by_3.spec.js +22 -0
  16. package/src/core/binary/to_half_float_uint16.d.ts.map +1 -1
  17. package/src/core/binary/to_half_float_uint16.js +7 -5
  18. package/src/core/binary/uint8_to_float.d.ts +7 -0
  19. package/src/core/binary/uint8_to_float.d.ts.map +1 -0
  20. package/src/core/binary/{uint82float.js → uint8_to_float.js} +1 -1
  21. package/src/core/binary/uint8_to_float.spec.d.ts +2 -0
  22. package/src/core/binary/uint8_to_float.spec.d.ts.map +1 -0
  23. package/src/core/binary/uint8_to_float.spec.js +7 -0
  24. package/src/core/codegen/codeToBlob.d.ts +8 -0
  25. package/src/core/codegen/codeToBlob.d.ts.map +1 -0
  26. package/src/core/codegen/codeToBlob.js +36 -0
  27. package/src/core/codegen/codeToURL.d.ts +8 -0
  28. package/src/core/codegen/codeToURL.d.ts.map +1 -0
  29. package/src/core/codegen/codeToURL.js +22 -0
  30. package/src/core/collection/array/array_shuffle.d.ts +8 -0
  31. package/src/core/collection/array/array_shuffle.d.ts.map +1 -0
  32. package/src/core/collection/array/array_shuffle.js +22 -0
  33. package/src/core/collection/array/array_shuffle.spec.d.ts +2 -0
  34. package/src/core/collection/array/array_shuffle.spec.d.ts.map +1 -0
  35. package/src/core/collection/array/{randomizeArrayElementOrder.spec.js → array_shuffle.spec.js} +4 -4
  36. package/src/core/collection/array/isArrayEqualStrict.d.ts.map +1 -1
  37. package/src/core/collection/array/isArrayEqualStrict.js +2 -2
  38. package/src/core/collection/array/iterator/ArrayIteratorRandom.js +2 -2
  39. package/src/core/collection/array/randomMultipleFromArray.js +2 -2
  40. package/src/core/color/Color.d.ts.map +1 -1
  41. package/src/core/color/Color.js +16 -11
  42. package/src/core/color/hsv/hsv2rgb.js +4 -4
  43. package/src/core/color/hsv/rgb2hsv.d.ts +3 -3
  44. package/src/core/color/hsv/rgb2hsv.d.ts.map +1 -1
  45. package/src/core/color/hsv/rgb2hsv.js +11 -18
  46. package/src/core/color/rgb2uint24.js +4 -4
  47. package/src/core/color/rgb_to_luminance.d.ts +9 -0
  48. package/src/core/color/rgb_to_luminance.d.ts.map +1 -0
  49. package/src/core/color/rgb_to_luminance.js +10 -0
  50. package/src/core/color/sRGB/linear_to_sRGB.d.ts +1 -0
  51. package/src/core/color/sRGB/linear_to_sRGB.d.ts.map +1 -1
  52. package/src/core/color/sRGB/linear_to_sRGB.js +4 -4
  53. package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
  54. package/src/core/geom/3d/aabb/AABB3.js +4 -1
  55. package/src/core/geom/3d/aabb/aabb3_intersects_ray.js +3 -3
  56. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  57. package/src/core/geom/3d/shape/UnitSphereShape3D.js +14 -14
  58. package/src/core/geom/3d/sphere/harmonics/README.md +16 -2
  59. package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.d.ts +6 -0
  60. package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.d.ts.map +1 -0
  61. package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.js +17 -0
  62. package/src/core/geom/3d/sphere/harmonics/sh3_basis_at.d.ts.map +1 -1
  63. package/src/core/geom/3d/sphere/harmonics/sh3_basis_at.js +21 -9
  64. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.d.ts +3 -3
  65. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.d.ts.map +1 -1
  66. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js +35 -206
  67. package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts +8 -0
  68. package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts.map +1 -0
  69. package/src/core/geom/3d/sphere/harmonics/sh3_rotate.js +29 -0
  70. package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.js +10 -10
  71. package/src/core/geom/3d/sphere/harmonics/sh_index.d.ts +8 -0
  72. package/src/core/geom/3d/sphere/harmonics/sh_index.d.ts.map +1 -0
  73. package/src/core/geom/3d/sphere/harmonics/sh_index.js +9 -0
  74. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.d.ts +8 -0
  75. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.d.ts.map +1 -0
  76. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.js +44 -0
  77. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.d.ts +8 -0
  78. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.d.ts.map +1 -0
  79. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.js +86 -0
  80. package/src/core/geom/3d/sphere/in_sphere3d_robust.d.ts.map +1 -1
  81. package/src/core/geom/3d/sphere/in_sphere3d_robust.js +2 -1
  82. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +20 -1
  83. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
  84. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +53 -7
  85. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.spec.js +2 -2
  86. package/src/core/geom/3d/tetrahedra/build_tetrahedral_mesh_buffer_geometry.d.ts +1 -1
  87. package/src/core/geom/3d/tetrahedra/build_tetrahedral_mesh_buffer_geometry.d.ts.map +1 -1
  88. package/src/core/geom/3d/tetrahedra/build_tetrahedral_mesh_buffer_geometry.js +12 -7
  89. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.d.ts +13 -0
  90. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.d.ts.map +1 -0
  91. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.js +135 -0
  92. package/src/core/geom/3d/tetrahedra/prototypeTetrahedraBuilder.js +38 -24
  93. package/src/core/geom/3d/tetrahedra/{compute_circumsphere.d.ts → tetrahedron_compute_circumsphere.d.ts} +3 -5
  94. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.d.ts.map +1 -0
  95. package/src/core/geom/3d/tetrahedra/{compute_circumsphere.js → tetrahedron_compute_circumsphere.js} +2 -4
  96. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_signed_volume.d.ts.map +1 -1
  97. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_signed_volume.js +3 -1
  98. package/src/core/geom/Vector3.d.ts.map +1 -1
  99. package/src/core/geom/Vector3.js +4 -3
  100. package/src/core/geom/mat3/m3_multiply_vec3.d.ts +8 -0
  101. package/src/core/geom/mat3/m3_multiply_vec3.d.ts.map +1 -0
  102. package/src/core/geom/mat3/m3_multiply_vec3.js +21 -0
  103. package/src/core/geom/random/randomPointInSphere.d.ts +1 -1
  104. package/src/core/geom/random/randomPointInSphere.js +2 -2
  105. package/src/core/geom/random/randomPointOnSphere.d.ts +3 -3
  106. package/src/core/geom/random/randomPointOnSphere.d.ts.map +1 -1
  107. package/src/core/geom/random/randomPointOnSphere.js +5 -9
  108. package/src/core/geom/vec2/v2_cross_product.d.ts +15 -0
  109. package/src/core/geom/vec2/v2_cross_product.d.ts.map +1 -0
  110. package/src/core/geom/vec2/v2_cross_product.js +21 -0
  111. package/src/core/geom/vec3/v3_slerp.d.ts +1 -0
  112. package/src/core/geom/vec3/v3_slerp.d.ts.map +1 -1
  113. package/src/core/geom/vec3/v3_slerp.js +1 -0
  114. package/src/core/graph/MultiNode.d.ts +1 -1
  115. package/src/core/graph/MultiNode.js +1 -1
  116. package/src/core/graph/WeightedEdge.d.ts +6 -4
  117. package/src/core/graph/WeightedEdge.d.ts.map +1 -1
  118. package/src/core/graph/WeightedEdge.js +3 -0
  119. package/src/core/graph/coloring/colorizeGraph.js +19 -19
  120. package/src/core/graph/convert_graph_to_dot_string.d.ts +1 -1
  121. package/src/core/graph/convert_graph_to_dot_string.d.ts.map +1 -1
  122. package/src/core/graph/convert_graph_to_dot_string.js +10 -6
  123. package/src/core/graph/graph_compute_adjacency_matrix.d.ts +9 -0
  124. package/src/core/graph/graph_compute_adjacency_matrix.d.ts.map +1 -0
  125. package/src/core/graph/{graph_adjacency_matrix.js → graph_compute_adjacency_matrix.js} +1 -2
  126. package/src/core/graph/graph_compute_degree_matrix.d.ts +10 -0
  127. package/src/core/graph/graph_compute_degree_matrix.d.ts.map +1 -0
  128. package/src/core/graph/graph_compute_degree_matrix.js +23 -0
  129. package/src/core/graph/graph_compute_distance_matrix.d.ts +13 -0
  130. package/src/core/graph/graph_compute_distance_matrix.d.ts.map +1 -0
  131. package/src/core/graph/graph_compute_distance_matrix.js +103 -0
  132. package/src/core/graph/{graph_laplacian_matrix.d.ts → graph_compute_laplacian_matrix.d.ts} +2 -2
  133. package/src/core/graph/graph_compute_laplacian_matrix.d.ts.map +1 -0
  134. package/src/core/graph/{graph_laplacian_matrix.js → graph_compute_laplacian_matrix.js} +6 -6
  135. package/src/core/graph/graph_k_means_cluster.d.ts.map +1 -1
  136. package/src/core/graph/graph_k_means_cluster.js +4 -119
  137. package/src/core/graph/{coarsen_graph.d.ts → mn_graph_coarsen.d.ts} +2 -2
  138. package/src/core/graph/mn_graph_coarsen.d.ts.map +1 -0
  139. package/src/core/graph/{coarsen_graph.js → mn_graph_coarsen.js} +1 -1
  140. package/src/core/graph/mn_graph_coarsen.spec.d.ts +2 -0
  141. package/src/core/graph/mn_graph_coarsen.spec.d.ts.map +1 -0
  142. package/src/core/graph/{coarsen_graph.spec.js → mn_graph_coarsen.spec.js} +4 -4
  143. package/src/core/graph/mn_graph_collapse_weighted_edge.d.ts +1 -0
  144. package/src/core/graph/mn_graph_collapse_weighted_edge.d.ts.map +1 -1
  145. package/src/core/graph/mn_graph_collapse_weighted_edge.js +7 -1
  146. package/src/core/math/physics/brdf/brdf_burley.d.ts.map +1 -1
  147. package/src/core/math/physics/brdf/brdf_burley.js +9 -1
  148. package/src/core/math/physics/brdf/{D_GGX.d.ts → diffuse_GGX.d.ts} +2 -2
  149. package/src/core/math/physics/brdf/diffuse_GGX.d.ts.map +1 -0
  150. package/src/core/math/physics/brdf/{D_GGX.js → diffuse_GGX.js} +1 -1
  151. package/src/core/math/physics/brdf/fresnel_Schlick.d.ts +3 -0
  152. package/src/core/math/physics/brdf/fresnel_Schlick.d.ts.map +1 -0
  153. package/src/core/math/physics/brdf/fresnel_Schlick.js +3 -0
  154. package/src/core/math/physics/brdf/fresnel_Schlick_optimized.d.ts +9 -0
  155. package/src/core/math/physics/brdf/fresnel_Schlick_optimized.d.ts.map +1 -0
  156. package/src/core/math/physics/brdf/fresnel_Schlick_optimized.js +12 -0
  157. package/src/core/math/physics/brdf/fresnel_Schlick_original.d.ts +9 -0
  158. package/src/core/math/physics/brdf/fresnel_Schlick_original.d.ts.map +1 -0
  159. package/src/core/math/physics/brdf/fresnel_Schlick_original.js +10 -0
  160. package/src/core/math/physics/bsdf/bsdf_schlick.d.ts.map +1 -1
  161. package/src/core/math/physics/bsdf/bsdf_schlick.js +3 -11
  162. package/src/core/math/physics/ior_to_reflectivity.d.ts +7 -0
  163. package/src/core/math/physics/ior_to_reflectivity.d.ts.map +1 -0
  164. package/src/core/math/physics/ior_to_reflectivity.js +9 -0
  165. package/src/core/math/physics/pdf/README.md +1 -0
  166. package/src/core/math/physics/pdf/pdf_GGX.d.ts +16 -0
  167. package/src/core/math/physics/pdf/pdf_GGX.d.ts.map +1 -0
  168. package/src/core/math/physics/pdf/pdf_GGX.js +25 -0
  169. package/src/core/math/physics/reflectivity_to_ior.d.ts +7 -0
  170. package/src/core/math/physics/reflectivity_to_ior.d.ts.map +1 -0
  171. package/src/core/math/physics/reflectivity_to_ior.js +8 -0
  172. package/src/core/process/task/util/randomCountTask.js +3 -3
  173. package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
  174. package/src/core/process/worker/WorkerBuilder.js +5 -35
  175. package/src/engine/EngineHarness.d.ts +10 -1
  176. package/src/engine/EngineHarness.d.ts.map +1 -1
  177. package/src/engine/EngineHarness.js +22 -11
  178. package/src/engine/asset/loaders/ArrayBufferLoader.d.ts.map +1 -1
  179. package/src/engine/asset/loaders/ArrayBufferLoader.js +17 -10
  180. package/src/engine/asset/loaders/image/png/PNGReader.d.ts +25 -11
  181. package/src/engine/asset/loaders/image/png/PNGReader.d.ts.map +1 -1
  182. package/src/engine/asset/loaders/image/png/PNGReader.js +38 -24
  183. package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.d.ts.map +1 -1
  184. package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.js +5 -0
  185. package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +4 -4
  186. package/src/engine/graphics/GraphicsEngine.js +1 -1
  187. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  188. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +4 -0
  189. package/src/engine/graphics/ecs/light/LightSystem.d.ts.map +1 -1
  190. package/src/engine/graphics/ecs/light/LightSystem.js +2 -3
  191. package/src/engine/graphics/ecs/light/binding/three/ThreeLightBinding.d.ts +6 -0
  192. package/src/engine/graphics/ecs/light/binding/three/ThreeLightBinding.d.ts.map +1 -1
  193. package/src/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +22 -11
  194. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  195. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +7 -7
  196. package/src/engine/graphics/impostors/octahedral/bake/prepare_bake_material.js +3 -3
  197. package/src/engine/graphics/render/forward_plus/model/DirectionalLight.d.ts.map +1 -1
  198. package/src/engine/graphics/render/forward_plus/model/DirectionalLight.js +25 -25
  199. package/src/engine/graphics/sh3/SH3VisualisationMaterial.d.ts.map +1 -1
  200. package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +9 -6
  201. package/src/engine/graphics/sh3/fromCubeRenderTarget.d.ts +9 -0
  202. package/src/engine/graphics/sh3/fromCubeRenderTarget.d.ts.map +1 -0
  203. package/src/engine/graphics/sh3/fromCubeRenderTarget.js +145 -0
  204. package/src/engine/graphics/sh3/gi/tetrahedral_mesh_to_texture.d.ts +8 -0
  205. package/src/engine/graphics/sh3/gi/tetrahedral_mesh_to_texture.d.ts.map +1 -0
  206. package/src/engine/graphics/sh3/gi/tetrahedral_mesh_to_texture.js +51 -0
  207. package/src/engine/graphics/sh3/{LightProbeVolume.d.ts → lpv/LightProbeVolume.d.ts} +18 -7
  208. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -0
  209. package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +340 -0
  210. package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.d.ts +18 -0
  211. package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.d.ts.map +1 -0
  212. package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.js +44 -0
  213. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +12 -0
  214. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -0
  215. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +122 -0
  216. package/src/engine/graphics/sh3/lpv/ProbeRenderer.d.ts +29 -0
  217. package/src/engine/graphics/sh3/lpv/ProbeRenderer.d.ts.map +1 -0
  218. package/src/engine/graphics/sh3/lpv/ProbeRenderer.js +35 -0
  219. package/src/engine/graphics/sh3/lpv/WebGLCubeProbeRenderer.d.ts +27 -0
  220. package/src/engine/graphics/sh3/lpv/WebGLCubeProbeRenderer.d.ts.map +1 -0
  221. package/src/engine/graphics/sh3/lpv/WebGLCubeProbeRenderer.js +158 -0
  222. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts +11 -0
  223. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts.map +1 -0
  224. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.js +127 -0
  225. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts +12 -0
  226. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts.map +1 -0
  227. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.js +89 -0
  228. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts +90 -0
  229. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -0
  230. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +352 -0
  231. package/src/engine/graphics/sh3/path_tracer/PathTracer.d.ts +5 -91
  232. package/src/engine/graphics/sh3/path_tracer/PathTracer.d.ts.map +1 -1
  233. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +41 -477
  234. package/src/engine/graphics/sh3/path_tracer/make_one_vector3.d.ts +1 -0
  235. package/src/engine/graphics/sh3/path_tracer/make_one_vector3.d.ts.map +1 -1
  236. package/src/engine/graphics/sh3/path_tracer/make_one_vector3.js +6 -3
  237. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +38 -62
  238. package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.d.ts.map +1 -1
  239. package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.js +7 -1
  240. package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts +2 -2
  241. package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts.map +1 -1
  242. package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.js +1 -1
  243. package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.d.ts +10 -0
  244. package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.d.ts.map +1 -0
  245. package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.js +20 -0
  246. package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.d.ts +10 -0
  247. package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.d.ts.map +1 -0
  248. package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.js +31 -0
  249. package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.d.ts +9 -0
  250. package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.d.ts.map +1 -0
  251. package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.js +21 -0
  252. package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.d.ts +3 -0
  253. package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.d.ts.map +1 -0
  254. package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.js +3 -0
  255. package/src/engine/graphics/sh3/path_tracer/texture/apply_texture_clamping_to_coordinate.d.ts.map +1 -0
  256. package/src/engine/graphics/sh3/path_tracer/{apply_texture_clamping_to_coordinate.js → texture/apply_texture_clamping_to_coordinate.js} +2 -2
  257. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.d.ts +11 -0
  258. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.d.ts.map +1 -0
  259. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +86 -0
  260. package/src/engine/graphics/sh3/path_tracer/texture/sample_texture.d.ts +10 -0
  261. package/src/engine/graphics/sh3/path_tracer/texture/sample_texture.d.ts.map +1 -0
  262. package/src/engine/graphics/sh3/path_tracer/texture/sample_texture.js +55 -0
  263. package/src/engine/graphics/sh3/path_tracer/vec3_uint8_to_float.js +4 -4
  264. package/src/engine/graphics/sh3/prototypeSH3Probe.js +145 -185
  265. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts +5 -5
  266. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts.map +1 -1
  267. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +8 -8
  268. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts +13 -0
  269. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts.map +1 -0
  270. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.js +54 -0
  271. package/src/engine/graphics/texture/AttributeDataTexture.d.ts +2 -2
  272. package/src/engine/graphics/texture/AttributeDataTexture.d.ts.map +1 -1
  273. package/src/engine/graphics/texture/AttributeDataTexture.js +11 -11
  274. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
  275. package/src/engine/graphics/texture/sampler/Sampler2D.js +2 -2
  276. package/src/engine/input/ecs/systems/InputControllerSystem.js +1 -1
  277. package/src/engine/network/convertPathToURL.d.ts +3 -1
  278. package/src/engine/network/convertPathToURL.d.ts.map +1 -1
  279. package/src/engine/network/convertPathToURL.js +68 -51
  280. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  281. package/src/engine/physics/fluid/SliceVisualiser.js +4 -4
  282. package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
  283. package/src/generation/filtering/numeric/CellFilterCache.js +1 -0
  284. package/src/view/elements/ColorPickerView.d.ts.map +1 -1
  285. package/src/view/elements/ColorPickerView.js +7 -7
  286. package/src/core/binary/float2uint8.d.ts +0 -7
  287. package/src/core/binary/float2uint8.d.ts.map +0 -1
  288. package/src/core/binary/uint82float.d.ts +0 -7
  289. package/src/core/binary/uint82float.d.ts.map +0 -1
  290. package/src/core/binary/uint82float.spec.d.ts +0 -2
  291. package/src/core/binary/uint82float.spec.d.ts.map +0 -1
  292. package/src/core/binary/uint82float.spec.js +0 -7
  293. package/src/core/collection/array/randomizeArrayElementOrder.d.ts +0 -8
  294. package/src/core/collection/array/randomizeArrayElementOrder.d.ts.map +0 -1
  295. package/src/core/collection/array/randomizeArrayElementOrder.js +0 -24
  296. package/src/core/collection/array/randomizeArrayElementOrder.spec.d.ts +0 -2
  297. package/src/core/collection/array/randomizeArrayElementOrder.spec.d.ts.map +0 -1
  298. package/src/core/geom/3d/tetrahedra/compute_circumsphere.d.ts.map +0 -1
  299. package/src/core/graph/coarsen_graph.d.ts.map +0 -1
  300. package/src/core/graph/coarsen_graph.spec.d.ts +0 -2
  301. package/src/core/graph/coarsen_graph.spec.d.ts.map +0 -1
  302. package/src/core/graph/graph_adjacency_matrix.d.ts +0 -9
  303. package/src/core/graph/graph_adjacency_matrix.d.ts.map +0 -1
  304. package/src/core/graph/graph_degree_matrix.d.ts +0 -9
  305. package/src/core/graph/graph_degree_matrix.d.ts.map +0 -1
  306. package/src/core/graph/graph_degree_matrix.js +0 -18
  307. package/src/core/graph/graph_laplacian_matrix.d.ts.map +0 -1
  308. package/src/core/math/physics/brdf/D_GGX.d.ts.map +0 -1
  309. package/src/engine/graphics/sh3/LightProbeVolume.d.ts.map +0 -1
  310. package/src/engine/graphics/sh3/LightProbeVolume.js +0 -609
  311. package/src/engine/graphics/sh3/path_tracer/apply_texture_clamping_to_coordinate.d.ts.map +0 -1
  312. package/src/engine/graphics/sh3/visualise_probe.d.ts +0 -12
  313. package/src/engine/graphics/sh3/visualise_probe.d.ts.map +0 -1
  314. package/src/engine/graphics/sh3/visualise_probe.js +0 -40
  315. /package/src/engine/graphics/sh3/path_tracer/{apply_texture_clamping_to_coordinate.d.ts → texture/apply_texture_clamping_to_coordinate.d.ts} +0 -0
@@ -0,0 +1,352 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { BVH } from "../../../../core/bvh2/bvh3/BVH.js";
3
+ import { ebvh_sort_for_traversal_depth_first } from "../../../../core/bvh2/bvh3/ebvh_sort_for_traversal_depth_first.js";
4
+ import { bvh_query_user_data_ray } from "../../../../core/bvh2/bvh3/query/bvh_query_user_data_ray.js";
5
+ import { array_copy } from "../../../../core/collection/array/array_copy.js";
6
+ import { aabb3_matrix4_project } from "../../../../core/geom/3d/aabb/aabb3_matrix4_project.js";
7
+ import { ray3_array_compose } from "../../../../core/geom/3d/ray/ray3_array_compose.js";
8
+ import { v3_dot } from "../../../../core/geom/vec3/v3_dot.js";
9
+ import { TextureAttachmentsByMaterialType } from "../../../asset/loaders/material/TextureAttachmensByMaterialType.js";
10
+ import { AbstractLight } from "../../render/forward_plus/model/AbstractLight.js";
11
+ import { convertTexture2Sampler2D } from "../../texture/sampler/convertTexture2Sampler2D.js";
12
+ import { ensureGeometryBoundingBox } from "../../util/ensureGeometryBoundingBox.js";
13
+ import { GeometryBVHBatched } from "./GeometryBVHBatched.js";
14
+ import { make_vector3 } from "./make_one_vector3.js";
15
+ import { PathTracedMesh } from "./PathTracedMesh.js";
16
+ import { sample_material } from "./texture/sample_material.js";
17
+
18
+ const temp_ray_results = [];
19
+ const _ray_1 = [];
20
+ const tmp_0 = [];
21
+ const null_output = [];
22
+
23
+ export class PathTracedScene {
24
+
25
+
26
+ /**
27
+ *
28
+ * @type {BVH}
29
+ */
30
+ bvh_top_level = new BVH();
31
+
32
+ /**
33
+ *
34
+ * @type {Map<number, PathTracedMesh>}
35
+ */
36
+ meshes = new Map();
37
+
38
+ /**
39
+ *
40
+ * @type {AbstractLight[]}
41
+ */
42
+ __lights = [];
43
+
44
+ /**
45
+ *
46
+ * @type {Map<THREE.BufferGeometry, GeometryBVHBatched>}
47
+ */
48
+ geo_cache = new Map();
49
+
50
+ /**
51
+ * Maps {@link Texture.id} to relevant sampler
52
+ * @type {Map<number, Sampler2D>}
53
+ */
54
+ textures = new Map();
55
+
56
+
57
+ /**
58
+ *
59
+ * @type {function}
60
+ * @private
61
+ */
62
+ __background_sampler = make_vector3(0, 0, 0);
63
+
64
+ optimize() {
65
+ this.bvh_top_level.trim();
66
+ ebvh_sort_for_traversal_depth_first(this.bvh_top_level);
67
+ }
68
+
69
+ async build() {
70
+ for (const [id, mesh] of this.meshes) {
71
+ const material = mesh.material;
72
+
73
+ //patch textures
74
+ const materialType = material.type;
75
+
76
+ /**
77
+ *
78
+ * @type {TextureAttachment[]}
79
+ */
80
+ const attachments = TextureAttachmentsByMaterialType[materialType];
81
+
82
+ if (attachments === undefined) {
83
+ // unsupported
84
+ continue;
85
+ }
86
+
87
+ for (let i = 0; i < attachments.length; i++) {
88
+ const attachment = attachments[i];
89
+
90
+ const texture = attachment.read(material);
91
+
92
+ if (texture === undefined || texture === null) {
93
+ continue;
94
+ }
95
+
96
+ if (this.textures.has(texture.id)) {
97
+ continue;
98
+ }
99
+
100
+ const sampler2D = convertTexture2Sampler2D(texture, undefined, undefined, false);
101
+
102
+ this.textures.set(texture.id, sampler2D);
103
+ }
104
+ }
105
+ }
106
+
107
+ /**
108
+ *
109
+ * @param {THREE.BufferGeometry} geo
110
+ * @return {GeometryBVHBatched}
111
+ */
112
+ obtainGeometryBVH(geo) {
113
+ const cached = this.geo_cache.get(geo);
114
+
115
+ if (cached !== undefined) {
116
+ return cached;
117
+ }
118
+
119
+ const bvh8 = new GeometryBVHBatched();
120
+
121
+ bvh8.build(geo);
122
+
123
+ this.geo_cache.set(geo, bvh8);
124
+
125
+ return bvh8;
126
+ }
127
+
128
+ /**
129
+ *
130
+ * @param {AbstractLight} light
131
+ */
132
+ addLight(light) {
133
+ assert.isInstanceOf(light, AbstractLight, 'light');
134
+
135
+ this.__lights.push(light);
136
+ }
137
+
138
+ /**
139
+ *
140
+ * @param {THREE.BufferGeometry} geo
141
+ * @param {THREE.Material} material
142
+ * @param {mat4|number[]} transform
143
+ */
144
+ addMesh(geo, material, transform) {
145
+ //meshopt_optimizeVertexCache(geo.getIndex().array, geo.getIndex().array, geo.getIndex().array.length, geo.getAttribute('position').count);
146
+
147
+ const mesh = new PathTracedMesh();
148
+ mesh.geometry = geo;
149
+ mesh.material = material;
150
+ mesh.transform = transform;
151
+
152
+
153
+ mesh.geo_bvh = this.obtainGeometryBVH(geo);
154
+
155
+ const bvh = this.bvh_top_level;
156
+
157
+ const bvh_node_id = bvh.allocate_node();
158
+
159
+ mesh.__bvh_node_id = bvh_node_id;
160
+
161
+ ensureGeometryBoundingBox(geo);
162
+
163
+ const aabb = [
164
+ geo.boundingBox.min.x,
165
+ geo.boundingBox.min.y,
166
+ geo.boundingBox.min.z,
167
+ geo.boundingBox.max.x,
168
+ geo.boundingBox.max.y,
169
+ geo.boundingBox.max.z,
170
+ ];
171
+
172
+ const aabb_t = [];
173
+
174
+ aabb3_matrix4_project(aabb_t, aabb, transform);
175
+
176
+ bvh.node_set_aabb(
177
+ bvh_node_id,
178
+ aabb_t
179
+ );
180
+ bvh.node_set_user_data(
181
+ bvh_node_id,
182
+ mesh.id
183
+ );
184
+ bvh.insert_leaf(bvh_node_id);
185
+
186
+ this.meshes.set(mesh.id, mesh);
187
+ }
188
+
189
+ /**
190
+ *
191
+ * @param {number[]} out [color_r, color_g, color_b, normal_x, normal_y, normal_z]
192
+ * @param {number[]} hit
193
+ */
194
+ sample_material(out, hit) {
195
+ const primitive_id = hit[9];
196
+ const instance_id = hit[10];
197
+ const u = hit[7];
198
+ const v = hit[8];
199
+
200
+ out[0] = 1;
201
+ out[1] = 1;
202
+ out[2] = 1;
203
+
204
+ /**
205
+ *
206
+ * @type {PathTracedMesh}
207
+ */
208
+ const mesh = this.meshes.get(instance_id);
209
+
210
+ if (mesh === undefined) {
211
+ // instance not found
212
+ return;
213
+ }
214
+
215
+ sample_material(out, mesh, this.textures, primitive_id, u, v);
216
+
217
+ }
218
+
219
+ /**
220
+ *
221
+ * @param {number[]} out
222
+ * @param {number[]} ray
223
+ * @param {number} min_distance
224
+ * @param {number} max_distance
225
+ * @return {number}
226
+ */
227
+ trace(out, ray, min_distance, max_distance) {
228
+ const bvh = this.bvh_top_level;
229
+
230
+ const hit_count = bvh_query_user_data_ray(
231
+ bvh, bvh.root,
232
+ temp_ray_results, 0,
233
+ ray[0], ray[1], ray[2],
234
+ ray[3], ray[4], ray[5]
235
+ );
236
+
237
+ let nearest_hit_distance = max_distance;
238
+ let nearest_mesh = null;
239
+
240
+
241
+ for (let i = 0; i < hit_count; i++) {
242
+ const node_user_data = temp_ray_results[i];
243
+
244
+ const mesh = this.meshes.get(node_user_data);
245
+
246
+ const distance_to_hit = mesh.hit(tmp_0, ray, min_distance, nearest_hit_distance);
247
+
248
+ if (distance_to_hit >= 0) {
249
+ // since raycast in leaf nodes is already bound by maximum distance, any hit we get is necessarily a closer hit than before
250
+ nearest_hit_distance = distance_to_hit;
251
+ nearest_mesh = mesh;
252
+
253
+ array_copy(tmp_0, 0, out, 0, 11);
254
+ }
255
+ }
256
+
257
+ if (nearest_hit_distance !== max_distance) {
258
+
259
+ // out[6] = nearest_mesh;
260
+
261
+ return nearest_hit_distance;
262
+ }
263
+
264
+ return -1;
265
+ }
266
+
267
+ /**
268
+ *
269
+ * @param {number[]} out
270
+ * @param {number} out_offset
271
+ * @param {number[]} direction
272
+ * @param {number} direction_offset
273
+ */
274
+ sample_background(out, out_offset, direction, direction_offset) {
275
+ this.__background_sampler(out, out_offset, direction, direction_offset);
276
+ }
277
+
278
+ /**
279
+ *
280
+ * @param {number[]} out
281
+ * @param {number} out_offset
282
+ * @param {number[]} ray
283
+ * @param {number} ray_address
284
+ * @returns {boolean}
285
+ */
286
+ sample_lights(out, out_offset, ray, ray_address) {
287
+ let lights_sampled = false;
288
+
289
+ const lights = this.__lights;
290
+ const light_count = lights.length;
291
+
292
+ for (let i = 0; i < 3; i++) {
293
+ // initialize contribution to 0
294
+ out[out_offset + i] = 0;
295
+ }
296
+
297
+ for (let i = 0; i < light_count; i++) {
298
+ const light = lights[i];
299
+
300
+ if (light.isDirectionalLight === true) {
301
+ const dir = light.direction;
302
+
303
+ // see https://github.com/mrdoob/three.js/blob/f0a9e0cf90a2f1ba5017fcb7fd46f02748b920cf/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js#L172
304
+
305
+ const ray_direction_x = ray[ray_address + 3];
306
+ const ray_direction_y = ray[ray_address + 4];
307
+ const ray_direction_z = ray[ray_address + 5];
308
+
309
+ const light_dir_inv_x = -dir.x;
310
+ const light_dir_inv_y = -dir.y;
311
+ const light_dir_inv_z = -dir.z;
312
+
313
+ const dotNL = v3_dot(
314
+ ray_direction_x, ray_direction_y, ray_direction_z,
315
+ light_dir_inv_x, light_dir_inv_y, light_dir_inv_z
316
+ );
317
+
318
+ if (dotNL <= 0) {
319
+ // no contribution, facing away from the light
320
+ continue;
321
+ }
322
+
323
+ const ray_origin_x = ray[ray_address + 0];
324
+ const ray_origin_y = ray[ray_address + 1];
325
+ const ray_origin_z = ray[ray_address + 2];
326
+
327
+ ray3_array_compose(_ray_1,
328
+ ray_origin_x, ray_origin_y, ray_origin_z,
329
+ light_dir_inv_x, light_dir_inv_y, light_dir_inv_z
330
+ );
331
+
332
+ // check if there are any obstacles in the direction of the light
333
+ if (this.trace(null_output, _ray_1, 0.0001, Infinity) > 0) {
334
+ // light is occluded
335
+ continue;
336
+ }
337
+
338
+
339
+ const intensity = dotNL * light.intensity.getValue();
340
+
341
+ for (let j = 0; j < 3; j++) {
342
+ // irradiance
343
+ out[out_offset + j] += light.color[j] * intensity;
344
+ }
345
+
346
+ lights_sampled = true;
347
+ }
348
+ }
349
+
350
+ return lights_sampled;
351
+ }
352
+ }
@@ -1,100 +1,14 @@
1
- /// <reference types="gl-matrix/index.js" />
2
1
  export class PathTracer {
3
- /**
4
- *
5
- * @type {BVH}
6
- */
7
- bvh_top_level: BVH;
8
- /**
9
- *
10
- * @type {Map<number, PathTracedMesh>}
11
- */
12
- meshes: Map<number, PathTracedMesh>;
13
- /**
14
- *
15
- * @type {AbstractLight[]}
16
- */
17
- __lights: AbstractLight[];
18
- /**
19
- *
20
- * @type {Map<THREE.BufferGeometry, GeometryBVHBatched>}
21
- */
22
- geo_cache: Map<THREE.BufferGeometry, GeometryBVHBatched>;
23
- /**
24
- * Maps {@link Texture.id} to relevant sampler
25
- * @type {Map<number, Sampler2D>}
26
- */
27
- textures: Map<number, Sampler2D>;
28
- /**
29
- *
30
- * @type {function}
31
- * @private
32
- */
33
- private __background_sampler;
34
- /**
35
- *
36
- * @param {THREE.BufferGeometry} geo
37
- * @return {GeometryBVHBatched}
38
- */
39
- obtainGeometryBVH(geo: THREE.BufferGeometry): GeometryBVHBatched;
40
- optimize(): void;
41
- build(): Promise<void>;
42
- /**
43
- *
44
- * @param {AbstractLight} light
45
- */
46
- addLight(light: AbstractLight): void;
47
- /**
48
- *
49
- * @param {THREE.BufferGeometry} geo
50
- * @param {THREE.Material} material
51
- * @param {mat4|number[]} transform
52
- */
53
- addMesh(geo: THREE.BufferGeometry, material: THREE.Material, transform: mat4 | number[]): void;
54
- /**
55
- *
56
- * @param {number[]} out
57
- * @param {Texture} texture
58
- * @param {number} u
59
- * @param {number} v
60
- */
61
- sample_texture(out: number[], texture: Texture, u: number, v: number): void;
62
- /**
63
- *
64
- * @param {number[]} out [color_r, color_g, color_b, normal_x, normal_y, normal_z]
65
- * @param {number[]} hit
66
- */
67
- sample_material(out: number[], hit: number[]): void;
68
2
  /**
69
3
  *
70
4
  * @param {number[]} out
71
5
  * @param {number[]} ray
72
- * @param {number} min_distance
73
6
  * @param {number} max_distance
74
- * @return {number}
75
- */
76
- trace(out: number[], ray: number[], min_distance: number, max_distance: number): number;
77
- /**
78
- *
79
- * @param {number[]} out
80
- * @param {number} out_offset
81
- * @param {number[]} direction
82
- * @param {number} direction_offset
83
- */
84
- sample_background(out: number[], out_offset: number, direction: number[], direction_offset: number): void;
85
- /**
86
- *
87
- * @param {number[]} out
88
- * @param {number} out_offset
89
- * @param {number[]} ray
90
- * @param {number} ray_address
91
- * @returns {boolean}
7
+ * @param {number} min_bounce
8
+ * @param {number} max_bounce
9
+ * @param {function} random
10
+ * @param {PathTracedScene} scene
92
11
  */
93
- sample_lights(out: number[], out_offset: number, ray: number[], ray_address: number): boolean;
94
- path_trace(out: any, ray: any, max_distance: any, max_bounce: any, random?: () => number): void;
12
+ path_trace(out: number[], ray: number[], max_distance: number, min_bounce: number, max_bounce: number, random: Function, scene: PathTracedScene): void;
95
13
  }
96
- import { BVH } from "../../../../core/bvh2/bvh3/BVH.js";
97
- import { PathTracedMesh } from "./PathTracedMesh.js";
98
- import { GeometryBVHBatched } from "./GeometryBVHBatched.js";
99
- import { mat4 } from "gl-matrix";
100
14
  //# sourceMappingURL=PathTracer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PathTracer.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/path_tracer/PathTracer.js"],"names":[],"mappings":";AA2DA;IAGQ;;;OAGG;IACH,eAFU,GAAG,CAEiB;IAE9B;;;OAGG;IACH,QAFU,IAAI,MAAM,EAAE,cAAc,CAAC,CAEd;IAEvB;;;OAGG;IACH,UAFU,eAAe,CAEP;IAElB;;;OAGG;IACH,WAFU,IAAI,MAAM,cAAc,EAAE,kBAAkB,CAAC,CAE7B;IAE1B;;;OAGG;IACH,UAFU,IAAI,MAAM,YAAY,CAEP;IAEzB;;;;OAIG;IACH,6BAA8C;IAGlD;;;;OAIG;IACH,uBAHW,MAAM,cAAc,GACnB,kBAAkB,CAgB7B;IAED,iBAGC;IAED,uBAoCC;IAED;;;OAGG;IACH,qCAEC;IAED;;;;;OAKG;IACH,aAJW,MAAM,cAAc,YACpB,MAAM,QAAQ,aACd,IAAI,GAAC,MAAM,EAAE,QA6CvB;IAED;;;;;;OAMG;IACH,oBALW,MAAM,EAAE,uBAER,MAAM,KACN,MAAM,QA+ChB;IAED;;;;OAIG;IACH,qBAHW,MAAM,EAAE,OACR,MAAM,EAAE,QAmFlB;IAED;;;;;;;OAOG;IACH,WANW,MAAM,EAAE,OACR,MAAM,EAAE,gBACR,MAAM,gBACN,MAAM,GACL,MAAM,CAwCjB;IAED;;;;;;OAMG;IACH,uBALW,MAAM,EAAE,cACR,MAAM,aACN,MAAM,EAAE,oBACR,MAAM,QAIhB;IAED;;;;;;;OAOG;IACH,mBANW,MAAM,EAAE,cACR,MAAM,OACN,MAAM,EAAE,eACR,MAAM,GACJ,OAAO,CAmEnB;IAED,gGAqDC;CACJ;oBA/hBmB,mCAAmC;+BAexB,qBAAqB;mCAHjB,yBAAyB;qBAtBjC,WAAW"}
1
+ {"version":3,"file":"PathTracer.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/path_tracer/PathTracer.js"],"names":[],"mappings":"AA2BA;IAGI;;;;;;;;;OASG;IACH,gBARW,MAAM,EAAE,OACR,MAAM,EAAE,gBACR,MAAM,cACN,MAAM,cACN,MAAM,kDAgFhB;CACJ"}