rayzee 10.0.0 → 11.0.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.
- package/README.md +252 -44
- package/dist/ActiveColor-YvuQq44O.js +13 -0
- package/dist/ArchiveImporter-BRQvLggb.js +4300 -0
- package/dist/AssetConfig-DSEntE65.js +30 -0
- package/dist/BidirectionalIntegrator-9lZQxFVH.js +934 -0
- package/dist/BufferLayout-D_IBo2ci.js +150 -0
- package/dist/ColorManagement-oeEk7oSu.js +1488 -0
- package/dist/EngineEvents-Ci8dVWCP.js +73 -0
- package/dist/EngineIssues-CIZnXHsF.js +72 -0
- package/dist/FileFormats-sPGJeCRc.js +102 -0
- package/dist/Logger-dDDGj9Av.js +97 -0
- package/dist/{NeuralRetouch-CYgkQY8Z.js → NeuralRetouch-BCXylThH.js} +8 -6
- package/dist/{NeuralSuperRes-PkgDLQcD.js → NeuralSuperRes-sZAeS142.js} +55 -120
- package/dist/PathTracer-CQPW06Mm.js +29971 -0
- package/dist/PhysicalSky-BvqCw_dy.js +1219 -0
- package/dist/RayzeeRenderer-COpwotpU.js +3551 -0
- package/dist/SolarLimb-CPaeZVwz.js +721 -0
- package/dist/ToneMapGPU-CjU3osDd.js +177 -0
- package/dist/ViewTransforms-CYN7bq2w.js +255 -0
- package/dist/WorkingMatrix-C6y233hT.js +27 -0
- package/dist/ZipReader-gDSWr0I5.js +98 -0
- package/dist/addons/archives.es.js +3 -0
- package/dist/addons/bidirectional.es.js +2 -0
- package/dist/addons/color.es.js +3 -0
- package/dist/addons/formats.es.js +2 -0
- package/dist/addons/physical-sky.es.js +2 -0
- package/dist/addons/storage.es.js +3 -0
- package/dist/archiveFormats-BZw7TiDp.js +75 -0
- package/dist/identity-DrQsGT2o.js +39 -0
- package/dist/openStorage-DwcBRUj7.js +820 -0
- package/dist/rayzee-core.es.js +12 -0
- package/dist/rayzee.es.js +2551 -44024
- package/dist/rayzee.umd.js +528 -487
- package/dist/sceneCachePolicy-BSSsKY98.js +443 -0
- package/dist/shared-BGBcSxBQ.js +17 -0
- package/package.json +23 -2
- package/src/Color/ActiveColor.js +34 -0
- package/src/Color/BasicColor.js +147 -0
- package/src/Color/ColorManagement.js +7 -31
- package/src/Color/ViewTransforms.js +5 -1
- package/src/EngineDefaults.js +62 -1029
- package/src/EngineEvents.js +2 -0
- package/src/EngineIssues.js +2 -0
- package/src/Headless.js +6 -5
- package/src/Passes/AIUpscaler.js +58 -141
- package/src/Passes/OIDNDenoiser.js +92 -65
- package/src/Passes/OIDNTemporalHistory.js +1 -1
- package/src/PathTracerApp.js +620 -4026
- package/src/Pipeline/PipelineContext.js +0 -4
- package/src/Platform.js +36 -0
- package/src/Processor/ArchiveCache.js +1 -1
- package/src/Processor/ArchiveImporter.js +1259 -0
- package/src/Processor/AssetLoader.js +327 -1763
- package/src/Processor/AtmosphereModel.js +1 -2
- package/src/Processor/BVHBuilder.js +14 -126
- package/src/Processor/BVHLeafFold.js +4 -6
- package/src/Processor/BVHRefitter.js +67 -46
- package/src/Processor/BufferLayout.js +291 -0
- package/src/Processor/EmissiveTriangleBuilder.js +1 -1
- package/src/Processor/EnvironmentExactTable.js +187 -0
- package/src/Processor/EquirectHDRInfo.js +30 -223
- package/src/Processor/FileFormats.js +116 -0
- package/src/Processor/GLTFDecoders.js +85 -0
- package/src/Processor/GLTFDiffuseTransmission.js +63 -0
- package/src/Processor/GeometryExtractor.js +15 -5
- package/src/Processor/HostMemory.js +7 -1
- package/src/Processor/IESParser.js +47 -35
- package/src/Processor/InstanceTable.js +1 -1
- package/src/Processor/KernelManager.js +35 -2
- package/src/Processor/MaterialPacking.js +10 -8
- package/src/Processor/PBRT/PBRTMaterials.js +129 -41
- package/src/Processor/PBRT/PBRTParser.js +30 -17
- package/src/Processor/PBRT/PBRTSceneBuilder.js +548 -37
- package/src/Processor/PBRT/PBRTTextureBake.js +154 -0
- package/src/Processor/PBRT/PFM.js +59 -0
- package/src/Processor/PackedRayBuffer.js +116 -9
- package/src/Processor/ParallelBVHBuilder.js +3 -6
- package/src/Processor/PhysicalSky.js +5 -4
- package/src/Processor/PlatformImageLoader.js +50 -6
- package/src/Processor/QueueManager.js +39 -5
- package/src/Processor/ReinsertionOptimizer.js +2 -2
- package/src/Processor/SceneProcessor.js +53 -62
- package/src/Processor/ShaderBuilder.js +6 -16
- package/src/Processor/SimpleSky.js +1 -62
- package/src/Processor/SolarLimb.js +3 -0
- package/src/Processor/SplitBLAS.js +1 -1
- package/src/Processor/StorageTexturePool.js +22 -1
- package/src/Processor/TLASBuilder.js +1 -3
- package/src/Processor/TextureBuckets.js +237 -0
- package/src/Processor/TextureCreator.js +181 -8
- package/src/Processor/ToneMapGPU.js +64 -15
- package/src/Processor/Workers/BVHRefitWorker.js +5 -2
- package/src/Processor/Workers/BVHSubtreeWorker.js +1 -34
- package/src/Processor/Workers/BVHWorker.js +5 -18
- package/src/Processor/Workers/CDFWorker.js +6 -183
- package/src/Processor/Workers/TexturesWorker.js +103 -18
- package/src/Processor/archiveFormats.js +7 -0
- package/src/Processor/utils.js +2 -1
- package/src/RayzeeRenderer.js +3899 -0
- package/src/RenderSettings.js +68 -62
- package/src/Stages/ASVGF.js +13 -14
- package/src/Stages/AutoExposure.js +17 -17
- package/src/Stages/BilateralFilter.js +2 -1
- package/src/Stages/Compositor.js +8 -23
- package/src/Stages/DenoiserSettings.js +182 -0
- package/src/Stages/EdgeFilter.js +2 -1
- package/src/Stages/MotionVector.js +1 -1
- package/src/Stages/NRD.js +11 -5
- package/src/Stages/NormalDepth.js +12 -8
- package/src/Stages/PathTracer.js +338 -43
- package/src/Stages/PathTracerStage.js +69 -66
- package/src/Stages/Variance.js +1 -1
- package/src/Storage/BLASCache.js +1 -1
- package/src/Storage/CDFCache.js +18 -17
- package/src/Storage/DownloadCache.js +1 -1
- package/src/Storage/SceneGraphCodec.js +46 -3
- package/src/Storage/SpillStore.js +1 -1
- package/src/Storage/StorageManager.js +45 -9
- package/src/Storage/areas.js +4 -0
- package/src/TSL/BVHTraversal.js +50 -25
- package/src/TSL/Bidirectional.js +204 -0
- package/src/TSL/BidirectionalLamps.js +132 -0
- package/src/TSL/Clearcoat.js +15 -6
- package/src/TSL/Common.js +20 -15
- package/src/TSL/ConnectKernel.js +147 -0
- package/src/TSL/Debugger.js +1 -1
- package/src/TSL/Displacement.js +4 -3
- package/src/TSL/EmissiveSampling.js +65 -18
- package/src/TSL/Environment.js +77 -106
- package/src/TSL/EnvironmentCDF.js +85 -39
- package/src/TSL/ExtendKernel.js +8 -3
- package/src/TSL/FinalWriteKernel.js +4 -4
- package/src/TSL/GenerateKernel.js +18 -4
- package/src/TSL/HitFacet.js +35 -5
- package/src/TSL/LightBVHSampling.js +40 -9
- package/src/TSL/LightGenerateKernel.js +293 -0
- package/src/TSL/LightGuide.js +198 -0
- package/src/TSL/LightSplatKernel.js +165 -0
- package/src/TSL/LightVisibility.js +111 -0
- package/src/TSL/LightsCore.js +13 -38
- package/src/TSL/LightsDirect.js +28 -29
- package/src/TSL/LightsIndirect.js +3 -1
- package/src/TSL/LightsSampling.js +239 -51
- package/src/TSL/MaterialEvaluation.js +113 -31
- package/src/TSL/MaterialProperties.js +44 -17
- package/src/TSL/MaterialTransmission.js +52 -47
- package/src/TSL/MergeKernel.js +218 -0
- package/src/TSL/PathTracerCore.js +65 -29
- package/src/TSL/Random.js +5 -1
- package/src/TSL/SceneResources.js +51 -0
- package/src/TSL/ShadeKernel.js +964 -101
- package/src/TSL/Struct.js +10 -0
- package/src/TSL/Sun.js +1 -1
- package/src/TSL/TextureSampling.js +66 -61
- package/src/addons/archives.js +14 -0
- package/src/addons/bidirectional.js +13 -0
- package/src/addons/color.js +32 -0
- package/src/addons/formats.js +16 -0
- package/src/addons/physicalSky.js +14 -0
- package/src/addons/storage.js +19 -0
- package/src/core.js +31 -0
- package/src/index.js +13 -23
- package/src/integrators/BidirectionalIntegrator.js +833 -0
- package/src/managers/AnimationManager.js +88 -6
- package/src/managers/CameraManager.js +103 -46
- package/src/managers/DenoisingManager.js +14 -10
- package/src/managers/EnvironmentManager.js +125 -103
- package/src/managers/GoboManager.js +9 -0
- package/src/managers/MaterialDataManager.js +48 -37
- package/src/managers/UniformManager.js +32 -10
- package/dist/ToneMapGPU-B6XIe3DU.js +0 -544
- package/dist/rolldown-runtime-CAFD8bLK.js +0 -11
- package/src/Processor/TreeletOptimizer.js +0 -574
|
@@ -0,0 +1,1219 @@
|
|
|
1
|
+
import { n as e } from "./BidirectionalIntegrator-9lZQxFVH.js";
|
|
2
|
+
import { dt as t, i as n, nn as r } from "./SolarLimb-CPaeZVwz.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 };
|