@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.
Files changed (102) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring_modifier.js.map +1 -1
  38. package/dist/animation/translationtrack.js +3 -0
  39. package/dist/animation/translationtrack.js.map +1 -1
  40. package/dist/app/engine.js +171 -107
  41. package/dist/app/engine.js.map +1 -1
  42. package/dist/app/scriptregistry.js +251 -80
  43. package/dist/app/scriptregistry.js.map +1 -1
  44. package/dist/asset/assetmanager.js +344 -365
  45. package/dist/asset/assetmanager.js.map +1 -1
  46. package/dist/asset/loaders/gltf/gltf_loader.js +17 -14
  47. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  48. package/dist/asset/loaders/loader.js +1 -6
  49. package/dist/asset/loaders/loader.js.map +1 -1
  50. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  51. package/dist/asset/model.js +1000 -131
  52. package/dist/asset/model.js.map +1 -1
  53. package/dist/avatar/wardrobe.js +474 -0
  54. package/dist/avatar/wardrobe.js.map +1 -0
  55. package/dist/index.d.ts +1125 -199
  56. package/dist/index.js +3 -2
  57. package/dist/index.js.map +1 -1
  58. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  59. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  60. package/dist/material/mixins/pbr/common.js +72 -15
  61. package/dist/material/mixins/pbr/common.js.map +1 -1
  62. package/dist/material/msdf_text_sprite.js +4 -4
  63. package/dist/material/msdf_text_sprite.js.map +1 -1
  64. package/dist/material/pbrblueprint.js +102 -102
  65. package/dist/material/pbrblueprint.js.map +1 -1
  66. package/dist/render/envlight.js +54 -1
  67. package/dist/render/envlight.js.map +1 -1
  68. package/dist/render/sky.js +9 -0
  69. package/dist/render/sky.js.map +1 -1
  70. package/dist/scene/batchgroup.js +11 -13
  71. package/dist/scene/batchgroup.js.map +1 -1
  72. package/dist/scene/environment.js +15 -2
  73. package/dist/scene/environment.js.map +1 -1
  74. package/dist/scene/mesh.js +79 -16
  75. package/dist/scene/mesh.js.map +1 -1
  76. package/dist/scene/scene.js +1 -0
  77. package/dist/scene/scene.js.map +1 -1
  78. package/dist/scene/scene_node.js +203 -2
  79. package/dist/scene/scene_node.js.map +1 -1
  80. package/dist/text/font/font_asset.js.map +1 -1
  81. package/dist/text/msdf/generator.js.map +1 -1
  82. package/dist/text/msdf/shape.js +4 -1
  83. package/dist/text/msdf/shape.js.map +1 -1
  84. package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
  85. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
  86. package/dist/utility/blueprint/material/inputs.js +1157 -1154
  87. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  88. package/dist/utility/bounding_volume.js.map +1 -1
  89. package/dist/utility/pmrem.js +34 -8
  90. package/dist/utility/pmrem.js.map +1 -1
  91. package/dist/utility/serialization/manager.js +22 -9
  92. package/dist/utility/serialization/manager.js.map +1 -1
  93. package/dist/utility/serialization/scene/animation.js +700 -7
  94. package/dist/utility/serialization/scene/animation.js.map +1 -1
  95. package/dist/utility/serialization/scene/mesh.js +64 -4
  96. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  97. package/dist/utility/serialization/scene/node.js +187 -8
  98. package/dist/utility/serialization/scene/node.js.map +1 -1
  99. package/dist/utility/serialization/types.js.map +1 -1
  100. package/dist/utility/textures/sheenlut.js +138 -0
  101. package/dist/utility/textures/sheenlut.js.map +1 -0
  102. package/package.json +2 -2
@@ -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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"}
@@ -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;