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.
- package/README.md +8 -1970
- package/dist/{SceneMetadata-BUfzHMSj.js → ArchiveFormats-CWi6IbSp.js} +147 -117
- package/dist/{ArchiveImporter-DuWqpbXf.js → ArchiveImporter-CEv5EDgg.js} +96 -98
- package/dist/BidirectionalIntegrator-KWRQrMXX.js +960 -0
- package/dist/CameraRay-CdVb2LnS.js +181 -0
- package/dist/{ColorManagement-CKN2pTRS.js → ColorManagement-B6SgefNi.js} +107 -107
- package/dist/CompactKernel-C6TCBB6i.js +19759 -0
- package/dist/DepthPass-BMnBuepB.js +69 -0
- package/dist/{EngineIssues-t5p7TEjb.js → EngineIssues-DHAU18xh.js} +2 -1
- package/dist/{identity-x_UfobDa.js → FileIdentity-BXmPNvJP.js} +27 -23
- package/dist/{LocalExposure-Cw1g8rdU.js → LocalExposure-CMO6fd8G.js} +77 -77
- package/dist/{NeuralRetouch-CLtoW6Vt.js → NeuralRetouch-CYRGwe9E.js} +2 -2
- package/dist/{NeuralSuperRes-PlLjWpMF.js → NeuralSuperRes-p0A3_wjO.js} +2 -2
- package/dist/{openStorage-CxLMw2_a.js → OpenStorage-CjlOYQyW.js} +106 -108
- package/dist/{PackedRayBuffer-DwhV931f.js → PackedRayBuffer-BhqeNEaL.js} +53 -68
- package/dist/PhysicalSky-qHATDBbB.js +1220 -0
- package/dist/{PictureView-DpHE_jDr.js → PictureView-6y4XsUf0.js} +3 -3
- package/dist/{PathTracer-BMtUFjdP.js → RayzeeRenderer-ClGfovbz.js} +7191 -23218
- package/dist/{TextureBuckets-D09iX9_y.js → TextureBuckets-CcOI4Bdg.js} +4 -0
- package/dist/TextureSampling-CQMmzhCp.js +732 -0
- package/dist/{ZipReader-KPFbIuOs.js → ZipReader-D6LbMsfZ.js} +1 -1
- package/dist/addons/archives.es.js +2 -2
- package/dist/addons/bidirectional.es.js +1 -1
- package/dist/addons/color.es.js +1 -1
- package/dist/addons/formats.es.js +102 -2
- package/dist/addons/physical-sky.es.js +1 -1
- package/dist/addons/storage.es.js +3 -3
- package/dist/rayzee-core.es.js +10 -12
- package/dist/rayzee.es.js +667 -671
- package/dist/rayzee.umd.js +114 -153
- package/package.json +1 -1
- package/src/EngineDefaults.js +6 -0
- package/src/EngineIssues.js +1 -0
- package/src/RayzeeRenderer.js +40 -4
- package/src/RenderSettings.js +31 -3
- package/src/{loaders → addons}/archives/ArchiveCache.js +3 -3
- package/src/{loaders → addons}/archives/ArchiveImporter.js +12 -13
- package/src/addons/{archives.js → archives/index.js} +2 -2
- package/src/{loaders → addons/archives}/pbrt/PBRTCurves.js +1 -1
- package/src/{loaders → addons/archives}/pbrt/PBRTMaterials.js +1 -1
- package/src/{loaders → addons/archives}/pbrt/PBRTParser.js +1 -1
- package/src/{loaders → addons/archives}/pbrt/PBRTSceneBuilder.js +3 -3
- package/src/{loaders → addons/archives}/pbrt/PBRTTextureBake.js +1 -1
- package/src/{loaders → addons/archives}/pbrt/index.js +2 -2
- package/src/{loaders → addons/archives}/usd/USDLayer.js +3 -3
- package/src/{loaders → addons/archives}/usd/USDStage.js +2 -2
- package/src/{shaders → addons/bidirectional}/Bidirectional.js +4 -4
- package/src/{pathtracer → addons/bidirectional}/BidirectionalIntegrator.js +25 -44
- package/src/{shaders → addons/bidirectional}/BidirectionalLamps.js +6 -6
- package/src/{shaders/kernels → addons/bidirectional}/ConnectKernel.js +8 -8
- package/src/{shaders/kernels → addons/bidirectional}/LightGenerateKernel.js +12 -12
- package/src/{shaders → addons/bidirectional}/LightGuide.js +2 -2
- package/src/{shaders/kernels → addons/bidirectional}/LightSplatKernel.js +8 -8
- package/src/{shaders/kernels → addons/bidirectional}/MergeKernel.js +7 -7
- package/src/addons/{bidirectional.js → bidirectional/index.js} +1 -1
- package/src/{color → addons/color}/BakedViews.js +1 -1
- package/src/{color → addons/color}/ColorManagement.js +4 -4
- package/src/{color → addons/color}/ColorSpaces.js +1 -1
- package/src/{color → addons/color}/LutBake.js +1 -1
- package/src/{color → addons/color}/OcioRuntime.js +2 -9
- package/src/{color → addons/color}/OcioViews.js +2 -2
- package/src/addons/{color.js → color/index.js} +6 -6
- package/src/addons/formats.js +112 -3
- package/src/{shaders → addons/physical-sky}/Atmosphere.js +1 -1
- package/src/{environment → addons/physical-sky}/AtmosphereModel.js +1 -1
- package/src/{shaders → addons/physical-sky}/EnvironmentCDF.js +1 -1
- package/src/{environment → addons/physical-sky}/PhysicalSky.js +5 -5
- package/src/addons/{physicalSky.js → physical-sky/index.js} +1 -1
- package/src/{storage/openStorage.js → addons/storage/OpenStorage.js} +63 -2
- package/src/{storage → addons/storage}/StorageManager.js +58 -6
- package/src/addons/{storage.js → storage/index.js} +3 -3
- package/src/core.js +4 -4
- package/src/index.js +17 -15
- package/src/lights/LightManager.js +2 -2
- package/src/lights/LightSerializer.js +75 -1
- package/src/loaders/AssetLoader.js +6 -6
- package/src/loaders/SceneLoading.js +2 -2
- package/src/materials/MaterialDataManager.js +2 -2
- package/src/materials/TextureCreator.js +377 -1
- package/src/node/index.js +1 -1
- package/src/output/Pictures.js +1 -1
- package/src/output/ToneMapCPU.js +0 -10
- package/src/pathtracer/PackedRayBuffer.js +1 -1
- package/src/pathtracer/PathTracer.js +90 -272
- package/src/pathtracer/PathTracerStage.js +1 -1
- package/src/pathtracer/QueueManager.js +3 -3
- package/src/pathtracer/UniformManager.js +7 -0
- package/src/pipeline/BindingAudit.js +0 -6
- package/src/scene/GeometryExtractor.js +1 -1
- package/src/scene/InstanceTable.js +2 -2
- package/src/scene/SceneProcessor.js +307 -900
- package/src/scene/SceneRefit.js +171 -0
- package/src/shaders/CameraRay.js +2 -2
- package/src/shaders/Clearcoat.js +1 -5
- package/src/shaders/Common.js +2 -54
- package/src/shaders/DFGTable.js +22 -0
- package/src/shaders/Displacement.js +1 -1
- package/src/shaders/EmissiveSampling.js +3 -4
- package/src/shaders/Environment.js +2 -2
- package/src/shaders/Fog.js +395 -0
- package/src/shaders/LightBVHSampling.js +1 -1
- package/src/shaders/LightsCore.js +1 -1
- package/src/shaders/LightsDirect.js +6 -2
- package/src/shaders/LightsSampling.js +1 -1
- package/src/shaders/MaterialProperties.js +7 -27
- package/src/shaders/MaterialTransmission.js +5 -26
- package/src/shaders/Random.js +17 -8
- package/src/shaders/SceneResources.js +2 -0
- package/src/shaders/Struct.js +81 -12
- package/src/shaders/Subsurface.js +1 -1
- package/src/shaders/TextureSampling.js +5 -22
- package/src/shaders/{patches.js → ThreePatches.js} +3 -158
- package/src/shaders/kernels/CompactKernel.js +141 -3
- package/src/shaders/kernels/DepthPass.js +1 -1
- package/src/shaders/kernels/FinalWriteKernel.js +158 -6
- package/src/shaders/kernels/ShadeKernel.js +98 -0
- package/src/shaders/kernels/SortGlobalKernels.js +1 -1
- package/src/storage/BLASCache.js +146 -7
- package/src/storage/CDFCache.js +1 -2
- package/src/storage/DownloadCache.js +2 -3
- package/src/storage/{identity.js → FileIdentity.js} +1 -1
- package/src/storage/SpillStore.js +2 -2
- package/src/storage/StorageAreas.js +27 -0
- package/src/viewer/PathTracerApp.js +9 -18
- package/src/viewer/SceneState.js +2 -2
- package/src/viewer/camera/CameraManager.js +1 -1
- package/src/viewer/denoise/NRD.js +1 -1
- package/src/viewer/denoise/OIDNTemporalHistory.js +1 -1
- package/src/viewer/overlays/OverlayManager.js +1 -2
- package/src/viewer/overlays/ViewOverlayRenderer.js +54 -1
- package/src/viewer/picture/AIUpscalerWorker.js +1 -1
- package/src/viewer/picture/AutoExposure.js +1 -1
- package/src/viewer/picture/LocalExposure.js +1 -1
- package/src/viewer/picture/PictureView.js +1 -1
- package/dist/BidirectionalIntegrator-BEXXxmZH.js +0 -956
- package/dist/DepthPass-u5g7hr7J.js +0 -68
- package/dist/FileFormats-C91JE5DM.js +0 -102
- package/dist/PhysicalSky-DqanSS2m.js +0 -1220
- package/dist/RayzeeRenderer-C9zGAMJo.js +0 -3281
- package/dist/TextureSampling-CvMi8LNc.js +0 -904
- package/dist/archiveFormats-j39rQeKs.js +0 -37
- package/src/lights/blackbody.js +0 -74
- package/src/loaders/FileFormats.js +0 -116
- package/src/storage/areas.js +0 -4
- package/src/storage/events.js +0 -29
- package/src/storage/index.js +0 -9
- package/src/storage/inlineTransport.js +0 -24
- package/src/storage/sceneCachePolicy.js +0 -12
- package/src/storage/shared.js +0 -9
- package/src/storage/transport.js +0 -62
- package/src/viewer/overlays/overlaySurface.js +0 -53
- /package/dist/{Logger-CH-TZ1co.js → Logger-D7hic8LA.js} +0 -0
- /package/dist/{SolarLimb-BiVdxxmL.js → SolarLimb-IayvafJP.js} +0 -0
- /package/src/{portable.js → Portable.js} +0 -0
- /package/src/{version.js → Version.js} +0 -0
- /package/src/{loaders → addons}/archives/ArchiveReader.js +0 -0
- /package/src/{storage → addons/archives}/SceneGraphCodec.js +0 -0
- /package/src/{loaders → addons}/archives/ZipReader.js +0 -0
- /package/src/{loaders/pbrt/buffers.js → addons/archives/pbrt/ArrayMemory.js} +0 -0
- /package/src/{loaders → addons/archives}/pbrt/EqualAreaOctahedral.js +0 -0
- /package/src/{loaders → addons/archives}/pbrt/LoopSubdivision.js +0 -0
- /package/src/{loaders → addons/archives}/pbrt/PBRTAnimation.js +0 -0
- /package/src/{loaders → addons/archives}/pbrt/PBRTMath.js +0 -0
- /package/src/{loaders → addons/archives}/pbrt/PBRTScattering.js +0 -0
- /package/src/{loaders → addons/archives}/pbrt/PBRTTokenizer.js +0 -0
- /package/src/{loaders → addons/archives}/pbrt/PFM.js +0 -0
- /package/src/{loaders → addons/archives}/usd/USDScene.js +0 -0
- /package/src/{loaders → addons/archives}/usd/USDText.js +0 -0
- /package/src/{loaders → addons/archives}/usd/index.js +0 -0
- /package/src/{color → addons/color}/Displays.js +0 -0
- /package/src/{color → addons/color}/InputColorSpaces.js +0 -0
- /package/src/{storage/locks.js → addons/storage/Locks.js} +0 -0
- /package/src/{storage → addons/storage}/StorageOps.js +0 -0
- /package/src/{storage → addons/storage}/StorageWorker.js +0 -0
- /package/src/loaders/{archives/archiveFormats.js → ArchiveFormats.js} +0 -0
- /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 };
|