[Bf-blender-cvs] [db0782e9460] master: Py node shader wrapper: Add clamping to official min/max values.

Bastien Montagne noreply at git.blender.org
Tue Jul 30 11:24:33 CEST 2019


Commit: db0782e9460ef66a688ccb856484554da2e1e9a7
Author: Bastien Montagne
Date:   Tue Jul 30 11:17:01 2019 +0200
Branches: master
https://developer.blender.org/rBdb0782e9460ef66a688ccb856484554da2e1e9a7

Py node shader wrapper: Add clamping to official min/max values.

Taking values from relevant node definition C file...

Related to T67889.

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

M	release/scripts/modules/bpy_extras/node_shader_utils.py

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

diff --git a/release/scripts/modules/bpy_extras/node_shader_utils.py b/release/scripts/modules/bpy_extras/node_shader_utils.py
index 01ccd51aada..0eac9794930 100644
--- a/release/scripts/modules/bpy_extras/node_shader_utils.py
+++ b/release/scripts/modules/bpy_extras/node_shader_utils.py
@@ -42,6 +42,13 @@ def rgb_to_rgba(rgb):
 def rgba_to_rgb(rgba):
     return Color((rgba[0], rgba[1], rgba[2]))
 
+# All clamping value shall follow Blender's defined min/max (check relevant node definition .c file).
+def values_clamp(val, minv, maxv):
+    if hasattr(val, "__iter__"):
+        return tuple(max(minv, min(maxv, v)) for v in val)
+    else:
+        return max(minv, min(maxv, val))
+
 
 class ShaderWrapper():
     """
@@ -267,6 +274,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def base_color_set(self, color):
+        color = values_clamp(color, 0.0, 1.0)
         color = rgb_to_rgba(color)
         self.material.diffuse_color = color
         if self.use_nodes and self.node_principled_bsdf is not None:
@@ -297,6 +305,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def specular_set(self, value):
+        value = values_clamp(value, 0.0, 1.0)
         self.material.specular_intensity = value
         if self.use_nodes and self.node_principled_bsdf is not None:
             self.node_principled_bsdf.inputs["Specular"].default_value = value
@@ -311,6 +320,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def specular_tint_set(self, value):
+        value = values_clamp(value, 0.0, 1.0)
         if self.use_nodes and self.node_principled_bsdf is not None:
             self.node_principled_bsdf.inputs["Specular Tint"].default_value = value
 
@@ -341,6 +351,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def roughness_set(self, value):
+        value = values_clamp(value, 0.0, 1.0)
         self.material.roughness = value
         if self.use_nodes and self.node_principled_bsdf is not None:
             self.node_principled_bsdf.inputs["Roughness"].default_value = value
@@ -371,6 +382,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def metallic_set(self, value):
+        value = values_clamp(value, 0.0, 1.0)
         self.material.metallic = value
         if self.use_nodes and self.node_principled_bsdf is not None:
             self.node_principled_bsdf.inputs["Metallic"].default_value = value
@@ -401,6 +413,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def ior_set(self, value):
+        value = values_clamp(value, 0.0, 1000.0)
         if self.use_nodes and self.node_principled_bsdf is not None:
             self.node_principled_bsdf.inputs["IOR"].default_value = value
 
@@ -427,6 +440,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def transmission_set(self, value):
+        value = values_clamp(value, 0.0, 1.0)
         if self.use_nodes and self.node_principled_bsdf is not None:
             self.node_principled_bsdf.inputs["Transmission"].default_value = value
 
@@ -453,6 +467,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def alpha_set(self, value):
+        value = values_clamp(value, 0.0, 1.0)
         if self.use_nodes and self.node_principled_bsdf is not None:
             self.node_principled_bsdf.inputs["Alpha"].default_value = value
 
@@ -483,6 +498,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
 
     @_set_check
     def normalmap_strength_set(self, value):
+        value = values_clamp(value, 0.0, 10.0)
         if self.use_nodes and self.node_normalmap is not None:
             self.node_normalmap.inputs["Strength"].default_value = value



More information about the Bf-blender-cvs mailing list