Skip to content

Commit d4d6183

Browse files
author
Mike Bond
committed
Add more OpenPBR properties
1 parent fe5a1fd commit d4d6183

15 files changed

+213
-479
lines changed

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

Lines changed: 38 additions & 280 deletions
Large diffs are not rendered by default.

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

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

2525
uniform Material {
26-
vec4 vAmbientInfos;
27-
vec2 vOpacityInfos;
28-
vec2 vEmissiveInfos;
2926
vec2 vLightmapInfos;
3027
vec3 vBumpInfos;
3128

32-
mat4 ambientMatrix;
33-
mat4 opacityMatrix;
34-
mat4 emissiveMatrix;
3529
mat4 lightmapMatrix;
3630
mat4 bumpMatrix;
3731
vec2 vTangentSpaceParams;
3832
vec4 vLightingIntensity;
3933
float pointSize;
40-
vec3 vAmbientColor;
4134

4235
vec2 vDebugMode;
4336

@@ -77,20 +70,26 @@ uniform Material {
7770
float vBaseDiffuseRoughness;
7871
vec4 vReflectanceInfo;
7972
vec4 vSpecularColor;
80-
vec3 vEmissiveColor;
73+
vec3 vEmissionColor;
8174

8275
vec2 vBaseWeightInfos;
8376
mat4 baseWeightMatrix;
8477
vec2 vBaseColorInfos;
8578
mat4 baseColorMatrix;
8679
vec2 vBaseDiffuseRoughnessInfos;
8780
mat4 baseDiffuseRoughnessMatrix;
88-
vec2 vBaseMetalRoughInfos;
89-
mat4 baseMetalRoughMatrix;
9081
vec2 vSpecularWeightInfos;
9182
mat4 specularWeightMatrix;
9283
vec2 vSpecularColorInfos;
9384
mat4 specularColorMatrix;
85+
vec2 vBaseMetalRoughInfos;
86+
mat4 baseMetalRoughMatrix;
87+
vec2 vGeometryOpacityInfos;
88+
mat4 geometryOpacityMatrix;
89+
vec2 vEmissionInfos;
90+
mat4 emissionMatrix;
91+
vec2 vAmbientOcclusionInfos;
92+
mat4 ambientOcclusionMatrix;
9493

9594
#define ADDITIONAL_UBO_DECLARATION
9695
};

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ vec4 finalColor = vec4(
1010
finalRadianceScaled +
1111
#endif
1212
#endif
13-
finalAmbient +
1413
finalDiffuse,
1514
alpha);
1615

@@ -26,7 +25,7 @@ vec4 finalColor = vec4(
2625
#endif
2726

2827
// _____________________________ EmissiveLight _____________________________________
29-
finalColor.rgb += finalEmissive;
28+
finalColor.rgb += finalEmission;
3029

3130
#define CUSTOM_FRAGMENT_BEFORE_FOG
3231

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@ uniform float vBaseDiffuseRoughness;
88
// CUSTOM CONTROLS
99
uniform vec4 vLightingIntensity;
1010

11-
uniform vec3 vEmissiveColor;
11+
uniform vec3 vEmissionColor;
1212

1313
uniform float visibility;
1414

15-
uniform vec3 vAmbientColor;
16-
1715
// Samplers
1816
#ifdef BASE_COLOR
1917
uniform vec2 vBaseColorInfos;
@@ -27,21 +25,21 @@ uniform vec2 vBaseWeightInfos;
2725
uniform vec2 vBaseDiffuseRoughnessInfos;
2826
#endif
2927

30-
#ifdef AMBIENT
31-
uniform vec4 vAmbientInfos;
28+
#ifdef AMBIENT_OCCLUSION
29+
uniform vec4 vAmbientOcclusionInfos;
3230
#endif
3331

3432
#ifdef BUMP
3533
uniform vec3 vBumpInfos;
3634
uniform vec2 vTangentSpaceParams;
3735
#endif
3836

39-
#ifdef OPACITY
40-
uniform vec2 vOpacityInfos;
37+
#ifdef GEOMETRY_OPACITY
38+
uniform vec2 vGeometryOpacityInfos;
4139
#endif
4240

43-
#ifdef EMISSIVE
44-
uniform vec2 vEmissiveInfos;
41+
#ifdef EMISSION
42+
uniform vec2 vEmissionInfos;
4543
#endif
4644

4745
#ifdef LIGHTMAP

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
#include<samplerFragmentDeclaration>(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor)
22
#include<samplerFragmentDeclaration>(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_SAMPLERNAME_,baseWeight)
33
#include<samplerFragmentDeclaration>(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_SAMPLERNAME_,baseDiffuseRoughness)
4-
#include<samplerFragmentDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_SAMPLERNAME_,ambient)
5-
#include<samplerFragmentDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_SAMPLERNAME_,opacity)
6-
#include<samplerFragmentDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_SAMPLERNAME_,emissive)
7-
#include<samplerFragmentDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_SAMPLERNAME_,lightmap)
84
#include<samplerFragmentDeclaration>(_DEFINENAME_,METALLIC_ROUGHNESS,_VARYINGNAME_,BaseMetalRough,_SAMPLERNAME_,baseMetalRough)
9-
#include<samplerFragmentDeclaration>(_DEFINENAME_,METALLIC_REFLECTANCE,_VARYINGNAME_,MetallicReflectance,_SAMPLERNAME_,metallicReflectance)
10-
#include<samplerFragmentDeclaration>(_DEFINENAME_,REFLECTANCE,_VARYINGNAME_,Reflectance,_SAMPLERNAME_,reflectance)
5+
#include<samplerFragmentDeclaration>(_DEFINENAME_,SPECULAR_WEIGHT,_VARYINGNAME_,SpecularWeight,_SAMPLERNAME_,specularWeight)
6+
#include<samplerFragmentDeclaration>(_DEFINENAME_,SPECULAR_COLOR,_VARYINGNAME_,SpecularColor,_SAMPLERNAME_,specularColor)
7+
#include<samplerFragmentDeclaration>(_DEFINENAME_,GEOMETRY_OPACITY,_VARYINGNAME_,GeometryOpacity,_SAMPLERNAME_,geometryOpacity)
8+
#include<samplerFragmentDeclaration>(_DEFINENAME_,EMISSION,_VARYINGNAME_,Emission,_SAMPLERNAME_,emission)
9+
10+
#include<samplerFragmentDeclaration>(_DEFINENAME_,AMBIENT_OCCLUSION,_VARYINGNAME_,AmbientOcclusion,_SAMPLERNAME_,ambientOcclusion)
1111
#include<samplerFragmentDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_SAMPLERNAME_,decal)
12+
#include<samplerFragmentDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_SAMPLERNAME_,lightmap)
1213

1314
// Reflection
1415
#ifdef REFLECTION

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

Lines changed: 17 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ uniform vec4 vEyePosition;
55
mat4 viewProjectionR;
66
#endif
77

8-
#ifdef ALBEDO
8+
#ifdef BASE_COLOR
99
uniform vec2 vBaseColorInfos;
1010
uniform mat4 baseColorMatrix;
1111
#endif
@@ -21,19 +21,19 @@ uniform mat4 baseDiffuseRoughnessMatrix;
2121
uniform vec2 vBaseDiffuseRoughnessInfos;
2222
#endif
2323

24-
#ifdef AMBIENT
25-
uniform mat4 ambientMatrix;
26-
uniform vec4 vAmbientInfos;
24+
#ifdef GEOMETRY_OPACITY
25+
uniform mat4 geometryOpacityMatrix;
26+
uniform vec2 vGeometryOpacityInfos;
2727
#endif
2828

29-
#ifdef OPACITY
30-
uniform mat4 opacityMatrix;
31-
uniform vec2 vOpacityInfos;
29+
#ifdef AMBIENT_OCCLUSION
30+
uniform vec2 vAmbientOcclusionInfos;
31+
uniform mat4 ambientOcclusionMatrix;
3232
#endif
3333

34-
#ifdef EMISSIVE
35-
uniform vec2 vEmissiveInfos;
36-
uniform mat4 emissiveMatrix;
34+
#ifdef EMISSION
35+
uniform vec2 vEmissionInfos;
36+
uniform mat4 emissionMatrix;
3737
#endif
3838

3939
#ifdef LIGHTMAP
@@ -46,13 +46,14 @@ uniform vec2 vBaseMetalRoughInfos;
4646
uniform mat4 baseMetalRoughMatrix;
4747
#endif
4848

49-
#ifdef METALLIC_REFLECTANCE
50-
uniform vec2 vMetallicReflectanceInfos;
51-
uniform mat4 metallicReflectanceMatrix;
49+
#ifdef SPECULAR_WEIGHT
50+
uniform vec2 vSpecularWeightInfos;
51+
uniform mat4 specularWeightMatrix;
5252
#endif
53-
#ifdef REFLECTANCE
54-
uniform vec2 vReflectanceInfos;
55-
uniform mat4 reflectanceMatrix;
53+
54+
#ifdef SPECULAR_COLOR
55+
uniform vec2 vSpecularColorInfos;
56+
uniform mat4 specularColorMatrix;
5657
#endif
5758

5859
#ifdef BUMP
@@ -72,97 +73,6 @@ uniform vec4 cameraInfo;
7273
uniform mat4 reflectionMatrix;
7374
#endif
7475

75-
// Clear Coat
76-
#ifdef CLEARCOAT
77-
#if defined(CLEARCOAT_TEXTURE) || defined(CLEARCOAT_TEXTURE_ROUGHNESS)
78-
uniform vec4 vClearCoatInfos;
79-
#endif
80-
81-
#ifdef CLEARCOAT_TEXTURE
82-
uniform mat4 clearCoatMatrix;
83-
#endif
84-
85-
#ifdef CLEARCOAT_TEXTURE_ROUGHNESS
86-
uniform mat4 clearCoatRoughnessMatrix;
87-
#endif
88-
89-
#ifdef CLEARCOAT_BUMP
90-
uniform vec2 vClearCoatBumpInfos;
91-
uniform mat4 clearCoatBumpMatrix;
92-
#endif
93-
94-
#ifdef CLEARCOAT_TINT_TEXTURE
95-
uniform vec2 vClearCoatTintInfos;
96-
uniform mat4 clearCoatTintMatrix;
97-
#endif
98-
#endif
99-
100-
// Iridescence
101-
#ifdef IRIDESCENCE
102-
#if defined(IRIDESCENCE_TEXTURE) || defined(IRIDESCENCE_THICKNESS_TEXTURE)
103-
uniform vec4 vIridescenceInfos;
104-
#endif
105-
106-
#ifdef IRIDESCENCE_TEXTURE
107-
uniform mat4 iridescenceMatrix;
108-
#endif
109-
110-
#ifdef IRIDESCENCE_THICKNESS_TEXTURE
111-
uniform mat4 iridescenceThicknessMatrix;
112-
#endif
113-
#endif
114-
115-
// Anisotropy
116-
#ifdef ANISOTROPIC
117-
#ifdef ANISOTROPIC_TEXTURE
118-
uniform vec2 vAnisotropyInfos;
119-
uniform mat4 anisotropyMatrix;
120-
#endif
121-
#endif
122-
123-
// Sheen
124-
#ifdef SHEEN
125-
#if defined(SHEEN_TEXTURE) || defined(SHEEN_TEXTURE_ROUGHNESS)
126-
uniform vec4 vSheenInfos;
127-
#endif
128-
129-
#ifdef SHEEN_TEXTURE
130-
uniform mat4 sheenMatrix;
131-
#endif
132-
133-
#ifdef SHEEN_TEXTURE_ROUGHNESS
134-
uniform mat4 sheenRoughnessMatrix;
135-
#endif
136-
#endif
137-
138-
// Sub Surface
139-
#ifdef SUBSURFACE
140-
#ifdef SS_REFRACTION
141-
uniform vec4 vRefractionInfos;
142-
uniform mat4 refractionMatrix;
143-
#endif
144-
145-
#ifdef SS_THICKNESSANDMASK_TEXTURE
146-
uniform vec2 vThicknessInfos;
147-
uniform mat4 thicknessMatrix;
148-
#endif
149-
150-
#ifdef SS_REFRACTIONINTENSITY_TEXTURE
151-
uniform vec2 vRefractionIntensityInfos;
152-
uniform mat4 refractionIntensityMatrix;
153-
#endif
154-
155-
#ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
156-
uniform vec2 vTranslucencyIntensityInfos;
157-
uniform mat4 translucencyIntensityMatrix;
158-
#endif
159-
160-
#ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
161-
uniform vec2 vTranslucencyColorInfos;
162-
uniform mat4 translucencyColorMatrix;
163-
#endif
164-
#endif
165-
16676
#ifdef NORMAL
16777
#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)
16878
#ifdef USESPHERICALFROMREFLECTIONMAP

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

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ precision highp float;
6262

6363
#include<openpbrBlockAlbedoOpacity>
6464
#include<openpbrBlockReflectivity>
65-
#include<pbrBlockAmbientOcclusion>
65+
#include<openpbrBlockAmbientOcclusion>
6666
#include<pbrBlockAlphaFresnel>
6767
#include<pbrBlockReflection>
6868

@@ -148,14 +148,14 @@ void main(void) {
148148
// _____________________________ AO _______________________________
149149
ambientOcclusionOutParams aoOut;
150150

151-
#ifdef AMBIENT
152-
vec3 ambientOcclusionColorMap = texture2D(ambientSampler, vAmbientUV + uvOffset).rgb;
151+
#ifdef AMBIENT_OCCLUSION
152+
vec3 ambientOcclusionFromTexture = texture2D(ambientOcclusionSampler, vAmbientOcclusionUV + uvOffset).rgb;
153153
#endif
154154

155155
aoOut = ambientOcclusionBlock(
156-
#ifdef AMBIENT
157-
ambientOcclusionColorMap,
158-
vAmbientInfos
156+
#ifdef AMBIENT_OCCLUSION
157+
ambientOcclusionFromTexture,
158+
vAmbientOcclusionInfos
159159
#endif
160160
);
161161

@@ -213,9 +213,9 @@ vec4 specularColor = vSpecularColor;
213213
#ifdef METALLIC_ROUGHNESS
214214
, vec3(vBaseMetalRoughInfos, 1.0f)
215215
, metallicRoughnessFromTexture
216-
#endif
217-
#if defined(METALLIC_ROUGHNESS) && defined(AOSTOREINMETALMAPRED)
218-
, aoOut.ambientOcclusionColor
216+
#ifdef AOSTOREINMETALMAPRED
217+
, aoOut.ambientOcclusionColor
218+
#endif
219219
#endif
220220
#ifdef DETAIL
221221
, detailColor
@@ -225,8 +225,6 @@ vec4 specularColor = vSpecularColor;
225225

226226
float roughness = reflectivityOut.roughness;
227227
float diffuseRoughness = reflectivityOut.diffuseRoughness;
228-
229-
// surfaceAlbedo = reflectivityOut.surfaceAlbedo;
230228

231229
#if defined(METALLIC_ROUGHNESS) && defined(AOSTOREINMETALMAPRED)
232230
aoOut.ambientOcclusionColor = reflectivityOut.ambientOcclusionColor;
@@ -235,7 +233,6 @@ vec4 specularColor = vSpecularColor;
235233
// _____________________________ Compute Geometry info _________________________________
236234
#include<pbrBlockGeometryInfo>
237235

238-
239236
// _____________________________ Reflection Info _______________________________________
240237
#ifdef REFLECTION
241238
reflectionOutParams reflectionOut;
@@ -312,7 +309,31 @@ vec4 specularColor = vSpecularColor;
312309
#include<openpbrBlockFinalLitComponents>
313310
#endif // !UNLIT
314311

315-
#include<pbrBlockFinalUnlitComponents>
312+
// #include<pbrBlockFinalUnlitComponents>
313+
// _____________________________ Diffuse ________________________________________
314+
vec3 finalDiffuse = diffuseBase;
315+
finalDiffuse *= surfaceAlbedo;
316+
317+
finalDiffuse = max(finalDiffuse, 0.0);
318+
finalDiffuse *= vLightingIntensity.x;
319+
320+
// _____________________________ Emissive ________________________________________
321+
vec3 finalEmission = vEmissionColor;
322+
#ifdef EMISSION
323+
vec3 emissionColorTex = texture2D(emissionSampler, vEmissionUV + uvOffset).rgb;
324+
#ifdef EMISSION_GAMMA
325+
finalEmission *= toLinearSpace(emissionColorTex.rgb);
326+
#else
327+
finalEmission *= emissionColorTex.rgb;
328+
#endif
329+
finalEmission *= vEmissionInfos.y;
330+
#endif
331+
finalEmission *= vLightingIntensity.y;
332+
333+
// ______________________________ Ambient ________________________________________
334+
#ifdef AMBIENT_OCCLUSION
335+
finalDiffuse *= mix(vec3(1.), aoOut.ambientOcclusionColor, 1.0 - vAmbientOcclusionInfos.y);
336+
#endif
316337

317338
#define CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION
318339

0 commit comments

Comments
 (0)