@woosh/meep-engine 2.119.69 → 2.119.70

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/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.119.69",
8
+ "version": "2.119.70",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1,9 +1,18 @@
1
+ /**
2
+ * Where should probes be resolved?
3
+ */
4
+ export type ProbeResolutionStage = number;
5
+ export namespace ProbeResolutionStage {
6
+ let Vertex: number;
7
+ let Fragment: number;
8
+ }
1
9
  export class MaterialTransformer extends AbstractMaterialTransformer {
2
10
  /**
3
11
  *
4
12
  * @param {LightProbeVolume} volume
13
+ * @param {number|ProbeResolutionStage} stage either "vertex" or "fragment". Vertex sampling is faster but less accurate, fragment is more expensive and precise
5
14
  */
6
- constructor({ volume }: LightProbeVolume);
15
+ constructor({ volume, stage, }: LightProbeVolume);
7
16
  /**
8
17
  *
9
18
  * @param {number} v
@@ -1 +1 @@
1
- {"version":3,"file":"MaterialTransformer.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/sh3/gi/material/MaterialTransformer.js"],"names":[],"mappings":"AAiCA;IA0II;;;OAGG;IACH,0CAOC;IAnBD;;;OAGG;IACH,2BAEC;IAdD;;;OAGG;IACH,wBAEC;IAuBD,sBAIC;IAED,sBA2CC;IAED,eA+CC;IAED,4BA2BC;;CACJ;4CAlT2C,0DAA0D"}
1
+ {"version":3,"file":"MaterialTransformer.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/sh3/gi/material/MaterialTransformer.js"],"names":[],"mappings":";;;mCAqBU,MAAM;;;;;AAchB;IA+II;;;;OAIG;IACH,kDAaC;IA3BD;;;OAGG;IACH,2BAEC;IAdD;;;OAGG;IACH,wBAEC;IA+BD,sBAIC;IAED,sBAiDC;IAED,eAgDC;IAED,4BA2BC;;CACJ;4CAtU2C,0DAA0D"}
@@ -1,4 +1,5 @@
1
1
  import { Vector3 } from "three";
2
+ import { assert } from "../../../../../core/assert.js";
2
3
  import { BinaryDataType } from "../../../../../core/binary/type/BinaryDataType.js";
3
4
  import { AABB3 } from "../../../../../core/geom/3d/aabb/AABB3.js";
4
5
  import { aabb3_from_v3_array } from "../../../../../core/geom/3d/aabb/aabb3_from_v3_array.js";
@@ -20,7 +21,7 @@ const PROPERTY_TRANSFORMER_MARKER = '@light-probe-volume-material-transformer';
20
21
  * Where should probes be resolved?
21
22
  * @enum {number}
22
23
  */
23
- const ProbeResolutionSpace = {
24
+ export const ProbeResolutionStage = {
24
25
  /**
25
26
  * Cheaper, but less precise
26
27
  */
@@ -31,6 +32,7 @@ const ProbeResolutionSpace = {
31
32
  Fragment: 1
32
33
  };
33
34
 
35
+
34
36
  export class MaterialTransformer extends AbstractMaterialTransformer {
35
37
 
36
38
  /**
@@ -44,9 +46,9 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
44
46
 
45
47
  /**
46
48
  *
47
- * @type {ProbeResolutionSpace|number}
49
+ * @type {ProbeResolutionStage|number}
48
50
  */
49
- #space = ProbeResolutionSpace.Fragment
51
+ #sampling_stage = ProbeResolutionStage.Fragment
50
52
 
51
53
  #textures = {
52
54
  vertex: new AttributeDataTexture(
@@ -130,6 +132,10 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
130
132
  }
131
133
  };
132
134
 
135
+ /**
136
+ *
137
+ * @type {number}
138
+ */
133
139
  #uniform_version = -1;
134
140
 
135
141
  /**
@@ -139,15 +145,15 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
139
145
  #onBeforeCompile = (shader) => {
140
146
  Object.assign(shader.uniforms, this.#uniforms);
141
147
 
142
- switch (this.#space) {
143
- case ProbeResolutionSpace.Vertex:
148
+ switch (this.#sampling_stage) {
149
+ case ProbeResolutionStage.Vertex:
144
150
  space_vertex_transform_shader(shader);
145
151
  break;
146
- case ProbeResolutionSpace.Fragment:
152
+ case ProbeResolutionStage.Fragment:
147
153
  space_fragment_transform_shader(shader);
148
154
  break;
149
155
  default:
150
- throw new Error(`Unsupported resolution space ${this.#space}`);
156
+ throw new Error(`Unsupported resolution space ${this.#sampling_stage}`);
151
157
  }
152
158
  };
153
159
 
@@ -169,16 +175,24 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
169
175
  this.#uniforms.lpv_f_intensity.value = v;
170
176
  }
171
177
 
178
+
172
179
  /**
173
180
  *
174
181
  * @param {LightProbeVolume} volume
182
+ * @param {number|ProbeResolutionStage} stage either "vertex" or "fragment". Vertex sampling is faster but less accurate, fragment is more expensive and precise
175
183
  */
176
184
  constructor({
177
- volume
185
+ volume,
186
+ stage = ProbeResolutionStage.Vertex,
178
187
  }) {
188
+
179
189
  super();
180
190
 
191
+ assert.defined(volume, 'volume');
192
+ assert.enum(stage, ProbeResolutionStage, 'stage');
193
+
181
194
  this.#volume = volume;
195
+ this.#sampling_stage = stage;
182
196
 
183
197
  }
184
198
 
@@ -193,6 +207,10 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
193
207
 
194
208
  const bounds = this.#mesh_bounds;
195
209
 
210
+ const ex = bounds.getExtentsX();
211
+ const ey = bounds.getExtentsY();
212
+ const ez = bounds.getExtentsZ();
213
+
196
214
  const lookup = this.#mesh_lookup;
197
215
 
198
216
  const image = lookup.image;
@@ -202,6 +220,8 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
202
220
  const res_x = image.width;
203
221
 
204
222
  const volume = this.#volume;
223
+ const points = volume.points;
224
+ const mesh = volume.mesh;
205
225
 
206
226
  let last_tet = 0;
207
227
 
@@ -214,11 +234,11 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
214
234
  const n_y = (y + 0.5) / res_y
215
235
  const n_z = (z + 0.5) / res_z
216
236
 
217
- const w_x = n_x * bounds.getExtentsX() + bounds.x0;
218
- const w_y = n_y * bounds.getExtentsY() + bounds.y0;
219
- const w_z = n_z * bounds.getExtentsZ() + bounds.z0;
237
+ const w_x = n_x * ex + bounds.x0;
238
+ const w_y = n_y * ey + bounds.y0;
239
+ const w_z = n_z * ez + bounds.z0;
220
240
 
221
- const tet = volume.mesh.walkToTetraContainingPoint(w_x, w_y, w_z, volume.points, last_tet);
241
+ const tet = mesh.walkToTetraContainingPoint(w_x, w_y, w_z, points, last_tet);
222
242
 
223
243
  if (tet !== -1) {
224
244
  last_tet = tet;
@@ -241,6 +261,7 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
241
261
  }
242
262
 
243
263
  if (this.#uniform_version === lpv.version) {
264
+ // up to date
244
265
  return;
245
266
  }
246
267
 
@@ -3,6 +3,10 @@
3
3
  * @see "Irradiance Volumes" by G.Greger, 1998
4
4
  */
5
5
  export class LightProbeVolume {
6
+ /**
7
+ *
8
+ * @return {number}
9
+ */
6
10
  get version(): number;
7
11
  clear(): void;
8
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"LightProbeVolume.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/LightProbeVolume.js"],"names":[],"mappings":"AAWA;;;GAGG;AACH;IAiCI,sBAEC;IAED,cAkBC;IAED;;;OAGG;IACH,4BAEC;IAED,uBAEC;IAED,0BAEC;IAMD;;;OAGG;IACH,sCAIC;IAZD,mCAEC;IAYD,sBAEC;IAMD,uBAGC;IAPD,oBAEC;IAsCD;;;;;;OAMG;IACH,aALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAqBlB;IAMD;;;OAGG;IACH,oBAFW,MAAM,QAYhB;IAED;;;;OAIG;IACH,sCAFW,UAAQ;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAA;KAAC,QAOhD;IAED;;OAEG;IACH,mBAcC;IAGD,yBAEC;;CAEJ;gCA9N+B,wDAAwD"}
1
+ {"version":3,"file":"LightProbeVolume.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/sh3/lpv/LightProbeVolume.js"],"names":[],"mappings":"AAWA;;;GAGG;AACH;IAiCI;;;OAGG;IACH,sBAEC;IAED,cAkBC;IAED;;;OAGG;IACH,4BAEC;IAED,uBAEC;IAED,0BAEC;IAMD;;;OAGG;IACH,sCAIC;IAZD,mCAEC;IAYD,sBAEC;IAMD,uBAGC;IAPD,oBAEC;IAsCD;;;;;;OAMG;IACH,aALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAqBlB;IAMD;;;OAGG;IACH,oBAFW,MAAM,QAYhB;IAED;;;;OAIG;IACH,sCAFW,UAAQ;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,EAAC,MAAM,CAAA;KAAC,QAOhD;IAED;;OAEG;IACH,mBAcC;IAGD,yBAEC;;CAEJ;gCAlO+B,wDAAwD"}
@@ -46,6 +46,10 @@ export class LightProbeVolume {
46
46
 
47
47
  #probe_count = 0;
48
48
 
49
+ /**
50
+ *
51
+ * @return {number}
52
+ */
49
53
  get version() {
50
54
  return this.#version;
51
55
  }