Skip to content

Commit 3d81ea5

Browse files
author
Mike Bond
committed
Remove pbrBaseMaterial as base class for PBR2
1 parent 735bee9 commit 3d81ea5

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
@@ -1915,7 +1915,7 @@ export abstract class PBRBaseMaterial extends PBRBaseMaterialBase {
19151915
ubo.addUniform("reflectanceMatrix", 16);
19161916

19171917
ubo.addUniform("cameraInfo", 4);
1918-
PrepareUniformLayoutForIBL(ubo, true, true, true);
1918+
PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);
19191919
super.buildUniformLayout();
19201920
}
19211921

@@ -2062,7 +2062,7 @@ export abstract class PBRBaseMaterial extends PBRBaseMaterialBase {
20622062
}
20632063
}
20642064

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

20672067
// Point size
20682068
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
/**
@@ -1478,15 +1492,17 @@ export function PrepareUniformsAndSamplersList(uniformsListOrOptions: string[] |
14781492
* @param ubo Add uniforms to UBO
14791493
* @param supportTextureInfo Add uniforms for texture info if true
14801494
* @param supportLocalProjection Add uniforms for local projection if true
1481-
* @param useAdvanced Add advanced uniforms for IBL if true
1495+
* @param usePBR Add uniforms for IBL if true
14821496
* @param supportSH Add uniforms for spherical harmonics if true
1497+
* @param useColor Add uniforms for reflection color if true
14831498
*/
14841499
export function PrepareUniformLayoutForIBL(
14851500
ubo: UniformBuffer,
14861501
supportTextureInfo: boolean = false,
14871502
supportLocalProjection: boolean = false,
1488-
useAdvanced: boolean = false,
1489-
supportSH: boolean = false
1503+
usePBR: boolean = false,
1504+
supportSH: boolean = false,
1505+
useColor: boolean = false
14901506
): void {
14911507
ubo.addUniform("vReflectionInfos", 2);
14921508
ubo.addUniform("reflectionMatrix", 16);
@@ -1499,12 +1515,15 @@ export function PrepareUniformLayoutForIBL(
14991515
ubo.addUniform("vReflectionSize", 3);
15001516
}
15011517

1502-
if (useAdvanced) {
1518+
if (usePBR) {
15031519
ubo.addUniform("vReflectionFilteringInfo", 2);
1504-
ubo.addUniform("vReflectionColor", 3);
15051520
ubo.addUniform("vReflectionDominantDirection", 3);
15061521
}
15071522

1523+
if (useColor) {
1524+
ubo.addUniform("vReflectionColor", 3);
1525+
}
1526+
15081527
if (supportSH) {
15091528
ubo.addUniform("vSphericalL00", 3);
15101529
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
@@ -1470,7 +1470,7 @@ export class StandardMaterial extends StandardMaterialBase {
14701470
ubo.updateFloat("alphaCutOff", this.alphaCutOff);
14711471
}
14721472

1473-
BindIBLParameters(scene, defines, ubo, this._reflectionTexture);
1473+
BindIBLParameters(scene, defines, ubo, this._reflectionTexture, false, true, true);
14741474

14751475
if (this._emissiveTexture && StandardMaterial.EmissiveTextureEnabled) {
14761476
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)