glTF importer & exporter: fix texture transform after recent API change

This commit is contained in:
Julien Duroure 2019-09-05 22:12:53 +02:00
parent 19819fb1ce
commit d8e78e3cdc
7 changed files with 66 additions and 55 deletions

View File

@ -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": (0, 9, 58),
"version": (0, 9, 59),
'blender': (2, 81, 6),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',

View File

@ -133,7 +133,9 @@ def get_texture_transform_from_texture_node(texture_node):
)
return None
if mapping_node.rotation[0] or mapping_node.rotation[1]:
rotation_0, rotation_1 = mapping_node.inputs['Rotation'].default_value[0], mapping_node.inputs['Rotation'].default_value[1]
if rotation_0 or rotation_1:
# TODO: can we handle this?
gltf2_io_debug.print_console("WARNING",
"Skipping exporting texture transform because it had non-zero "
@ -142,9 +144,9 @@ def get_texture_transform_from_texture_node(texture_node):
return None
mapping_transform = {}
mapping_transform["offset"] = [mapping_node.translation[0], mapping_node.translation[1]]
mapping_transform["rotation"] = mapping_node.rotation[2]
mapping_transform["scale"] = [mapping_node.scale[0], mapping_node.scale[1]]
mapping_transform["offset"] = [mapping_node.inputs['Location'].default_value[0], mapping_node.inputs['Location'].default_value[1]]
mapping_transform["rotation"] = mapping_node.inputs['Rotation'].default_value[2]
mapping_transform["scale"] = [mapping_node.inputs['Scale'].default_value[0], mapping_node.inputs['Scale'].default_value[1]]
if mapping_node.vector_type == "TEXTURE":
# This means use the inverse of the TRS transform.

View File

@ -125,11 +125,11 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
mapping.location = -1500, 500
mapping.vector_type = 'POINT'
tex_transform = text_node.image['tex_transform'][str(pbrSG['diffuseTexture']['index'])]
mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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
@ -219,11 +219,12 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
mapping.location = -1500, 500
mapping.vector_type = 'POINT'
tex_transform = text_node.image['tex_transform'][str(pbrSG['diffuseTexture']['index'])]
mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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:
@ -293,11 +294,12 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
spec_mapping.location = -1000, 0
spec_mapping.vector_type = 'POINT'
tex_transform = spec_text.image['tex_transform'][str(pbrSG['specularGlossinessTexture']['index'])]
spec_mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
spec_mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
spec_mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
spec_mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
spec_mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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
@ -337,11 +339,12 @@ class BlenderKHR_materials_pbrSpecularGlossiness():
spec_mapping.location = -1000, 0
spec_mapping.vector_type = 'POINT'
tex_transform = spec_text.image['tex_transform'][str(pbrSG['specularGlossinessTexture']['index'])]
spec_mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
spec_mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
spec_mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
spec_mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
spec_mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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')

View File

@ -85,11 +85,12 @@ class BlenderEmissiveMap():
text.location = -1000, 1000
if text.image is not None: # Sometimes images can't be retrieved (bad gltf file ...)
tex_transform = text.image['tex_transform'][str(pymaterial.emissive_texture.index)]
mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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]
# create links
node_tree.links.new(mapping.inputs[0], uvmap.outputs[0])

View File

@ -72,11 +72,12 @@ class BlenderNormalMap():
text.location = -500, -500
if text.image is not None: # Sometimes images can't be retrieved (bad gltf file ...)
tex_transform = text.image['tex_transform'][str(pymaterial.normal_texture.index)]
mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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]
normalmap_node = node_tree.nodes.new('ShaderNodeNormalMap')
normalmap_node.location = -250, -500

View File

@ -102,11 +102,12 @@ class BlenderOcclusionMap():
text.label = 'OCCLUSION'
if text.image is not None: # Sometimes images can't be retrieved (bad gltf file ...)
tex_transform = text.image['tex_transform'][str(pymaterial.occlusion_texture.index)]
mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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]
# Links
node_tree.links.new(mapping.inputs[0], uvmap.outputs[0])

View File

@ -130,11 +130,12 @@ class BlenderPbr():
mapping.vector_type = 'POINT'
if text_node.image is not None: # Sometimes images can't be retrieved (bad gltf file ...)
tex_transform = text_node.image['tex_transform'][str(pypbr.base_color_texture.index)]
mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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')
@ -196,11 +197,12 @@ class BlenderPbr():
mapping.vector_type = 'POINT'
if text_node.image is not None: # Sometimes images can't be retrieved (bad gltf file ...)
tex_transform = text_node.image['tex_transform'][str(pypbr.base_color_texture.index)]
mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
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:
@ -251,11 +253,12 @@ class BlenderPbr():
metallic_mapping.location = -1000, 0
metallic_mapping.vector_type = 'POINT'
tex_transform = metallic_text.image['tex_transform'][str(pypbr.metallic_roughness_texture.index)]
metallic_mapping.translation[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
metallic_mapping.translation[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
metallic_mapping.rotation[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
metallic_mapping.scale[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
metallic_mapping.scale[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
metallic_mapping.inputs['Location'].default_value[0] = texture_transform_gltf_to_blender(tex_transform)['offset'][0]
metallic_mapping.inputs['Location'].default_value[1] = texture_transform_gltf_to_blender(tex_transform)['offset'][1]
metallic_mapping.inputs['Rotation'].default_value[2] = texture_transform_gltf_to_blender(tex_transform)['rotation']
metallic_mapping.inputs['Scale'].default_value[0] = texture_transform_gltf_to_blender(tex_transform)['scale'][0]
metallic_mapping.inputs['Scale'].default_value[1] = texture_transform_gltf_to_blender(tex_transform)['scale'][1]
metallic_uvmap = node_tree.nodes.new('ShaderNodeUVMap')
metallic_uvmap.location = -1500, 0