From dda85f9ac53db9978dc59bc0cc954e8b63ba5c60 Mon Sep 17 00:00:00 2001 From: Johan Walles Date: Mon, 27 Feb 2023 17:53:57 +0100 Subject: [PATCH] Fix Node Wrangler issues with texturecan texture imports Before this change, if you tried to "Add Principled Setup" for some texturecan.com materials, Node Wrangler used e.g. `metal_0010_normal_directx_1k.png` for the normal map. However Blender wants OpenGL style normal maps. With this change it now correctly picks `metal_0010_normal_opengl_1k.png`. Additionally, this change adds a (very) short README with instructions for how to run the Node Wrangler tests. Pull Request #104445 --- node_wrangler/README.md | 5 +++++ node_wrangler/util.py | 7 +++++-- node_wrangler/util_test.py | 28 ++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 node_wrangler/README.md diff --git a/node_wrangler/README.md b/node_wrangler/README.md new file mode 100644 index 00000000..33648cf5 --- /dev/null +++ b/node_wrangler/README.md @@ -0,0 +1,5 @@ +# Running Tests + +``` +./util_test.py +``` diff --git a/node_wrangler/util.py b/node_wrangler/util.py index 80ca0bed..b3425c85 100644 --- a/node_wrangler/util.py +++ b/node_wrangler/util.py @@ -153,10 +153,13 @@ def match_files_to_socket_names(files, sockets): for sname in sockets: for name, tag_list in names_to_tag_lists.items(): - if sname[0] == "Normal" and "dx" in tag_list: + if sname[0] == "Normal": # Blender wants GL normals, not DX (DirectX) ones: # https://www.reddit.com/r/blender/comments/rbuaua/texture_contains_normaldx_and_normalgl_files/ - continue + if 'dx' in tag_list: + continue + if 'directx' in tag_list: + continue matches = set(sname[1]).intersection(set(tag_list)) if matches: diff --git a/node_wrangler/util_test.py b/node_wrangler/util_test.py index 210259ae..4735aaad 100755 --- a/node_wrangler/util_test.py +++ b/node_wrangler/util_test.py @@ -225,6 +225,34 @@ class TestPutFileNamesInSockets(unittest.TestCase): }, ) + def test_texturecan(self): + """Texture from: https://www.texturecan.com/details/67/""" + + files = [ + MockFile("metal_0010_ao_1k.jpg"), + MockFile("metal_0010_color_1k.jpg"), + MockFile("metal_0010_height_1k.png"), + MockFile("metal_0010_metallic_1k.jpg"), + MockFile("metal_0010_normal_directx_1k.png"), + MockFile("metal_0010_normal_opengl_1k.png"), + MockFile("metal_0010_roughness_1k.jpg"), + ] + sockets = sockets_fixture() + match_files_to_socket_names(files, sockets) + + assert_sockets( + self, + sockets, + { + "Ambient Occlusion": "metal_0010_ao_1k.jpg", + "Base Color": "metal_0010_color_1k.jpg", + "Displacement": "metal_0010_height_1k.png", + "Metallic": "metal_0010_metallic_1k.jpg", + "Normal": "metal_0010_normal_opengl_1k.png", + "Roughness": "metal_0010_roughness_1k.jpg", + }, + ) + if __name__ == "__main__": unittest.main(verbosity=2)