[Bf-extensions-cvs] [acf3bcb5] master: glTF importer: fix bug when texture file is not found

Julien Duroure noreply at git.blender.org
Wed Jan 23 21:08:57 CET 2019


Commit: acf3bcb5b5c763edb83f511ecf7873a04ae23f96
Author: Julien Duroure
Date:   Wed Jan 23 21:08:22 2019 +0100
Branches: master
https://developer.blender.org/rBAacf3bcb5b5c763edb83f511ecf7873a04ae23f96

glTF importer: fix bug when texture file is not found

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

M	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.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_pbrMetallicRoughness.py
M	io_scene_gltf2/io/imp/gltf2_io_binary.py

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

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 1854f45d..fec65ee4 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
@@ -90,10 +90,13 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
 
             # create UV Map / Mapping / Texture nodes / separate & math and combine
             text_node = node_tree.nodes.new('ShaderNodeTexImage')
-            text_node.image = \
-                bpy.data.images[
-                    gltf.data.images[gltf.data.textures[pbrSG['diffuseTexture']['index']].source].blender_image_name
-                ]
+            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
 
             combine = node_tree.nodes.new('ShaderNodeCombineRGB')
@@ -191,9 +194,11 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
 
             # create UV Map / Mapping / Texture nodes / separate & math and combine
             text_node = node_tree.nodes.new('ShaderNodeTexImage')
-            text_node.image = bpy.data.images[
-                gltf.data.images[gltf.data.textures[pbrSG['diffuseTexture']['index']].source].blender_image_name
-            ]
+            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:
@@ -257,11 +262,14 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
         elif pbrSG['specgloss_type'] == gltf.TEXTURE:
             BlenderTextureInfo.create(gltf, pbrSG['specularGlossinessTexture']['index'])
             spec_text = node_tree.nodes.new('ShaderNodeTexImage')
-            spec_text.image = bpy.data.images[
-                gltf.data.images[
-                    gltf.data.textures[pbrSG['specularGlossinessTexture']['index']].source
-                ].blender_image_name
-            ]
+            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
+                ]
             spec_text.color_space = 'NONE'
             spec_text.location = -500, 0
 
@@ -288,9 +296,12 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
             BlenderTextureInfo.create(gltf, pbrSG['specularGlossinessTexture']['index'])
 
             spec_text = node_tree.nodes.new('ShaderNodeTexImage')
-            spec_text.image = bpy.data.images[gltf.data.images[
+            if gltf.data.images[
                 gltf.data.textures[pbrSG['specularGlossinessTexture']['index']].source
-            ].blender_image_name]
+            ].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]
             spec_text.color_space = 'NONE'
             spec_text.location = -1000, 0
 
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_image.py b/io_scene_gltf2/blender/imp/gltf2_blender_image.py
index ca1eb626..d51c463e 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_image.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_image.py
@@ -43,7 +43,7 @@ class BlenderImage():
             if isfile(join(dirname(gltf.filename), pyimage.uri)):
                 return True, join(dirname(gltf.filename), pyimage.uri), basename(join(dirname(gltf.filename), pyimage.uri))
             else:
-                pyimage.gltf.log.error("Missing file (index " + str(img_idx) + "): " + pyimage.uri)
+                gltf.log.error("Missing file (index " + str(img_idx) + "): " + pyimage.uri)
                 return False, None, None
 
         if pyimage.buffer_view is None:
@@ -89,13 +89,14 @@ class BlenderImage():
             # Create a temp image, pack, and delete image
             tmp_image = tempfile.NamedTemporaryFile(delete=False)
             img_data, img_name = BinaryData.get_image_data(gltf, img_idx)
-            tmp_image.write(img_data)
-            tmp_image.close()
-
-            blender_image = bpy.data.images.load(tmp_image.name)
-            blender_image.pack()
-            blender_image.name = img_name
-            img.blender_image_name = blender_image.name
-            blender_image['gltf_index'] = img_idx
-            os.remove(tmp_image.name)
+            if img_name is not None:
+                tmp_image.write(img_data)
+                tmp_image.close()
+
+                blender_image = bpy.data.images.load(tmp_image.name)
+                blender_image.pack()
+                blender_image.name = img_name
+                img.blender_image_name = blender_image.name
+                blender_image['gltf_index'] = img_idx
+                os.remove(tmp_image.name)
 
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_map_emissive.py b/io_scene_gltf2/blender/imp/gltf2_blender_map_emissive.py
index 22af5ccb..79cc93cd 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_map_emissive.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_map_emissive.py
@@ -71,9 +71,12 @@ class BlenderEmissiveMap():
             uvmap["gltf2_texcoord"] = 0  # TODO: set in precompute instead of here?
 
         text = node_tree.nodes.new('ShaderNodeTexImage')
-        text.image = bpy.data.images[gltf.data.images[
+        if gltf.data.images[
             gltf.data.textures[pymaterial.emissive_texture.index].source
-        ].blender_image_name]
+        ].blender_image_name is not None:
+            text.image = bpy.data.images[gltf.data.images[
+                gltf.data.textures[pymaterial.emissive_texture.index].source
+            ].blender_image_name]
         text.label = 'EMISSIVE'
         text.location = -1000, 1000
         add = node_tree.nodes.new('ShaderNodeAddShader')
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_map_normal.py b/io_scene_gltf2/blender/imp/gltf2_blender_map_normal.py
index 0f7bab81..ba8302b7 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_map_normal.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_map_normal.py
@@ -59,9 +59,12 @@ class BlenderNormalMap():
             uvmap["gltf2_texcoord"] = 0  # TODO set in pre_compute instead of here
 
         text = node_tree.nodes.new('ShaderNodeTexImage')
-        text.image = bpy.data.images[gltf.data.images[
+        if gltf.data.images[
             gltf.data.textures[pymaterial.normal_texture.index].source
-        ].blender_image_name]
+        ].blender_image_name is not None:
+            text.image = bpy.data.images[gltf.data.images[
+                gltf.data.textures[pymaterial.normal_texture.index].source
+            ].blender_image_name]
         text.label = 'NORMALMAP'
         text.color_space = 'NONE'
         text.location = -500, -500
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_map_occlusion.py b/io_scene_gltf2/blender/imp/gltf2_blender_map_occlusion.py
index 70e1e54a..e98c48ec 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_map_occlusion.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_map_occlusion.py
@@ -35,7 +35,10 @@ class BlenderOcclusionMap():
         BlenderTextureInfo.create(gltf, pymaterial.occlusion_texture.index)
 
         # Pack texture, but doesn't use it for now. Occlusion is calculated from Cycles.
-        bpy.data.images[gltf.data.images[gltf.data.textures[
+        if gltf.data.images[gltf.data.textures[
             pymaterial.occlusion_texture.index
-        ].source].blender_image_name].use_fake_user = True
+        ].source].blender_image_name is not None:
+            bpy.data.images[gltf.data.images[gltf.data.textures[
+                pymaterial.occlusion_texture.index
+            ].source].blender_image_name].use_fake_user = True
 
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py b/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
index 2893c467..dcc9b3fd 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
@@ -95,9 +95,12 @@ class BlenderPbr():
 
             # create UV Map / Mapping / Texture nodes / separate & math and combine
             text_node = node_tree.nodes.new('ShaderNodeTexImage')
-            text_node.image = bpy.data.images[gltf.data.images[
+            if gltf.data.images[
                 gltf.data.textures[pypbr.base_color_texture.index].source
-            ].blender_image_name]
+            ].blender_image_name is not None:
+                text_node.image = bpy.data.images[gltf.data.images[
+                    gltf.data.textures[pypbr.base_color_texture.index].source
+                ].blender_image_name]
             text_node.label = 'BASE COLOR'
             text_node.location = -1000, 500
 
@@ -153,9 +156,12 @@ class BlenderPbr():
 
             # create UV Map / Mapping / Texture nodes / separate & math and combine
             text_node = node_tree.nodes.new('ShaderNodeTexImage')
-            text_node.image = bpy.data.images[gltf.data.images[
+            if gltf.data.images[
                 gltf.data.textures[pypbr.base_color_texture.index].source
-            ].blender_image_name]
+            ].blender_image_name is not None:
+ 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list