rayzee 9.4.1 → 9.5.0

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 (145) hide show
  1. package/README.md +226 -25
  2. package/dist/ActiveColor-YvuQq44O.js +13 -0
  3. package/dist/ArchiveImporter-xuUJiklP.js +4301 -0
  4. package/dist/AssetConfig-DSEntE65.js +30 -0
  5. package/dist/BidirectionalIntegrator-C5PKjJoT.js +934 -0
  6. package/dist/ColorManagement-CheBCPaW.js +1488 -0
  7. package/dist/EngineDefaults-DH3bI5t-.js +844 -0
  8. package/dist/EngineEvents-Ci8dVWCP.js +73 -0
  9. package/dist/EngineIssues-CIZnXHsF.js +72 -0
  10. package/dist/FileFormats-sPGJeCRc.js +102 -0
  11. package/dist/Logger-BnHghprG.js +97 -0
  12. package/dist/{NeuralRetouch-vkdXXyK2.js → NeuralRetouch-CW11yLZ_.js} +8 -6
  13. package/dist/{NeuralSuperRes-FVqRJKQV.js → NeuralSuperRes-BekaecYg.js} +55 -120
  14. package/dist/PathTracer-Ccl9KOuF.js +29729 -0
  15. package/dist/PhysicalSky-Dv2PMFGW.js +1219 -0
  16. package/dist/RayzeeRenderer-BQxnzCTD.js +3542 -0
  17. package/dist/SolarLimb-ken-JbDK.js +721 -0
  18. package/dist/ToneMapGPU-BHi5JzIq.js +177 -0
  19. package/dist/ViewTransforms-D0rTLBsX.js +255 -0
  20. package/dist/WorkingMatrix-C6y233hT.js +27 -0
  21. package/dist/ZipReader-gDSWr0I5.js +98 -0
  22. package/dist/addons/archives.es.js +3 -0
  23. package/dist/addons/bidirectional.es.js +2 -0
  24. package/dist/addons/color.es.js +3 -0
  25. package/dist/addons/formats.es.js +2 -0
  26. package/dist/addons/physical-sky.es.js +2 -0
  27. package/dist/addons/storage.es.js +3 -0
  28. package/dist/archiveFormats-BZw7TiDp.js +75 -0
  29. package/dist/identity-DrQsGT2o.js +39 -0
  30. package/dist/openStorage-DwcBRUj7.js +820 -0
  31. package/dist/rayzee-core.es.js +12 -0
  32. package/dist/rayzee.es.js +2266 -44125
  33. package/dist/rayzee.umd.js +485 -473
  34. package/dist/sceneCachePolicy-BmwYOYDu.js +183 -0
  35. package/dist/shared-BGBcSxBQ.js +17 -0
  36. package/package.json +23 -2
  37. package/src/Color/ActiveColor.js +34 -0
  38. package/src/Color/BasicColor.js +147 -0
  39. package/src/Color/ColorManagement.js +7 -31
  40. package/src/EngineDefaults.js +23 -14
  41. package/src/EngineEvents.js +2 -0
  42. package/src/EngineIssues.js +1 -0
  43. package/src/PathTracerApp.js +617 -4016
  44. package/src/Pipeline/PipelineContext.js +0 -4
  45. package/src/Platform.js +36 -0
  46. package/src/Processor/ArchiveCache.js +1 -1
  47. package/src/Processor/ArchiveImporter.js +1259 -0
  48. package/src/Processor/AssetLoader.js +322 -1746
  49. package/src/Processor/AtmosphereModel.js +1 -2
  50. package/src/Processor/BVHBuilder.js +4 -95
  51. package/src/Processor/EnvironmentExactTable.js +187 -0
  52. package/src/Processor/EquirectHDRInfo.js +30 -223
  53. package/src/Processor/FileFormats.js +116 -0
  54. package/src/Processor/GLTFDecoders.js +85 -0
  55. package/src/Processor/GLTFDiffuseTransmission.js +63 -0
  56. package/src/Processor/GeometryExtractor.js +12 -1
  57. package/src/Processor/IESParser.js +47 -35
  58. package/src/Processor/KernelManager.js +35 -2
  59. package/src/Processor/MaterialPacking.js +8 -7
  60. package/src/Processor/PBRT/PBRTMaterials.js +129 -41
  61. package/src/Processor/PBRT/PBRTParser.js +30 -17
  62. package/src/Processor/PBRT/PBRTSceneBuilder.js +548 -37
  63. package/src/Processor/PBRT/PBRTTextureBake.js +154 -0
  64. package/src/Processor/PBRT/PFM.js +59 -0
  65. package/src/Processor/PackedRayBuffer.js +116 -9
  66. package/src/Processor/ParallelBVHBuilder.js +3 -6
  67. package/src/Processor/PhysicalSky.js +5 -4
  68. package/src/Processor/PlatformImageLoader.js +50 -6
  69. package/src/Processor/QueueManager.js +12 -3
  70. package/src/Processor/ReinsertionOptimizer.js +2 -2
  71. package/src/Processor/SceneProcessor.js +15 -55
  72. package/src/Processor/ShaderBuilder.js +6 -16
  73. package/src/Processor/SimpleSky.js +1 -62
  74. package/src/Processor/SolarLimb.js +3 -0
  75. package/src/Processor/TextureCreator.js +1 -1
  76. package/src/Processor/Workers/BVHSubtreeWorker.js +1 -34
  77. package/src/Processor/Workers/BVHWorker.js +5 -18
  78. package/src/Processor/Workers/CDFWorker.js +6 -183
  79. package/src/Processor/archiveFormats.js +7 -0
  80. package/src/Processor/utils.js +2 -1
  81. package/src/RayzeeRenderer.js +3902 -0
  82. package/src/RenderSettings.js +49 -41
  83. package/src/Stages/ASVGF.js +5 -7
  84. package/src/Stages/AutoExposure.js +3 -12
  85. package/src/Stages/Compositor.js +8 -23
  86. package/src/Stages/NRD.js +9 -2
  87. package/src/Stages/NormalDepth.js +9 -6
  88. package/src/Stages/PathTracer.js +254 -38
  89. package/src/Stages/PathTracerStage.js +11 -16
  90. package/src/Storage/BLASCache.js +1 -1
  91. package/src/Storage/CDFCache.js +18 -17
  92. package/src/Storage/DownloadCache.js +1 -1
  93. package/src/Storage/SceneGraphCodec.js +46 -3
  94. package/src/Storage/SpillStore.js +1 -1
  95. package/src/Storage/StorageManager.js +2 -4
  96. package/src/Storage/areas.js +4 -0
  97. package/src/TSL/BVHTraversal.js +62 -24
  98. package/src/TSL/Bidirectional.js +204 -0
  99. package/src/TSL/BidirectionalLamps.js +132 -0
  100. package/src/TSL/Clearcoat.js +15 -6
  101. package/src/TSL/Common.js +19 -14
  102. package/src/TSL/ConnectKernel.js +147 -0
  103. package/src/TSL/Debugger.js +1 -1
  104. package/src/TSL/Displacement.js +4 -3
  105. package/src/TSL/EmissiveSampling.js +64 -17
  106. package/src/TSL/Environment.js +77 -106
  107. package/src/TSL/EnvironmentCDF.js +85 -39
  108. package/src/TSL/ExtendKernel.js +8 -3
  109. package/src/TSL/FinalWriteKernel.js +4 -4
  110. package/src/TSL/GenerateKernel.js +18 -4
  111. package/src/TSL/HitFacet.js +35 -5
  112. package/src/TSL/LightBVHSampling.js +40 -9
  113. package/src/TSL/LightGenerateKernel.js +293 -0
  114. package/src/TSL/LightGuide.js +198 -0
  115. package/src/TSL/LightSplatKernel.js +165 -0
  116. package/src/TSL/LightsCore.js +13 -38
  117. package/src/TSL/LightsDirect.js +28 -29
  118. package/src/TSL/LightsIndirect.js +3 -1
  119. package/src/TSL/LightsSampling.js +90 -38
  120. package/src/TSL/MaterialEvaluation.js +113 -31
  121. package/src/TSL/MaterialProperties.js +44 -17
  122. package/src/TSL/MaterialTransmission.js +52 -47
  123. package/src/TSL/MergeKernel.js +218 -0
  124. package/src/TSL/PathTracerCore.js +65 -29
  125. package/src/TSL/Random.js +4 -0
  126. package/src/TSL/SceneResources.js +51 -0
  127. package/src/TSL/ShadeKernel.js +881 -103
  128. package/src/TSL/Struct.js +10 -0
  129. package/src/TSL/Sun.js +1 -1
  130. package/src/TSL/TextureSampling.js +65 -60
  131. package/src/addons/archives.js +14 -0
  132. package/src/addons/bidirectional.js +13 -0
  133. package/src/addons/color.js +32 -0
  134. package/src/addons/formats.js +16 -0
  135. package/src/addons/physicalSky.js +14 -0
  136. package/src/addons/storage.js +19 -0
  137. package/src/core.js +35 -0
  138. package/src/index.js +3 -1
  139. package/src/integrators/BidirectionalIntegrator.js +832 -0
  140. package/src/managers/EnvironmentManager.js +94 -91
  141. package/src/managers/MaterialDataManager.js +42 -0
  142. package/src/managers/UniformManager.js +0 -1
  143. package/dist/ToneMapGPU-DKQM1pMd.js +0 -552
  144. package/dist/rolldown-runtime-CAFD8bLK.js +0 -11
  145. package/src/Processor/TreeletOptimizer.js +0 -574
@@ -0,0 +1,1219 @@
1
+ import { n as e } from "./BidirectionalIntegrator-C5PKjJoT.js";
2
+ import { dt as t, i as n, nn as r } from "./SolarLimb-ken-JbDK.js";
3
+ import { r as i } from "./WorkingMatrix-C6y233hT.js";
4
+ import { StorageInstancedBufferAttribute as a } from "three/webgpu";
5
+ import { Fn as o, If as s, Loop as c, Return as l, abs as u, acos as d, asin as f, atan as p, clamp as m, cos as h, dot as g, exp as _, float as v, floor as y, instanceIndex as b, int as x, log as S, max as C, min as w, mix as T, select as E, sin as D, smoothstep as O, sqrt as k, step as A, storage as j, tan as M, uint as N, uniform as P, vec2 as ee, vec3 as F, vec4 as I } from "three/tsl";
6
+ import { ClampToEdgeWrapping as te, DataTexture as ne, EquirectangularReflectionMapping as re, FloatType as ie, LinearFilter as ae, LinearSRGBColorSpace as oe, RGBAFormat as se, RepeatWrapping as ce, Vector3 as le, Vector4 as ue } from "three";
7
+ //#region src/Processor/AtmosphereModel.js
8
+ var L = 6360, R = 6420, de = 1.2, fe = .9, pe = .76, me = 1.3, he = 380, z = 25, ge = 1 / 32, _e = [
9
+ 1.11776,
10
+ 1.14259,
11
+ 1.01249,
12
+ 1.14716,
13
+ 1.72765,
14
+ 1.73054,
15
+ 1.6887,
16
+ 1.61253,
17
+ 1.91198,
18
+ 2.03474,
19
+ 2.02042,
20
+ 2.02212,
21
+ 1.93377,
22
+ 1.95809,
23
+ 1.91686,
24
+ 1.8298,
25
+ 1.8685,
26
+ 1.8931,
27
+ 1.85149,
28
+ 1.8504,
29
+ 1.8341,
30
+ 1.8345,
31
+ 1.8147,
32
+ 1.78158,
33
+ 1.7533,
34
+ 1.6965,
35
+ 1.68194,
36
+ 1.64654,
37
+ 1.6048,
38
+ 1.52143,
39
+ 1.55622,
40
+ 1.5113,
41
+ 1.474,
42
+ 1.4482,
43
+ 1.41018,
44
+ 1.36775,
45
+ 1.34188,
46
+ 1.31429,
47
+ 1.28303,
48
+ 1.26758,
49
+ 1.2367,
50
+ 1.2082,
51
+ 1.18737,
52
+ 1.14683,
53
+ 1.12362,
54
+ 1.1058,
55
+ 1.07124,
56
+ 1.04992
57
+ ], ve = [
58
+ 118e-29,
59
+ 2182e-31,
60
+ 2818e-31,
61
+ 6636e-31,
62
+ 1527e-30,
63
+ 2763e-30,
64
+ 552e-29,
65
+ 8451e-30,
66
+ 1582e-29,
67
+ 2316e-29,
68
+ 3669e-29,
69
+ 4924e-29,
70
+ 7752e-29,
71
+ 9016e-29,
72
+ 148e-27,
73
+ 1602e-28,
74
+ 2139e-28,
75
+ 2755e-28,
76
+ 3091e-28,
77
+ 35e-26,
78
+ 4266e-28,
79
+ 4672e-28,
80
+ 4398e-28,
81
+ 4701e-28,
82
+ 5019e-28,
83
+ 4305e-28,
84
+ 374e-27,
85
+ 3215e-28,
86
+ 2662e-28,
87
+ 2238e-28,
88
+ 1852e-28,
89
+ 1473e-28,
90
+ 1209e-28,
91
+ 9423e-29,
92
+ 7455e-29,
93
+ 6566e-29,
94
+ 5105e-29,
95
+ 415e-28,
96
+ 4228e-29,
97
+ 3237e-29,
98
+ 2451e-29,
99
+ 2801e-29,
100
+ 2534e-29,
101
+ 1624e-29,
102
+ 1465e-29,
103
+ 2078e-29,
104
+ 1383e-29,
105
+ 7105e-30
106
+ ], ye = [
107
+ 1299e-7,
108
+ 3917e-9,
109
+ 6061e-7,
110
+ 2321e-7,
111
+ 6965e-9,
112
+ .001086,
113
+ 4149e-7,
114
+ 1239e-8,
115
+ .001946,
116
+ 7416e-7,
117
+ 2202e-8,
118
+ .003486,
119
+ .001368,
120
+ 39e-6,
121
+ .006450001,
122
+ .002236,
123
+ 64e-6,
124
+ .01054999,
125
+ .004243,
126
+ 12e-5,
127
+ .02005001,
128
+ .00765,
129
+ 217e-6,
130
+ .03621,
131
+ .01431,
132
+ 396e-6,
133
+ .06785001,
134
+ .02319,
135
+ 64e-5,
136
+ .1102,
137
+ .04351,
138
+ .00121,
139
+ .2074,
140
+ .07763,
141
+ .00218,
142
+ .3713,
143
+ .13438,
144
+ .004,
145
+ .6456,
146
+ .21477,
147
+ .0073,
148
+ 1.0390501,
149
+ .2839,
150
+ .0116,
151
+ 1.3856,
152
+ .3285,
153
+ .01684,
154
+ 1.62296,
155
+ .34828,
156
+ .023,
157
+ 1.74706,
158
+ .34806,
159
+ .0298,
160
+ 1.7826,
161
+ .3362,
162
+ .038,
163
+ 1.77211,
164
+ .3187,
165
+ .048,
166
+ 1.7441,
167
+ .2908,
168
+ .06,
169
+ 1.6692,
170
+ .2511,
171
+ .0739,
172
+ 1.5281,
173
+ .19536,
174
+ .09098,
175
+ 1.28764,
176
+ .1421,
177
+ .1126,
178
+ 1.0419,
179
+ .09564,
180
+ .13902,
181
+ .8129501,
182
+ .05795001,
183
+ .1693,
184
+ .6162,
185
+ .03201,
186
+ .20802,
187
+ .46518,
188
+ .0147,
189
+ .2586,
190
+ .3533,
191
+ .0049,
192
+ .323,
193
+ .272,
194
+ .0024,
195
+ .4073,
196
+ .2123,
197
+ .0093,
198
+ .503,
199
+ .1582,
200
+ .0291,
201
+ .6082,
202
+ .1117,
203
+ .06327,
204
+ .71,
205
+ .07824999,
206
+ .1096,
207
+ .7932,
208
+ .05725001,
209
+ .1655,
210
+ .862,
211
+ .04216,
212
+ .2257499,
213
+ .9148501,
214
+ .02984,
215
+ .2904,
216
+ .954,
217
+ .0203,
218
+ .3597,
219
+ .9803,
220
+ .0134,
221
+ .4334499,
222
+ .9949501,
223
+ .008749999,
224
+ .5120501,
225
+ 1,
226
+ .005749999,
227
+ .5945,
228
+ .995,
229
+ .0039,
230
+ .6784,
231
+ .9786,
232
+ .002749999,
233
+ .7621,
234
+ .952,
235
+ .0021,
236
+ .8425,
237
+ .9154,
238
+ .0018,
239
+ .9163,
240
+ .87,
241
+ .001650001,
242
+ .9786,
243
+ .8163,
244
+ .0014,
245
+ 1.0263,
246
+ .757,
247
+ .0011,
248
+ 1.0567,
249
+ .6949,
250
+ .001,
251
+ 1.0622,
252
+ .631,
253
+ 8e-4,
254
+ 1.0456,
255
+ .5668,
256
+ 6e-4,
257
+ 1.0026,
258
+ .503,
259
+ 34e-5,
260
+ .9384,
261
+ .4412,
262
+ 24e-5,
263
+ .8544499,
264
+ .381,
265
+ 19e-5,
266
+ .7514,
267
+ .321,
268
+ 1e-4,
269
+ .6424,
270
+ .265,
271
+ 4999999e-11,
272
+ .5419,
273
+ .217,
274
+ 3e-5,
275
+ .4479,
276
+ .175,
277
+ 2e-5,
278
+ .3608,
279
+ .1382,
280
+ 1e-5,
281
+ .2835,
282
+ .107,
283
+ 0,
284
+ .2187,
285
+ .0816,
286
+ 0,
287
+ .1649,
288
+ .061,
289
+ 0,
290
+ .1212,
291
+ .04458,
292
+ 0,
293
+ .0874,
294
+ .032,
295
+ 0,
296
+ .0636,
297
+ .0232,
298
+ 0,
299
+ .04677,
300
+ .017,
301
+ 0,
302
+ .0329,
303
+ .01192,
304
+ 0,
305
+ .0227,
306
+ .00821,
307
+ 0,
308
+ .01584,
309
+ .005723,
310
+ 0,
311
+ .01135916,
312
+ .004102,
313
+ 0,
314
+ .008110916,
315
+ .002929,
316
+ 0,
317
+ .005790346,
318
+ .002091,
319
+ 0,
320
+ .004109457,
321
+ .001484,
322
+ 0,
323
+ .002899327,
324
+ .001047,
325
+ 0,
326
+ .00204919,
327
+ 74e-5,
328
+ 0,
329
+ .001439971,
330
+ 52e-5,
331
+ 0,
332
+ .0009999493,
333
+ 3611e-7,
334
+ 0,
335
+ .0006900786,
336
+ 2492e-7,
337
+ 0,
338
+ .0004760213,
339
+ 1719e-7,
340
+ 0,
341
+ .0003323011,
342
+ 12e-5,
343
+ 0,
344
+ .0002348261,
345
+ 848e-7,
346
+ 0,
347
+ .0001661505,
348
+ 6e-5,
349
+ 0,
350
+ 117413e-9,
351
+ 424e-7,
352
+ 0,
353
+ 8307527e-11,
354
+ 3e-5,
355
+ 0,
356
+ 5870652e-11,
357
+ 212e-7,
358
+ 0,
359
+ 4150994e-11,
360
+ 1499e-8,
361
+ 0,
362
+ 2935326e-11,
363
+ 106e-7,
364
+ 0,
365
+ 2067383e-11,
366
+ 74657e-10,
367
+ 0,
368
+ 1455977e-11,
369
+ 52578e-10,
370
+ 0,
371
+ 1025398e-11,
372
+ 37029e-10,
373
+ 0,
374
+ 7221456e-12,
375
+ 26078e-10,
376
+ 0,
377
+ 5085868e-12,
378
+ 18366e-10,
379
+ 0,
380
+ 3581652e-12,
381
+ 12934e-10,
382
+ 0,
383
+ 2522525e-12,
384
+ 9.1093e-7,
385
+ 0,
386
+ 1776509e-12,
387
+ 6.4153e-7,
388
+ 0,
389
+ 1251141e-12,
390
+ 4.5181e-7,
391
+ 0
392
+ ], be = [
393
+ 3.2406,
394
+ -1.5372,
395
+ -.4986,
396
+ -.9689,
397
+ 1.8758,
398
+ .0415,
399
+ .0557,
400
+ -.204,
401
+ 1.057
402
+ ], xe = 0xe90f62a5dcb760000;
403
+ function Se(e) {
404
+ let t = (e / 1e3) ** 2;
405
+ return .002152 * (1.0455996 - 341.29061 / t - .9023085 * t) / (1 + .0027059889 / t - 85.968563 * t);
406
+ }
407
+ function B(e, t, n, r, i = 1, a = 0) {
408
+ let o = e.length / i, s = (r - t) / n;
409
+ if (s <= 0) return e[a];
410
+ if (s >= o - 1) return e[(o - 1) * i + a];
411
+ let c = Math.floor(s), l = s - c;
412
+ return e[c * i + a] * (1 - l) + e[(c + 1) * i + a] * l;
413
+ }
414
+ function Ce(e, t) {
415
+ let n = 0, r = he + e * z;
416
+ for (let e = 0; e < z; e++) n += t(r + e + .5);
417
+ return n / z;
418
+ }
419
+ function V(e) {
420
+ let t = new Float64Array(16);
421
+ for (let n = 0; n < 16; n++) t[n] = Ce(n, e);
422
+ return t;
423
+ }
424
+ var we = Float64Array.from({ length: 16 }, (e, t) => he + (t + .5) * z), Te = V((e) => B(_e, 360, 10, e)), Ee = V((e) => Se(e) / 8), De = V((e) => B(ve, 360, 10, e)), Oe = V((e) => (e / 1e3) ** -me), H = (() => {
425
+ let e = new Float64Array(48);
426
+ for (let t = 0; t < 16; t++) for (let n = 0; n < 3; n++) e[t * 3 + n] = Ce(t, (e) => B(ye, 360, 5, e, 3, n)) * z;
427
+ return e;
428
+ })();
429
+ function ke(e = 1) {
430
+ let t = new Float32Array(48);
431
+ for (let n = 0; n < 16; n++) {
432
+ let r = H[n * 3], i = H[n * 3 + 1], a = H[n * 3 + 2];
433
+ for (let o = 0; o < 3; o++) {
434
+ let s = be;
435
+ t[o * 16 + n] = (s[o * 3] * r + s[o * 3 + 1] * i + s[o * 3 + 2] * a) * e;
436
+ }
437
+ }
438
+ return t;
439
+ }
440
+ function Ae(e) {
441
+ let t = 0, n = 0, r = 0;
442
+ for (let i = 0; i < 16; i++) t += e[i] * H[i * 3], n += e[i] * H[i * 3 + 1], r += e[i] * H[i * 3 + 2];
443
+ return [
444
+ t,
445
+ n,
446
+ r
447
+ ];
448
+ }
449
+ function je([e, t, n]) {
450
+ let r = be;
451
+ return [
452
+ r[0] * e + r[1] * t + r[2] * n,
453
+ r[3] * e + r[4] * t + r[5] * n,
454
+ r[6] * e + r[7] * t + r[8] * n
455
+ ];
456
+ }
457
+ function Me(e) {
458
+ return Math.max(0, .0460836582205 * e - .04586025928522);
459
+ }
460
+ function Ne([e, t, n]) {
461
+ let r = (e, t, n) => {
462
+ let r = Math.min(Math.max((n - e) / (t - e), 0), 1);
463
+ return r * r * (3 - 2 * r);
464
+ };
465
+ return Float64Array.from(we, (i) => {
466
+ let a = 1 - r(470, 520, i), o = r(560, 610, i);
467
+ return n * a + e * o + t * (1 - a - o);
468
+ });
469
+ }
470
+ function Pe({ airDensity: e = 1, turbidity: t = 2, ozone: n = 300, groundAlbedo: r = [
471
+ .3,
472
+ .3,
473
+ .3
474
+ ] } = {}) {
475
+ let i = Me(t) / de, a = n * xe / (15 * 1e3) * 1e3, o = new Float64Array(16), s = new Float64Array(16), c = new Float64Array(16), l = new Float64Array(16);
476
+ for (let t = 0; t < 16; t++) o[t] = Ee[t] * e, s[t] = Oe[t] * i, c[t] = s[t] * fe, l[t] = De[t] * a;
477
+ return {
478
+ rayleigh: o,
479
+ mieScattering: c,
480
+ mieExtinction: s,
481
+ ozone: l,
482
+ albedo: Ne(r)
483
+ };
484
+ }
485
+ var Fe = (e) => Math.exp(-e / 8), Ie = (e) => Math.exp(-e / de), Le = (e) => Math.max(0, 1 - Math.abs(e - 25) / 15);
486
+ function Re(e) {
487
+ let t = Math.max(e, 0);
488
+ return Math.sqrt(t * (2 * L + t)) / (L + t);
489
+ }
490
+ function ze(e, t, n = 1024) {
491
+ let r = Math.max(e, 0), i = L + r, a = i * t, o = r * (2 * L + r);
492
+ if (t < 0 && a * a >= o) return null;
493
+ let s = -a + Math.sqrt(a * a + (R - i) * (R + i)), c = 0, l = 0, u = 0;
494
+ for (let e = 0; e < n; e++) {
495
+ let t = s * (e / n) ** 2, r = s * ((e + 1) / n) ** 2, d = .5 * (t + r), f = (o + d * (d + 2 * a)) / (Math.sqrt(i * i + d * (d + 2 * a)) + L), p = r - t;
496
+ c += Fe(f) * p, l += Ie(f) * p, u += Le(f) * p;
497
+ }
498
+ return [
499
+ c,
500
+ l,
501
+ u
502
+ ];
503
+ }
504
+ function Be(e, t) {
505
+ let n = new Float64Array(16);
506
+ if (!t) return n;
507
+ let [r, i, a] = t;
508
+ for (let t = 0; t < 16; t++) n[t] = Math.exp(-(e.rayleigh[t] * r + e.mieExtinction[t] * i + e.ozone[t] * a));
509
+ return n;
510
+ }
511
+ function Ve(e) {
512
+ let t = Math.sin(e / 2);
513
+ return 4 * Math.PI * t * t;
514
+ }
515
+ function He({ direction: e, altitude: t, angularDiameter: n, strength: r = 1, coefficients: i }) {
516
+ let a = n / 2, o = Ve(a), s = Re(t), [c, l, u] = e, d = Math.sin(a), f = new Float64Array(16), p = 0, m = (e) => {
517
+ if (e < -s) return;
518
+ let n = Be(i, ze(t, e, 512));
519
+ for (let e = 0; e < 16; e++) f[e] += n[e];
520
+ p++;
521
+ };
522
+ if (l - d > .1) m(l);
523
+ else {
524
+ let e = Math.sqrt(Math.max(0, 1 - l * l));
525
+ for (let t = 0; t < 48; t++) {
526
+ let n = (t + .5) / 48, r = -1, i = 1;
527
+ for (let e = 0; e < 30; e++) {
528
+ let e = .5 * (r + i);
529
+ (Math.asin(e) + e * Math.sqrt(1 - e * e) + Math.PI / 2) / Math.PI < n ? r = e : i = e;
530
+ }
531
+ m(l + .5 * (r + i) * d * e);
532
+ }
533
+ }
534
+ let h = new Float64Array(16), g = l - d > .1 ? 1 : 48;
535
+ if (p > 0) for (let e = 0; e < 16; e++) h[e] = Te[e] * r / o * f[e] / p;
536
+ return {
537
+ radiance: je(Ae(h)).map((e) => Math.max(0, e * ge)),
538
+ visibleFraction: p / g,
539
+ solidAngle: o,
540
+ direction: [
541
+ c,
542
+ l,
543
+ u
544
+ ]
545
+ };
546
+ }
547
+ var Ue = (e) => 3 / (16 * Math.PI) * (1 + e * e);
548
+ function We(e, t = pe) {
549
+ let n = t * t;
550
+ return 3 / (8 * Math.PI) * (1 - n) / (2 + n) * (1 + e * e) / (1 + n - 2 * t * e) ** 1.5;
551
+ }
552
+ function Ge(e, t, n, r, i = 8) {
553
+ let a = n * r, o = e * t, s = new Float32Array(2 * o * a);
554
+ return [Ue, (e) => We(e)].forEach((c, l) => {
555
+ for (let u = 0; u < o; u++) {
556
+ let d = -1 + 2 * Math.floor(u / t) / (e - 1), f = u % t * Math.PI / (t - 1), p = Math.sqrt(Math.max(0, 1 - d * d)), m = (l * o + u) * a, h = 0;
557
+ for (let e = 0; e < a; e++) {
558
+ let t = Math.floor(e / r), a = e % r, o = 0;
559
+ for (let e = 0; e < i; e++) {
560
+ let s = -1 + 2 * (t + (e + .5) / i) / n, l = Math.sqrt(Math.max(0, 1 - s * s));
561
+ for (let e = 0; e < i; e++) {
562
+ let t = Math.PI * (a + (e + .5) / i) / r;
563
+ o += c(d * s + p * l * Math.cos(f - t)) + c(d * s + p * l * Math.cos(f + t));
564
+ }
565
+ }
566
+ s[m + e] = o, h += o;
567
+ }
568
+ for (let e = 0; e < a; e++) s[m + e] /= h;
569
+ }
570
+ }), s;
571
+ }
572
+ var U = Math.sqrt(R * R - L * L), W = R - L, G = Math.PI, K = [
573
+ 0,
574
+ 1,
575
+ 2,
576
+ 3
577
+ ], q = (e) => K.map(e);
578
+ function Ke(e) {
579
+ return {
580
+ r: _(e.mul(-1 / 8)),
581
+ m: _(e.mul(-1 / de)),
582
+ o: C(v(0), v(1).sub(u(e.sub(25)).div(15)))
583
+ };
584
+ }
585
+ function qe(e, t) {
586
+ return q((n) => e.rayleigh[n].mul(t.r).add(e.mieExtinction[n].mul(t.m)).add(e.ozone[n].mul(t.o)));
587
+ }
588
+ function Je(e, t) {
589
+ return q((n) => {
590
+ let r = e[n].mul(t), i = _(r.negate()), a = v(1).sub(i).div(C(r, 1e-12));
591
+ return {
592
+ weight: T(v(1).sub(r.mul(.5)), a, A(.001, r)).mul(t),
593
+ transmittance: i
594
+ };
595
+ });
596
+ }
597
+ function Ye(e, t, n, r, i, a = 1, o = 0) {
598
+ let s = m(r, 0, t - 1), c = m(i, 0, n - 1), l = y(s), u = y(c), d = s.sub(l), f = c.sub(u), p = N(l), h = N(u), g = w(p.add(1), N(t - 1)), _ = w(h.add(1), N(n - 1)), v = (n, r) => e.element(r.mul(t).add(n).mul(a).add(o));
599
+ return T(T(v(p, h), v(g, h), d), T(v(p, _), v(g, _), d), f);
600
+ }
601
+ function Xe(e, t) {
602
+ let n = e.add(L), r = k(C(e.mul(e.add(2 * L)), 0)), i = n.mul(t), a = i.negate().add(k(C(i.mul(i).add(U * U).sub(r.mul(r)), 0))), o = v(W).sub(e), s = r.add(U);
603
+ return {
604
+ x: a.sub(o).div(C(s.sub(o), 1e-6)).mul(255),
605
+ y: r.div(U).mul(63),
606
+ rho: r,
607
+ r: n
608
+ };
609
+ }
610
+ function J(e, t, n, r, i) {
611
+ let a = Xe(n, r), o = Ye(e, 256, 64, a.x, a.y).xyz, s = O(i.negate(), i, r.add(a.rho.div(a.r)));
612
+ return q((e) => _(t.rayleigh[e].mul(o.x).add(t.mieExtinction[e].mul(o.y)).add(t.ozone[e].mul(o.z)).negate()).mul(s));
613
+ }
614
+ var Ze = (e) => v(e).div(15).pow(2).mul(W), Qe = (e) => k(m(e.div(W), 0, 1)).mul(15), Y = -3 * G / 180, X = 15 * G / 180, Z = .5 + Math.atan((-G / 2 - Y) / X) / G, $e = .5 + Math.atan((G / 2 - Y) / X) / G, et = (e, t) => D(m(M(v(e).div(t - 1).mul($e - Z).add(Z - .5).mul(G)).mul(X).add(Y), -G / 2, G / 2)), tt = (e, t) => p(f(m(e, -1, 1)).sub(Y).div(X)).div(G).add(.5 - Z).div($e - Z).mul(t - 1), nt = 1e-30, Q = (e) => S(C(e, I(nt)));
615
+ function rt(e, t, n, r, i) {
616
+ let a = [
617
+ [m(tt(n, 64), 0, 63), 64],
618
+ [m(Qe(t), 0, 15), 16],
619
+ [m(r.add(1).mul(.5 * 15), 0, 15), 16],
620
+ [m(d(m(i, -1, 1)).mul(7 / G), 0, 7), 8]
621
+ ].map(([e, t]) => {
622
+ let n = y(e), r = e.sub(n).toVar(), i = N(n).toVar();
623
+ return {
624
+ t: r,
625
+ i0: i,
626
+ i1: w(i.add(1), N(t - 1)).toVar()
627
+ };
628
+ }), o = [
629
+ 128,
630
+ 8192,
631
+ 8,
632
+ 1
633
+ ], s = [];
634
+ for (let e = 0; e < 16; e++) {
635
+ let t = N(0);
636
+ a.forEach((n, r) => {
637
+ t = t.add((e >> r & 1 ? n.i1 : n.i0).mul(o[r]));
638
+ }), s.push(t.mul(8).toVar());
639
+ }
640
+ return Array.from({ length: 8 }, (t, n) => {
641
+ let r = s.map((t) => e.element(t.add(n)));
642
+ for (let e = 0; e < 4; e++) {
643
+ let t = [];
644
+ for (let n = 0; n < r.length; n += 2) t.push(T(r[n], r[n + 1], a[e].t));
645
+ r = t;
646
+ }
647
+ return _(r[0]);
648
+ });
649
+ }
650
+ function it(e, t) {
651
+ let n = tt(t, 128);
652
+ return q((t) => _(Ye(e, 128, 1, n, v(0), 4, t)));
653
+ }
654
+ function at(e, t) {
655
+ let n = e.add(L).toVar(), r = n.mul(t).toVar(), i = e.mul(e.add(2 * L)).toVar(), a = r.mul(r).sub(i), o = t.lessThan(0).and(a.greaterThanEqual(0)).toVar(), s = i.div(C(r.negate().add(k(C(a, 0))), 1e-9)), c = r.negate().add(k(C(r.mul(r).add(v(R).sub(n).mul(n.add(R))), 0)));
656
+ return {
657
+ r: n,
658
+ b: r,
659
+ cGround: i,
660
+ hitsGround: o,
661
+ tMax: o.select(s, c).toVar()
662
+ };
663
+ }
664
+ var ot = (e, t, n) => e.sub(t.mul(n)).div(C(k(v(1).sub(t.mul(t)).mul(v(1).sub(n.mul(n)))), 1e-4));
665
+ function st(e, t, n, r) {
666
+ let i = t.mul(t.add(e.b.mul(2))), a = k(e.r.mul(e.r).add(i));
667
+ return {
668
+ h: C(e.cGround.add(i).div(a.add(L)), 0),
669
+ muS: m(e.r.mul(n).add(t.mul(r)).div(a), -1, 1),
670
+ mu: m(e.b.add(t).div(a), -1, 1)
671
+ };
672
+ }
673
+ var ct = (e) => e.mul(e).add(1).mul(3 / (16 * G));
674
+ function lt(e, t) {
675
+ let n = t * t, r = 3 / (8 * G) * (1 - n) / (2 + n), i = C(v(1 + n).sub(e.mul(2 * t)), 1e-6);
676
+ return e.mul(e).add(1).mul(r).div(i.mul(k(i)));
677
+ }
678
+ function ut({ transmittance: e }, t = 256) {
679
+ let n = 256 * 64;
680
+ return o(() => {
681
+ let r = b;
682
+ s(r.greaterThanEqual(N(n)), () => {
683
+ l();
684
+ });
685
+ let i = v(r.mod(256)).div(255), a = v(r.div(256)).div(63).mul(U).toVar(), o = k(a.mul(a).add(L * L)).toVar(), u = v(R).sub(o), d = a.add(U), f = u.add(i.mul(d.sub(u))).toVar(), p = m(v(U * U).sub(a.mul(a)).sub(f.mul(f)).div(C(o.mul(f).mul(2), 1e-9)), -1, 1).toVar(), h = a.mul(a).toVar(), g = o.mul(p).mul(2).toVar(), _ = F(0).toVar();
686
+ c({
687
+ start: x(0),
688
+ end: x(t),
689
+ type: "int",
690
+ condition: "<"
691
+ }, ({ i: e }) => {
692
+ let n = v(e).div(t), r = v(e).add(1).div(t), i = f.mul(n.mul(n)), a = f.mul(r.mul(r)), s = i.add(a).mul(.5), c = s.mul(s.add(g)), l = Ke(C(h.add(c).div(k(o.mul(o).add(c)).add(L)), 0));
693
+ _.addAssign(F(l.r, l.m, l.o).mul(a.sub(i)));
694
+ }), e.element(r).assign(I(_, 0));
695
+ })().compute(n, [64]);
696
+ }
697
+ var dt = 4 * G / 128;
698
+ function ft(e, t, n, r) {
699
+ let i = v(e).add(v(n.div(r)).add(.5).div(r)).div(16).mul(2).sub(1), a = k(C(v(1).sub(i.mul(i)), 0)), o = v(t).add(v(n.mod(r)).add(.5).div(r)).mul(G / 8);
700
+ return F(a.mul(h(o)), i, a.mul(D(o)));
701
+ }
702
+ function pt(e, t) {
703
+ let n = tt(t, 64);
704
+ return q((t) => Ye(e, 64, 1, n, v(0), 4, t));
705
+ }
706
+ function mt(e, { first: t, out: n, cellSamples: r = 2, steps: i = 20 }) {
707
+ let { transmittance: a, transfer: u, multipleScattering: d, groundE: f, coefficients: p, sunSinRadius: h, mieG: _ } = e, y = 1024 * 128, S = r * r;
708
+ return o(() => {
709
+ let e = b;
710
+ s(e.greaterThanEqual(N(y)), () => {
711
+ l();
712
+ });
713
+ let o = e.mod(128), w = e.div(128), T = et(w.mod(64), 64).toVar(), E = C(Ze(w.div(64)), .001).toVar(), D = F(k(C(v(1).sub(T.mul(T)), 0)), T, 0).toVar(), O = q(() => I(0).toVar()), A = t ? q(() => I(0).toVar()) : null;
714
+ c({
715
+ start: x(0),
716
+ end: x(S),
717
+ type: "int",
718
+ condition: "<",
719
+ name: "ray"
720
+ }, ({ ray: e }) => {
721
+ let n = ft(o.div(8), o.mod(8), e, r).toVar(), l = g(n, D).toVar(), u = t ? ct(l).toVar() : null, y = t ? lt(l, _).toVar() : null, b = t ? null : Array.from({ length: 8 }, () => I(0).toVar()), S = at(E, n.y), w = q(() => I(1).toVar());
722
+ c({
723
+ start: x(0),
724
+ end: x(i),
725
+ type: "int",
726
+ condition: "<"
727
+ }, ({ i: e }) => {
728
+ let n = v(e).div(i), r = v(e).add(1).div(i), o = S.tMax.mul(n.mul(n)), c = S.tMax.mul(r.mul(r)).sub(o), f = st(S, o.add(c.mul(.5)), T, l), m = Ke(f.h), g = q((e) => p.rayleigh[e].mul(m.r)), _ = q((e) => p.mieScattering[e].mul(m.m)), x = Je(qe(p, m), c), C;
729
+ if (t) {
730
+ let e = J(a, p, f.h, f.muS, h);
731
+ C = q((t) => e[t].mul(g[t].mul(u).add(_[t].mul(y))));
732
+ } else s(e.mod(2).equal(0), () => {
733
+ let e = rt(d, f.h, f.muS, f.mu, ot(l, f.mu, f.muS));
734
+ for (let t = 0; t < 8; t++) b[t].assign(e[t]);
735
+ }), C = q((e) => g[e].mul(b[e]).add(_[e].mul(b[4 + e])));
736
+ for (let e of K) O[e].addAssign(w[e].mul(C[e]).mul(x[e].weight)), A && A[e].addAssign(w[e].mul(g[e].add(_[e])).mul(x[e].weight)), w[e].mulAssign(x[e].transmittance);
737
+ }), s(S.hitsGround, () => {
738
+ let e = m(S.r.mul(T).add(S.tMax.mul(l)).div(L), -1, 1), n;
739
+ if (t) {
740
+ let t = J(a, p, v(0), e, h);
741
+ n = q((n) => t[n].mul(C(e, 0)));
742
+ } else n = pt(f, e);
743
+ for (let e of K) O[e].addAssign(w[e].mul(n[e]).mul(p.albedo[e]).mul(1 / G));
744
+ });
745
+ });
746
+ for (let t of K) n.element(e.mul(4).add(t)).assign(O[t].div(S)), A && u.element(e.mul(4).add(t)).assign(A[t].div(S));
747
+ })().compute(y, [64]);
748
+ }
749
+ function ht(e, { incoming: t, stage: n }) {
750
+ let { transfer: r, phaseCells: i, multipleScattering: a, psiSum: u, groundE: d } = e, f = 1024 * 128, p = n === "last";
751
+ return o(() => {
752
+ let e = b;
753
+ s(e.greaterThanEqual(N(f)), () => {
754
+ l();
755
+ });
756
+ let o = e.mod(128), m = e.div(128), h = m.mul(128), g = null;
757
+ if (p) {
758
+ let e = q(() => I(0).toVar());
759
+ c({
760
+ start: x(0),
761
+ end: x(128),
762
+ type: "int",
763
+ condition: "<"
764
+ }, ({ i: t }) => {
765
+ for (let n of K) e[n].addAssign(r.element(h.add(N(t)).mul(4).add(n)));
766
+ }), g = q((t) => {
767
+ let n = w(e[t].div(128), .95);
768
+ return n.div(v(1).sub(n)).toVar();
769
+ });
770
+ }
771
+ for (let r = 0; r < 2; r++) {
772
+ let s = q(() => I(0).toVar());
773
+ c({
774
+ start: x(0),
775
+ end: x(32),
776
+ type: "int",
777
+ condition: "<"
778
+ }, ({ i: e }) => {
779
+ let n = i.element(N(r * 128).add(o).mul(32).add(N(e))).toVar();
780
+ for (let r = 0; r < 4; r++) {
781
+ let i = h.add(N(e).mul(4).add(r)).mul(4), a = n.element(x(r));
782
+ for (let e of K) s[e].addAssign(t.element(i.add(e)).mul(a));
783
+ }
784
+ });
785
+ for (let t of K) {
786
+ let i = e.mul(8).add(r * 4 + t);
787
+ n === "first" ? (u.element(i).assign(s[t]), a.element(i).assign(Q(s[t]))) : n === "middle" ? (u.element(i).addAssign(s[t]), a.element(i).assign(Q(s[t]))) : a.element(i).assign(Q(u.element(i).add(s[t].mul(g[t].add(1)))));
788
+ }
789
+ }
790
+ p || s(m.lessThan(N(64)).and(o.equal(N(0))), () => {
791
+ let e = q(() => I(0).toVar());
792
+ c({
793
+ start: x(128 / 2),
794
+ end: x(128),
795
+ type: "int",
796
+ condition: "<"
797
+ }, ({ i: n }) => {
798
+ let r = v(N(n).div(8)).add(.5).div(16).mul(2).sub(1);
799
+ for (let i of K) e[i].addAssign(t.element(h.add(N(n)).mul(4).add(i)).mul(r));
800
+ });
801
+ for (let t of K) d.element(m.mul(4).add(t)).assign(e[t].mul(dt));
802
+ });
803
+ })().compute(f, [64]);
804
+ }
805
+ var gt = 4;
806
+ function _t({ transmittance: e, multipleScattering: t, coefficients: n, sunSinRadius: r, mieG: i }, a, o, l, u) {
807
+ let d = q(() => I(0).toVar()), f = q(() => I(1).toVar()), p = t ? Array.from({ length: 8 }, () => I(0).toVar()) : null, m = ct(l).toVar(), h = lt(l, i).toVar(), g = a.tMax;
808
+ return c({
809
+ start: x(0),
810
+ end: x(u),
811
+ type: "int",
812
+ condition: "<"
813
+ }, ({ i }) => {
814
+ let c = v(i).div(u), _ = v(i).add(1).div(u), y = g.mul(c.mul(c)), b = g.mul(_.mul(_)).sub(y), x = st(a, y.add(b.mul(.5)), o, l), S = Ke(x.h), C = q((e) => n.rayleigh[e].mul(S.r)), w = q((e) => n.mieScattering[e].mul(S.m)), T = J(e, n, x.h, x.muS, r), E = Je(qe(n, S), b);
815
+ p && s(i.mod(gt).equal(0), () => {
816
+ let e = rt(t, x.h, x.muS, x.mu, ot(l, x.mu, x.muS));
817
+ for (let t = 0; t < 8; t++) p[t].assign(e[t]);
818
+ });
819
+ for (let e of K) {
820
+ let t = T[e].mul(C[e].mul(m).add(w[e].mul(h)));
821
+ p && (t = t.add(C[e].mul(p[e])).add(w[e].mul(p[4 + e]))), d[e].addAssign(f[e].mul(t).mul(E[e].weight)), f[e].mulAssign(E[e].transmittance);
822
+ }
823
+ }), {
824
+ L: d,
825
+ throughput: f
826
+ };
827
+ }
828
+ function vt(e, { sqrtDirections: t = 12, steps: n = 32 } = {}) {
829
+ let { irradiance: r } = e, i = t * t, a = v(.001);
830
+ return o(() => {
831
+ let o = b;
832
+ s(o.greaterThanEqual(N(128)), () => {
833
+ l();
834
+ });
835
+ let u = et(o, 128).toVar(), d = F(k(C(v(1).sub(u.mul(u)), 0)), u, 0).toVar(), f = q(() => I(0).toVar());
836
+ c({
837
+ start: x(0),
838
+ end: x(i),
839
+ type: "int",
840
+ condition: "<",
841
+ name: "dirIndex"
842
+ }, ({ dirIndex: r }) => {
843
+ let i = v(r.div(t)).add(.5).div(t), o = v(r.mod(t)).add(.5).div(t), s = k(i), c = o.mul(2 * G), l = F(s.mul(h(c)), k(C(v(1).sub(i), 0)), s.mul(D(c))).toVar(), { L: p } = _t(e, at(a, l.y), u, g(l, d), n);
844
+ for (let e of K) f[e].addAssign(p[e]);
845
+ });
846
+ for (let e of K) r.element(o.mul(4).add(e)).assign(Q(f[e].mul(G / i)));
847
+ })().compute(128, [64]);
848
+ }
849
+ var yt = (e) => v(e).div(255).pow(2).mul(G);
850
+ function bt(e, { width: t, height: n, steps: r = 40, multipleScattering: i = !0 }) {
851
+ let { sky: a, skyRows: c, irradiance: d, coefficients: f, rgb: _, sunDirection: x, altitude: S, sunSinRadius: E, transmittance: O } = e, A = i ? e : {
852
+ ...e,
853
+ multipleScattering: null
854
+ }, j = 256 * n;
855
+ return [o(() => {
856
+ let e = b;
857
+ s(e.greaterThanEqual(N(j)), () => {
858
+ l();
859
+ });
860
+ let t = v(1).sub(v(e.div(256)).add(.5).div(n)).mul(G), i = h(t).toVar(), a = C(S, .001).toVar(), o = x.y.toVar(), u = D(t).mul(h(yt(e.mod(256)))).mul(k(C(v(1).sub(o.mul(o)), 0))).add(i.mul(o)).toVar(), p = at(a, i), { L: y, throughput: w } = _t(A, p, o, u, r);
861
+ s(p.hitsGround, () => {
862
+ let e = m(p.r.mul(o).add(p.tMax.mul(u)).div(L), -1, 1).toVar(), t = J(O, f, v(0), e, E), n = it(d, e);
863
+ for (let r of K) y[r].addAssign(w[r].mul(f.albedo[r]).mul(1 / G).mul(t[r].mul(C(e, 0)).add(n[r])));
864
+ });
865
+ let T = q((e) => y[e].mul(f.solar[e])), M = (e) => T.reduce((t, n, r) => t.add(g(n, _[e * 4 + r])), v(0));
866
+ c.element(e).assign(I(C(F(M(0), M(1), M(2)), F(0)), 1));
867
+ })().compute(j, [64]), o(() => {
868
+ let e = b;
869
+ s(e.greaterThanEqual(N(t * n)), () => {
870
+ l();
871
+ });
872
+ let r = v(e.mod(t)).add(.5).div(t).sub(.5).mul(2 * G).sub(p(x.z, x.x)), i = k(u(p(D(r), h(r))).div(G)).mul(255).toVar(), o = w(y(i), 254).toVar(), d = e.div(t).mul(256).add(N(o)).toVar();
873
+ a.element(e).assign(T(c.element(d), c.element(d.add(1)), i.sub(o)));
874
+ })().compute(t * n, [64])];
875
+ }
876
+ //#endregion
877
+ //#region src/TSL/EnvironmentCDF.js
878
+ var $ = (e) => Math.ceil((e + 1) * 16 / 256) * 64;
879
+ function xt(e, t, n) {
880
+ let r = x(0).toVar(), i = x(e - 1).toVar();
881
+ return c({
882
+ start: x(0),
883
+ end: x(Math.ceil(Math.log2(e)) + 1),
884
+ type: "int",
885
+ condition: "<",
886
+ name: "step"
887
+ }, () => {
888
+ s(r.lessThan(i), () => {
889
+ let e = r.add(i).div(2).toVar();
890
+ s(t(e).lessThanEqual(n), () => {
891
+ r.assign(e.add(1));
892
+ }).Else(() => {
893
+ i.assign(e);
894
+ });
895
+ });
896
+ }), r;
897
+ }
898
+ function St({ pixels: e, rows: n, prefix: r, stats: i, cdf: a, width: u, height: d }) {
899
+ let f = $(u), p = (e, t, n) => N(t).mul(N(f)).add(N(e).mul(N(4))).add(N(n)), m = (e) => D(v(e).add(.5).mul(Math.PI / d)), h = (n, r, i) => g(e.element(n.mul(u).add(r)).xyz, t).mul(i), _ = () => s(b.greaterThan(N(0)), () => {
900
+ l();
901
+ }), y = o(() => {
902
+ let e = b;
903
+ s(e.greaterThanEqual(N(d)), () => {
904
+ l();
905
+ });
906
+ let t = m(e).toVar(), r = v(0).toVar();
907
+ c({
908
+ start: x(0),
909
+ end: x(u),
910
+ type: "int",
911
+ condition: "<"
912
+ }, ({ i: n }) => {
913
+ r.addAssign(h(e, N(n), t));
914
+ }), n.element(e).assign(I(r, 0, 0, 0));
915
+ })().compute(d, [64]), S = o(() => {
916
+ _();
917
+ let e = v(0).toVar();
918
+ c({
919
+ start: x(0),
920
+ end: x(d),
921
+ type: "int",
922
+ condition: "<"
923
+ }, ({ i: t }) => {
924
+ e.addAssign(n.element(t).x);
925
+ }), i.element(0).assign(I(e, e.div(u * d), 0, 0));
926
+ })().compute(1, [1]), w = o(() => {
927
+ let e = b;
928
+ s(e.greaterThanEqual(N(d)), () => {
929
+ l();
930
+ });
931
+ let t = m(e).toVar(), a = i.element(0).y.toVar(), o = v(0).toVar(), f = v(0).toVar();
932
+ c({
933
+ start: x(0),
934
+ end: x(u),
935
+ type: "int",
936
+ condition: "<"
937
+ }, ({ i: n }) => {
938
+ let i = h(e, N(n), t).toVar();
939
+ o.addAssign(i), f.addAssign(C(i.sub(a), 0)), r.element(e.mul(u).add(N(n))).assign(ee(o, f));
940
+ }), n.element(e).assign(I(o, f, 0, 0));
941
+ })().compute(d, [64]), T = o(() => {
942
+ _();
943
+ let e = v(0).toVar();
944
+ c({
945
+ start: x(0),
946
+ end: x(d),
947
+ type: "int",
948
+ condition: "<"
949
+ }, ({ i: t }) => {
950
+ e.addAssign(n.element(t).y);
951
+ });
952
+ let t = i.element(0).toVar();
953
+ i.element(1).assign(E(e.greaterThan(0), I(e, t.y, 1, 0), I(t.x, 0, 0, 0)));
954
+ })().compute(1, [1]), O = () => i.element(0).x.mul(1e-4 / (u * d)), k = o(() => {
955
+ let e = b;
956
+ s(e.greaterThanEqual(N(d)), () => {
957
+ l();
958
+ });
959
+ let t = O().toVar(), o = i.element(1).z.greaterThan(0).toVar(), f = n.element(e).toVar(), m = E(o, f.y, f.x).add(t.mul(u)).toVar(), h = v(0).toVar();
960
+ c({
961
+ start: x(0),
962
+ end: x(u),
963
+ type: "int",
964
+ condition: "<"
965
+ }, ({ i: n }) => {
966
+ let i = r.element(e.mul(u).add(N(n))).toVar(), s = E(o, i.y, i.x).add(t.mul(v(n).add(1))).div(C(m, 1e-30)), c = E(m.greaterThan(0), E(n.equal(x(u - 1)), v(1), s), v(0)).toVar();
967
+ a.element(p(n, e, 0)).assign(c), a.element(p(n, e, 1)).assign(h), h.assign(c);
968
+ });
969
+ })().compute(d, [64]), A = o(() => {
970
+ _();
971
+ let e = O().mul(u).toVar(), t = i.element(1).z.greaterThan(0).toVar(), r = (r) => {
972
+ let i = n.element(r);
973
+ return E(t, i.y, i.x).add(e);
974
+ }, o = v(0).toVar();
975
+ c({
976
+ start: x(0),
977
+ end: x(d),
978
+ type: "int",
979
+ condition: "<"
980
+ }, ({ i: e }) => {
981
+ o.addAssign(r(e));
982
+ });
983
+ let s = v(0).toVar(), l = v(0).toVar();
984
+ c({
985
+ start: x(0),
986
+ end: x(d),
987
+ type: "int",
988
+ condition: "<"
989
+ }, ({ i: e }) => {
990
+ s.addAssign(r(e));
991
+ let t = E(e.equal(x(d - 1)), v(1), s.div(C(o, 1e-30))), n = E(o.greaterThan(0), t, v(0)).toVar();
992
+ a.element(p(u, e, 0)).assign(n), a.element(p(u, e, 1)).assign(l), l.assign(n);
993
+ });
994
+ })().compute(1, [1]), j = 2 * u * d;
995
+ return [
996
+ y,
997
+ S,
998
+ w,
999
+ T,
1000
+ k,
1001
+ A,
1002
+ o(() => {
1003
+ let e = b;
1004
+ s(e.greaterThanEqual(N(j + 2 * d)), () => {
1005
+ l();
1006
+ }), s(e.lessThan(N(j)), () => {
1007
+ let t = e.mod(2 * u).toVar(), n = e.div(2 * u).toVar(), r = xt(u, (e) => a.element(p(e, n, 0)), v(t).div(2 * u));
1008
+ a.element(p(t.shiftRight(N(1)), n, N(2).add(t.bitAnd(N(1))))).assign(v(r));
1009
+ }).Else(() => {
1010
+ let t = e.sub(N(j)).toVar(), n = xt(d, (e) => a.element(p(u, e, 0)), v(t).div(2 * d));
1011
+ a.element(p(u, t.shiftRight(N(1)), N(2).add(t.bitAnd(N(1))))).assign(v(n));
1012
+ });
1013
+ })().compute(j + 2 * d, [64])
1014
+ ];
1015
+ }
1016
+ //#endregion
1017
+ //#region src/Processor/PhysicalSky.js
1018
+ var Ct = /* @__PURE__ */ e({ PhysicalSky: () => Tt });
1019
+ function wt(e, t, n) {
1020
+ let r = new ne(null, e, t, n, ie);
1021
+ return r.source.dataReady = !1, r.needsUpdate = !0, r._isPhysicalSky = !0, r;
1022
+ }
1023
+ var Tt = class {
1024
+ constructor(e = 1024, t = 512, n = {}) {
1025
+ this.width = e, this.height = t, this._quality = n, this.lastRenderTime = 0, this._texture = wt(e, t, se), this._texture.mapping = re, this._texture.colorSpace = oe, this._texture.minFilter = ae, this._texture.magFilter = ae, this._texture.wrapS = ce, this._texture.wrapT = te, this._texture.generateMipmaps = !1, this._cdfTexture = wt(e + 1, t, se), this._rec709Weights = ke(ge), this._attrs = null, this._kernels = null, this._airKey = null, this._transmittanceBuilt = !1;
1026
+ }
1027
+ _init() {
1028
+ let e = (e) => Array.from({ length: e }, () => P(new ue())), t = e(24);
1029
+ this._uniforms = {
1030
+ coefficient: t,
1031
+ rgb: e(12),
1032
+ sunDirection: P(new le(0, 1, 0)),
1033
+ altitude: P(.05),
1034
+ sunSinRadius: P(.0046)
1035
+ };
1036
+ let n = (e) => r(e, 4);
1037
+ this._attrs = {
1038
+ transmittance: n(256 * 64),
1039
+ incomingA: n(1024 * 128 * 4),
1040
+ incomingB: n(1024 * 128 * 4),
1041
+ transfer: n(1024 * 128 * 4),
1042
+ multipleScattering: n(1024 * 128 * 8),
1043
+ psiSum: n(1024 * 128 * 8),
1044
+ groundE: n(256),
1045
+ irradiance: n(512),
1046
+ sky: n(this.width * this.height),
1047
+ skyRows: n(256 * this.height),
1048
+ cdfRows: n(this.height),
1049
+ cdfPrefix: r(this.width * this.height, 2),
1050
+ cdfStats: n(2),
1051
+ cdf: r($(this.width) * this.height, 1),
1052
+ phaseCells: new a(Ge(16, 8, 16, 8), 4)
1053
+ };
1054
+ let i = (e, t = "vec4") => j(this._attrs[e], t, this._attrs[e].count), o = (e) => t.slice(e * 4, e * 4 + 4), s = {
1055
+ transmittance: i("transmittance"),
1056
+ transfer: i("transfer"),
1057
+ psiSum: i("psiSum"),
1058
+ groundE: i("groundE"),
1059
+ phaseCells: i("phaseCells"),
1060
+ multipleScattering: i("multipleScattering"),
1061
+ irradiance: i("irradiance"),
1062
+ sky: i("sky"),
1063
+ skyRows: i("skyRows"),
1064
+ coefficients: {
1065
+ rayleigh: o(0),
1066
+ mieScattering: o(1),
1067
+ mieExtinction: o(2),
1068
+ ozone: o(3),
1069
+ solar: o(4),
1070
+ albedo: o(5)
1071
+ },
1072
+ rgb: this._uniforms.rgb,
1073
+ sunDirection: this._uniforms.sunDirection,
1074
+ altitude: this._uniforms.altitude,
1075
+ sunSinRadius: this._uniforms.sunSinRadius,
1076
+ mieG: pe
1077
+ }, c = this._quality, l = i("incomingA"), u = i("incomingB");
1078
+ this._kernels = {
1079
+ transmittance: ut(s),
1080
+ air: [
1081
+ mt(s, {
1082
+ first: !0,
1083
+ out: l,
1084
+ ...c.incoming
1085
+ }),
1086
+ ht(s, {
1087
+ incoming: l,
1088
+ stage: "first"
1089
+ }),
1090
+ mt(s, {
1091
+ first: !1,
1092
+ out: u,
1093
+ ...c.incoming
1094
+ }),
1095
+ ht(s, {
1096
+ incoming: u,
1097
+ stage: "middle"
1098
+ }),
1099
+ mt(s, {
1100
+ first: !1,
1101
+ out: l,
1102
+ ...c.incoming
1103
+ }),
1104
+ ht(s, {
1105
+ incoming: l,
1106
+ stage: "last"
1107
+ }),
1108
+ vt(s, c.irradiance)
1109
+ ],
1110
+ sky: bt(s, {
1111
+ width: this.width,
1112
+ height: this.height,
1113
+ ...c.sky
1114
+ }),
1115
+ cdf: St({
1116
+ pixels: s.sky,
1117
+ rows: i("cdfRows"),
1118
+ prefix: i("cdfPrefix", "vec2"),
1119
+ stats: i("cdfStats"),
1120
+ cdf: i("cdf", "float"),
1121
+ width: this.width,
1122
+ height: this.height
1123
+ })
1124
+ }, this._setSpectrum(4, Te);
1125
+ }
1126
+ _setColorWeights() {
1127
+ let e = this._rec709Weights, t = i(), n = [
1128
+ 0,
1129
+ 0,
1130
+ 0,
1131
+ 0
1132
+ ];
1133
+ for (let r = 0; r < 3; r++) for (let i = 0; i < 4; i++) {
1134
+ for (let a = 0; a < 4; a++) {
1135
+ let o = i * 4 + a;
1136
+ n[a] = t ? t[r * 3] * e[o] + t[r * 3 + 1] * e[16 + o] + t[r * 3 + 2] * e[32 + o] : e[r * 16 + o];
1137
+ }
1138
+ this._uniforms.rgb[r * 4 + i].value.fromArray(n);
1139
+ }
1140
+ }
1141
+ _copyToTextures(e) {
1142
+ let t = e.backend;
1143
+ e.initTexture(this._texture), e.initTexture(this._cdfTexture);
1144
+ let n = t.device.createCommandEncoder({ label: "PhysicalSky" });
1145
+ n.copyBufferToTexture({
1146
+ buffer: t.get(this._attrs.sky).buffer,
1147
+ bytesPerRow: this.width * 16,
1148
+ rowsPerImage: this.height
1149
+ }, { texture: t.get(this._texture).texture }, [this.width, this.height]), n.copyBufferToTexture({
1150
+ buffer: t.get(this._attrs.cdf).buffer,
1151
+ bytesPerRow: $(this.width) * 4,
1152
+ rowsPerImage: this.height
1153
+ }, { texture: t.get(this._cdfTexture).texture }, [this.width + 1, this.height]), t.device.queue.submit([n.finish()]);
1154
+ }
1155
+ _setSpectrum(e, t) {
1156
+ for (let n = 0; n < 4; n++) this._uniforms.coefficient[e * 4 + n].value.set(t[n * 4], t[n * 4 + 1], t[n * 4 + 2], t[n * 4 + 3]);
1157
+ }
1158
+ bake(e, t) {
1159
+ let n = performance.now();
1160
+ this._kernels || this._init();
1161
+ let r = {
1162
+ airDensity: t.airDensity,
1163
+ turbidity: t.turbidity,
1164
+ ozone: t.ozone,
1165
+ groundAlbedo: [...t.groundAlbedo]
1166
+ }, i = Pe(r), a = Math.max(t.altitude, 1) / 1e3, o = t.sunAngularDiameter / 2, s = this._uniforms;
1167
+ s.sunDirection.value.fromArray(t.sunDirection).normalize(), s.altitude.value = a, s.sunSinRadius.value = Math.sin(o), this._setColorWeights();
1168
+ let c = [];
1169
+ this._transmittanceBuilt ||= (c.push(this._kernels.transmittance), !0);
1170
+ let l = JSON.stringify([r, s.sunSinRadius.value]);
1171
+ l !== this._airKey && (this._setSpectrum(0, i.rayleigh), this._setSpectrum(1, i.mieScattering), this._setSpectrum(2, i.mieExtinction), this._setSpectrum(3, i.ozone), this._setSpectrum(5, i.albedo), c.push(...this._kernels.air), this._airKey = l), c.push(...this._kernels.sky, ...this._kernels.cdf), e.compute(c), this._copyToTextures(e);
1172
+ let u = e.getArrayBufferAsync(this._attrs.cdfStats).then((e) => {
1173
+ let t = new Float32Array(e);
1174
+ return {
1175
+ totalSum: t[4],
1176
+ radianceIntegral: 2 * Math.PI * Math.PI * t[0] / (this.width * this.height)
1177
+ };
1178
+ }), d = He({
1179
+ direction: [
1180
+ s.sunDirection.value.x,
1181
+ s.sunDirection.value.y,
1182
+ s.sunDirection.value.z
1183
+ ],
1184
+ altitude: a,
1185
+ angularDiameter: t.sunAngularDiameter,
1186
+ strength: t.sunStrength ?? 1,
1187
+ coefficients: i
1188
+ });
1189
+ return d.cosHalfAngle = Math.cos(o), d.sinHalfAngle = Math.sin(o), d.horizonSin = Re(a), this.lastRenderTime = performance.now() - n, {
1190
+ texture: this._texture,
1191
+ cdfTexture: this._cdfTexture,
1192
+ sun: d,
1193
+ stats: u
1194
+ };
1195
+ }
1196
+ async readBack(e) {
1197
+ let [t, n, r] = await Promise.all([
1198
+ "sky",
1199
+ "cdf",
1200
+ "cdfStats"
1201
+ ].map((t) => e.getArrayBufferAsync(this._attrs[t])));
1202
+ return {
1203
+ pixels: new Float32Array(t),
1204
+ cdf: new Float32Array(n),
1205
+ cdfStride: $(this.width),
1206
+ stats: new Float32Array(r)
1207
+ };
1208
+ }
1209
+ getLastRenderTime() {
1210
+ return this.lastRenderTime;
1211
+ }
1212
+ dispose(e = null) {
1213
+ for (let e of Object.values(this._kernels ?? {}).flat()) e.dispose();
1214
+ for (let t of Object.values(this._attrs ?? {})) n(e, t);
1215
+ this._kernels = null, this._attrs = null, this._texture.dispose(), this._cdfTexture.dispose();
1216
+ }
1217
+ };
1218
+ //#endregion
1219
+ export { Ct as n, Tt as t };