Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Duroure <julien.duroure@gmail.com>2022-07-09 11:03:39 +0300
committerJulien Duroure <julien.duroure@gmail.com>2022-07-09 11:03:39 +0300
commitc43a6d4f828e021d0c48220d6ac1d02d992ee20e (patch)
tree6ab762888224c99c0645e20da1340ef51b7b6c5c
parent1cc09e24c5163ccba2bcb6250da57dd649fb9151 (diff)
glTF exporter: fix division by zero in some specular approximation
-rwxr-xr-xio_scene_gltf2/__init__.py2
-rw-r--r--io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_specular.py22
2 files changed, 15 insertions, 9 deletions
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index c3297e1c..5c8872f3 100755
--- a/io_scene_gltf2/__init__.py
+++ b/io_scene_gltf2/__init__.py
@@ -4,7 +4,7 @@
bl_info = {
'name': 'glTF 2.0 format',
'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
- "version": (3, 3, 14),
+ "version": (3, 3, 15),
'blender': (3, 3, 0),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_specular.py b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_specular.py
index e4a0c52d..3441b5ad 100644
--- a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_specular.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_specular.py
@@ -114,10 +114,13 @@ def specular(mh, location_specular,
f0_from_ior = ((ior - 1)/(ior + 1))**2
lum_specular_color = luminance(specular_color_factor)
blender_specular = ((lum_specular_color - transmission_factor) / (1 - transmission_factor)) * (1 / 0.08) * f0_from_ior
- blender_specular_tint = luminance((normalize(specular_color_factor) - 1) / (normalize(base_color) - 1))
- if blender_specular_tint < 0 or blender_specular_tint > 1:
- # TODOExt Warning clamping
- blender_specular_tint = np.maximum(np.minimum(blender_specular_tint, 1), 0)
+ if not all([i == 0 for i in normalize(base_color) - 1]):
+ blender_specular_tint = luminance((normalize(specular_color_factor) - 1) / (normalize(base_color) - 1))
+ if blender_specular_tint < 0 or blender_specular_tint > 1:
+ # TODOExt Warning clamping
+ blender_specular_tint = np.maximum(np.minimum(blender_specular_tint, 1), 0)
+ else:
+ blender_specular_tint = 1.0
specular_socket.default_value = blender_specular
specular_tint_socket.default_value = blender_specular_tint
@@ -211,10 +214,13 @@ def specular(mh, location_specular,
f0_from_ior = ((ior - 1)/(ior + 1))**2
lum_specular_color = stack3(luminance(buffers['speccolor']))
blender_specular = ((lum_specular_color - buffers['transmission']) / (1 - buffers['transmission'])) * (1 / 0.08) * f0_from_ior
- blender_specular_tint = luminance((normalize(buffers['speccolor']) - 1) / (normalize(buffers['basecolor']) - 1))
- np.nan_to_num(blender_specular_tint, copy=False)
- blender_specular_tint = np.clip(blender_specular_tint, 0.0, 1.0)
- blender_specular_tint = stack3(blender_specular_tint)
+ if not np.all(normalize(buffers['basecolor']) - 1 == 0.0):
+ blender_specular_tint = luminance((normalize(buffers['speccolor']) - 1) / (normalize(buffers['basecolor']) - 1))
+ np.nan_to_num(blender_specular_tint, copy=False)
+ blender_specular_tint = np.clip(blender_specular_tint, 0.0, 1.0)
+ blender_specular_tint = stack3(blender_specular_tint)
+ else:
+ blender_specular_tint = stack3(np.ones((width, height)))
blender_specular = np.dstack((blender_specular, np.ones((width, height)))) # Set alpha to 1
blender_specular_tint = np.dstack((blender_specular_tint, np.ones((width, height)))) # Set alpha to 1