glTF importer: Fix division by zero with trans+spec

This commit is contained in:
Julien Duroure 2023-01-27 18:43:49 +01:00
parent 9958ddb879
commit 2207539e32
3 changed files with 14 additions and 3 deletions

View File

@ -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',

View File

@ -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)

View File

@ -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)