Skip to content

Commit df6a640

Browse files
author
Mike Bond
committed
Fixes for OpenPBRMaterial.
1 parent 3a5b609 commit df6a640

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, serializeAsTexture } from "core/Misc/decor
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
*/
@@ -73,7 +74,7 @@ export class IBLShadowsPluginMaterial extends MaterialPluginBase {
7374
return true;
7475
}
7576

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