@woosh/meep-engine 2.109.6 → 2.109.8
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-terrain.js +1 -1
- package/build/meep.cjs +203 -174
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +203 -174
- package/editor/tools/v2/TransformControls.js +39 -33
- package/package.json +1 -1
- package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BVH.js +8 -0
- 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 +11 -9
- package/src/core/geom/3d/Ray3.js +1 -1
- package/src/core/geom/3d/aabb/AABB3.js +1 -1
- package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts +4 -4
- 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 +15 -11
- package/src/core/geom/3d/normal/octahedron/encode_unit_to_octahedron.d.ts.map +1 -1
- package/src/core/geom/3d/normal/octahedron/encode_unit_to_octahedron.js +13 -7
- package/src/core/geom/3d/normal/octahedron/encoding.spec.js +26 -1
- package/src/core/geom/3d/normal/octahedron/prototype.d.ts +2 -0
- package/src/core/geom/3d/normal/octahedron/prototype.d.ts.map +1 -0
- package/src/core/geom/3d/normal/octahedron/prototype.js +226 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.d.ts +1 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.js +4 -4
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +3 -3
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +10 -5
- package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.d.ts +7 -1
- package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.js +6 -0
- package/src/core/geom/vec3/v3_distance.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_distance.js +5 -5
- package/src/core/geometry/3d/tetrahedra/tetrahedral_mesh_find_tets_attached_to_vertex.d.ts +10 -0
- package/src/core/geometry/3d/tetrahedra/tetrahedral_mesh_find_tets_attached_to_vertex.d.ts.map +1 -0
- package/src/core/geometry/3d/tetrahedra/tetrahedral_mesh_find_tets_attached_to_vertex.js +34 -0
- package/src/core/model/node-graph/DataType.d.ts.map +1 -1
- package/src/core/model/node-graph/DataType.js +16 -10
- package/src/core/model/node-graph/ParametricDataType.d.ts +34 -0
- package/src/core/model/node-graph/ParametricDataType.d.ts.map +1 -0
- package/src/core/model/node-graph/ParametricDataType.js +63 -0
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts +5 -1
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts.map +1 -1
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.js +11 -6
- package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/AssetLoader.js +1 -1
- package/src/engine/asset/loaders/material/computeTextureEquality.d.ts.map +1 -1
- package/src/engine/asset/loaders/material/computeTextureEquality.js +6 -1
- package/src/engine/asset/loaders/material/computeTextureHash.d.ts.map +1 -1
- package/src/engine/asset/loaders/material/computeTextureHash.js +8 -3
- package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.d.ts.map +1 -1
- package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.js +9 -15
- package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +7 -0
- package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +1 -0
- package/src/engine/graphics/geometry/instancing/geometry_copy.js +15 -0
- package/src/engine/graphics/impostors/octahedral/ImpostorBaker.d.ts.map +1 -1
- package/src/engine/graphics/impostors/octahedral/ImpostorBaker.js +28 -20
- package/src/engine/graphics/impostors/octahedral/ImpostorCaptureType.d.ts +1 -0
- package/src/engine/graphics/impostors/octahedral/ImpostorCaptureType.d.ts.map +1 -1
- package/src/engine/graphics/impostors/octahedral/ImpostorCaptureType.js +4 -0
- package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.js +6 -6
- package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +16 -7
- package/src/engine/graphics/impostors/octahedral/util/build_cutout_from_atlas_by_alpha.d.ts +3 -2
- package/src/engine/graphics/impostors/octahedral/util/build_cutout_from_atlas_by_alpha.d.ts.map +1 -1
- package/src/engine/graphics/impostors/octahedral/util/build_cutout_from_atlas_by_alpha.js +25 -14
- package/src/engine/graphics/render/visibility/hiz/buildCanvasViewFromTexture.js +1 -0
- package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts.map +1 -1
- package/src/engine/graphics/sh3/gi/material/MaterialTransformer.js +59 -37
- package/src/engine/graphics/sh3/gi/material/common.glsl +484 -0
- package/src/engine/graphics/sh3/gi/material/makeLookupTexture3D.d.ts +8 -0
- package/src/engine/graphics/sh3/gi/material/makeLookupTexture3D.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/material/makeLookupTexture3D.js +35 -0
- package/src/engine/graphics/sh3/gi/material/makeOctahedralDepthAtlas.d.ts +8 -0
- package/src/engine/graphics/sh3/gi/material/makeOctahedralDepthAtlas.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/material/makeOctahedralDepthAtlas.js +28 -0
- package/src/engine/graphics/sh3/gi/material/space_fragment/build_fragment_shader.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/material/space_fragment/build_fragment_shader.js +51 -0
- package/src/engine/graphics/sh3/gi/material/space_fragment/build_vertex_shader.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/material/space_fragment/build_vertex_shader.js +29 -0
- package/src/engine/graphics/sh3/gi/material/space_fragment/space_fragment_transform_shader.d.ts +9 -0
- package/src/engine/graphics/sh3/gi/material/space_fragment/space_fragment_transform_shader.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/material/space_fragment/space_fragment_transform_shader.js +12 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.d.ts +6 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.js +26 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.d.ts +6 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.js +62 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/preable.frag.glsl +43 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/preable.vert.glsl +9 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/space_vertex_transform_shader.d.ts +9 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/space_vertex_transform_shader.d.ts.map +1 -0
- package/src/engine/graphics/sh3/gi/material/space_vertex/space_vertex_transform_shader.js +12 -0
- package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts +2 -0
- package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +35 -3
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js +26 -9
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +11 -1
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +27 -61
- 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 +8 -6
- package/src/engine/graphics/sh3/lpv/depth/octahedral/OctahedralDepthDebuggerWidget.d.ts +17 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/OctahedralDepthDebuggerWidget.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/OctahedralDepthDebuggerWidget.js +100 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/bake_octahedral_depth_map.d.ts +12 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/bake_octahedral_depth_map.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/bake_octahedral_depth_map.js +58 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/OctahedralDepthVisualizationMaterial.d.ts +11 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/OctahedralDepthVisualizationMaterial.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/OctahedralDepthVisualizationMaterial.js +45 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/visualize.frag.glsl +126 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/visualize.vert.glsl +10 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/VLPDepthMapVisualisation.d.ts +13 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/VLPDepthMapVisualisation.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/VLPDepthMapVisualisation.js +149 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/visualise.frag.glsl +161 -0
- package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/visualise.vert.glsl +13 -0
- package/src/engine/graphics/sh3/lpv/depth/sh3_bake_depth.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/{sh3_bake_depth.js → depth/sh3_bake_depth.js} +7 -7
- package/src/engine/graphics/sh3/lpv/find_max_depth_radius_for_point.d.ts +8 -0
- package/src/engine/graphics/sh3/lpv/find_max_depth_radius_for_point.d.ts.map +1 -0
- package/src/engine/graphics/sh3/lpv/find_max_depth_radius_for_point.js +50 -0
- package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts +3 -6
- package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.js +34 -58
- package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.js +8 -0
- package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts +2 -2
- package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +8 -5
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +7 -0
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +50 -0
- package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +40 -3
- package/src/engine/graphics/sh3/path_tracer/sorting/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 → sorting/build_bvh_nodes_distances_along_ray.js} +2 -2
- package/src/engine/graphics/sh3/path_tracer/sorting/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 → sorting/build_bvh_nodes_distances_sqr_to_point.js} +2 -2
- package/src/engine/graphics/sh3/path_tracer/sorting/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 → sorting/sort_bvh_nodes_by_distance_to_point.js} +3 -3
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +41 -8
- package/src/engine/graphics/sh3/shader/SH3VisualisationMaterial.d.ts.map +1 -0
- package/src/engine/graphics/sh3/shader/SH3VisualisationMaterial.js +29 -0
- package/src/engine/graphics/sh3/shader/visualize.frag.glsl +41 -0
- package/src/engine/graphics/sh3/shader/visualize.vert.glsl +9 -0
- package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.js +1 -1
- package/src/engine/graphics/texture/debug_preview_texture.d.ts +8 -0
- package/src/engine/graphics/texture/debug_preview_texture.d.ts.map +1 -0
- package/src/engine/graphics/texture/debug_preview_texture.js +38 -0
- package/src/view/View.d.ts.map +1 -1
- package/src/view/View.js +2 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_filament.d.ts +0 -8
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_filament.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_filament.js +0 -32
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.d.ts +0 -8
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.js +0 -44
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.d.ts +0 -8
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.js +0 -86
- package/src/engine/graphics/sh3/SH3VisualisationMaterial.d.ts.map +0 -1
- package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +0 -83
- package/src/engine/graphics/sh3/gi/material/build_fragment_shader.d.ts.map +0 -1
- package/src/engine/graphics/sh3/gi/material/build_fragment_shader.js +0 -71
- package/src/engine/graphics/sh3/gi/material/build_vertex_shader.d.ts.map +0 -1
- package/src/engine/graphics/sh3/gi/material/build_vertex_shader.js +0 -256
- package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/ray_reflect.d.ts +0 -2
- package/src/engine/graphics/sh3/path_tracer/ray_reflect.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/ray_reflect.js +0 -27
- package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts.map +0 -1
- /package/src/engine/graphics/sh3/gi/material/{build_fragment_shader.d.ts → space_fragment/build_fragment_shader.d.ts} +0 -0
- /package/src/engine/graphics/sh3/gi/material/{build_vertex_shader.d.ts → space_fragment/build_vertex_shader.d.ts} +0 -0
- /package/src/engine/graphics/sh3/lpv/{sh3_bake_depth.d.ts → depth/sh3_bake_depth.d.ts} +0 -0
- /package/src/engine/graphics/sh3/path_tracer/{build_bvh_nodes_distances_along_ray.d.ts → sorting/build_bvh_nodes_distances_along_ray.d.ts} +0 -0
- /package/src/engine/graphics/sh3/path_tracer/{build_bvh_nodes_distances_sqr_to_point.d.ts → sorting/build_bvh_nodes_distances_sqr_to_point.d.ts} +0 -0
- /package/src/engine/graphics/sh3/path_tracer/{sort_bvh_nodes_by_distance_to_point.d.ts → sorting/sort_bvh_nodes_by_distance_to_point.d.ts} +0 -0
- /package/src/engine/graphics/sh3/{SH3VisualisationMaterial.d.ts → shader/SH3VisualisationMaterial.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build_fragment_shader.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.js"],"names":[],"mappings":"AASA;;;GAGG;AACH,8CAFW,MAAM,UAchB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { insert_after } from "../../../../../../core/primitives/strings/insert_after.js";
|
|
2
|
+
|
|
3
|
+
import PREAMBLE from "./preable.frag.glsl";
|
|
4
|
+
|
|
5
|
+
const ACCUMULATION = `
|
|
6
|
+
irradiance += getLightProbeIrradiance(lpv_values, geometryNormal )* lpv_f_intensity;
|
|
7
|
+
`;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param {string} source
|
|
13
|
+
*/
|
|
14
|
+
export function build_fragment_shader(source) {
|
|
15
|
+
|
|
16
|
+
let result = PREAMBLE + source;
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
result = insert_after(
|
|
20
|
+
result,
|
|
21
|
+
'#include <lights_fragment_begin>',
|
|
22
|
+
ACCUMULATION
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build_vertex_shader.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.js"],"names":[],"mappings":"AA6CA;;;GAGG;AACH,4CAFW,MAAM,UAchB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { insert_after } from "../../../../../../core/primitives/strings/insert_after.js";
|
|
2
|
+
import PREAMBLE_COMMON from "../common.glsl";
|
|
3
|
+
|
|
4
|
+
import PREAMBLE from "./preable.vert.glsl";
|
|
5
|
+
|
|
6
|
+
const SHADER_CHUNK_ACCUMULATION = `
|
|
7
|
+
{
|
|
8
|
+
// lookup nearby tet
|
|
9
|
+
vec3 lpv_mesh_bounds_min = lpv_v3_bounds_min;
|
|
10
|
+
vec3 lpv_mesh_bounds_max = lpv_v3_bounds_max;
|
|
11
|
+
vec3 lookup_coordinates = (worldPosition.xyz - lpv_mesh_bounds_min) / (lpv_mesh_bounds_max - lpv_mesh_bounds_min) ;
|
|
12
|
+
|
|
13
|
+
uint nearest_tet = lpv_guess_initial_tet( worldPosition.xyz );
|
|
14
|
+
|
|
15
|
+
uint tet;
|
|
16
|
+
vec4 weights;
|
|
17
|
+
lpv_getTetrahedron(worldPosition.xyz, nearest_tet, tet, weights);
|
|
18
|
+
|
|
19
|
+
weights = lvp_mask_weights_by_visibility(worldPosition.xyz, tet, weights);
|
|
20
|
+
|
|
21
|
+
if(tet == INVALID_TET){
|
|
22
|
+
lpv_values = vec3[](
|
|
23
|
+
vec3(0.0, 0.0, 0.0),
|
|
24
|
+
vec3(0.0, 0.0, 0.0),
|
|
25
|
+
vec3(0.0, 0.0, 0.0),
|
|
26
|
+
|
|
27
|
+
vec3(0.0, 0.0, 0.0),
|
|
28
|
+
vec3(0.0, 0.0, 0.0),
|
|
29
|
+
vec3(0.0, 0.0, 0.0),
|
|
30
|
+
|
|
31
|
+
vec3(0.0, 0.0, 0.0),
|
|
32
|
+
vec3(0.0, 0.0, 0.0),
|
|
33
|
+
vec3(0.0, 0.0, 0.0)
|
|
34
|
+
);
|
|
35
|
+
}else{
|
|
36
|
+
|
|
37
|
+
vec3 worldNormal = normalize(inverseTransformDirection( normalize(normal), viewMatrix ));
|
|
38
|
+
|
|
39
|
+
//weights = lpv_bias_weight_by_normal(worldPosition.xyz, normal, tet, weights);
|
|
40
|
+
|
|
41
|
+
lpv_values = lpv_interpolate_probes(weights, tet);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
`
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
*
|
|
48
|
+
* @param {string} source
|
|
49
|
+
*/
|
|
50
|
+
export function build_vertex_shader(source) {
|
|
51
|
+
let result = PREAMBLE + PREAMBLE_COMMON + source;
|
|
52
|
+
|
|
53
|
+
result = insert_after(
|
|
54
|
+
result,
|
|
55
|
+
'#include <fog_vertex>',
|
|
56
|
+
SHADER_CHUNK_ACCUMULATION
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
// console.log(result)
|
|
60
|
+
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
uniform float lpv_f_intensity;
|
|
2
|
+
|
|
3
|
+
varying vec3[9] lpv_values;
|
|
4
|
+
|
|
5
|
+
// vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {
|
|
6
|
+
// // normal is assumed to have unit length
|
|
7
|
+
// float x = normal.x, y = normal.y, z = normal.z;
|
|
8
|
+
//
|
|
9
|
+
// // band 0
|
|
10
|
+
// vec3 result = shCoefficients[ 0 ] * 0.886227;
|
|
11
|
+
//
|
|
12
|
+
// // band 1
|
|
13
|
+
// result -= shCoefficients[ 1 ] * 2.0 * 0.511664 * y;
|
|
14
|
+
// result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;
|
|
15
|
+
// result -= shCoefficients[ 3 ] * 2.0 * 0.511664 * x;
|
|
16
|
+
//
|
|
17
|
+
// // band 2
|
|
18
|
+
// result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;
|
|
19
|
+
// result -= shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;
|
|
20
|
+
// result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );
|
|
21
|
+
// result -= shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;
|
|
22
|
+
// result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );
|
|
23
|
+
//
|
|
24
|
+
// return result;
|
|
25
|
+
// }
|
|
26
|
+
//
|
|
27
|
+
// vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {
|
|
28
|
+
//
|
|
29
|
+
// // matrix is assumed to be orthogonal
|
|
30
|
+
//
|
|
31
|
+
// return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );
|
|
32
|
+
//
|
|
33
|
+
// }
|
|
34
|
+
//
|
|
35
|
+
// vec3 lpv_getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {
|
|
36
|
+
//
|
|
37
|
+
// vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
|
|
38
|
+
//
|
|
39
|
+
// vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );
|
|
40
|
+
//
|
|
41
|
+
// return irradiance;
|
|
42
|
+
//
|
|
43
|
+
// }
|
package/src/engine/graphics/sh3/gi/material/space_vertex/space_vertex_transform_shader.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space_vertex_transform_shader.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/sh3/gi/material/space_vertex/space_vertex_transform_shader.js"],"names":[],"mappings":"AAGA;;;GAGG;AACH,sDAFW;IAAC,YAAY,CAAC;IAAC,cAAc,CAAA;CAAC,QAMxC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { build_fragment_shader } from "./build_fragment_shader.js";
|
|
2
|
+
import { build_vertex_shader } from "./build_vertex_shader.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param {{vertexShader, fragmentShader}} shader
|
|
7
|
+
*/
|
|
8
|
+
export function space_vertex_transform_shader(shader) {
|
|
9
|
+
|
|
10
|
+
shader.vertexShader = build_vertex_shader(shader.vertexShader);
|
|
11
|
+
shader.fragmentShader = build_fragment_shader(shader.fragmentShader);
|
|
12
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightProbeVolume.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/LightProbeVolume.js"],"names":[],"mappings":"AAUA;
|
|
1
|
+
{"version":3,"file":"LightProbeVolume.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/LightProbeVolume.js"],"names":[],"mappings":"AAUA;IAiCI,sBAEC;IAED,cAkBC;IAED;;;OAGG;IACH,4BAEC;IAED,uBAEC;IAED,0BAEC;IAED,mCAEC;IAED,sBAEC;IAMD,uBAEC;IAND,oBAEC;IAMD;;;;;OAKG;IACH,aAJW,MAAM,KACN,MAAM,KACN,MAAM,QAgBhB;IAED;;;;;OAKG;IACH,mBAJW,MAAM,UACN,MAAM,EAAE,iBACR,MAAM,QAIhB;IAED;;OAEG;IACH,mBAaC;IAGD;;;;;OAKG;IACH,mCAJW,MAAM,GAEJ,UAAU,CAsBtB;IAGD,yBAEC;;CAEJ;gCAnL+B,wDAAwD;2BAC7D,mCAAmC"}
|
|
@@ -20,11 +20,25 @@ export class LightProbeVolume {
|
|
|
20
20
|
#mesh = new TetrahedralMesh();
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* Probe irradiance color data
|
|
24
|
+
* Base-3 spherical harmonics, 9 coefficients per color channel for a total of 27 coefficients per probe
|
|
24
25
|
* @type {number[]}
|
|
25
26
|
*/
|
|
26
27
|
#sh3_rgb = [];
|
|
27
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Resolution of an individual depth map for a probe
|
|
31
|
+
* Depth map is stored as a 2d texture of size RESOLUTION x RESOLUTION
|
|
32
|
+
* @type {number}
|
|
33
|
+
*/
|
|
34
|
+
#probe_depth_resolution = 16;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Octahedral-encoded depth map for each probe
|
|
38
|
+
* @type {number[]}
|
|
39
|
+
*/
|
|
40
|
+
#probe_depth = [];
|
|
41
|
+
|
|
28
42
|
#probe_count = 0;
|
|
29
43
|
|
|
30
44
|
get version() {
|
|
@@ -32,8 +46,18 @@ export class LightProbeVolume {
|
|
|
32
46
|
}
|
|
33
47
|
|
|
34
48
|
clear() {
|
|
35
|
-
|
|
36
|
-
|
|
49
|
+
if (this.#probe_positions.length > 0) {
|
|
50
|
+
this.#probe_positions = [];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (this.#sh3_rgb.length > 0) {
|
|
54
|
+
this.#sh3_rgb = [];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (this.#probe_depth.length > 0) {
|
|
58
|
+
this.#probe_depth = [];
|
|
59
|
+
}
|
|
60
|
+
|
|
37
61
|
this.#mesh.clear();
|
|
38
62
|
|
|
39
63
|
this.#probe_count = 0;
|
|
@@ -57,6 +81,14 @@ export class LightProbeVolume {
|
|
|
57
81
|
return this.#sh3_rgb;
|
|
58
82
|
}
|
|
59
83
|
|
|
84
|
+
get depth_map_resolution() {
|
|
85
|
+
return this.#probe_depth_resolution;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
get depth() {
|
|
89
|
+
return this.#probe_depth;
|
|
90
|
+
}
|
|
91
|
+
|
|
60
92
|
get count() {
|
|
61
93
|
return this.#probe_count;
|
|
62
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightProbeVolumeBaker.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LightProbeVolumeBaker.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js"],"names":[],"mappings":"AAOA;IAEI,8BAAqC;IAGrC;;;;;OAKG;IACH,0DAJa,SAAS,CAgErB;CACJ;wCA1EuC,8BAA8B;sBALhD,4CAA4C"}
|
|
@@ -2,11 +2,11 @@ import TaskGroup from "../../../../core/process/task/TaskGroup.js";
|
|
|
2
2
|
import { actionTask } from "../../../../core/process/task/util/actionTask.js";
|
|
3
3
|
import { countTask } from "../../../../core/process/task/util/countTask.js";
|
|
4
4
|
import { promiseTask } from "../../../../core/process/task/util/promiseTask.js";
|
|
5
|
+
import { find_max_depth_radius_for_point } from "./find_max_depth_radius_for_point.js";
|
|
5
6
|
import { PathTracerProbeRenderer } from "./PathTracerProbeRenderer.js";
|
|
6
7
|
|
|
7
8
|
export class LightProbeVolumeBaker {
|
|
8
9
|
|
|
9
|
-
// this._ren = new WebGLCubeProbeRenderer();
|
|
10
10
|
_ren = new PathTracerProbeRenderer();
|
|
11
11
|
|
|
12
12
|
|
|
@@ -29,23 +29,40 @@ export class LightProbeVolumeBaker {
|
|
|
29
29
|
|
|
30
30
|
const probe_count = lpv.count;
|
|
31
31
|
|
|
32
|
-
const
|
|
32
|
+
const tBakeIrradiance = countTask(0, probe_count, (i) => {
|
|
33
33
|
|
|
34
|
+
// Bake color
|
|
34
35
|
renderer.bake(
|
|
35
36
|
lpv.points, i * 3,
|
|
36
37
|
lpv.harmonics, i * 9 * 3
|
|
37
38
|
);
|
|
38
39
|
|
|
40
|
+
|
|
41
|
+
// Bake depth
|
|
42
|
+
const max_distance = find_max_depth_radius_for_point(i, lpv.mesh, lpv.points);
|
|
43
|
+
|
|
44
|
+
// bias a little to ensure we capture everything
|
|
45
|
+
const max_depth = max_distance * 1.01 + 0.00001;
|
|
46
|
+
|
|
47
|
+
const depth_resolution = lpv.depth_map_resolution;
|
|
48
|
+
|
|
49
|
+
renderer.bake_depth_octahedral(
|
|
50
|
+
depth_resolution,
|
|
51
|
+
max_depth,
|
|
52
|
+
lpv.points, i * 3,
|
|
53
|
+
lpv.depth, i * depth_resolution * depth_resolution
|
|
54
|
+
);
|
|
55
|
+
|
|
39
56
|
});
|
|
40
|
-
|
|
57
|
+
tBakeIrradiance.estimatedDuration = probe_count;
|
|
41
58
|
|
|
42
|
-
|
|
59
|
+
tBakeIrradiance.promise().then(() => {
|
|
43
60
|
|
|
44
|
-
const duration =
|
|
61
|
+
const duration = tBakeIrradiance.__executedCpuTime;
|
|
45
62
|
|
|
46
63
|
console.log(`Baked ${probe_count} probes in ${duration}ms, ~${(duration / probe_count).toFixed(2)}ms per probe`);
|
|
47
64
|
|
|
48
|
-
})
|
|
65
|
+
});
|
|
49
66
|
|
|
50
67
|
const tFinish = actionTask(() => {
|
|
51
68
|
renderer.bake_end();
|
|
@@ -53,11 +70,11 @@ export class LightProbeVolumeBaker {
|
|
|
53
70
|
lpv.incrementVersion();
|
|
54
71
|
});
|
|
55
72
|
|
|
56
|
-
tFinish.addDependency(
|
|
57
|
-
|
|
73
|
+
tFinish.addDependency(tBakeIrradiance);
|
|
74
|
+
tBakeIrradiance.addDependency(tPrepare);
|
|
58
75
|
|
|
59
76
|
return new TaskGroup([
|
|
60
|
-
tPrepare,
|
|
77
|
+
tPrepare, tBakeIrradiance, tFinish
|
|
61
78
|
], "LightProbeVolume Bake");
|
|
62
79
|
}
|
|
63
80
|
}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
export class PathTracerProbeRenderer extends ProbeRenderer {
|
|
2
2
|
tracer: PathTracer;
|
|
3
|
+
max_bounce_count: number;
|
|
3
4
|
sample_count: number;
|
|
4
5
|
random: () => number;
|
|
5
6
|
scene: PathTracedScene;
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @param {number} resolution
|
|
10
|
+
* @param {number} max_depth
|
|
11
|
+
* @param {number[]} position
|
|
12
|
+
* @param {number} position_offset
|
|
13
|
+
* @param {number[]} output
|
|
14
|
+
* @param {number} output_offset
|
|
15
|
+
*/
|
|
16
|
+
bake_depth_octahedral(resolution: number, max_depth: number, position: number[], position_offset: number, output: number[], output_offset: number): void;
|
|
7
17
|
bake(position: any, position_offset: any, output: any, output_offset: any): void;
|
|
8
18
|
bake_start(): void;
|
|
9
19
|
build_scene(ecd: any): void;
|
|
@@ -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":"AAuBA;IACI,mBAA0B;IAC1B,yBAAqB;IACrB,qBAAmB;IACnB,qBAAyB;IAEzB,uBAA6B;IAE7B;;;;;;;;OAQG;IACH,kCAPW,MAAM,aACN,MAAM,YACN,MAAM,EAAE,mBACR,MAAM,UACN,MAAM,EAAE,iBACR,MAAM,QAahB;IAED,iFAuCC;IAKD,mBACC;IAED,4BAKC;CACJ;8BA5F6B,oBAAoB;2BAHvB,8BAA8B;gCADzB,mCAAmC"}
|
|
@@ -8,15 +8,11 @@ import { sh3_vector_accumulate } from "../../../../core/geom/3d/sphere/harmonics
|
|
|
8
8
|
import { randomPointOnSphere } from "../../../../core/geom/random/randomPointOnSphere.js";
|
|
9
9
|
import { vector_scale_array } from "../../../../core/geom/vec/vector_scale_array.js";
|
|
10
10
|
import { seededRandom } from "../../../../core/math/random/seededRandom.js";
|
|
11
|
-
import { Transform } from "../../../ecs/transform/Transform.js";
|
|
12
|
-
import { Light } from "../../ecs/light/Light.js";
|
|
13
|
-
import { LightType } from "../../ecs/light/LightType.js";
|
|
14
|
-
import { ShadedGeometry } from "../../ecs/mesh-v2/ShadedGeometry.js";
|
|
15
|
-
import { DirectionalLight } from "../../render/forward_plus/model/DirectionalLight.js";
|
|
16
11
|
import { PathTracedScene } from "../path_tracer/PathTracedScene.js";
|
|
17
12
|
import { PathTracer } from "../path_tracer/PathTracer.js";
|
|
13
|
+
import { populate_path_traced_scene_from_ecd } from "../path_tracer/populate_path_traced_scene_from_ecd.js";
|
|
14
|
+
import { bake_octahedral_depth_map } from "./depth/octahedral/bake_octahedral_depth_map.js";
|
|
18
15
|
import { ProbeRenderer } from "./ProbeRenderer.js";
|
|
19
|
-
import { sh3_bake_depth } from "./sh3_bake_depth.js";
|
|
20
16
|
|
|
21
17
|
const __shared_buffer = new ArrayBuffer((27 + 9) * 8);
|
|
22
18
|
const sh_basis = new Float64Array(__shared_buffer, 0, 9);
|
|
@@ -27,31 +23,32 @@ const sampled_irradiance = new Float32Array(3);
|
|
|
27
23
|
|
|
28
24
|
export class PathTracerProbeRenderer extends ProbeRenderer {
|
|
29
25
|
tracer = new PathTracer();
|
|
30
|
-
|
|
26
|
+
max_bounce_count = 7;
|
|
27
|
+
sample_count = 192;
|
|
31
28
|
random = seededRandom(0);
|
|
32
29
|
|
|
33
30
|
scene = new PathTracedScene()
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @param {number} resolution
|
|
35
|
+
* @param {number} max_depth
|
|
36
|
+
* @param {number[]} position
|
|
37
|
+
* @param {number} position_offset
|
|
38
|
+
* @param {number[]} output
|
|
39
|
+
* @param {number} output_offset
|
|
40
|
+
*/
|
|
41
|
+
bake_depth_octahedral(
|
|
42
|
+
resolution, max_depth,
|
|
43
|
+
position, position_offset,
|
|
44
|
+
output, output_offset
|
|
45
|
+
) {
|
|
46
|
+
bake_octahedral_depth_map(
|
|
47
|
+
output, output_offset,
|
|
48
|
+
this.scene,
|
|
49
|
+
position, position_offset,
|
|
50
|
+
resolution, max_depth
|
|
43
51
|
);
|
|
44
|
-
|
|
45
|
-
sh3_dering_optimize_positive(coefficients, 0, coefficients, 0, 1);
|
|
46
|
-
|
|
47
|
-
for (let i = 0; i < 9; i++) {
|
|
48
|
-
const coefficient = coefficients[i];
|
|
49
|
-
|
|
50
|
-
for (let j = 0; j < 3; j++) {
|
|
51
|
-
output[output_offset + i * 3 + j] = coefficient;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
52
|
}
|
|
56
53
|
|
|
57
54
|
bake(position, position_offset, output, output_offset) {
|
|
@@ -65,13 +62,15 @@ export class PathTracerProbeRenderer extends ProbeRenderer {
|
|
|
65
62
|
|
|
66
63
|
coefficients.fill(0);
|
|
67
64
|
|
|
65
|
+
const max_bounce = this.max_bounce_count;
|
|
66
|
+
|
|
68
67
|
for (let i = 0; i < this.sample_count; i++) {
|
|
69
68
|
|
|
70
69
|
randomPointOnSphere(this.random, ray, 3);
|
|
71
70
|
ray.tMax = Infinity;
|
|
72
71
|
ray.tMin = 0;
|
|
73
72
|
|
|
74
|
-
tracer.path_trace(sampled_irradiance, ray, 1,
|
|
73
|
+
tracer.path_trace(sampled_irradiance, ray, 1, max_bounce, this.random, this.scene);
|
|
75
74
|
|
|
76
75
|
sh3_basis_at(ray[3], ray[4], ray[5], sh_basis);
|
|
77
76
|
|
|
@@ -102,40 +101,7 @@ export class PathTracerProbeRenderer extends ProbeRenderer {
|
|
|
102
101
|
build_scene(ecd) {
|
|
103
102
|
|
|
104
103
|
const scene = this.scene;
|
|
105
|
-
|
|
106
|
-
ecd.traverseEntities([ShadedGeometry, Transform],
|
|
107
|
-
/**
|
|
108
|
-
*
|
|
109
|
-
* @param {ShadedGeometry} sg
|
|
110
|
-
* @param {Transform} transform
|
|
111
|
-
*/
|
|
112
|
-
(sg, transform) => {
|
|
113
|
-
|
|
114
|
-
scene.createMesh(sg.geometry, sg.material, transform.matrix)
|
|
115
|
-
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
ecd.traverseEntities([Light, Transform],
|
|
120
|
-
/**
|
|
121
|
-
*
|
|
122
|
-
* @param {Light} light
|
|
123
|
-
* @param {Transform} transform
|
|
124
|
-
*/
|
|
125
|
-
(light, transform) => {
|
|
126
|
-
|
|
127
|
-
if (light.type.getValue() === LightType.DIRECTION) {
|
|
128
|
-
|
|
129
|
-
const l = new DirectionalLight();
|
|
130
|
-
|
|
131
|
-
l.color.copy(light.color);
|
|
132
|
-
l.direction.copy(transform.forward);
|
|
133
|
-
l.intensity.copy(light.intensity);
|
|
134
|
-
|
|
135
|
-
scene.addLight(l);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
});
|
|
104
|
+
populate_path_traced_scene_from_ecd(ecd, scene);
|
|
139
105
|
|
|
140
106
|
}
|
|
141
107
|
}
|
|
@@ -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":"AAYA;;;;;;;;GAQG;AACH,iFAPW,gBAAgB,GAKd,QAAQ,gBAAgB,CAAC,CAoFrC;iCA9FgC,uBAAuB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AABB3 } from "../../../../core/geom/3d/aabb/AABB3.js";
|
|
2
2
|
import { make_justified_point_grid } from "../../../../core/geom/3d/util/make_justified_point_grid.js";
|
|
3
3
|
import Vector2 from "../../../../core/geom/Vector2.js";
|
|
4
|
+
import { seededRandom } from "../../../../core/math/random/seededRandom.js";
|
|
4
5
|
import { delay } from "../../../../core/process/delay.js";
|
|
5
6
|
import Entity from "../../../ecs/Entity.js";
|
|
6
7
|
import GUIElement from "../../../ecs/gui/GUIElement.js";
|
|
@@ -49,12 +50,13 @@ export async function build_probes_for_scene(
|
|
|
49
50
|
|
|
50
51
|
|
|
51
52
|
// sg_hierarchy_compute_bounding_box_via_parent_entity(light_volume_bounds, composition.entity.entity, ecd);
|
|
53
|
+
const random = seededRandom(1);
|
|
52
54
|
|
|
53
|
-
// for (let i = 0; i <
|
|
54
|
-
//
|
|
55
|
-
// randomFloatBetween(random,
|
|
56
|
-
// randomFloatBetween(random,
|
|
57
|
-
// randomFloatBetween(random,
|
|
55
|
+
// for (let i = 0; i < 1000; i++) {
|
|
56
|
+
// volume.add_point(
|
|
57
|
+
// randomFloatBetween(random, model_bounds.x0, model_bounds.x1),
|
|
58
|
+
// randomFloatBetween(random, model_bounds.y0, model_bounds.y1),
|
|
59
|
+
// randomFloatBetween(random, model_bounds.z0, model_bounds.z1),
|
|
58
60
|
// );
|
|
59
61
|
// }
|
|
60
62
|
|
|
@@ -64,7 +66,7 @@ export async function build_probes_for_scene(
|
|
|
64
66
|
|
|
65
67
|
// lpv.add_point(10, 1, -10);
|
|
66
68
|
|
|
67
|
-
await delay(
|
|
69
|
+
await delay(1);
|
|
68
70
|
|
|
69
71
|
//
|
|
70
72
|
// console.profile('lpv build');
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class OctahedralDepthDebuggerWidget {
|
|
2
|
+
update(): void;
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @returns {Entity}
|
|
6
|
+
*/
|
|
7
|
+
get entity(): Entity;
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @param {EntityComponentDataset} ecd
|
|
11
|
+
* @param {Engine} engine
|
|
12
|
+
*/
|
|
13
|
+
build(ecd: EntityComponentDataset, engine: Engine): void;
|
|
14
|
+
#private;
|
|
15
|
+
}
|
|
16
|
+
import Entity from "../../../../../ecs/Entity.js";
|
|
17
|
+
//# sourceMappingURL=OctahedralDepthDebuggerWidget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OctahedralDepthDebuggerWidget.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/sh3/lpv/depth/octahedral/OctahedralDepthDebuggerWidget.js"],"names":[],"mappings":"AAUA;IA6CI,eAYC;IAED;;;OAGG;IACH,qBAEC;IAED;;;;OAIG;IACH,yDAeC;;CAEJ;mBAjGkB,8BAA8B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { ClampToEdgeWrapping, DataTexture, FloatType, NearestFilter, OctahedronBufferGeometry, RedFormat } from "three";
|
|
2
|
+
import { TransformControls } from "../../../../../../../editor/tools/v2/TransformControls.js";
|
|
3
|
+
import Entity from "../../../../../ecs/Entity.js";
|
|
4
|
+
import { Transform } from "../../../../../ecs/transform/Transform.js";
|
|
5
|
+
import { ShadedGeometry } from "../../../../ecs/mesh-v2/ShadedGeometry.js";
|
|
6
|
+
import { PathTracedScene } from "../../../path_tracer/PathTracedScene.js";
|
|
7
|
+
import { populate_path_traced_scene_from_ecd } from "../../../path_tracer/populate_path_traced_scene_from_ecd.js";
|
|
8
|
+
import { bake_octahedral_depth_map } from "./bake_octahedral_depth_map.js";
|
|
9
|
+
import { OctahedralDepthVisualizationMaterial } from "./shader/OctahedralDepthVisualizationMaterial.js";
|
|
10
|
+
|
|
11
|
+
export class OctahedralDepthDebuggerWidget {
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @type {PathTracedScene}
|
|
15
|
+
*/
|
|
16
|
+
#scene = new PathTracedScene();
|
|
17
|
+
|
|
18
|
+
#resolution = 64;
|
|
19
|
+
|
|
20
|
+
#texture = new DataTexture(
|
|
21
|
+
new Float32Array(this.#resolution * this.#resolution),
|
|
22
|
+
this.#resolution,
|
|
23
|
+
this.#resolution,
|
|
24
|
+
RedFormat,
|
|
25
|
+
FloatType
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
#entity = new Entity();
|
|
29
|
+
|
|
30
|
+
constructor() {
|
|
31
|
+
this.#texture.generateMipmaps = false;
|
|
32
|
+
|
|
33
|
+
this.#texture.magFilter = NearestFilter;
|
|
34
|
+
this.#texture.minFilter = NearestFilter;
|
|
35
|
+
|
|
36
|
+
this.#texture.wrapT = ClampToEdgeWrapping;
|
|
37
|
+
this.#texture.wrapS = ClampToEdgeWrapping;
|
|
38
|
+
|
|
39
|
+
this.#texture.flipY = false;
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
const material = new OctahedralDepthVisualizationMaterial();
|
|
43
|
+
|
|
44
|
+
material.texture = this.#texture;
|
|
45
|
+
material.scale = 10;
|
|
46
|
+
|
|
47
|
+
const transform = new Transform();
|
|
48
|
+
this.#entity.add(transform);
|
|
49
|
+
this.#entity.add(ShadedGeometry.from(new OctahedronBufferGeometry(1, 4), material));
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
transform.position.onChanged.add(this.update, this);
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
update() {
|
|
57
|
+
|
|
58
|
+
console.time('depth build');
|
|
59
|
+
bake_octahedral_depth_map(
|
|
60
|
+
this.#texture.image.data, 0,
|
|
61
|
+
this.#scene,
|
|
62
|
+
this.#entity.getComponentSafe(Transform).position, 0,
|
|
63
|
+
this.#resolution, 100
|
|
64
|
+
);
|
|
65
|
+
console.timeEnd('depth build');
|
|
66
|
+
|
|
67
|
+
this.#texture.needsUpdate = true;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
*
|
|
72
|
+
* @returns {Entity}
|
|
73
|
+
*/
|
|
74
|
+
get entity() {
|
|
75
|
+
return this.#entity;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
* @param {EntityComponentDataset} ecd
|
|
81
|
+
* @param {Engine} engine
|
|
82
|
+
*/
|
|
83
|
+
build(ecd, engine) {
|
|
84
|
+
|
|
85
|
+
populate_path_traced_scene_from_ecd(ecd, this.#scene);
|
|
86
|
+
|
|
87
|
+
this.update();
|
|
88
|
+
|
|
89
|
+
this.#entity.build(ecd);
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
const gizmo = new TransformControls(engine.graphics.camera, engine.graphics.domElement, true);
|
|
93
|
+
|
|
94
|
+
gizmo.build(ecd);
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
gizmo.attach(this.#entity.id);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
}
|