@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.
- package/build/bundle-worker-image-decoder.js +1 -1
- package/build/meep.cjs +255 -172
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +255 -173
- package/editor/tools/paint/TerrainHeightPaintTool.js +5 -5
- package/package.json +1 -1
- package/src/core/binary/float_to_uint8.d.ts +7 -0
- package/src/core/binary/float_to_uint8.d.ts.map +1 -0
- package/src/core/binary/{float2uint8.js → float_to_uint8.js} +1 -1
- package/src/core/binary/int32_to_binary_string.d.ts +3 -2
- package/src/core/binary/int32_to_binary_string.d.ts.map +1 -1
- package/src/core/binary/int32_to_binary_string.js +18 -14
- package/src/core/binary/split_by_3.spec.d.ts +2 -0
- package/src/core/binary/split_by_3.spec.d.ts.map +1 -0
- package/src/core/binary/split_by_3.spec.js +22 -0
- package/src/core/binary/to_half_float_uint16.d.ts.map +1 -1
- package/src/core/binary/to_half_float_uint16.js +7 -5
- package/src/core/binary/uint8_to_float.d.ts +7 -0
- package/src/core/binary/uint8_to_float.d.ts.map +1 -0
- package/src/core/binary/{uint82float.js → uint8_to_float.js} +1 -1
- package/src/core/binary/uint8_to_float.spec.d.ts +2 -0
- package/src/core/binary/uint8_to_float.spec.d.ts.map +1 -0
- package/src/core/binary/uint8_to_float.spec.js +7 -0
- package/src/core/codegen/codeToBlob.d.ts +8 -0
- package/src/core/codegen/codeToBlob.d.ts.map +1 -0
- package/src/core/codegen/codeToBlob.js +36 -0
- package/src/core/codegen/codeToURL.d.ts +8 -0
- package/src/core/codegen/codeToURL.d.ts.map +1 -0
- package/src/core/codegen/codeToURL.js +22 -0
- package/src/core/collection/array/array_shuffle.d.ts +8 -0
- package/src/core/collection/array/array_shuffle.d.ts.map +1 -0
- package/src/core/collection/array/array_shuffle.js +22 -0
- package/src/core/collection/array/array_shuffle.spec.d.ts +2 -0
- package/src/core/collection/array/array_shuffle.spec.d.ts.map +1 -0
- package/src/core/collection/array/{randomizeArrayElementOrder.spec.js → array_shuffle.spec.js} +4 -4
- package/src/core/collection/array/isArrayEqualStrict.d.ts.map +1 -1
- package/src/core/collection/array/isArrayEqualStrict.js +2 -2
- package/src/core/collection/array/iterator/ArrayIteratorRandom.js +2 -2
- package/src/core/collection/array/randomMultipleFromArray.js +2 -2
- package/src/core/color/Color.d.ts.map +1 -1
- package/src/core/color/Color.js +16 -11
- package/src/core/color/hsv/hsv2rgb.js +4 -4
- package/src/core/color/hsv/rgb2hsv.d.ts +3 -3
- package/src/core/color/hsv/rgb2hsv.d.ts.map +1 -1
- package/src/core/color/hsv/rgb2hsv.js +11 -18
- package/src/core/color/rgb2uint24.js +4 -4
- package/src/core/color/rgb_to_luminance.d.ts +9 -0
- package/src/core/color/rgb_to_luminance.d.ts.map +1 -0
- package/src/core/color/rgb_to_luminance.js +10 -0
- package/src/core/color/sRGB/linear_to_sRGB.d.ts +1 -0
- package/src/core/color/sRGB/linear_to_sRGB.d.ts.map +1 -1
- package/src/core/color/sRGB/linear_to_sRGB.js +4 -4
- package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/AABB3.js +4 -1
- package/src/core/geom/3d/aabb/aabb3_intersects_ray.js +3 -3
- package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +14 -14
- package/src/core/geom/3d/sphere/harmonics/README.md +16 -2
- package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.d.ts +6 -0
- package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.js +17 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_basis_at.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_basis_at.js +21 -9
- package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.d.ts +3 -3
- package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js +35 -206
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts +8 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate.js +29 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.js +10 -10
- package/src/core/geom/3d/sphere/harmonics/sh_index.d.ts +8 -0
- package/src/core/geom/3d/sphere/harmonics/sh_index.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_index.js +9 -0
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.d.ts +8 -0
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.js +44 -0
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.d.ts +8 -0
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.js +86 -0
- package/src/core/geom/3d/sphere/in_sphere3d_robust.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/in_sphere3d_robust.js +2 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +20 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +53 -7
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.spec.js +2 -2
- package/src/core/geom/3d/tetrahedra/build_tetrahedral_mesh_buffer_geometry.d.ts +1 -1
- package/src/core/geom/3d/tetrahedra/build_tetrahedral_mesh_buffer_geometry.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/build_tetrahedral_mesh_buffer_geometry.js +12 -7
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.d.ts +13 -0
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.js +135 -0
- package/src/core/geom/3d/tetrahedra/prototypeTetrahedraBuilder.js +38 -24
- package/src/core/geom/3d/tetrahedra/{compute_circumsphere.d.ts → tetrahedron_compute_circumsphere.d.ts} +3 -5
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/{compute_circumsphere.js → tetrahedron_compute_circumsphere.js} +2 -4
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_signed_volume.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_signed_volume.js +3 -1
- package/src/core/geom/Vector3.d.ts.map +1 -1
- package/src/core/geom/Vector3.js +4 -3
- package/src/core/geom/mat3/m3_multiply_vec3.d.ts +8 -0
- package/src/core/geom/mat3/m3_multiply_vec3.d.ts.map +1 -0
- package/src/core/geom/mat3/m3_multiply_vec3.js +21 -0
- package/src/core/geom/random/randomPointInSphere.d.ts +1 -1
- package/src/core/geom/random/randomPointInSphere.js +2 -2
- package/src/core/geom/random/randomPointOnSphere.d.ts +3 -3
- package/src/core/geom/random/randomPointOnSphere.d.ts.map +1 -1
- package/src/core/geom/random/randomPointOnSphere.js +5 -9
- package/src/core/geom/vec2/v2_cross_product.d.ts +15 -0
- package/src/core/geom/vec2/v2_cross_product.d.ts.map +1 -0
- package/src/core/geom/vec2/v2_cross_product.js +21 -0
- package/src/core/geom/vec3/v3_slerp.d.ts +1 -0
- package/src/core/geom/vec3/v3_slerp.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_slerp.js +1 -0
- package/src/core/graph/MultiNode.d.ts +1 -1
- package/src/core/graph/MultiNode.js +1 -1
- package/src/core/graph/WeightedEdge.d.ts +6 -4
- package/src/core/graph/WeightedEdge.d.ts.map +1 -1
- package/src/core/graph/WeightedEdge.js +3 -0
- package/src/core/graph/coloring/colorizeGraph.js +19 -19
- package/src/core/graph/convert_graph_to_dot_string.d.ts +1 -1
- package/src/core/graph/convert_graph_to_dot_string.d.ts.map +1 -1
- package/src/core/graph/convert_graph_to_dot_string.js +10 -6
- package/src/core/graph/graph_compute_adjacency_matrix.d.ts +9 -0
- package/src/core/graph/graph_compute_adjacency_matrix.d.ts.map +1 -0
- package/src/core/graph/{graph_adjacency_matrix.js → graph_compute_adjacency_matrix.js} +1 -2
- package/src/core/graph/graph_compute_degree_matrix.d.ts +10 -0
- package/src/core/graph/graph_compute_degree_matrix.d.ts.map +1 -0
- package/src/core/graph/graph_compute_degree_matrix.js +23 -0
- package/src/core/graph/graph_compute_distance_matrix.d.ts +13 -0
- package/src/core/graph/graph_compute_distance_matrix.d.ts.map +1 -0
- package/src/core/graph/graph_compute_distance_matrix.js +103 -0
- package/src/core/graph/{graph_laplacian_matrix.d.ts → graph_compute_laplacian_matrix.d.ts} +2 -2
- package/src/core/graph/graph_compute_laplacian_matrix.d.ts.map +1 -0
- package/src/core/graph/{graph_laplacian_matrix.js → graph_compute_laplacian_matrix.js} +6 -6
- package/src/core/graph/graph_k_means_cluster.d.ts.map +1 -1
- package/src/core/graph/graph_k_means_cluster.js +4 -119
- package/src/core/graph/{coarsen_graph.d.ts → mn_graph_coarsen.d.ts} +2 -2
- package/src/core/graph/mn_graph_coarsen.d.ts.map +1 -0
- package/src/core/graph/{coarsen_graph.js → mn_graph_coarsen.js} +1 -1
- package/src/core/graph/mn_graph_coarsen.spec.d.ts +2 -0
- package/src/core/graph/mn_graph_coarsen.spec.d.ts.map +1 -0
- package/src/core/graph/{coarsen_graph.spec.js → mn_graph_coarsen.spec.js} +4 -4
- package/src/core/graph/mn_graph_collapse_weighted_edge.d.ts +1 -0
- package/src/core/graph/mn_graph_collapse_weighted_edge.d.ts.map +1 -1
- package/src/core/graph/mn_graph_collapse_weighted_edge.js +7 -1
- package/src/core/math/physics/brdf/brdf_burley.d.ts.map +1 -1
- package/src/core/math/physics/brdf/brdf_burley.js +9 -1
- package/src/core/math/physics/brdf/{D_GGX.d.ts → diffuse_GGX.d.ts} +2 -2
- package/src/core/math/physics/brdf/diffuse_GGX.d.ts.map +1 -0
- package/src/core/math/physics/brdf/{D_GGX.js → diffuse_GGX.js} +1 -1
- package/src/core/math/physics/brdf/fresnel_Schlick.d.ts +3 -0
- package/src/core/math/physics/brdf/fresnel_Schlick.d.ts.map +1 -0
- package/src/core/math/physics/brdf/fresnel_Schlick.js +3 -0
- package/src/core/math/physics/brdf/fresnel_Schlick_optimized.d.ts +9 -0
- package/src/core/math/physics/brdf/fresnel_Schlick_optimized.d.ts.map +1 -0
- package/src/core/math/physics/brdf/fresnel_Schlick_optimized.js +12 -0
- package/src/core/math/physics/brdf/fresnel_Schlick_original.d.ts +9 -0
- package/src/core/math/physics/brdf/fresnel_Schlick_original.d.ts.map +1 -0
- package/src/core/math/physics/brdf/fresnel_Schlick_original.js +10 -0
- package/src/core/math/physics/bsdf/bsdf_schlick.d.ts.map +1 -1
- package/src/core/math/physics/bsdf/bsdf_schlick.js +3 -11
- package/src/core/math/physics/ior_to_reflectivity.d.ts +7 -0
- package/src/core/math/physics/ior_to_reflectivity.d.ts.map +1 -0
- package/src/core/math/physics/ior_to_reflectivity.js +9 -0
- package/src/core/math/physics/pdf/README.md +1 -0
- package/src/core/math/physics/pdf/pdf_GGX.d.ts +16 -0
- package/src/core/math/physics/pdf/pdf_GGX.d.ts.map +1 -0
- package/src/core/math/physics/pdf/pdf_GGX.js +25 -0
- package/src/core/math/physics/reflectivity_to_ior.d.ts +7 -0
- package/src/core/math/physics/reflectivity_to_ior.d.ts.map +1 -0
- package/src/core/math/physics/reflectivity_to_ior.js +8 -0
- package/src/core/process/task/util/randomCountTask.js +3 -3
- package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
- package/src/core/process/worker/WorkerBuilder.js +5 -35
- package/src/engine/EngineHarness.d.ts +10 -1
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +22 -11
- package/src/engine/asset/loaders/ArrayBufferLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/ArrayBufferLoader.js +17 -10
- package/src/engine/asset/loaders/image/png/PNGReader.d.ts +25 -11
- package/src/engine/asset/loaders/image/png/PNGReader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/PNGReader.js +38 -24
- package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.d.ts.map +1 -1
- package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.js +5 -0
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +4 -4
- package/src/engine/graphics/GraphicsEngine.js +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +4 -0
- package/src/engine/graphics/ecs/light/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/LightSystem.js +2 -3
- package/src/engine/graphics/ecs/light/binding/three/ThreeLightBinding.d.ts +6 -0
- package/src/engine/graphics/ecs/light/binding/three/ThreeLightBinding.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +22 -11
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +7 -7
- package/src/engine/graphics/impostors/octahedral/bake/prepare_bake_material.js +3 -3
- package/src/engine/graphics/render/forward_plus/model/DirectionalLight.d.ts.map +1 -1
- package/src/engine/graphics/render/forward_plus/model/DirectionalLight.js +25 -25
- package/src/engine/graphics/sh3/SH3VisualisationMaterial.d.ts.map +1 -1
- package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +9 -6
- package/src/engine/graphics/sh3/fromCubeRenderTarget.d.ts +9 -0
- package/src/engine/graphics/sh3/fromCubeRenderTarget.d.ts.map +1 -0
- package/src/engine/graphics/sh3/fromCubeRenderTarget.js +145 -0
- package/src/engine/graphics/sh3/gi/tetrahedral_mesh_to_texture.d.ts +8 -0
- package/src/engine/graphics/sh3/gi/tetrahedral_mesh_to_texture.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/tetrahedral_mesh_to_texture.js +51 -0
- package/src/engine/graphics/sh3/{LightProbeVolume.d.ts → lpv/LightProbeVolume.d.ts} +18 -7
- package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +340 -0
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.d.ts +18 -0
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.js +44 -0
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +12 -0
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +122 -0
- package/src/engine/graphics/sh3/lpv/ProbeRenderer.d.ts +29 -0
- package/src/engine/graphics/sh3/lpv/ProbeRenderer.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/ProbeRenderer.js +35 -0
- package/src/engine/graphics/sh3/lpv/WebGLCubeProbeRenderer.d.ts +27 -0
- package/src/engine/graphics/sh3/lpv/WebGLCubeProbeRenderer.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/WebGLCubeProbeRenderer.js +158 -0
- package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts +11 -0
- package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/build_probes_for_scene.js +127 -0
- package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts +12 -0
- package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.js +89 -0
- package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts +90 -0
- package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +352 -0
- package/src/engine/graphics/sh3/path_tracer/PathTracer.d.ts +5 -91
- package/src/engine/graphics/sh3/path_tracer/PathTracer.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/PathTracer.js +41 -477
- package/src/engine/graphics/sh3/path_tracer/make_one_vector3.d.ts +1 -0
- package/src/engine/graphics/sh3/path_tracer/make_one_vector3.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/make_one_vector3.js +6 -3
- package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +38 -62
- package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.js +7 -1
- package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts +2 -2
- package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.d.ts +10 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.js +20 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.d.ts +10 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.js +31 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.d.ts +9 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.js +21 -0
- package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.d.ts +3 -0
- package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.js +3 -0
- package/src/engine/graphics/sh3/path_tracer/texture/apply_texture_clamping_to_coordinate.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/{apply_texture_clamping_to_coordinate.js → texture/apply_texture_clamping_to_coordinate.js} +2 -2
- package/src/engine/graphics/sh3/path_tracer/texture/sample_material.d.ts +11 -0
- package/src/engine/graphics/sh3/path_tracer/texture/sample_material.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +86 -0
- package/src/engine/graphics/sh3/path_tracer/texture/sample_texture.d.ts +10 -0
- package/src/engine/graphics/sh3/path_tracer/texture/sample_texture.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/texture/sample_texture.js +55 -0
- package/src/engine/graphics/sh3/path_tracer/vec3_uint8_to_float.js +4 -4
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +145 -185
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts +5 -5
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts.map +1 -1
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +8 -8
- package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts +13 -0
- package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts.map +1 -0
- package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.js +54 -0
- package/src/engine/graphics/texture/AttributeDataTexture.d.ts +2 -2
- package/src/engine/graphics/texture/AttributeDataTexture.d.ts.map +1 -1
- package/src/engine/graphics/texture/AttributeDataTexture.js +11 -11
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.js +2 -2
- package/src/engine/input/ecs/systems/InputControllerSystem.js +1 -1
- package/src/engine/network/convertPathToURL.d.ts +3 -1
- package/src/engine/network/convertPathToURL.d.ts.map +1 -1
- package/src/engine/network/convertPathToURL.js +68 -51
- package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
- package/src/engine/physics/fluid/SliceVisualiser.js +4 -4
- package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
- package/src/generation/filtering/numeric/CellFilterCache.js +1 -0
- package/src/view/elements/ColorPickerView.d.ts.map +1 -1
- package/src/view/elements/ColorPickerView.js +7 -7
- package/src/core/binary/float2uint8.d.ts +0 -7
- package/src/core/binary/float2uint8.d.ts.map +0 -1
- package/src/core/binary/uint82float.d.ts +0 -7
- package/src/core/binary/uint82float.d.ts.map +0 -1
- package/src/core/binary/uint82float.spec.d.ts +0 -2
- package/src/core/binary/uint82float.spec.d.ts.map +0 -1
- package/src/core/binary/uint82float.spec.js +0 -7
- package/src/core/collection/array/randomizeArrayElementOrder.d.ts +0 -8
- package/src/core/collection/array/randomizeArrayElementOrder.d.ts.map +0 -1
- package/src/core/collection/array/randomizeArrayElementOrder.js +0 -24
- package/src/core/collection/array/randomizeArrayElementOrder.spec.d.ts +0 -2
- package/src/core/collection/array/randomizeArrayElementOrder.spec.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/compute_circumsphere.d.ts.map +0 -1
- package/src/core/graph/coarsen_graph.d.ts.map +0 -1
- package/src/core/graph/coarsen_graph.spec.d.ts +0 -2
- package/src/core/graph/coarsen_graph.spec.d.ts.map +0 -1
- package/src/core/graph/graph_adjacency_matrix.d.ts +0 -9
- package/src/core/graph/graph_adjacency_matrix.d.ts.map +0 -1
- package/src/core/graph/graph_degree_matrix.d.ts +0 -9
- package/src/core/graph/graph_degree_matrix.d.ts.map +0 -1
- package/src/core/graph/graph_degree_matrix.js +0 -18
- package/src/core/graph/graph_laplacian_matrix.d.ts.map +0 -1
- package/src/core/math/physics/brdf/D_GGX.d.ts.map +0 -1
- package/src/engine/graphics/sh3/LightProbeVolume.d.ts.map +0 -1
- package/src/engine/graphics/sh3/LightProbeVolume.js +0 -609
- package/src/engine/graphics/sh3/path_tracer/apply_texture_clamping_to_coordinate.d.ts.map +0 -1
- package/src/engine/graphics/sh3/visualise_probe.d.ts +0 -12
- package/src/engine/graphics/sh3/visualise_probe.d.ts.map +0 -1
- package/src/engine/graphics/sh3/visualise_probe.js +0 -40
- /package/src/engine/graphics/sh3/path_tracer/{apply_texture_clamping_to_coordinate.d.ts → texture/apply_texture_clamping_to_coordinate.d.ts} +0 -0
|
@@ -1,609 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CubeCamera,
|
|
3
|
-
LinearEncoding,
|
|
4
|
-
LinearFilter,
|
|
5
|
-
LineBasicMaterial,
|
|
6
|
-
MeshStandardMaterial,
|
|
7
|
-
RGBAFormat,
|
|
8
|
-
Scene,
|
|
9
|
-
WebGLCubeRenderTarget
|
|
10
|
-
} from "three";
|
|
11
|
-
import { array_copy } from "../../../core/collection/array/array_copy.js";
|
|
12
|
-
import { sh3_basis_at } from "../../../core/geom/3d/sphere/harmonics/sh3_basis_at.js";
|
|
13
|
-
import { sh3_dering_optimize_positive } from "../../../core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js";
|
|
14
|
-
import { SurfacePoint3 } from "../../../core/geom/3d/SurfacePoint3.js";
|
|
15
|
-
import {
|
|
16
|
-
build_tetrahedral_mesh_buffer_geometry
|
|
17
|
-
} from "../../../core/geom/3d/tetrahedra/build_tetrahedral_mesh_buffer_geometry.js";
|
|
18
|
-
import {
|
|
19
|
-
compute_delaunay_tetrahedral_mesh
|
|
20
|
-
} from "../../../core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js";
|
|
21
|
-
import { TetrahedralMesh } from "../../../core/geom/3d/tetrahedra/TetrahedralMesh.js";
|
|
22
|
-
import { v3_length_sqr } from "../../../core/geom/vec3/v3_length_sqr.js";
|
|
23
|
-
import TaskGroup from "../../../core/process/task/TaskGroup.js";
|
|
24
|
-
import { actionTask } from "../../../core/process/task/util/actionTask.js";
|
|
25
|
-
import { countTask } from "../../../core/process/task/util/countTask.js";
|
|
26
|
-
import Entity from "../../ecs/Entity.js";
|
|
27
|
-
import { Transform } from "../../ecs/transform/Transform.js";
|
|
28
|
-
import { threeMakeLight } from "../ecs/light/binding/three/threeMakeLight.js";
|
|
29
|
-
import { Light } from "../ecs/light/Light.js";
|
|
30
|
-
import { ThreeLightCache } from "../ecs/light/three/ThreeLightCache.js";
|
|
31
|
-
import { build_three_object } from "../ecs/mesh-v2/build_three_object.js";
|
|
32
|
-
import { DrawMode } from "../ecs/mesh-v2/DrawMode.js";
|
|
33
|
-
import { ShadedGeometry } from "../ecs/mesh-v2/ShadedGeometry.js";
|
|
34
|
-
import { ShadedGeometryFlags } from "../ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
35
|
-
import { applyTransformToThreeObject } from "../ecs/mesh/applyTransformToThreeObject.js";
|
|
36
|
-
import { visualise_probe } from "./visualise_probe.js";
|
|
37
|
-
|
|
38
|
-
const TEMP_CONTACT = new SurfacePoint3();
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
42
|
-
* @param {Uint8Array} data
|
|
43
|
-
* @param {THREE.WebGLRenderer} renderer
|
|
44
|
-
* @param {THREE.WebGLCubeRenderTarget} cubeRenderTarget
|
|
45
|
-
* @return {Float64Array}
|
|
46
|
-
*/
|
|
47
|
-
function fromCubeRenderTarget(data, renderer, cubeRenderTarget) {
|
|
48
|
-
|
|
49
|
-
// The renderTarget must be set to RGBA in order to make readRenderTargetPixels works
|
|
50
|
-
let total_weight = 0;
|
|
51
|
-
|
|
52
|
-
const __shared_buffer = new ArrayBuffer((27 + 9) * 8);
|
|
53
|
-
|
|
54
|
-
const sh_basis = new Float64Array(__shared_buffer, 0, 9);
|
|
55
|
-
const coefficients = new Float64Array(__shared_buffer, 9 * 8, 27);
|
|
56
|
-
|
|
57
|
-
const image_size = cubeRenderTarget.width;
|
|
58
|
-
|
|
59
|
-
const pixel_size = 2 / image_size;
|
|
60
|
-
|
|
61
|
-
let normal_x = 0, normal_y = 0, normal_z = 0;
|
|
62
|
-
|
|
63
|
-
for (let faceIndex = 0; faceIndex < 6; faceIndex++) {
|
|
64
|
-
|
|
65
|
-
renderer.readRenderTargetPixels(cubeRenderTarget, 0, 0, image_size, image_size, data, faceIndex);
|
|
66
|
-
|
|
67
|
-
// RGBA assumed
|
|
68
|
-
|
|
69
|
-
for (let i = 0, il = data.length; i < il; i += 4) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// pixel coordinate on unit cube
|
|
73
|
-
|
|
74
|
-
const pixelIndex = i / 4;
|
|
75
|
-
|
|
76
|
-
const col = -1 + (pixelIndex % image_size + 0.5) * pixel_size;
|
|
77
|
-
|
|
78
|
-
const row = 1 - (Math.floor(pixelIndex / image_size) + 0.5) * pixel_size;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
switch (faceIndex) {
|
|
82
|
-
|
|
83
|
-
case 0:
|
|
84
|
-
normal_x = 1;
|
|
85
|
-
normal_y = row;
|
|
86
|
-
normal_z = -col;
|
|
87
|
-
break;
|
|
88
|
-
|
|
89
|
-
case 1:
|
|
90
|
-
normal_x = -1;
|
|
91
|
-
normal_y = row;
|
|
92
|
-
normal_z = col;
|
|
93
|
-
break;
|
|
94
|
-
|
|
95
|
-
case 2:
|
|
96
|
-
normal_x = col;
|
|
97
|
-
normal_y = 1;
|
|
98
|
-
normal_z = -row;
|
|
99
|
-
break;
|
|
100
|
-
|
|
101
|
-
case 3:
|
|
102
|
-
normal_x = col;
|
|
103
|
-
normal_y = -1;
|
|
104
|
-
normal_z = row;
|
|
105
|
-
break;
|
|
106
|
-
|
|
107
|
-
case 4:
|
|
108
|
-
normal_x = col;
|
|
109
|
-
normal_y = row;
|
|
110
|
-
normal_z = 1;
|
|
111
|
-
break;
|
|
112
|
-
|
|
113
|
-
case 5:
|
|
114
|
-
normal_x = -col;
|
|
115
|
-
normal_y = row;
|
|
116
|
-
normal_z = -1;
|
|
117
|
-
break;
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// weight assigned to this pixel
|
|
122
|
-
|
|
123
|
-
const length_squared = v3_length_sqr(normal_x, normal_y, normal_z);
|
|
124
|
-
|
|
125
|
-
const length = Math.sqrt(length_squared);
|
|
126
|
-
|
|
127
|
-
const weight = 4 / (length * length_squared);
|
|
128
|
-
|
|
129
|
-
total_weight += weight;
|
|
130
|
-
|
|
131
|
-
// direction vector to this pixel
|
|
132
|
-
normal_x /= length;
|
|
133
|
-
normal_y /= length;
|
|
134
|
-
normal_z /= length;
|
|
135
|
-
|
|
136
|
-
// evaluate SH basis functions in direction dir
|
|
137
|
-
sh3_basis_at(normal_x, normal_y, normal_z, sh_basis);
|
|
138
|
-
|
|
139
|
-
// pixel color, already in linear space so no sRGB->Linear conversion necessary
|
|
140
|
-
|
|
141
|
-
// 0.003921 constant value is 1/255, a conversion value from UINT8 to normalized float
|
|
142
|
-
const weight_conv = weight * 0.00392156862745098;
|
|
143
|
-
|
|
144
|
-
const color_r = data[i] * weight_conv;
|
|
145
|
-
const color_g = data[i + 1] * weight_conv;
|
|
146
|
-
const color_b = data[i + 2] * weight_conv;
|
|
147
|
-
|
|
148
|
-
// accumulate
|
|
149
|
-
for (let j = 0; j < 9; j++) {
|
|
150
|
-
|
|
151
|
-
coefficients[j * 3] += sh_basis[j] * color_r;
|
|
152
|
-
coefficients[j * 3 + 1] += sh_basis[j] * color_g;
|
|
153
|
-
coefficients[j * 3 + 2] += sh_basis[j] * color_b;
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// normalize
|
|
162
|
-
const norm = (4 * Math.PI) / total_weight;
|
|
163
|
-
|
|
164
|
-
for (let j = 0; j < 27; j++) {
|
|
165
|
-
|
|
166
|
-
coefficients[j] *= norm;
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
sh3_dering_optimize_positive(coefficients, 0, coefficients, 0, 3);
|
|
171
|
-
|
|
172
|
-
return coefficients;
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
class CubeRenderer {
|
|
178
|
-
constructor() {
|
|
179
|
-
/**
|
|
180
|
-
*
|
|
181
|
-
* @type {GraphicsEngine|null}
|
|
182
|
-
*/
|
|
183
|
-
this.ge = null;
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
*
|
|
187
|
-
* @type {THREE.WebGLRenderer|null}
|
|
188
|
-
* @private
|
|
189
|
-
*/
|
|
190
|
-
this.__renderer = null;
|
|
191
|
-
|
|
192
|
-
this.render_target = new WebGLCubeRenderTarget(32, {
|
|
193
|
-
format: RGBAFormat,
|
|
194
|
-
minFilter: LinearFilter,
|
|
195
|
-
magFilter: LinearFilter,
|
|
196
|
-
depthBuffer: true,
|
|
197
|
-
scissorTest: false,
|
|
198
|
-
stencilBuffer: false,
|
|
199
|
-
generateMipmaps: false,
|
|
200
|
-
encoding: LinearEncoding
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Used to read out GPU memory for each face
|
|
205
|
-
* @type {Uint8Array}
|
|
206
|
-
* @private
|
|
207
|
-
*/
|
|
208
|
-
this.__cube_face_raw = new Uint8Array(this.render_target.width * this.render_target.width * 4);
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
this.__cube_camera = new CubeCamera(0.1, 100, this.render_target);
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
*
|
|
215
|
-
* @type {Scene}
|
|
216
|
-
* @private
|
|
217
|
-
*/
|
|
218
|
-
this.__scene = new Scene();
|
|
219
|
-
// this.__scene.autoUpdate = false;
|
|
220
|
-
// this.__scene.matrixAutoUpdate = false;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
*
|
|
225
|
-
* @param {EntityComponentDataset} ecd
|
|
226
|
-
*/
|
|
227
|
-
build_scene(ecd) {
|
|
228
|
-
this.__scene.children.splice(0, this.__scene.children.length);
|
|
229
|
-
|
|
230
|
-
ecd.traverseEntities([ShadedGeometry, Transform], (sg, t, entity) => {
|
|
231
|
-
const object3D = build_three_object(sg);
|
|
232
|
-
|
|
233
|
-
const source_material = sg.material;
|
|
234
|
-
|
|
235
|
-
//
|
|
236
|
-
if (source_material.isMeshStandardMaterial === true) {
|
|
237
|
-
object3D.material = new MeshStandardMaterial({
|
|
238
|
-
map: source_material.map,
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
object3D.material.color.copy(source_material.color);
|
|
242
|
-
} else {
|
|
243
|
-
object3D.material = source_material.clone();
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
applyTransformToThreeObject(object3D, t);
|
|
247
|
-
|
|
248
|
-
array_copy(t.matrix, 0, object3D.matrixWorld.elements, 0, 16);
|
|
249
|
-
|
|
250
|
-
this.__scene.add(object3D);
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
const lightCache = new ThreeLightCache();
|
|
254
|
-
|
|
255
|
-
ecd.traverseEntities([Light, Transform], (light, t) => {
|
|
256
|
-
|
|
257
|
-
const object = threeMakeLight(light, lightCache);
|
|
258
|
-
applyTransformToThreeObject(object, t);
|
|
259
|
-
|
|
260
|
-
this.__scene.add(object);
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
// this.__scene.add(this.__cube_camera);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
bake_start() {
|
|
267
|
-
// this.__renderer = WebGLRendererPool.global.get();
|
|
268
|
-
|
|
269
|
-
this.__renderer = this.ge.getRenderer();
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
bake_end() {
|
|
273
|
-
// WebGLRendererPool.global.release(this.__renderer);
|
|
274
|
-
|
|
275
|
-
this.__renderer = null;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
*
|
|
280
|
-
* @param {number[]} position
|
|
281
|
-
* @param {number} position_offset
|
|
282
|
-
* @param {number[]} output
|
|
283
|
-
* @param {number} output_offset
|
|
284
|
-
*/
|
|
285
|
-
bake(position, position_offset, output, output_offset) {
|
|
286
|
-
// console.warn(position_offset, output_offset);
|
|
287
|
-
|
|
288
|
-
// const ge = this.ge;
|
|
289
|
-
const renderer = this.__renderer;
|
|
290
|
-
|
|
291
|
-
const _rt = renderer.getRenderTarget();
|
|
292
|
-
const _rt_active_face = renderer.getActiveCubeFace();
|
|
293
|
-
const _acc = renderer.autoClearColor;
|
|
294
|
-
const _acd = renderer.autoClearDepth;
|
|
295
|
-
const _ac = renderer.autoClear;
|
|
296
|
-
const _outputEncoding = renderer.outputEncoding;
|
|
297
|
-
|
|
298
|
-
renderer.outputEncoding = LinearEncoding;
|
|
299
|
-
|
|
300
|
-
renderer.autoClearColor = true;
|
|
301
|
-
renderer.autoClearDepth = true;
|
|
302
|
-
renderer.autoClear = true;
|
|
303
|
-
|
|
304
|
-
this.__cube_camera.position.fromArray(position, position_offset);
|
|
305
|
-
|
|
306
|
-
this.__cube_camera.children.forEach(c => {
|
|
307
|
-
c.updateProjectionMatrix();
|
|
308
|
-
c.updateMatrix();
|
|
309
|
-
c.updateMatrixWorld(true);
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
this.__cube_camera.update(renderer, this.__scene);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
// compute coefficients from renderer
|
|
316
|
-
const probe_coefficients = fromCubeRenderTarget(this.__cube_face_raw, renderer, this.render_target);
|
|
317
|
-
|
|
318
|
-
array_copy(probe_coefficients, 0, output, output_offset, 27);
|
|
319
|
-
|
|
320
|
-
// restore state
|
|
321
|
-
renderer.setRenderTarget(_rt, _rt_active_face);
|
|
322
|
-
renderer.autoClearColor = _acc;
|
|
323
|
-
renderer.autoClearDepth = _acd;
|
|
324
|
-
renderer.autoClear = _ac;
|
|
325
|
-
renderer.outputEncoding = _outputEncoding;
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
class Baker {
|
|
330
|
-
constructor() {
|
|
331
|
-
/**
|
|
332
|
-
*
|
|
333
|
-
* @type {EntityComponentDataset|null}
|
|
334
|
-
* @private
|
|
335
|
-
*/
|
|
336
|
-
this.__ecd = null;
|
|
337
|
-
|
|
338
|
-
/**
|
|
339
|
-
*
|
|
340
|
-
* @type {BVH|null}
|
|
341
|
-
* @private
|
|
342
|
-
*/
|
|
343
|
-
this.__bvh = null;
|
|
344
|
-
|
|
345
|
-
this.__min_bounce_count = 3;
|
|
346
|
-
this.__max_bounce_count = 100;
|
|
347
|
-
|
|
348
|
-
this._ren = new CubeRenderer();
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
/**
|
|
352
|
-
* @param {BVH} bvh
|
|
353
|
-
*/
|
|
354
|
-
set_bvh(bvh) {
|
|
355
|
-
this.__bvh = bvh;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
build_spatial() {
|
|
359
|
-
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
*
|
|
364
|
-
* @param {number[]} irradiance RGB irradiance result is written here
|
|
365
|
-
* @param {number} bounce_count number of reflections before this trace
|
|
366
|
-
* @param {number} origin_x
|
|
367
|
-
* @param {number} origin_y
|
|
368
|
-
* @param {number} origin_z
|
|
369
|
-
* @param {number} direction_x
|
|
370
|
-
* @param {number} direction_y
|
|
371
|
-
* @param {number} direction_z
|
|
372
|
-
*/
|
|
373
|
-
trace_ray(irradiance, bounce_count,
|
|
374
|
-
origin_x, origin_y, origin_z,
|
|
375
|
-
direction_x, direction_y, direction_z) {
|
|
376
|
-
|
|
377
|
-
//
|
|
378
|
-
|
|
379
|
-
if (!this.ray_cast(TEMP_CONTACT, origin_x, origin_y, origin_z, direction_x, direction_y, direction_z)) {
|
|
380
|
-
// no hit, assume irradiance is zeroed - black
|
|
381
|
-
|
|
382
|
-
return;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// record irradiance
|
|
386
|
-
|
|
387
|
-
// reflect ray around normal
|
|
388
|
-
// TODO apply BDRF to compute reflected ray
|
|
389
|
-
|
|
390
|
-
if (bounce_count > this.__max_bounce_count) {
|
|
391
|
-
// terminate
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
/**
|
|
397
|
-
*
|
|
398
|
-
* @param contact
|
|
399
|
-
* @param origin_x
|
|
400
|
-
* @param origin_y
|
|
401
|
-
* @param origin_z
|
|
402
|
-
* @param direction_x
|
|
403
|
-
* @param direction_y
|
|
404
|
-
* @param direction_z
|
|
405
|
-
* @returns {boolean}
|
|
406
|
-
*/
|
|
407
|
-
ray_cast(contact,
|
|
408
|
-
origin_x, origin_y, origin_z,
|
|
409
|
-
direction_x, direction_y, direction_z
|
|
410
|
-
) {
|
|
411
|
-
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
prepare_scene() {
|
|
415
|
-
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
*
|
|
420
|
-
* @param {number[]} position
|
|
421
|
-
* @param {number} position_offset
|
|
422
|
-
* @param {number[]} output
|
|
423
|
-
* @param {number} output_offset
|
|
424
|
-
*/
|
|
425
|
-
bake_sh3_cube(
|
|
426
|
-
position, position_offset,
|
|
427
|
-
output, output_offset
|
|
428
|
-
) {
|
|
429
|
-
|
|
430
|
-
this._ren.bake(position, position_offset, output, output_offset);
|
|
431
|
-
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
/**
|
|
435
|
-
*
|
|
436
|
-
* @param {Engine} engine
|
|
437
|
-
*/
|
|
438
|
-
prepare(engine) {
|
|
439
|
-
this._ren.ge = engine.graphics;
|
|
440
|
-
|
|
441
|
-
this._ren.build_scene(engine.entityManager.dataset);
|
|
442
|
-
|
|
443
|
-
this._ren.bake_start();
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
finish() {
|
|
447
|
-
this._ren.bake_end();
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
export class LightProbeVolume {
|
|
452
|
-
constructor() {
|
|
453
|
-
this.__positions = [];
|
|
454
|
-
|
|
455
|
-
this.__mesh = new TetrahedralMesh();
|
|
456
|
-
|
|
457
|
-
this.__probe_data = [];
|
|
458
|
-
|
|
459
|
-
this.__length = 0;
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
/**
|
|
463
|
-
*
|
|
464
|
-
* @param {number} x
|
|
465
|
-
* @param {number} y
|
|
466
|
-
* @param {number} z
|
|
467
|
-
*/
|
|
468
|
-
add_point(x, y, z) {
|
|
469
|
-
const i = this.__length;
|
|
470
|
-
|
|
471
|
-
this.__positions[i * 3] = x;
|
|
472
|
-
this.__positions[i * 3 + 1] = y;
|
|
473
|
-
this.__positions[i * 3 + 2] = z;
|
|
474
|
-
|
|
475
|
-
for (let j = 0; j < 9 * 3; j++) {
|
|
476
|
-
this.__probe_data[i * 9 * 3 + j] = 1; // fill with white
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
this.__length++;
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
/**
|
|
483
|
-
*
|
|
484
|
-
* @param {number} index
|
|
485
|
-
* @param {number[]} source
|
|
486
|
-
* @param {number} source_offset
|
|
487
|
-
*/
|
|
488
|
-
white_probe(index, source, source_offset) {
|
|
489
|
-
array_copy(source, source_offset, this.__probe_data, index * 9 * 3, 9 * 3);
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
/**
|
|
493
|
-
* Build tetrahedral mesh
|
|
494
|
-
*/
|
|
495
|
-
build_mesh() {
|
|
496
|
-
|
|
497
|
-
const t0 = performance.now();
|
|
498
|
-
compute_delaunay_tetrahedral_mesh(this.__mesh, this.__positions, this.__length);
|
|
499
|
-
|
|
500
|
-
const t1 = performance.now();
|
|
501
|
-
|
|
502
|
-
// optional step to improve memory utilization
|
|
503
|
-
this.__mesh.compact();
|
|
504
|
-
|
|
505
|
-
const t2 = performance.now();
|
|
506
|
-
|
|
507
|
-
console.log(`Tetrahedral mesh (${this.__length} points, ${this.__mesh.size()} tets) build took ${t2 - t0}ms`);
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
/**
|
|
512
|
-
* Bake light probes
|
|
513
|
-
* @param {Engine} engine
|
|
514
|
-
* @returns {TaskGroup}
|
|
515
|
-
*/
|
|
516
|
-
bake(engine) {
|
|
517
|
-
const baker = new Baker();
|
|
518
|
-
// baker.set_bvh(entityManager.getSystem(ShadedGeometrySystem).__bvh_binary);
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
const tPrepare = actionTask(() => {
|
|
522
|
-
baker.prepare(engine);
|
|
523
|
-
});
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
const probe_count = this.__length;
|
|
527
|
-
const tBake = countTask(0, probe_count, (i) => {
|
|
528
|
-
|
|
529
|
-
baker.bake_sh3_cube(
|
|
530
|
-
this.__positions, i * 3,
|
|
531
|
-
this.__probe_data, i * 9 * 3
|
|
532
|
-
);
|
|
533
|
-
|
|
534
|
-
});
|
|
535
|
-
|
|
536
|
-
tBake.promise().then(()=>{
|
|
537
|
-
|
|
538
|
-
const duration =tBake.__executedCpuTime;
|
|
539
|
-
|
|
540
|
-
console.log(`Baked ${probe_count} probes in ${duration}ms, ~${(duration / probe_count).toFixed(2)}ms per probe`);
|
|
541
|
-
|
|
542
|
-
})
|
|
543
|
-
|
|
544
|
-
const tFinish = actionTask(() => {
|
|
545
|
-
baker.finish();
|
|
546
|
-
});
|
|
547
|
-
|
|
548
|
-
tFinish.addDependency(tBake);
|
|
549
|
-
tBake.addDependency(tPrepare);
|
|
550
|
-
|
|
551
|
-
return new TaskGroup([
|
|
552
|
-
tPrepare, tBake, tFinish
|
|
553
|
-
]);
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
/**
|
|
557
|
-
*
|
|
558
|
-
* @param {EntityComponentDataset} ecd
|
|
559
|
-
* @param {number} size
|
|
560
|
-
* @param {boolean} shadow
|
|
561
|
-
*/
|
|
562
|
-
visualize_probes({ ecd, size = 0.2, shadow = false }) {
|
|
563
|
-
for (let i = 0; i < this.__length; i++) {
|
|
564
|
-
visualise_probe({
|
|
565
|
-
size,
|
|
566
|
-
position: this.__positions,
|
|
567
|
-
position_offset: i * 3,
|
|
568
|
-
sh: this.__probe_data,
|
|
569
|
-
sh_offset: i * 3 * 9,
|
|
570
|
-
shadow: shadow
|
|
571
|
-
}).build(ecd);
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
/**
|
|
576
|
-
*
|
|
577
|
-
* @param {EntityComponentDataset} ecd
|
|
578
|
-
* @param {string|number} color CSS color definition
|
|
579
|
-
*/
|
|
580
|
-
visualize_mesh({ ecd, color = '#FF00FF' }) {
|
|
581
|
-
|
|
582
|
-
const geometry = build_tetrahedral_mesh_buffer_geometry(this.__mesh, this.__positions);
|
|
583
|
-
|
|
584
|
-
const sg = ShadedGeometry.from(geometry, new LineBasicMaterial({
|
|
585
|
-
color: color,
|
|
586
|
-
transparent: true,
|
|
587
|
-
opacity: 0.35,
|
|
588
|
-
depthWrite: false
|
|
589
|
-
}), DrawMode.LineSegments);
|
|
590
|
-
|
|
591
|
-
sg.clearFlag(ShadedGeometryFlags.CastShadow);
|
|
592
|
-
sg.clearFlag(ShadedGeometryFlags.ReceiveShadow);
|
|
593
|
-
|
|
594
|
-
new Entity()
|
|
595
|
-
.add(sg)
|
|
596
|
-
.add(new Transform())
|
|
597
|
-
.build(ecd);
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
/**
|
|
601
|
-
*
|
|
602
|
-
* @param {Engine} engine
|
|
603
|
-
* @returns {TaskGroup}
|
|
604
|
-
*/
|
|
605
|
-
build(engine) {
|
|
606
|
-
this.build_mesh();
|
|
607
|
-
return this.bake(engine);
|
|
608
|
-
}
|
|
609
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply_texture_clamping_to_coordinate.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/path_tracer/apply_texture_clamping_to_coordinate.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,+DAJW,MAAM,KACN,MAAM,GACL,MAAM,CAcjB"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* @param {number} [size]
|
|
4
|
-
* @param position
|
|
5
|
-
* @param position_offset
|
|
6
|
-
* @param sh
|
|
7
|
-
* @param sh_offset
|
|
8
|
-
* @return {Entity}
|
|
9
|
-
*/
|
|
10
|
-
export function visualise_probe({ size, shadow, position, position_offset, sh, sh_offset }?: number): Entity;
|
|
11
|
-
import Entity from "../../ecs/Entity.js";
|
|
12
|
-
//# sourceMappingURL=visualise_probe.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visualise_probe.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/sh3/visualise_probe.js"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,6FAPW,MAAM,GAKL,MAAM,CAyBjB;mBAtCkB,qBAAqB"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { SH3VisualisationMaterial } from "./SH3VisualisationMaterial.js";
|
|
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 { OctahedronBufferGeometry } from "three";
|
|
6
|
-
import { ShadedGeometryFlags } from "../ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
*
|
|
10
|
-
* @param {number} [size]
|
|
11
|
-
* @param position
|
|
12
|
-
* @param position_offset
|
|
13
|
-
* @param sh
|
|
14
|
-
* @param sh_offset
|
|
15
|
-
* @return {Entity}
|
|
16
|
-
*/
|
|
17
|
-
export function visualise_probe({ size = 1,shadow=false, position, position_offset = 0, sh, sh_offset = 0 }) {
|
|
18
|
-
|
|
19
|
-
const mat = new SH3VisualisationMaterial();
|
|
20
|
-
|
|
21
|
-
for (let i = 0; i < 9; i++) {
|
|
22
|
-
mat.uniforms.sh.value[i].fromArray(sh, sh_offset + i * 3);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const shadedGeometry = ShadedGeometry.from(new OctahedronBufferGeometry(1, 5), mat);
|
|
26
|
-
|
|
27
|
-
shadedGeometry.writeFlag(ShadedGeometryFlags.ReceiveShadow,shadow);
|
|
28
|
-
shadedGeometry.writeFlag(ShadedGeometryFlags.CastShadow,shadow);
|
|
29
|
-
|
|
30
|
-
return new Entity()
|
|
31
|
-
.add(Transform.fromJSON({
|
|
32
|
-
position: {
|
|
33
|
-
x: position[position_offset],
|
|
34
|
-
y: position[position_offset + 1],
|
|
35
|
-
z: position[position_offset + 2],
|
|
36
|
-
},
|
|
37
|
-
scale: size
|
|
38
|
-
}))
|
|
39
|
-
.add(shadedGeometry);
|
|
40
|
-
}
|