diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py index 38e2c2c4763a0cb540f16c60cd3bc5d9cfd1b7de..1e4a4f90a9cbca0d0456b369a522b728e9fff3f2 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py @@ -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} diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py index e1c17480f743af6c2f6ce26391a936ba462b4a1a..743751452846a4f110e7193a8ff69dbe202a8cfb 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py @@ -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 diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_generate_extras.py b/io_scene_gltf2/blender/exp/gltf2_blender_generate_extras.py index c26c494a900aebf3b37d0ab346e31676d643e552..247a3c9ac71c8d3de1a0adfdab3d4b211d353381 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_generate_extras.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_generate_extras.py @@ -32,33 +32,47 @@ 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 value is not None: + extras[custom_property] = value + count += 1 - if isinstance(value, bpy.types.ID): - add_value = True + if count == 0: + return None - if isinstance(value, str): - add_value = True + return extras - if isinstance(value, (int, float)): - add_value = True - if hasattr(value, "to_list"): - value = value.to_list() - add_value = True +def __to_json_compatible(value): + """Make a value (usually a custom property) compatible with json""" - if hasattr(value, "to_dict"): - value = value.to_dict() - add_value = gltf2_blender_json.is_json_convertible(value) + if isinstance(value, bpy.types.ID): + return value - if add_value: - extras[custom_property] = value - count += 1 + elif isinstance(value, str): + return value - if count == 0: - return None + elif isinstance(value, (int, float)): + return value - return extras + # 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 diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_get.py b/io_scene_gltf2/blender/exp/gltf2_blender_get.py index 08e3a3071e7c37247822062188f05371092e8706..d3c7d1488f27957d5369514d0ef72e801e51f39b 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_get.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_get.py @@ -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