@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.
- package/build/meep.cjs +122 -186
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +122 -186
- package/package.json +1 -1
- package/src/core/binary/ctz32.d.ts.map +1 -1
- package/src/core/binary/ctz32.js +12 -11
- package/src/core/binary/reinterpret_int32_as_float32.d.ts +7 -0
- package/src/core/binary/reinterpret_int32_as_float32.d.ts.map +1 -0
- package/src/core/binary/reinterpret_int32_as_float32.js +14 -0
- package/src/core/binary/reverse_bits_uint32.d.ts +8 -0
- package/src/core/binary/reverse_bits_uint32.d.ts.map +1 -0
- package/src/core/binary/reverse_bits_uint32.js +17 -0
- package/src/core/binary/reverse_bits_uint32.spec.d.ts +2 -0
- package/src/core/binary/reverse_bits_uint32.spec.d.ts.map +1 -0
- package/src/core/binary/reverse_bits_uint32.spec.js +18 -0
- package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BVH.js +13 -18
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +3 -1
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +6 -7
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy.js +4 -0
- package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts +16 -0
- package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts.map +1 -0
- package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.js +130 -0
- package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.d.ts +2 -0
- package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.d.ts.map +1 -0
- package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.js +1 -0
- package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.d.ts +9 -0
- package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.d.ts.map +1 -0
- package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.js +31 -0
- package/src/core/collection/array/array_quick_sort_by_lookup_map.d.ts +9 -0
- package/src/core/collection/array/array_quick_sort_by_lookup_map.d.ts.map +1 -0
- package/src/core/collection/array/array_quick_sort_by_lookup_map.js +79 -0
- package/src/core/collection/array/array_quick_sort_by_lookup_uint.d.ts +8 -0
- package/src/core/collection/array/array_quick_sort_by_lookup_uint.d.ts.map +1 -0
- package/src/core/collection/array/{array_quick_sort_by_lookup.js → array_quick_sort_by_lookup_uint.js} +1 -1
- package/src/core/collection/array/array_shuffle.js +1 -1
- package/src/core/collection/array/array_swap_one.d.ts.map +1 -1
- package/src/core/collection/array/array_swap_one.js +6 -0
- package/src/core/events/signal/Signal.d.ts.map +1 -1
- package/src/core/events/signal/Signal.js +10 -10
- package/src/core/geom/2d/compute_triangle_area_2d.d.ts.map +1 -1
- package/src/core/geom/2d/compute_triangle_area_2d.js +5 -3
- package/src/core/geom/3d/Ray3.d.ts +6 -0
- package/src/core/geom/3d/Ray3.d.ts.map +1 -1
- package/src/core/geom/3d/Ray3.js +24 -0
- package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.d.ts +16 -0
- package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.js +29 -0
- package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.d.ts +2 -2
- package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.js +6 -6
- package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.d.ts +11 -0
- package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.js +61 -0
- package/src/core/geom/3d/eulerAnglesFromMatrix.d.ts +2 -2
- package/src/core/geom/3d/eulerAnglesFromMatrix.d.ts.map +1 -1
- package/src/core/geom/3d/eulerAnglesFromMatrix.js +28 -25
- package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts +2 -2
- package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts.map +1 -1
- package/src/core/geom/3d/morton/v3_morton_encode_bounded.js +1 -1
- package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts +2 -2
- package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts.map +1 -1
- package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.js +1 -1
- package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.js +2 -2
- package/src/core/geom/3d/sphere/sphere_intersects_ray.js +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.js +24 -188
- package/src/core/geom/3d/tetrahedra/triangle/prototype.js +1 -1
- package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts +11 -0
- package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.js +42 -0
- package/src/core/geom/3d/topology/samples/sampleFloodFill.js +2 -2
- package/src/core/geom/3d/topology/tm_face_area.js +2 -2
- package/src/core/geom/3d/triangle/{computeTriangleSurfaceArea.d.ts → compute_triangle_area_3d.d.ts} +2 -2
- package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/{computeTriangleSurfaceArea.js → compute_triangle_area_3d.js} +2 -4
- package/src/core/geom/Quaternion.d.ts.map +1 -1
- package/src/core/geom/Quaternion.js +13 -102
- package/src/core/geom/Quaternion.spec.js +2 -2
- package/src/core/geom/Vector1.d.ts.map +1 -1
- package/src/core/geom/Vector1.js +14 -6
- package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts +14 -0
- package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts.map +1 -0
- package/src/core/geom/vec3/{v3_shift_along_direction.js → v3_array_displace_in_direction.js} +1 -1
- package/src/core/geom/vec3/v3_displace_in_direction.d.ts +7 -7
- package/src/core/geom/vec3/v3_displace_in_direction.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_displace_in_direction.js +20 -17
- package/src/core/geom/vec3/v3_displace_in_direction.spec.d.ts +2 -0
- package/src/core/geom/vec3/v3_displace_in_direction.spec.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_displace_in_direction.spec.js +80 -0
- package/src/core/geom/vec4/v4_length.d.ts +10 -0
- package/src/core/geom/vec4/v4_length.d.ts.map +1 -0
- package/src/core/geom/vec4/v4_length.js +13 -0
- package/src/core/geom/vec4/v4_length_sqr.js +2 -1
- package/src/core/graph/eigen/matrix_eigenvalues_in_place.spec.js +31 -1
- package/src/core/math/FLT_EPSILON_64.d.ts +6 -0
- package/src/core/math/FLT_EPSILON_64.d.ts.map +1 -0
- package/src/core/math/FLT_EPSILON_64.js +5 -0
- package/src/core/math/gaussian.d.ts +2 -2
- package/src/core/math/gaussian.js +2 -2
- package/src/core/math/linalg/README.md +1 -0
- package/src/core/math/linalg/lu_factor_linear_system.d.ts +13 -0
- package/src/core/math/linalg/lu_factor_linear_system.d.ts.map +1 -0
- package/src/core/math/linalg/lu_factor_linear_system.js +112 -0
- package/src/core/math/linalg/lu_solve_linear_system.d.ts +14 -0
- package/src/core/math/linalg/lu_solve_linear_system.d.ts.map +1 -0
- package/src/core/math/linalg/lu_solve_linear_system.js +51 -0
- package/src/core/math/linalg/solve_linear_system.d.ts +14 -0
- package/src/core/math/linalg/solve_linear_system.d.ts.map +1 -0
- package/src/core/math/linalg/solve_linear_system.js +52 -0
- package/src/core/math/linalg/solve_linear_system.spec.d.ts +2 -0
- package/src/core/math/linalg/solve_linear_system.spec.d.ts.map +1 -0
- package/src/core/math/linalg/solve_linear_system.spec.js +70 -0
- package/src/core/math/linalg/solve_linear_system_GEPP_2x2.d.ts +10 -0
- package/src/core/math/linalg/solve_linear_system_GEPP_2x2.d.ts.map +1 -0
- package/src/core/math/linalg/solve_linear_system_GEPP_2x2.js +91 -0
- package/src/core/math/solveQuadratic.d.ts.map +1 -1
- package/src/core/math/solveQuadratic.js +2 -0
- package/src/core/math/statistics/gaussian_amplitude.d.ts +8 -0
- package/src/core/math/statistics/gaussian_amplitude.d.ts.map +1 -0
- package/src/core/math/statistics/gaussian_amplitude.js +13 -0
- package/src/core/math/statistics/halton_sequence.js +3 -3
- package/src/core/math/statistics/halton_sequence.spec.js +18 -0
- package/src/core/math/statistics/hammersley_sequence.d.ts +9 -0
- package/src/core/math/statistics/hammersley_sequence.d.ts.map +1 -0
- package/src/core/math/statistics/hammersley_sequence.js +25 -0
- package/src/core/math/statistics/hammersley_sequence_2d.d.ts +9 -0
- package/src/core/math/statistics/hammersley_sequence_2d.d.ts.map +1 -0
- package/src/core/math/statistics/hammersley_sequence_2d.js +17 -0
- package/src/core/math/statistics/radical_inverse_VdC_base_2.d.ts +8 -0
- package/src/core/math/statistics/radical_inverse_VdC_base_2.d.ts.map +1 -0
- package/src/core/math/statistics/radical_inverse_VdC_base_2.js +15 -0
- package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.d.ts +2 -0
- package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.d.ts.map +1 -0
- package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.js +9 -0
- package/src/core/model/node-graph/node/NodeInstance.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeInstance.js +26 -12
- package/src/core/model/node-graph/node/NodeInstance.spec.d.ts +2 -0
- package/src/core/model/node-graph/node/NodeInstance.spec.d.ts.map +1 -0
- package/src/core/model/node-graph/node/NodeInstance.spec.js +82 -0
- package/src/core/model/node-graph/node/NodeInstancePortReference.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeInstancePortReference.js +9 -0
- package/src/core/model/node-graph/node/NodeInstancePortReference.spec.js +20 -0
- package/src/core/model/node-graph/node/Port.d.ts.map +1 -1
- package/src/core/model/node-graph/node/Port.js +5 -12
- package/src/core/model/node-graph/node/PortDirection.d.ts.map +1 -1
- package/src/core/model/node-graph/node/PortDirection.js +7 -1
- package/src/engine/asset/CORS/CrossOriginConfig.d.ts.map +1 -1
- package/src/engine/asset/CORS/CrossOriginConfig.js +6 -4
- package/src/engine/graphics/geometry/computeMeshSurfaceArea.js +2 -2
- package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.d.ts.map +1 -1
- package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.js +33 -3
- package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +9 -7
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +6 -0
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +1 -0
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.js +18 -0
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts +6 -0
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +1 -0
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.js +266 -0
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts +7 -0
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +1 -0
- package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.js +19 -0
- package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +9 -9
- package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts.map +1 -1
- package/src/engine/graphics/sh3/gi/material/MaterialTransformer.js +0 -2
- package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts +4 -27
- package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +36 -158
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts +13 -0
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js +63 -0
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +1 -0
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +25 -1
- package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/build_probes_for_scene.js +4 -29
- package/src/engine/graphics/sh3/lpv/{LightProbeVolumeSerializationAdapter.d.ts → serialization/LightProbeVolumeSerializationAdapter.d.ts} +2 -2
- package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/{LightProbeVolumeSerializationAdapter.js → serialization/LightProbeVolumeSerializationAdapter.js} +2 -2
- package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts +13 -0
- package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/sh3_bake_depth.js +71 -0
- package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.d.ts +2 -0
- package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.js +38 -0
- package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts +1 -7
- package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +58 -147
- package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts +13 -9
- package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.js +74 -54
- package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts +23 -5
- package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +211 -59
- package/src/engine/graphics/sh3/path_tracer/PathTracer.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts +15 -0
- package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.js +46 -0
- package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts +14 -0
- package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.js +43 -0
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/{compute_triangle_group_aabb3.js → geometry/compute_triangle_group_aabb3.js} +2 -2
- package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.d.ts +12 -0
- package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.js +72 -0
- package/src/engine/graphics/sh3/path_tracer/geometry/sample_triangle_attribute.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.d.ts +13 -0
- package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.js +48 -0
- package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.d.ts +1 -0
- package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.js +4 -0
- package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts +1 -0
- package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.js +8 -5
- package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +24 -18
- package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts +2 -2
- package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/sampling/getBiasedNormalSample.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/{getBiasedNormalSample.js → sampling/getBiasedNormalSample.js} +1 -1
- package/src/engine/graphics/sh3/path_tracer/sampling/random_in_hemisphere.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/{random_in_hemisphere.js → sampling/random_in_hemisphere.js} +1 -1
- package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts +12 -0
- package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.js +46 -0
- package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +2 -2
- package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts +7 -0
- package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.js +69 -0
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +29 -7
- package/src/engine/graphics/texture/formatToChannelCount.d.ts.map +1 -1
- package/src/engine/graphics/texture/formatToChannelCount.js +14 -1
- package/src/engine/graphics/three/three_object_replace_materials.d.ts +7 -0
- package/src/engine/graphics/three/three_object_replace_materials.d.ts.map +1 -0
- package/src/engine/graphics/three/three_object_replace_materials.js +13 -0
- package/src/core/collection/array/array_quick_sort_by_lookup.d.ts +0 -8
- package/src/core/collection/array/array_quick_sort_by_lookup.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleSurfaceArea.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_shift_along_direction.d.ts +0 -14
- package/src/core/geom/vec3/v3_shift_along_direction.d.ts.map +0 -1
- package/src/engine/graphics/filter/FlipArrayViaCanvas.d.ts +0 -2
- package/src/engine/graphics/filter/FlipArrayViaCanvas.d.ts.map +0 -1
- package/src/engine/graphics/filter/FlipArrayViaCanvas.js +0 -13
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/compute_triangle_group_aabb3.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/getBiasedNormalSample.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts.map +0 -1
- /package/src/engine/graphics/sh3/path_tracer/{compute_triangle_group_aabb3.d.ts → geometry/compute_triangle_group_aabb3.d.ts} +0 -0
- /package/src/engine/graphics/sh3/path_tracer/{sample_triangle_attribute.d.ts → geometry/sample_triangle_attribute.d.ts} +0 -0
- /package/src/engine/graphics/sh3/path_tracer/{sample_triangle_attribute.js → geometry/sample_triangle_attribute.js} +0 -0
- /package/src/engine/graphics/sh3/path_tracer/{getBiasedNormalSample.d.ts → sampling/getBiasedNormalSample.d.ts} +0 -0
- /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
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
11
|
+
export class LightProbeVolume {
|
|
12
|
+
#version = 0;
|
|
30
13
|
|
|
31
14
|
/**
|
|
32
15
|
*
|
|
33
|
-
* @
|
|
34
|
-
* @param {number} position_offset
|
|
35
|
-
* @param {number[]} output
|
|
36
|
-
* @param {number} output_offset
|
|
16
|
+
* @type {number[]}
|
|
37
17
|
*/
|
|
38
|
-
|
|
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
|
-
|
|
26
|
+
#sh3_rgb = [];
|
|
51
27
|
|
|
52
|
-
|
|
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.
|
|
81
|
-
this.
|
|
82
|
-
this.
|
|
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
|
|
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
|
|
49
|
+
return this.#mesh;
|
|
95
50
|
}
|
|
96
51
|
|
|
97
52
|
get points() {
|
|
98
|
-
return this
|
|
53
|
+
return this.#probe_positions;
|
|
99
54
|
}
|
|
100
55
|
|
|
101
56
|
get harmonics() {
|
|
102
|
-
return this
|
|
57
|
+
return this.#sh3_rgb;
|
|
103
58
|
}
|
|
104
59
|
|
|
105
60
|
get count() {
|
|
106
|
-
return this
|
|
61
|
+
return this.#probe_count;
|
|
107
62
|
}
|
|
108
63
|
|
|
109
64
|
set count(v) {
|
|
110
|
-
this
|
|
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
|
|
75
|
+
const i = this.#probe_count;
|
|
76
|
+
|
|
77
|
+
const i3 = i * 3;
|
|
121
78
|
|
|
122
|
-
this
|
|
123
|
-
this
|
|
124
|
-
this
|
|
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
|
|
84
|
+
this.#sh3_rgb[i3 * 9 + j] = 1; // fill with white
|
|
128
85
|
}
|
|
129
86
|
|
|
130
|
-
this
|
|
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
|
-
|
|
140
|
-
array_copy(source, source_offset, this
|
|
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
|
|
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.
|
|
111
|
+
this.#mesh.compact();
|
|
155
112
|
|
|
156
113
|
const t2 = performance.now();
|
|
157
114
|
|
|
158
|
-
console.log(`Tetrahedral mesh (${this
|
|
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
|
|
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
|
|
135
|
+
sh3_make_shaded_geometry(this.#sh3_rgb, i * 3 * 9, shadow)
|
|
229
136
|
);
|
|
230
137
|
|
|
231
|
-
probe_node.transform.position.fromArray(this
|
|
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
|
-
|
|
261
|
-
|
|
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":"
|
|
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.
|
|
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":"
|
|
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
|
-
|
|
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 "
|
|
17
|
-
import { LightProbeVolume } from "
|
|
16
|
+
import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
|
|
17
|
+
import { LightProbeVolume } from "../LightProbeVolume.js";
|
|
18
18
|
//# sourceMappingURL=LightProbeVolumeSerializationAdapter.d.ts.map
|
package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.d.ts.map
ADDED
|
@@ -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 "
|
|
2
|
-
import { LightProbeVolume } from "
|
|
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 @@
|
|
|
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
|
+
};
|