Skip to content

Commit e908eee

Browse files
author
Mike Bond
committed
Adding properties to OpenPBRMaterial
1 parent f156430 commit e908eee

20 files changed

+1200
-346
lines changed

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

Lines changed: 314 additions & 265 deletions
Large diffs are not rendered by default.

packages/dev/core/src/Misc/decorators.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,33 @@ nativeOverride.filter = function <T extends (...params: any) => boolean>(predica
158158
return (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...params: Parameters<T>) => unknown>) =>
159159
nativeOverride(target, propertyKey, descriptor, predicate);
160160
};
161+
162+
export function addAccessorsForMaterialProperty(setCallback: string, targetKey: Nullable<string> = null) {
163+
return (target: any, propertyKey: string) => {
164+
const key = propertyKey;
165+
const newKey = targetKey || "";
166+
Object.defineProperty(target, newKey, {
167+
get: function (this: any) {
168+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
169+
return this[key].value;
170+
},
171+
set: function (this: any, value) {
172+
// does this object (i.e. vector3) has an equals function? use it!
173+
// Note - not using "with epsilon" here, it is expected te behave like the internal cache does.
174+
if (typeof this[key]?.value?.equals === "function") {
175+
if (this[key].value.equals(value)) {
176+
return;
177+
}
178+
}
179+
if (this[key].value === value) {
180+
return;
181+
}
182+
this[key].value = value;
183+
184+
target[setCallback].apply(this);
185+
},
186+
enumerable: true,
187+
configurable: true,
188+
});
189+
};
190+
}

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

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,14 @@ layout(std140, column_major) uniform;
2323
// }
2424

2525
uniform Material {
26-
vec2 vAlbedoInfos;
27-
vec2 vBaseWeightInfos;
28-
vec2 vBaseDiffuseRoughnessInfos;
2926
vec4 vAmbientInfos;
3027
vec2 vOpacityInfos;
3128
vec2 vEmissiveInfos;
3229
vec2 vLightmapInfos;
3330
vec3 vReflectivityInfos;
3431
vec2 vMicroSurfaceSamplerInfos;
3532
vec3 vBumpInfos;
36-
mat4 albedoMatrix;
37-
mat4 baseWeightMatrix;
38-
mat4 baseDiffuseRoughnessMatrix;
33+
3934
mat4 ambientMatrix;
4035
mat4 opacityMatrix;
4136
mat4 emissiveMatrix;
@@ -44,13 +39,9 @@ uniform Material {
4439
mat4 microSurfaceSamplerMatrix;
4540
mat4 bumpMatrix;
4641
vec2 vTangentSpaceParams;
47-
vec4 vAlbedoColor;
48-
float baseWeight;
49-
float baseDiffuseRoughness;
5042
vec4 vLightingIntensity;
5143
float pointSize;
5244
vec4 vReflectivityColor;
53-
vec3 vEmissiveColor;
5445
vec3 vAmbientColor;
5546

5647
vec2 vDebugMode;
@@ -91,7 +82,18 @@ uniform Material {
9182
vec3 vSphericalYZ;
9283
vec3 vSphericalZX;
9384

94-
#define ADDITIONAL_UBO_DECLARATION
85+
float baseWeight;
86+
vec4 vBaseColor;
87+
float baseDiffuseRoughness;
88+
vec3 vEmissiveColor;
89+
90+
vec2 baseWeightInfos;
91+
mat4 baseWeightMatrix;
92+
vec2 baseColorInfos;
93+
mat4 baseColorMatrix;
94+
vec2 baseDiffuseRoughnessInfos;
95+
mat4 baseDiffuseRoughnessMatrix;
96+
#define ADDITIONAL_UBO_DECLARATION
9597
};
9698

9799
#include<sceneUboDeclaration>
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
uniform vec4 vEyePosition;
2+
3+
uniform vec3 vReflectionColor;
4+
uniform vec4 vBaseColor;
5+
uniform float baseWeight;
6+
uniform float baseDiffuseRoughness;
7+
8+
// CUSTOM CONTROLS
9+
uniform vec4 vLightingIntensity;
10+
11+
uniform vec4 vReflectivityColor;
12+
uniform vec4 vMetallicReflectanceFactors;
13+
uniform vec3 vEmissiveColor;
14+
15+
uniform float visibility;
16+
17+
uniform vec3 vAmbientColor;
18+
19+
// Samplers
20+
#ifdef ALBEDO
21+
uniform vec2 baseColorInfos;
22+
#endif
23+
24+
#ifdef BASE_WEIGHT
25+
uniform vec2 baseWeightInfos;
26+
#endif
27+
28+
#ifdef BASE_DIFFUSE_ROUGHNESS
29+
uniform vec2 baseDiffuseRoughnessInfos;
30+
#endif
31+
32+
#ifdef AMBIENT
33+
uniform vec4 vAmbientInfos;
34+
#endif
35+
36+
#ifdef BUMP
37+
uniform vec3 vBumpInfos;
38+
uniform vec2 vTangentSpaceParams;
39+
#endif
40+
41+
#ifdef OPACITY
42+
uniform vec2 vOpacityInfos;
43+
#endif
44+
45+
#ifdef EMISSIVE
46+
uniform vec2 vEmissiveInfos;
47+
#endif
48+
49+
#ifdef LIGHTMAP
50+
uniform vec2 vLightmapInfos;
51+
#endif
52+
53+
#ifdef REFLECTIVITY
54+
uniform vec3 vReflectivityInfos;
55+
#endif
56+
57+
#ifdef MICROSURFACEMAP
58+
uniform vec2 vMicroSurfaceSamplerInfos;
59+
#endif
60+
61+
// Refraction Reflection
62+
#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(SS_REFRACTION) || defined(PREPASS)
63+
uniform mat4 view;
64+
#endif
65+
66+
// Reflection
67+
#ifdef REFLECTION
68+
uniform vec2 vReflectionInfos;
69+
70+
#ifdef REALTIME_FILTERING
71+
uniform vec2 vReflectionFilteringInfo;
72+
#endif
73+
uniform mat4 reflectionMatrix;
74+
uniform vec3 vReflectionMicrosurfaceInfos;
75+
#if defined(USEIRRADIANCEMAP) && defined(USE_IRRADIANCE_DOMINANT_DIRECTION)
76+
uniform vec3 vReflectionDominantDirection;
77+
#endif
78+
79+
#if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)
80+
uniform vec3 vReflectionPosition;
81+
uniform vec3 vReflectionSize;
82+
#endif
83+
#endif
84+
85+
// Refraction
86+
#if defined(SS_REFRACTION) && defined(SS_USE_LOCAL_REFRACTIONMAP_CUBIC)
87+
uniform vec3 vRefractionPosition;
88+
uniform vec3 vRefractionSize;
89+
#endif
90+
91+
// Clear Coat
92+
#ifdef CLEARCOAT
93+
uniform vec2 vClearCoatParams;
94+
uniform vec4 vClearCoatRefractionParams;
95+
96+
#if defined(CLEARCOAT_TEXTURE) || defined(CLEARCOAT_TEXTURE_ROUGHNESS)
97+
uniform vec4 vClearCoatInfos;
98+
#endif
99+
100+
#ifdef CLEARCOAT_TEXTURE
101+
uniform mat4 clearCoatMatrix;
102+
#endif
103+
104+
#ifdef CLEARCOAT_TEXTURE_ROUGHNESS
105+
uniform mat4 clearCoatRoughnessMatrix;
106+
#endif
107+
108+
#ifdef CLEARCOAT_BUMP
109+
uniform vec2 vClearCoatBumpInfos;
110+
uniform vec2 vClearCoatTangentSpaceParams;
111+
uniform mat4 clearCoatBumpMatrix;
112+
#endif
113+
114+
#ifdef CLEARCOAT_TINT
115+
uniform vec4 vClearCoatTintParams;
116+
uniform float clearCoatColorAtDistance;
117+
118+
#ifdef CLEARCOAT_TINT_TEXTURE
119+
uniform vec2 vClearCoatTintInfos;
120+
uniform mat4 clearCoatTintMatrix;
121+
#endif
122+
#endif
123+
#endif
124+
125+
// Iridescence
126+
#ifdef IRIDESCENCE
127+
uniform vec4 vIridescenceParams;
128+
129+
#if defined(IRIDESCENCE_TEXTURE) || defined(IRIDESCENCE_THICKNESS_TEXTURE)
130+
uniform vec4 vIridescenceInfos;
131+
#endif
132+
133+
#ifdef IRIDESCENCE_TEXTURE
134+
uniform mat4 iridescenceMatrix;
135+
#endif
136+
137+
#ifdef IRIDESCENCE_THICKNESS_TEXTURE
138+
uniform mat4 iridescenceThicknessMatrix;
139+
#endif
140+
#endif
141+
142+
// Anisotropy
143+
#ifdef ANISOTROPIC
144+
uniform vec3 vAnisotropy;
145+
146+
#ifdef ANISOTROPIC_TEXTURE
147+
uniform vec2 vAnisotropyInfos;
148+
uniform mat4 anisotropyMatrix;
149+
#endif
150+
#endif
151+
152+
// Sheen
153+
#ifdef SHEEN
154+
uniform vec4 vSheenColor;
155+
#ifdef SHEEN_ROUGHNESS
156+
uniform float vSheenRoughness;
157+
#endif
158+
159+
#if defined(SHEEN_TEXTURE) || defined(SHEEN_TEXTURE_ROUGHNESS)
160+
uniform vec4 vSheenInfos;
161+
#endif
162+
163+
#ifdef SHEEN_TEXTURE
164+
uniform mat4 sheenMatrix;
165+
#endif
166+
167+
#ifdef SHEEN_TEXTURE_ROUGHNESS
168+
uniform mat4 sheenRoughnessMatrix;
169+
#endif
170+
#endif
171+
172+
// SubSurface
173+
#ifdef SUBSURFACE
174+
#ifdef SS_REFRACTION
175+
uniform vec4 vRefractionMicrosurfaceInfos;
176+
uniform vec4 vRefractionInfos;
177+
uniform mat4 refractionMatrix;
178+
#ifdef REALTIME_FILTERING
179+
uniform vec2 vRefractionFilteringInfo;
180+
#endif
181+
#ifdef SS_DISPERSION
182+
uniform float dispersion;
183+
#endif
184+
#endif
185+
186+
#ifdef SS_THICKNESSANDMASK_TEXTURE
187+
uniform vec2 vThicknessInfos;
188+
uniform mat4 thicknessMatrix;
189+
#endif
190+
191+
#ifdef SS_REFRACTIONINTENSITY_TEXTURE
192+
uniform vec2 vRefractionIntensityInfos;
193+
uniform mat4 refractionIntensityMatrix;
194+
#endif
195+
196+
#ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
197+
uniform vec2 vTranslucencyIntensityInfos;
198+
uniform mat4 translucencyIntensityMatrix;
199+
#endif
200+
201+
uniform vec2 vThicknessParam;
202+
uniform vec3 vDiffusionDistance;
203+
uniform vec4 vTintColor;
204+
uniform vec3 vSubSurfaceIntensity;
205+
206+
uniform vec4 vTranslucencyColor;
207+
208+
#ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
209+
uniform vec2 vTranslucencyColorInfos;
210+
uniform mat4 translucencyColorMatrix;
211+
#endif
212+
#endif
213+
214+
#ifdef PREPASS
215+
#ifdef SS_SCATTERING
216+
uniform float scatteringDiffusionProfile;
217+
#endif
218+
#endif
219+
220+
#if DEBUGMODE > 0
221+
uniform vec2 vDebugMode;
222+
#endif
223+
224+
#ifdef DETAIL
225+
uniform vec4 vDetailInfos;
226+
#endif
227+
228+
#include<decalFragmentDeclaration>
229+
230+
#ifdef USESPHERICALFROMREFLECTIONMAP
231+
#ifdef SPHERICAL_HARMONICS
232+
uniform vec3 vSphericalL00;
233+
uniform vec3 vSphericalL1_1;
234+
uniform vec3 vSphericalL10;
235+
uniform vec3 vSphericalL11;
236+
uniform vec3 vSphericalL2_2;
237+
uniform vec3 vSphericalL2_1;
238+
uniform vec3 vSphericalL20;
239+
uniform vec3 vSphericalL21;
240+
uniform vec3 vSphericalL22;
241+
#else
242+
uniform vec3 vSphericalX;
243+
uniform vec3 vSphericalY;
244+
uniform vec3 vSphericalZ;
245+
uniform vec3 vSphericalXX_ZZ;
246+
uniform vec3 vSphericalYY_ZZ;
247+
uniform vec3 vSphericalZZ;
248+
uniform vec3 vSphericalXY;
249+
uniform vec3 vSphericalYZ;
250+
uniform vec3 vSphericalZX;
251+
#endif
252+
#endif
253+
254+
#define ADDITIONAL_FRAGMENT_DECLARATION

0 commit comments

Comments
 (0)