From f26299bacc19ef64ab8e11296694756d77e83449 Mon Sep 17 00:00:00 2001 From: Bastien Montagne <bastien@blender.org> Date: Mon, 10 Jan 2022 11:20:59 +0100 Subject: [PATCH] Fix T94516: OBJ/MTL Material Roughness imported and exported inaccurately. The addon would assume an OBJ range of [0.0-900.0] for the Ns value, when it actually is supposed to be [0.0-1000.0]. WARNING: This is introducing a slight incompatibility (value shifting of the roughness parameter) with older OBJ files exported by Blender. --- io_scene_obj/__init__.py | 4 ++-- io_scene_obj/export_obj.py | 7 ++++--- io_scene_obj/import_obj.py | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/io_scene_obj/__init__.py b/io_scene_obj/__init__.py index 400016894..78c2314e4 100644 --- a/io_scene_obj/__init__.py +++ b/io_scene_obj/__init__.py @@ -21,8 +21,8 @@ bl_info = { "name": "Wavefront OBJ format", "author": "Campbell Barton, Bastien Montagne", - "version": (3, 8, 1), - "blender": (2, 81, 6), + "version": (3, 9, 0), + "blender": (3, 0, 0), "location": "File > Import-Export", "description": "Import-Export OBJ, Import OBJ mesh, UV's, materials and textures", "warning": "", diff --git a/io_scene_obj/export_obj.py b/io_scene_obj/export_obj.py index 796515cd2..e5466c764 100644 --- a/io_scene_obj/export_obj.py +++ b/io_scene_obj/export_obj.py @@ -74,9 +74,10 @@ def write_mtl(scene, filepath, path_mode, copy_set, mtl_dict): use_transparency = mat_wrap.alpha != 1.0 # XXX Totally empirical conversion, trying to adapt it - # (from 1.0 - 0.0 Principled BSDF range to 0.0 - 900.0 OBJ specular exponent range)... - spec = (1.0 - mat_wrap.roughness) * 30 - spec *= spec + # (from 1.0 - 0.0 Principled BSDF range to 0.0 - 1000.0 OBJ specular exponent range): + # (1.0 - bsdf_roughness)^2 * 1000 + spec = (1.0 - mat_wrap.roughness) + spec *= spec * 1000 fw('Ns %.6f\n' % spec) # Ambient diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py index 87ba4bd2a..0ba4f8985 100644 --- a/io_scene_obj/import_obj.py +++ b/io_scene_obj/import_obj.py @@ -361,9 +361,9 @@ def create_materials(filepath, relpath, context_mat_wrap.emission_strength = 1.0 elif line_id == b'ns': # XXX Totally empirical conversion, trying to adapt it - # (from 0.0 - 900.0 OBJ specular exponent range to 1.0 - 0.0 Principled BSDF range)... - val = max(0.0, min(900.0, float_func(line_split[1]))) - context_mat_wrap.roughness = 1.0 - (sqrt(val) / 30) + # (from 0.0 - 1000.0 OBJ specular exponent range to 1.0 - 0.0 Principled BSDF range)... + val = max(0.0, min(1000.0, float_func(line_split[1]))) + context_mat_wrap.roughness = 1.0 - (sqrt(val / 1000)) context_material_vars.add("roughness") elif line_id == b'ni': # Refraction index (between 0.001 and 10). context_mat_wrap.ior = float_func(line_split[1]) -- GitLab