@woosh/meep-engine 2.131.0 → 2.131.2

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": "Pure JavaScript game engine. Fully featured and production ready.",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.131.0",
8
+ "version": "2.131.2",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"Deque.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/queue/Deque.js"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH;IAgCI;;;OAGG;IACH,uBAFW,MAAM,EAUhB;IAuFD;;;OAGG;IACH,WAFY,OAAO,CAIlB;IAED;;;;OAIG;IACH,SAFa,IAAI,CAiBhB;IAED;;;OAGG;IACH,QAFa,MAAM,CAalB;IA6BD;;;;OAIG;IACH,UAHW,CAAC,GACC,OAAO,CAYnB;IA4BD;;;;OAIG;IACH,OAHW,CAAC,GACC,OAAO,CAInB;IAED;;;OAGG;IACH,YAFW,CAAC,QAOX;IAED;;;OAGG;IACH,eAFa,CAAC,GAAC,SAAS,CAQvB;IAED;;;OAGG;IACH,YAFa,CAAC,GAAC,SAAS,CAIvB;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,IAAI,CAOhB;IAED;;;OAGG;IACH,cAFa,CAAC,CASb;IAGD;;;OAGG;IACH,WAFa,CAAC,GAAC,SAAS,CAKvB;IAED;;;;OAIG;IACH,yBAHW,MAAM,GACJ,CAAC,GAAC,SAAS,CAmBvB;IAED;;;;;OAKG;IACH,iBAJW,CAAC,EAAE,kBACH,MAAM,GACJ,CAAC,EAAE,CAUf;IAoBL;;OAEG;IACH,gBAAoB;IACpB;;OAEG;IACH,uBAAoB;IACpB;;OAEG;IACH,eAAmB;IAEnB;;OAEG;IACH,iBA1GiB,IAAI,CA0GF;IAlCf;;;OAGG;IACH,qBAFa,UAAU,CAAC,EAAC,IAAI,CAAC,CAS7B;;CACJ"}
1
+ {"version":3,"file":"Deque.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/queue/Deque.js"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH;IAgCI;;;OAGG;IACH,uBAFW,MAAM,EAUhB;IA4FD;;;OAGG;IACH,WAFY,OAAO,CAIlB;IAED;;;;OAIG;IACH,SAFa,IAAI,CAiBhB;IAED;;;OAGG;IACH,QAFa,MAAM,CAalB;IA6BD;;;;OAIG;IACH,UAHW,CAAC,GACC,OAAO,CAqBnB;IA4BD;;;;OAIG;IACH,OAHW,CAAC,GACC,OAAO,CAInB;IAED;;;OAGG;IACH,YAFW,CAAC,QAOX;IAED;;;OAGG;IACH,eAFa,CAAC,GAAC,SAAS,CAQvB;IAED;;;OAGG;IACH,YAFa,CAAC,GAAC,SAAS,CAIvB;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,IAAI,CAOhB;IAED;;;OAGG;IACH,cAFa,CAAC,CASb;IAGD;;;OAGG;IACH,WAFa,CAAC,GAAC,SAAS,CAKvB;IAED;;;;OAIG;IACH,yBAHW,MAAM,GACJ,CAAC,GAAC,SAAS,CAmBvB;IAED;;;;;OAKG;IACH,iBAJW,CAAC,EAAE,kBACH,MAAM,GACJ,CAAC,EAAE,CAUf;IAoBL;;OAEG;IACH,gBAAoB;IACpB;;OAEG;IACH,uBAAoB;IACpB;;OAEG;IACH,eAAmB;IAEnB;;OAEG;IACH,iBA1GiB,IAAI,CA0GF;IAlCf;;;OAGG;IACH,qBAFa,UAAU,CAAC,EAAC,IAAI,CAAC,CAS7B;;CACJ"}
@@ -109,7 +109,12 @@ export class Deque {
109
109
  */
110
110
  #circular_previous_position(current) {
111
111
  const prev = current - 1;
112
- return (prev < 0) ? (this.#data.length - 1) : prev;
112
+
113
+ const length = this.#data.length;
114
+
115
+ const last_index = length - 1;
116
+
117
+ return (prev < 0) ? last_index : prev;
113
118
  }
114
119
 
115
120
  #check_and_expand() {
@@ -242,7 +247,16 @@ export class Deque {
242
247
  return false;
243
248
  }
244
249
 
245
- this.#remove_internal_shift_backward(i);
250
+ if(i === this.#head){
251
+ // special case
252
+ this.removeFirst();
253
+ } else if(i === this.#circular_previous_position(this.#tail)){
254
+ // special case
255
+ this.removeLast();
256
+ }else {
257
+ // somewhere in the middle, slower option
258
+ this.#remove_internal_shift_backward(i);
259
+ }
246
260
 
247
261
  return true;
248
262
  }
@@ -14,6 +14,7 @@ export namespace MIE_PARTICLES_STANDARD {
14
14
  export let cross_section_scattering: number[];
15
15
  export let cross_section_extinction: number[];
16
16
  export let extinction_intercept: number[];
17
+ export let albedo: number[];
17
18
  }
18
19
  namespace CONTINENTAL_HAZE_MEDIUM { }
19
20
  namespace CONTINENTAL_HAZE_LARGE { }
@@ -1 +1 @@
1
- {"version":3,"file":"MIE_PARTICLES_STANDARD.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/physics/mie/MIE_PARTICLES_STANDARD.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBI,6BAAgC"}
1
+ {"version":3,"file":"MIE_PARTICLES_STANDARD.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/physics/mie/MIE_PARTICLES_STANDARD.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBI,6BAAgC"}
@@ -33,6 +33,7 @@ function make(diameter_m, refraction){
33
33
  cross_section_scattering: mie.scattering_coefficients, // [R_sca, G_sca, B_sca]
34
34
  cross_section_extinction: mie.extinction_coefficients, // [R_ext, G_ext, B_ext]
35
35
  extinction_intercept: mie.extinction_intercept,
36
+ albedo: mie.albedo,
36
37
  }
37
38
  }
38
39
 
@@ -85,11 +86,11 @@ export const MIE_PARTICLES_STANDARD = {
85
86
  * Biomass Smoke (e.g., Wood, Wildfire) — "Brown Carbon"
86
87
  * SMALL — fresh wood‑smoke right above the flames.
87
88
  */
88
- SMOKE_PARTICLE_SMALL: make(0.1e-6, ri_smoke), // 100 nm
89
+ SMOKE_PARTICLE_SMALL: make(0.4e-6, ri_smoke), // 400 nm
89
90
  /** MEDIUM — typical wildfire/chimney smoke drifting across a valley. */
90
- SMOKE_PARTICLE_MEDIUM: make(0.25e-6, ri_smoke), // 250 nm
91
+ SMOKE_PARTICLE_MEDIUM: make(0.8e-6, ri_smoke), // 800 nm
91
92
  /** LARGE — aged regional smoke layers that turn the sun orange. */
92
- SMOKE_PARTICLE_LARGE: make(0.5e-6, ri_smoke), // 500 nm
93
+ SMOKE_PARTICLE_LARGE: make(2e-6, ri_smoke), // 2000 nm
93
94
 
94
95
  /**
95
96
  * Soot (e.g., Diesel Exhaust) — "Black Carbon"
@@ -118,7 +119,7 @@ export const MIE_PARTICLES_STANDARD = {
118
119
  * Pollen (Organic)
119
120
  * MEDIUM — seasonal pollen haze; yellow‑green tint in spring air.
120
121
  */
121
- POLLEN_PARTICLE_MEDIUM: make(15.0e-6, ri_pollen), // 15.0 µm
122
+ POLLEN_PARTICLE_MEDIUM: make(20.0e-6, ri_pollen), // 20.0 µm
122
123
  /** LARGE — visible puffs from trees (e.g., pine) or catkins in forests. */
123
124
  POLLEN_PARTICLE_LARGE: make(30.0e-6, ri_pollen), // 30.0 µm
124
125
  }
@@ -1,11 +1,3 @@
1
- /**
2
- * 📚 Precomputed standard atmospheric particle library for rendering (zero runtime compute).
3
- *
4
- * This file is GENERATED. Do not edit by hand.
5
- * Generation settings: 380–780 nm, step_count=74, sRGB CMFs, medium=air.
6
- * Source: MIE_PARTICLES_STANDARD at generation time.
7
- */
8
- export type MIE_PARTICLES_STANDARD_PRECOMPUTED = any;
9
1
  export namespace MIE_PARTICLES_STANDARD_PRECOMPUTED {
10
2
  namespace CONTINENTAL_HAZE_SMALL {
11
3
  let radius: number;
@@ -1,163 +1,215 @@
1
- /**
2
- * 📚 Precomputed standard atmospheric particle library for rendering (zero runtime compute).
3
- *
4
- * This file is GENERATED. Do not edit by hand.
5
- * Generation settings: 380–780 nm, step_count=74, sRGB CMFs, medium=air.
6
- * Source: MIE_PARTICLES_STANDARD at generation time.
7
- * @see MIE_PARTICLES_STANDARD
8
- * @see generate_precomputed_mie_particles.mjs
9
- * @enum
10
- */
11
- export const MIE_PARTICLES_STANDARD_PRECOMPUTED = {
12
- // --- 💧 Water-Based (Haze, Fog, Clouds) ---
13
-
14
- /**
15
- * Continental haze (ammonium sulfate surrogate)
16
- * SMALL — faint land/city haze: distant skyline slightly washed out on a sunny day.
17
- */
18
- CONTINENTAL_HAZE_SMALL: {
19
- radius: 0.05e-6,
20
- cross_section_scattering: [1.0372407655007736e-16, 2.1697944057740125e-16, 4.9834807086220629e-16],
21
- cross_section_extinction: [1.0390516262084864e-16, 2.1717567402093127e-16, 4.9879160600450892e-16],
22
- },
23
- /** MEDIUM typical daytime urban/valley haze with gentle desaturation. */
24
- CONTINENTAL_HAZE_MEDIUM: {
25
- radius: 0.25e-6,
26
- cross_section_scattering: [5.4565604512921649e-13, 6.8622003246048663e-13, 8.2870024363643223e-13],
27
- cross_section_extinction: [5.4570929795444263e-13, 6.8627297263235853e-13, 8.2882026711065046e-13],
28
- },
29
- /** LARGE — thicker land haze; think post‑inversion murk softening hills. */
30
- CONTINENTAL_HAZE_LARGE: {
31
- radius: 0.5e-6,
32
- cross_section_scattering: [3.0366197068566991e-12, 2.1644339349300699e-12, 1.3934801792509724e-12],
33
- cross_section_extinction: [3.0370663616112397e-12, 2.1649140149488240e-12, 1.3945032069537524e-12],
34
- },
35
-
36
- /**
37
- * Maritime haze (sea‑salt/brine)
38
- * SMALL — light coastal humidity haze over the ocean.
39
- */
40
- MARITIME_HAZE_SMALL: {
41
- radius: 0.05e-6,
42
- cross_section_scattering: [5.5914464254699590e-17, 1.1568131262669868e-16, 2.6209633277373954e-16],
43
- cross_section_extinction: [5.5915758170359112e-17, 1.1568241778493796e-16, 2.6209809109662223e-16],
44
- },
45
- /** MEDIUM — bright, milky air on a breezy beach or around harbors. */
46
- MARITIME_HAZE_MEDIUM: {
47
- radius: 0.25e-6,
48
- cross_section_scattering: [2.7132968972073048e-13, 4.0042274695424540e-13, 5.5420130011596224e-13],
49
- cross_section_extinction: [2.7132995584828778e-13, 4.0042298657367437e-13, 5.5420166908930809e-13],
50
- },
51
- /** LARGE — thick marine layer look before it becomes fog. */
52
- MARITIME_HAZE_LARGE: {
53
- radius: 0.5e-6,
54
- cross_section_scattering: [3.0886981238491608e-12, 3.1506290546356762e-12, 2.6753797206317263e-12],
55
- cross_section_extinction: [3.0887005785916678e-12, 3.1506311260919391e-12, 2.6753829166661686e-12],
56
- },
57
-
58
- /** Larger droplets that create classic white fog and clouds */
59
- /** SMALL — light mist: dawn over a lake, waterfall spray, breath fog. */
60
- FOG_DROPLET_SMALL: {
61
- radius: 1.0e-6,
62
- cross_section_scattering: [6.6871570270074052e-12, 5.4309427410389770e-12, 7.5575449765853189e-12],
63
- cross_section_extinction: [6.6871595378323066e-12, 5.4309431516598268e-12, 7.5575452925636131e-12],
64
- },
65
- /** MEDIUMtypical road fog reducing visibility to a few hundred meters. */
66
- FOG_DROPLET_MEDIUM: {
67
- radius: 5.0e-6,
68
- cross_section_scattering: [1.7316926453733402e-10, 1.6605756824151961e-10, 1.6592498324988880e-10],
69
- cross_section_extinction: [1.7316959394334112e-10, 1.6605760278267214e-10, 1.6592500282854191e-10],
70
- },
71
- /** LARGE — bright, thick cloud core or dense sea fog. */
72
- CLOUD_DROPLET_LARGE: {
73
- radius: 10.0e-6,
74
- cross_section_scattering: [6.5197095812758498e-10, 6.5349550921083126e-10, 6.5384329788317203e-10],
75
- cross_section_extinction: [6.5197199508475796e-10, 6.5349565822644719e-10, 6.5384339898122785e-10],
76
- },
77
-
78
- // --- 🔥 Combustion (Smoke & Soot) ---
79
-
80
- /**
81
- * Biomass Smoke (e.g., Wood, Wildfire) — "Brown Carbon"
82
- * SMALL fresh wood‑smoke right above the flames.
83
- */
84
- SMOKE_PARTICLE_SMALL: {
85
- radius: 0.05e-6,
86
- cross_section_scattering: [1.1385189064946861e-16, 2.4068885318662801e-16, 5.6703231058527902e-16],
87
- cross_section_extinction: [1.2608332795772137e-16, 2.5983427495073982e-16, 6.0993192464455740e-16],
88
- },
89
- /** MEDIUM — typical wildfire/chimney smoke drifting across a valley. */
90
- SMOKE_PARTICLE_MEDIUM: {
91
- radius: 0.125e-6,
92
- cross_section_scattering: [2.3785570711758885e-14, 4.0444762406195023e-14, 8.1882149645316101e-14],
93
- cross_section_extinction: [2.4061852555120587e-14, 4.0934032778509765e-14, 8.3203081374883472e-14],
94
- },
95
- /** LARGE — aged regional smoke layers that turn the sun orange. */
96
- SMOKE_PARTICLE_LARGE: {
97
- radius: 0.25e-6,
98
- cross_section_scattering: [6.0660578316854483e-13, 7.2285541567565703e-13, 8.4663317340238114e-13],
99
- cross_section_extinction: [6.1046973791426257e-13, 7.2817186974654381e-13, 8.5854543364273271e-13],
100
- },
101
-
102
- /**
103
- * Soot (e.g., Diesel Exhaust) — "Black Carbon"
104
- * SMALL very dark sooty exhaust: candle wick zone or fresh tailpipe soot.
105
- */
106
- SOOT_PARTICLE_SMALL: {
107
- radius: 0.025e-6,
108
- cross_section_scattering: [4.9471330718737624e-18, 1.1425655620156528e-17, 3.3950347490168058e-17],
109
- cross_section_extinction: [4.9469990103109046e-16, 6.4148353040364531e-16, 9.4380273910433696e-16],
110
- },
111
- /** MEDIUM — traffic/industrial pollution haze mixing into city air. */
112
- SOOT_AGGREGATE_MEDIUM: {
113
- radius: 0.1e-6,
114
- cross_section_scattering: [1.6352854546128040e-14, 2.6526194830212333e-14, 3.7046093596342311e-14],
115
- cross_section_extinction: [5.6514530217559579e-14, 7.3826969343710883e-14, 8.8338535647949242e-14],
116
- },
117
- /** LARGEheavy dirty smoke near source: burning oil/tires. */
118
- SOOT_AGGREGATE_LARGE: {
119
- radius: 0.2e-6,
120
- cross_section_scattering: [1.6063642291966415e-13, 1.6542559814548711e-13, 1.6709610840580629e-13],
121
- cross_section_extinction: [3.6165278413413643e-13, 3.6212327105835705e-13, 3.5517888510337905e-13],
122
- },
123
-
124
- // --- 💨 Solid Particulates (Dust & Pollen) ---
125
-
126
- /**
127
- * Mineral Dust (e.g., Desert, Sand)
128
- * SMALL — far‑range dusty air softening distant mountains.
129
- */
130
- FINE_DUST_SMALL: {
131
- radius: 0.75e-6,
132
- cross_section_scattering: [2.6567716108736166e-12, 3.7000600340351709e-12, 4.5461877128947888e-12],
133
- cross_section_extinction: [2.8817016426305008e-12, 4.1013539958892520e-12, 5.1657861830223932e-12],
134
- },
135
- /** MEDIUM — moving dust clouds from vehicles or field winds. */
136
- COARSE_DUST_MEDIUM: {
137
- radius: 2.5e-6,
138
- cross_section_scattering: [3.5402159937399897e-11, 3.4676838822224554e-11, 3.3935776143602683e-11],
139
- cross_section_extinction: [4.2922059842758115e-11, 4.3544295684829637e-11, 4.3786612417574868e-11],
140
- },
141
- /** LARGE — sandstorm wall: near‑camera blowing sand/tan curtains. */
142
- COARSE_DUST_LARGE: {
143
- radius: 7.5e-6,
144
- cross_section_scattering: [3.2009871370816270e-10, 2.9679915057976214e-10, 2.7170050898778131e-10],
145
- cross_section_extinction: [3.7268701202180954e-10, 3.7040732546910420e-10, 3.6975018275072762e-10],
146
- },
147
-
148
- /**
149
- * Pollen (Organic)
150
- * MEDIUM — seasonal pollen haze; yellow‑green tint in spring air.
151
- */
152
- POLLEN_PARTICLE_MEDIUM: {
153
- radius: 7.5e-6,
154
- cross_section_scattering: [3.6436190053386620e-10, 3.5570447403441868e-10, 3.3822498357554905e-10],
155
- cross_section_extinction: [3.7552155775356996e-10, 3.7011487872242141e-10, 3.6844677025827028e-10],
156
- },
157
- /** LARGE — visible puffs from trees (e.g., pine) or catkins in forests. */
158
- POLLEN_PARTICLE_LARGE: {
159
- radius: 15.0e-6,
160
- cross_section_scattering: [1.4020197769557275e-9, 1.3777156444096327e-9, 1.2798203157720485e-9],
161
- cross_section_extinction: [1.4599679536172092e-9, 1.4588039863597781e-9, 1.4514473917124675e-9],
162
- },
1
+ /**
2
+ * 📚 Precomputed standard atmospheric particle library for rendering.
3
+ *
4
+ * This file is GENERATED. Do not edit by hand.
5
+ * Generation settings: 380–780 nm, step_count=74, sRGB CMFs, medium=air.
6
+ *
7
+ * Each entry contains:
8
+ * - radius: Particle radius in meters.
9
+ * - cross_section_scattering: [R, G, B] scattering coefficients (m²).
10
+ * - cross_section_extinction: [R, G, B] extinction coefficients (m²).
11
+ */
12
+ export const MIE_PARTICLES_STANDARD_PRECOMPUTED = {
13
+
14
+ // --- 💧 Water-Based (Haze, Fog, Clouds) ---
15
+
16
+ /**
17
+ * Continental haze (ammonium sulfate surrogate)
18
+ * SMALL — faint land/city haze: distant skyline slightly washed out on a sunny day.
19
+ * Diameter: 100 nm
20
+ */
21
+ CONTINENTAL_HAZE_SMALL: {
22
+ radius: 5.0e-8,
23
+ cross_section_scattering: [1.0372407599145680e-16, 2.1697944076390811e-16, 4.9834805745060257e-16],
24
+ cross_section_extinction: [1.0390516205855430e-16, 2.1717567420831002e-16, 4.9879159253139388e-16],
25
+ },
26
+ /**
27
+ * MEDIUM typical daytime urban/valley haze with gentle desaturation.
28
+ * Diameter: 500 nm
29
+ */
30
+ CONTINENTAL_HAZE_MEDIUM: {
31
+ radius: 2.5e-7,
32
+ cross_section_scattering: [5.4565579877961842e-13, 6.8621977746322113e-13, 8.2869951608010304e-13],
33
+ cross_section_extinction: [5.4570905150853122e-13, 6.8627271753511908e-13, 8.2881953884176050e-13],
34
+ },
35
+ /**
36
+ * LARGE — thicker land haze; think post‑inversion murk softening hills.
37
+ * Diameter: 1.0 µm
38
+ */
39
+ CONTINENTAL_HAZE_LARGE: {
40
+ radius: 5.0e-7,
41
+ cross_section_scattering: [3.0366185612989802e-12, 2.1644690526988712e-12, 1.3935109366522711e-12],
42
+ cross_section_extinction: [3.0370652035911430e-12, 2.1649491115406566e-12, 1.3945337813123169e-12],
43
+ },
44
+
45
+ /**
46
+ * Maritime haze (sea‑salt/brine)
47
+ * SMALL — light coastal humidity haze over the ocean.
48
+ * Diameter: 100 nm
49
+ */
50
+ MARITIME_HAZE_SMALL: {
51
+ radius: 5.0e-8,
52
+ cross_section_scattering: [5.5914464124496594e-17, 1.1568131266404890e-16, 2.6209632958954776e-16],
53
+ cross_section_extinction: [5.5915758040155253e-17, 1.1568241782228503e-16, 2.6209808791233174e-16],
54
+ },
55
+ /**
56
+ * MEDIUM — bright, milky air on a breezy beach or around harbors.
57
+ * Diameter: 500 nm
58
+ */
59
+ MARITIME_HAZE_MEDIUM: {
60
+ radius: 2.5e-7,
61
+ cross_section_scattering: [2.7132966283888992e-13, 4.0042270998895428e-13, 5.5420120025016184e-13],
62
+ cross_section_extinction: [2.7132992896636519e-13, 4.0042294960829909e-13, 5.5420156922320274e-13],
63
+ },
64
+ /**
65
+ * LARGEthick marine layer look before it becomes fog.
66
+ * Diameter: 1.0 µm
67
+ */
68
+ MARITIME_HAZE_LARGE: {
69
+ radius: 5.0e-7,
70
+ cross_section_scattering: [3.0886970942611371e-12, 3.1506283070098210e-12, 2.6753836337037947e-12],
71
+ cross_section_extinction: [3.0886995489983882e-12, 3.1506303784552175e-12, 2.6753868296970645e-12],
72
+ },
73
+
74
+ /**
75
+ * Fog & Cloud Droplets
76
+ * SMALL — light mist: dawn over a lake, waterfall spray, breath fog.
77
+ * Diameter: 2.0 µm
78
+ */
79
+ FOG_DROPLET_SMALL: {
80
+ radius: 1.0e-6,
81
+ cross_section_scattering: [6.6872146821004324e-12, 5.4309369486615811e-12, 7.5571588161013023e-12],
82
+ cross_section_extinction: [6.6872171928267207e-12, 5.4309373592604994e-12, 7.5571591319672130e-12],
83
+ },
84
+ /**
85
+ * MEDIUM — typical road fog reducing visibility to a few hundred meters.
86
+ * Diameter: 10.0 µm
87
+ */
88
+ FOG_DROPLET_MEDIUM: {
89
+ radius: 5.0e-6,
90
+ cross_section_scattering: [1.7036472789376784e-10, 1.6665060947239930e-10, 1.6466175909414485e-10],
91
+ cross_section_extinction: [1.7036520771027743e-10, 1.6665065143578210e-10, 1.6466177643977473e-10],
92
+ },
93
+ /**
94
+ * LARGE — bright, thick cloud core or dense sea fog.
95
+ * Diameter: 20.0 µm
96
+ */
97
+ CLOUD_DROPLET_LARGE: {
98
+ radius: 1.0e-5,
99
+ cross_section_scattering: [6.5315742448115536e-10, 6.5618165104565060e-10, 6.5250478893917499e-10],
100
+ cross_section_extinction: [6.5315858886811270e-10, 6.5618181350359152e-10, 6.5250489005400894e-10],
101
+ },
102
+
103
+
104
+ // --- 🔥 Combustion (Smoke & Soot) ---
105
+
106
+ /**
107
+ * Biomass Smoke (e.g., Wood, Wildfire) — "Brown Carbon"
108
+ * SMALL fresh wood‑smoke right above the flames.
109
+ * Diameter: 400 nm
110
+ */
111
+ SMOKE_PARTICLE_SMALL: {
112
+ radius: 2.0e-7,
113
+ cross_section_scattering: [2.5095238381331490e-13, 3.2817527241713552e-13, 4.7184181688431561e-13],
114
+ cross_section_extinction: [2.5244957121744367e-13, 3.3073489397071378e-13, 4.7766204956433065e-13],
115
+ },
116
+ /**
117
+ * MEDIUMtypical wildfire/chimney smoke drifting across a valley.
118
+ * Diameter: 800 nm
119
+ */
120
+ SMOKE_PARTICLE_MEDIUM: {
121
+ radius: 4.0e-7,
122
+ cross_section_scattering: [2.2186086454447846e-12, 1.8611290477348588e-12, 1.2017961650839806e-12],
123
+ cross_section_extinction: [2.2347400788139265e-12, 1.8849701372888018e-12, 1.2529531542589939e-12],
124
+ },
125
+ /**
126
+ * LARGE — aged regional smoke layers that turn the sun orange.
127
+ * Diameter: 2.0 µm
128
+ */
129
+ SMOKE_PARTICLE_LARGE: {
130
+ radius: 1.0e-6,
131
+ cross_section_scattering: [9.7154096631596466e-12, 6.5695017319655712e-12, 6.5950874641241054e-12],
132
+ cross_section_extinction: [9.9744536671262377e-12, 6.9383549994562171e-12, 7.2416530016257137e-12],
133
+ },
134
+
135
+ /**
136
+ * Soot (e.g., Diesel Exhaust) — "Black Carbon"
137
+ * SMALL — very dark sooty exhaust: candle wick zone or fresh tailpipe soot.
138
+ * Diameter: 50 nm
139
+ */
140
+ SOOT_PARTICLE_SMALL: {
141
+ radius: 2.5e-8,
142
+ cross_section_scattering: [4.9471331742851396e-18, 1.1425655543629920e-17, 3.3950349242847612e-17],
143
+ cross_section_extinction: [4.9469989827650098e-16, 6.4148352307268963e-16, 9.4380272697116261e-16],
144
+ },
145
+ /**
146
+ * MEDIUM — traffic/industrial pollution haze mixing into city air.
147
+ * Diameter: 200 nm
148
+ */
149
+ SOOT_AGGREGATE_MEDIUM: {
150
+ radius: 1.0e-7,
151
+ cross_section_scattering: [1.6352855504532771e-14, 2.6526196915106281e-14, 3.7046081158626368e-14],
152
+ cross_section_extinction: [5.6514531230912217e-14, 7.3826992547192368e-14, 8.8338524712659901e-14],
153
+ },
154
+ /**
155
+ * LARGE — heavy dirty smoke near source: burning oil/tires.
156
+ * Diameter: 400 nm
157
+ */
158
+ SOOT_AGGREGATE_LARGE: {
159
+ radius: 2.0e-7,
160
+ cross_section_scattering: [1.6063607357301153e-13, 1.6542541029497725e-13, 1.6709682614452953e-13],
161
+ cross_section_extinction: [3.6165255982805808e-13, 3.6212311121035904e-13, 3.5517926834511851e-13],
162
+ },
163
+
164
+
165
+ // --- 💨 Solid Particulates (Dust & Pollen) ---
166
+
167
+ /**
168
+ * Mineral Dust (e.g., Desert, Sand)
169
+ * SMALL — far‑range dusty air softening distant mountains.
170
+ * Diameter: 1.5 µm
171
+ */
172
+ FINE_DUST_SMALL: {
173
+ radius: 7.5e-7,
174
+ cross_section_scattering: [2.6570379687422880e-12, 3.6996919661206611e-12, 4.5471939176491137e-12],
175
+ cross_section_extinction: [2.8819492220384537e-12, 4.1008076519912007e-12, 5.1659038204372376e-12],
176
+ },
177
+ /**
178
+ * MEDIUM — moving dust clouds from vehicles or field winds.
179
+ * Diameter: 5.0 µm
180
+ */
181
+ COARSE_DUST_MEDIUM: {
182
+ radius: 2.5e-6,
183
+ cross_section_scattering: [3.5472196264524937e-11, 3.3430210987054714e-11, 3.2075451113920786e-11],
184
+ cross_section_extinction: [4.2441528450403185e-11, 4.3597399152097500e-11, 4.3350184971955535e-11],
185
+ },
186
+ /**
187
+ * LARGE — sandstorm wall: near‑camera blowing sand/tan curtains.
188
+ * Diameter: 15.0 µm
189
+ */
190
+ COARSE_DUST_LARGE: {
191
+ radius: 7.5e-6,
192
+ cross_section_scattering: [3.1816278385853973e-10, 2.9406557017587955e-10, 2.6643041098315311e-10],
193
+ cross_section_extinction: [3.7355130308305938e-10, 3.7144494812949936e-10, 3.6814067045857220e-10],
194
+ },
195
+
196
+ /**
197
+ * Pollen (Organic)
198
+ * MEDIUM — seasonal pollen haze; yellow‑green tint in spring air.
199
+ * Diameter: 20.0 µm
200
+ */
201
+ POLLEN_PARTICLE_MEDIUM: {
202
+ radius: 1.0e-5,
203
+ cross_section_scattering: [6.3652345959538284e-10, 6.2647624730458445e-10, 5.8718713214140584e-10],
204
+ cross_section_extinction: [6.5918545142090177e-10, 6.5700023143709686e-10, 6.5127465699910976e-10],
205
+ },
206
+ /**
207
+ * LARGE — visible puffs from trees (e.g., pine) or catkins in forests.
208
+ * Diameter: 30.0 µm
209
+ */
210
+ POLLEN_PARTICLE_LARGE: {
211
+ radius: 1.5e-5,
212
+ cross_section_scattering: [1.3961132818036018e-9, 1.3739693858138355e-9, 1.2750015299393954e-9],
213
+ cross_section_extinction: [1.4562652589727905e-9, 1.4596101004954230e-9, 1.4523332353409636e-9],
214
+ },
163
215
  };