glTF exporter: Various enhancements:

* reconect the double-sided flag from the old custom node system
* remove empty texture transform extensions
* Export of non-number array of custom properties
This commit is contained in:
Julien Duroure 2019-01-29 09:03:09 +01:00
parent edd2de62eb
commit 28957b32a6
4 changed files with 45 additions and 21 deletions

View File

@ -67,6 +67,8 @@ def __gather_extensions(blender_shader_sockets_or_texture_slots, export_settings
texture_node = texture_socket.links[0].from_node
texture_transform = gltf2_blender_get.get_texture_transform_from_texture_node(texture_node)
if texture_transform is None:
return None
extension = Extension("KHR_texture_transform", texture_transform)
return {"KHR_texture_transform": extension}

View File

@ -88,6 +88,11 @@ def __gather_alpha_mode(blender_material, export_settings):
def __gather_double_sided(blender_material, export_settings):
old_double_sided_socket = gltf2_blender_get.get_socket_or_texture_slot_old(blender_material, "DoubleSided")
if old_double_sided_socket is not None and\
not old_double_sided_socket.is_linked and\
old_double_sided_socket.default_value > 0.5:
return True
return None

View File

@ -32,28 +32,9 @@ def generate_extras(blender_element):
if custom_property in black_list:
continue
value = blender_element[custom_property]
value = __to_json_compatible(blender_element[custom_property])
add_value = False
if isinstance(value, bpy.types.ID):
add_value = True
if isinstance(value, str):
add_value = True
if isinstance(value, (int, float)):
add_value = True
if hasattr(value, "to_list"):
value = value.to_list()
add_value = True
if hasattr(value, "to_dict"):
value = value.to_dict()
add_value = gltf2_blender_json.is_json_convertible(value)
if add_value:
if value is not None:
extras[custom_property] = value
count += 1
@ -62,3 +43,36 @@ def generate_extras(blender_element):
return extras
def __to_json_compatible(value):
"""Make a value (usually a custom property) compatible with json"""
if isinstance(value, bpy.types.ID):
return value
elif isinstance(value, str):
return value
elif isinstance(value, (int, float)):
return value
# for list classes
elif isinstance(value, list):
value = list(value)
# make sure contents are json-compatible too
for index in range(len(value)):
value[index] = __to_json_compatible(value[index])
return value
# for IDPropertyArray classes
elif hasattr(value, "to_list"):
value = value.to_list()
return value
elif hasattr(value, "to_dict"):
value = value.to_dict()
if gltf2_blender_json.is_json_convertible(value):
return value
return None

View File

@ -372,6 +372,9 @@ def get_texture_transform_from_texture_node(texture_node):
if texture_transform["rotation"] == 0:
del(texture_transform["rotation"])
if len(texture_transform) == 0:
return None
return texture_transform