@driftengine/core 4.8.5 → 4.8.7
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/CHANGELOG.json +4392 -4250
- package/README.md +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.js +12 -2
- package/dist/render/ambientHarmonics.d.ts +46 -0
- package/dist/render/ambientHarmonics.js +80 -0
- package/dist/render/anisotropicLobe.d.ts +10 -0
- package/dist/render/anisotropicLobe.js +19 -0
- package/dist/render/areaLights.d.ts +54 -0
- package/dist/render/areaLights.js +55 -0
- package/dist/render/backend/api.d.ts +43 -2
- package/dist/render/backend/webgl2/instanced.d.ts +2 -0
- package/dist/render/backend/webgl2/instanced.js +11 -2
- package/dist/render/backend/webgl2/renderer.d.ts +120 -11
- package/dist/render/backend/webgl2/renderer.js +356 -53
- package/dist/render/backend/webgl2/sceneCaptureTarget.d.ts +29 -0
- package/dist/render/backend/webgl2/sceneCaptureTarget.js +96 -0
- package/dist/render/backend/webgl2/skinScatter.d.ts +14 -0
- package/dist/render/backend/webgl2/skinScatter.js +88 -26
- package/dist/render/backend/webgpu/buffers.js +2 -1
- package/dist/render/backend/webgpu/clusterBinner.js +3 -2
- package/dist/render/backend/webgpu/flatPass.d.ts +7 -5
- package/dist/render/backend/webgpu/flatPass.js +15 -13
- package/dist/render/backend/webgpu/particlePass.d.ts +37 -4
- package/dist/render/backend/webgpu/particlePass.js +81 -12
- package/dist/render/backend/webgpu/postPass.d.ts +6 -1
- package/dist/render/backend/webgpu/postPass.js +7 -2
- package/dist/render/backend/webgpu/renderer.d.ts +93 -8
- package/dist/render/backend/webgpu/renderer.js +483 -93
- package/dist/render/backend/webgpu/sceneCaptureTarget.d.ts +24 -0
- package/dist/render/backend/webgpu/sceneCaptureTarget.js +59 -0
- package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +1 -1
- package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +41 -1
- package/dist/render/backend/webgpu/skinPaletteRing.d.ts +40 -28
- package/dist/render/backend/webgpu/skinPaletteRing.js +69 -32
- package/dist/render/backend/webgpu/skinScatterPass.d.ts +10 -2
- package/dist/render/backend/webgpu/skinScatterPass.js +59 -9
- package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +5 -1
- package/dist/render/backend/webgpu/surfaceTexturePass.js +45 -5
- package/dist/render/backend/webgpu/waterPass.d.ts +1 -1
- package/dist/render/bloomChain.d.ts +44 -0
- package/dist/render/bloomChain.js +28 -0
- package/dist/render/bloomPass.d.ts +3 -1
- package/dist/render/bloomPass.js +16 -2
- package/dist/render/clusteredLights.d.ts +78 -6
- package/dist/render/clusteredLights.js +214 -13
- package/dist/render/driftLight/bake.d.ts +2 -0
- package/dist/render/driftLight/bake.js +1 -1
- package/dist/render/driftLight/falloff.d.ts +4 -2
- package/dist/render/driftLight/falloff.js +8 -2
- package/dist/render/fixtureAtlas.js +1 -1
- package/dist/render/gi/bounceLights.d.ts +3 -2
- package/dist/render/gi/bounceLights.js +8 -3
- package/dist/render/instanceCull.js +12 -0
- package/dist/render/instances.d.ts +47 -11
- package/dist/render/instances.js +24 -9
- package/dist/render/lightBudget.d.ts +38 -2
- package/dist/render/lightBudget.js +48 -5
- package/dist/render/lightmap.d.ts +116 -0
- package/dist/render/lightmap.js +140 -0
- package/dist/render/mesh.js +2 -1
- package/dist/render/particleBatch.d.ts +59 -3
- package/dist/render/particleBatch.js +53 -2
- package/dist/render/particleMaterial.d.ts +6 -1
- package/dist/render/particleMaterial.js +10 -2
- package/dist/render/particlePool.d.ts +32 -0
- package/dist/render/particlePool.js +9 -0
- package/dist/render/particleSort.d.ts +34 -0
- package/dist/render/particleSort.js +96 -0
- package/dist/render/pointLightSelection.d.ts +13 -0
- package/dist/render/pointLightSelection.js +3 -1
- package/dist/render/renderQuality.d.ts +8 -7
- package/dist/render/rendererHarness.js +3 -0
- package/dist/render/rgb9e5.d.ts +22 -0
- package/dist/render/rgb9e5.js +47 -0
- package/dist/render/sceneCapture.d.ts +29 -0
- package/dist/render/sceneCapture.js +36 -0
- package/dist/render/sceneTarget.d.ts +5 -0
- package/dist/render/sceneTarget.js +8 -1
- package/dist/render/screenSpaceReflection.d.ts +27 -1
- package/dist/render/screenSpaceReflection.js +9 -0
- package/dist/render/shaders/bloom.d.ts +8 -4
- package/dist/render/shaders/bloom.js +20 -3
- package/dist/render/shaders/bolt.d.ts +1 -1
- package/dist/render/shaders/bolt.js +7 -1
- package/dist/render/shaders/depth.js +11 -0
- package/dist/render/shaders/flat/anisotropic.d.ts +1 -1
- package/dist/render/shaders/flat/anisotropic.js +37 -3
- package/dist/render/shaders/flat/areaLight.d.ts +10 -0
- package/dist/render/shaders/flat/areaLight.js +142 -0
- package/dist/render/shaders/flat/glassTint.d.ts +3 -2
- package/dist/render/shaders/flat/glassTint.js +3 -1
- package/dist/render/shaders/flat/index.d.ts +5 -0
- package/dist/render/shaders/flat/index.js +46 -6
- package/dist/render/shaders/flat/lobes.d.ts +6 -0
- package/dist/render/shaders/flat/lobes.js +49 -43
- package/dist/render/shaders/flat/main.d.ts +1 -1
- package/dist/render/shaders/flat/main.js +158 -121
- package/dist/render/shaders/flat/models.d.ts +21 -6
- package/dist/render/shaders/flat/models.js +161 -17
- package/dist/render/shaders/flat/normalMap.d.ts +10 -0
- package/dist/render/shaders/flat/normalMap.js +25 -0
- package/dist/render/shaders/flat/preamble.js +84 -40
- package/dist/render/shaders/flat/skin.js +6 -5
- package/dist/render/shaders/generated/bloom.wgsl.d.ts +13 -3
- package/dist/render/shaders/generated/bloom.wgsl.js +13 -3
- package/dist/render/shaders/generated/bolt.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/bolt.wgsl.js +1 -1
- package/dist/render/shaders/generated/depth.wgsl.d.ts +4 -4
- package/dist/render/shaders/generated/depth.wgsl.js +4 -4
- package/dist/render/shaders/generated/flat.wgsl.d.ts +1647 -2044
- package/dist/render/shaders/generated/flat.wgsl.js +1685 -2082
- package/dist/render/shaders/generated/particle.wgsl.d.ts +115 -1
- package/dist/render/shaders/generated/particle.wgsl.js +115 -1
- package/dist/render/shaders/generated/skinBlur.wgsl.d.ts +12 -2
- package/dist/render/shaders/generated/skinBlur.wgsl.js +12 -2
- package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +11 -6
- package/dist/render/shaders/generated/ssrTrace.wgsl.js +11 -6
- package/dist/render/shaders/generated/water.wgsl.d.ts +23 -16
- package/dist/render/shaders/generated/water.wgsl.js +23 -16
- package/dist/render/shaders/gi/probeBake.wgsl.js +9 -5
- package/dist/render/shaders/particle.d.ts +17 -1
- package/dist/render/shaders/particle.js +133 -1
- package/dist/render/shaders/recon/motion.wgsl.d.ts +1 -1
- package/dist/render/shaders/recon/motion.wgsl.js +13 -2
- package/dist/render/shaders/skinBlur.js +25 -3
- package/dist/render/shaders/ssrTrace.js +20 -1
- package/dist/render/shaders/water.d.ts +1 -1
- package/dist/render/shaders/water.js +12 -3
- package/dist/render/skinBlur.d.ts +8 -5
- package/dist/render/skinBlur.js +8 -5
- package/dist/render/skinScatter.d.ts +3 -1
- package/dist/render/skinScatter.js +3 -1
- package/dist/render/ssrPass.js +1 -0
- package/dist/render/surfaceModel.d.ts +49 -8
- package/dist/render/surfaceModel.js +54 -8
- package/dist/render/surfaceTexture.d.ts +38 -1
- package/dist/render/surfaceTexture.js +37 -2
- package/package.json +6 -6
- package/src/index.ts +26 -3
- package/src/render/ambientHarmonics.ts +92 -0
- package/src/render/anisotropicLobe.ts +29 -0
- package/src/render/areaLights.ts +97 -0
- package/src/render/backend/api.ts +61 -1
- package/src/render/backend/webgl2/instanced.ts +12 -2
- package/src/render/backend/webgl2/renderer.ts +470 -59
- package/src/render/backend/webgl2/sceneCaptureTarget.ts +130 -0
- package/src/render/backend/webgl2/skinScatter.ts +120 -43
- package/src/render/backend/webgpu/buffers.ts +2 -1
- package/src/render/backend/webgpu/clusterBinner.ts +3 -1
- package/src/render/backend/webgpu/flatPass.ts +18 -13
- package/src/render/backend/webgpu/particlePass.ts +119 -12
- package/src/render/backend/webgpu/postPass.ts +7 -2
- package/src/render/backend/webgpu/renderer.ts +589 -113
- package/src/render/backend/webgpu/sceneCaptureTarget.ts +63 -0
- package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +41 -1
- package/src/render/backend/webgpu/skinPaletteRing.ts +65 -33
- package/src/render/backend/webgpu/skinScatterPass.ts +59 -9
- package/src/render/backend/webgpu/surfaceTexturePass.ts +57 -6
- package/src/render/bloomChain.ts +69 -0
- package/src/render/bloomPass.ts +26 -2
- package/src/render/clusteredLights.ts +259 -12
- package/src/render/driftLight/bake.ts +3 -1
- package/src/render/driftLight/falloff.ts +13 -2
- package/src/render/fixtureAtlas.ts +1 -1
- package/src/render/gi/bounceLights.ts +12 -3
- package/src/render/instanceCull.ts +9 -0
- package/src/render/instances.ts +61 -12
- package/src/render/lightBudget.ts +88 -4
- package/src/render/lightmap.ts +243 -0
- package/src/render/mesh.ts +2 -1
- package/src/render/particleBatch.ts +95 -4
- package/src/render/particleMaterial.ts +11 -1
- package/src/render/particlePool.ts +36 -0
- package/src/render/particleSort.ts +133 -0
- package/src/render/pointLightSelection.ts +20 -1
- package/src/render/renderQuality.ts +8 -7
- package/src/render/rendererHarness.ts +3 -0
- package/src/render/rgb9e5.ts +52 -0
- package/src/render/sceneCapture.ts +56 -0
- package/src/render/sceneTarget.ts +18 -1
- package/src/render/screenSpaceReflection.ts +33 -1
- package/src/render/shaders/bloom.ts +20 -3
- package/src/render/shaders/bolt.ts +7 -1
- package/src/render/shaders/depth.ts +11 -0
- package/src/render/shaders/flat/anisotropic.ts +37 -3
- package/src/render/shaders/flat/areaLight.ts +142 -0
- package/src/render/shaders/flat/glassTint.ts +9 -2
- package/src/render/shaders/flat/index.ts +51 -6
- package/src/render/shaders/flat/lobes.ts +50 -43
- package/src/render/shaders/flat/main.ts +158 -121
- package/src/render/shaders/flat/models.ts +170 -21
- package/src/render/shaders/flat/normalMap.ts +25 -0
- package/src/render/shaders/flat/preamble.ts +84 -40
- package/src/render/shaders/flat/skin.ts +6 -5
- package/src/render/shaders/generated/bloom.wgsl.ts +13 -3
- package/src/render/shaders/generated/bolt.wgsl.ts +1 -1
- package/src/render/shaders/generated/depth.wgsl.ts +4 -4
- package/src/render/shaders/generated/flat.wgsl.ts +1685 -2082
- package/src/render/shaders/generated/particle.wgsl.ts +116 -1
- package/src/render/shaders/generated/skinBlur.wgsl.ts +12 -2
- package/src/render/shaders/generated/ssrTrace.wgsl.ts +11 -6
- package/src/render/shaders/generated/water.wgsl.ts +23 -16
- package/src/render/shaders/gi/probeBake.wgsl.ts +9 -5
- package/src/render/shaders/particle.ts +134 -1
- package/src/render/shaders/recon/motion.wgsl.ts +13 -2
- package/src/render/shaders/skinBlur.ts +25 -3
- package/src/render/shaders/ssrTrace.ts +20 -1
- package/src/render/shaders/water.ts +12 -3
- package/src/render/skinBlur.ts +8 -5
- package/src/render/skinScatter.ts +3 -1
- package/src/render/ssrPass.ts +1 -0
- package/src/render/surfaceModel.ts +82 -10
- package/src/render/surfaceTexture.ts +101 -3
|
@@ -27,6 +27,54 @@ export const EMISSIVE_SHADOW_SHARE = 0.55;
|
|
|
27
27
|
* deliberately not this.
|
|
28
28
|
*/
|
|
29
29
|
export const MIN_LOBE_ALPHA = 0.01;
|
|
30
|
+
/**
|
|
31
|
+
* Karis's fit to the split-sum environment BRDF, as GLSL: the lit stage's, and the screen-space
|
|
32
|
+
* reflection's when a surface asks for its Fresnel (`ReflectiveSurface.fresnel`). One text, so the
|
|
33
|
+
* two cannot drift.
|
|
34
|
+
*/
|
|
35
|
+
export const ENV_BRDF_GLSL = `/**
|
|
36
|
+
* The other half of the split-sum approximation: what fraction of an environment a surface returns.
|
|
37
|
+
*
|
|
38
|
+
* The convolution decides *what* a surface reflects at a given roughness; this decides *how much*.
|
|
39
|
+
* Before it the amount was fresnel times one-minus-roughness, which is a curve somebody chose
|
|
40
|
+
* standing in for an integral.
|
|
41
|
+
*
|
|
42
|
+
* Karis's analytic fit to the environment BRDF, so there is **no lookup texture and no texture
|
|
43
|
+
* unit**: a few multiply-adds against roughness and the view angle. x scales the surface's own
|
|
44
|
+
* reflectance at normal incidence and y is the additive grazing term, so a smooth dielectric at
|
|
45
|
+
* f0 0.04 returns about 0.046 head-on and approaches 1 at the edge, which is what a dielectric
|
|
46
|
+
* does. At roughness 1 it returns about 0.016 rather than the zero one-minus-roughness gave, which
|
|
47
|
+
* is the substantive difference: a fully rough dielectric does reflect its surroundings.
|
|
48
|
+
*
|
|
49
|
+
* **It replaces the Fresnel factor as well as the thinning**, because the fit already contains the
|
|
50
|
+
* angular dependence; multiplying by a separate Fresnel term would apply it twice.
|
|
51
|
+
*
|
|
52
|
+
* **How much this is worth was measured, and it is worth less than it looks on a dark room.**
|
|
53
|
+
* On demo/dev/ibl.html?ladder=1 the whole ladder moved by at most 0.2 of 255 when the old term was
|
|
54
|
+
* replaced. That is not the term failing: at high roughness the surface reads the coarsest levels
|
|
55
|
+
* of the chain, and in a room of five dark walls and one bright one those levels are dark, so a
|
|
56
|
+
* weight three times larger against a near-zero radiance is still near zero. It is worth much more
|
|
57
|
+
* against a bright environment, which is what a loaded sky is and what no captured room here is.
|
|
58
|
+
*
|
|
59
|
+
* **A warning about reading that page, paid for once.** The ladder falls about five-fold from
|
|
60
|
+
* mirror to rough, and that reads as energy being lost. It is not: a mirror concentrates the one
|
|
61
|
+
* bright wall into a sharp image and a rough surface averages it against five dark ones, so the
|
|
62
|
+
* falloff is the room's own content. The normalised falloff also happens to track one-minus-
|
|
63
|
+
* roughness closely, which made the old term look like the cause — and removing that term entirely
|
|
64
|
+
* changed nothing, which is what settled it. Perturb before believing a match.
|
|
65
|
+
*
|
|
66
|
+
* **What it costs** is a fit rather than the integral: the published error is around one per cent
|
|
67
|
+
* of the tabulated term, far below what an eight-bit frame can show. **What would make it wrong**
|
|
68
|
+
* is a material model this shader does not have — a clearcoat or a sheen lobe carries its own BRDF
|
|
69
|
+
* and its own integral, and this fit is Trowbridge-Reitz with Smith masking and nothing else.
|
|
70
|
+
*/
|
|
71
|
+
vec2 envBrdfApprox(float ndv, float roughness) {
|
|
72
|
+
const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022);
|
|
73
|
+
const vec4 c1 = vec4(1.0, 0.0425, 1.04, -0.04);
|
|
74
|
+
vec4 r = roughness * c0 + c1;
|
|
75
|
+
float a004 = min(r.x * r.x, exp2(-9.28 * ndv)) * r.x + r.y;
|
|
76
|
+
return vec2(-1.04, 1.04) * a004 + r.zw;
|
|
77
|
+
}`;
|
|
30
78
|
export const LOBES_GLSL = `float shadowReach(float distance, float maxDistance) {
|
|
31
79
|
return 1.0 - smoothstep(
|
|
32
80
|
maxDistance * ${POINT_SHADOW_FADE_START.toFixed(2)},
|
|
@@ -153,49 +201,7 @@ float sphereLobe(float ndh, float roughness, float sourceRadius, float dist) {
|
|
|
153
201
|
return energy * (w2 * w2) / max(d * d, 1e-8);
|
|
154
202
|
}
|
|
155
203
|
|
|
156
|
-
|
|
157
|
-
* The other half of the split-sum approximation: what fraction of an environment a surface returns.
|
|
158
|
-
*
|
|
159
|
-
* The convolution decides *what* a surface reflects at a given roughness; this decides *how much*.
|
|
160
|
-
* Before it the amount was fresnel times one-minus-roughness, which is a curve somebody chose
|
|
161
|
-
* standing in for an integral.
|
|
162
|
-
*
|
|
163
|
-
* Karis's analytic fit to the environment BRDF, so there is **no lookup texture and no texture
|
|
164
|
-
* unit**: a few multiply-adds against roughness and the view angle. x scales the surface's own
|
|
165
|
-
* reflectance at normal incidence and y is the additive grazing term, so a smooth dielectric at
|
|
166
|
-
* f0 0.04 returns about 0.046 head-on and approaches 1 at the edge, which is what a dielectric
|
|
167
|
-
* does. At roughness 1 it returns about 0.016 rather than the zero one-minus-roughness gave, which
|
|
168
|
-
* is the substantive difference: a fully rough dielectric does reflect its surroundings.
|
|
169
|
-
*
|
|
170
|
-
* **It replaces the Fresnel factor as well as the thinning**, because the fit already contains the
|
|
171
|
-
* angular dependence; multiplying by a separate Fresnel term would apply it twice.
|
|
172
|
-
*
|
|
173
|
-
* **How much this is worth was measured, and it is worth less than it looks on a dark room.**
|
|
174
|
-
* On demo/dev/ibl.html?ladder=1 the whole ladder moved by at most 0.2 of 255 when the old term was
|
|
175
|
-
* replaced. That is not the term failing: at high roughness the surface reads the coarsest levels
|
|
176
|
-
* of the chain, and in a room of five dark walls and one bright one those levels are dark, so a
|
|
177
|
-
* weight three times larger against a near-zero radiance is still near zero. It is worth much more
|
|
178
|
-
* against a bright environment, which is what a loaded sky is and what no captured room here is.
|
|
179
|
-
*
|
|
180
|
-
* **A warning about reading that page, paid for once.** The ladder falls about five-fold from
|
|
181
|
-
* mirror to rough, and that reads as energy being lost. It is not: a mirror concentrates the one
|
|
182
|
-
* bright wall into a sharp image and a rough surface averages it against five dark ones, so the
|
|
183
|
-
* falloff is the room's own content. The normalised falloff also happens to track one-minus-
|
|
184
|
-
* roughness closely, which made the old term look like the cause — and removing that term entirely
|
|
185
|
-
* changed nothing, which is what settled it. Perturb before believing a match.
|
|
186
|
-
*
|
|
187
|
-
* **What it costs** is a fit rather than the integral: the published error is around one per cent
|
|
188
|
-
* of the tabulated term, far below what an eight-bit frame can show. **What would make it wrong**
|
|
189
|
-
* is a material model this shader does not have — a clearcoat or a sheen lobe carries its own BRDF
|
|
190
|
-
* and its own integral, and this fit is Trowbridge-Reitz with Smith masking and nothing else.
|
|
191
|
-
*/
|
|
192
|
-
vec2 envBrdfApprox(float ndv, float roughness) {
|
|
193
|
-
const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022);
|
|
194
|
-
const vec4 c1 = vec4(1.0, 0.0425, 1.04, -0.04);
|
|
195
|
-
vec4 r = roughness * c0 + c1;
|
|
196
|
-
float a004 = min(r.x * r.x, exp2(-9.28 * ndv)) * r.x + r.y;
|
|
197
|
-
return vec2(-1.04, 1.04) * a004 + r.zw;
|
|
198
|
-
}
|
|
204
|
+
${ENV_BRDF_GLSL}
|
|
199
205
|
|
|
200
206
|
/**
|
|
201
207
|
* How much of a prefiltered environment a surface returns, with the light that bounces more than
|