Skip to content

Commit aece67e

Browse files
author
Mike Bond
committed
Fixes for vis tests
1 parent 828529a commit aece67e

File tree

3 files changed

+47
-35
lines changed

3 files changed

+47
-35
lines changed

packages/dev/core/src/Materials/materialHelper.functions.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,7 @@ export function PrepareDefinesForLights(scene: Scene, mesh: AbstractMesh, define
741741
* @param realTimeFiltering Whether realtime filting of IBL texture is being used
742742
* @param realTimeFilteringQuality The quality of realtime filtering
743743
* @param forceSHInVertex Whether the SH are handled in the vertex shader
744+
* @returns true if the defines were updated
744745
*/
745746
export function PrepareDefinesForIBL(
746747
scene: Scene,
@@ -749,10 +750,10 @@ export function PrepareDefinesForIBL(
749750
realTimeFiltering: boolean = false,
750751
realTimeFilteringQuality: number = Constants.TEXTURE_FILTERING_QUALITY_LOW,
751752
forceSHInVertex: boolean = false
752-
) {
753+
): boolean {
753754
if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {
754755
if (!reflectionTexture.isReadyOrNotBlocking()) {
755-
return;
756+
return false;
756757
}
757758
defines.REFLECTION = true;
758759
defines.GAMMAREFLECTION = reflectionTexture.gammaSpace;
@@ -864,6 +865,7 @@ export function PrepareDefinesForIBL(
864865
defines.RGBDREFLECTION = false;
865866
defines.LINEARSPECULARREFLECTION = false;
866867
}
868+
return true;
867869
}
868870

869871
/**

packages/dev/core/src/Materials/standardMaterial.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -827,9 +827,16 @@ export class StandardMaterial extends StandardMaterialBase {
827827
} else {
828828
defines.OPACITY = false;
829829
}
830-
defines.ROUGHNESS = this._roughness > 0;
831-
defines.REFLECTIONOVERALPHA = this._useReflectionOverAlpha;
832-
PrepareDefinesForIBL(scene, this._reflectionTexture, defines);
830+
if (this._reflectionTexture && StandardMaterial.ReflectionTextureEnabled) {
831+
defines.ROUGHNESS = this._roughness > 0;
832+
defines.REFLECTIONOVERALPHA = this._useReflectionOverAlpha;
833+
} else {
834+
defines.ROUGHNESS = false;
835+
defines.REFLECTIONOVERALPHA = false;
836+
}
837+
if (!PrepareDefinesForIBL(scene, this._reflectionTexture, defines)) {
838+
return false;
839+
}
833840

834841
if (this._emissiveTexture && StandardMaterial.EmissiveTextureEnabled) {
835842
if (!this._emissiveTexture.isReadyOrNotBlocking()) {
@@ -1471,6 +1478,9 @@ export class StandardMaterial extends StandardMaterialBase {
14711478
}
14721479

14731480
BindIBLParameters(scene, defines, ubo, this._reflectionTexture, false, false, true);
1481+
if (!this._reflectionTexture || !StandardMaterial.ReflectionTextureEnabled) {
1482+
ubo.updateFloat2("vReflectionInfos", 0.0, this.roughness);
1483+
}
14741484

14751485
if (this._emissiveTexture && StandardMaterial.EmissiveTextureEnabled) {
14761486
ubo.updateFloat2("vEmissiveInfos", this._emissiveTexture.coordinatesIndex, this._emissiveTexture.level);

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_transmission.ts

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -397,11 +397,14 @@ export class KHR_materials_transmission implements IGLTFLoaderExtension {
397397
if (!(babylonMaterial instanceof PBRMaterialClass)) {
398398
throw new Error(`${context}: Material type not supported`);
399399
}
400+
if (useOpenPBR) {
401+
return Promise.resolve();
402+
}
400403

401404
let transmissionWeight = 0.0;
402405
let transmissionWeightTexture: Nullable<BaseTexture> = null;
403406

404-
const promises = new Array<Promise<any>>();
407+
let texturePromise = new Promise<Nullable<BaseTexture>>((resolve) => resolve(null));
405408
if (extension.transmissionFactor !== undefined) {
406409
transmissionWeight = extension.transmissionFactor;
407410
} else {
@@ -410,43 +413,40 @@ export class KHR_materials_transmission implements IGLTFLoaderExtension {
410413
if (extension.transmissionTexture) {
411414
(extension.transmissionTexture as ITextureInfo).nonColorData = true;
412415
// eslint-disable-next-line github/no-then
413-
promises.push(
414-
this._loader.loadTextureInfoAsync(`${context}/transmissionTexture`, extension.transmissionTexture, (texture: BaseTexture) => {
415-
texture.name = `${babylonMaterial.name} (Transmission)`;
416-
transmissionWeightTexture = texture;
417-
})
418-
);
416+
texturePromise = this._loader.loadTextureInfoAsync(`${context}/transmissionTexture`, extension.transmissionTexture, (texture: BaseTexture) => {
417+
texture.name = `${babylonMaterial.name} (Transmission)`;
418+
transmissionWeightTexture = texture;
419+
});
419420
}
420421

421-
// eslint-disable-next-line github/no-then
422-
return Promise.all(promises).then(() => {
423-
if (useOpenPBR) {
424-
return;
425-
}
426-
const pbrMaterial = babylonMaterial as PBRMaterial;
422+
const pbrMaterial = babylonMaterial as PBRMaterial;
427423

428-
// Enables "refraction" texture which represents transmitted light.
429-
pbrMaterial.subSurface.isRefractionEnabled = transmissionWeight !== 0;
424+
// Enables "refraction" texture which represents transmitted light.
425+
pbrMaterial.subSurface.isRefractionEnabled = transmissionWeight !== 0;
430426

431-
// Since this extension models thin-surface transmission only, we must make IOR = 1.0
432-
pbrMaterial.subSurface.volumeIndexOfRefraction = 1.0;
427+
// Since this extension models thin-surface transmission only, we must make IOR = 1.0
428+
pbrMaterial.subSurface.volumeIndexOfRefraction = 1.0;
433429

434-
// Albedo colour will tint transmission.
435-
pbrMaterial.subSurface.useAlbedoToTintRefraction = true;
430+
// Albedo colour will tint transmission.
431+
pbrMaterial.subSurface.useAlbedoToTintRefraction = true;
436432

437-
pbrMaterial.subSurface.refractionIntensity = transmissionWeight;
433+
pbrMaterial.subSurface.refractionIntensity = transmissionWeight;
438434

439-
if (transmissionWeight) {
440-
const scene = pbrMaterial.getScene() as unknown as ITransmissionHelperHolder;
441-
if (pbrMaterial.subSurface.refractionIntensity && !scene._transmissionHelper) {
442-
new TransmissionHelper({}, pbrMaterial.getScene());
443-
} else if (pbrMaterial.subSurface.refractionIntensity && !scene._transmissionHelper?._isRenderTargetValid()) {
444-
// If the render target is not valid, recreate it.
445-
scene._transmissionHelper?._setupRenderTargets();
446-
}
435+
if (transmissionWeight) {
436+
const scene = pbrMaterial.getScene() as unknown as ITransmissionHelperHolder;
437+
if (pbrMaterial.subSurface.refractionIntensity && !scene._transmissionHelper) {
438+
new TransmissionHelper({}, pbrMaterial.getScene());
439+
} else if (pbrMaterial.subSurface.refractionIntensity && !scene._transmissionHelper?._isRenderTargetValid()) {
440+
// If the render target is not valid, recreate it.
441+
scene._transmissionHelper?._setupRenderTargets();
447442
}
448-
pbrMaterial.subSurface.minimumThickness = 0.0;
449-
pbrMaterial.subSurface.maximumThickness = 0.0;
443+
}
444+
445+
pbrMaterial.subSurface.minimumThickness = 0.0;
446+
pbrMaterial.subSurface.maximumThickness = 0.0;
447+
448+
// eslint-disable-next-line github/no-then
449+
return texturePromise.then(() => {
450450
pbrMaterial.subSurface.refractionIntensityTexture = transmissionWeightTexture;
451451
pbrMaterial.subSurface.useGltfStyleTextures = true;
452452
});

0 commit comments

Comments
 (0)