@woosh/meep-engine 2.33.2 → 2.33.6

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 (98) hide show
  1. package/core/bvh2/aabb3/AABB3.js +18 -0
  2. package/core/bvh2/aabb3/aabb3_intersects_frustum.js +38 -0
  3. package/core/collection/RingBuffer.js +40 -10
  4. package/core/collection/array/copyArray.js +2 -2
  5. package/core/collection/array/typed/typed_array_copy.js +2 -2
  6. package/core/collection/table/RowFirstTableSpec.js +8 -0
  7. package/core/geom/3d/aabb/aabb3_compute_projected_area.js +16 -14
  8. package/core/geom/3d/aabb/aabb3_estimate_projected_area2.js +59 -0
  9. package/core/geom/3d/aabb/aabb3_matrix4_project.js +33 -0
  10. package/core/geom/3d/aabb/aabb3_matrix4_project.spec.js +41 -0
  11. package/core/geom/3d/plane/plane3_lerp.js +2 -2
  12. package/core/geom/3d/topology/TopoTriangle.js +2 -2
  13. package/core/geom/AABB2.d.ts +2 -0
  14. package/core/geom/Matrix4.js +4 -4
  15. package/core/geom/Vector3.js +5 -5
  16. package/core/model/reactive/model/terminal/ReactiveReference.js +7 -1
  17. package/core/process/undo/ActionProcessor.d.ts +2 -0
  18. package/core/process/undo/ActionProcessor.js +59 -1
  19. package/core/process/undo/ActionProcessor.spec.js +59 -0
  20. package/core/process/undo/Mark.js +2 -1
  21. package/engine/asset/loaders/GLTFAssetLoader.js +3 -3
  22. package/engine/asset/loaders/material/TextureAttachmensByMaterialType.js +11 -1
  23. package/engine/asset/loaders/material/TextureAttachment.js +12 -1
  24. package/engine/asset/loaders/material/bitmap2sampler_gl.js +19 -0
  25. package/engine/asset/loaders/material/computeImageBitmapEquality.js +7 -19
  26. package/engine/asset/loaders/material/computeTextureEquality.js +1 -1
  27. package/engine/asset/loaders/material/computeTextureHash.js +16 -14
  28. package/engine/asset/loaders/material/traverseMaterialTextures.js +2 -2
  29. package/engine/ecs/animation/OneBoneSurfaceAlignmentSolver.js +2 -2
  30. package/engine/ecs/animation/TwoBoneInverseKinematicsSolver.js +4 -4
  31. package/engine/graphics/GraphicsEngine.d.ts +2 -2
  32. package/engine/graphics/GraphicsEngine.js +20 -62
  33. package/engine/graphics/filter/FlipArrayInPlace.js +25 -0
  34. package/engine/graphics/filter/FlipArrayViaCanvas.js +13 -0
  35. package/engine/graphics/filter/ImageFilter.js +20 -51
  36. package/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +2 -2
  37. package/engine/graphics/geometry/instancing/InstancedMeshGroup.js +25 -16
  38. package/engine/graphics/material/SplatMaterial.js +4 -97
  39. package/engine/graphics/material/optimization/MaterialOptimizationContext.js +598 -0
  40. package/engine/graphics/micron/build/PatchRepresentation.js +4 -43
  41. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +4 -75
  42. package/engine/graphics/micron/build/compute_buffer_geometry_byte_size.js +16 -0
  43. package/engine/graphics/micron/build/fill_patch_geometry_data.js +2 -0
  44. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +1 -1
  45. package/engine/graphics/micron/format/MicronGeometryPatch.js +17 -5
  46. package/engine/graphics/micron/format/MicronVertexDataSpec.js +25 -3
  47. package/engine/graphics/micron/prototypeVirtualGeometry.js +19 -12
  48. package/engine/graphics/micron/render/VirtualGeometryBuilder.js +34 -27
  49. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +2 -4
  50. package/engine/graphics/micron/render/instanced/PatchDataTextures.js +1 -0
  51. package/engine/graphics/micron/render/instanced/ThreeInstancedAdapter.js +1 -29
  52. package/engine/graphics/micron/render/refinement/ActivePatchList.js +43 -159
  53. package/engine/graphics/micron/render/refinement/ActivePatchRecord.js +4 -2
  54. package/engine/graphics/micron/render/refinement/RefinementSpec.js +98 -0
  55. package/engine/graphics/micron/render/refinement/array_normalize_plane.js +25 -0
  56. package/engine/graphics/micron/render/refinement/array_setFromProjectionMatrix.js +60 -0
  57. package/engine/graphics/micron/render/refinement/is_patch_facing_back.js +43 -0
  58. package/engine/graphics/micron/render/refinement/is_patch_visible.js +37 -0
  59. package/engine/graphics/micron/render/v1/MaterialVertexSpec.js +21 -0
  60. package/engine/graphics/micron/render/v1/VGThreeRenderer.js +12 -9
  61. package/engine/graphics/micron/util/unit_hemioct.spec.js +2 -2
  62. package/engine/graphics/render/buffer/buffers/ColorAndDepthFrameBuffer.js +5 -3
  63. package/engine/graphics/render/buffer/buffers/NormalFrameBuffer.js +12 -2
  64. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +8 -10
  65. package/engine/graphics/render/forward_plus/LightManager.js +5 -7
  66. package/engine/graphics/render/forward_plus/data/NumericType.js +9 -0
  67. package/engine/graphics/render/forward_plus/{TextureBackedMemoryRegion.js → data/TextureBackedMemoryRegion.js} +11 -190
  68. package/engine/graphics/render/forward_plus/data/channelCountToThreIntegerTextureType.js +16 -0
  69. package/engine/graphics/render/forward_plus/data/computeDataType.js +36 -0
  70. package/engine/graphics/render/forward_plus/data/computeThreeTextureFormat.js +18 -0
  71. package/engine/graphics/render/forward_plus/data/computeThreeTextureInternalFormatFromDataType.js +63 -0
  72. package/engine/graphics/render/forward_plus/data/computeThreeTextureTypeFromDataType.js +41 -0
  73. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
  74. package/engine/graphics/render/forward_plus/prototypeLightManager.js +1 -1
  75. package/engine/graphics/render/utils/ThreeBypassRenderer.js +1 -3
  76. package/engine/graphics/render/visibility/hiz/buffer/HierarchicalZBuffer.js +198 -0
  77. package/engine/graphics/render/visibility/hiz/buffer/ReductionShader.js +51 -0
  78. package/engine/graphics/render/visibility/hiz/buildCanvasViewFromTexture.js +179 -0
  79. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +435 -0
  80. package/engine/graphics/render/visibility/hiz/query/BatchOcclusionQuery.js +174 -0
  81. package/engine/graphics/render/visibility/hiz/query/QueryShader.js +173 -0
  82. package/engine/graphics/shadows/ShadowMapRenderer.js +12 -2
  83. package/engine/graphics/texture/atlas/TextureAtlas.js +1 -1
  84. package/engine/graphics/texture/cubemap/buildCubeURLs.js +13 -0
  85. package/engine/graphics/texture/cubemap/load_environment_map.d.ts +8 -0
  86. package/engine/graphics/texture/cubemap/load_environment_map.js +163 -0
  87. package/engine/graphics/texture/sampler/Sampler2D.js +18 -62
  88. package/engine/graphics/texture/sampler/convertTexture2Sampler2D.js +8 -4
  89. package/engine/graphics/texture/sampler/debug/paintSamplerOnHTML.js +3 -2
  90. package/engine/graphics/texture/sampler/differenceSampler.js +31 -0
  91. package/engine/graphics/texture/sampler/typedArrayConstructorByInstance.js +25 -0
  92. package/engine/graphics/texture/sampler/util/drawSamplerHTML.js +3 -2
  93. package/engine/graphics/texture/virtual/v2/ShaderUsage.js +6 -5
  94. package/engine/graphics/texture/virtual/v2/prototype.js +16 -6
  95. package/package.json +1 -1
  96. package/view/elements/progress/segmented/SegmentedResourceBarView.js +50 -15
  97. package/view/minimap/gl/MinimapMarkersGL.js +2 -2
  98. package/engine/graphics/micron/render/RefinementSpec.js +0 -110
@@ -14,27 +14,28 @@ function vertex() {
14
14
  function fragment() {
15
15
  return `
16
16
  uniform vec4 u_mt_tex; // [ width, height, tileSize, id ]
17
+ uniform vec2 u_mt_params; // [ bias, maxLevel, xx, xx ]
18
+ varying vec2 vUv;
19
+
17
20
  float MTCalculateMipLevel( const in vec2 uv, const in float bias ) {
18
21
  vec2 dx = dFdx( uv * u_mt_tex.x );
19
22
  vec2 dy = dFdy( uv * u_mt_tex.y );
20
23
  return log2( max( dot( dx, dx ), dot( dy, dy ) ) ) / 2.0 + bias;
21
24
  }
22
25
 
23
- uniform vec2 u_mt_params; // [ bias, maxLevel, xx, xx ]
24
26
  vec4 MTCalculateTileKeyRGBA( const in vec2 uv ) {
25
27
  float level = clamp( floor( MTCalculateMipLevel( uv, u_mt_params.x ) ), 0.0, u_mt_params.y );
26
28
  vec2 texIS = uv.xy * u_mt_tex.xy; // [0-1]x[0-1] -> [0-texwidth]x[0-texheight]
27
29
  vec2 texLS = texIS / exp2( level ); // -> [0-levelwidth]x[0-levelheight]
28
30
  vec2 texTS = floor( texLS / u_mt_tex.z ); // -> [0->tileswide]x[0-tileshigh]
29
- return vec4( u_mt_params.y - level, texTS.xy, u_mt_tex.w ) / 255.0; // [ texId, level, tileX, tileY ] -> RGBA
31
+ return vec4( u_mt_params.y - level, texTS.xy, u_mt_tex.w ) / 255.0; // [ level, tileX, tileY, texId ] -> RGBA
30
32
  }
31
33
 
32
- varying vec2 vUv;
33
34
 
34
35
  void main(){
35
36
  vec4 tile = MTCalculateTileKeyRGBA(vUv);
36
37
  // gl_FragColor = tile;
37
- gl_FragColor = vec4(mix(0.1,1.0,tile.x*255.0), tile.yz*64.0, 1.0);
38
+ gl_FragColor = vec4(mix(0.1,1.0,tile.x*255.0/u_mt_params.y), tile.yz*64.0, 1.0);
38
39
  // gl_FragColor = MTCalculateTileKeyRGBA(vUv);
39
40
  // gl_FragColor = vec4(1.0);
40
41
  }
@@ -44,4 +45,4 @@ void main(){
44
45
  export {
45
46
  vertex,
46
47
  fragment
47
- };
48
+ };
@@ -1,5 +1,6 @@
1
1
  import * as THREE from "three";
2
2
  import { fragment, vertex } from "./ShaderUsage.js";
3
+ import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
3
4
 
4
5
  let camera, renderer, clock, scene;
5
6
 
@@ -22,7 +23,14 @@ function init() {
22
23
  const textureLoader = new THREE.TextureLoader();
23
24
 
24
25
  uniforms = {
25
- "u_mt_params": { value: new THREE.Vector2(0.1, 5) },
26
+ "u_mt_params": { value: new THREE.Vector2(0.1, 6) },
27
+ /**
28
+ * Format: VT_WIDTH, VT_HEIGHT, VT_TILE_SIZE, VT_ID
29
+ * - VT_WIDTH : width of the virtual texture
30
+ * - VT_HEIGHT : height of the virtual texture
31
+ * - VT_TILE_SIZE : resolution of a single tile
32
+ * - VT_ID : multiple different virtual textures may be used, this identifies current texture
33
+ */
26
34
  "u_mt_tex": { value: new THREE.Vector4(16384, 16384, 256, 1) }
27
35
  };
28
36
 
@@ -30,11 +38,11 @@ function init() {
30
38
 
31
39
  const material = new THREE.ShaderMaterial({
32
40
 
33
- uniforms: uniforms,
34
- vertexShader: vertex(),
35
- fragmentShader: fragment()
41
+ uniforms: uniforms,
42
+ vertexShader: vertex(),
43
+ fragmentShader: fragment()
36
44
 
37
- });
45
+ });
38
46
 
39
47
  mesh = new THREE.Mesh(new THREE.TorusGeometry(size, 0.3, 30, 30), material);
40
48
  mesh.rotation.x = 0.3;
@@ -57,6 +65,8 @@ function init() {
57
65
 
58
66
  window.addEventListener("resize", onWindowResize);
59
67
 
68
+ new OrbitControls(camera, renderer.domElement);
69
+
60
70
  }
61
71
 
62
72
  function onWindowResize() {
@@ -88,4 +98,4 @@ function render() {
88
98
  renderer.clear();
89
99
  renderer.render(scene, camera)
90
100
 
91
- }
101
+ }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "productName": "Meep",
5
5
  "description": "production-ready JavaScript game engine based on Entity Component System Architecture",
6
6
  "author": "Alexander Goldring",
7
- "version": "2.33.2",
7
+ "version": "2.33.6",
8
8
  "dependencies": {
9
9
  "fast-levenshtein": "2.0.6",
10
10
  "opentype.js": "1.3.3",
@@ -11,12 +11,12 @@ import ListView from "../../../common/ListView.js";
11
11
  export class SegmentedResourceBarView extends View {
12
12
  /**
13
13
  *
14
- * @param {Vector1|ObservedInteger} value
15
- * @param {Vector1|ObservedInteger} [max=1]
14
+ * @param {(Vector1|ObservedInteger)[]} value
15
+ * @param {Vector1|ObservedInteger|ReactiveExpression} [max=1]
16
16
  * @param {string[]} [classList]
17
17
  */
18
18
  constructor({
19
- value,
19
+ values,
20
20
  max = Vector1.one,
21
21
  classList = []
22
22
  }) {
@@ -24,10 +24,10 @@ export class SegmentedResourceBarView extends View {
24
24
 
25
25
  /**
26
26
  *
27
- * @type {Vector1|ObservedInteger}
27
+ * @type {(Vector1|ObservedInteger)[]}
28
28
  * @private
29
29
  */
30
- this.__value_current = value;
30
+ this.__values_current = values;
31
31
 
32
32
  /**
33
33
  *
@@ -52,9 +52,18 @@ export class SegmentedResourceBarView extends View {
52
52
 
53
53
 
54
54
  // build structure
55
- this.__v__fill = new EmptyView({ classList: ['fill'] });
55
+ this.__v__fill = new EmptyView({ classList: ['fill-container'] });
56
56
  this.addChild(this.__v__fill);
57
57
 
58
+ this.__value_fills = [];
59
+
60
+ for (let i = 0; i < this.__values_current.length; i++) {
61
+ const v_value = new EmptyView({ classList: ['fill', `value-${i}`] });
62
+
63
+ this.__v__fill.addChild(v_value);
64
+ this.__value_fills[i] = v_value;
65
+ }
66
+
58
67
  this.__v__ghost = new EmptyView({ classList: ['ghost'] });
59
68
  this.addChild(this.__v__ghost);
60
69
 
@@ -62,7 +71,7 @@ export class SegmentedResourceBarView extends View {
62
71
  this.__v_segments = new CanvasView();
63
72
  this.__v_segments.addClass('notch-overlay');
64
73
 
65
- this.__v__fill.addChild(this.__v_segments);
74
+ this.addChild(this.__v_segments);
66
75
 
67
76
 
68
77
  /**
@@ -74,12 +83,13 @@ export class SegmentedResourceBarView extends View {
74
83
  elementFactory: (interval) => {
75
84
  const v = new EmptyView({ classList: ['highlight'] });
76
85
 
77
- const valueCurrent = this.__value_current;
78
86
  const valueMax = this.__value_max;
79
87
 
80
88
  const update = () => {
81
- const v0 = interval.min / valueMax;
82
- const span = (interval.max - interval.min) / valueMax;
89
+ const m = valueMax.getValue();
90
+
91
+ const v0 = interval.min / m;
92
+ const span = (interval.max - interval.min) / m;
83
93
 
84
94
  const style = v.el.style;
85
95
 
@@ -89,7 +99,15 @@ export class SegmentedResourceBarView extends View {
89
99
  };
90
100
 
91
101
  v.bindSignal(interval.onChanged, update);
92
- v.bindSignal(valueCurrent.onChanged, update);
102
+
103
+ const valuesCurrent = this.__values_current;
104
+
105
+ for (let i = 0; i < valuesCurrent.length; i++) {
106
+ const valueCurrent = valuesCurrent[i];
107
+
108
+ v.bindSignal(valueCurrent.onChanged, update);
109
+ }
110
+
93
111
  v.bindSignal(valueMax.onChanged, update);
94
112
 
95
113
  v.on.linked.add(update);
@@ -101,8 +119,10 @@ export class SegmentedResourceBarView extends View {
101
119
  this.addChild(this.highlightViews);
102
120
 
103
121
  // subscribe to changes
122
+ for (let i = 0; i < this.__values_current.length; i++) {
123
+ this.bindSignal(this.__values_current[i].onChanged, this.updateFill, this);
124
+ }
104
125
 
105
- this.bindSignal(this.__value_current.onChanged, this.updateFill, this);
106
126
  this.bindSignal(this.__value_max.onChanged, this.handleMaxChange, this);
107
127
 
108
128
  /**
@@ -252,14 +272,29 @@ export class SegmentedResourceBarView extends View {
252
272
  }
253
273
 
254
274
  updateFill() {
255
- const c = this.__value_current.getValue();
256
275
  const m = this.__value_max.getValue();
257
276
 
258
- const f = clamp(c / m, 0, 1);
277
+ let total_current = 0;
278
+
279
+ for (let i = 0; i < this.__values_current.length; i++) {
280
+ const v = this.__values_current[i];
281
+
282
+ const value = v.getValue();
283
+
284
+ total_current += value;
285
+
286
+ const v_fraction = clamp(v / m, 0, 1);
287
+
288
+ const fill_view = this.__value_fills[i];
289
+
290
+ fill_view.el.style.width = `${v_fraction * 100}%`;
291
+ }
292
+
293
+
294
+ const f = clamp(total_current / m, 0, 1);
259
295
 
260
296
  const width = `${f * 100}%`;
261
297
 
262
- this.__v__fill.el.style.width = width
263
298
  this.__v__ghost.el.style.width = width;
264
299
  }
265
300
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DataTexture,
3
- LinearFilter,
4
3
  LinearMipMapLinearFilter,
4
+ NearestFilter,
5
5
  NormalBlending,
6
6
  Points,
7
7
  RGBAFormat,
@@ -82,7 +82,7 @@ function buildMaterial() {
82
82
  dataTexture.flipY = false;
83
83
  dataTexture.generateMipmaps = true;
84
84
  dataTexture.minFilter = LinearMipMapLinearFilter;
85
- dataTexture.magFilter = LinearFilter;
85
+ dataTexture.magFilter = NearestFilter;
86
86
 
87
87
  const uniforms = {
88
88
  atlas: {
@@ -1,110 +0,0 @@
1
- import Vector2 from "../../../../core/geom/Vector2.js";
2
- import { Frustum, Matrix4 } from "three";
3
- import { mat4 } from "gl-matrix";
4
-
5
-
6
- function setFromProjectionMatrix(planes, me) {
7
-
8
- const me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];
9
- const me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];
10
- const me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];
11
- const me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];
12
-
13
- planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize();
14
- planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize();
15
- planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize();
16
- planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize();
17
- planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize();
18
- planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize();
19
-
20
-
21
- }
22
-
23
- export class RefinementSpec {
24
- constructor() {
25
-
26
- /**
27
- * Viewport resolution
28
- * @type {Vector2}
29
- */
30
- this.resolution = new Vector2();
31
-
32
- /**
33
- * Number of pixels in the viewport
34
- * @type {number}
35
- */
36
- this.viewport_area = 0;
37
-
38
- /**
39
- * How much error to accept when deciding to subdivide a cluster
40
- * Measured in pixels
41
- * Higher value will result in better performance but more visible artifacts
42
- * @type {number}
43
- */
44
- this.error_threshold = 1;
45
-
46
- /**
47
- * Object-space camera frustum
48
- * @type {Frustum}
49
- */
50
- this.frustum = new Frustum();
51
-
52
- /**
53
- * Model world transform
54
- * @type {Float32Array|number[]|mat4}
55
- */
56
- this.transform = new Float32Array(16);
57
-
58
- /**
59
- * Contains transformation from camera space to object space
60
- * @type {Float32Array|number[]|mat4}
61
- */
62
- this.projection_matrix = new Float32Array(16);
63
-
64
- /**
65
- * FOV in radians
66
- * @type {number}
67
- */
68
- this.focal_length = 0;
69
-
70
- /**
71
- * Object-space camera position
72
- * @type {Float32Array}
73
- */
74
- this.view_position = new Float32Array(3);
75
- }
76
-
77
- /**
78
- *
79
- * @param {Matrix4} transform world-space object transform
80
- * @param {Matrix4} matrix_world_inverse camera's world inverse matrix
81
- * @param {Matrix4} matrix_projection camera's projection matrix
82
- */
83
- build(transform, matrix_world_inverse, matrix_projection) {
84
- const _transform = this.transform;
85
- _transform.set(transform.elements);
86
-
87
- // build projection matrix
88
- mat4.multiply(this.projection_matrix, matrix_world_inverse.elements, _transform);
89
- mat4.multiply(this.projection_matrix, matrix_projection.elements, this.projection_matrix);
90
-
91
- // compute view frustum in model-space
92
- setFromProjectionMatrix(this.frustum.planes, this.projection_matrix);
93
-
94
- /*
95
-
96
- // get inverse of model view matrix
97
- model_view_matrix.invert();
98
-
99
- // get view origin position in the prjected space
100
- const inv_mv = model_view_matrix.elements;
101
- const view_position = this.view_position;
102
-
103
- // extract position component from transform matrix
104
- view_position[0] = inv_mv[12];
105
- view_position[1] = inv_mv[13];
106
- view_position[2] = inv_mv[14];
107
-
108
- */
109
- }
110
- }