@flighthq/lighting 0.5.1-next.704.19c91ec → 0.5.1-next.730.f29a5aa

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 (40) hide show
  1. package/README.md +2 -2
  2. package/dist/ambientLight.d.ts.map +1 -1
  3. package/dist/ambientLight.js +9 -2
  4. package/dist/ambientLight.js.map +1 -1
  5. package/dist/areaLight.d.ts.map +1 -1
  6. package/dist/areaLight.js +15 -1
  7. package/dist/areaLight.js.map +1 -1
  8. package/dist/directionalLight.d.ts.map +1 -1
  9. package/dist/directionalLight.js +22 -3
  10. package/dist/directionalLight.js.map +1 -1
  11. package/dist/environment.d.ts.map +1 -1
  12. package/dist/environment.js +2 -1
  13. package/dist/environment.js.map +1 -1
  14. package/dist/hemisphereLight.d.ts.map +1 -1
  15. package/dist/hemisphereLight.js +5 -1
  16. package/dist/hemisphereLight.js.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/lightAnalysis.d.ts.map +1 -1
  22. package/dist/lightAnalysis.js +63 -16
  23. package/dist/lightAnalysis.js.map +1 -1
  24. package/dist/pointLight.d.ts.map +1 -1
  25. package/dist/pointLight.js +15 -1
  26. package/dist/pointLight.js.map +1 -1
  27. package/dist/spotLight.d.ts +1 -0
  28. package/dist/spotLight.d.ts.map +1 -1
  29. package/dist/spotLight.js +23 -1
  30. package/dist/spotLight.js.map +1 -1
  31. package/package.json +5 -5
  32. package/src/ambientLight.test.ts +14 -3
  33. package/src/areaLight.test.ts +22 -1
  34. package/src/directionalLight.test.ts +39 -1
  35. package/src/environment.test.ts +5 -2
  36. package/src/hemisphereLight.test.ts +12 -2
  37. package/src/lightAnalysis.test.ts +51 -4
  38. package/src/pointLight.test.ts +22 -1
  39. package/src/sceneForwardLights.test.ts +27 -0
  40. package/src/spotLight.test.ts +47 -1
package/README.md CHANGED
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/lighting`. The `@fli
13
13
  This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
14
14
 
15
15
  - [Flight project](https://github.com/flighthq/flight)
16
- - [Source for @flighthq/lighting@0.5.1-next.704.19c91ec](https://github.com/flighthq/flight/tree/19c91ec3e569d6b3b471682726465a79fba9f8cb/packages/lighting)
17
- - [License](https://github.com/flighthq/flight/blob/19c91ec3e569d6b3b471682726465a79fba9f8cb/LICENSE.md)
16
+ - [Source for @flighthq/lighting@0.5.1-next.730.f29a5aa](https://github.com/flighthq/flight/tree/f29a5aab5db192284ce5cadf08ffae2649a598ea/packages/lighting)
17
+ - [License](https://github.com/flighthq/flight/blob/f29a5aab5db192284ce5cadf08ffae2649a598ea/LICENSE.md)
@@ -1 +1 @@
1
- {"version":3,"file":"ambientLight.d.ts","sourceRoot":"","sources":["../src/ambientLight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIlF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,YAAY,CAE9E;AAID,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAMxF"}
1
+ {"version":3,"file":"ambientLight.d.ts","sourceRoot":"","sources":["../src/ambientLight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIlF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,YAAY,CAO9E;AAID,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAQxF"}
@@ -1,15 +1,22 @@
1
1
  import { createEntity } from '@flighthq/entity/contract';
2
- import { AmbientLightKind } from '@flighthq/types/contract';
2
+ import { AmbientLightKind, UnitlessLightUnit } from '@flighthq/types/contract';
3
3
  // Independent copy of an ambient light's data. The `kind` discriminant is carried over.
4
4
  export function cloneAmbientLight(source) {
5
- return createAmbientLight({ color: source.color, intensity: source.intensity });
5
+ return createAmbientLight({
6
+ color: source.color,
7
+ enabled: source.enabled,
8
+ intensity: source.intensity,
9
+ intensityUnit: source.intensityUnit,
10
+ });
6
11
  }
7
12
  // Uniform omnidirectional fill light. Color is packed sRgb-albedo RGBA (0xrrggbbaa); defaults to
8
13
  // opaque white at unit intensity. Ambient lights do not cast shadows.
9
14
  export function createAmbientLight(options) {
10
15
  return createEntity({
11
16
  color: options?.color ?? 0xffffffff,
17
+ enabled: options?.enabled ?? true,
12
18
  intensity: options?.intensity ?? 1,
19
+ intensityUnit: options?.intensityUnit ?? UnitlessLightUnit,
13
20
  kind: AmbientLightKind,
14
21
  });
15
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ambientLight.js","sourceRoot":"","sources":["../src/ambientLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,MAA8B;IAC9D,OAAO,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,iGAAiG;AACjG,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,OAAuC;IACxE,OAAO,YAAY,CAAC;QAClB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,UAAU;QACnC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,IAAI,EAAE,gBAAgB;KACvB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ambientLight.js","sourceRoot":"","sources":["../src/ambientLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE/E,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,MAA8B;IAC9D,OAAO,kBAAkB,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC,CAAC;AACL,CAAC;AAED,iGAAiG;AACjG,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,OAAuC;IACxE,OAAO,YAAY,CAAC;QAClB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,UAAU;QACnC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;QACjC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,iBAAiB;QAC1D,IAAI,EAAE,gBAAgB;KACvB,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"areaLight.d.ts","sourceRoot":"","sources":["../src/areaLight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIzF,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAerE;AAMD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAmB/E;AAOD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,EAChC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC5B,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,GACxB,IAAI,CA6BN"}
1
+ {"version":3,"file":"areaLight.d.ts","sourceRoot":"","sources":["../src/areaLight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIzF,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAsBrE;AAMD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,CA0B/E;AAOD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,EAChC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC5B,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,GACxB,IAAI,CA6BN"}
package/dist/areaLight.js CHANGED
@@ -1,13 +1,16 @@
1
1
  import { createEntity } from '@flighthq/entity/contract';
2
2
  import { cloneVector3, createVector3, normalizeVector3, setVector3 } from '@flighthq/geometry/contract';
3
- import { AreaLightKind } from '@flighthq/types/contract';
3
+ import { AreaLightKind, UnitlessLightUnit } from '@flighthq/types/contract';
4
4
  // Independent copy of an area light's data, including fresh position/direction/right/up vectors.
5
5
  export function cloneAreaLight(source) {
6
6
  return createEntity({
7
7
  castsShadow: source.castsShadow,
8
8
  color: source.color,
9
+ decay: source.decay,
9
10
  direction: cloneVector3(source.direction),
11
+ enabled: source.enabled,
10
12
  intensity: source.intensity,
13
+ intensityUnit: source.intensityUnit,
11
14
  kind: AreaLightKind,
12
15
  normalBias: source.normalBias,
13
16
  pcfRadius: source.pcfRadius,
@@ -15,6 +18,10 @@ export function cloneAreaLight(source) {
15
18
  range: source.range,
16
19
  right: cloneVector3(source.right),
17
20
  shadowBias: source.shadowBias,
21
+ shadowFar: source.shadowFar,
22
+ shadowMapSize: source.shadowMapSize,
23
+ shadowNear: source.shadowNear,
24
+ shadowStrength: source.shadowStrength,
18
25
  up: cloneVector3(source.up),
19
26
  });
20
27
  }
@@ -30,8 +37,11 @@ export function createAreaLight(options) {
30
37
  return createEntity({
31
38
  castsShadow: options?.castsShadow ?? false,
32
39
  color: options?.color ?? 0xffffffff,
40
+ decay: options?.decay ?? 2,
33
41
  direction: direction ? cloneVector3(direction) : createVector3(0, -1, 0),
42
+ enabled: options?.enabled ?? true,
34
43
  intensity: options?.intensity ?? 1,
44
+ intensityUnit: options?.intensityUnit ?? UnitlessLightUnit,
35
45
  kind: AreaLightKind,
36
46
  normalBias: options?.normalBias ?? 0,
37
47
  pcfRadius: options?.pcfRadius ?? 0,
@@ -39,6 +49,10 @@ export function createAreaLight(options) {
39
49
  range: options?.range ?? -1,
40
50
  right: right ? cloneVector3(right) : createVector3(1, 0, 0),
41
51
  shadowBias: options?.shadowBias ?? 0,
52
+ shadowFar: options?.shadowFar ?? 500,
53
+ shadowMapSize: options?.shadowMapSize ?? 1024,
54
+ shadowNear: options?.shadowNear ?? 0.5,
55
+ shadowStrength: options?.shadowStrength ?? 1,
42
56
  up: up ? cloneVector3(up) : createVector3(0, 0, 1),
43
57
  });
44
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"areaLight.js","sourceRoot":"","sources":["../src/areaLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAExG,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,iGAAiG;AACjG,MAAM,UAAU,cAAc,CAAC,MAA2B;IACxD,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,kGAAkG;AAClG,8FAA8F;AAC9F,kGAAkG;AAClG,mGAAmG;AACnG,MAAM,UAAU,eAAe,CAAC,OAAoC;IAClE,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAC7B,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC;IACvB,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK;QAC1C,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,UAAU;QACnC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;QACpC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;QAC3B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;QACpC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACnD,CAAC,CAAC;AACL,CAAC;AAED,+FAA+F;AAC/F,gGAAgG;AAChG,gGAAgG;AAChG,kGAAkG;AAClG,8DAA8D;AAC9D,MAAM,UAAU,uBAAuB,CACrC,GAAc,EACd,SAAgC,EAChC,KAA4B,EAC5B,EAAyB;IAEzB,wEAAwE;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5G,qEAAqE;IACrE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtH,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjG,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,gEAAgE;QAChE,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;QAClF,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACzB,UAAU,CACR,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,EAC9B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,EAC9B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAC/B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC7D,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"areaLight.js","sourceRoot":"","sources":["../src/areaLight.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"directionalLight.d.ts","sourceRoot":"","sources":["../src/directionalLight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAI1F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAW1F;AAKD,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GAAG,gBAAgB,CAYpG;AAID,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CASzG;AAID,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,IAAI,CAQN"}
1
+ {"version":3,"file":"directionalLight.d.ts","sourceRoot":"","sources":["../src/directionalLight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAI1F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAmB1F;AAKD,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GAAG,gBAAgB,CAsBpG;AAID,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CASzG;AAID,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,IAAI,CAQN"}
@@ -1,17 +1,25 @@
1
1
  import { createEntity } from '@flighthq/entity/contract';
2
2
  import { cloneVector3, createVector3, setVector3 } from '@flighthq/geometry/contract';
3
- import { DirectionalLightKind } from '@flighthq/types/contract';
3
+ import { DirectionalLightKind, UnitlessLightUnit } from '@flighthq/types/contract';
4
4
  // Independent copy of a directional light's data, including a fresh `direction` vector.
5
5
  export function cloneDirectionalLight(source) {
6
6
  return createEntity({
7
+ cascadeCount: source.cascadeCount,
8
+ cascadeSplits: source.cascadeSplits.slice(),
7
9
  castsShadow: source.castsShadow,
8
10
  color: source.color,
9
11
  direction: cloneVector3(source.direction),
12
+ enabled: source.enabled,
10
13
  intensity: source.intensity,
14
+ intensityUnit: source.intensityUnit,
11
15
  kind: DirectionalLightKind,
12
16
  normalBias: source.normalBias,
13
17
  pcfRadius: source.pcfRadius,
14
18
  shadowBias: source.shadowBias,
19
+ shadowFar: source.shadowFar,
20
+ shadowMapSize: source.shadowMapSize,
21
+ shadowNear: source.shadowNear,
22
+ shadowStrength: source.shadowStrength,
15
23
  });
16
24
  }
17
25
  // Infinitely distant directional light (sun). `direction` is the world-space travel direction
@@ -19,16 +27,27 @@ export function cloneDirectionalLight(source) {
19
27
  // defaults to opaque white at unit intensity, pointing straight down (0, -1, 0) with shadows off.
20
28
  export function createDirectionalLight(options) {
21
29
  const direction = options?.direction;
22
- return createEntity({
30
+ const light = createEntity({
31
+ cascadeCount: options?.cascadeCount ?? 1,
32
+ cascadeSplits: options?.cascadeSplits?.slice() ?? [1],
23
33
  castsShadow: options?.castsShadow ?? false,
24
34
  color: options?.color ?? 0xffffffff,
25
- direction: direction ? cloneVector3(direction) : createVector3(0, -1, 0),
35
+ direction: createVector3(0, -1, 0),
36
+ enabled: options?.enabled ?? true,
26
37
  intensity: options?.intensity ?? 1,
38
+ intensityUnit: options?.intensityUnit ?? UnitlessLightUnit,
27
39
  kind: DirectionalLightKind,
28
40
  normalBias: options?.normalBias ?? 0,
29
41
  pcfRadius: options?.pcfRadius ?? 0,
30
42
  shadowBias: options?.shadowBias ?? 0,
43
+ shadowFar: options?.shadowFar ?? 500,
44
+ shadowMapSize: options?.shadowMapSize ?? 1024,
45
+ shadowNear: options?.shadowNear ?? 0.5,
46
+ shadowStrength: options?.shadowStrength ?? 1,
31
47
  });
48
+ if (direction)
49
+ setDirectionalLightDirection(light, direction.x, direction.y, direction.z);
50
+ return light;
32
51
  }
33
52
  // Writes a normalized direction into `out.direction`. Normalizes the supplied x/y/z components
34
53
  // before storing so the renderer can rely on a unit-length direction. Alias-safe.
@@ -1 +1 @@
1
- {"version":3,"file":"directionalLight.js","sourceRoot":"","sources":["../src/directionalLight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"directionalLight.js","sourceRoot":"","sources":["../src/directionalLight.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKhF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,WAAW,CAE3E;AAKD,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAMrF"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKhF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,WAAW,CAE3E;AAKD,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAOrF"}
@@ -3,13 +3,14 @@ import { EnvironmentKind } from '@flighthq/types/contract';
3
3
  // Independent copy of the environment's data. The `environment` cubemap reference is shared, not
4
4
  // deep-copied: a Texture is a GPU-backed resource, so the copy aliases the same source.
5
5
  export function cloneEnvironment(source) {
6
- return createEnvironment({ environment: source.environment, intensity: source.intensity });
6
+ return createEnvironment({ enabled: source.enabled, environment: source.environment, intensity: source.intensity });
7
7
  }
8
8
  // Image-based environment lighting + skybox source. `environment` is the radiance cubemap used
9
9
  // for the skybox and as the IBL specular/irradiance source; `intensity` scales its contribution.
10
10
  // Defaults to no cubemap (null) at unit intensity.
11
11
  export function createEnvironment(options) {
12
12
  return createEntity({
13
+ enabled: options?.enabled ?? true,
13
14
  environment: options?.environment ?? null,
14
15
  intensity: options?.intensity ?? 1,
15
16
  kind: EnvironmentKind,
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,iGAAiG;AACjG,wFAAwF;AACxF,MAAM,UAAU,gBAAgB,CAAC,MAA6B;IAC5D,OAAO,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,+FAA+F;AAC/F,iGAAiG;AACjG,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,OAAsC;IACtE,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;QACzC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,iGAAiG;AACjG,wFAAwF;AACxF,MAAM,UAAU,gBAAgB,CAAC,MAA6B;IAC5D,OAAO,iBAAiB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AACtH,CAAC;AAED,+FAA+F;AAC/F,iGAAiG;AACjG,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,OAAsC;IACtE,OAAO,YAAY,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;QACjC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;QACzC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hemisphereLight.d.ts","sourceRoot":"","sources":["../src/hemisphereLight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAIxF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,eAAe,CAMvF;AAKD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,eAAe,CAOjG"}
1
+ {"version":3,"file":"hemisphereLight.d.ts","sourceRoot":"","sources":["../src/hemisphereLight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAIxF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,eAAe,CAQvF;AAKD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,eAAe,CASjG"}
@@ -1,10 +1,12 @@
1
1
  import { createEntity } from '@flighthq/entity/contract';
2
- import { HemisphereLightKind } from '@flighthq/types/contract';
2
+ import { HemisphereLightKind, UnitlessLightUnit } from '@flighthq/types/contract';
3
3
  // Independent copy of a hemisphere light's data. The `kind` discriminant is carried over.
4
4
  export function cloneHemisphereLight(source) {
5
5
  return createHemisphereLight({
6
+ enabled: source.enabled,
6
7
  groundColor: source.groundColor,
7
8
  intensity: source.intensity,
9
+ intensityUnit: source.intensityUnit,
8
10
  skyColor: source.skyColor,
9
11
  });
10
12
  }
@@ -13,8 +15,10 @@ export function cloneHemisphereLight(source) {
13
15
  // opaque white at unit intensity. Hemisphere lights do not cast shadows.
14
16
  export function createHemisphereLight(options) {
15
17
  return createEntity({
18
+ enabled: options?.enabled ?? true,
16
19
  groundColor: options?.groundColor ?? 0xffffffff,
17
20
  intensity: options?.intensity ?? 1,
21
+ intensityUnit: options?.intensityUnit ?? UnitlessLightUnit,
18
22
  kind: HemisphereLightKind,
19
23
  skyColor: options?.skyColor ?? 0xffffffff,
20
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"hemisphereLight.js","sourceRoot":"","sources":["../src/hemisphereLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,MAAiC;IACpE,OAAO,qBAAqB,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,4FAA4F;AAC5F,gGAAgG;AAChG,yEAAyE;AACzE,MAAM,UAAU,qBAAqB,CAAC,OAA0C;IAC9E,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,UAAU;QAC/C,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,UAAU;KAC1C,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"hemisphereLight.js","sourceRoot":"","sources":["../src/hemisphereLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElF,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,MAAiC;IACpE,OAAO,qBAAqB,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,4FAA4F;AAC5F,gGAAgG;AAChG,yEAAyE;AACzE,MAAM,UAAU,qBAAqB,CAAC,OAA0C;IAC9E,OAAO,YAAY,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;QACjC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,UAAU;QAC/C,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,iBAAiB;QAC1D,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,UAAU;KAC1C,CAAC,CAAC;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { applyLightExposure, cloneAmbientLight, cloneAreaLight, cloneDirectionalLight, cloneEnvironment, cloneHemisphereLight, clonePointLight, cloneSpotLight, convertLightIntensity, createAmbientLight, createAreaLight, createDirectionalLight, createEnvironment, createHemisphereLight, createPointLight, createScene3DLights, createSpotLight, getLightContributionAtBoundingSphere, getLightInfluenceBounds, getLightLinearIntensity, getLightLuminance, getSpotLightConeDegrees, hasLightInfluenceOnBounds, isLightCastingShadow, selectScene3DForwardLights, setAreaLightOrientation, setDirectionalLightDirection, setDirectionalLightTarget, setSpotLightCone, setSpotLightDirection, setSpotLightTarget, } from './contract';
1
+ export { applyLightExposure, cloneAmbientLight, cloneAreaLight, cloneDirectionalLight, cloneEnvironment, cloneHemisphereLight, clonePointLight, cloneSpotLight, convertLightIntensity, createAmbientLight, createAreaLight, createDirectionalLight, createEnvironment, createHemisphereLight, createPointLight, createScene3DLights, createSpotLight, getLightContributionAtBoundingSphere, getLightInfluenceBounds, getLightLinearIntensity, getLightLuminance, getSpotLightConeDegrees, hasLightInfluenceOnBounds, isLightCastingShadow, selectScene3DForwardLights, setAreaLightOrientation, setDirectionalLightDirection, setDirectionalLightTarget, setSpotLightBlend, setSpotLightCone, setSpotLightDirection, setSpotLightTarget, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,oCAAoC,EACpC,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,oCAAoC,EACpC,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { applyLightExposure, cloneAmbientLight, cloneAreaLight, cloneDirectionalLight, cloneEnvironment, cloneHemisphereLight, clonePointLight, cloneSpotLight, convertLightIntensity, createAmbientLight, createAreaLight, createDirectionalLight, createEnvironment, createHemisphereLight, createPointLight, createScene3DLights, createSpotLight, getLightContributionAtBoundingSphere, getLightInfluenceBounds, getLightLinearIntensity, getLightLuminance, getSpotLightConeDegrees, hasLightInfluenceOnBounds, isLightCastingShadow, selectScene3DForwardLights, setAreaLightOrientation, setDirectionalLightDirection, setDirectionalLightTarget, setSpotLightCone, setSpotLightDirection, setSpotLightTarget, } from './contract';
1
+ export { applyLightExposure, cloneAmbientLight, cloneAreaLight, cloneDirectionalLight, cloneEnvironment, cloneHemisphereLight, clonePointLight, cloneSpotLight, convertLightIntensity, createAmbientLight, createAreaLight, createDirectionalLight, createEnvironment, createHemisphereLight, createPointLight, createScene3DLights, createSpotLight, getLightContributionAtBoundingSphere, getLightInfluenceBounds, getLightLinearIntensity, getLightLuminance, getSpotLightConeDegrees, hasLightInfluenceOnBounds, isLightCastingShadow, selectScene3DForwardLights, setAreaLightOrientation, setDirectionalLightDirection, setDirectionalLightTarget, setSpotLightBlend, setSpotLightCone, setSpotLightDirection, setSpotLightTarget, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,oCAAoC,EACpC,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,oCAAoC,EACpC,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"lightAnalysis.d.ts","sourceRoot":"","sources":["../src/lightAnalysis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAiBjG,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,EACvC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,MAAM,CA+BR;AAMD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAqC7F;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAMhE;AAMD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,OAAO,CA0B/G;AASD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAMpE"}
1
+ {"version":3,"file":"lightAnalysis.d.ts","sourceRoot":"","sources":["../src/lightAnalysis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,kBAAkB,EAGlB,KAAK,EACL,UAAU,EACV,SAAS,EACV,MAAM,0BAA0B,CAAC;AAkBlC,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,EACvC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,MAAM,CAgCR;AAOD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CA4C7F;AAOD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAmChE;AAMD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,OAAO,CA2B/G;AASD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAOpE"}
@@ -3,11 +3,12 @@ import { AmbientLightKind, AreaLightKind, DirectionalLightKind, EnvironmentKind,
3
3
  // Estimates the radiance contribution of one punctual light at a world-space bounding sphere.
4
4
  // Distance uses the nearest sphere surface (`centerDistance - radius`) so large objects receive
5
5
  // radius slack instead of being ranked only at their centre. The attenuation matches the forward
6
- // shaders: inverse-square falloff multiplied by the squared glTF/UE4 range window; spot lights also
7
- // apply the same smoothstep cone at the sphere centre. Multiplying by getLightLuminance makes the
8
- // result suitable for deterministic forward-budget ranking rather than material-specific shading.
6
+ // shaders at the default decay: distance^decay falloff multiplied by the squared glTF/UE4 range
7
+ // window; spot lights also apply the same smoothstep cone at the sphere centre. Multiplying by
8
+ // getLightLuminance makes the result suitable for deterministic forward-budget ranking rather than
9
+ // material-specific shading. Disabled lights contribute zero.
9
10
  export function getLightContributionAtBoundingSphere(light, bounds) {
10
- if (bounds.radius < 0)
11
+ if (!isLightEnabled(light) || bounds.radius < 0)
11
12
  return 0;
12
13
  const centerDx = bounds.center.x - light.position.x;
13
14
  const centerDy = bounds.center.y - light.position.y;
@@ -21,7 +22,8 @@ export function getLightContributionAtBoundingSphere(light, bounds) {
21
22
  const windowed = Math.max(0, Math.min(1, 1 - factor * factor));
22
23
  window = windowed * windowed;
23
24
  }
24
- let contribution = (getLightLuminance(light) * window) / Math.max(distanceSquared, 1e-4);
25
+ const attenuation = Math.max(distance, 0.01) ** light.decay;
26
+ let contribution = (getLightLuminance(light) * window) / attenuation;
25
27
  if (light.kind === SpotLightKind) {
26
28
  const spot = light;
27
29
  const directionLength = Math.hypot(spot.direction.x, spot.direction.y, spot.direction.z);
@@ -38,7 +40,15 @@ export function getLightContributionAtBoundingSphere(light, bounds) {
38
40
  // region the light can illuminate. Lights with a finite `range` produce a sphere centered at
39
41
  // `position` with `radius = range`. Non-spatial lights (ambient, hemisphere, environment) and
40
42
  // infinite-range spatial lights produce a sentinel sphere with `radius = -1` (unlimited reach).
43
+ // Disabled lights write a zero-radius bound at the origin; culling queries reject them explicitly.
41
44
  export function getLightInfluenceBounds(out, light) {
45
+ if (!isLightEnabled(light)) {
46
+ out.center.x = 0;
47
+ out.center.y = 0;
48
+ out.center.z = 0;
49
+ out.radius = 0;
50
+ return;
51
+ }
42
52
  const kind = light.kind;
43
53
  if (kind === AmbientLightKind ||
44
54
  kind === HemisphereLightKind ||
@@ -74,23 +84,53 @@ export function getLightInfluenceBounds(out, light) {
74
84
  out.center.z = 0;
75
85
  out.radius = -1;
76
86
  }
77
- // Returns the linear-light luminance of a light's color × intensity. Packed sRGB channels are
78
- // gamma-decoded through the shared color primitive before applying the Rec. 709 weights, matching
79
- // the radiance that packScene3DLightBlock sends to the shader. Useful for ranking lights by their
80
- // rendered contribution when prioritizing a forward-light budget.
87
+ // Returns the linear-light luminance of a built-in light's color × stored intensity. Packed sRGB
88
+ // channels are gamma-decoded through the shared color primitive before applying the Rec. 709
89
+ // weights, matching the radiance that packScene3DLightBlock sends to the shader. Hemisphere lights
90
+ // use the mean of their sky/ground luminances; Environment and open custom kinds return zero.
91
+ // Disabled lights also return zero.
81
92
  export function getLightLuminance(light) {
82
- const colored = light;
83
- const color = colored.color;
84
- if (color === undefined)
93
+ if (!isLightEnabled(light))
85
94
  return 0;
86
- const intensity = colored.intensity ?? 1;
87
- return getColorLuminance(color) * intensity;
95
+ switch (light.kind) {
96
+ case AmbientLightKind: {
97
+ const ambient = light;
98
+ return getColorLuminance(ambient.color) * ambient.intensity;
99
+ }
100
+ case AreaLightKind: {
101
+ const area = light;
102
+ return getColorLuminance(area.color) * area.intensity;
103
+ }
104
+ case DirectionalLightKind: {
105
+ const directional = light;
106
+ return getColorLuminance(directional.color) * directional.intensity;
107
+ }
108
+ case EnvironmentKind:
109
+ return 0;
110
+ case HemisphereLightKind: {
111
+ const hemisphere = light;
112
+ const meanColorLuminance = (getColorLuminance(hemisphere.groundColor) + getColorLuminance(hemisphere.skyColor)) * 0.5;
113
+ return meanColorLuminance * hemisphere.intensity;
114
+ }
115
+ case PointLightKind: {
116
+ const point = light;
117
+ return getColorLuminance(point.color) * point.intensity;
118
+ }
119
+ case SpotLightKind: {
120
+ const spot = light;
121
+ return getColorLuminance(spot.color) * spot.intensity;
122
+ }
123
+ default:
124
+ return 0;
125
+ }
88
126
  }
89
- // Returns true when `light` could influence a point within `bounds`. Non-spatial lights (ambient,
127
+ // Returns true when an enabled `light` could influence a point within `bounds`. Non-spatial lights (ambient,
90
128
  // hemisphere, directional, environment) and infinite-range lights always return true. For spatial
91
129
  // lights with a finite range, tests whether the influence sphere intersects `bounds` using a
92
130
  // sphere-sphere overlap test. An empty `bounds` (radius < 0) is treated as no overlap.
93
131
  export function hasLightInfluenceOnBounds(light, bounds) {
132
+ if (!isLightEnabled(light))
133
+ return false;
94
134
  const kind = light.kind;
95
135
  if (kind === AmbientLightKind ||
96
136
  kind === HemisphereLightKind ||
@@ -116,7 +156,7 @@ export function hasLightInfluenceOnBounds(light, bounds) {
116
156
  const radSum = spatial.range + bounds.radius;
117
157
  return distSq <= radSum * radSum;
118
158
  }
119
- // Returns true when the light is configured to cast shadows. Non-shadow-capable light types
159
+ // Returns true when the enabled light is configured to cast shadows. Non-shadow-capable light types
120
160
  // (AmbientLight, HemisphereLight, Environment) always return false.
121
161
  //
122
162
  // `Light` declares only `kind`, so the shadow-capable field is not on the base type and a custom light
@@ -124,12 +164,19 @@ export function hasLightInfluenceOnBounds(light, bounds) {
124
164
  // have, and comparing against `true` keeps the declared return type honest for a custom kind whose
125
165
  // `castsShadow` is absent or is not a boolean at all.
126
166
  export function isLightCastingShadow(light) {
167
+ if (!isLightEnabled(light))
168
+ return false;
127
169
  const kind = light.kind;
128
170
  if (kind === AmbientLightKind || kind === HemisphereLightKind || kind === EnvironmentKind) {
129
171
  return false;
130
172
  }
131
173
  return 'castsShadow' in light && light.castsShadow === true;
132
174
  }
175
+ // Built-in descriptors always carry `enabled`; an open custom kind may omit it and keeps the
176
+ // historical enabled-by-default behavior. A custom kind may still opt into the same gate.
177
+ function isLightEnabled(light) {
178
+ return !('enabled' in light) || light.enabled !== false;
179
+ }
133
180
  function smoothstep(edge0, edge1, value) {
134
181
  if (edge0 === edge1)
135
182
  return value < edge0 ? 0 : 1;
@@ -1 +1 @@
1
- {"version":3,"file":"lightAnalysis.js","sourceRoot":"","sources":["../src/lightAnalysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lightAnalysis.js","sourceRoot":"","sources":["../src/lightAnalysis.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pointLight.d.ts","sourceRoot":"","sources":["../src/pointLight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI9E,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,CAYxE;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAalF"}
1
+ {"version":3,"file":"pointLight.d.ts","sourceRoot":"","sources":["../src/pointLight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI9E,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,CAmBxE;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAoBlF"}
@@ -1,18 +1,25 @@
1
1
  import { createEntity } from '@flighthq/entity/contract';
2
2
  import { cloneVector3, createVector3 } from '@flighthq/geometry/contract';
3
- import { PointLightKind } from '@flighthq/types/contract';
3
+ import { PointLightKind, UnitlessLightUnit } from '@flighthq/types/contract';
4
4
  // Independent copy of a point light's data, including a fresh `position` vector.
5
5
  export function clonePointLight(source) {
6
6
  return createEntity({
7
7
  castsShadow: source.castsShadow,
8
8
  color: source.color,
9
+ decay: source.decay,
10
+ enabled: source.enabled,
9
11
  intensity: source.intensity,
12
+ intensityUnit: source.intensityUnit,
10
13
  kind: PointLightKind,
11
14
  normalBias: source.normalBias,
12
15
  pcfRadius: source.pcfRadius,
13
16
  position: cloneVector3(source.position),
14
17
  range: source.range,
15
18
  shadowBias: source.shadowBias,
19
+ shadowFar: source.shadowFar,
20
+ shadowMapSize: source.shadowMapSize,
21
+ shadowNear: source.shadowNear,
22
+ shadowStrength: source.shadowStrength,
16
23
  });
17
24
  }
18
25
  // Omnidirectional point light. `position` is world-space; intensity falls off with distance up
@@ -23,13 +30,20 @@ export function createPointLight(options) {
23
30
  return createEntity({
24
31
  castsShadow: options?.castsShadow ?? false,
25
32
  color: options?.color ?? 0xffffffff,
33
+ decay: options?.decay ?? 2,
34
+ enabled: options?.enabled ?? true,
26
35
  intensity: options?.intensity ?? 1,
36
+ intensityUnit: options?.intensityUnit ?? UnitlessLightUnit,
27
37
  kind: PointLightKind,
28
38
  normalBias: options?.normalBias ?? 0,
29
39
  pcfRadius: options?.pcfRadius ?? 0,
30
40
  position: position ? cloneVector3(position) : createVector3(0, 0, 0),
31
41
  range: options?.range ?? -1,
32
42
  shadowBias: options?.shadowBias ?? 0,
43
+ shadowFar: options?.shadowFar ?? 500,
44
+ shadowMapSize: options?.shadowMapSize ?? 1024,
45
+ shadowNear: options?.shadowNear ?? 0.5,
46
+ shadowStrength: options?.shadowStrength ?? 1,
33
47
  });
34
48
  }
35
49
  //# sourceMappingURL=pointLight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pointLight.js","sourceRoot":"","sources":["../src/pointLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,MAA4B;IAC1D,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,+FAA+F;AAC/F,gGAAgG;AAChG,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAAC,OAAqC;IACpE,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK;QAC1C,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,UAAU;QACnC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;QACpC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;QAC3B,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;KACrC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"pointLight.js","sourceRoot":"","sources":["../src/pointLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,MAA4B;IAC1D,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;AACL,CAAC;AAED,+FAA+F;AAC/F,gGAAgG;AAChG,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAAC,OAAqC;IACpE,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK;QAC1C,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,UAAU;QACnC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;QACjC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,iBAAiB;QAC1D,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;QACpC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;QAC3B,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;QACpC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,GAAG;QACpC,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,IAAI;QAC7C,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,GAAG;QACtC,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC"}
@@ -2,6 +2,7 @@ import type { SpotLight, SpotLightConeAngles, SpotLightOptions } from '@flighthq
2
2
  export declare function cloneSpotLight(source: Readonly<SpotLight>): SpotLight;
3
3
  export declare function createSpotLight(options?: Readonly<SpotLightOptions>): SpotLight;
4
4
  export declare function getSpotLightConeDegrees(out: SpotLightConeAngles, source: Readonly<SpotLight>): void;
5
+ export declare function setSpotLightBlend(out: SpotLight, blend: number): void;
5
6
  export declare function setSpotLightCone(out: SpotLight, innerDegrees: number, outerDegrees: number): void;
6
7
  export declare function setSpotLightDirection(out: SpotLight, x: number, y: number, z: number): void;
7
8
  export declare function setSpotLightTarget(out: SpotLight, targetX: number, targetY: number, targetZ: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"spotLight.d.ts","sourceRoot":"","sources":["../src/spotLight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjG,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAerE;AAMD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAmB/E;AAKD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAGnG;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAGjG;AAID,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ3F;AAKD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY1G"}
1
+ {"version":3,"file":"spotLight.d.ts","sourceRoot":"","sources":["../src/spotLight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjG,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAuBrE;AAMD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,CA4B/E;AAKD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAGnG;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAErE;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAGjG;AAID,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ3F;AAKD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY1G"}