Skip to content

Commit 5b2c879

Browse files
author
Mike Bond
committed
Remove pbrBaseMaterial as base class for PBR2
1 parent c6d96af commit 5b2c879

17 files changed

+1570
-377
lines changed

packages/dev/core/src/Materials/Background/backgroundMaterial.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -929,7 +929,7 @@ export class BackgroundMaterial extends BackgroundMaterialBase {
929929
BindTextureMatrix(this._diffuseTexture, this._uniformBuffer, "diffuse");
930930
}
931931

932-
BindIBLParameters(scene, defines, this._uniformBuffer, reflectionTexture);
932+
BindIBLParameters(scene, defines, this._uniformBuffer, reflectionTexture, false, true);
933933
}
934934

935935
if (this.shadowLevel > 0) {

packages/dev/core/src/Materials/PBR/pbr2Material.ts

Lines changed: 1523 additions & 342 deletions
Large diffs are not rendered by default.

packages/dev/core/src/Materials/PBR/pbrBaseMaterial.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1910,7 +1910,7 @@ export abstract class PBRBaseMaterial extends PBRBaseMaterialBase {
19101910
ubo.addUniform("reflectanceMatrix", 16);
19111911

19121912
ubo.addUniform("cameraInfo", 4);
1913-
PrepareUniformLayoutForIBL(ubo, true, true, true);
1913+
PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);
19141914
super.buildUniformLayout();
19151915
}
19161916

@@ -2057,7 +2057,7 @@ export abstract class PBRBaseMaterial extends PBRBaseMaterialBase {
20572057
}
20582058
}
20592059

2060-
BindIBLParameters(scene, defines, ubo, reflectionTexture, this.realTimeFiltering, this._reflectionColor);
2060+
BindIBLParameters(scene, defines, ubo, reflectionTexture, this.realTimeFiltering, true, true, true, true, true, this._reflectionColor);
20612061

20622062
// Point size
20632063
if (this.pointsCloud) {

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

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,11 @@ export function BindSceneUniformBuffer(effect: Effect, sceneUbo: UniformBuffer):
276276
* @param ubo The uniform buffer to update
277277
* @param reflectionTexture The IBL texture
278278
* @param realTimeFiltering Whether realtime filtering of IBL texture is being used
279+
* @param supportTextureInfo Whether the texture info is supported
280+
* @param supportLocalProjection Whether local projection is supported
281+
* @param usePBR Whether PBR is being used
282+
* @param supportSH Whether spherical harmonics are supported
283+
* @param useColor Whether to use the reflection color
279284
* @param reflectionColor The color to use for the reflection
280285
*/
281286
export function BindIBLParameters(
@@ -284,14 +289,19 @@ export function BindIBLParameters(
284289
ubo: UniformBuffer,
285290
reflectionTexture: Nullable<BaseTexture> = null,
286291
realTimeFiltering: boolean = false,
292+
supportTextureInfo: boolean = false,
293+
supportLocalProjection: boolean = false,
294+
usePBR: boolean = false,
295+
supportSH: boolean = false,
296+
useColor: boolean = false,
287297
reflectionColor: Color3 = Color3.White()
288298
): void {
289299
if (scene.texturesEnabled) {
290300
if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {
291301
ubo.updateMatrix("reflectionMatrix", reflectionTexture.getReflectionTextureMatrix());
292302
ubo.updateFloat2("vReflectionInfos", reflectionTexture.level * scene.iblIntensity, 0);
293303

294-
if ((<any>reflectionTexture).boundingBoxSize) {
304+
if (supportLocalProjection && (<any>reflectionTexture).boundingBoxSize) {
295305
const cubeTexture = <CubeTexture>reflectionTexture;
296306

297307
ubo.updateVector3("vReflectionPosition", cubeTexture.boundingBoxPosition);
@@ -303,7 +313,7 @@ export function BindIBLParameters(
303313
ubo.updateFloat2("vReflectionFilteringInfo", width, Math.log2(width));
304314
}
305315

306-
if (!defines.USEIRRADIANCEMAP) {
316+
if (supportSH && !defines.USEIRRADIANCEMAP) {
307317
const polynomials = reflectionTexture.sphericalPolynomial;
308318
if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {
309319
if (defines.SPHERICAL_HARMONICS) {
@@ -329,17 +339,21 @@ export function BindIBLParameters(
329339
ubo.updateFloat3("vSphericalZX", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);
330340
}
331341
}
332-
} else {
342+
} else if (usePBR) {
333343
// If we're using an irradiance map with a dominant direction assigned, set it.
334344
if (defines.USEIRRADIANCEMAP && defines.USE_IRRADIANCE_DOMINANT_DIRECTION) {
335345
ubo.updateVector3("vReflectionDominantDirection", reflectionTexture.irradianceTexture!._dominantDirection!);
336346
}
337347
}
338348

339-
ubo.updateFloat3("vReflectionMicrosurfaceInfos", reflectionTexture.getSize().width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);
349+
if (supportTextureInfo) {
350+
ubo.updateFloat3("vReflectionMicrosurfaceInfos", reflectionTexture.getSize().width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);
351+
}
340352
}
341353
}
342-
ubo.updateColor3("vReflectionColor", reflectionColor);
354+
if (useColor) {
355+
ubo.updateColor3("vReflectionColor", reflectionColor);
356+
}
343357
}
344358

345359
/**
@@ -1468,15 +1482,17 @@ export function PrepareUniformsAndSamplersList(uniformsListOrOptions: string[] |
14681482
* @param ubo Add uniforms to UBO
14691483
* @param supportTextureInfo Add uniforms for texture info if true
14701484
* @param supportLocalProjection Add uniforms for local projection if true
1471-
* @param useAdvanced Add advanced uniforms for IBL if true
1485+
* @param usePBR Add uniforms for IBL if true
14721486
* @param supportSH Add uniforms for spherical harmonics if true
1487+
* @param useColor Add uniforms for reflection color if true
14731488
*/
14741489
export function PrepareUniformLayoutForIBL(
14751490
ubo: UniformBuffer,
14761491
supportTextureInfo: boolean = false,
14771492
supportLocalProjection: boolean = false,
1478-
useAdvanced: boolean = false,
1479-
supportSH: boolean = false
1493+
usePBR: boolean = false,
1494+
supportSH: boolean = false,
1495+
useColor: boolean = false
14801496
): void {
14811497
ubo.addUniform("vReflectionInfos", 2);
14821498
ubo.addUniform("reflectionMatrix", 16);
@@ -1489,12 +1505,15 @@ export function PrepareUniformLayoutForIBL(
14891505
ubo.addUniform("vReflectionSize", 3);
14901506
}
14911507

1492-
if (useAdvanced) {
1508+
if (usePBR) {
14931509
ubo.addUniform("vReflectionFilteringInfo", 2);
1494-
ubo.addUniform("vReflectionColor", 3);
14951510
ubo.addUniform("vReflectionDominantDirection", 3);
14961511
}
14971512

1513+
if (useColor) {
1514+
ubo.addUniform("vReflectionColor", 3);
1515+
}
1516+
14981517
if (supportSH) {
14991518
ubo.addUniform("vSphericalL00", 3);
15001519
ubo.addUniform("vSphericalL1_1", 3);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1467,7 +1467,7 @@ export class StandardMaterial extends StandardMaterialBase {
14671467
ubo.updateFloat("alphaCutOff", this.alphaCutOff);
14681468
}
14691469

1470-
BindIBLParameters(scene, defines, ubo, this._reflectionTexture);
1470+
BindIBLParameters(scene, defines, ubo, this._reflectionTexture, false, true, true);
14711471

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

packages/dev/core/src/Shaders/ShadersInclude/pbrUboDeclaration.fx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ uniform Material {
6767
vec3 vReflectionPosition;
6868
vec3 vReflectionSize;
6969
vec2 vReflectionFilteringInfo;
70-
vec3 vReflectionColor;
7170
vec3 vReflectionDominantDirection;
71+
vec3 vReflectionColor;
7272

7373
vec3 vSphericalL00;
7474
vec3 vSphericalL1_1;

packages/dev/core/src/ShadersWGSL/ShadersInclude/pbrUboDeclaration.fx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ uniform vReflectionMicrosurfaceInfos: vec3f;
4242
uniform vReflectionPosition: vec3f;
4343
uniform vReflectionSize: vec3f;
4444
uniform vReflectionFilteringInfo: vec2f;
45-
uniform vReflectionColor: vec3f;
4645
uniform vReflectionDominantDirection: vec3f;
46+
uniform vReflectionColor: vec3f;
4747

4848
uniform vSphericalL00: vec3f;
4949
uniform vSphericalL1_1: vec3f;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ export class EXT_materials_diffuse_roughness implements IGLTFLoaderExtension {
8181

8282
const promises = new Array<Promise<any>>();
8383

84-
babylonMaterial.brdf.baseDiffuseModel = Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR;
84+
if (babylonMaterial instanceof PBRMaterial) {
85+
babylonMaterial.brdf.baseDiffuseModel = Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR;
86+
}
8587

8688
if (properties.diffuseRoughnessFactor != undefined) {
8789
babylonMaterial.baseDiffuseRoughness = properties.diffuseRoughnessFactor;

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type { Nullable } from "core/types";
22
import { PBRMaterial } from "core/Materials/PBR/pbrMaterial";
3-
import { PBR2Material } from "core/Materials/PBR/pbr2Material";
43
import type { Material } from "core/Materials/material";
54

65
import type { IMaterial, ITextureInfo } from "../glTFLoaderInterfaces";
@@ -71,7 +70,7 @@ export class KHR_materials_anisotropy implements IGLTFLoaderExtension {
7170
}
7271

7372
private async _loadIridescencePropertiesAsync(context: string, properties: IKHRMaterialsAnisotropy, babylonMaterial: Material): Promise<void> {
74-
if (!(babylonMaterial instanceof PBRMaterial) && !(babylonMaterial instanceof PBR2Material)) {
73+
if (!(babylonMaterial instanceof PBRMaterial)) {
7574
throw new Error(`${context}: Material type not supported`);
7675
}
7776

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type { Nullable } from "core/types";
22
import { PBRMaterial } from "core/Materials/PBR/pbrMaterial";
3-
import { PBR2Material } from "core/Materials/PBR/pbr2Material";
43
import type { Material } from "core/Materials/material";
54

65
import type { IMaterial, ITextureInfo } from "../glTFLoaderInterfaces";
@@ -73,7 +72,7 @@ export class KHR_materials_clearcoat implements IGLTFLoaderExtension {
7372

7473
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
7574
private _loadClearCoatPropertiesAsync(context: string, properties: IKHRMaterialsClearcoat, babylonMaterial: Material): Promise<void> {
76-
if (!(babylonMaterial instanceof PBRMaterial) && !(babylonMaterial instanceof PBR2Material)) {
75+
if (!(babylonMaterial instanceof PBRMaterial)) {
7776
throw new Error(`${context}: Material type not supported`);
7877
}
7978

0 commit comments

Comments
 (0)