From 6753d8082f815ff878538c2a9c64310686b2ea90 Mon Sep 17 00:00:00 2001
From: Mathias Paulin <mathias.paulin@irit.fr>
Date: Fri, 9 Apr 2021 16:45:13 +0200
Subject: [PATCH] Remplace material parameter by roughnes parameter in
 getEnvMapColors

---
 src/DemoApp/main.cpp                                       | 3 ++-
 src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.cpp | 6 +++---
 src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.hpp | 3 ++-
 src/libRender/RadiumNBR/Renderer/Visualization.hpp         | 3 ++-
 4 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/DemoApp/main.cpp b/src/DemoApp/main.cpp
index a2b6dd5..5f8827c 100644
--- a/src/DemoApp/main.cpp
+++ b/src/DemoApp/main.cpp
@@ -174,7 +174,8 @@ const std::string customFragmentColor{
     "vec3(0, 0, 1), diffColor, specColor );\n"
     "vec3 envd;\n"
     "vec3 envs;\n"
-    "int e = getEnvMapColors(mat, normal_world, envd, envs);"
+    "float r = getGGXRoughness(mat, getPerVertexTexCoord());\n"
+    "int e = getEnvMapColors(r, normal_world, envd, envs);"
     "vec3 finalColor = normal_world*0.5+0.5;\n"
     "finalColor *= fragCustomAttrib.rgb;\n"
     "if (e==1) { finalColor = finalColor*envd + specColor*envs; }\n"
diff --git a/src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.cpp b/src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.cpp
index c4d29a2..43f4711 100644
--- a/src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.cpp
+++ b/src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.cpp
@@ -21,7 +21,7 @@ using namespace gl;
 
 // Envmap shader source
 static const std::string noopEnvMapFunction{
-    "\nint getEnvMapColors(Material mat, vec3 normalWorld, out vec3 diffuse, out vec3 specular) {\n"
+    "\nint getEnvMapColors(float roughness, vec3 normalWorld, out vec3 diffuse, out vec3 specular) {\n"
     "   diffuse = vec3(1); specular = vec3(1); return 0;\n"
     "}\n\n"
 };
@@ -34,7 +34,7 @@ static const std::string envMapFunction{
     "uniform mat4 blueShCoeffs;\n"
     "uniform float envStrength;\n"
     "const float OneOverPi = 0.3183098862;\n"
-    "int getEnvMapColors(Material mat, vec3 normalWorld, out vec3 diffuse, out vec3 specular) {\n"
+    "int getEnvMapColors(float roughness, vec3 normalWorld, out vec3 diffuse, out vec3 specular) {\n"
     "   vec3 view = normalize(in_viewVector);\n"
     "   vec3 rfl = reflect(-view, normalWorld.xyz);\n"
     "   vec4 up = vec4(normalWorld, 1);\n"
@@ -43,7 +43,7 @@ static const std::string envMapFunction{
     "   diffuse.b = dot(up, blueShCoeffs * up);\n"
     "   diffuse *= envStrength/OneOverPi;\n"
     "   float cosTi = clamp(dot(rfl, normalWorld), 0.001, 1.);\n"
-    "   float r = getGGXRoughness(material, getPerVertexTexCoord()) * numLod;\n"
+    "   float r = roughness * numLod;\n"
     "   specular = textureLod(envTexture, rfl, r).rgb  * cosTi * envStrength;\n"
     "   return 1;\n"
     "}\n\n"};
diff --git a/src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.hpp b/src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.hpp
index 7e1309a..fa0745b 100644
--- a/src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.hpp
+++ b/src/libRender/RadiumNBR/Passes/CustomAttribToColorPass.hpp
@@ -99,7 +99,8 @@ class CustomAttribToColorPass : public RenderPass
         "vec3(0, 0, 1), diffColor, specColor );\n"
         "vec3 envd;\n"
         "vec3 envs;\n"
-        "int e = getEnvMapColors(mat, normal_world, envd, envs);"
+        "float r = getGGXRoughness(mat, getPerVertexTexCoord());\n"
+        "int e = getEnvMapColors(r, normal_world, envd, envs);"
         "vec3 finalColor;\n"
         "if (e==1) { finalColor = diffColor*envd + specColor*envs; }\n"
         "else { finalColor = (diffColor + specColor) * max(lightDir.z, 0) \n"
diff --git a/src/libRender/RadiumNBR/Renderer/Visualization.hpp b/src/libRender/RadiumNBR/Renderer/Visualization.hpp
index 5c48202..85813d3 100644
--- a/src/libRender/RadiumNBR/Renderer/Visualization.hpp
+++ b/src/libRender/RadiumNBR/Renderer/Visualization.hpp
@@ -59,7 +59,8 @@ class NodeBasedRenderer_LIBRARY_API VisualizationController
         "vec3(0, 0, 1), diffColor, specColor );\n"
         "vec3 envd;\n"
         "vec3 envs;\n"
-        "int e = getEnvMapColors(mat, normal_world, envd, envs);"
+        "float r = getGGXRoughness(mat, getPerVertexTexCoord());\n"
+        "int e = getEnvMapColors(r, normal_world, envd, envs);"
         "vec3 finalColor;\n"
         "if (e==1) { finalColor = diffColor*envd + specColor*envs; }\n"
         "else { finalColor = (diffColor + specColor) * max(lightDir.z, 0) \n"
-- 
GitLab