diff options
author | Julien Duroure <julien.duroure@gmail.com> | 2018-12-07 22:08:53 +0300 |
---|---|---|
committer | Julien Duroure <julien.duroure@gmail.com> | 2018-12-07 22:08:53 +0300 |
commit | c90525d7bd77b8d5a5375dc7a031228dc72f90ba (patch) | |
tree | 4a1a1ebe05fee7e1f190d98513ecc075db21d778 /io_scene_gltf2/blender/exp/gltf2_blender_get.py | |
parent | 1ac8a720609d92deba4d91d91a3a8b907a7ad6a8 (diff) |
glTF exporter: Manage texture transforms
Diffstat (limited to 'io_scene_gltf2/blender/exp/gltf2_blender_get.py')
-rwxr-xr-x | io_scene_gltf2/blender/exp/gltf2_blender_get.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_get.py b/io_scene_gltf2/blender/exp/gltf2_blender_get.py index 03078225..6d025980 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_get.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_get.py @@ -322,6 +322,38 @@ def get_texcoord_index_from_shader_node(glTF, name, shader_node): return 0 +def get_texture_transform_from_texture_node(texture_node): + if not isinstance(texture_node, bpy.types.ShaderNodeTexImage): + return None + + mapping_socket = texture_node.inputs["Vector"] + if len(mapping_socket.links) == 0: + return None + + mapping_node = mapping_socket.links[0].from_node + if not isinstance(mapping_node, bpy.types.ShaderNodeMapping): + return None + + texture_transform = {} + if mapping_node.vector_type == 'TEXTURE': + texture_transform["offset"] = [-mapping_node.translation[0], -mapping_node.translation[1]] + texture_transform["rotation"] = -mapping_node.rotation[2] + texture_transform["scale"] = [1.0 / mapping_node.scale[0], 1.0 / mapping_node.scale[1]] + elif mapping_node.vector_type == 'POINT': + texture_transform["offset"] = [mapping_node.translation[0], mapping_node.translation[1]] + texture_transform["rotation"] = mapping_node.rotation[2] + texture_transform["scale"] = [mapping_node.scale[0], mapping_node.scale[1]] + + if all([component == 0 for component in texture_transform["offset"]]): + del(texture_transform["offset"]) + if all([component == 1 for component in texture_transform["scale"]]): + del(texture_transform["scale"]) + if texture_transform["rotation"] == 0: + del(texture_transform["rotation"]) + + return texture_transform + + def get_image_uri(export_settings, blender_image): """Return the final URI depending on a file path.""" file_format = get_image_format(export_settings, blender_image) |