@woosh/meep-engine 2.109.1 → 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 (258) hide show
  1. package/build/meep.cjs +122 -186
  2. package/build/meep.min.js +1 -1
  3. package/build/meep.module.js +122 -186
  4. package/package.json +1 -1
  5. package/src/core/binary/ctz32.d.ts.map +1 -1
  6. package/src/core/binary/ctz32.js +12 -11
  7. package/src/core/binary/reinterpret_int32_as_float32.d.ts +7 -0
  8. package/src/core/binary/reinterpret_int32_as_float32.d.ts.map +1 -0
  9. package/src/core/binary/reinterpret_int32_as_float32.js +14 -0
  10. package/src/core/binary/reverse_bits_uint32.d.ts +8 -0
  11. package/src/core/binary/reverse_bits_uint32.d.ts.map +1 -0
  12. package/src/core/binary/reverse_bits_uint32.js +17 -0
  13. package/src/core/binary/reverse_bits_uint32.spec.d.ts +2 -0
  14. package/src/core/binary/reverse_bits_uint32.spec.d.ts.map +1 -0
  15. package/src/core/binary/reverse_bits_uint32.spec.js +18 -0
  16. package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
  17. package/src/core/bvh2/bvh3/BVH.js +13 -18
  18. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
  19. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +3 -1
  20. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.d.ts.map +1 -1
  21. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +6 -7
  22. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.d.ts.map +1 -1
  23. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.js +4 -0
  24. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts +16 -0
  25. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts.map +1 -0
  26. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.js +130 -0
  27. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.d.ts +2 -0
  28. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.d.ts.map +1 -0
  29. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.js +1 -0
  30. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.d.ts +9 -0
  31. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.d.ts.map +1 -0
  32. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.js +31 -0
  33. package/src/core/collection/array/array_quick_sort_by_lookup_map.d.ts +9 -0
  34. package/src/core/collection/array/array_quick_sort_by_lookup_map.d.ts.map +1 -0
  35. package/src/core/collection/array/array_quick_sort_by_lookup_map.js +79 -0
  36. package/src/core/collection/array/array_quick_sort_by_lookup_uint.d.ts +8 -0
  37. package/src/core/collection/array/array_quick_sort_by_lookup_uint.d.ts.map +1 -0
  38. package/src/core/collection/array/{array_quick_sort_by_lookup.js → array_quick_sort_by_lookup_uint.js} +1 -1
  39. package/src/core/collection/array/array_shuffle.js +1 -1
  40. package/src/core/collection/array/array_swap_one.d.ts.map +1 -1
  41. package/src/core/collection/array/array_swap_one.js +6 -0
  42. package/src/core/events/signal/Signal.d.ts.map +1 -1
  43. package/src/core/events/signal/Signal.js +10 -10
  44. package/src/core/geom/2d/compute_triangle_area_2d.d.ts.map +1 -1
  45. package/src/core/geom/2d/compute_triangle_area_2d.js +5 -3
  46. package/src/core/geom/3d/Ray3.d.ts +6 -0
  47. package/src/core/geom/3d/Ray3.d.ts.map +1 -1
  48. package/src/core/geom/3d/Ray3.js +24 -0
  49. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.d.ts +16 -0
  50. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.d.ts.map +1 -0
  51. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.js +29 -0
  52. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.d.ts +2 -2
  53. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.d.ts.map +1 -1
  54. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.js +6 -6
  55. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.d.ts +11 -0
  56. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.d.ts.map +1 -0
  57. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.js +61 -0
  58. package/src/core/geom/3d/eulerAnglesFromMatrix.d.ts +2 -2
  59. package/src/core/geom/3d/eulerAnglesFromMatrix.d.ts.map +1 -1
  60. package/src/core/geom/3d/eulerAnglesFromMatrix.js +28 -25
  61. package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts +2 -2
  62. package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts.map +1 -1
  63. package/src/core/geom/3d/morton/v3_morton_encode_bounded.js +1 -1
  64. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts +2 -2
  65. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts.map +1 -1
  66. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.js +1 -1
  67. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.js +2 -2
  68. package/src/core/geom/3d/sphere/sphere_intersects_ray.js +1 -1
  69. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.d.ts.map +1 -1
  70. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.js +24 -188
  71. package/src/core/geom/3d/tetrahedra/triangle/prototype.js +1 -1
  72. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts +11 -0
  73. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +1 -0
  74. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.js +42 -0
  75. package/src/core/geom/3d/topology/samples/sampleFloodFill.js +2 -2
  76. package/src/core/geom/3d/topology/tm_face_area.js +2 -2
  77. package/src/core/geom/3d/triangle/{computeTriangleSurfaceArea.d.ts → compute_triangle_area_3d.d.ts} +2 -2
  78. package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts.map +1 -0
  79. package/src/core/geom/3d/triangle/{computeTriangleSurfaceArea.js → compute_triangle_area_3d.js} +2 -4
  80. package/src/core/geom/Quaternion.d.ts.map +1 -1
  81. package/src/core/geom/Quaternion.js +13 -102
  82. package/src/core/geom/Quaternion.spec.js +2 -2
  83. package/src/core/geom/Vector1.d.ts.map +1 -1
  84. package/src/core/geom/Vector1.js +14 -6
  85. package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts +14 -0
  86. package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts.map +1 -0
  87. package/src/core/geom/vec3/{v3_shift_along_direction.js → v3_array_displace_in_direction.js} +1 -1
  88. package/src/core/geom/vec3/v3_displace_in_direction.d.ts +7 -7
  89. package/src/core/geom/vec3/v3_displace_in_direction.d.ts.map +1 -1
  90. package/src/core/geom/vec3/v3_displace_in_direction.js +20 -17
  91. package/src/core/geom/vec3/v3_displace_in_direction.spec.d.ts +2 -0
  92. package/src/core/geom/vec3/v3_displace_in_direction.spec.d.ts.map +1 -0
  93. package/src/core/geom/vec3/v3_displace_in_direction.spec.js +80 -0
  94. package/src/core/geom/vec4/v4_length.d.ts +10 -0
  95. package/src/core/geom/vec4/v4_length.d.ts.map +1 -0
  96. package/src/core/geom/vec4/v4_length.js +13 -0
  97. package/src/core/geom/vec4/v4_length_sqr.js +2 -1
  98. package/src/core/graph/eigen/matrix_eigenvalues_in_place.spec.js +31 -1
  99. package/src/core/math/FLT_EPSILON_64.d.ts +6 -0
  100. package/src/core/math/FLT_EPSILON_64.d.ts.map +1 -0
  101. package/src/core/math/FLT_EPSILON_64.js +5 -0
  102. package/src/core/math/gaussian.d.ts +2 -2
  103. package/src/core/math/gaussian.js +2 -2
  104. package/src/core/math/linalg/README.md +1 -0
  105. package/src/core/math/linalg/lu_factor_linear_system.d.ts +13 -0
  106. package/src/core/math/linalg/lu_factor_linear_system.d.ts.map +1 -0
  107. package/src/core/math/linalg/lu_factor_linear_system.js +112 -0
  108. package/src/core/math/linalg/lu_solve_linear_system.d.ts +14 -0
  109. package/src/core/math/linalg/lu_solve_linear_system.d.ts.map +1 -0
  110. package/src/core/math/linalg/lu_solve_linear_system.js +51 -0
  111. package/src/core/math/linalg/solve_linear_system.d.ts +14 -0
  112. package/src/core/math/linalg/solve_linear_system.d.ts.map +1 -0
  113. package/src/core/math/linalg/solve_linear_system.js +52 -0
  114. package/src/core/math/linalg/solve_linear_system.spec.d.ts +2 -0
  115. package/src/core/math/linalg/solve_linear_system.spec.d.ts.map +1 -0
  116. package/src/core/math/linalg/solve_linear_system.spec.js +70 -0
  117. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.d.ts +10 -0
  118. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.d.ts.map +1 -0
  119. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.js +91 -0
  120. package/src/core/math/solveQuadratic.d.ts.map +1 -1
  121. package/src/core/math/solveQuadratic.js +2 -0
  122. package/src/core/math/statistics/gaussian_amplitude.d.ts +8 -0
  123. package/src/core/math/statistics/gaussian_amplitude.d.ts.map +1 -0
  124. package/src/core/math/statistics/gaussian_amplitude.js +13 -0
  125. package/src/core/math/statistics/halton_sequence.js +3 -3
  126. package/src/core/math/statistics/halton_sequence.spec.js +18 -0
  127. package/src/core/math/statistics/hammersley_sequence.d.ts +9 -0
  128. package/src/core/math/statistics/hammersley_sequence.d.ts.map +1 -0
  129. package/src/core/math/statistics/hammersley_sequence.js +25 -0
  130. package/src/core/math/statistics/hammersley_sequence_2d.d.ts +9 -0
  131. package/src/core/math/statistics/hammersley_sequence_2d.d.ts.map +1 -0
  132. package/src/core/math/statistics/hammersley_sequence_2d.js +17 -0
  133. package/src/core/math/statistics/radical_inverse_VdC_base_2.d.ts +8 -0
  134. package/src/core/math/statistics/radical_inverse_VdC_base_2.d.ts.map +1 -0
  135. package/src/core/math/statistics/radical_inverse_VdC_base_2.js +15 -0
  136. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.d.ts +2 -0
  137. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.d.ts.map +1 -0
  138. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.js +9 -0
  139. package/src/core/model/node-graph/node/NodeInstance.d.ts.map +1 -1
  140. package/src/core/model/node-graph/node/NodeInstance.js +26 -12
  141. package/src/core/model/node-graph/node/NodeInstance.spec.d.ts +2 -0
  142. package/src/core/model/node-graph/node/NodeInstance.spec.d.ts.map +1 -0
  143. package/src/core/model/node-graph/node/NodeInstance.spec.js +82 -0
  144. package/src/core/model/node-graph/node/NodeInstancePortReference.d.ts.map +1 -1
  145. package/src/core/model/node-graph/node/NodeInstancePortReference.js +9 -0
  146. package/src/core/model/node-graph/node/NodeInstancePortReference.spec.js +20 -0
  147. package/src/core/model/node-graph/node/Port.d.ts.map +1 -1
  148. package/src/core/model/node-graph/node/Port.js +5 -12
  149. package/src/core/model/node-graph/node/PortDirection.d.ts.map +1 -1
  150. package/src/core/model/node-graph/node/PortDirection.js +7 -1
  151. package/src/engine/asset/CORS/CrossOriginConfig.d.ts.map +1 -1
  152. package/src/engine/asset/CORS/CrossOriginConfig.js +6 -4
  153. package/src/engine/graphics/geometry/computeMeshSurfaceArea.js +2 -2
  154. package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.d.ts.map +1 -1
  155. package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.js +33 -3
  156. package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +9 -7
  157. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +6 -0
  158. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +1 -0
  159. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.js +18 -0
  160. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts +6 -0
  161. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +1 -0
  162. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.js +266 -0
  163. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts +7 -0
  164. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +1 -0
  165. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.js +19 -0
  166. package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +9 -9
  167. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts.map +1 -1
  168. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.js +0 -2
  169. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts +4 -27
  170. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -1
  171. package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +36 -158
  172. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts +13 -0
  173. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts.map +1 -0
  174. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js +63 -0
  175. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +1 -0
  176. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
  177. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +25 -1
  178. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts.map +1 -1
  179. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.js +4 -29
  180. package/src/engine/graphics/sh3/lpv/{LightProbeVolumeSerializationAdapter.d.ts → serialization/LightProbeVolumeSerializationAdapter.d.ts} +2 -2
  181. package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.d.ts.map +1 -0
  182. package/src/engine/graphics/sh3/lpv/{LightProbeVolumeSerializationAdapter.js → serialization/LightProbeVolumeSerializationAdapter.js} +2 -2
  183. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts +13 -0
  184. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts.map +1 -0
  185. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.js +71 -0
  186. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.d.ts +2 -0
  187. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.d.ts.map +1 -0
  188. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.js +38 -0
  189. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts +1 -7
  190. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -1
  191. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +58 -147
  192. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts +13 -9
  193. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts.map +1 -1
  194. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.js +74 -54
  195. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts +23 -5
  196. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -1
  197. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +211 -59
  198. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +1 -1
  199. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts +15 -0
  200. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts.map +1 -0
  201. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.js +46 -0
  202. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts +14 -0
  203. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts.map +1 -0
  204. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.js +43 -0
  205. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -0
  206. package/src/engine/graphics/sh3/path_tracer/{compute_triangle_group_aabb3.js → geometry/compute_triangle_group_aabb3.js} +2 -2
  207. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.d.ts +12 -0
  208. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.d.ts.map +1 -0
  209. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.js +72 -0
  210. package/src/engine/graphics/sh3/path_tracer/geometry/sample_triangle_attribute.d.ts.map +1 -0
  211. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.d.ts +13 -0
  212. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.d.ts.map +1 -0
  213. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.js +48 -0
  214. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.d.ts +1 -0
  215. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.d.ts.map +1 -1
  216. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.js +4 -0
  217. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts +1 -0
  218. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts.map +1 -1
  219. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.js +8 -5
  220. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +24 -18
  221. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts +2 -2
  222. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts.map +1 -1
  223. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +1 -1
  224. package/src/engine/graphics/sh3/path_tracer/sampling/getBiasedNormalSample.d.ts.map +1 -0
  225. package/src/engine/graphics/sh3/path_tracer/{getBiasedNormalSample.js → sampling/getBiasedNormalSample.js} +1 -1
  226. package/src/engine/graphics/sh3/path_tracer/sampling/random_in_hemisphere.d.ts.map +1 -0
  227. package/src/engine/graphics/sh3/path_tracer/{random_in_hemisphere.js → sampling/random_in_hemisphere.js} +1 -1
  228. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts +12 -0
  229. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts.map +1 -0
  230. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.js +46 -0
  231. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +2 -2
  232. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts +7 -0
  233. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts.map +1 -0
  234. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.js +69 -0
  235. package/src/engine/graphics/sh3/prototypeSH3Probe.js +29 -7
  236. package/src/engine/graphics/texture/formatToChannelCount.d.ts.map +1 -1
  237. package/src/engine/graphics/texture/formatToChannelCount.js +14 -1
  238. package/src/engine/graphics/three/three_object_replace_materials.d.ts +7 -0
  239. package/src/engine/graphics/three/three_object_replace_materials.d.ts.map +1 -0
  240. package/src/engine/graphics/three/three_object_replace_materials.js +13 -0
  241. package/src/core/collection/array/array_quick_sort_by_lookup.d.ts +0 -8
  242. package/src/core/collection/array/array_quick_sort_by_lookup.d.ts.map +0 -1
  243. package/src/core/geom/3d/triangle/computeTriangleSurfaceArea.d.ts.map +0 -1
  244. package/src/core/geom/vec3/v3_shift_along_direction.d.ts +0 -14
  245. package/src/core/geom/vec3/v3_shift_along_direction.d.ts.map +0 -1
  246. package/src/engine/graphics/filter/FlipArrayViaCanvas.d.ts +0 -2
  247. package/src/engine/graphics/filter/FlipArrayViaCanvas.d.ts.map +0 -1
  248. package/src/engine/graphics/filter/FlipArrayViaCanvas.js +0 -13
  249. package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.d.ts.map +0 -1
  250. package/src/engine/graphics/sh3/path_tracer/compute_triangle_group_aabb3.d.ts.map +0 -1
  251. package/src/engine/graphics/sh3/path_tracer/getBiasedNormalSample.d.ts.map +0 -1
  252. package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.d.ts.map +0 -1
  253. package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts.map +0 -1
  254. /package/src/engine/graphics/sh3/path_tracer/{compute_triangle_group_aabb3.d.ts → geometry/compute_triangle_group_aabb3.d.ts} +0 -0
  255. /package/src/engine/graphics/sh3/path_tracer/{sample_triangle_attribute.d.ts → geometry/sample_triangle_attribute.d.ts} +0 -0
  256. /package/src/engine/graphics/sh3/path_tracer/{sample_triangle_attribute.js → geometry/sample_triangle_attribute.js} +0 -0
  257. /package/src/engine/graphics/sh3/path_tracer/{getBiasedNormalSample.d.ts → sampling/getBiasedNormalSample.d.ts} +0 -0
  258. /package/src/engine/graphics/sh3/path_tracer/{random_in_hemisphere.d.ts → sampling/random_in_hemisphere.d.ts} +0 -0
@@ -1,87 +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";
15
6
  import { EntityNode } from "../../../ecs/parent/EntityNode.js";
16
7
  import { Transform } from "../../../ecs/transform/Transform.js";
17
- import { DrawMode } from "../../ecs/mesh-v2/DrawMode.js";
18
- import { ShadedGeometry } from "../../ecs/mesh-v2/ShadedGeometry.js";
19
- import { ShadedGeometryFlags } from "../../ecs/mesh-v2/ShadedGeometryFlags.js";
20
8
  import { sh3_make_shaded_geometry } from "../visualise_spherical_harmonic_sphere.js";
21
- import { PathTracerProbeRenderer } from "./PathTracerProbeRenderer.js";
22
-
23
9
 
24
- class Baker {
25
- constructor() {
26
10
 
27
- // this._ren = new WebGLCubeProbeRenderer();
28
- this._ren = new PathTracerProbeRenderer();
29
- }
11
+ export class LightProbeVolume {
12
+ #version = 0;
30
13
 
31
14
  /**
32
15
  *
33
- * @param {number[]} position
34
- * @param {number} position_offset
35
- * @param {number[]} output
36
- * @param {number} output_offset
16
+ * @type {number[]}
37
17
  */
38
- bake_sh3_cube(
39
- position, position_offset,
40
- output, output_offset
41
- ) {
42
-
43
- this._ren.bake(position, position_offset, output, output_offset);
18
+ #probe_positions = [];
44
19
 
45
- }
20
+ #mesh = new TetrahedralMesh();
46
21
 
47
22
  /**
48
23
  *
24
+ * @type {number[]}
49
25
  */
50
- async prepare(ecd) {
26
+ #sh3_rgb = [];
51
27
 
52
- this._ren.build_scene(ecd);
53
-
54
- await this._ren.bake_start();
55
- }
56
-
57
- finish() {
58
- this._ren.bake_end();
59
- }
60
- }
61
-
62
- export class LightProbeVolume {
63
- #version = 0;
28
+ #probe_count = 0;
64
29
 
65
30
  get version() {
66
31
  return this.#version;
67
32
  }
68
33
 
69
- constructor() {
70
- this.__positions = [];
71
-
72
- this.__mesh = new TetrahedralMesh();
73
-
74
- this.__probe_data = [];
75
-
76
- this.__length = 0;
77
- }
78
-
79
34
  clear() {
80
- this.__positions.splice(0, this.__positions.length);
81
- this.__probe_data.splice(0, this.__probe_data.length);
82
- 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();
83
38
 
84
- this.__length = 0;
39
+ this.#probe_count = 0;
85
40
 
86
41
  this.#version++;
87
42
  }
@@ -91,23 +46,23 @@ export class LightProbeVolume {
91
46
  * @return {TetrahedralMesh}
92
47
  */
93
48
  get mesh() {
94
- return this.__mesh;
49
+ return this.#mesh;
95
50
  }
96
51
 
97
52
  get points() {
98
- return this.__positions;
53
+ return this.#probe_positions;
99
54
  }
100
55
 
101
56
  get harmonics() {
102
- return this.__probe_data;
57
+ return this.#sh3_rgb;
103
58
  }
104
59
 
105
60
  get count() {
106
- return this.__length;
61
+ return this.#probe_count;
107
62
  }
108
63
 
109
64
  set count(v) {
110
- this.__length = v;
65
+ this.#probe_count = v;
111
66
  }
112
67
 
113
68
  /**
@@ -117,17 +72,19 @@ export class LightProbeVolume {
117
72
  * @param {number} z
118
73
  */
119
74
  add_point(x, y, z) {
120
- const i = this.__length;
75
+ const i = this.#probe_count;
76
+
77
+ const i3 = i * 3;
121
78
 
122
- this.__positions[i * 3] = x;
123
- this.__positions[i * 3 + 1] = y;
124
- 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;
125
82
 
126
83
  for (let j = 0; j < 9 * 3; j++) {
127
- this.__probe_data[i * 9 * 3 + j] = 1; // fill with white
84
+ this.#sh3_rgb[i3 * 9 + j] = 1; // fill with white
128
85
  }
129
86
 
130
- this.__length++;
87
+ this.#probe_count++;
131
88
  }
132
89
 
133
90
  /**
@@ -136,8 +93,8 @@ export class LightProbeVolume {
136
93
  * @param {number[]} source
137
94
  * @param {number} source_offset
138
95
  */
139
- white_probe(index, source, source_offset) {
140
- 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);
141
98
  }
142
99
 
143
100
  /**
@@ -146,69 +103,19 @@ export class LightProbeVolume {
146
103
  build_mesh() {
147
104
 
148
105
  const t0 = performance.now();
149
- compute_delaunay_tetrahedral_mesh(this.__mesh, this.__positions, this.__length);
106
+ compute_delaunay_tetrahedral_mesh(this.#mesh, this.#probe_positions, this.#probe_count);
150
107
 
151
108
  const t1 = performance.now();
152
109
 
153
110
  // optional step to improve memory utilization
154
- this.__mesh.compact();
111
+ this.#mesh.compact();
155
112
 
156
113
  const t2 = performance.now();
157
114
 
158
- 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`);
159
116
  }
160
117
 
161
118
 
162
- /**
163
- * Bake light probes
164
- * @returns {TaskGroup}
165
- * @param {EntityComponentDataset} ecd
166
- */
167
- bake(ecd) {
168
- const baker = new Baker();
169
- // baker.set_bvh(entityManager.getSystem(ShadedGeometrySystem).__bvh_binary);
170
-
171
-
172
- const tPrepare = promiseTask(new Promise(async (resolve, reject) => {
173
- await baker.prepare(ecd);
174
-
175
- resolve();
176
- }), 'Prepare');
177
-
178
-
179
- const probe_count = this.__length;
180
- const tBake = countTask(0, probe_count, (i) => {
181
-
182
- baker.bake_sh3_cube(
183
- this.__positions, i * 3,
184
- this.__probe_data, i * 9 * 3
185
- );
186
-
187
- });
188
- tBake.estimatedDuration = probe_count;
189
-
190
- tBake.promise().then(() => {
191
-
192
- const duration = tBake.__executedCpuTime;
193
-
194
- console.log(`Baked ${probe_count} probes in ${duration}ms, ~${(duration / probe_count).toFixed(2)}ms per probe`);
195
-
196
- })
197
-
198
- const tFinish = actionTask(() => {
199
- baker.finish();
200
-
201
- this.#version++;
202
- });
203
-
204
- tFinish.addDependency(tBake);
205
- tBake.addDependency(tPrepare);
206
-
207
- return new TaskGroup([
208
- tPrepare, tBake, tFinish
209
- ], "LightProbeVolume Bake");
210
- }
211
-
212
119
  /**
213
120
  *
214
121
  * @param {number} size
@@ -219,16 +126,16 @@ export class LightProbeVolume {
219
126
  const parent = new EntityNode();
220
127
  parent.entity.add(new Transform());
221
128
 
222
- for (let i = 0; i < this.__length; i++) {
129
+ for (let i = 0; i < this.#probe_count; i++) {
223
130
  const probe_node = new EntityNode();
224
131
 
225
132
 
226
133
  probe_node.entity.add(new Transform());
227
134
  probe_node.entity.add(
228
- sh3_make_shaded_geometry(this.__probe_data, i * 3 * 9, shadow)
135
+ sh3_make_shaded_geometry(this.#sh3_rgb, i * 3 * 9, shadow)
229
136
  );
230
137
 
231
- probe_node.transform.position.fromArray(this.__positions, i * 3);
138
+ probe_node.transform.position.fromArray(this.#probe_positions, i * 3);
232
139
  probe_node.transform.scale.setScalar(size);
233
140
 
234
141
  parent.addChild(probe_node);
@@ -237,39 +144,10 @@ export class LightProbeVolume {
237
144
  return parent;
238
145
  }
239
146
 
240
- /**
241
- *
242
- * @param {EntityComponentDataset} ecd
243
- * @param {string|number} color CSS color definition
244
- * @param {number} opacity
245
- */
246
- visualize_mesh({ ecd, color = '#FF00FF', opacity = 0.35 }) {
247
-
248
- const geometry = build_tetrahedral_mesh_buffer_geometry(this.__mesh, this.__positions);
249
-
250
- const sg = ShadedGeometry.from(geometry, new LineBasicMaterial({
251
- color: color,
252
- transparent: true,
253
- opacity,
254
- depthWrite: false
255
- }), DrawMode.LineSegments);
256
-
257
- sg.clearFlag(ShadedGeometryFlags.CastShadow);
258
- sg.clearFlag(ShadedGeometryFlags.ReceiveShadow);
259
147
 
260
- new Entity()
261
- .add(sg)
262
- .add(new Transform())
263
- .build(ecd);
148
+ incrementVersion() {
149
+ this.#version++;
264
150
  }
265
151
 
266
- /**
267
- *
268
- * @param {EntityComponentDataset} ecd
269
- * @returns {TaskGroup}
270
- */
271
- build(ecd) {
272
- this.build_mesh();
273
- return this.bake(ecd);
274
- }
275
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":"AAyBA;IACI,mBAA0B;IAC1B,qBAAmB;IACnB,qBAAyB;IAEzB,uBAA6B;IAE7B,iFAkCC;IASD,4BAsCC;CACJ;8BAlG6B,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"}
@@ -15,6 +15,7 @@ import { DirectionalLight } from "../../render/forward_plus/model/DirectionalLig
15
15
  import { PathTracedScene } from "../path_tracer/PathTracedScene.js";
16
16
  import { PathTracer } from "../path_tracer/PathTracer.js";
17
17
  import { ProbeRenderer } from "./ProbeRenderer.js";
18
+ import { sh3_bake_depth } from "./sh3_bake_depth.js";
18
19
 
19
20
  const __shared_buffer = new ArrayBuffer((27 + 9) * 8);
20
21
  const sh_basis = new Float64Array(__shared_buffer, 0, 9);
@@ -30,8 +31,31 @@ export class PathTracerProbeRenderer extends ProbeRenderer {
30
31
 
31
32
  scene = new PathTracedScene()
32
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
+
33
56
  bake(position, position_offset, output, output_offset) {
34
57
 
58
+
35
59
  const tracer = this.tracer;
36
60
 
37
61
 
@@ -85,7 +109,7 @@ export class PathTracerProbeRenderer extends ProbeRenderer {
85
109
  */
86
110
  (sg, transform) => {
87
111
 
88
- scene.addMesh(sg.geometry, sg.material, transform.matrix)
112
+ scene.createMesh(sg.geometry, sg.material, transform.matrix)
89
113
 
90
114
  });
91
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lpv_build_worker.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/sh3/lpv/worker/lpv_build_worker.js"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
2
+ import { EntityComponentDataset } from "../../../../ecs/EntityComponentDataset.js";
3
+ import { LightProbeVolume } from "../LightProbeVolume.js";
4
+ import { LightProbeVolumeSerializationAdapter } from "../serialization/LightProbeVolumeSerializationAdapter.js";
5
+
6
+ const adapter = new LightProbeVolumeSerializationAdapter();
7
+ const volume = new LightProbeVolume();
8
+
9
+ const scene = new EntityComponentDataset();
10
+
11
+ self.Contex = {
12
+ volume,
13
+
14
+ /**
15
+ *
16
+ * @param {ArrayBuffer} data
17
+ */
18
+ load_scene(data){
19
+ const buffer = BinaryBuffer.fromArrayBuffer(data);
20
+
21
+
22
+
23
+ },
24
+
25
+ serialize() {
26
+ const buffer = new BinaryBuffer();
27
+
28
+ adapter.serialize(buffer, volume);
29
+
30
+ buffer.trim();
31
+
32
+ return buffer.data;
33
+ },
34
+
35
+ reset() {
36
+ volume.clear()
37
+ }
38
+ };