Py node shader wrapper: Add clamping to official min/max values.
Taking values from relevant node definition C file... Related to T67889.
This commit is contained in:
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user