Browse Source

Add suport to detail map to pbr shader code

Popov72 5 years ago
parent
commit
8f9bfd2f43

+ 8 - 0
src/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.fx

@@ -15,6 +15,10 @@ void albedoOpacityBlock(
     const in vec4 opacityMap,
     const in vec2 vOpacityInfos,
 #endif
+#ifdef DETAIL
+    const in vec4 detailColor,
+    const in vec4 vDetailInfos,
+#endif
     out albedoOpacityOutParams outParams
 )
 {
@@ -40,6 +44,10 @@ void albedoOpacityBlock(
         surfaceAlbedo *= vColor.rgb;
     #endif
 
+    #ifdef DETAIL
+        surfaceAlbedo.rgb = surfaceAlbedo.rgb * (saturate(vec3(detailColor.r) + vDetailInfos.y));
+    #endif
+
     #define CUSTOM_FRAGMENT_UPDATE_ALBEDO
 
     // _____________________________ Alpha Information _______________________________

+ 8 - 0
src/Shaders/ShadersInclude/pbrBlockReflectivity.fx

@@ -34,6 +34,10 @@ void reflectivityBlock(
 #ifdef MICROSURFACEMAP
     const in vec4 microSurfaceTexel,
 #endif
+#ifdef DETAIL
+    const in vec4 detailColor,
+    const in vec4 vDetailInfos,
+#endif
     out reflectivityOutParams outParams
 )
 {
@@ -68,6 +72,10 @@ void reflectivityBlock(
             #endif
         #endif
 
+        #ifdef DETAIL
+            metallicRoughness.g = saturate(metallicRoughness.g + detailColor.b * vDetailInfos.w);
+        #endif
+
         #ifdef MICROSURFACEMAP
             metallicRoughness.g *= microSurfaceTexel.r;
         #endif

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

@@ -14,7 +14,9 @@ uniform Material
     uniform vec3 vReflectionPosition;
     uniform vec3 vReflectionSize;
     uniform vec3 vBumpInfos;
+    uniform vec4 vDetailInfos;
     uniform mat4 albedoMatrix;
+    uniform mat4 detailMatrix;
     uniform mat4 ambientMatrix;
     uniform mat4 opacityMatrix;
     uniform mat4 emissiveMatrix;

+ 8 - 0
src/Shaders/pbr.fragment.fx

@@ -96,6 +96,10 @@ void main(void) {
         opacityMap,
         vOpacityInfos,
     #endif
+    #ifdef DETAIL
+        detailColor,
+        vDetailInfos,
+    #endif
         albedoOpacityOut
     );
 
@@ -170,6 +174,10 @@ void main(void) {
     #ifdef MICROSURFACEMAP
         microSurfaceTexel,
     #endif
+    #ifdef DETAIL
+        detailColor,
+        vDetailInfos,
+    #endif
         reflectivityOut
     );
 

+ 15 - 0
src/Shaders/pbr.vertex.fx

@@ -38,6 +38,10 @@ attribute vec4 color;
 varying vec2 vAlbedoUV;
 #endif
 
+#if defined(DETAIL) && DETAILDIRECTUV == 0
+varying vec2 vDetailUV;
+#endif
+
 #if defined(AMBIENT) && AMBIENTDIRECTUV == 0
 varying vec2 vAmbientUV;
 #endif
@@ -240,6 +244,17 @@ void main(void) {
     }
 #endif
 
+#if defined(DETAIL) && DETAILDIRECTUV == 0
+	if (vDetailInfos.x == 0.)
+	{
+		vDetailUV = vec2(detailMatrix * vec4(uvUpdated, 1.0, 0.0));
+	}
+	else
+	{
+		vDetailUV = vec2(detailMatrix * vec4(uv2, 1.0, 0.0));
+	}
+#endif
+
 #if defined(AMBIENT) && AMBIENTDIRECTUV == 0 
     if (vAmbientInfos.x == 0.)
     {