@woosh/meep-engine 2.109.0 → 2.109.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 (311) hide show
  1. package/build/meep.cjs +150 -199
  2. package/build/meep.min.js +1 -1
  3. package/build/meep.module.js +150 -199
  4. package/package.json +1 -1
  5. package/src/core/binary/BitSet.d.ts +6 -0
  6. package/src/core/binary/BitSet.d.ts.map +1 -1
  7. package/src/core/binary/BitSet.js +14 -42
  8. package/src/core/binary/align_32.d.ts +7 -0
  9. package/src/core/binary/align_32.d.ts.map +1 -0
  10. package/src/core/binary/align_32.js +8 -0
  11. package/src/core/binary/align_32.spec.d.ts +2 -0
  12. package/src/core/binary/align_32.spec.d.ts.map +1 -0
  13. package/src/core/binary/align_32.spec.js +11 -0
  14. package/src/core/binary/align_4.js +2 -1
  15. package/src/core/binary/ctz32.d.ts.map +1 -1
  16. package/src/core/binary/ctz32.js +12 -11
  17. package/src/core/binary/lsb_32.d.ts +9 -0
  18. package/src/core/binary/lsb_32.d.ts.map +1 -0
  19. package/src/core/binary/lsb_32.js +12 -0
  20. package/src/core/binary/msb_32.d.ts +2 -0
  21. package/src/core/binary/msb_32.d.ts.map +1 -0
  22. package/src/core/binary/msb_32.js +20 -0
  23. package/src/core/binary/msb_lut_de_bruijn.d.ts +7 -0
  24. package/src/core/binary/msb_lut_de_bruijn.d.ts.map +1 -0
  25. package/src/core/binary/msb_lut_de_bruijn.js +9 -0
  26. package/src/core/binary/reinterpret_int32_as_float32.d.ts +7 -0
  27. package/src/core/binary/reinterpret_int32_as_float32.d.ts.map +1 -0
  28. package/src/core/binary/reinterpret_int32_as_float32.js +14 -0
  29. package/src/core/binary/reverse_bits_uint32.d.ts +8 -0
  30. package/src/core/binary/reverse_bits_uint32.d.ts.map +1 -0
  31. package/src/core/binary/reverse_bits_uint32.js +17 -0
  32. package/src/core/binary/reverse_bits_uint32.spec.d.ts +2 -0
  33. package/src/core/binary/reverse_bits_uint32.spec.d.ts.map +1 -0
  34. package/src/core/binary/reverse_bits_uint32.spec.js +18 -0
  35. package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
  36. package/src/core/bvh2/bvh3/BVH.js +13 -18
  37. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
  38. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +3 -1
  39. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.d.ts.map +1 -1
  40. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +6 -7
  41. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.d.ts.map +1 -1
  42. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.js +4 -0
  43. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts +16 -0
  44. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts.map +1 -0
  45. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.js +130 -0
  46. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.d.ts +2 -0
  47. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.d.ts.map +1 -0
  48. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.js +1 -0
  49. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.d.ts +9 -0
  50. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.d.ts.map +1 -0
  51. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.js +31 -0
  52. package/src/core/collection/array/array_quick_sort_by_lookup_map.d.ts +9 -0
  53. package/src/core/collection/array/array_quick_sort_by_lookup_map.d.ts.map +1 -0
  54. package/src/core/collection/array/array_quick_sort_by_lookup_map.js +79 -0
  55. package/src/core/collection/array/array_quick_sort_by_lookup_uint.d.ts +8 -0
  56. package/src/core/collection/array/array_quick_sort_by_lookup_uint.d.ts.map +1 -0
  57. package/src/core/collection/array/{array_quick_sort_by_lookup.js → array_quick_sort_by_lookup_uint.js} +1 -1
  58. package/src/core/collection/array/array_shuffle.js +1 -1
  59. package/src/core/collection/array/array_swap_one.d.ts.map +1 -1
  60. package/src/core/collection/array/array_swap_one.js +6 -0
  61. package/src/core/events/signal/Signal.d.ts.map +1 -1
  62. package/src/core/events/signal/Signal.js +10 -10
  63. package/src/core/geom/2d/compute_triangle_area_2d.d.ts.map +1 -1
  64. package/src/core/geom/2d/compute_triangle_area_2d.js +5 -3
  65. package/src/core/geom/3d/Ray3.d.ts +6 -0
  66. package/src/core/geom/3d/Ray3.d.ts.map +1 -1
  67. package/src/core/geom/3d/Ray3.js +24 -0
  68. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.d.ts +16 -0
  69. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.d.ts.map +1 -0
  70. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.js +29 -0
  71. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.d.ts +2 -2
  72. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.d.ts.map +1 -1
  73. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.js +6 -6
  74. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.d.ts +11 -0
  75. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.d.ts.map +1 -0
  76. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.js +61 -0
  77. package/src/core/geom/3d/eulerAnglesFromMatrix.d.ts +2 -2
  78. package/src/core/geom/3d/eulerAnglesFromMatrix.d.ts.map +1 -1
  79. package/src/core/geom/3d/eulerAnglesFromMatrix.js +28 -25
  80. package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts +2 -2
  81. package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts.map +1 -1
  82. package/src/core/geom/3d/morton/v3_morton_encode_bounded.js +1 -1
  83. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts +2 -2
  84. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts.map +1 -1
  85. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.js +1 -1
  86. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.js +2 -2
  87. package/src/core/geom/3d/sphere/harmonics/sh3_convolve_with_cosine_kernel.js +2 -1
  88. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.d.ts +12 -0
  89. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.d.ts.map +1 -0
  90. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.js +40 -0
  91. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.d.ts +2 -0
  92. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.d.ts.map +1 -0
  93. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.js +27 -0
  94. package/src/core/geom/3d/sphere/sphere_intersects_ray.js +1 -1
  95. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.d.ts.map +1 -1
  96. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.js +24 -188
  97. package/src/core/geom/3d/tetrahedra/triangle/prototype.js +1 -1
  98. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts +11 -0
  99. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +1 -0
  100. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.js +42 -0
  101. package/src/core/geom/3d/topology/samples/sampleFloodFill.js +2 -2
  102. package/src/core/geom/3d/topology/tm_face_area.js +2 -2
  103. package/src/core/geom/3d/triangle/{computeTriangleSurfaceArea.d.ts → compute_triangle_area_3d.d.ts} +2 -2
  104. package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts.map +1 -0
  105. package/src/core/geom/3d/triangle/{computeTriangleSurfaceArea.js → compute_triangle_area_3d.js} +2 -4
  106. package/src/core/geom/Quaternion.d.ts.map +1 -1
  107. package/src/core/geom/Quaternion.js +13 -102
  108. package/src/core/geom/Quaternion.spec.js +2 -2
  109. package/src/core/geom/Vector1.d.ts.map +1 -1
  110. package/src/core/geom/Vector1.js +14 -6
  111. package/src/core/geom/vec/vector_copy.d.ts +10 -0
  112. package/src/core/geom/vec/vector_copy.d.ts.map +1 -0
  113. package/src/core/geom/vec/vector_copy.js +13 -0
  114. package/src/core/{math/vector_nd_dot.d.ts → geom/vec/vector_dot.d.ts} +2 -2
  115. package/src/core/geom/vec/vector_dot.d.ts.map +1 -0
  116. package/src/core/{math/vector_nd_dot.js → geom/vec/vector_dot.js} +1 -1
  117. package/src/core/{math/vector_nd_normalize.d.ts → geom/vec/vector_normalize.d.ts} +2 -2
  118. package/src/core/geom/vec/vector_normalize.d.ts.map +1 -0
  119. package/src/core/{math/vector_nd_normalize.js → geom/vec/vector_normalize.js} +1 -1
  120. package/src/core/geom/vec/vector_normalize.spec.d.ts +2 -0
  121. package/src/core/geom/vec/vector_normalize.spec.d.ts.map +1 -0
  122. package/src/core/{math/vector_nd_normalize.spec.js → geom/vec/vector_normalize.spec.js} +3 -3
  123. package/src/core/geom/vec/vector_scale_array.d.ts +11 -0
  124. package/src/core/geom/vec/vector_scale_array.d.ts.map +1 -0
  125. package/src/core/geom/vec/vector_scale_array.js +31 -0
  126. package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts +14 -0
  127. package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts.map +1 -0
  128. package/src/core/geom/vec3/{v3_shift_along_direction.js → v3_array_displace_in_direction.js} +1 -1
  129. package/src/core/geom/vec3/v3_displace_in_direction.d.ts +7 -7
  130. package/src/core/geom/vec3/v3_displace_in_direction.d.ts.map +1 -1
  131. package/src/core/geom/vec3/v3_displace_in_direction.js +20 -17
  132. package/src/core/geom/vec3/v3_displace_in_direction.spec.d.ts +2 -0
  133. package/src/core/geom/vec3/v3_displace_in_direction.spec.d.ts.map +1 -0
  134. package/src/core/geom/vec3/v3_displace_in_direction.spec.js +80 -0
  135. package/src/core/geom/vec3/v3_dot_array_array.js +2 -0
  136. package/src/core/geom/vec4/v4_length.d.ts +10 -0
  137. package/src/core/geom/vec4/v4_length.d.ts.map +1 -0
  138. package/src/core/geom/vec4/v4_length.js +13 -0
  139. package/src/core/geom/vec4/v4_length_sqr.js +2 -1
  140. package/src/core/graph/eigen/matrix_eigenvalues_in_place.spec.js +31 -1
  141. package/src/core/math/FLT_EPSILON_64.d.ts +6 -0
  142. package/src/core/math/FLT_EPSILON_64.d.ts.map +1 -0
  143. package/src/core/math/FLT_EPSILON_64.js +5 -0
  144. package/src/core/math/gaussian.d.ts +2 -2
  145. package/src/core/math/gaussian.js +2 -2
  146. package/src/core/math/linalg/README.md +1 -0
  147. package/src/core/math/linalg/lu_factor_linear_system.d.ts +13 -0
  148. package/src/core/math/linalg/lu_factor_linear_system.d.ts.map +1 -0
  149. package/src/core/math/linalg/lu_factor_linear_system.js +112 -0
  150. package/src/core/math/linalg/lu_solve_linear_system.d.ts +14 -0
  151. package/src/core/math/linalg/lu_solve_linear_system.d.ts.map +1 -0
  152. package/src/core/math/linalg/lu_solve_linear_system.js +51 -0
  153. package/src/core/math/linalg/solve_linear_system.d.ts +14 -0
  154. package/src/core/math/linalg/solve_linear_system.d.ts.map +1 -0
  155. package/src/core/math/linalg/solve_linear_system.js +52 -0
  156. package/src/core/math/linalg/solve_linear_system.spec.d.ts +2 -0
  157. package/src/core/math/linalg/solve_linear_system.spec.d.ts.map +1 -0
  158. package/src/core/math/linalg/solve_linear_system.spec.js +70 -0
  159. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.d.ts +10 -0
  160. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.d.ts.map +1 -0
  161. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.js +91 -0
  162. package/src/core/math/solveQuadratic.d.ts.map +1 -1
  163. package/src/core/math/solveQuadratic.js +2 -0
  164. package/src/core/math/statistics/gaussian_amplitude.d.ts +8 -0
  165. package/src/core/math/statistics/gaussian_amplitude.d.ts.map +1 -0
  166. package/src/core/math/statistics/gaussian_amplitude.js +13 -0
  167. package/src/core/math/statistics/halton_sequence.js +3 -3
  168. package/src/core/math/statistics/halton_sequence.spec.js +18 -0
  169. package/src/core/math/statistics/hammersley_sequence.d.ts +9 -0
  170. package/src/core/math/statistics/hammersley_sequence.d.ts.map +1 -0
  171. package/src/core/math/statistics/hammersley_sequence.js +25 -0
  172. package/src/core/math/statistics/hammersley_sequence_2d.d.ts +9 -0
  173. package/src/core/math/statistics/hammersley_sequence_2d.d.ts.map +1 -0
  174. package/src/core/math/statistics/hammersley_sequence_2d.js +17 -0
  175. package/src/core/math/statistics/radical_inverse_VdC_base_2.d.ts +8 -0
  176. package/src/core/math/statistics/radical_inverse_VdC_base_2.d.ts.map +1 -0
  177. package/src/core/math/statistics/radical_inverse_VdC_base_2.js +15 -0
  178. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.d.ts +2 -0
  179. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.d.ts.map +1 -0
  180. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.js +9 -0
  181. package/src/core/model/node-graph/node/NodeInstance.d.ts.map +1 -1
  182. package/src/core/model/node-graph/node/NodeInstance.js +44 -12
  183. package/src/core/model/node-graph/node/NodeInstance.spec.d.ts +2 -0
  184. package/src/core/model/node-graph/node/NodeInstance.spec.d.ts.map +1 -0
  185. package/src/core/model/node-graph/node/NodeInstance.spec.js +82 -0
  186. package/src/core/model/node-graph/node/NodeInstancePortReference.d.ts.map +1 -1
  187. package/src/core/model/node-graph/node/NodeInstancePortReference.js +9 -0
  188. package/src/core/model/node-graph/node/NodeInstancePortReference.spec.js +20 -0
  189. package/src/core/model/node-graph/node/Port.d.ts.map +1 -1
  190. package/src/core/model/node-graph/node/Port.js +5 -12
  191. package/src/core/model/node-graph/node/PortDirection.d.ts.map +1 -1
  192. package/src/core/model/node-graph/node/PortDirection.js +7 -1
  193. package/src/engine/asset/CORS/CrossOriginConfig.d.ts.map +1 -1
  194. package/src/engine/asset/CORS/CrossOriginConfig.js +6 -4
  195. package/src/engine/graphics/geometry/computeMeshSurfaceArea.js +2 -2
  196. package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.d.ts.map +1 -1
  197. package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.js +33 -3
  198. package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +9 -7
  199. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +6 -0
  200. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +1 -0
  201. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.js +18 -0
  202. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts +6 -0
  203. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +1 -0
  204. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.js +266 -0
  205. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts +7 -0
  206. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +1 -0
  207. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.js +19 -0
  208. package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +9 -9
  209. package/src/engine/graphics/sh3/fromCubeRenderTarget.d.ts.map +1 -1
  210. package/src/engine/graphics/sh3/fromCubeRenderTarget.js +14 -17
  211. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts.map +1 -1
  212. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.js +0 -2
  213. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts +7 -29
  214. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -1
  215. package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +52 -164
  216. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts +13 -0
  217. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts.map +1 -0
  218. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js +63 -0
  219. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +1 -0
  220. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
  221. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +33 -16
  222. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts.map +1 -1
  223. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.js +4 -29
  224. package/src/engine/graphics/sh3/lpv/{LightProbeVolumeSerializationAdapter.d.ts → serialization/LightProbeVolumeSerializationAdapter.d.ts} +2 -2
  225. package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.d.ts.map +1 -0
  226. package/src/engine/graphics/sh3/lpv/{LightProbeVolumeSerializationAdapter.js → serialization/LightProbeVolumeSerializationAdapter.js} +2 -2
  227. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts +13 -0
  228. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts.map +1 -0
  229. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.js +71 -0
  230. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.d.ts +2 -0
  231. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.d.ts.map +1 -0
  232. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.js +38 -0
  233. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts +1 -7
  234. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -1
  235. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +58 -147
  236. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts +13 -9
  237. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts.map +1 -1
  238. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.js +74 -54
  239. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts +23 -5
  240. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -1
  241. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +211 -59
  242. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +1 -1
  243. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts +15 -0
  244. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts.map +1 -0
  245. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.js +46 -0
  246. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts +14 -0
  247. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts.map +1 -0
  248. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.js +43 -0
  249. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -0
  250. package/src/engine/graphics/sh3/path_tracer/{compute_triangle_group_aabb3.js → geometry/compute_triangle_group_aabb3.js} +2 -2
  251. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.d.ts +12 -0
  252. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.d.ts.map +1 -0
  253. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.js +72 -0
  254. package/src/engine/graphics/sh3/path_tracer/geometry/sample_triangle_attribute.d.ts.map +1 -0
  255. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.d.ts +13 -0
  256. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.d.ts.map +1 -0
  257. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.js +48 -0
  258. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.d.ts +1 -0
  259. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.d.ts.map +1 -1
  260. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.js +4 -0
  261. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts +1 -0
  262. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts.map +1 -1
  263. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.js +8 -5
  264. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +24 -18
  265. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts +2 -2
  266. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts.map +1 -1
  267. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +1 -1
  268. package/src/engine/graphics/sh3/path_tracer/sampling/getBiasedNormalSample.d.ts.map +1 -0
  269. package/src/engine/graphics/sh3/path_tracer/{getBiasedNormalSample.js → sampling/getBiasedNormalSample.js} +1 -1
  270. package/src/engine/graphics/sh3/path_tracer/sampling/random_in_hemisphere.d.ts.map +1 -0
  271. package/src/engine/graphics/sh3/path_tracer/{random_in_hemisphere.js → sampling/random_in_hemisphere.js} +1 -1
  272. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts +12 -0
  273. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts.map +1 -0
  274. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.js +46 -0
  275. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +2 -2
  276. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts +7 -0
  277. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts.map +1 -0
  278. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.js +69 -0
  279. package/src/engine/graphics/sh3/prototypeSH3Probe.js +45 -7
  280. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts +11 -1
  281. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts.map +1 -1
  282. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.js +33 -16
  283. package/src/engine/graphics/texture/formatToChannelCount.d.ts.map +1 -1
  284. package/src/engine/graphics/texture/formatToChannelCount.js +14 -1
  285. package/src/engine/graphics/three/three_object_replace_materials.d.ts +7 -0
  286. package/src/engine/graphics/three/three_object_replace_materials.d.ts.map +1 -0
  287. package/src/engine/graphics/three/three_object_replace_materials.js +13 -0
  288. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.d.ts.map +1 -1
  289. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +6 -6
  290. package/src/core/collection/array/array_quick_sort_by_lookup.d.ts +0 -8
  291. package/src/core/collection/array/array_quick_sort_by_lookup.d.ts.map +0 -1
  292. package/src/core/geom/3d/triangle/computeTriangleSurfaceArea.d.ts.map +0 -1
  293. package/src/core/geom/vec3/v3_shift_along_direction.d.ts +0 -14
  294. package/src/core/geom/vec3/v3_shift_along_direction.d.ts.map +0 -1
  295. package/src/core/math/vector_nd_dot.d.ts.map +0 -1
  296. package/src/core/math/vector_nd_normalize.d.ts.map +0 -1
  297. package/src/core/math/vector_nd_normalize.spec.d.ts +0 -2
  298. package/src/core/math/vector_nd_normalize.spec.d.ts.map +0 -1
  299. package/src/engine/graphics/filter/FlipArrayViaCanvas.d.ts +0 -2
  300. package/src/engine/graphics/filter/FlipArrayViaCanvas.d.ts.map +0 -1
  301. package/src/engine/graphics/filter/FlipArrayViaCanvas.js +0 -13
  302. package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.d.ts.map +0 -1
  303. package/src/engine/graphics/sh3/path_tracer/compute_triangle_group_aabb3.d.ts.map +0 -1
  304. package/src/engine/graphics/sh3/path_tracer/getBiasedNormalSample.d.ts.map +0 -1
  305. package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.d.ts.map +0 -1
  306. package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts.map +0 -1
  307. /package/src/engine/graphics/sh3/path_tracer/{compute_triangle_group_aabb3.d.ts → geometry/compute_triangle_group_aabb3.d.ts} +0 -0
  308. /package/src/engine/graphics/sh3/path_tracer/{sample_triangle_attribute.d.ts → geometry/sample_triangle_attribute.d.ts} +0 -0
  309. /package/src/engine/graphics/sh3/path_tracer/{sample_triangle_attribute.js → geometry/sample_triangle_attribute.js} +0 -0
  310. /package/src/engine/graphics/sh3/path_tracer/{getBiasedNormalSample.d.ts → sampling/getBiasedNormalSample.d.ts} +0 -0
  311. /package/src/engine/graphics/sh3/path_tracer/{random_in_hemisphere.d.ts → sampling/random_in_hemisphere.d.ts} +0 -0
@@ -1,86 +1,42 @@
1
- import { LineBasicMaterial } from "three";
2
1
  import { array_copy } from "../../../../core/collection/array/array_copy.js";
3
- import {
4
- build_tetrahedral_mesh_buffer_geometry
5
- } from "../../../../core/geom/3d/tetrahedra/build_tetrahedral_mesh_buffer_geometry.js";
6
2
  import {
7
3
  compute_delaunay_tetrahedral_mesh
8
4
  } from "../../../../core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js";
9
5
  import { TetrahedralMesh } from "../../../../core/geom/3d/tetrahedra/TetrahedralMesh.js";
10
- import TaskGroup from "../../../../core/process/task/TaskGroup.js";
11
- import { actionTask } from "../../../../core/process/task/util/actionTask.js";
12
- import { countTask } from "../../../../core/process/task/util/countTask.js";
13
- import { promiseTask } from "../../../../core/process/task/util/promiseTask.js";
14
- import Entity from "../../../ecs/Entity.js";
6
+ import { EntityNode } from "../../../ecs/parent/EntityNode.js";
15
7
  import { Transform } from "../../../ecs/transform/Transform.js";
16
- import { DrawMode } from "../../ecs/mesh-v2/DrawMode.js";
17
- import { ShadedGeometry } from "../../ecs/mesh-v2/ShadedGeometry.js";
18
- import { ShadedGeometryFlags } from "../../ecs/mesh-v2/ShadedGeometryFlags.js";
19
- import { visualise_spherical_harmonic_sphere } from "../visualise_spherical_harmonic_sphere.js";
20
- import { PathTracerProbeRenderer } from "./PathTracerProbeRenderer.js";
21
-
8
+ import { sh3_make_shaded_geometry } from "../visualise_spherical_harmonic_sphere.js";
22
9
 
23
- class Baker {
24
- constructor() {
25
10
 
26
- // this._ren = new WebGLCubeProbeRenderer();
27
- this._ren = new PathTracerProbeRenderer();
28
- }
11
+ export class LightProbeVolume {
12
+ #version = 0;
29
13
 
30
14
  /**
31
15
  *
32
- * @param {number[]} position
33
- * @param {number} position_offset
34
- * @param {number[]} output
35
- * @param {number} output_offset
16
+ * @type {number[]}
36
17
  */
37
- bake_sh3_cube(
38
- position, position_offset,
39
- output, output_offset
40
- ) {
41
-
42
- this._ren.bake(position, position_offset, output, output_offset);
18
+ #probe_positions = [];
43
19
 
44
- }
20
+ #mesh = new TetrahedralMesh();
45
21
 
46
22
  /**
47
23
  *
24
+ * @type {number[]}
48
25
  */
49
- async prepare(ecd) {
26
+ #sh3_rgb = [];
50
27
 
51
- this._ren.build_scene(ecd);
52
-
53
- await this._ren.bake_start();
54
- }
55
-
56
- finish() {
57
- this._ren.bake_end();
58
- }
59
- }
60
-
61
- export class LightProbeVolume {
62
- #version = 0;
28
+ #probe_count = 0;
63
29
 
64
30
  get version() {
65
31
  return this.#version;
66
32
  }
67
33
 
68
- constructor() {
69
- this.__positions = [];
70
-
71
- this.__mesh = new TetrahedralMesh();
72
-
73
- this.__probe_data = [];
74
-
75
- this.__length = 0;
76
- }
77
-
78
34
  clear() {
79
- this.__positions.splice(0, this.__positions.length);
80
- this.__probe_data.splice(0, this.__probe_data.length);
81
- this.__mesh.clear();
35
+ this.#probe_positions.splice(0, this.#probe_positions.length);
36
+ this.#sh3_rgb.splice(0, this.#sh3_rgb.length);
37
+ this.#mesh.clear();
82
38
 
83
- this.__length = 0;
39
+ this.#probe_count = 0;
84
40
 
85
41
  this.#version++;
86
42
  }
@@ -90,23 +46,23 @@ export class LightProbeVolume {
90
46
  * @return {TetrahedralMesh}
91
47
  */
92
48
  get mesh() {
93
- return this.__mesh;
49
+ return this.#mesh;
94
50
  }
95
51
 
96
52
  get points() {
97
- return this.__positions;
53
+ return this.#probe_positions;
98
54
  }
99
55
 
100
56
  get harmonics() {
101
- return this.__probe_data;
57
+ return this.#sh3_rgb;
102
58
  }
103
59
 
104
60
  get count() {
105
- return this.__length;
61
+ return this.#probe_count;
106
62
  }
107
63
 
108
64
  set count(v) {
109
- this.__length = v;
65
+ this.#probe_count = v;
110
66
  }
111
67
 
112
68
  /**
@@ -116,17 +72,19 @@ export class LightProbeVolume {
116
72
  * @param {number} z
117
73
  */
118
74
  add_point(x, y, z) {
119
- const i = this.__length;
75
+ const i = this.#probe_count;
76
+
77
+ const i3 = i * 3;
120
78
 
121
- this.__positions[i * 3] = x;
122
- this.__positions[i * 3 + 1] = y;
123
- this.__positions[i * 3 + 2] = z;
79
+ this.#probe_positions[i3] = x;
80
+ this.#probe_positions[i3 + 1] = y;
81
+ this.#probe_positions[i3 + 2] = z;
124
82
 
125
83
  for (let j = 0; j < 9 * 3; j++) {
126
- this.__probe_data[i * 9 * 3 + j] = 1; // fill with white
84
+ this.#sh3_rgb[i3 * 9 + j] = 1; // fill with white
127
85
  }
128
86
 
129
- this.__length++;
87
+ this.#probe_count++;
130
88
  }
131
89
 
132
90
  /**
@@ -135,8 +93,8 @@ export class LightProbeVolume {
135
93
  * @param {number[]} source
136
94
  * @param {number} source_offset
137
95
  */
138
- white_probe(index, source, source_offset) {
139
- array_copy(source, source_offset, this.__probe_data, index * 9 * 3, 9 * 3);
96
+ write_probe(index, source, source_offset) {
97
+ array_copy(source, source_offset, this.#sh3_rgb, index * 9 * 3, 9 * 3);
140
98
  }
141
99
 
142
100
  /**
@@ -145,121 +103,51 @@ export class LightProbeVolume {
145
103
  build_mesh() {
146
104
 
147
105
  const t0 = performance.now();
148
- compute_delaunay_tetrahedral_mesh(this.__mesh, this.__positions, this.__length);
106
+ compute_delaunay_tetrahedral_mesh(this.#mesh, this.#probe_positions, this.#probe_count);
149
107
 
150
108
  const t1 = performance.now();
151
109
 
152
110
  // optional step to improve memory utilization
153
- this.__mesh.compact();
111
+ this.#mesh.compact();
154
112
 
155
113
  const t2 = performance.now();
156
114
 
157
- console.log(`Tetrahedral mesh (${this.__length} points, ${this.__mesh.size()} tets) build took ${t2 - t0}ms`);
115
+ console.log(`Tetrahedral mesh (${this.#probe_count} points, ${this.#mesh.size()} tets) build took ${t2 - t0}ms`);
158
116
  }
159
117
 
160
118
 
161
119
  /**
162
- * Bake light probes
163
- * @returns {TaskGroup}
164
- * @param {EntityComponentDataset} ecd
120
+ *
121
+ * @param {number} size
122
+ * @param {boolean} shadow
123
+ * @returns {EntityNode}
165
124
  */
166
- bake(ecd) {
167
- const baker = new Baker();
168
- // baker.set_bvh(entityManager.getSystem(ShadedGeometrySystem).__bvh_binary);
169
-
170
-
171
- const tPrepare = promiseTask(new Promise(async (resolve, reject) => {
172
- await baker.prepare(ecd);
173
-
174
- resolve();
175
- }), 'Prepare');
125
+ visualize_probes({ size = 0.2, shadow = false }) {
126
+ const parent = new EntityNode();
127
+ parent.entity.add(new Transform());
176
128
 
129
+ for (let i = 0; i < this.#probe_count; i++) {
130
+ const probe_node = new EntityNode();
177
131
 
178
- const probe_count = this.__length;
179
- const tBake = countTask(0, probe_count, (i) => {
180
132
 
181
- baker.bake_sh3_cube(
182
- this.__positions, i * 3,
183
- this.__probe_data, i * 9 * 3
133
+ probe_node.entity.add(new Transform());
134
+ probe_node.entity.add(
135
+ sh3_make_shaded_geometry(this.#sh3_rgb, i * 3 * 9, shadow)
184
136
  );
185
137
 
186
- });
187
- tBake.estimatedDuration = probe_count;
138
+ probe_node.transform.position.fromArray(this.#probe_positions, i * 3);
139
+ probe_node.transform.scale.setScalar(size);
188
140
 
189
- tBake.promise().then(() => {
190
-
191
- const duration = tBake.__executedCpuTime;
192
-
193
- console.log(`Baked ${probe_count} probes in ${duration}ms, ~${(duration / probe_count).toFixed(2)}ms per probe`);
194
-
195
- })
196
-
197
- const tFinish = actionTask(() => {
198
- baker.finish();
199
-
200
- this.#version++;
201
- });
202
-
203
- tFinish.addDependency(tBake);
204
- tBake.addDependency(tPrepare);
205
-
206
- return new TaskGroup([
207
- tPrepare, tBake, tFinish
208
- ], "LightProbeVolume Bake");
209
- }
210
-
211
- /**
212
- *
213
- * @param {EntityComponentDataset} ecd
214
- * @param {number} size
215
- * @param {boolean} shadow
216
- */
217
- visualize_probes({ ecd, size = 0.2, shadow = false }) {
218
- for (let i = 0; i < this.__length; i++) {
219
- visualise_spherical_harmonic_sphere({
220
- size,
221
- position: this.__positions,
222
- position_offset: i * 3,
223
- sh: this.__probe_data,
224
- sh_offset: i * 3 * 9,
225
- shadow: shadow
226
- }).build(ecd);
141
+ parent.addChild(probe_node);
227
142
  }
228
- }
229
143
 
230
- /**
231
- *
232
- * @param {EntityComponentDataset} ecd
233
- * @param {string|number} color CSS color definition
234
- * @param {number} opacity
235
- */
236
- visualize_mesh({ ecd, color = '#FF00FF', opacity = 0.35 }) {
237
-
238
- const geometry = build_tetrahedral_mesh_buffer_geometry(this.__mesh, this.__positions);
239
-
240
- const sg = ShadedGeometry.from(geometry, new LineBasicMaterial({
241
- color: color,
242
- transparent: true,
243
- opacity,
244
- depthWrite: false
245
- }), DrawMode.LineSegments);
144
+ return parent;
145
+ }
246
146
 
247
- sg.clearFlag(ShadedGeometryFlags.CastShadow);
248
- sg.clearFlag(ShadedGeometryFlags.ReceiveShadow);
249
147
 
250
- new Entity()
251
- .add(sg)
252
- .add(new Transform())
253
- .build(ecd);
148
+ incrementVersion() {
149
+ this.#version++;
254
150
  }
255
151
 
256
- /**
257
- *
258
- * @param {EntityComponentDataset} ecd
259
- * @returns {TaskGroup}
260
- */
261
- build(ecd) {
262
- this.build_mesh();
263
- return this.bake(ecd);
264
- }
265
152
  }
153
+
@@ -0,0 +1,13 @@
1
+ export class LightProbeVolumeBaker {
2
+ _ren: PathTracerProbeRenderer;
3
+ /**
4
+ * Bake light probes
5
+ * @returns {TaskGroup}
6
+ * @param {LightProbeVolume} lpv
7
+ * @param {EntityComponentDataset} ecd
8
+ */
9
+ bake(lpv: LightProbeVolume, ecd: EntityComponentDataset): TaskGroup;
10
+ }
11
+ import { PathTracerProbeRenderer } from "./PathTracerProbeRenderer.js";
12
+ import TaskGroup from "../../../../core/process/task/TaskGroup.js";
13
+ //# sourceMappingURL=LightProbeVolumeBaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightProbeVolumeBaker.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js"],"names":[],"mappings":"AAMA;IAGI,8BAAqC;IAGrC;;;;;OAKG;IACH,0DAJa,SAAS,CA+CrB;CACJ;wCA1DuC,8BAA8B;sBAJhD,4CAA4C"}
@@ -0,0 +1,63 @@
1
+ import TaskGroup from "../../../../core/process/task/TaskGroup.js";
2
+ import { actionTask } from "../../../../core/process/task/util/actionTask.js";
3
+ import { countTask } from "../../../../core/process/task/util/countTask.js";
4
+ import { promiseTask } from "../../../../core/process/task/util/promiseTask.js";
5
+ import { PathTracerProbeRenderer } from "./PathTracerProbeRenderer.js";
6
+
7
+ export class LightProbeVolumeBaker {
8
+
9
+ // this._ren = new WebGLCubeProbeRenderer();
10
+ _ren = new PathTracerProbeRenderer();
11
+
12
+
13
+ /**
14
+ * Bake light probes
15
+ * @returns {TaskGroup}
16
+ * @param {LightProbeVolume} lpv
17
+ * @param {EntityComponentDataset} ecd
18
+ */
19
+ bake(lpv, ecd) {
20
+ const renderer = this._ren;
21
+
22
+ const tPrepare = promiseTask(new Promise(async (resolve, reject) => {
23
+ renderer.build_scene(ecd);
24
+ await renderer.bake_start(ecd);
25
+
26
+ resolve();
27
+ }), 'Prepare');
28
+
29
+
30
+ const probe_count = lpv.count;
31
+
32
+ const tBake = countTask(0, probe_count, (i) => {
33
+
34
+ renderer.bake(
35
+ lpv.points, i * 3,
36
+ lpv.harmonics, i * 9 * 3
37
+ );
38
+
39
+ });
40
+ tBake.estimatedDuration = probe_count;
41
+
42
+ tBake.promise().then(() => {
43
+
44
+ const duration = tBake.__executedCpuTime;
45
+
46
+ console.log(`Baked ${probe_count} probes in ${duration}ms, ~${(duration / probe_count).toFixed(2)}ms per probe`);
47
+
48
+ })
49
+
50
+ const tFinish = actionTask(() => {
51
+ renderer.bake_end();
52
+
53
+ lpv.incrementVersion();
54
+ });
55
+
56
+ tFinish.addDependency(tBake);
57
+ tBake.addDependency(tPrepare);
58
+
59
+ return new TaskGroup([
60
+ tPrepare, tBake, tFinish
61
+ ], "LightProbeVolume Bake");
62
+ }
63
+ }
@@ -3,6 +3,7 @@ export class PathTracerProbeRenderer extends ProbeRenderer {
3
3
  sample_count: number;
4
4
  random: () => number;
5
5
  scene: PathTracedScene;
6
+ bake_depth(position: any, position_offset: any, output: any, output_offset: any): void;
6
7
  bake(position: any, position_offset: any, output: any, output_offset: any): void;
7
8
  build_scene(ecd: any): void;
8
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PathTracerProbeRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js"],"names":[],"mappings":"AAuBA;IACI,mBAA0B;IAC1B,qBAAmB;IACnB,qBAAyB;IAEzB,uBAA6B;IAE7B,iFA2CC;IASD,4BAsCC;CACJ;8BA3G6B,oBAAoB;2BADvB,8BAA8B;gCADzB,mCAAmC"}
1
+ {"version":3,"file":"PathTracerProbeRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js"],"names":[],"mappings":"AA0BA;IACI,mBAA0B;IAC1B,qBAAmB;IACnB,qBAAyB;IAEzB,uBAA6B;IAE7B,uFAoBC;IAED,iFAmCC;IASD,4BAsCC;CACJ;8BA1H6B,oBAAoB;2BADvB,8BAA8B;gCADzB,mCAAmC"}
@@ -3,7 +3,9 @@ import { sh3_basis_at } from "../../../../core/geom/3d/sphere/harmonics/sh3_basi
3
3
  import {
4
4
  sh3_dering_optimize_positive
5
5
  } from "../../../../core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js";
6
+ import { sh3_vector_accumulate } from "../../../../core/geom/3d/sphere/harmonics/sh3_vector_accumulate.js";
6
7
  import { randomPointOnSphere } from "../../../../core/geom/random/randomPointOnSphere.js";
8
+ import { vector_scale_array } from "../../../../core/geom/vec/vector_scale_array.js";
7
9
  import { seededRandom } from "../../../../core/math/random/seededRandom.js";
8
10
  import { Transform } from "../../../ecs/transform/Transform.js";
9
11
  import { Light } from "../../ecs/light/Light.js";
@@ -13,6 +15,7 @@ import { DirectionalLight } from "../../render/forward_plus/model/DirectionalLig
13
15
  import { PathTracedScene } from "../path_tracer/PathTracedScene.js";
14
16
  import { PathTracer } from "../path_tracer/PathTracer.js";
15
17
  import { ProbeRenderer } from "./ProbeRenderer.js";
18
+ import { sh3_bake_depth } from "./sh3_bake_depth.js";
16
19
 
17
20
  const __shared_buffer = new ArrayBuffer((27 + 9) * 8);
18
21
  const sh_basis = new Float64Array(__shared_buffer, 0, 9);
@@ -28,8 +31,31 @@ export class PathTracerProbeRenderer extends ProbeRenderer {
28
31
 
29
32
  scene = new PathTracedScene()
30
33
 
34
+ bake_depth(position, position_offset, output, output_offset) {
35
+
36
+ sh3_bake_depth(
37
+ coefficients, 0, this.scene,
38
+ position[position_offset],
39
+ position[position_offset + 1],
40
+ position[position_offset + 2],
41
+ 1.5
42
+ );
43
+
44
+ sh3_dering_optimize_positive(coefficients, 0, coefficients, 0, 1);
45
+
46
+ for (let i = 0; i < 9; i++) {
47
+ const coefficient = coefficients[i];
48
+
49
+ for (let j = 0; j < 3; j++) {
50
+ output[output_offset + i * 3 + j] = coefficient;
51
+ }
52
+ }
53
+
54
+ }
55
+
31
56
  bake(position, position_offset, output, output_offset) {
32
57
 
58
+
33
59
  const tracer = this.tracer;
34
60
 
35
61
 
@@ -47,26 +73,17 @@ export class PathTracerProbeRenderer extends ProbeRenderer {
47
73
  sh3_basis_at(ray[3], ray[4], ray[5], sh_basis);
48
74
 
49
75
  // accumulate
50
- for (let j = 0; j < 9; j++) {
51
-
52
- const j3 = j * 3;
53
-
54
- const projected_coefficient = sh_basis[j];
55
-
56
- coefficients[j3] += projected_coefficient * sampled_irradiance[0];
57
- coefficients[j3 + 1] += projected_coefficient * sampled_irradiance[1];
58
- coefficients[j3 + 2] += projected_coefficient * sampled_irradiance[2];
59
-
60
- }
76
+ sh3_vector_accumulate(
77
+ coefficients, 0,
78
+ sh_basis, 0,
79
+ sampled_irradiance, 0, 3
80
+ );
61
81
  }
62
82
 
63
83
  // Area of a unit sphere is (4*PI)
64
-
65
84
  const normalization_weight = (4 * Math.PI) / this.sample_count;
66
85
 
67
- for (let i = 0; i < 27; i++) {
68
- coefficients[i] *= normalization_weight;
69
- }
86
+ vector_scale_array(coefficients, 0, coefficients, 0, 27, normalization_weight);
70
87
 
71
88
  sh3_dering_optimize_positive(coefficients, 0, coefficients, 0, 3);
72
89
 
@@ -92,7 +109,7 @@ export class PathTracerProbeRenderer extends ProbeRenderer {
92
109
  */
93
110
  (sg, transform) => {
94
111
 
95
- scene.addMesh(sg.geometry, sg.material, transform.matrix)
112
+ scene.createMesh(sg.geometry, sg.material, transform.matrix)
96
113
 
97
114
  });
98
115
 
@@ -1 +1 @@
1
- {"version":3,"file":"build_probes_for_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/build_probes_for_scene.js"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,iFAPW,gBAAgB,GAKd,QAAQ,gBAAgB,CAAC,CA6GrC;iCAtHgC,uBAAuB"}
1
+ {"version":3,"file":"build_probes_for_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/build_probes_for_scene.js"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,iFAPW,gBAAgB,GAKd,QAAQ,gBAAgB,CAAC,CAmFrC;iCA7FgC,uBAAuB"}
@@ -7,6 +7,7 @@ import GUIElement from "../../../ecs/gui/GUIElement.js";
7
7
  import ViewportPosition from "../../../ecs/gui/position/ViewportPosition.js";
8
8
  import { makeSimpleTaskProgressView } from "../../../makeSimpleTaskProgressView.js";
9
9
  import { LightProbeVolume } from "./LightProbeVolume.js";
10
+ import { LightProbeVolumeBaker } from "./LightProbeVolumeBaker.js";
10
11
 
11
12
  /**
12
13
  *
@@ -68,7 +69,9 @@ export async function build_probes_for_scene(
68
69
  //
69
70
  // console.profile('lpv build');
70
71
  //
71
- const task = volume.build(ecd);
72
+ volume.build_mesh();
73
+ const lpv_baker = new LightProbeVolumeBaker();
74
+ const task = lpv_baker.bake(volume, ecd);
72
75
  // console.profileEnd('lpv build');
73
76
 
74
77
  const progress = makeSimpleTaskProgressView({
@@ -91,34 +94,6 @@ export async function build_probes_for_scene(
91
94
 
92
95
  engine.executor.runGroup(task);
93
96
 
94
- // fill probes with random data
95
- // for (let i = 0; i < lpv.__length * 27; i++) {
96
- // lpv.__probe_data[i] = random();
97
- // }
98
-
99
- // for (let i = 0; i < lpv.__length; i++) {
100
- //
101
- // for (let j = 0; j < 9; j++) {
102
- // lpv.__probe_data[(i * 9 + j) * 3] = max2(0, (lpv.__positions[i * 3] + 10) / 20);
103
- // lpv.__probe_data[(i * 9 + j) * 3 + 1] = max2(0, (lpv.__positions[i * 3 + 1] - 0.5) / 10.5);
104
- // lpv.__probe_data[(i * 9 + j) * 3 + 2] = max2(0, (lpv.__positions[i * 3 + 2] + 10) / 20);
105
- // }
106
- // }
107
-
108
- // lpv.white_probe(0, [
109
- // 0.7953949, 0.4405923, 0.5459412,
110
- // 0.3981450, 0.3526911, 0.6097158,
111
- // -0.3424573, -0.1838151, -0.2715583,
112
- //
113
- // -0.2944621, -0.0560606, 0.0095193,
114
- // -0.1123051, -0.0513088, -0.1232869,
115
- // -0.2645007, -0.2257996, -0.4785847,
116
- //
117
- // -0.1569444, -0.0954703, -0.1485053,
118
- // 0.5646247, 0.2161586, 0.1402643,
119
- // 0.2137442, -0.0547578, -0.3061700], 0);
120
-
121
-
122
97
  console.log(volume);
123
98
 
124
99
  await task.promise();
@@ -13,6 +13,6 @@ export class LightProbeVolumeSerializationAdapter extends BinaryClassSerializati
13
13
  */
14
14
  deserialize(buffer: any, value: LightProbeVolume): void;
15
15
  }
16
- import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
17
- import { LightProbeVolume } from "./LightProbeVolume.js";
16
+ import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
17
+ import { LightProbeVolume } from "../LightProbeVolume.js";
18
18
  //# sourceMappingURL=LightProbeVolumeSerializationAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightProbeVolumeSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.js"],"names":[],"mappings":"AAGA;IAEI,+BAAwB;IAGxB;;;;OAIG;IACH,8BAFW,gBAAgB,QAY1B;IAED;;;;OAIG;IACH,gCAFW,gBAAgB,QAc1B;CACJ;gDA3C+C,mEAAmE;iCAClF,wBAAwB"}
@@ -1,5 +1,5 @@
1
- import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
- import { LightProbeVolume } from "./LightProbeVolume.js";
1
+ import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
+ import { LightProbeVolume } from "../LightProbeVolume.js";
3
3
 
4
4
  export class LightProbeVolumeSerializationAdapter extends BinaryClassSerializationAdapter {
5
5
 
@@ -0,0 +1,13 @@
1
+ /**
2
+ *
3
+ * @param {number[]} result
4
+ * @param {number} result_offset
5
+ * @param {PathTracedScene} scene
6
+ * @param {number} position_x
7
+ * @param {number} position_y
8
+ * @param {number} position_z
9
+ * @param {number} max_depth
10
+ * @param {number} resolution
11
+ */
12
+ export function sh3_bake_depth(result: number[], result_offset: number, scene: PathTracedScene, position_x: number, position_y: number, position_z: number, max_depth?: number, resolution?: number): void;
13
+ //# sourceMappingURL=sh3_bake_depth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sh3_bake_depth.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/sh3_bake_depth.js"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,uCATW,MAAM,EAAE,iBACR,MAAM,sCAEN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,eACN,MAAM,QAqDhB"}
@@ -0,0 +1,71 @@
1
+ import { array_copy } from "../../../../core/collection/array/array_copy.js";
2
+ import { Ray3 } from "../../../../core/geom/3d/Ray3.js";
3
+ import { sh3_basis_at } from "../../../../core/geom/3d/sphere/harmonics/sh3_basis_at.js";
4
+ import { sh3_vector_accumulate } from "../../../../core/geom/3d/sphere/harmonics/sh3_vector_accumulate.js";
5
+ import { vector_scale_array } from "../../../../core/geom/vec/vector_scale_array.js";
6
+ import { clamp01 } from "../../../../core/math/clamp01.js";
7
+ import { OctahedralUvEncoder } from "../../impostors/octahedral/grid/OctahedralUvEncoder.js";
8
+
9
+ /**
10
+ *
11
+ * @param {number[]} result
12
+ * @param {number} result_offset
13
+ * @param {PathTracedScene} scene
14
+ * @param {number} position_x
15
+ * @param {number} position_y
16
+ * @param {number} position_z
17
+ * @param {number} max_depth
18
+ * @param {number} resolution
19
+ */
20
+ export function sh3_bake_depth(
21
+ result, result_offset,
22
+ scene,
23
+ position_x, position_y, position_z,
24
+ max_depth = 2,
25
+ resolution = 12
26
+ ) {
27
+
28
+ const ray = new Ray3();
29
+ const ray_hit = [];
30
+
31
+ const basis = new Float32Array(9);
32
+ const sh = new Float32Array(9);
33
+
34
+ ray.origin.set(position_x, position_y, position_z);
35
+
36
+ const encoder = new OctahedralUvEncoder();
37
+
38
+ for (let y = 0; y < resolution; y++) {
39
+ for (let x = 0; x < resolution; x++) {
40
+ const u = x / (resolution - 1);
41
+ const v = y / (resolution - 1);
42
+
43
+ encoder.uv_to_unit(ray.direction, [u, v])
44
+
45
+ let distance = scene.trace(ray_hit, ray, 0, max_depth);
46
+
47
+ if (distance < 0) {
48
+ distance = 100;
49
+ }
50
+
51
+ distance = clamp01(1 - distance / max_depth);
52
+
53
+ sh3_basis_at(ray.direction.x, ray.direction.y, ray.direction.z, basis);
54
+
55
+ sh3_vector_accumulate(
56
+ sh, 0,
57
+ basis, 0,
58
+ [distance], 0, 1
59
+ );
60
+
61
+ }
62
+
63
+ }
64
+
65
+ // Note that we do not scale the depth samples by sphere surface area as we are not attempting to approximate radiance
66
+ const normalization_weight = 1 / resolution * resolution;
67
+
68
+ vector_scale_array(sh, 0, sh, 0, 27, normalization_weight);
69
+
70
+ array_copy(sh, 0, result, result_offset, 9);
71
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lpv_build_worker.d.ts.map