diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py index 74338ef0d0132da2fa175adfd917652363f57f1f..d3a247dea98932b9cd1735e97bd3073eca49d3ac 100755 --- a/io_scene_gltf2/__init__.py +++ b/io_scene_gltf2/__init__.py @@ -15,7 +15,7 @@ bl_info = { 'name': 'glTF 2.0 format', 'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors', - "version": (1, 4, 7), + "version": (1, 4, 8), 'blender': (2, 90, 0), 'location': 'File > Import-Export', 'description': 'Import-Export as glTF 2.0', 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 ea597f90acd5ee1cd20d43d468a1d850df1ef984..3ad17fe28e5fd6dac05d29a036484085a1f2b9c7 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py @@ -89,7 +89,7 @@ def __gather_alpha_cutoff(blender_material, export_settings): def __gather_alpha_mode(blender_material, export_settings): if blender_material.blend_method == 'CLIP': return 'MASK' - elif blender_material.blend_method == 'BLEND': + elif blender_material.blend_method in ['BLEND', 'HASHED']: return 'BLEND' return None @@ -141,7 +141,11 @@ def __gather_extensions(blender_material, export_settings): if clearcoat_extension: extensions["KHR_materials_clearcoat"] = clearcoat_extension - # TODO KHR_materials_pbrSpecularGlossiness + # KHR_materials_transmission + + transmission_extension = __gather_transmission_extension(blender_material, export_settings) + if transmission_extension: + extensions["KHR_materials_transmission"] = transmission_extension return extensions if extensions else None @@ -284,3 +288,34 @@ def __gather_clearcoat_extension(blender_material, export_settings): ) return Extension('KHR_materials_clearcoat', clearcoat_extension, False) + +def __gather_transmission_extension(blender_material, export_settings): + transmission_enabled = False + has_transmission_texture = False + + transmission_extension = {} + transmission_slots = () + + transmission_socket = gltf2_blender_get.get_socket(blender_material, 'Transmission') + + if isinstance(transmission_socket, bpy.types.NodeSocket) and not transmission_socket.is_linked: + transmission_extension['transmissionFactor'] = transmission_socket.default_value + transmission_enabled = transmission_extension['transmissionFactor'] > 0 + elif __has_image_node_from_socket(transmission_socket): + transmission_extension['transmissionFactor'] = 1 + has_transmission_texture = True + transmission_enabled = True + + if not transmission_enabled: + return None + + # Pack transmission channel (R). + if has_transmission_texture: + transmission_slots = (transmission_socket,) + + if len(transmission_slots) > 0: + combined_texture = gltf2_blender_gather_texture_info.gather_texture_info(transmission_slots, export_settings) + if has_transmission_texture: + transmission_extension['transmissionTexture'] = combined_texture + + return Extension('KHR_materials_transmission', transmission_extension, False) diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py index cd0a8568f78a5ab75ba7c286384f182b7ce5c405..d236645475d9cf98a4599a4f90b71c11b4fea671 100644 --- a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py +++ b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py @@ -34,9 +34,6 @@ def unlit(mh): mh.node_tree.links.new(mix_node.inputs['Fac'], lightpath_node.outputs['Is Camera Ray']) mh.node_tree.links.new(mix_node.inputs[1], transparent_node.outputs[0]) mh.node_tree.links.new(mix_node.inputs[2], emission_node.outputs[0]) - # Using transparency requires alpha blending for Eevee - if mh.is_opaque(): - mh.mat.blend_method = 'HASHED' # TODO check best result in eevee _emission_socket, alpha_socket = make_output_nodes( mh,