[Bf-extensions-cvs] [6790f39c] master: glTF importer: code refactoring, texture node + mapping + UVMap

Julien Duroure noreply at git.blender.org
Wed Nov 13 22:00:27 CET 2019


Commit: 6790f39ca64ddfe9c3b00666f4b4f78004e754ab
Author: Julien Duroure
Date:   Wed Nov 13 21:59:45 2019 +0100
Branches: master
https://developer.blender.org/rBA6790f39ca64ddfe9c3b00666f4b4f78004e754ab

glTF importer: code refactoring, texture node + mapping + UVMap

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

M	io_scene_gltf2/__init__.py
M	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
M	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py
M	io_scene_gltf2/blender/imp/gltf2_blender_image.py
M	io_scene_gltf2/blender/imp/gltf2_blender_map_emissive.py
M	io_scene_gltf2/blender/imp/gltf2_blender_map_normal.py
M	io_scene_gltf2/blender/imp/gltf2_blender_map_occlusion.py
M	io_scene_gltf2/blender/imp/gltf2_blender_material.py
A	io_scene_gltf2/blender/imp/gltf2_blender_material_utils.py
M	io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
M	io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
M	io_scene_gltf2/blender/imp/gltf2_blender_primitive.py

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

diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index e92d8bee..cddc50fd 100755
--- a/io_scene_gltf2/__init__.py
+++ b/io_scene_gltf2/__init__.py
@@ -15,7 +15,7 @@
 bl_info = {
     'name': 'glTF 2.0 format',
     'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
-    "version": (1, 1, 4),
+    "version": (1, 1, 5),
     'blender': (2, 81, 6),
     'location': 'File > Import-Export',
     'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
index 387db56f..7e5e11e4 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
@@ -13,8 +13,8 @@
 # limitations under the License.
 
 import bpy
-from .gltf2_blender_texture import BlenderTextureInfo
-from ..com.gltf2_blender_conversion import texture_transform_gltf_to_blender
+from .gltf2_blender_material_utils import make_texture_block
+from ...io.com.gltf2_io import TextureInfo
 
 
 class BlenderKHR_materials_pbrSpecularGlossiness():
@@ -87,18 +87,15 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
                 math_vc_B = node_tree.nodes.new('ShaderNodeMath')
                 math_vc_B.operation = 'MULTIPLY'
 
-            BlenderTextureInfo.create(gltf, pbrSG['diffuseTexture'], dict_=True)
-
             # create UV Map / Mapping / Texture nodes / separate & math and combine
-            text_node = node_tree.nodes.new('ShaderNodeTexImage')
-            if gltf.data.images[
-                gltf.data.textures[pbrSG['diffuseTexture']['index']].source].blender_image_name is not None:
-                text_node.image = \
-                    bpy.data.images[
-                        gltf.data.images[
-                            gltf.data.textures[pbrSG['diffuseTexture']['index']].source].blender_image_name
-                    ]
-            text_node.location = -1000, 500
+            text_node = make_texture_block(
+                gltf,
+                node_tree,
+                TextureInfo.from_dict(pbrSG['diffuseTexture']),
+                location=(-1000, 500),
+                label='DIFFUSE',
+                name='diffuseTexture',
+            )
 
             combine = node_tree.nodes.new('ShaderNodeCombineRGB')
             combine.location = -250, 500
@@ -121,24 +118,6 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
             separate = node_tree.nodes.new('ShaderNodeSeparateRGB')
             separate.location = -750, 500
 
-            mapping = node_tree.nodes.new('ShaderNodeMapping')
-            mapping.location = -1500, 500
-            mapping.vector_type = 'POINT'
-            tex_transform = text_node.image['tex_transform'][str(pbrSG['diffuseTexture']['index'])]
-            mapping.inputs['Location'].default_value[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
-            mapping.inputs['Location'].default_value[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
-            mapping.inputs['Rotation'].default_value[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
-            mapping.inputs['Scale'].default_value[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
-            mapping.inputs['Scale'].default_value[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
-
-            uvmap = node_tree.nodes.new('ShaderNodeUVMap')
-            uvmap.location = -2000, 500
-            if 'texCoord' in pbrSG['diffuseTexture'].keys():
-                uvmap["gltf2_texcoord"] = pbrSG['diffuseTexture']['texCoord']  # Set custom flag to retrieve TexCoord
-            else:
-                uvmap["gltf2_texcoord"] = 0  # TODO: set in precompute instead of here?
-            # UV Map will be set after object/UVMap creation
-
             # Create links
             if vertex_color:
                 node_tree.links.new(separate_vertex_color.inputs[0], vertexcolor_node.outputs[0])
@@ -162,16 +141,12 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
             node_tree.links.new(math_G.inputs[0], separate.outputs[1])
             node_tree.links.new(math_B.inputs[0], separate.outputs[2])
 
-            node_tree.links.new(mapping.inputs[0], uvmap.outputs[0])
-            node_tree.links.new(text_node.inputs[0], mapping.outputs[0])
             node_tree.links.new(separate.inputs[0], text_node.outputs[0])
 
             node_tree.links.new(diffuse.inputs[0], combine.outputs[0])
 
         elif pbrSG['diffuse_type'] == gltf.TEXTURE:
 
-            BlenderTextureInfo.create(gltf, pbrSG['diffuseTexture'], dict_=True)
-
             # TODO alpha ?
             if vertex_color:
                 # Create vertexcolor / separate / math nodes
@@ -201,41 +176,18 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
                 separate.location = -1500, 500
 
             # create UV Map / Mapping / Texture nodes / separate & math and combine
-            text_node = node_tree.nodes.new('ShaderNodeTexImage')
-            if gltf.data.images[
-                gltf.data.textures[pbrSG['diffuseTexture']['index']].source].blender_image_name is not None:
-                text_node.image = bpy.data.images[
-                    gltf.data.images[gltf.data.textures[pbrSG['diffuseTexture']['index']].source].blender_image_name
-                ]
-            if vertex_color:
-                text_node.location = -2000, 500
-            else:
-                text_node.location = -500, 500
-
-            mapping = node_tree.nodes.new('ShaderNodeMapping')
-            if vertex_color:
-                mapping.location = -2500, 500
-            else:
-                mapping.location = -1500, 500
-            mapping.vector_type = 'POINT'
-            tex_transform = text_node.image['tex_transform'][str(pbrSG['diffuseTexture']['index'])]
-            mapping.inputs['Location'].default_value[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
-            mapping.inputs['Location'].default_value[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
-            mapping.inputs['Rotation'].default_value[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
-            mapping.inputs['Scale'].default_value[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
-            mapping.inputs['Scale'].default_value[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
-
-
-            uvmap = node_tree.nodes.new('ShaderNodeUVMap')
             if vertex_color:
-                uvmap.location = -3000, 500
-            else:
-                uvmap.location = -2000, 500
-            if 'texCoord' in pbrSG['diffuseTexture'].keys():
-                uvmap["gltf2_texcoord"] = pbrSG['diffuseTexture']['texCoord']  # Set custom flag to retrieve TexCoord
+                location = (-2000, 500)
             else:
-                uvmap["gltf2_texcoord"] = 0  # TODO: set in precompute instead of here?
-            # UV Map will be set after object/UVMap creation
+                location = (-500, 500)
+            text_node = text_node = make_texture_block(
+                gltf,
+                node_tree,
+                TextureInfo.from_dict(pbrSG['diffuseTexture']),
+                location=location,
+                label='DIFFUSE',
+                name='diffuseTexture',
+            )
 
             # Create links
             if vertex_color:
@@ -260,11 +212,6 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
             else:
                 node_tree.links.new(diffuse.inputs[0], text_node.outputs[0])
 
-            # Common for both mode (non vertex color / vertex color)
-
-            node_tree.links.new(mapping.inputs[0], uvmap.outputs[0])
-            node_tree.links.new(text_node.inputs[0], mapping.outputs[0])
-
         if pbrSG['specgloss_type'] == gltf.SIMPLE:
 
             combine = node_tree.nodes.new('ShaderNodeCombineRGB')
@@ -276,85 +223,36 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
             node_tree.links.new(glossy.inputs[0], combine.outputs[0])
 
         elif pbrSG['specgloss_type'] == gltf.TEXTURE:
-            BlenderTextureInfo.create(gltf, pbrSG['specularGlossinessTexture'], dict_=True)
-            spec_text = node_tree.nodes.new('ShaderNodeTexImage')
-            if gltf.data.images[
-                gltf.data.textures[pbrSG['specularGlossinessTexture']['index']].source
-            ].blender_image_name is not None:
-                spec_text.image = bpy.data.images[
-                    gltf.data.images[
-                        gltf.data.textures[pbrSG['specularGlossinessTexture']['index']].source
-                    ].blender_image_name
-                ]
-            if spec_text.image:
-                spec_text.image.colorspace_settings.is_data = True
-            spec_text.location = -500, 0
-
-            spec_mapping = node_tree.nodes.new('ShaderNodeMapping')
-            spec_mapping.location = -1000, 0
-            spec_mapping.vector_type = 'POINT'
-            tex_transform = spec_text.image['tex_transform'][str(pbrSG['specularGlossinessTexture']['index'])]
-            spec_mapping.inputs['Location'].default_value[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
-            spec_mapping.inputs['Location'].default_value[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
-            spec_mapping.inputs['Rotation'].default_value[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
-            spec_mapping.inputs['Scale'].default_value[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
-            spec_mapping.inputs['Scale'].default_value[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
-
-
-            spec_uvmap = node_tree.nodes.new('ShaderNodeUVMap')
-            spec_uvmap.location = -1500, 0
-            if 'texCoord' in pbrSG['specularGlossinessTexture'].keys():
-                # Set custom flag to retriev

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list