[Bf-extensions-cvs] [2207539e] master: glTF importer: Fix division by zero with trans+spec

Julien Duroure noreply at git.blender.org
Fri Jan 27 18:48:48 CET 2023


Commit: 2207539e32c34609c9c8ca48c640f91259e71326
Author: Julien Duroure
Date:   Fri Jan 27 18:43:49 2023 +0100
Branches: master
https://developer.blender.org/rBA2207539e32c34609c9c8ca48c640f91259e71326

glTF importer: Fix division by zero with trans+spec

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

M	io_scene_gltf2/__init__.py
M	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_specular.py
M	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_transmission.py

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

diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index dfd0e426..770814b1 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, 5, 17),
+    "version": (3, 5, 18),
     'blender': (3, 4, 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 80e46c27..28af68d8 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
@@ -113,7 +113,11 @@ 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
+        if transmission_factor != 1.0:
+            blender_specular = ((lum_specular_color - transmission_factor) / (1 - transmission_factor)) * (1 / 0.08) * f0_from_ior
+        else:
+            # Avoid division by 0
+            blender_specular = 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:
@@ -213,7 +217,11 @@ 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
+        if transmission_factor != 1.0:
+            blender_specular = ((lum_specular_color - buffers['transmission']) / (1 - buffers['transmission'])) * (1 / 0.08) * f0_from_ior
+        else:
+            # Avoid division by 0
+            blender_specular = np.full((width, height, 3), 1.0)
         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)
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_transmission.py b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_transmission.py
index dab25d14..692c6f75 100644
--- a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_transmission.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_transmission.py
@@ -19,6 +19,9 @@ def transmission(mh, location, transmission_socket):
     if transmission_factor == 0:
         return
 
+    # Activate screen refraction (for Eevee)
+    mh.mat.use_screen_refraction = True
+
     tex_info = ext.get('transmissionTexture')
     if tex_info is not None:
         tex_info = TextureInfo.from_dict(tex_info)



More information about the Bf-extensions-cvs mailing list