Kaynağa Gözat

reworked PBR shaders for UBO

Benjamin Guignabert 8 yıl önce
ebeveyn
işleme
ce51c070cb

+ 95 - 0
src/Shaders/ShadersInclude/pbrFragmentDeclaration.fx

@@ -0,0 +1,95 @@
+uniform vec3 vEyePosition;
+uniform vec3 vAmbientColor;
+uniform vec3 vReflectionColor;
+uniform vec4 vAlbedoColor;
+
+// CUSTOM CONTROLS
+uniform vec4 vLightingIntensity;
+uniform vec4 vCameraInfos;
+
+#ifdef OVERLOADEDVALUES
+uniform vec4 vOverloadedIntensity;
+uniform vec3 vOverloadedAmbient;
+uniform vec3 vOverloadedAlbedo;
+uniform vec3 vOverloadedReflectivity;
+uniform vec3 vOverloadedEmissive;
+uniform vec3 vOverloadedReflection;
+uniform vec3 vOverloadedMicroSurface;
+#endif
+
+#ifdef OVERLOADEDSHADOWVALUES
+uniform vec4 vOverloadedShadowIntensity;
+#endif
+
+#if defined(REFLECTION) || defined(REFRACTION)
+uniform vec2 vMicrosurfaceTextureLods;
+#endif
+
+uniform vec4 vReflectivityColor;
+uniform vec3 vEmissiveColor;
+
+// Samplers
+#ifdef ALBEDO
+uniform vec2 vAlbedoInfos;
+#endif
+
+#ifdef AMBIENT
+uniform vec3 vAmbientInfos;
+#endif
+
+#ifdef OPACITY	
+uniform vec2 vOpacityInfos;
+#endif
+
+#ifdef EMISSIVE
+uniform vec2 vEmissiveInfos;
+#endif
+
+#ifdef LIGHTMAP
+uniform vec2 vLightmapInfos;
+#endif
+
+#if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
+uniform vec3 vReflectivityInfos;
+#endif
+
+#ifdef MICROSURFACEMAP
+uniform vec2 vMicroSurfaceSamplerInfos;
+#endif
+
+#ifdef OPACITYFRESNEL
+uniform vec4 opacityParts;
+#endif
+
+#ifdef EMISSIVEFRESNEL
+uniform vec4 emissiveLeftColor;
+uniform vec4 emissiveRightColor;
+#endif
+
+// Refraction Reflection
+#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION)
+uniform mat4 view;
+#endif
+
+// Refraction
+#ifdef REFRACTION
+uniform vec4 vRefractionInfos;
+
+#ifdef REFRACTIONMAP_3D
+#else
+uniform mat4 refractionMatrix;
+#endif
+#endif
+
+// Reflection
+#ifdef REFLECTION
+uniform vec2 vReflectionInfos;
+
+#ifdef REFLECTIONMAP_SKYBOX
+#else
+
+#if defined(REFLECTIONMAP_PLANAR) || defined(REFLECTIONMAP_CUBIC) || defined(REFLECTIONMAP_PROJECTION)
+uniform mat4 reflectionMatrix;
+#endif
+#endif
+#endif

+ 57 - 0
src/Shaders/ShadersInclude/pbrUboDeclaration.fx

@@ -0,0 +1,57 @@
+layout(std140, column_major) uniform;
+
+uniform Material
+{
+	uniform mat4 albedoMatrix;
+	uniform vec2 vAlbedoInfos;
+	uniform mat4 ambientMatrix;
+	uniform vec3 vAmbientInfos;
+	uniform mat4 opacityMatrix;
+	uniform vec2 vOpacityInfos;
+	uniform vec2 vEmissiveInfos;
+	uniform mat4 emissiveMatrix;
+	uniform vec2 vLightmapInfos;
+	uniform mat4 lightmapMatrix;
+	uniform vec3 vReflectivityInfos;
+	uniform mat4 reflectivityMatrix;
+	uniform vec2 vMicroSurfaceSamplerInfos;
+	uniform mat4 microSurfaceSamplerMatrix;
+	uniform vec3 vBumpInfos;
+	uniform mat4 bumpMatrix;
+	uniform float pointSize;
+
+	uniform vec3 vEyePosition;
+	uniform vec3 vAmbientColor;
+	uniform vec3 vReflectionColor;
+	uniform vec4 vAlbedoColor;
+
+	uniform vec4 vLightingIntensity;
+	uniform vec4 vCameraInfos;
+
+	uniform vec4 vOverloadedIntensity;
+	uniform vec3 vOverloadedAmbient;
+	uniform vec3 vOverloadedAlbedo;
+	uniform vec3 vOverloadedReflectivity;
+	uniform vec3 vOverloadedEmissive;
+	uniform vec3 vOverloadedReflection;
+	uniform vec3 vOverloadedMicroSurface;
+
+	uniform vec4 vOverloadedShadowIntensity;
+	uniform vec2 vMicrosurfaceTextureLods;
+	uniform vec4 vReflectivityColor;
+	uniform vec3 vEmissiveColor;
+
+	uniform vec4 opacityParts;
+	uniform vec4 emissiveLeftColor;
+	uniform vec4 emissiveRightColor;
+	uniform vec4 vRefractionInfos;
+	uniform mat4 refractionMatrix;
+
+	uniform vec2 vReflectionInfos;
+	uniform mat4 reflectionMatrix;
+};
+
+uniform Scene {
+	mat4 viewProjection;
+	mat4 view;
+};

+ 46 - 0
src/Shaders/ShadersInclude/pbrVertexDeclaration.fx

@@ -0,0 +1,46 @@
+uniform mat4 view;
+uniform mat4 viewProjection;
+
+#ifdef ALBEDO
+uniform mat4 albedoMatrix;
+uniform vec2 vAlbedoInfos;
+#endif
+
+#ifdef AMBIENT
+uniform mat4 ambientMatrix;
+uniform vec3 vAmbientInfos;
+#endif
+
+#ifdef OPACITY
+uniform mat4 opacityMatrix;
+uniform vec2 vOpacityInfos;
+#endif
+
+#ifdef EMISSIVE
+uniform vec2 vEmissiveInfos;
+uniform mat4 emissiveMatrix;
+#endif
+
+#ifdef LIGHTMAP
+uniform vec2 vLightmapInfos;
+uniform mat4 lightmapMatrix;
+#endif
+
+#if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
+uniform vec3 vReflectivityInfos;
+uniform mat4 reflectivityMatrix;
+#endif
+
+#ifdef MICROSURFACEMAP
+uniform vec2 vMicroSurfaceSamplerInfos;
+uniform mat4 microSurfaceSamplerMatrix;
+#endif
+
+#ifdef BUMP
+uniform vec3 vBumpInfos;
+uniform mat4 bumpMatrix;
+#endif
+
+#ifdef POINTSIZE
+uniform float pointSize;
+#endif

+ 2 - 56
src/Shaders/pbr.fragment.fx

@@ -12,35 +12,7 @@
 
 precision highp float;
 
-uniform vec3 vEyePosition;
-uniform vec3 vAmbientColor;
-uniform vec3 vReflectionColor;
-uniform vec4 vAlbedoColor;
-
-// CUSTOM CONTROLS
-uniform vec4 vLightingIntensity;
-uniform vec4 vCameraInfos;
-
-#ifdef OVERLOADEDVALUES
-uniform vec4 vOverloadedIntensity;
-uniform vec3 vOverloadedAmbient;
-uniform vec3 vOverloadedAlbedo;
-uniform vec3 vOverloadedReflectivity;
-uniform vec3 vOverloadedEmissive;
-uniform vec3 vOverloadedReflection;
-uniform vec3 vOverloadedMicroSurface;
-#endif
-
-#ifdef OVERLOADEDSHADOWVALUES
-uniform vec4 vOverloadedShadowIntensity;
-#endif
-
-#if defined(REFLECTION) || defined(REFRACTION)
-uniform vec2 vMicrosurfaceTextureLods;
-#endif
-
-uniform vec4 vReflectivityColor;
-uniform vec3 vEmissiveColor;
+#include<__decl__pbrFragment>
 
 // Input
 varying vec3 vPositionW;
@@ -60,77 +32,54 @@ varying vec4 vColor;
 #ifdef ALBEDO
 varying vec2 vAlbedoUV;
 uniform sampler2D albedoSampler;
-uniform vec2 vAlbedoInfos;
 #endif
 
 #ifdef AMBIENT
 varying vec2 vAmbientUV;
 uniform sampler2D ambientSampler;
-uniform vec3 vAmbientInfos;
 #endif
 
 #ifdef OPACITY	
 varying vec2 vOpacityUV;
 uniform sampler2D opacitySampler;
-uniform vec2 vOpacityInfos;
 #endif
 
 #ifdef EMISSIVE
 varying vec2 vEmissiveUV;
-uniform vec2 vEmissiveInfos;
 uniform sampler2D emissiveSampler;
 #endif
 
 #ifdef LIGHTMAP
 varying vec2 vLightmapUV;
-uniform vec2 vLightmapInfos;
 uniform sampler2D lightmapSampler;
 #endif
 
 #if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
 varying vec2 vReflectivityUV;
-uniform vec3 vReflectivityInfos;
 uniform sampler2D reflectivitySampler;
 #endif
 
 #ifdef MICROSURFACEMAP
 varying vec2 vMicroSurfaceSamplerUV;
-uniform vec2 vMicroSurfaceSamplerInfos;
 uniform sampler2D microSurfaceSampler;
 #endif
 
 // Fresnel
 #include<fresnelFunction>
 
-#ifdef OPACITYFRESNEL
-uniform vec4 opacityParts;
-#endif
-
-#ifdef EMISSIVEFRESNEL
-uniform vec4 emissiveLeftColor;
-uniform vec4 emissiveRightColor;
-#endif
-
-// Refraction Reflection
-#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION)
-uniform mat4 view;
-#endif
-
 // Refraction
 #ifdef REFRACTION
-uniform vec4 vRefractionInfos;
+
 
 #ifdef REFRACTIONMAP_3D
 uniform samplerCube refractionCubeSampler;
 #else
 uniform sampler2D refraction2DSampler;
-uniform mat4 refractionMatrix;
 #endif
 #endif
 
 // Reflection
 #ifdef REFLECTION
-uniform vec2 vReflectionInfos;
 
 #ifdef REFLECTIONMAP_3D
 uniform samplerCube reflectionCubeSampler;
@@ -145,9 +94,6 @@ varying vec3 vPositionUVW;
 varying vec3 vDirectionW;
 #endif
 
-#if defined(REFLECTIONMAP_PLANAR) || defined(REFLECTIONMAP_CUBIC) || defined(REFLECTIONMAP_PROJECTION)
-uniform mat4 reflectionMatrix;
-#endif
 #endif
 
 #include<reflectionFunction>

+ 2 - 22
src/Shaders/pbr.vertex.fx

@@ -1,5 +1,7 @@
 precision highp float;
 
+#include<__decl__pbrVertex>
+
 // Attributes
 attribute vec3 position;
 #ifdef NORMAL
@@ -24,58 +26,37 @@ attribute vec4 color;
 #include<instancesDeclaration>
 
 uniform mat4 view;
-uniform mat4 viewProjection;
 
 #ifdef ALBEDO
 varying vec2 vAlbedoUV;
-uniform mat4 albedoMatrix;
-uniform vec2 vAlbedoInfos;
 #endif
 
 #ifdef AMBIENT
 varying vec2 vAmbientUV;
-uniform mat4 ambientMatrix;
-uniform vec3 vAmbientInfos;
 #endif
 
 #ifdef OPACITY
 varying vec2 vOpacityUV;
-uniform mat4 opacityMatrix;
-uniform vec2 vOpacityInfos;
 #endif
 
 #ifdef EMISSIVE
 varying vec2 vEmissiveUV;
-uniform vec2 vEmissiveInfos;
-uniform mat4 emissiveMatrix;
 #endif
 
 #ifdef LIGHTMAP
 varying vec2 vLightmapUV;
-uniform vec2 vLightmapInfos;
-uniform mat4 lightmapMatrix;
 #endif
 
 #if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
 varying vec2 vReflectivityUV;
-uniform vec3 vReflectivityInfos;
-uniform mat4 reflectivityMatrix;
 #endif
 
 #ifdef MICROSURFACEMAP
 varying vec2 vMicroSurfaceSamplerUV;
-uniform vec2 vMicroSurfaceSamplerInfos;
-uniform mat4 microSurfaceSamplerMatrix;
 #endif
 
 #ifdef BUMP
 varying vec2 vBumpUV;
-uniform vec3 vBumpInfos;
-uniform mat4 bumpMatrix;
-#endif
-
-#ifdef POINTSIZE
-uniform float pointSize;
 #endif
 
 // Output
@@ -88,7 +69,6 @@ varying vec3 vNormalW;
 varying vec4 vColor;
 #endif
 
-
 #include<bumpVertexDeclaration>
 #include<clipPlaneVertexDeclaration>
 #include<fogVertexDeclaration>