@zephyr3d/scene 0.9.4 → 0.9.5
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/dist/animation/animationmask.js +224 -0
- package/dist/animation/animationmask.js.map +1 -0
- package/dist/animation/animationset.js +268 -67
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +3 -0
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +7 -0
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/ik_modifier.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +6 -4
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +390 -43
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +4 -3
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/joint_dynamics_modifier.js +2 -0
- package/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/animation/morphtarget.js +3 -72
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -0
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +3 -0
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/proptrack.js +3 -0
- package/dist/animation/proptrack.js.map +1 -1
- package/dist/animation/rotationtrack.js +3 -0
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +3 -0
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +254 -79
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/animation/translationtrack.js +3 -0
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/engine.js +171 -107
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptregistry.js +251 -80
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +344 -365
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +17 -14
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js +1 -6
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
- package/dist/asset/model.js +1000 -131
- package/dist/asset/model.js.map +1 -1
- package/dist/avatar/wardrobe.js +474 -0
- package/dist/avatar/wardrobe.js.map +1 -0
- package/dist/index.d.ts +1125 -199
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +72 -15
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/msdf_text_sprite.js +4 -4
- package/dist/material/msdf_text_sprite.js.map +1 -1
- package/dist/material/pbrblueprint.js +102 -102
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/render/envlight.js +54 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/sky.js +9 -0
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/batchgroup.js +11 -13
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +15 -2
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/mesh.js +79 -16
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/scene.js +1 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +203 -2
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/text/font/font_asset.js.map +1 -1
- package/dist/text/msdf/generator.js.map +1 -1
- package/dist/text/msdf/shape.js +4 -1
- package/dist/text/msdf/shape.js.map +1 -1
- package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
- package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +1157 -1154
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/pmrem.js +34 -8
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/serialization/manager.js +22 -9
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +700 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +64 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +187 -8
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/textures/sheenlut.js +138 -0
- package/dist/utility/textures/sheenlut.js.map +1 -0
- package/package.json +2 -2
package/dist/render/envlight.js
CHANGED
|
@@ -12,10 +12,12 @@ import { getDevice } from '../app/api.js';
|
|
|
12
12
|
* @public
|
|
13
13
|
*/ class EnvShIBL extends EnvironmentLighting {
|
|
14
14
|
/** @internal */ static UNIFORM_NAME_IBL_RADIANCE_MAP = 'zIBLRadianceMap';
|
|
15
|
+
/** @internal */ static UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP = 'zIBLSheenRadianceMap';
|
|
15
16
|
/** @internal */ static UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD = 'zIBLRadianceMapMaxLOD';
|
|
16
17
|
/** @internal */ static UNIFORM_NAME_IBL_IRRADIANCE_SH = 'zIBLIrradianceSH';
|
|
17
18
|
/** @internal */ static UNIFORM_NAME_IBL_IRRADIANCE_WINDOW = 'zIBLIrradianceWindow';
|
|
18
19
|
/** @internal */ _radianceMap;
|
|
20
|
+
/** @internal */ _sheenRadianceMap;
|
|
19
21
|
/** @internal */ _irradianceSH;
|
|
20
22
|
/** @internal */ _irradianceSHFB;
|
|
21
23
|
/** @internal */ _irraidanceWindow;
|
|
@@ -23,9 +25,10 @@ import { getDevice } from '../app/api.js';
|
|
|
23
25
|
* Creates an instance of EnvIBL
|
|
24
26
|
* @param radianceMap - The radiance map
|
|
25
27
|
* @param irradianceSH - The irradiance SH
|
|
26
|
-
*/ constructor(radianceMap, irradianceSH, irradianceSHFB){
|
|
28
|
+
*/ constructor(radianceMap, irradianceSH, irradianceSHFB, sheenRadianceMap){
|
|
27
29
|
super();
|
|
28
30
|
this._radianceMap = new DRef(radianceMap || null);
|
|
31
|
+
this._sheenRadianceMap = new DRef(sheenRadianceMap || null);
|
|
29
32
|
this._irradianceSH = new DRef(irradianceSH || null);
|
|
30
33
|
this._irradianceSHFB = new DRef(irradianceSHFB || null);
|
|
31
34
|
this._irraidanceWindow = new Vector3();
|
|
@@ -42,6 +45,12 @@ import { getDevice } from '../app/api.js';
|
|
|
42
45
|
set radianceMap(tex) {
|
|
43
46
|
this._radianceMap.set(tex);
|
|
44
47
|
}
|
|
48
|
+
/** The Charlie-filtered sheen radiance map */ get sheenRadianceMap() {
|
|
49
|
+
return this._sheenRadianceMap.get();
|
|
50
|
+
}
|
|
51
|
+
set sheenRadianceMap(tex) {
|
|
52
|
+
this._sheenRadianceMap.set(tex);
|
|
53
|
+
}
|
|
45
54
|
/** The irradiance sh coeffecients */ get irradianceSH() {
|
|
46
55
|
return this._irradianceSH.get();
|
|
47
56
|
}
|
|
@@ -69,6 +78,9 @@ import { getDevice } from '../app/api.js';
|
|
|
69
78
|
pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP] = pb.texCube().uniform(0);
|
|
70
79
|
pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD] = pb.float().uniform(0);
|
|
71
80
|
}
|
|
81
|
+
if (this.sheenRadianceMap) {
|
|
82
|
+
pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP] = pb.texCube().uniform(0);
|
|
83
|
+
}
|
|
72
84
|
if (this.irradianceSHFB) {
|
|
73
85
|
const tex = pb.tex2D();
|
|
74
86
|
const formatInfo = getDevice().getDeviceCaps().textureCaps.getTextureFormatInfo(this.irradianceSHFB.getColorAttachments()[0].format);
|
|
@@ -91,6 +103,9 @@ import { getDevice } from '../app/api.js';
|
|
|
91
103
|
bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD, this.radianceMap.mipLevelCount - 1);
|
|
92
104
|
bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP, this.radianceMap);
|
|
93
105
|
}
|
|
106
|
+
if (this.sheenRadianceMap) {
|
|
107
|
+
bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP, this.sheenRadianceMap);
|
|
108
|
+
}
|
|
94
109
|
if (this.irradianceSHFB) {
|
|
95
110
|
bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH, this.irradianceSHFB.getColorAttachments()[0], fetchSampler('clamp_nearest_nomip'));
|
|
96
111
|
bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);
|
|
@@ -107,6 +122,13 @@ import { getDevice } from '../app/api.js';
|
|
|
107
122
|
return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod ? pb.textureSampleLevel(scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP], refl, pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])).rgb : pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP], refl).rgb;
|
|
108
123
|
}
|
|
109
124
|
/**
|
|
125
|
+
* {@inheritDoc EnvironmentLighting.getSheenRadiance}
|
|
126
|
+
* @override
|
|
127
|
+
*/ getSheenRadiance(scope, refl, roughness) {
|
|
128
|
+
const pb = scope.$builder;
|
|
129
|
+
return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod ? pb.textureSampleLevel(scope[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP], refl, pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])).rgb : pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP], refl).rgb;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
110
132
|
* {@inheritDoc EnvironmentLighting.getIrradiance}
|
|
111
133
|
* @override
|
|
112
134
|
*/ getIrradiance(scope, normal) {
|
|
@@ -193,6 +215,12 @@ import { getDevice } from '../app/api.js';
|
|
|
193
215
|
return !!this._radianceMap.get();
|
|
194
216
|
}
|
|
195
217
|
/**
|
|
218
|
+
* {@inheritDoc EnvironmentLighting.hasSheenRadiance}
|
|
219
|
+
* @override
|
|
220
|
+
*/ hasSheenRadiance() {
|
|
221
|
+
return !!this._sheenRadianceMap.get();
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
196
224
|
* {@inheritDoc EnvironmentLighting.hasIrradiance}
|
|
197
225
|
* @override
|
|
198
226
|
*/ hasIrradiance() {
|
|
@@ -204,6 +232,7 @@ import { getDevice } from '../app/api.js';
|
|
|
204
232
|
*/ onDispose() {
|
|
205
233
|
super.onDispose();
|
|
206
234
|
this._radianceMap.dispose();
|
|
235
|
+
this._sheenRadianceMap.dispose();
|
|
207
236
|
this._irradianceSH.dispose();
|
|
208
237
|
this._irradianceSHFB.dispose();
|
|
209
238
|
}
|
|
@@ -256,6 +285,12 @@ import { getDevice } from '../app/api.js';
|
|
|
256
285
|
return null;
|
|
257
286
|
}
|
|
258
287
|
/**
|
|
288
|
+
* {@inheritDoc EnvironmentLighting.getSheenRadiance}
|
|
289
|
+
* @override
|
|
290
|
+
*/ getSheenRadiance(_scope, _refl, _roughness) {
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
259
294
|
* {@inheritDoc EnvironmentLighting.getIrradiance}
|
|
260
295
|
* @override
|
|
261
296
|
*/ getIrradiance(scope, _normal) {
|
|
@@ -268,6 +303,12 @@ import { getDevice } from '../app/api.js';
|
|
|
268
303
|
return false;
|
|
269
304
|
}
|
|
270
305
|
/**
|
|
306
|
+
* {@inheritDoc EnvironmentLighting.hasSheenRadiance}
|
|
307
|
+
* @override
|
|
308
|
+
*/ hasSheenRadiance() {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
271
312
|
* {@inheritDoc EnvironmentLighting.hasIrradiance}
|
|
272
313
|
* @override
|
|
273
314
|
*/ hasIrradiance() {
|
|
@@ -338,6 +379,12 @@ import { getDevice } from '../app/api.js';
|
|
|
338
379
|
return pb.mix(scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN], scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP], factor).rgb;
|
|
339
380
|
}
|
|
340
381
|
/**
|
|
382
|
+
* {@inheritDoc EnvironmentLighting.getSheenRadiance}
|
|
383
|
+
* @override
|
|
384
|
+
*/ getSheenRadiance(scope, refl, roughness) {
|
|
385
|
+
return this.getRadiance(scope, refl, roughness);
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
341
388
|
* {@inheritDoc EnvironmentLighting.getIrradiance}
|
|
342
389
|
* @override
|
|
343
390
|
*/ getIrradiance(scope, normal) {
|
|
@@ -352,6 +399,12 @@ import { getDevice } from '../app/api.js';
|
|
|
352
399
|
return true;
|
|
353
400
|
}
|
|
354
401
|
/**
|
|
402
|
+
* {@inheritDoc EnvironmentLighting.hasSheenRadiance}
|
|
403
|
+
* @override
|
|
404
|
+
*/ hasSheenRadiance() {
|
|
405
|
+
return true;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
355
408
|
* {@inheritDoc EnvironmentLighting.hasIrradiance}
|
|
356
409
|
* @override
|
|
357
410
|
*/ hasIrradiance() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envlight.js","sources":["../../src/render/envlight.ts"],"sourcesContent":["import type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, DRef, Vector3 } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n TextureCube\r\n} from '@zephyr3d/device';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * Environment light type\r\n * @public\r\n */\r\nexport type EnvLightType = 'ibl' | 'hemisphere' | 'constant' | 'none';\r\n\r\n/**\r\n * Base class for any kind of environment light\r\n * @public\r\n */\r\nexport abstract class EnvironmentLighting extends Disposable {\r\n /**\r\n * The environment light type\r\n */\r\n abstract getType(): EnvLightType;\r\n /**\r\n * Initialize shader bindings\r\n * @param pb - The program builder\r\n */\r\n abstract initShaderBindings(pb: ProgramBuilder): void;\r\n /**\r\n * Updates the uniform values\r\n * @param bg - The bind group to be updated\r\n */\r\n abstract updateBindGroup(bg: BindGroup): void;\r\n /**\r\n * Get radiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param refl - Reflection vector\r\n * @param roughness - Surface roughness\r\n *\r\n * @returns The radiance for the fragment\r\n */\r\n abstract getRadiance(\r\n scope: PBInsideFunctionScope,\r\n refl: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): Nullable<PBShaderExp>;\r\n /**\r\n * Get irradiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param normal - surface normal\r\n *\r\n * @returns The radiance for the fragment\r\n */\r\n abstract getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp): PBShaderExp;\r\n /**\r\n * Returns whether this environment lighting supports reflective light\r\n */\r\n abstract hasRadiance(): boolean;\r\n /**\r\n * Returns whether this environment lighting supports diffuse light\r\n */\r\n abstract hasIrradiance(): boolean;\r\n}\r\n\r\n/**\r\n * IBL with SH based environment lighting\r\n * @public\r\n */\r\nexport class EnvShIBL extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_RADIANCE_MAP = 'zIBLRadianceMap';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD = 'zIBLRadianceMapMaxLOD';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_IRRADIANCE_SH = 'zIBLIrradianceSH';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_IRRADIANCE_WINDOW = 'zIBLIrradianceWindow';\r\n /** @internal */\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n /** @internal */\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n /** @internal */\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n /** @internal */\r\n private _irraidanceWindow: Vector3;\r\n /**\r\n * Creates an instance of EnvIBL\r\n * @param radianceMap - The radiance map\r\n * @param irradianceSH - The irradiance SH\r\n */\r\n constructor(radianceMap?: TextureCube, irradianceSH?: GPUDataBuffer, irradianceSHFB?: FrameBuffer) {\r\n super();\r\n this._radianceMap = new DRef(radianceMap || null);\r\n this._irradianceSH = new DRef(irradianceSH || null);\r\n this._irradianceSHFB = new DRef(irradianceSHFB || null);\r\n this._irraidanceWindow = new Vector3();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'ibl' as const;\r\n }\r\n /** The radiance map */\r\n get radianceMap() {\r\n return this._radianceMap.get();\r\n }\r\n set radianceMap(tex) {\r\n this._radianceMap.set(tex);\r\n }\r\n /** The irradiance sh coeffecients */\r\n get irradianceSH() {\r\n return this._irradianceSH.get();\r\n }\r\n set irradianceSH(value) {\r\n this._irradianceSH.set(value);\r\n }\r\n /** The irradiance sh coeffecients */\r\n get irradianceSHFB() {\r\n return this._irradianceSHFB.get();\r\n }\r\n set irradianceSHFB(value) {\r\n this._irradianceSHFB.set(value);\r\n }\r\n /** The irradiance sh window */\r\n get irradianceWindow() {\r\n return this._irraidanceWindow;\r\n }\r\n set irradianceWindow(val) {\r\n this._irraidanceWindow = val;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder) {\r\n if (pb.shaderKind === 'fragment') {\r\n if (this.radianceMap) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP] = pb.texCube().uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD] = pb.float().uniform(0);\r\n }\r\n if (this.irradianceSHFB) {\r\n const tex = pb.tex2D();\r\n const formatInfo = getDevice()\r\n .getDeviceCaps()\r\n .textureCaps.getTextureFormatInfo(this.irradianceSHFB.getColorAttachments()[0].format);\r\n if (formatInfo && !formatInfo.filterable) {\r\n tex.sampleType('unfilterable-float');\r\n }\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH] = tex.uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW] = pb.vec3().uniform(0);\r\n } else if (this.irradianceSH) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH] = pb.vec4[9]().uniformBuffer(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW] = pb.vec3().uniform(0);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup) {\r\n if (this.radianceMap) {\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD, this.radianceMap.mipLevelCount - 1);\r\n bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP, this.radianceMap);\r\n }\r\n if (this.irradianceSHFB) {\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH,\r\n this.irradianceSHFB.getColorAttachments()[0],\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);\r\n } else if (this.irradianceSH) {\r\n bg.setBuffer(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH, this.irradianceSH);\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? (pb.textureSampleLevel(\r\n scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP],\r\n refl,\r\n pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])\r\n ).rgb as PBShaderExp)\r\n : (pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP], refl).rgb as PBShaderExp);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('Z_sh_Y0', [pb.vec3('v')], function () {\r\n this.$return(0.2820947917);\r\n });\r\n pb.func('Z_sh_Y1', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, -0.4886025119));\r\n });\r\n pb.func('Z_sh_Y2', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.z, 0.4886025119));\r\n });\r\n pb.func('Z_sh_Y3', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, -0.4886025119));\r\n });\r\n pb.func('Z_sh_Y4', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.y, 1.0925484306));\r\n });\r\n pb.func('Z_sh_Y5', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Z_sh_Y6', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.z, this.v.z, 3), 1), 0.3153915652));\r\n });\r\n pb.func('Z_sh_Y7', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Z_sh_Y8', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.x, this.v.x), pb.mul(this.v.y, this.v.y)), 0.5462742153));\r\n });\r\n pb.func('Z_sh_eval', [pb.vec3('v')], function () {\r\n this.$l.window = this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW];\r\n if (that.irradianceSHFB) {\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y0(this.v),\r\n this.window.x\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y1(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y2(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y3(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y4(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y5(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y6(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y7(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y8(this.v),\r\n this.window.z\r\n )\r\n );\r\n } else {\r\n this.$l.c = pb.mul(\r\n this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][0].xyz,\r\n this.Z_sh_Y0(this.v),\r\n this.window.x\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][1].xyz, this.Z_sh_Y1(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][2].xyz, this.Z_sh_Y2(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][3].xyz, this.Z_sh_Y3(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][4].xyz, this.Z_sh_Y4(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][5].xyz, this.Z_sh_Y5(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][6].xyz, this.Z_sh_Y6(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][7].xyz, this.Z_sh_Y7(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][8].xyz, this.Z_sh_Y8(this.v), this.window.z)\r\n );\r\n }\r\n this.$return(this.c);\r\n });\r\n return pb.getGlobalScope().Z_sh_eval(normal) as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return !!this._radianceMap.get();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return !!this._irradianceSH.get() || !!this._irradianceSHFB.get();\r\n }\r\n /**\r\n * Disposes the object and releases all GPU resources\r\n * @override\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._radianceMap.dispose();\r\n this._irradianceSH.dispose();\r\n this._irradianceSHFB.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Constant ambient light\r\n * @public\r\n */\r\nexport class EnvConstantAmbient extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_CONSTANT_AMBIENT = 'zConstantAmbient';\r\n /** @internal */\r\n private readonly _ambientColor: Vector4;\r\n /**\r\n * Creates an instance of EnvConstantAmbient\r\n * @param ambientColor - The ambient color\r\n */\r\n constructor(ambientColor?: Vector4) {\r\n super();\r\n this._ambientColor = ambientColor ? new Vector4(ambientColor) : new Vector4(0, 0, 0, 1);\r\n }\r\n /** The ambient color */\r\n get ambientColor(): Immutable<Vector4> {\r\n return this._ambientColor;\r\n }\r\n set ambientColor(ambientColor: Immutable<Vector4>) {\r\n if (ambientColor) {\r\n this._ambientColor.set(ambientColor);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'constant' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder) {\r\n if (pb.shaderKind === 'fragment') {\r\n pb.getGlobalScope()[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT] = pb.vec4().uniform(0);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup) {\r\n bg.setValue(EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT, this._ambientColor);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp) {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, _normal: PBShaderExp) {\r\n return scope[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT].rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Hemispheric ambient light\r\n * @public\r\n */\r\nexport class EnvHemisphericAmbient extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_AMBIENT_UP = 'zHemisphericAmbientUp';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_AMBIENT_DOWN = 'zHemisphericAmbientDown';\r\n /** @internal */\r\n private readonly _ambientUp: Vector4;\r\n /** @internal */\r\n private readonly _ambientDown: Vector4;\r\n /**\r\n * Creates an instance of EnvConstantAmbient\r\n * @param ambientUp - The upside ambient color\r\n * @param ambientDown - The downside ambient color\r\n */\r\n constructor(ambientUp: Vector4, ambientDown: Vector4) {\r\n super();\r\n this._ambientUp = new Vector4(ambientUp);\r\n this._ambientDown = new Vector4(ambientDown);\r\n }\r\n /** The upside ambient color */\r\n get ambientUp(): Immutable<Vector4> {\r\n return this._ambientUp;\r\n }\r\n set ambientUp(color: Immutable<Vector4>) {\r\n if (color) {\r\n this._ambientUp.set(color);\r\n }\r\n }\r\n /** The downside ambient color */\r\n get ambientDown(): Immutable<Vector4> {\r\n return this._ambientDown;\r\n }\r\n set ambientDown(color: Immutable<Vector4>) {\r\n if (color) {\r\n this._ambientDown.set(color);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'hemisphere' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder) {\r\n if (pb.shaderKind === 'fragment') {\r\n pb.getGlobalScope()[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP] = pb.vec4().uniform(0);\r\n pb.getGlobalScope()[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN] = pb.vec4().uniform(0);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup) {\r\n bg.setValue(EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP, this._ambientUp);\r\n bg.setValue(EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN, this._ambientDown);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, _roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const factor = pb.add(pb.mul(refl.y, 0.5), 0.5);\r\n return pb.mix(\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN],\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP],\r\n factor\r\n ).rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const factor = pb.add(pb.mul(normal.y, 0.5), 0.5);\r\n return pb.mix(\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN],\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP],\r\n factor\r\n ).rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n"],"names":["EnvironmentLighting","Disposable","EnvShIBL","UNIFORM_NAME_IBL_RADIANCE_MAP","UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD","UNIFORM_NAME_IBL_IRRADIANCE_SH","UNIFORM_NAME_IBL_IRRADIANCE_WINDOW","radianceMap","irradianceSH","irradianceSHFB","_radianceMap","DRef","_irradianceSH","_irradianceSHFB","_irraidanceWindow","Vector3","getType","get","tex","set","value","irradianceWindow","val","initShaderBindings","pb","shaderKind","getGlobalScope","texCube","uniform","float","tex2D","formatInfo","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","getColorAttachments","format","filterable","sampleType","vec3","vec4","uniformBuffer","updateBindGroup","bg","setValue","mipLevelCount","setTexture","fetchSampler","setBuffer","getRadiance","scope","refl","roughness","$builder","shaderCaps","supportShaderTextureLod","textureSampleLevel","mul","rgb","textureSample","getIrradiance","normal","that","func","$return","v","y","z","x","sub","$l","window","c","vec2","Z_sh_Y0","add","Z_sh_Y1","Z_sh_Y2","Z_sh_Y3","Z_sh_Y4","Z_sh_Y5","Z_sh_Y6","Z_sh_Y7","Z_sh_Y8","xyz","Z_sh_eval","hasRadiance","hasIrradiance","onDispose","dispose","EnvConstantAmbient","UNIFORM_NAME_CONSTANT_AMBIENT","ambientColor","_ambientColor","Vector4","_scope","_refl","_roughness","_normal","EnvHemisphericAmbient","UNIFORM_NAME_AMBIENT_UP","UNIFORM_NAME_AMBIENT_DOWN","ambientUp","ambientDown","_ambientUp","_ambientDown","color","factor","mix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"envlight.js","sources":["../../src/render/envlight.ts"],"sourcesContent":["import type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, DRef, Vector3 } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n TextureCube\r\n} from '@zephyr3d/device';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * Environment light type\r\n * @public\r\n */\r\nexport type EnvLightType = 'ibl' | 'hemisphere' | 'constant' | 'none';\r\n\r\n/**\r\n * Base class for any kind of environment light\r\n * @public\r\n */\r\nexport abstract class EnvironmentLighting extends Disposable {\r\n /**\r\n * The environment light type\r\n */\r\n abstract getType(): EnvLightType;\r\n /**\r\n * Initialize shader bindings\r\n * @param pb - The program builder\r\n */\r\n abstract initShaderBindings(pb: ProgramBuilder): void;\r\n /**\r\n * Updates the uniform values\r\n * @param bg - The bind group to be updated\r\n */\r\n abstract updateBindGroup(bg: BindGroup): void;\r\n /**\r\n * Get radiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param refl - Reflection vector\r\n * @param roughness - Surface roughness\r\n *\r\n * @returns The radiance for the fragment\r\n */\r\n abstract getRadiance(\r\n scope: PBInsideFunctionScope,\r\n refl: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): Nullable<PBShaderExp>;\r\n /**\r\n * Get Charlie-filtered sheen radiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param refl - Reflection vector\r\n * @param roughness - Sheen roughness\r\n *\r\n * @returns The sheen radiance for the fragment\r\n */\r\n abstract getSheenRadiance(\r\n scope: PBInsideFunctionScope,\r\n refl: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): Nullable<PBShaderExp>;\r\n /**\r\n * Get irradiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param normal - surface normal\r\n *\r\n * @returns The radiance for the fragment\r\n */\r\n abstract getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp): PBShaderExp;\r\n /**\r\n * Returns whether this environment lighting supports reflective light\r\n */\r\n abstract hasRadiance(): boolean;\r\n /**\r\n * Returns whether this environment lighting supports sheen reflective light\r\n */\r\n abstract hasSheenRadiance(): boolean;\r\n /**\r\n * Returns whether this environment lighting supports diffuse light\r\n */\r\n abstract hasIrradiance(): boolean;\r\n}\r\n\r\n/**\r\n * IBL with SH based environment lighting\r\n * @public\r\n */\r\nexport class EnvShIBL extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_RADIANCE_MAP = 'zIBLRadianceMap';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP = 'zIBLSheenRadianceMap';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD = 'zIBLRadianceMapMaxLOD';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_IRRADIANCE_SH = 'zIBLIrradianceSH';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_IRRADIANCE_WINDOW = 'zIBLIrradianceWindow';\r\n /** @internal */\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n /** @internal */\r\n private readonly _sheenRadianceMap: DRef<TextureCube>;\r\n /** @internal */\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n /** @internal */\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n /** @internal */\r\n private _irraidanceWindow: Vector3;\r\n /**\r\n * Creates an instance of EnvIBL\r\n * @param radianceMap - The radiance map\r\n * @param irradianceSH - The irradiance SH\r\n */\r\n constructor(\r\n radianceMap?: TextureCube,\r\n irradianceSH?: GPUDataBuffer,\r\n irradianceSHFB?: FrameBuffer,\r\n sheenRadianceMap?: TextureCube\r\n ) {\r\n super();\r\n this._radianceMap = new DRef(radianceMap || null);\r\n this._sheenRadianceMap = new DRef(sheenRadianceMap || null);\r\n this._irradianceSH = new DRef(irradianceSH || null);\r\n this._irradianceSHFB = new DRef(irradianceSHFB || null);\r\n this._irraidanceWindow = new Vector3();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'ibl' as const;\r\n }\r\n /** The radiance map */\r\n get radianceMap() {\r\n return this._radianceMap.get();\r\n }\r\n set radianceMap(tex) {\r\n this._radianceMap.set(tex);\r\n }\r\n /** The Charlie-filtered sheen radiance map */\r\n get sheenRadianceMap() {\r\n return this._sheenRadianceMap.get();\r\n }\r\n set sheenRadianceMap(tex) {\r\n this._sheenRadianceMap.set(tex);\r\n }\r\n /** The irradiance sh coeffecients */\r\n get irradianceSH() {\r\n return this._irradianceSH.get();\r\n }\r\n set irradianceSH(value) {\r\n this._irradianceSH.set(value);\r\n }\r\n /** The irradiance sh coeffecients */\r\n get irradianceSHFB() {\r\n return this._irradianceSHFB.get();\r\n }\r\n set irradianceSHFB(value) {\r\n this._irradianceSHFB.set(value);\r\n }\r\n /** The irradiance sh window */\r\n get irradianceWindow() {\r\n return this._irraidanceWindow;\r\n }\r\n set irradianceWindow(val) {\r\n this._irraidanceWindow = val;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder) {\r\n if (pb.shaderKind === 'fragment') {\r\n if (this.radianceMap) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP] = pb.texCube().uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD] = pb.float().uniform(0);\r\n }\r\n if (this.sheenRadianceMap) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP] = pb.texCube().uniform(0);\r\n }\r\n if (this.irradianceSHFB) {\r\n const tex = pb.tex2D();\r\n const formatInfo = getDevice()\r\n .getDeviceCaps()\r\n .textureCaps.getTextureFormatInfo(this.irradianceSHFB.getColorAttachments()[0].format);\r\n if (formatInfo && !formatInfo.filterable) {\r\n tex.sampleType('unfilterable-float');\r\n }\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH] = tex.uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW] = pb.vec3().uniform(0);\r\n } else if (this.irradianceSH) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH] = pb.vec4[9]().uniformBuffer(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW] = pb.vec3().uniform(0);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup) {\r\n if (this.radianceMap) {\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD, this.radianceMap.mipLevelCount - 1);\r\n bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP, this.radianceMap);\r\n }\r\n if (this.sheenRadianceMap) {\r\n bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP, this.sheenRadianceMap);\r\n }\r\n if (this.irradianceSHFB) {\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH,\r\n this.irradianceSHFB.getColorAttachments()[0],\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);\r\n } else if (this.irradianceSH) {\r\n bg.setBuffer(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH, this.irradianceSH);\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? (pb.textureSampleLevel(\r\n scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP],\r\n refl,\r\n pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])\r\n ).rgb as PBShaderExp)\r\n : (pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP], refl).rgb as PBShaderExp);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? (pb.textureSampleLevel(\r\n scope[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP],\r\n refl,\r\n pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])\r\n ).rgb as PBShaderExp)\r\n : (pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP], refl).rgb as PBShaderExp);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('Z_sh_Y0', [pb.vec3('v')], function () {\r\n this.$return(0.2820947917);\r\n });\r\n pb.func('Z_sh_Y1', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, -0.4886025119));\r\n });\r\n pb.func('Z_sh_Y2', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.z, 0.4886025119));\r\n });\r\n pb.func('Z_sh_Y3', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, -0.4886025119));\r\n });\r\n pb.func('Z_sh_Y4', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.y, 1.0925484306));\r\n });\r\n pb.func('Z_sh_Y5', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Z_sh_Y6', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.z, this.v.z, 3), 1), 0.3153915652));\r\n });\r\n pb.func('Z_sh_Y7', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Z_sh_Y8', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.x, this.v.x), pb.mul(this.v.y, this.v.y)), 0.5462742153));\r\n });\r\n pb.func('Z_sh_eval', [pb.vec3('v')], function () {\r\n this.$l.window = this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW];\r\n if (that.irradianceSHFB) {\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y0(this.v),\r\n this.window.x\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y1(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y2(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y3(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y4(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y5(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y6(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y7(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y8(this.v),\r\n this.window.z\r\n )\r\n );\r\n } else {\r\n this.$l.c = pb.mul(\r\n this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][0].xyz,\r\n this.Z_sh_Y0(this.v),\r\n this.window.x\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][1].xyz, this.Z_sh_Y1(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][2].xyz, this.Z_sh_Y2(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][3].xyz, this.Z_sh_Y3(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][4].xyz, this.Z_sh_Y4(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][5].xyz, this.Z_sh_Y5(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][6].xyz, this.Z_sh_Y6(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][7].xyz, this.Z_sh_Y7(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][8].xyz, this.Z_sh_Y8(this.v), this.window.z)\r\n );\r\n }\r\n this.$return(this.c);\r\n });\r\n return pb.getGlobalScope().Z_sh_eval(normal) as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return !!this._radianceMap.get();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return !!this._sheenRadianceMap.get();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return !!this._irradianceSH.get() || !!this._irradianceSHFB.get();\r\n }\r\n /**\r\n * Disposes the object and releases all GPU resources\r\n * @override\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._radianceMap.dispose();\r\n this._sheenRadianceMap.dispose();\r\n this._irradianceSH.dispose();\r\n this._irradianceSHFB.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Constant ambient light\r\n * @public\r\n */\r\nexport class EnvConstantAmbient extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_CONSTANT_AMBIENT = 'zConstantAmbient';\r\n /** @internal */\r\n private readonly _ambientColor: Vector4;\r\n /**\r\n * Creates an instance of EnvConstantAmbient\r\n * @param ambientColor - The ambient color\r\n */\r\n constructor(ambientColor?: Vector4) {\r\n super();\r\n this._ambientColor = ambientColor ? new Vector4(ambientColor) : new Vector4(0, 0, 0, 1);\r\n }\r\n /** The ambient color */\r\n get ambientColor(): Immutable<Vector4> {\r\n return this._ambientColor;\r\n }\r\n set ambientColor(ambientColor: Immutable<Vector4>) {\r\n if (ambientColor) {\r\n this._ambientColor.set(ambientColor);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'constant' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder) {\r\n if (pb.shaderKind === 'fragment') {\r\n pb.getGlobalScope()[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT] = pb.vec4().uniform(0);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup) {\r\n bg.setValue(EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT, this._ambientColor);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp) {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp) {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, _normal: PBShaderExp) {\r\n return scope[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT].rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Hemispheric ambient light\r\n * @public\r\n */\r\nexport class EnvHemisphericAmbient extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_AMBIENT_UP = 'zHemisphericAmbientUp';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_AMBIENT_DOWN = 'zHemisphericAmbientDown';\r\n /** @internal */\r\n private readonly _ambientUp: Vector4;\r\n /** @internal */\r\n private readonly _ambientDown: Vector4;\r\n /**\r\n * Creates an instance of EnvConstantAmbient\r\n * @param ambientUp - The upside ambient color\r\n * @param ambientDown - The downside ambient color\r\n */\r\n constructor(ambientUp: Vector4, ambientDown: Vector4) {\r\n super();\r\n this._ambientUp = new Vector4(ambientUp);\r\n this._ambientDown = new Vector4(ambientDown);\r\n }\r\n /** The upside ambient color */\r\n get ambientUp(): Immutable<Vector4> {\r\n return this._ambientUp;\r\n }\r\n set ambientUp(color: Immutable<Vector4>) {\r\n if (color) {\r\n this._ambientUp.set(color);\r\n }\r\n }\r\n /** The downside ambient color */\r\n get ambientDown(): Immutable<Vector4> {\r\n return this._ambientDown;\r\n }\r\n set ambientDown(color: Immutable<Vector4>) {\r\n if (color) {\r\n this._ambientDown.set(color);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'hemisphere' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder) {\r\n if (pb.shaderKind === 'fragment') {\r\n pb.getGlobalScope()[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP] = pb.vec4().uniform(0);\r\n pb.getGlobalScope()[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN] = pb.vec4().uniform(0);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup) {\r\n bg.setValue(EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP, this._ambientUp);\r\n bg.setValue(EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN, this._ambientDown);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, _roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const factor = pb.add(pb.mul(refl.y, 0.5), 0.5);\r\n return pb.mix(\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN],\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP],\r\n factor\r\n ).rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n return this.getRadiance(scope, refl, roughness);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const factor = pb.add(pb.mul(normal.y, 0.5), 0.5);\r\n return pb.mix(\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN],\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP],\r\n factor\r\n ).rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n"],"names":["EnvironmentLighting","Disposable","EnvShIBL","UNIFORM_NAME_IBL_RADIANCE_MAP","UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP","UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD","UNIFORM_NAME_IBL_IRRADIANCE_SH","UNIFORM_NAME_IBL_IRRADIANCE_WINDOW","radianceMap","irradianceSH","irradianceSHFB","sheenRadianceMap","_radianceMap","DRef","_sheenRadianceMap","_irradianceSH","_irradianceSHFB","_irraidanceWindow","Vector3","getType","get","tex","set","value","irradianceWindow","val","initShaderBindings","pb","shaderKind","getGlobalScope","texCube","uniform","float","tex2D","formatInfo","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","getColorAttachments","format","filterable","sampleType","vec3","vec4","uniformBuffer","updateBindGroup","bg","setValue","mipLevelCount","setTexture","fetchSampler","setBuffer","getRadiance","scope","refl","roughness","$builder","shaderCaps","supportShaderTextureLod","textureSampleLevel","mul","rgb","textureSample","getSheenRadiance","getIrradiance","normal","that","func","$return","v","y","z","x","sub","$l","window","c","vec2","Z_sh_Y0","add","Z_sh_Y1","Z_sh_Y2","Z_sh_Y3","Z_sh_Y4","Z_sh_Y5","Z_sh_Y6","Z_sh_Y7","Z_sh_Y8","xyz","Z_sh_eval","hasRadiance","hasSheenRadiance","hasIrradiance","onDispose","dispose","EnvConstantAmbient","UNIFORM_NAME_CONSTANT_AMBIENT","ambientColor","_ambientColor","Vector4","_scope","_refl","_roughness","_normal","EnvHemisphericAmbient","UNIFORM_NAME_AMBIENT_UP","UNIFORM_NAME_AMBIENT_DOWN","ambientUp","ambientDown","_ambientUp","_ambientDown","color","factor","mix"],"mappings":"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"}
|
package/dist/render/sky.js
CHANGED
|
@@ -397,6 +397,14 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
|
|
|
397
397
|
}
|
|
398
398
|
return this._radianceMap.get();
|
|
399
399
|
}
|
|
400
|
+
/**
|
|
401
|
+
* Radiance map of the sky reused for sheen.
|
|
402
|
+
*
|
|
403
|
+
* @remarks
|
|
404
|
+
* Dynamic sky is smooth enough that the GGX-prefiltered radiance map is a practical approximation for sheen.
|
|
405
|
+
*/ get sheenRadianceMap() {
|
|
406
|
+
return this.radianceMap;
|
|
407
|
+
}
|
|
400
408
|
/** @internal */ get atmosphereParams() {
|
|
401
409
|
return this._atmosphereParams;
|
|
402
410
|
}
|
|
@@ -541,6 +549,7 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
|
|
|
541
549
|
this.renderSkyDistantLut(ctx, this._bakedSkyboxTexture.get());
|
|
542
550
|
if (ctx.scene.env.light.radianceMap && (ctx.scene.env.light.radianceMap === this.radianceMap || this._irradianceSH.get() && ctx.scene.env.light.irradianceSH === this.irradianceSH || this._irradianceSHFB.get() && ctx.scene.env.light.irradianceSHFB === this.irradianceSHFB)) {
|
|
543
551
|
prefilterCubemap(this._bakedSkyboxTexture.get(), 'ggx', this.radianceFramebuffer, this._radianceConvSamples);
|
|
552
|
+
ctx.scene.env.light.sheenRadianceMap = this.radianceMap;
|
|
544
553
|
this._shProjector.projectCubemapToTexture(this._bakedSkyboxTexture.get(), this.irradianceSHFB);
|
|
545
554
|
ctx.scene.env.light.irradianceSHFB = this.irradianceSHFB;
|
|
546
555
|
ctx.scene.env.light.irradianceSH = null;
|