Skip to content

Commit f156430

Browse files
author
Mike Bond
committed
Fixes for OpenPBRMaterial.
1 parent f4b1856 commit f156430

File tree

14 files changed

+890
-625
lines changed

14 files changed

+890
-625
lines changed

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,17 @@ export class OpenPBRMaterialDefines extends ImageProcessingDefinesMixin(OpenPBRM
310310

311311
public DEBUGMODE = 0;
312312

313+
// BRDF defines
314+
BRDF_V_HEIGHT_CORRELATED = true;
315+
MS_BRDF_ENERGY_CONSERVATION = true;
316+
SPHERICAL_HARMONICS = true;
317+
SPECULAR_GLOSSINESS_ENERGY_CONSERVATION = true;
318+
MIX_IBL_RADIANCE_WITH_IRRADIANCE = true;
319+
LEGACY_SPECULAR_ENERGY_CONSERVATION = false;
320+
BASE_DIFFUSE_MODEL = Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR;
321+
DIELECTRIC_SPECULAR_MODEL = Constants.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR;
322+
CONDUCTOR_SPECULAR_MODEL = Constants.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR;
323+
313324
/**
314325
* Initializes the PBR Material defines.
315326
* @param externalProperties The external properties
@@ -2646,7 +2657,7 @@ export class OpenPBRMaterial extends OpenPBRMaterialBase {
26462657
PrepareAttributesForMorphTargets(attribs, mesh, defines);
26472658
PrepareAttributesForBakedVertexAnimation(attribs, mesh, defines);
26482659

2649-
let shaderName = "pbr2";
2660+
let shaderName = "openpbr";
26502661

26512662
const uniforms = [
26522663
"world",

packages/dev/core/src/Rendering/IBLShadows/iblShadowsPluginMaterial.ts

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { expandToProperty, serialize } from "core/Misc/decorators";
1010
import { RegisterClass } from "core/Misc/typeStore";
1111

1212
import { ShaderLanguage } from "core/Materials/shaderLanguage";
13+
import { OpenPBRMaterial } from "core/Materials/PBR/openPbrMaterial";
1314
/**
1415
* @internal
1516
*/
@@ -72,7 +73,7 @@ export class IBLShadowsPluginMaterial extends MaterialPluginBase {
7273
return true;
7374
}
7475

75-
constructor(material: Material | StandardMaterial | PBRBaseMaterial) {
76+
constructor(material: Material | StandardMaterial | PBRBaseMaterial | OpenPBRMaterial) {
7677
super(material, IBLShadowsPluginMaterial.Name, 310, new MaterialIBLShadowsRenderDefines());
7778
this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];
7879
}
@@ -160,6 +161,27 @@ export class IBLShadowsPluginMaterial extends MaterialPluginBase {
160161
#endif
161162
#endif
162163
`;
164+
} else if (this._material instanceof OpenPBRMaterial) {
165+
// eslint-disable-next-line @typescript-eslint/naming-convention
166+
frag["CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION"] = `
167+
#ifdef RENDER_WITH_IBL_SHADOWS
168+
#ifndef UNLIT
169+
#ifdef REFLECTION
170+
#ifdef COLORED_IBL_SHADOWS
171+
var shadowValue: vec3f = computeIndirectShadow();
172+
finalIrradiance *= shadowValue;
173+
finalRadianceScaled *= mix(vec3f(1.0), shadowValue, roughness);
174+
#else
175+
var shadowValue: vec2f = computeIndirectShadow();
176+
finalIrradiance *= vec3f(shadowValue.x);
177+
finalRadianceScaled *= vec3f(mix(pow(shadowValue.y, 4.0), shadowValue.x, roughness));
178+
#endif
179+
#endif
180+
#else
181+
finalDiffuse *= computeIndirectShadow().x;
182+
#endif
183+
#endif
184+
`;
163185
} else {
164186
frag["CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR"] = `
165187
#ifdef RENDER_WITH_IBL_SHADOWS
@@ -217,6 +239,27 @@ export class IBLShadowsPluginMaterial extends MaterialPluginBase {
217239
#endif
218240
#endif
219241
`;
242+
} else if (this._material instanceof OpenPBRMaterial) {
243+
// eslint-disable-next-line @typescript-eslint/naming-convention
244+
frag["CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION"] = `
245+
#ifdef RENDER_WITH_IBL_SHADOWS
246+
#ifndef UNLIT
247+
#ifdef REFLECTION
248+
#ifdef COLORED_IBL_SHADOWS
249+
vec3 shadowValue = computeIndirectShadow();
250+
finalIrradiance.rgb *= shadowValue.rgb;
251+
finalRadianceScaled *= mix(vec3(1.0), shadowValue.rgb, roughness);
252+
#else
253+
vec2 shadowValue = computeIndirectShadow();
254+
finalIrradiance *= shadowValue.x;
255+
finalRadianceScaled *= mix(pow(shadowValue.y, 4.0), shadowValue.x, roughness);
256+
#endif
257+
#endif
258+
#else
259+
finalDiffuse *= computeIndirectShadow().x;
260+
#endif
261+
#endif
262+
`;
220263
} else {
221264
frag["CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR"] = `
222265
#ifdef RENDER_WITH_IBL_SHADOWS

packages/dev/core/src/Rendering/IBLShadows/iblShadowsRenderPipeline.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import type { Material } from "core/Materials/material";
2727
import { Observable } from "core/Misc/observable";
2828
import "../geometryBufferRendererSceneComponent";
2929
import "../iblCdfGeneratorSceneComponent";
30+
import { OpenPBRMaterial } from "core/Materials/PBR/openPbrMaterial";
3031

3132
interface IIblShadowsSettings {
3233
/**
@@ -1115,7 +1116,7 @@ export class IblShadowsRenderPipeline extends PostProcessRenderPipeline {
11151116
}
11161117

11171118
protected _addShadowSupportToMaterial(material: Material) {
1118-
if (!(material instanceof PBRBaseMaterial) && !(material instanceof StandardMaterial)) {
1119+
if (!(material instanceof PBRBaseMaterial) && !(material instanceof StandardMaterial) && !(material instanceof OpenPBRMaterial)) {
11191120
return;
11201121
}
11211122
let plugin = material.pluginManager?.getPlugin<IBLShadowsPluginMaterial>(IBLShadowsPluginMaterial.Name);
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
layout(std140, column_major) uniform;
2+
3+
// layout(set = 0, binding = 0) uniform Harmonics
4+
// {
5+
// uniform vec3 vSphericalL00;
6+
// uniform vec3 vSphericalL1_1;
7+
// uniform vec3 vSphericalL10;
8+
// uniform vec3 vSphericalL11;
9+
// uniform vec3 vSphericalL2_2;
10+
// uniform vec3 vSphericalL2_1;
11+
// uniform vec3 vSphericalL20;
12+
// uniform vec3 vSphericalL21;
13+
// uniform vec3 vSphericalL22;
14+
// uniform vec3 vSphericalX;
15+
// uniform vec3 vSphericalY;
16+
// uniform vec3 vSphericalZ;
17+
// uniform vec3 vSphericalXX_ZZ;
18+
// uniform vec3 vSphericalYY_ZZ;
19+
// uniform vec3 vSphericalZZ;
20+
// uniform vec3 vSphericalXY;
21+
// uniform vec3 vSphericalYZ;
22+
// uniform vec3 vSphericalZX;
23+
// }
24+
25+
uniform Material {
26+
vec2 vAlbedoInfos;
27+
vec2 vBaseWeightInfos;
28+
vec2 vBaseDiffuseRoughnessInfos;
29+
vec4 vAmbientInfos;
30+
vec2 vOpacityInfos;
31+
vec2 vEmissiveInfos;
32+
vec2 vLightmapInfos;
33+
vec3 vReflectivityInfos;
34+
vec2 vMicroSurfaceSamplerInfos;
35+
vec3 vBumpInfos;
36+
mat4 albedoMatrix;
37+
mat4 baseWeightMatrix;
38+
mat4 baseDiffuseRoughnessMatrix;
39+
mat4 ambientMatrix;
40+
mat4 opacityMatrix;
41+
mat4 emissiveMatrix;
42+
mat4 lightmapMatrix;
43+
mat4 reflectivityMatrix;
44+
mat4 microSurfaceSamplerMatrix;
45+
mat4 bumpMatrix;
46+
vec2 vTangentSpaceParams;
47+
vec4 vAlbedoColor;
48+
float baseWeight;
49+
float baseDiffuseRoughness;
50+
vec4 vLightingIntensity;
51+
float pointSize;
52+
vec4 vReflectivityColor;
53+
vec3 vEmissiveColor;
54+
vec3 vAmbientColor;
55+
56+
vec2 vDebugMode;
57+
58+
vec4 vMetallicReflectanceFactors;
59+
vec2 vMetallicReflectanceInfos;
60+
mat4 metallicReflectanceMatrix;
61+
vec2 vReflectanceInfos;
62+
mat4 reflectanceMatrix;
63+
vec4 cameraInfo;
64+
65+
vec2 vReflectionInfos;
66+
mat4 reflectionMatrix;
67+
vec3 vReflectionMicrosurfaceInfos;
68+
vec3 vReflectionPosition;
69+
vec3 vReflectionSize;
70+
vec2 vReflectionFilteringInfo;
71+
vec3 vReflectionDominantDirection;
72+
vec3 vReflectionColor;
73+
74+
vec3 vSphericalL00;
75+
vec3 vSphericalL1_1;
76+
vec3 vSphericalL10;
77+
vec3 vSphericalL11;
78+
vec3 vSphericalL2_2;
79+
vec3 vSphericalL2_1;
80+
vec3 vSphericalL20;
81+
vec3 vSphericalL21;
82+
vec3 vSphericalL22;
83+
84+
vec3 vSphericalX;
85+
vec3 vSphericalY;
86+
vec3 vSphericalZ;
87+
vec3 vSphericalXX_ZZ;
88+
vec3 vSphericalYY_ZZ;
89+
vec3 vSphericalZZ;
90+
vec3 vSphericalXY;
91+
vec3 vSphericalYZ;
92+
vec3 vSphericalZX;
93+
94+
#define ADDITIONAL_UBO_DECLARATION
95+
};
96+
97+
#include<sceneUboDeclaration>
98+
#include<meshUboDeclaration>

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ uniform Material {
6060
mat4 metallicReflectanceMatrix;
6161
vec2 vReflectanceInfos;
6262
mat4 reflectanceMatrix;
63+
vec4 cameraInfo;
6364

6465
vec2 vReflectionInfos;
6566
mat4 reflectionMatrix;
@@ -90,8 +91,6 @@ uniform Material {
9091
vec3 vSphericalYZ;
9192
vec3 vSphericalZX;
9293

93-
vec4 cameraInfo;
94-
9594
#define ADDITIONAL_UBO_DECLARATION
9695
};
9796

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
uniform vAlbedoInfos: vec2f;
2+
uniform vBaseWeightInfos: vec2f;
3+
uniform vBaseDiffuseRoughnessInfos: vec2f;
4+
uniform vAmbientInfos: vec4f;
5+
uniform vOpacityInfos: vec2f;
6+
uniform vEmissiveInfos: vec2f;
7+
uniform vLightmapInfos: vec2f;
8+
uniform vReflectivityInfos: vec3f;
9+
uniform vMicroSurfaceSamplerInfos: vec2f;
10+
uniform vBumpInfos: vec3f;
11+
uniform albedoMatrix: mat4x4f;
12+
uniform baseWeightMatrix: mat4x4f;
13+
uniform baseDiffuseRoughnessMatrix: mat4x4f;
14+
uniform ambientMatrix: mat4x4f;
15+
uniform opacityMatrix: mat4x4f;
16+
uniform emissiveMatrix: mat4x4f;
17+
uniform lightmapMatrix: mat4x4f;
18+
uniform reflectivityMatrix: mat4x4f;
19+
uniform microSurfaceSamplerMatrix: mat4x4f;
20+
uniform bumpMatrix: mat4x4f;
21+
uniform vTangentSpaceParams: vec2f;
22+
uniform vAlbedoColor: vec4f;
23+
uniform baseWeight: f32;
24+
uniform baseDiffuseRoughness: f32;
25+
uniform vLightingIntensity: vec4f;
26+
uniform pointSize: f32;
27+
uniform vReflectivityColor: vec4f;
28+
uniform vEmissiveColor: vec3f;
29+
uniform vAmbientColor: vec3f;
30+
31+
uniform vDebugMode: vec2f;
32+
33+
uniform vMetallicReflectanceFactors: vec4f;
34+
uniform vMetallicReflectanceInfos: vec2f;
35+
uniform metallicReflectanceMatrix: mat4x4f;
36+
uniform vReflectanceInfos: vec2f;
37+
uniform reflectanceMatrix: mat4x4f;
38+
uniform cameraInfo: vec4f;
39+
40+
uniform vReflectionInfos: vec2f;
41+
uniform reflectionMatrix: mat4x4f;
42+
uniform vReflectionMicrosurfaceInfos: vec3f;
43+
uniform vReflectionPosition: vec3f;
44+
uniform vReflectionSize: vec3f;
45+
uniform vReflectionFilteringInfo: vec2f;
46+
uniform vReflectionDominantDirection: vec3f;
47+
uniform vReflectionColor: vec3f;
48+
49+
uniform vSphericalL00: vec3f;
50+
uniform vSphericalL1_1: vec3f;
51+
uniform vSphericalL10: vec3f;
52+
uniform vSphericalL11: vec3f;
53+
uniform vSphericalL2_2: vec3f;
54+
uniform vSphericalL2_1: vec3f;
55+
uniform vSphericalL20: vec3f;
56+
uniform vSphericalL21: vec3f;
57+
uniform vSphericalL22: vec3f;
58+
59+
uniform vSphericalX: vec3f;
60+
uniform vSphericalY: vec3f;
61+
uniform vSphericalZ: vec3f;
62+
uniform vSphericalXX_ZZ: vec3f;
63+
uniform vSphericalYY_ZZ: vec3f;
64+
uniform vSphericalZZ: vec3f;
65+
uniform vSphericalXY: vec3f;
66+
uniform vSphericalYZ: vec3f;
67+
uniform vSphericalZX: vec3f;
68+
69+
#define ADDITIONAL_UBO_DECLARATION
70+
71+
72+
#include<sceneUboDeclaration>
73+
#include<meshUboDeclaration>

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ uniform vMetallicReflectanceInfos: vec2f;
3535
uniform metallicReflectanceMatrix: mat4x4f;
3636
uniform vReflectanceInfos: vec2f;
3737
uniform reflectanceMatrix: mat4x4f;
38+
uniform cameraInfo: vec4f;
3839

3940
uniform vReflectionInfos: vec2f;
4041
uniform reflectionMatrix: mat4x4f;
@@ -65,8 +66,6 @@ uniform vSphericalXY: vec3f;
6566
uniform vSphericalYZ: vec3f;
6667
uniform vSphericalZX: vec3f;
6768

68-
uniform cameraInfo: vec4f;
69-
7069
#define ADDITIONAL_UBO_DECLARATION
7170

7271

packages/dev/core/src/ShadersWGSL/openpbr.fragment.fx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#endif
1212

1313
// Declaration
14-
#include<pbrUboDeclaration>
14+
#include<openPbrUboDeclaration>
1515

1616
#include<pbrFragmentExtraDeclaration>
1717
#include<lightUboDeclaration>[0..maxSimultaneousLights]

packages/dev/core/src/ShadersWGSL/openpbr.vertex.fx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#define PBR_VERTEX_SHADER
22

3-
#include<pbrUboDeclaration>
3+
#include<openPbrUboDeclaration>
44

55
#define CUSTOM_VERTEX_BEGIN
66

packages/dev/inspector/src/components/actionTabs/tabs/propertyGridTabComponent.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ import { Tags } from "core/Misc/tags";
117117
import { LineContainerComponent } from "shared-ui-components/lines/lineContainerComponent";
118118
import type { RectAreaLight } from "core/Lights/rectAreaLight";
119119
import { FluentToolWrapper } from "shared-ui-components/fluent/hoc/fluentToolWrapper";
120+
import { OpenPBRMaterial } from "core/Materials";
120121

121122
export class PropertyGridTabComponent extends PaneComponent {
122123
private _timerIntervalId: number;
@@ -396,6 +397,17 @@ export class PropertyGridTabComponent extends PaneComponent {
396397
onPropertyChangedObservable={this.props.onPropertyChangedObservable}
397398
/>
398399
);
400+
} else if (className === "OpenPBRMaterial") {
401+
const material = entity as OpenPBRMaterial;
402+
return (
403+
<PBRMaterialPropertyGridComponent
404+
globalState={this.props.globalState}
405+
material={material}
406+
lockObject={this._lockObject}
407+
onSelectionChangedObservable={this.props.onSelectionChangedObservable}
408+
onPropertyChangedObservable={this.props.onPropertyChangedObservable}
409+
/>
410+
);
399411
}
400412

401413
if (className === "PBRMetallicRoughnessMaterial") {

0 commit comments

Comments
 (0)