[Bf-blender-cvs] [513b4b44239] principled-v2: Rework temporary Eevee fix

Lukas Stockner noreply at git.blender.org
Sun Oct 30 16:35:31 CET 2022


Commit: 513b4b44239b98f274e62e5941b18eddad36995e
Author: Lukas Stockner
Date:   Sun Oct 30 15:08:00 2022 +0100
Branches: principled-v2
https://developer.blender.org/rB513b4b44239b98f274e62e5941b18eddad36995e

Rework temporary Eevee fix

===================================================================

M	source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
M	source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc

===================================================================

diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
index 8f91ded3f82..0833809cc42 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
@@ -15,13 +15,11 @@ float principled_sheen(float NV)
 
 void node_bsdf_principled(vec4 base_color,
                           float subsurface,
-                          float subsurface_scale_TODO,
                           vec3 subsurface_radius,
                           vec4 subsurface_color,
                           float subsurface_ior,
                           float subsurface_anisotropy,
                           float metallic,
-                          vec4 metallic_edge_TODO,
                           float specular,
                           float specular_tint,
                           float roughness,
@@ -29,12 +27,8 @@ void node_bsdf_principled(vec4 base_color,
                           float anisotropic_rotation,
                           float sheen,
                           float sheen_tint,
-                          float sheen_roughness_TODO,
                           float clearcoat,
                           float clearcoat_roughness,
-                          vec4 clearcoat_tint_TODO,
-                          float thin_film_thickness_TODO,
-                          float thin_film_ior_TODO,
                           float ior,
                           float transmission,
                           float transmission_roughness,
@@ -47,15 +41,11 @@ void node_bsdf_principled(vec4 base_color,
                           float weight,
                           const float do_diffuse,
                           const float do_clearcoat,
-                          // const float do_refraction,
-                          // const float do_multiscatter,
+                          const float do_refraction,
+                          const float do_multiscatter,
                           float do_sss,
                           out Closure result)
 {
-  // TODO: Disabled because of GLSL argument limit
-  float do_multiscatter = 0.0f;
-  float do_refraction = 0.0f;
-
   /* Match cycles. */
   metallic = clamp(metallic, 0.0, 1.0);
   transmission = clamp(transmission, 0.0, 1.0) * (1.0 - metallic);
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc
index ad0b545aabf..13165bf11be 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc
@@ -149,30 +149,37 @@ static int node_shader_gpu_bsdf_principled(GPUMaterial *mat,
                                            GPUNodeStack *in,
                                            GPUNodeStack *out)
 {
+  in[2].type = GPU_NONE;
+  in[8].type = GPU_NONE;
+  in[16].type = GPU_NONE;
+  in[19].type = GPU_NONE;
+  in[20].type = GPU_NONE;
+  in[21].type = GPU_NONE;
+
   /* Normals */
-  if (!in[22].link) {
-    GPU_link(mat, "world_normals_get", &in[22].link);
+  if (!in[28].link) {
+    GPU_link(mat, "world_normals_get", &in[28].link);
   }
 
   /* Clearcoat Normals */
-  if (!in[23].link) {
-    GPU_link(mat, "world_normals_get", &in[23].link);
+  if (!in[29].link) {
+    GPU_link(mat, "world_normals_get", &in[29].link);
   }
 
 #if 0 /* Not used at the moment. */
   /* Tangents */
-  if (!in[24].link) {
+  if (!in[30].link) {
     GPUNodeLink *orco = GPU_attribute(CD_ORCO, "");
-    GPU_link(mat, "tangent_orco_z", orco, &in[24].link);
-    GPU_link(mat, "node_tangent", in[24].link, &in[24].link);
+    GPU_link(mat, "tangent_orco_z", orco, &in[30].link);
+    GPU_link(mat, "node_tangent", in[30].link, &in[30].link);
   }
 #endif
 
-  bool use_diffuse = socket_not_one(6) && socket_not_one(17);
+  bool use_diffuse = socket_not_one(7) && socket_not_one(23);
   bool use_subsurf = socket_not_zero(1) && use_diffuse;
-  bool use_refract = socket_not_one(6) && socket_not_zero(17);
-  bool use_transparency = socket_not_one(21);
-  bool use_clear = socket_not_zero(14);
+  bool use_refract = socket_not_one(7) && socket_not_zero(23);
+  bool use_transparency = socket_not_one(27);
+  bool use_clear = socket_not_zero(17);
 
   eGPUMaterialFlag flag = GPU_MATFLAG_GLOSSY;
   if (use_diffuse) {
@@ -224,17 +231,16 @@ static int node_shader_gpu_bsdf_principled(GPUMaterial *mat,
 
   GPU_material_flag_set(mat, flag);
 
-  return GPU_stack_link(
-      mat,
-      node,
-      "node_bsdf_principled",
-      in,
-      out,
-      GPU_constant(&use_diffuse_f),
-      GPU_constant(&use_clear_f),
-      // GPU_constant(&use_refract_f),
-      // GPU_constant(&use_multi_scatter),  // TODO: Disabled because of GLSL argument limit
-      GPU_uniform(&use_sss));
+  return GPU_stack_link(mat,
+                        node,
+                        "node_bsdf_principled",
+                        in,
+                        out,
+                        GPU_constant(&use_diffuse_f),
+                        GPU_constant(&use_clear_f),
+                        GPU_constant(&use_refract_f),
+                        GPU_constant(&use_multi_scatter),
+                        GPU_uniform(&use_sss));
 }
 
 static void node_shader_update_principled(bNodeTree *ntree, bNode *node)



More information about the Bf-blender-cvs mailing list