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:
authorBastien Montagne <bastien@blender.org>2022-01-10 13:20:59 +0300
committerBastien Montagne <bastien@blender.org>2022-01-10 13:20:59 +0300
commitf26299bacc19ef64ab8e11296694756d77e83449 (patch)
tree54f349d104b553c719921e5efbb0da323030e207 /io_scene_obj
parent29c03b657082c266233b3795407d71629f3a02ea (diff)
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.
Diffstat (limited to 'io_scene_obj')
-rw-r--r--io_scene_obj/__init__.py4
-rw-r--r--io_scene_obj/export_obj.py7
-rw-r--r--io_scene_obj/import_obj.py6
3 files changed, 9 insertions, 8 deletions
diff --git a/io_scene_obj/__init__.py b/io_scene_obj/__init__.py
index 40001689..78c2314e 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 796515cd..e5466c76 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 87ba4bd2..0ba4f898 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])