@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.
Files changed (180) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/build/meep.cjs +203 -174
  3. package/build/meep.min.js +1 -1
  4. package/build/meep.module.js +203 -174
  5. package/editor/tools/v2/TransformControls.js +39 -33
  6. package/package.json +1 -1
  7. package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
  8. package/src/core/bvh2/bvh3/BVH.js +8 -0
  9. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.d.ts.map +1 -1
  10. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +11 -9
  11. package/src/core/geom/3d/Ray3.js +1 -1
  12. package/src/core/geom/3d/aabb/AABB3.js +1 -1
  13. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts +4 -4
  14. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts.map +1 -1
  15. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.js +15 -11
  16. package/src/core/geom/3d/normal/octahedron/encode_unit_to_octahedron.d.ts.map +1 -1
  17. package/src/core/geom/3d/normal/octahedron/encode_unit_to_octahedron.js +13 -7
  18. package/src/core/geom/3d/normal/octahedron/encoding.spec.js +26 -1
  19. package/src/core/geom/3d/normal/octahedron/prototype.d.ts +2 -0
  20. package/src/core/geom/3d/normal/octahedron/prototype.d.ts.map +1 -0
  21. package/src/core/geom/3d/normal/octahedron/prototype.js +226 -0
  22. package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.d.ts +1 -1
  23. package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.js +4 -4
  24. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +3 -3
  25. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
  26. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +10 -5
  27. package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.d.ts +7 -1
  28. package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.d.ts.map +1 -1
  29. package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.js +6 -0
  30. package/src/core/geom/vec3/v3_distance.d.ts.map +1 -1
  31. package/src/core/geom/vec3/v3_distance.js +5 -5
  32. package/src/core/geometry/3d/tetrahedra/tetrahedral_mesh_find_tets_attached_to_vertex.d.ts +10 -0
  33. package/src/core/geometry/3d/tetrahedra/tetrahedral_mesh_find_tets_attached_to_vertex.d.ts.map +1 -0
  34. package/src/core/geometry/3d/tetrahedra/tetrahedral_mesh_find_tets_attached_to_vertex.js +34 -0
  35. package/src/core/model/node-graph/DataType.d.ts.map +1 -1
  36. package/src/core/model/node-graph/DataType.js +16 -10
  37. package/src/core/model/node-graph/ParametricDataType.d.ts +34 -0
  38. package/src/core/model/node-graph/ParametricDataType.d.ts.map +1 -0
  39. package/src/core/model/node-graph/ParametricDataType.js +63 -0
  40. package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts +5 -1
  41. package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts.map +1 -1
  42. package/src/core/model/node-graph/json/serializeNodeGraphToJSON.js +11 -6
  43. package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
  44. package/src/engine/asset/loaders/AssetLoader.js +1 -1
  45. package/src/engine/asset/loaders/material/computeTextureEquality.d.ts.map +1 -1
  46. package/src/engine/asset/loaders/material/computeTextureEquality.js +6 -1
  47. package/src/engine/asset/loaders/material/computeTextureHash.d.ts.map +1 -1
  48. package/src/engine/asset/loaders/material/computeTextureHash.js +8 -3
  49. package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.d.ts.map +1 -1
  50. package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.js +9 -15
  51. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +7 -0
  52. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +1 -0
  53. package/src/engine/graphics/geometry/instancing/geometry_copy.js +15 -0
  54. package/src/engine/graphics/impostors/octahedral/ImpostorBaker.d.ts.map +1 -1
  55. package/src/engine/graphics/impostors/octahedral/ImpostorBaker.js +28 -20
  56. package/src/engine/graphics/impostors/octahedral/ImpostorCaptureType.d.ts +1 -0
  57. package/src/engine/graphics/impostors/octahedral/ImpostorCaptureType.d.ts.map +1 -1
  58. package/src/engine/graphics/impostors/octahedral/ImpostorCaptureType.js +4 -0
  59. package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.js +6 -6
  60. package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +16 -7
  61. package/src/engine/graphics/impostors/octahedral/util/build_cutout_from_atlas_by_alpha.d.ts +3 -2
  62. package/src/engine/graphics/impostors/octahedral/util/build_cutout_from_atlas_by_alpha.d.ts.map +1 -1
  63. package/src/engine/graphics/impostors/octahedral/util/build_cutout_from_atlas_by_alpha.js +25 -14
  64. package/src/engine/graphics/render/visibility/hiz/buildCanvasViewFromTexture.js +1 -0
  65. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts.map +1 -1
  66. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.js +59 -37
  67. package/src/engine/graphics/sh3/gi/material/common.glsl +484 -0
  68. package/src/engine/graphics/sh3/gi/material/makeLookupTexture3D.d.ts +8 -0
  69. package/src/engine/graphics/sh3/gi/material/makeLookupTexture3D.d.ts.map +1 -0
  70. package/src/engine/graphics/sh3/gi/material/makeLookupTexture3D.js +35 -0
  71. package/src/engine/graphics/sh3/gi/material/makeOctahedralDepthAtlas.d.ts +8 -0
  72. package/src/engine/graphics/sh3/gi/material/makeOctahedralDepthAtlas.d.ts.map +1 -0
  73. package/src/engine/graphics/sh3/gi/material/makeOctahedralDepthAtlas.js +28 -0
  74. package/src/engine/graphics/sh3/gi/material/space_fragment/build_fragment_shader.d.ts.map +1 -0
  75. package/src/engine/graphics/sh3/gi/material/space_fragment/build_fragment_shader.js +51 -0
  76. package/src/engine/graphics/sh3/gi/material/space_fragment/build_vertex_shader.d.ts.map +1 -0
  77. package/src/engine/graphics/sh3/gi/material/space_fragment/build_vertex_shader.js +29 -0
  78. package/src/engine/graphics/sh3/gi/material/space_fragment/space_fragment_transform_shader.d.ts +9 -0
  79. package/src/engine/graphics/sh3/gi/material/space_fragment/space_fragment_transform_shader.d.ts.map +1 -0
  80. package/src/engine/graphics/sh3/gi/material/space_fragment/space_fragment_transform_shader.js +12 -0
  81. package/src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.d.ts +6 -0
  82. package/src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.d.ts.map +1 -0
  83. package/src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.js +26 -0
  84. package/src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.d.ts +6 -0
  85. package/src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.d.ts.map +1 -0
  86. package/src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.js +62 -0
  87. package/src/engine/graphics/sh3/gi/material/space_vertex/preable.frag.glsl +43 -0
  88. package/src/engine/graphics/sh3/gi/material/space_vertex/preable.vert.glsl +9 -0
  89. package/src/engine/graphics/sh3/gi/material/space_vertex/space_vertex_transform_shader.d.ts +9 -0
  90. package/src/engine/graphics/sh3/gi/material/space_vertex/space_vertex_transform_shader.d.ts.map +1 -0
  91. package/src/engine/graphics/sh3/gi/material/space_vertex/space_vertex_transform_shader.js +12 -0
  92. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts +2 -0
  93. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -1
  94. package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +35 -3
  95. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts.map +1 -1
  96. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js +26 -9
  97. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +11 -1
  98. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
  99. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +27 -61
  100. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts.map +1 -1
  101. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.js +8 -6
  102. package/src/engine/graphics/sh3/lpv/depth/octahedral/OctahedralDepthDebuggerWidget.d.ts +17 -0
  103. package/src/engine/graphics/sh3/lpv/depth/octahedral/OctahedralDepthDebuggerWidget.d.ts.map +1 -0
  104. package/src/engine/graphics/sh3/lpv/depth/octahedral/OctahedralDepthDebuggerWidget.js +100 -0
  105. package/src/engine/graphics/sh3/lpv/depth/octahedral/bake_octahedral_depth_map.d.ts +12 -0
  106. package/src/engine/graphics/sh3/lpv/depth/octahedral/bake_octahedral_depth_map.d.ts.map +1 -0
  107. package/src/engine/graphics/sh3/lpv/depth/octahedral/bake_octahedral_depth_map.js +58 -0
  108. package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/OctahedralDepthVisualizationMaterial.d.ts +11 -0
  109. package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/OctahedralDepthVisualizationMaterial.d.ts.map +1 -0
  110. package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/OctahedralDepthVisualizationMaterial.js +45 -0
  111. package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/visualize.frag.glsl +126 -0
  112. package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/visualize.vert.glsl +10 -0
  113. package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/VLPDepthMapVisualisation.d.ts +13 -0
  114. package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/VLPDepthMapVisualisation.d.ts.map +1 -0
  115. package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/VLPDepthMapVisualisation.js +149 -0
  116. package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/visualise.frag.glsl +161 -0
  117. package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/visualise.vert.glsl +13 -0
  118. package/src/engine/graphics/sh3/lpv/depth/sh3_bake_depth.d.ts.map +1 -0
  119. package/src/engine/graphics/sh3/lpv/{sh3_bake_depth.js → depth/sh3_bake_depth.js} +7 -7
  120. package/src/engine/graphics/sh3/lpv/find_max_depth_radius_for_point.d.ts +8 -0
  121. package/src/engine/graphics/sh3/lpv/find_max_depth_radius_for_point.d.ts.map +1 -0
  122. package/src/engine/graphics/sh3/lpv/find_max_depth_radius_for_point.js +50 -0
  123. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts +3 -6
  124. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts.map +1 -1
  125. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.js +34 -58
  126. package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.d.ts.map +1 -1
  127. package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.js +8 -0
  128. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts +2 -2
  129. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -1
  130. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +8 -5
  131. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +7 -0
  132. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts.map +1 -0
  133. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +50 -0
  134. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +40 -3
  135. package/src/engine/graphics/sh3/path_tracer/sorting/build_bvh_nodes_distances_along_ray.d.ts.map +1 -0
  136. package/src/engine/graphics/sh3/path_tracer/{build_bvh_nodes_distances_along_ray.js → sorting/build_bvh_nodes_distances_along_ray.js} +2 -2
  137. package/src/engine/graphics/sh3/path_tracer/sorting/build_bvh_nodes_distances_sqr_to_point.d.ts.map +1 -0
  138. 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
  139. package/src/engine/graphics/sh3/path_tracer/sorting/sort_bvh_nodes_by_distance_to_point.d.ts.map +1 -0
  140. 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
  141. package/src/engine/graphics/sh3/prototypeSH3Probe.js +41 -8
  142. package/src/engine/graphics/sh3/shader/SH3VisualisationMaterial.d.ts.map +1 -0
  143. package/src/engine/graphics/sh3/shader/SH3VisualisationMaterial.js +29 -0
  144. package/src/engine/graphics/sh3/shader/visualize.frag.glsl +41 -0
  145. package/src/engine/graphics/sh3/shader/visualize.vert.glsl +9 -0
  146. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.js +1 -1
  147. package/src/engine/graphics/texture/debug_preview_texture.d.ts +8 -0
  148. package/src/engine/graphics/texture/debug_preview_texture.d.ts.map +1 -0
  149. package/src/engine/graphics/texture/debug_preview_texture.js +38 -0
  150. package/src/view/View.d.ts.map +1 -1
  151. package/src/view/View.js +2 -0
  152. package/src/core/geom/3d/sphere/harmonics/sh3_rotate_filament.d.ts +0 -8
  153. package/src/core/geom/3d/sphere/harmonics/sh3_rotate_filament.d.ts.map +0 -1
  154. package/src/core/geom/3d/sphere/harmonics/sh3_rotate_filament.js +0 -32
  155. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.d.ts +0 -8
  156. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.d.ts.map +0 -1
  157. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band1.js +0 -44
  158. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.d.ts +0 -8
  159. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.d.ts.map +0 -1
  160. package/src/core/geom/3d/sphere/harmonics/sh_rotate_band2.js +0 -86
  161. package/src/engine/graphics/sh3/SH3VisualisationMaterial.d.ts.map +0 -1
  162. package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +0 -83
  163. package/src/engine/graphics/sh3/gi/material/build_fragment_shader.d.ts.map +0 -1
  164. package/src/engine/graphics/sh3/gi/material/build_fragment_shader.js +0 -71
  165. package/src/engine/graphics/sh3/gi/material/build_vertex_shader.d.ts.map +0 -1
  166. package/src/engine/graphics/sh3/gi/material/build_vertex_shader.js +0 -256
  167. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts.map +0 -1
  168. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts.map +0 -1
  169. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts.map +0 -1
  170. package/src/engine/graphics/sh3/path_tracer/ray_reflect.d.ts +0 -2
  171. package/src/engine/graphics/sh3/path_tracer/ray_reflect.d.ts.map +0 -1
  172. package/src/engine/graphics/sh3/path_tracer/ray_reflect.js +0 -27
  173. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts.map +0 -1
  174. /package/src/engine/graphics/sh3/gi/material/{build_fragment_shader.d.ts → space_fragment/build_fragment_shader.d.ts} +0 -0
  175. /package/src/engine/graphics/sh3/gi/material/{build_vertex_shader.d.ts → space_fragment/build_vertex_shader.d.ts} +0 -0
  176. /package/src/engine/graphics/sh3/lpv/{sh3_bake_depth.d.ts → depth/sh3_bake_depth.d.ts} +0 -0
  177. /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
  178. /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
  179. /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
  180. /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,6 @@
1
+ /**
2
+ *
3
+ * @param {string} source
4
+ */
5
+ export function build_vertex_shader(source: string): string;
6
+ //# sourceMappingURL=build_vertex_shader.d.ts.map
@@ -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
+ // }
@@ -0,0 +1,9 @@
1
+ #ifndef LPV_SHADER_CHUNK_PREAMBLE
2
+ #define LPV_SHADER_CHUNK_PREAMBLE
3
+
4
+ precision highp usampler2D;
5
+ precision highp usampler3D;
6
+
7
+ varying vec3[9] lpv_values;
8
+
9
+ #endif
@@ -0,0 +1,9 @@
1
+ /**
2
+ *
3
+ * @param {{vertexShader, fragmentShader}} shader
4
+ */
5
+ export function space_vertex_transform_shader(shader: {
6
+ vertexShader;
7
+ fragmentShader;
8
+ }): void;
9
+ //# sourceMappingURL=space_vertex_transform_shader.d.ts.map
@@ -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
+ }
@@ -8,6 +8,8 @@ export class LightProbeVolume {
8
8
  get mesh(): TetrahedralMesh;
9
9
  get points(): number[];
10
10
  get harmonics(): number[];
11
+ get depth_map_resolution(): number;
12
+ get depth(): number[];
11
13
  set count(arg: number);
12
14
  get count(): number;
13
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"LightProbeVolume.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/LightProbeVolume.js"],"names":[],"mappings":"AAUA;IAmBI,sBAEC;IAED,cAQC;IAED;;;OAGG;IACH,4BAEC;IAED,uBAEC;IAED,0BAEC;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;gCAnJ+B,wDAAwD;2BAC7D,mCAAmC"}
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
- this.#probe_positions.splice(0, this.#probe_positions.length);
36
- this.#sh3_rgb.splice(0, this.#sh3_rgb.length);
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":"AAMA;IAGI,8BAAqC;IAGrC;;;;;OAKG;IACH,0DAJa,SAAS,CA+CrB;CACJ;wCA1DuC,8BAA8B;sBAJhD,4CAA4C"}
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 tBake = countTask(0, probe_count, (i) => {
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
- tBake.estimatedDuration = probe_count;
57
+ tBakeIrradiance.estimatedDuration = probe_count;
41
58
 
42
- tBake.promise().then(() => {
59
+ tBakeIrradiance.promise().then(() => {
43
60
 
44
- const duration = tBake.__executedCpuTime;
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(tBake);
57
- tBake.addDependency(tPrepare);
73
+ tFinish.addDependency(tBakeIrradiance);
74
+ tBakeIrradiance.addDependency(tPrepare);
58
75
 
59
76
  return new TaskGroup([
60
- tPrepare, tBake, tFinish
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
- bake_depth(position: any, position_offset: any, output: any, output_offset: any): void;
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":"AA2BA;IACI,mBAA0B;IAC1B,qBAAmB;IACnB,qBAAyB;IAEzB,uBAA6B;IAE7B,uFAoBC;IAED,iFAqCC;IAKD,mBACC;IAED,4BAsCC;CACJ;8BA3H6B,oBAAoB;2BADvB,8BAA8B;gCADzB,mCAAmC"}
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
- sample_count = 256;
26
+ max_bounce_count = 7;
27
+ sample_count = 192;
31
28
  random = seededRandom(0);
32
29
 
33
30
  scene = new PathTracedScene()
34
31
 
35
- bake_depth(position, position_offset, output, output_offset) {
36
-
37
- sh3_bake_depth(
38
- coefficients, 0, this.scene,
39
- position[position_offset],
40
- position[position_offset + 1],
41
- position[position_offset + 2],
42
- 1.5
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, 7, this.random, this.scene);
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":"AAWA;;;;;;;;GAQG;AACH,iFAPW,gBAAgB,GAKd,QAAQ,gBAAgB,CAAC,CAmFrC;iCA7FgC,uBAAuB"}
1
+ {"version":3,"file":"build_probes_for_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/build_probes_for_scene.js"],"names":[],"mappings":"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 < 100; i++) {
54
- // lpv.add_point(
55
- // randomFloatBetween(random, light_volume_bounds.x0, light_volume_bounds.x1),
56
- // randomFloatBetween(random, light_volume_bounds.y0, light_volume_bounds.y1),
57
- // randomFloatBetween(random, light_volume_bounds.z0, light_volume_bounds.z1),
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(2000);
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
+ }