[Bf-extensions-cvs] [1e202360] master: glTF exporter: add alpha export support
Julien Duroure
noreply at git.blender.org
Sat Aug 3 07:18:44 CEST 2019
Commit: 1e20236039c8929406cf3d86bddcbfd2df5d9a17
Author: Julien Duroure
Date: Sat Aug 3 07:18:25 2019 +0200
Branches: master
https://developer.blender.org/rBA1e20236039c8929406cf3d86bddcbfd2df5d9a17
glTF exporter: add alpha export support
===================================================================
M io_scene_gltf2/__init__.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
M io_scene_gltf2/blender/exp/gltf2_blender_image.py
===================================================================
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index 9ce2d9da..8d849b63 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, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
- "version": (0, 9, 37),
+ "version": (0, 9, 38),
'blender': (2, 80, 0),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
index 07600fcf..a92de291 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
@@ -91,6 +91,11 @@ def __gather_extras(sockets_or_slots, export_settings):
def __gather_mime_type(sockets_or_slots, export_settings):
+ # force png if Alpha contained so we can export alpha
+ for socket in sockets_or_slots:
+ if socket.name == "Alpha":
+ return "image/png"
+
if export_settings["gltf_image_format"] == "NAME":
extension = __get_extension_from_slot(sockets_or_slots, export_settings)
extension = extension.lower()
@@ -175,13 +180,16 @@ def __get_image_data(sockets_or_slots, export_settings) -> gltf2_blender_image.E
target_channel = None
- # Change target channel for metallic and roughness.
+ # some sockets need channel rewriting (gltf pbr defines fixed channels for some attributes)
if socket.name == 'Metallic':
target_channel = 2
elif socket.name == 'Roughness':
target_channel = 1
elif socket.name == 'Occlusion' and len(sockets_or_slots) > 1 and sockets_or_slots[1] is not None:
target_channel = 0
+ elif socket.name == 'Alpha' and len(sockets_or_slots) > 1 and sockets_or_slots[1] is not None:
+ composed_image.set_alpha(True)
+ target_channel = 3
if target_channel is not None:
if composed_image is None:
@@ -189,8 +197,8 @@ def __get_image_data(sockets_or_slots, export_settings) -> gltf2_blender_image.E
composed_image[target_channel] = image[source_channel]
else:
- # If we're not assigning target channels, just return the first valid image.
- return image
+ # copy full image...eventually following sockets might overwrite things
+ composed_image = image
return composed_image
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
index ef4c788f..04a0fcd1 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
@@ -94,7 +94,14 @@ def __gather_base_color_texture(blender_material, export_settings):
base_color_socket = gltf2_blender_get.get_socket_or_texture_slot_old(blender_material, "BaseColor")
if base_color_socket is None:
base_color_socket = gltf2_blender_get.get_socket_or_texture_slot(blender_material, "Background")
- return gltf2_blender_gather_texture_info.gather_texture_info((base_color_socket,), export_settings)
+
+ alpha_socket = gltf2_blender_get.get_socket_or_texture_slot(blender_material, "Alpha")
+ if alpha_socket is not None and alpha_socket.is_linked:
+ inputs = (base_color_socket, alpha_socket, )
+ else:
+ inputs = (base_color_socket,)
+
+ return gltf2_blender_gather_texture_info.gather_texture_info(inputs, export_settings)
def __get_tex_from_socket(blender_shader_socket: bpy.types.NodeSocket):
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_image.py b/io_scene_gltf2/blender/exp/gltf2_blender_image.py
index 24abca62..707feb91 100644
--- a/io_scene_gltf2/blender/exp/gltf2_blender_image.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_image.py
@@ -41,6 +41,9 @@ class ExportImage:
self._blender_image = blender_image
self._has_alpha = has_alpha
+ def set_alpha(self, alpha: bool):
+ self._has_alpha = alpha
+
@classmethod
def from_blender_image(cls, blender_image: bpy.types.Image):
img = np.array(blender_image.pixels)
More information about the Bf-extensions-cvs
mailing list