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