@babylonjs/addons 8.50.0 → 8.50.2

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.
@@ -14,11 +14,8 @@ import { TransmittanceLut } from "./transmittanceLut.js";
14
14
  import { UniformBuffer } from "@babylonjs/core/Materials/uniformBuffer.js";
15
15
  import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
16
16
  import "./Shaders/compositeAerialPerspective.fragment.js";
17
- import "./Shaders/compositeSky.fragment.js";
18
17
  import "./Shaders/compositeGlobeAtmosphere.fragment.js";
19
18
  import "./Shaders/fullscreenTriangle.vertex.js";
20
- import "./Shaders/skyView.fragment.js";
21
- import "./Shaders/aerialPerspective.fragment.js";
22
19
  import "./Shaders/ShadersInclude/atmosphereFragmentDeclaration.js";
23
20
  import "./Shaders/ShadersInclude/atmosphereFunctions.js";
24
21
  import "./Shaders/ShadersInclude/atmosphereUboDeclaration.js";
@@ -1155,9 +1152,11 @@ export class Atmosphere {
1155
1152
  * @param samplerNames - The sampler names to use.
1156
1153
  * @param uniformBuffers - The uniform buffers to use.
1157
1154
  * @param defineNames - Array of define names to prepend with "#define ".
1155
+ * @param useWebGPU - Whether to use WebGPU shaders.
1156
+ * @param extraInitializations - Optional extra initializations callback for loading shaders.
1158
1157
  * @returns The effect wrapper.
1159
1158
  */
1160
- const CreateEffectWrapper = (engine, name, fragmentShader, uniformNames, samplerNames, uniformBuffers, defineNames) => {
1159
+ const CreateEffectWrapper = (engine, name, fragmentShader, uniformNames, samplerNames, uniformBuffers, defineNames, useWebGPU = false, extraInitializations) => {
1161
1160
  const defines = defineNames?.map((defineName) => `#define ${defineName}`) ?? [];
1162
1161
  return new EffectWrapper({
1163
1162
  engine,
@@ -1170,6 +1169,8 @@ const CreateEffectWrapper = (engine, name, fragmentShader, uniformNames, sampler
1170
1169
  samplerNames,
1171
1170
  defines,
1172
1171
  useShaderStore: true,
1172
+ shaderLanguage: useWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
1173
+ extraInitializations,
1173
1174
  });
1174
1175
  };
1175
1176
  const CreateMultiScatteringEffectWrapper = (engine, uniformBuffer, groundAlbedo) => {
@@ -1194,7 +1195,7 @@ const CreateMultiScatteringEffectWrapper = (engine, uniformBuffer, groundAlbedo)
1194
1195
  useShaderStore: true,
1195
1196
  shaderLanguage: useWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
1196
1197
  extraInitializations: (_, list) => {
1197
- list.push(Promise.all(useWebGPU
1198
+ list.push(...(useWebGPU
1198
1199
  ? [import("./ShadersWGSL/fullscreenTriangle.vertex.js"), import("./ShadersWGSL/multiScattering.fragment.js")]
1199
1200
  : [import("./Shaders/fullscreenTriangle.vertex.js"), import("./Shaders/multiScattering.fragment.js")]));
1200
1201
  },
@@ -1250,11 +1251,8 @@ const DrawEffect = (engine, effectRenderer, effectWrapper, renderTarget, drawCal
1250
1251
  }
1251
1252
  const currentDepthFunction = engine.getDepthFunction();
1252
1253
  engine.setDepthFunction(depthFunction);
1253
- // Likewise with the alpha mode, which can affect depth state too.
1254
1254
  const currentAlphaMode = engine.getAlphaMode();
1255
- if (alphaMode !== Constants.ALPHA_DISABLE) {
1256
- engine.setAlphaMode(alphaMode);
1257
- }
1255
+ engine.setAlphaMode(alphaMode, true);
1258
1256
  const currentCull = engine.depthCullingState.cull;
1259
1257
  effectRenderer.setViewport();
1260
1258
  effectRenderer.applyEffectWrapper(effectWrapper, depthTest); // Note, stencil is false by default.
@@ -1265,7 +1263,7 @@ const DrawEffect = (engine, effectRenderer, effectWrapper, renderTarget, drawCal
1265
1263
  drawCallback(effectRenderer, renderTarget?.renderTarget, effect, engine);
1266
1264
  // Restore state (order matters!)
1267
1265
  engine.depthCullingState.cull = currentCull;
1268
- engine.setAlphaMode(currentAlphaMode);
1266
+ engine.setAlphaMode(currentAlphaMode, true);
1269
1267
  if (currentDepthWrite !== undefined) {
1270
1268
  engine.setDepthWrite(currentDepthWrite);
1271
1269
  }
@@ -1289,6 +1287,8 @@ const DrawEffect = (engine, effectRenderer, effectWrapper, renderTarget, drawCal
1289
1287
  */
1290
1288
  const CreateSkyCompositorEffectWrapper = (engine, uniformBuffer, isSkyViewLutEnabled, isLinearSpaceComposition, applyApproximateTransmittance) => {
1291
1289
  const useUbo = uniformBuffer.useUbo;
1290
+ const useWebGPU = engine.isWebGPU && !EffectWrapper.ForceGLSL;
1291
+ const uboName = useWebGPU ? "atmosphere" : uniformBuffer.name;
1292
1292
  const defines = ["POSITION_VEC2", "COMPUTE_WORLD_RAY"];
1293
1293
  if (isSkyViewLutEnabled) {
1294
1294
  defines.push("USE_SKY_VIEW_LUT");
@@ -1300,7 +1300,11 @@ const CreateSkyCompositorEffectWrapper = (engine, uniformBuffer, isSkyViewLutEna
1300
1300
  defines.push("APPLY_TRANSMITTANCE_BLENDING");
1301
1301
  }
1302
1302
  const textures = isSkyViewLutEnabled ? ["skyViewLut"] : ["transmittanceLut", "multiScatteringLut"];
1303
- return CreateEffectWrapper(engine, "atmo-skyCompositor", "compositeSky", ["depth", ...(useUbo ? [] : uniformBuffer.getUniformNames())], textures, useUbo ? [uniformBuffer.name] : [], defines);
1303
+ return CreateEffectWrapper(engine, "atmo-skyCompositor", "compositeSky", ["depth", ...(useUbo ? [] : uniformBuffer.getUniformNames())], textures, useUbo ? [uboName] : [], defines, useWebGPU, (_, list) => {
1304
+ list.push(...(useWebGPU
1305
+ ? [import("./ShadersWGSL/fullscreenTriangle.vertex.js"), import("./ShadersWGSL/compositeSky.fragment.js")]
1306
+ : [import("./Shaders/fullscreenTriangle.vertex.js"), import("./Shaders/compositeSky.fragment.js")]));
1307
+ });
1304
1308
  };
1305
1309
  /**
1306
1310
  * Creates an EffectWrapper for the aerial perspective LUT.
@@ -1308,7 +1312,15 @@ const CreateSkyCompositorEffectWrapper = (engine, uniformBuffer, isSkyViewLutEna
1308
1312
  * @param uniformBuffer - The uniform buffer to use.
1309
1313
  * @returns The created EffectWrapper.
1310
1314
  */
1311
- const CreateAerialPerspectiveEffectWrapper = (engine, uniformBuffer) => CreateEffectWrapper(engine, "atmo-aerialPerspective", "aerialPerspective", ["layerIdx", "depth", ...(uniformBuffer.useUbo ? [] : uniformBuffer.getUniformNames())], ["transmittanceLut", "multiScatteringLut"], uniformBuffer.useUbo ? [uniformBuffer.name] : [], ["POSITION_VEC2", "COMPUTE_WORLD_RAY"]);
1315
+ const CreateAerialPerspectiveEffectWrapper = (engine, uniformBuffer) => {
1316
+ const useWebGPU = engine.isWebGPU && !EffectWrapper.ForceGLSL;
1317
+ const uboName = useWebGPU ? "atmosphere" : uniformBuffer.name;
1318
+ return CreateEffectWrapper(engine, "atmo-aerialPerspective", "aerialPerspective", ["layerIdx", ...(uniformBuffer.useUbo ? [] : uniformBuffer.getUniformNames())], ["transmittanceLut", "multiScatteringLut"], uniformBuffer.useUbo ? [uboName] : [], ["POSITION_VEC2", "COMPUTE_WORLD_RAY"], useWebGPU, (_, list) => {
1319
+ list.push(...(useWebGPU
1320
+ ? [import("./ShadersWGSL/fullscreenTriangle.vertex.js"), import("./ShadersWGSL/aerialPerspective.fragment.js")]
1321
+ : [import("./Shaders/fullscreenTriangle.vertex.js"), import("./Shaders/aerialPerspective.fragment.js")]));
1322
+ });
1323
+ };
1312
1324
  /**
1313
1325
  * Creates an EffectWrapper for the aerial perspective compositor.
1314
1326
  * @param engine - The engine to use.
@@ -1399,5 +1411,13 @@ const CreateGlobeAtmosphereCompositorEffectWrapper = (engine, uniformBuffer, isS
1399
1411
  * @param uniformBuffer - The uniform buffer to use.
1400
1412
  * @returns The created EffectWrapper.
1401
1413
  */
1402
- const CreateSkyViewEffectWrapper = (engine, uniformBuffer) => CreateEffectWrapper(engine, "atmo-skyView", "skyView", ["depth", ...(uniformBuffer.useUbo ? [] : uniformBuffer.getUniformNames())], ["transmittanceLut", "multiScatteringLut"], uniformBuffer.useUbo ? [uniformBuffer.name] : [], ["POSITION_VEC2"]);
1414
+ const CreateSkyViewEffectWrapper = (engine, uniformBuffer) => {
1415
+ const useWebGPU = engine.isWebGPU && !EffectWrapper.ForceGLSL;
1416
+ const uboName = useWebGPU ? "atmosphere" : uniformBuffer.name;
1417
+ return CreateEffectWrapper(engine, "atmo-skyView", "skyView", ["depth", ...(uniformBuffer.useUbo ? [] : uniformBuffer.getUniformNames())], ["transmittanceLut", "multiScatteringLut"], uniformBuffer.useUbo ? [uboName] : [], ["POSITION_VEC2"], useWebGPU, (_, list) => {
1418
+ list.push(...(useWebGPU
1419
+ ? [import("./ShadersWGSL/fullscreenTriangle.vertex.js"), import("./ShadersWGSL/skyView.fragment.js")]
1420
+ : [import("./Shaders/fullscreenTriangle.vertex.js"), import("./Shaders/skyView.fragment.js")]));
1421
+ });
1422
+ };
1403
1423
  //# sourceMappingURL=atmosphere.js.map