@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
@@ -3,32 +3,38 @@ import {
3
3
  DataTexture,
4
4
  LinearFilter,
5
5
  MeshBasicMaterial,
6
+ MeshStandardMaterial,
6
7
  NearestFilter,
7
8
  PlaneBufferGeometry,
9
+ RepeatWrapping,
8
10
  RGBAFormat,
11
+ TextureLoader,
9
12
  UnsignedByteType
10
13
  } from "three";
11
14
  import '../../../../../../../css/game.scss';
12
15
  import { BinaryBuffer } from "../../../core/binary/BinaryBuffer.js";
13
16
  import { array_copy } from "../../../core/collection/array/array_copy.js";
14
17
  import { is_typed_array_equals } from "../../../core/collection/array/typed/is_typed_array_equals.js";
15
- import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
16
- import { make_justified_point_grid } from "../../../core/geom/3d/util/make_justified_point_grid.js";
17
- import Vector2 from "../../../core/geom/Vector2.js";
18
+ import { Color } from "../../../core/color/Color.js";
19
+ import { kelvin_to_rgb } from "../../../core/color/kelvin/kelvin_to_rgb.js";
20
+ import Quaternion from "../../../core/geom/Quaternion.js";
18
21
  import Vector3 from "../../../core/geom/Vector3.js";
22
+ import { max2 } from "../../../core/math/max2.js";
19
23
  import { randomFloatBetween } from "../../../core/math/random/randomFloatBetween.js";
20
24
  import { seededRandom } from "../../../core/math/random/seededRandom.js";
25
+ import { number_pretty_print } from "../../../core/primitives/numbers/number_pretty_print.js";
21
26
  import { delay } from "../../../core/process/delay.js";
27
+ import ButtonView from "../../../view/elements/button/ButtonView.js";
22
28
  import { GLTFAssetLoader } from "../../asset/loaders/GLTFAssetLoader.js";
23
29
  import Entity from "../../ecs/Entity.js";
24
30
  import GUIElement from "../../ecs/gui/GUIElement.js";
25
31
  import GUIElementSystem from "../../ecs/gui/GUIElementSystem.js";
26
- import ViewportPosition from "../../ecs/gui/position/ViewportPosition.js";
27
32
  import ViewportPositionSystem from "../../ecs/gui/position/ViewportPositionSystem.js";
28
33
  import { TransformAttachmentSystem } from "../../ecs/transform-attachment/TransformAttachmentSystem.js";
29
34
  import { Transform } from "../../ecs/transform/Transform.js";
30
35
  import { EngineHarness } from "../../EngineHarness.js";
31
- import { makeSimpleTaskProgressView } from "../../makeSimpleTaskProgressView.js";
36
+ import { Camera } from "../ecs/camera/Camera.js";
37
+ import TopDownCameraController from "../ecs/camera/topdown/TopDownCameraController.js";
32
38
  import { Light } from "../ecs/light/Light.js";
33
39
  import LightSystem from "../ecs/light/LightSystem.js";
34
40
  import { LightType } from "../ecs/light/LightType.js";
@@ -39,7 +45,10 @@ import { ShadedGeometryFlags } from "../ecs/mesh-v2/ShadedGeometryFlags.js";
39
45
  import { ShadedGeometrySystem } from "../ecs/mesh-v2/ShadedGeometrySystem.js";
40
46
  import { three_object_to_entity_composition } from "../ecs/mesh-v2/three_object_to_entity_composition.js";
41
47
  import { GizmoRenderingPlugin } from "../render/gizmo/GizmoRenderingPlugin.js";
42
- import { LightProbeVolume } from "./LightProbeVolume.js";
48
+ import { build_probes_for_scene } from "./lpv/build_probes_for_scene.js";
49
+ import { LightProbeVolume } from "./lpv/LightProbeVolume.js";
50
+ import { LightProbeVolumeSerializationAdapter } from "./lpv/LightProbeVolumeSerializationAdapter.js";
51
+ import { probe_volume_to_textures } from "./lpv/probe_volume_to_textures.js";
43
52
 
44
53
  /**
45
54
  *
@@ -146,12 +155,14 @@ function make_cornel_box(ecd) {
146
155
  direction: Vector3.forward,
147
156
  material: new MeshBasicMaterial({ color: 0xFF0000 })
148
157
  }).build(ecd);
158
+
149
159
  make_plane({
150
160
  scale: 20,
151
- offset: new Vector3(10, 10, 20),
161
+ offset: new Vector3(20, 10, 10),
152
162
  direction: Vector3.left,
153
163
  material: new MeshBasicMaterial({ color: 0x00FF00 })
154
164
  }).build(ecd);
165
+
155
166
  make_plane({
156
167
  scale: 20,
157
168
  offset: new Vector3(0, 10, 10),
@@ -185,113 +196,84 @@ function make_test_texture(t = 1) {
185
196
  /**
186
197
  *
187
198
  * @param {Engine} engine
188
- * @param {EntityComponentDataset} ecd
189
- * @param {AABB3} bounds
199
+ * @param {string} path
200
+ * @return {Promise<LightProbeVolume>}
190
201
  */
191
- async function build_probes(engine, ecd, bounds) {
202
+ async function getVolume({ engine, path }) {
192
203
 
193
- const lpv = new LightProbeVolume();
204
+ const key = `lpv:${path}`;
194
205
 
195
- // lpv.add_point(10, 5, 10);
206
+ const adapter = new LightProbeVolumeSerializationAdapter();
196
207
 
197
- const desired_density = 10;
208
+ if (await engine.storage.promiseContains(key)) {
209
+ const volume = new LightProbeVolume();
198
210
 
211
+ const data = await engine.storage.promiseLoadBinary(key);
199
212
 
200
- // const light_volume_bounds = new AABB3(-10, 0.5, -10, 10, 11, 10);
201
- const probe_grid_spacing_dense = Math.min(bounds.getExtentsX(), bounds.getExtentsY(), bounds.getExtentsZ()) / desired_density;
202
- const probe_grid_spacing_sparse = Math.max(bounds.getExtentsX(), bounds.getExtentsY(), bounds.getExtentsZ()) / desired_density;
213
+ console.log(`LPV data size ${number_pretty_print(data.byteLength)} bytes`);
203
214
 
204
- const probe_grid_spacing = (probe_grid_spacing_sparse / probe_grid_spacing_dense) < 2 ? probe_grid_spacing_dense : probe_grid_spacing_sparse * 0.5;
205
- //
206
- // const probe_grid_spacing =desired_density/ (mesh_asset.boundingBox.getExtentsX()* mesh_asset.boundingBox.getExtentsY()* mesh_asset.boundingBox.getExtentsZ());
215
+ const buffer = BinaryBuffer.fromArrayBuffer(data);
207
216
 
208
- const model_bounds = new AABB3(-10, 0.5, -10, 10, 11, 10);
209
- model_bounds.copy(bounds);
210
- // model_bounds._translate(composition.transform.position.x, composition.transform.position.y, composition.transform.position.z);
211
- model_bounds.grow(probe_grid_spacing * 1.1);
217
+ adapter.deserialize(buffer, volume);
212
218
 
219
+ return volume;
220
+ }
213
221
 
214
- // sg_hierarchy_compute_bounding_box_via_parent_entity(light_volume_bounds, composition.entity.entity, ecd);
222
+ const mesh_asset = await engine.assetManager.promise(path, 'model/gltf+json');
223
+ const mesh_bounds = mesh_asset.boundingBox;
215
224
 
216
- // for (let i = 0; i < 100; i++) {
217
- // lpv.add_point(
218
- // randomFloatBetween(random, light_volume_bounds.x0, light_volume_bounds.x1),
219
- // randomFloatBetween(random, light_volume_bounds.y0, light_volume_bounds.y1),
220
- // randomFloatBetween(random, light_volume_bounds.z0, light_volume_bounds.z1),
221
- // );
222
- // }
225
+ const ecd = engine.entityManager.dataset;
223
226
 
224
- make_justified_point_grid(model_bounds, probe_grid_spacing, (x, y, z) => {
225
- lpv.add_point(x, y, z);
227
+ const volume = await build_probes_for_scene({
228
+ engine,
229
+ ecd,
230
+ bounds: mesh_bounds,
231
+ density: 10000
226
232
  });
227
233
 
228
- // lpv.add_point(10, 1, -10);
229
-
230
- await delay(2000);
234
+ const buffer = new BinaryBuffer();
231
235
 
232
- //
233
- // console.profile('lpv build');
234
- //
235
- const task = lpv.build(engine);
236
- // console.profileEnd('lpv build');
236
+ adapter.serialize(buffer, volume);
237
237
 
238
- const progress = makeSimpleTaskProgressView({
239
- task,
240
- localization: engine.localization,
241
- size: new Vector2(512, 64)
242
- });
238
+ buffer.trim();
243
239
 
244
- const progress_entity = new Entity();
245
- progress_entity
246
- .add(GUIElement.fromView(progress))
247
- .add(ViewportPosition.fromJSON({
248
- position: new Vector2(0, 1),
249
- anchor: new Vector2(0, 1),
250
- offset: new Vector2(16, -16)
251
- }))
252
- .build(ecd);
240
+ engine.storage.promiseStoreBinary(key, buffer.data)
253
241
 
254
- task.promise().finally(() => progress_entity.destroy())
242
+ return volume;
243
+ }
255
244
 
256
- engine.executor.runGroup(task);
245
+ function createFloor({ level, ecd }) {
257
246
 
258
- // fill probes with random data
259
- // for (let i = 0; i < lpv.__length * 27; i++) {
260
- // lpv.__probe_data[i] = random();
261
- // }
247
+ const texture_frequency = 10;
248
+ const size = 1000;
262
249
 
263
- // for (let i = 0; i < lpv.__length; i++) {
264
- //
265
- // for (let j = 0; j < 9; j++) {
266
- // lpv.__probe_data[(i * 9 + j) * 3] = max2(0, (lpv.__positions[i * 3] + 10) / 20);
267
- // lpv.__probe_data[(i * 9 + j) * 3 + 1] = max2(0, (lpv.__positions[i * 3 + 1] - 0.5) / 10.5);
268
- // lpv.__probe_data[(i * 9 + j) * 3 + 2] = max2(0, (lpv.__positions[i * 3 + 2] + 10) / 20);
269
- // }
270
- // }
271
-
272
- // lpv.white_probe(0, [
273
- // 0.7953949, 0.4405923, 0.5459412,
274
- // 0.3981450, 0.3526911, 0.6097158,
275
- // -0.3424573, -0.1838151, -0.2715583,
276
- //
277
- // -0.2944621, -0.0560606, 0.0095193,
278
- // -0.1123051, -0.0513088, -0.1232869,
279
- // -0.2645007, -0.2257996, -0.4785847,
280
- //
281
- // -0.1569444, -0.0954703, -0.1485053,
282
- // 0.5646247, 0.2161586, 0.1402643,
283
- // 0.2137442, -0.0547578, -0.3061700], 0);
250
+ const map = new TextureLoader().load('data/textures/utility/checkers_dark_grey_256x256.png', t => {
251
+ map.needsUpdate = true;
284
252
 
253
+ map.wrapS = RepeatWrapping;
254
+ map.wrapT = RepeatWrapping;
285
255
 
286
- // lpv.visualize_mesh({ ecd: ecd });
256
+ map.repeat.set(size / texture_frequency, size / texture_frequency);
287
257
 
288
- task.promise().then(() => {
258
+ map.matrixAutoUpdate = true;
259
+ });
289
260
 
290
- lpv.visualize_probes({ ecd: ecd, size: probe_grid_spacing * 0.08 });
291
261
 
292
- })
262
+ new Entity()
263
+ .add(Transform.fromJSON({
264
+ position: {
265
+ x: 0,
266
+ y: level,
267
+ z: 0
268
+ },
269
+ rotation: Quaternion.fromEulerAngles(-Math.PI * 0.5, 0, 0),
270
+ scale: size
271
+ }))
272
+ .add(ShadedGeometry.from(new PlaneBufferGeometry(1, 1), new MeshStandardMaterial({
273
+ map: map
274
+ })))
275
+ .build(ecd);
293
276
 
294
- console.log(lpv);
295
277
  }
296
278
 
297
279
  /**
@@ -304,8 +286,8 @@ async function main(engine) {
304
286
  engine,
305
287
  enableWater: false,
306
288
  enableTerrain: false,
307
- // enableLights: false,
308
- enableLights: true,
289
+ enableLights: false,
290
+ // enableLights: true,
309
291
  cameraFarDistance: 200,
310
292
  focus: { x: 0, y: 0, z: 0 },
311
293
  pitch: 1,
@@ -314,6 +296,19 @@ async function main(engine) {
314
296
  // shadowmapResolution: 4096
315
297
  });
316
298
 
299
+ const sun_color = new Color();
300
+
301
+ kelvin_to_rgb(sun_color, 0, 6000);
302
+
303
+ await EngineHarness.buildLights({
304
+ engine,
305
+ shadowmapResolution: 4096,
306
+ ambientIntensity: 0.01,
307
+ sun: sun_color,
308
+ sunIntensity: 1,
309
+ sunDirection: new Vector3(0.5, -1, 0.3)
310
+ })
311
+
317
312
  engine.graphics.getRenderer().setClearColor('#1e3441', 1);
318
313
 
319
314
  // load_and_set_cubemap_v0(engine.graphics, 'data/textures/cubemaps/hip_miramar/32/', '.png');
@@ -323,14 +318,29 @@ async function main(engine) {
323
318
 
324
319
  // const path = 'data/models/LowPolyTownshipSet/Small_house/Small_house.gltf';
325
320
  // const path = 'data/models/sibenik/2/model.gltf';
326
- const path = 'data/models/vokselia_spawn/model.gltf';
327
- // const path = 'data/models/sponza-pbr/gltf/sponza.glb';
321
+ const path = 'data/models/sibenik/3-window-less/model.gltf';
322
+ // const path = 'data/models/vokselia_spawn/model.gltf';
328
323
  // const path = 'data/models/LowPolyTownshipSet/Town_Hall/model.gltf';
324
+ // const path = 'data/models/pica_pica/pica_pica.gltf';
325
+ // const path = 'data/models/samples/low_poly_classroom/no-glass/model.gltf';
326
+ // const path = 'data/models/samples/just_a_girl/scene.gltf';
327
+ // const path = 'data/models/samples/slum_house/scene.gltf';
328
+ // const path = 'data/models/samples/jack_trigger/scene.gltf';
329
+ // const path = 'data/models/samples/cornell_box/scene.gltf';
330
+ // const path = 'data/models/samples/cyberpunk_bike/scene.gltf';
331
+ // const path = 'data/models/samples/sd_macross_city_standoff_diorama/scene.gltf';
329
332
  // const path = 'data/models/Slaughter Mech/Slaugter Mech.gltf';
333
+ // const path = 'data/models/sponza-pbr/gltf/sponza.glb';
334
+ // const path = 'data/models/samples/gi_box_01/model.glb';
330
335
 
331
336
  const mesh_asset = await engine.assetManager.promise(path, 'model/gltf+json');
332
337
  const gltf = mesh_asset.gltf;
333
338
 
339
+ console.log(gltf);
340
+
341
+ // add floor
342
+
343
+ // make_cornel_box(ecd);
334
344
 
335
345
  const mesh_entity = new Entity();
336
346
  mesh_entity
@@ -338,6 +348,10 @@ async function main(engine) {
338
348
  .add(SGMesh.fromURL(path))
339
349
  ;
340
350
 
351
+ createFloor({
352
+ level: mesh_asset.boundingBox.y0,
353
+ ecd
354
+ });
341
355
 
342
356
  const composition = three_object_to_entity_composition(gltf.scene);
343
357
 
@@ -349,103 +363,27 @@ async function main(engine) {
349
363
  const sg = n.entity.getComponent(ShadedGeometry);
350
364
 
351
365
  if (sg !== null) {
352
- sg.writeFlag(ShadedGeometryFlags.CastShadow, false);
353
- sg.writeFlag(ShadedGeometryFlags.ReceiveShadow, false);
366
+ sg.writeFlag(ShadedGeometryFlags.CastShadow, true);
367
+ sg.writeFlag(ShadedGeometryFlags.ReceiveShadow, true);
354
368
  }
355
369
  });
356
370
 
357
-
358
- // model_bounds.setNegativelyInfiniteBounds();
359
- // composition.traverse((n) => {
360
- //
361
- // /**
362
- // * @type {ShadedGeometry}
363
- // */
364
- // const sg = n.entity.getComponent(ShadedGeometry);
365
- //
366
- // if (sg !== null) {
367
- // const aabb3 = new AABB3();
368
- // sg.getBoundingBox(aabb3);
369
- //
370
- // model_bounds.expandToFit(aabb3);
371
- // }
372
- // })
373
-
374
371
  composition.transform.scale.setScalar(1);
375
- // composition.transform.position.set(0, -mesh_asset.boundingBox.y0, 0);
372
+ //
373
+ // composition.transform.rotation.fromEulerAngles(0, Math.PI, 0);
376
374
 
377
375
  composition.build(ecd);
378
376
 
379
- const model_footprint = Math.hypot(mesh_asset.boundingBox.getExtentsX(), mesh_asset.boundingBox.getExtentsY(), mesh_asset.boundingBox.getExtentsZ());
380
377
 
378
+ const mesh_bounds = mesh_asset.boundingBox;
379
+ // const mesh_bounds = new AABB3(0, 0, 0, 20, 20, 20);
381
380
 
382
- // make_plane({
383
- // engine,
384
- // scale: 2 * model_footprint,
385
- // offset: new Vector3(0, 0, 0),
386
- // direction: Vector3.up,
387
- // up: Vector3.forward,
388
- // material: new MeshStandardMaterial({
389
- // color: 0x111111,
390
- // map: make_test_texture(),
391
- // }),
392
- // shadow: true,
393
- // }).build(ecd);
381
+ const model_footprint = Math.hypot(mesh_bounds.getExtentsX(), mesh_bounds.getExtentsY(), mesh_bounds.getExtentsZ());
394
382
 
395
- //
396
- // make_plane({
397
- // scale: 3 * model_footprint,
398
- // offset: new Vector3(0, mesh_asset.boundingBox.y1 + 2, 0),
399
- // direction: Vector3.down,
400
- // up: Vector3.forward,
401
- // shadow: false,
402
- // material: new MeshStandardMaterial({ color: '#c6f5ff' })
403
- // }).build(ecd);
404
-
405
- const points = [
406
- 0, 0, 0,
407
- 10, 0, 0,
408
- 10, 0, 10,
409
- 0, 0, 10,
410
-
411
- 0, 10, 0,
412
- 10, 10, 0,
413
- 10, 10, 10,
414
- 0, 10, 10,
415
- ];
416
383
 
417
- //
418
- // new Entity()
419
- // .add(Transform.fromJSON({
420
- // position: {
421
- // x: mesh_asset.boundingBox.x0,
422
- // y: mesh_asset.boundingBox.getCenterY(),
423
- // z: mesh_asset.boundingBox.getCenterZ()
424
- // }
425
- // }))
426
- // .add(Light.fromJSON({
427
- // distance: model_footprint * 2,
428
- // type: LightType.POINT,
429
- // intensity: 10,
430
- // color: 0xFF0000
431
- // }))
432
- // .build(ecd);
433
- //
434
- // new Entity()
435
- // .add(Transform.fromJSON({
436
- // position: {
437
- // x: mesh_asset.boundingBox.x1,
438
- // y: mesh_asset.boundingBox.getCenterY(),
439
- // z: mesh_asset.boundingBox.getCenterZ()
440
- // }
441
- // }))
442
- // .add(Light.fromJSON({
443
- // distance: model_footprint * 2,
444
- // type: LightType.POINT,
445
- // intensity: 10,
446
- // color: '#00f7ff'
447
- // }))
448
- // .build(ecd);
384
+ const camera = ecd.getAnyComponent(Camera);
385
+ camera.component.clip_far = max2(100, model_footprint);
386
+ ecd.getComponent(camera.entity, TopDownCameraController).distanceMax = model_footprint * 1.1;
449
387
 
450
388
  const random = seededRandom();
451
389
 
@@ -454,9 +392,9 @@ async function main(engine) {
454
392
  new Entity()
455
393
  .add(Transform.fromJSON({
456
394
  position: {
457
- x: randomFloatBetween(random, mesh_asset.boundingBox.x0, mesh_asset.boundingBox.x1),
458
- y: randomFloatBetween(random, mesh_asset.boundingBox.y0, mesh_asset.boundingBox.y1),
459
- z: randomFloatBetween(random, mesh_asset.boundingBox.z0, mesh_asset.boundingBox.z1),
395
+ x: randomFloatBetween(random, mesh_bounds.x0, mesh_bounds.x1),
396
+ y: randomFloatBetween(random, mesh_bounds.y0, mesh_bounds.y1),
397
+ z: randomFloatBetween(random, mesh_bounds.z0, mesh_bounds.z1),
460
398
  }
461
399
  }))
462
400
  .add(Light.fromJSON({
@@ -468,12 +406,34 @@ async function main(engine) {
468
406
  .build(ecd);
469
407
  }
470
408
 
471
- function build() {
409
+ new Entity()
410
+ .add(GUIElement.fromView(new ButtonView({
411
+ name: "Toggle Model",
412
+ action() {
413
+ composition.isBuilt ? composition.destroy() : composition.build(ecd)
414
+ }
415
+ })))
416
+ .build(ecd);
472
417
 
473
- build_probes(engine, ecd, mesh_asset.boundingBox);
474
- }
418
+ await delay(200);
419
+
420
+ console.time('getVolume');
421
+ // console.profile('getVolume');
422
+ const volume = await getVolume({ engine, path });
423
+ // console.profileEnd('getVolume');
424
+ console.timeEnd('getVolume');
425
+
426
+ console.log('LPV:', volume);
427
+
428
+
429
+ volume.visualize_probes({ ecd, size: model_footprint * 0.002 });
430
+ // volume.visualize_mesh({ ecd , opacity: 0.2});
431
+
432
+ console.time('prepareTextures');
433
+ const textures = probe_volume_to_textures(volume);
434
+ console.timeEnd('prepareTextures');
475
435
 
476
- build();
436
+ console.log(textures);
477
437
 
478
438
  // mesh_entity.addEventListener(SGMeshEvents.AssetLoaded, build);
479
439
  //
@@ -485,7 +445,7 @@ new EngineHarness().initialize({
485
445
  config.addSystem(new ShadedGeometrySystem(engine));
486
446
  config.addSystem(new TransformAttachmentSystem());
487
447
  config.addSystem(new LightSystem(engine, {
488
- shadowResolution: 2048
448
+ shadowResolution: 8192
489
449
  }));
490
450
  config.addSystem(new SGMeshSystem(engine));
491
451
  config.addSystem(new GUIElementSystem(engine.gui.view, engine));
@@ -11,14 +11,14 @@
11
11
  export function sky_hosek_precompute(mCoeffsXYZ: number[], mRadXYZ: number[], sun_direction: vec3, turbidity: number, rgbAlbedo: vec3, overcast: number): void;
12
12
  /**
13
13
  *
14
- * @param {number[]} out vec3 in RGB color space
15
- * @param {number[]} mCoeffsXYZ float[3][9]
16
- * @param {number[]} mRadXYZ vec3
17
- * @param {number[]} mToSun vec3
14
+ * @param {number[]|Float32Array} out vec3 in RGB color space
15
+ * @param {number[]|Float32Array} mCoeffsXYZ float[3][9]
16
+ * @param {number[]|Float32Array} mRadXYZ vec3
17
+ * @param {number[]|Float32Array} mToSun vec3
18
18
  * @param {number} direction_x
19
19
  * @param {number} direction_y
20
20
  * @param {number} direction_z
21
21
  */
22
- export function sky_hosek_compute_irradiance_by_direction(out: number[], mCoeffsXYZ: number[], mRadXYZ: number[], mToSun: number[], direction_x: number, direction_y: number, direction_z: number): void;
22
+ export function sky_hosek_compute_irradiance_by_direction(out: number[] | Float32Array, mCoeffsXYZ: number[] | Float32Array, mRadXYZ: number[] | Float32Array, mToSun: number[] | Float32Array, direction_x: number, direction_y: number, direction_z: number): void;
23
23
  import { vec3 } from "gl-matrix";
24
24
  //# sourceMappingURL=sky_hosek_compute_irradiance_by_direction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sky_hosek_compute_irradiance_by_direction.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js"],"names":[],"mappings":";AA+NA;;;;;;;;GAQG;AACH,iDAPW,MAAM,EAAE,WACR,MAAM,EAAE,iBACR,IAAI,aACJ,MAAM,aACN,IAAI,YACJ,MAAM,QA4HhB;AAGD;;;;;;;;;GASG;AACH,+DARW,MAAM,EAAE,cACR,MAAM,EAAE,WACR,MAAM,EAAE,UACR,MAAM,EAAE,eACR,MAAM,eACN,MAAM,eACN,MAAM,QA6BhB;qBAvYoB,WAAW"}
1
+ {"version":3,"file":"sky_hosek_compute_irradiance_by_direction.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js"],"names":[],"mappings":";AA+NA;;;;;;;;GAQG;AACH,iDAPW,MAAM,EAAE,WACR,MAAM,EAAE,iBACR,IAAI,aACJ,MAAM,aACN,IAAI,YACJ,MAAM,QA4HhB;AAGD;;;;;;;;;GASG;AACH,+DARW,MAAM,EAAE,GAAC,YAAY,cACrB,MAAM,EAAE,GAAC,YAAY,WACrB,MAAM,EAAE,GAAC,YAAY,UACrB,MAAM,EAAE,GAAC,YAAY,eACrB,MAAM,eACN,MAAM,eACN,MAAM,QA6BhB;qBAxYoB,WAAW"}
@@ -1,13 +1,13 @@
1
1
  // --- Mathematical constants -------------------------------------------------
2
2
 
3
- import { clamp } from "../../../../../core/math/clamp.js";
4
3
  import { vec3 } from "gl-matrix";
4
+ import { rgb_to_xyz } from "../../../../../core/color/xyz/rgb_to_xyz.js";
5
+ import { xyz_to_rgb } from "../../../../../core/color/xyz/xyz_to_rgb.js";
6
+ import { v3_dot } from "../../../../../core/geom/vec3/v3_dot.js";
7
+ import { clamp } from "../../../../../core/math/clamp.js";
5
8
  import { clamp01 } from "../../../../../core/math/clamp01.js";
6
9
  import { lerp } from "../../../../../core/math/lerp.js";
7
- import { v3_dot } from "../../../../../core/geom/vec3/v3_dot.js";
8
10
  import { kHosekCoeffsX, kHosekCoeffsY, kHosekCoeffsZ, kHosekRadX, kHosekRadY, kHosekRadZ } from "./data.js";
9
- import { xyz_to_rgb } from "../../../../../core/color/xyz/xyz_to_rgb.js";
10
- import { rgb_to_xyz } from "../../../../../core/color/xyz/rgb_to_xyz.js";
11
11
 
12
12
  const vl_pi = (3.14159265358979323846);
13
13
  const vl_halfPi = (vl_pi / 2.0);
@@ -357,10 +357,10 @@ export function sky_hosek_precompute(
357
357
 
358
358
  /**
359
359
  *
360
- * @param {number[]} out vec3 in RGB color space
361
- * @param {number[]} mCoeffsXYZ float[3][9]
362
- * @param {number[]} mRadXYZ vec3
363
- * @param {number[]} mToSun vec3
360
+ * @param {number[]|Float32Array} out vec3 in RGB color space
361
+ * @param {number[]|Float32Array} mCoeffsXYZ float[3][9]
362
+ * @param {number[]|Float32Array} mRadXYZ vec3
363
+ * @param {number[]|Float32Array} mToSun vec3
364
364
  * @param {number} direction_x
365
365
  * @param {number} direction_y
366
366
  * @param {number} direction_z
@@ -0,0 +1,13 @@
1
+ /**
2
+ *
3
+ * @param {number} [size]
4
+ * @param {boolean} [shadow]
5
+ * @param position
6
+ * @param [position_offset]
7
+ * @param sh
8
+ * @param [sh_offset]
9
+ * @return {Entity}
10
+ */
11
+ export function visualise_spherical_harmonic_sphere({ size, shadow, position, position_offset, sh, sh_offset }?: number): Entity;
12
+ import Entity from "../../ecs/Entity.js";
13
+ //# sourceMappingURL=visualise_spherical_harmonic_sphere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualise_spherical_harmonic_sphere.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.js"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,iHARW,MAAM,GAML,MAAM,CAoCjB;mBApDkB,qBAAqB"}
@@ -0,0 +1,54 @@
1
+ import { OctahedronBufferGeometry } from "three";
2
+ import Entity from "../../ecs/Entity.js";
3
+ import { Transform } from "../../ecs/transform/Transform.js";
4
+ import { ShadedGeometry } from "../ecs/mesh-v2/ShadedGeometry.js";
5
+ import { ShadedGeometryFlags } from "../ecs/mesh-v2/ShadedGeometryFlags.js";
6
+ import { SH3VisualisationMaterial } from "./SH3VisualisationMaterial.js";
7
+
8
+ const geometry = new OctahedronBufferGeometry(1, 5);
9
+
10
+ /**
11
+ *
12
+ * @param {number} [size]
13
+ * @param {boolean} [shadow]
14
+ * @param position
15
+ * @param [position_offset]
16
+ * @param sh
17
+ * @param [sh_offset]
18
+ * @return {Entity}
19
+ */
20
+ export function visualise_spherical_harmonic_sphere({
21
+ size = 1,
22
+ shadow = false,
23
+ position,
24
+ position_offset = 0,
25
+ sh,
26
+ sh_offset = 0
27
+ }) {
28
+
29
+ const mat = new SH3VisualisationMaterial();
30
+
31
+ const uniform_value = mat.uniforms.sh.value;
32
+ for (let i = 0; i < 9; i++) {
33
+ uniform_value[i].fromArray(sh, sh_offset + i * 3);
34
+ }
35
+
36
+ const shadedGeometry = ShadedGeometry.from(geometry, mat);
37
+
38
+ // prevent instanced rendering
39
+ shadedGeometry.setFlag(ShadedGeometryFlags.DrawMethodLocked);
40
+
41
+ shadedGeometry.writeFlag(ShadedGeometryFlags.ReceiveShadow, shadow);
42
+ shadedGeometry.writeFlag(ShadedGeometryFlags.CastShadow, shadow);
43
+
44
+ return new Entity()
45
+ .add(Transform.fromJSON({
46
+ position: {
47
+ x: position[position_offset],
48
+ y: position[position_offset + 1],
49
+ z: position[position_offset + 2],
50
+ },
51
+ scale: size
52
+ }))
53
+ .add(shadedGeometry);
54
+ }
@@ -49,9 +49,9 @@ export class AttributeDataTexture {
49
49
  computeSlotWidth(): number;
50
50
  /**
51
51
  *
52
- * @param {number} row_count
52
+ * @param {number} slot_count
53
53
  */
54
- resize(row_count: number): void;
54
+ resize(slot_count: number): void;
55
55
  build(): void;
56
56
  /**
57
57
  *
@@ -1 +1 @@
1
- {"version":3,"file":"AttributeDataTexture.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/texture/AttributeDataTexture.js"],"names":[],"mappings":"AAYA;IAwRI;;;;;;OAMG;IACH,+CAHW,MAAM,cACN,MAAM,GAHL,oBAAoB,CAO/B;IAhSD;;;;;OAKG;IACH,+CAHW,MAAM,cACN,MAAM,EA2ChB;IA/BG;;;;OAIG;IACH,eAAkB;IAElB,mBAAoB;IAEpB;;;;OAIG;IACH,uBAAkC;IAElC;;;;OAIG;IACH,kBAAqB;IAErB;;;;OAIG;IACH,qBAA8B;IAKlC;;;OAGG;IACH,0BAEC;IAED,cASC;IAED,0BAGC;IAED,2BAEC;IAED;;;OAGG;IACH,kBAFW,MAAM,QAwChB;IAED,cA4BC;IAED;;;;;;OAMG;IACH,yBALW,MAAM,WACN,MAAM,EAAE,UACR,MAAM,EAAE,GACN,OAAO,CAoCnB;IAED;;;;;OAKG;IACH,8BAJW,MAAM,WACN,MAAM,EAAE,UACR,MAAM,EAAE,QAmClB;IAED;;;OAGG;IACH,sBAFW,MAAM,QAgBhB;IAED;;;OAGG;IACH,sCAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,oBAFY,MAAM,CAIjB;CAYJ;4BA3S0C,OAAO"}
1
+ {"version":3,"file":"AttributeDataTexture.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/texture/AttributeDataTexture.js"],"names":[],"mappings":"AAYA;IAwRI;;;;;;OAMG;IACH,+CAHW,MAAM,cACN,MAAM,GAHL,oBAAoB,CAO/B;IAhSD;;;;;OAKG;IACH,+CAHW,MAAM,cACN,MAAM,EA2ChB;IA/BG;;;;OAIG;IACH,eAAkB;IAElB,mBAAoB;IAEpB;;;;OAIG;IACH,uBAAkC;IAElC;;;;OAIG;IACH,kBAAqB;IAErB;;;;OAIG;IACH,qBAA8B;IAKlC;;;OAGG;IACH,0BAEC;IAED,cASC;IAED,0BAGC;IAED,2BAEC;IAED;;;OAGG;IACH,mBAFW,MAAM,QAwChB;IAED,cA4BC;IAED;;;;;;OAMG;IACH,yBALW,MAAM,WACN,MAAM,EAAE,UACR,MAAM,EAAE,GACN,OAAO,CAoCnB;IAED;;;;;OAKG;IACH,8BAJW,MAAM,WACN,MAAM,EAAE,UACR,MAAM,EAAE,QAmClB;IAED;;;OAGG;IACH,sBAFW,MAAM,QAgBhB;IAED;;;OAGG;IACH,sCAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,oBAFY,MAAM,CAIjB;CAYJ;4BA9S0C,OAAO"}