diff options
3 files changed, 0 insertions, 608 deletions
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py index 4eb4df5c..770838e1 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py @@ -201,11 +201,5 @@ def needs_baking(channels: typing.Tuple[bpy.types.FCurve], "Baking animation because of differently located keyframes in one channel") return True - # # Baking is required when the animation targets a quaternion with bezier interpolation - # if channels[0].data_path == "rotation_quaternion" and interpolation == "BEZIER": - # gltf2_io_debug.print_console("WARNING", - # "Baking animation because targeting a quaternion with bezier interpolation") - # return True - return False diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_get.py b/io_scene_gltf2/blender/exp/gltf2_blender_get.py index a40d9655..fe3e0e20 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_get.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_get.py @@ -12,24 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -# -# Imports -# - import bpy from mathutils import Vector, Matrix -from . import gltf2_blender_export_keys -from ...io.exp import gltf2_io_get from ...blender.com.gltf2_blender_conversion import texture_transform_blender_to_gltf from io_scene_gltf2.io.com import gltf2_io_debug -# -# Globals -# - -# -# Functions -# def get_animation_target(action_group: bpy.types.ActionGroup): @@ -104,247 +91,6 @@ def find_shader_image_from_shader_socket(shader_socket, max_hops=10): return None -def get_shader_add_to_shader_node(shader_node): - - if shader_node is None: - return None - - if len(shader_node.outputs['BSDF'].links) == 0: - return None - - to_node = shader_node.outputs['BSDF'].links[0].to_node - - if not isinstance(to_node, bpy.types.ShaderNodeAddShader): - return None - - return to_node - -# - - -def get_shader_emission_from_shader_add(shader_add): - - if shader_add is None: - return None - - if not isinstance(shader_add, bpy.types.ShaderNodeAddShader): - return None - - from_node = None - - for input in shader_add.inputs: - - if len(input.links) == 0: - continue - - from_node = input.links[0].from_node - - if isinstance(from_node, bpy.types.ShaderNodeEmission): - break - - return from_node - - -def get_shader_mapping_from_shader_image(shader_image): - - if shader_image is None: - return None - - if not isinstance(shader_image, bpy.types.ShaderNodeTexImage): - return None - - if shader_image.inputs.get('Vector') is None: - return None - - if len(shader_image.inputs['Vector'].links) == 0: - return None - - from_node = shader_image.inputs['Vector'].links[0].from_node - - # - - if not isinstance(from_node, bpy.types.ShaderNodeMapping): - return None - - return from_node - - -def get_image_material_usage_to_socket(shader_image, socket_name): - if shader_image is None: - return -1 - - if not isinstance(shader_image, bpy.types.ShaderNodeTexImage): - return -2 - - if shader_image.outputs.get('Color') is None: - return -3 - - if len(shader_image.outputs.get('Color').links) == 0: - return -4 - - for img_link in shader_image.outputs.get('Color').links: - separate_rgb = img_link.to_node - - if not isinstance(separate_rgb, bpy.types.ShaderNodeSeparateRGB): - continue - - for i, channel in enumerate("RGB"): - if separate_rgb.outputs.get(channel) is None: - continue - for link in separate_rgb.outputs.get(channel).links: - if socket_name == link.to_socket.name: - return i - - return -6 - - -def get_emission_node_from_lamp_output_node(lamp_node): - if lamp_node is None: - return None - - if not isinstance(lamp_node, bpy.types.ShaderNodeOutputLamp): - return None - - if lamp_node.inputs.get('Surface') is None: - return None - - if len(lamp_node.inputs.get('Surface').links) == 0: - return None - - from_node = lamp_node.inputs.get('Surface').links[0].from_node - if isinstance(from_node, bpy.types.ShaderNodeEmission): - return from_node - - return None - - -def get_ligth_falloff_node_from_emission_node(emission_node, type): - if emission_node is None: - return None - - if not isinstance(emission_node, bpy.types.ShaderNodeEmission): - return None - - if emission_node.inputs.get('Strength') is None: - return None - - if len(emission_node.inputs.get('Strength').links) == 0: - return None - - from_node = emission_node.inputs.get('Strength').links[0].from_node - if not isinstance(from_node, bpy.types.ShaderNodeLightFalloff): - return None - - if from_node.outputs.get(type) is None: - return None - - if len(from_node.outputs.get(type).links) == 0: - return None - - if emission_node != from_node.outputs.get(type).links[0].to_node: - return None - - return from_node - - -def get_shader_image_from_shader_node(name, shader_node): - - if shader_node is None: - return None - - if not isinstance(shader_node, bpy.types.ShaderNodeGroup) and \ - not isinstance(shader_node, bpy.types.ShaderNodeBsdfPrincipled) and \ - not isinstance(shader_node, bpy.types.ShaderNodeEmission): - return None - - if shader_node.inputs.get(name) is None: - return None - - if len(shader_node.inputs[name].links) == 0: - return None - - from_node = shader_node.inputs[name].links[0].from_node - - # - - if isinstance(from_node, bpy.types.ShaderNodeNormalMap): - - name = 'Color' - - if len(from_node.inputs[name].links) == 0: - return None - - from_node = from_node.inputs[name].links[0].from_node - - # - - if not isinstance(from_node, bpy.types.ShaderNodeTexImage): - return None - - return from_node - - -def get_texture_index_from_shader_node(export_settings, glTF, name, shader_node): - """Return the texture index in the glTF array.""" - from_node = get_shader_image_from_shader_node(name, shader_node) - - if from_node is None: - return -1 - - # - - if from_node.image is None or from_node.image.size[0] == 0 or from_node.image.size[1] == 0: - return -1 - - return gltf2_io_get.get_texture_index(glTF, from_node.image.name) - - -def get_texture_index_from_export_settings(export_settings, name): - """Return the texture index in the glTF array.""" - - -def get_texcoord_index_from_shader_node(glTF, name, shader_node): - """Return the texture coordinate index, if assigned and used.""" - from_node = get_shader_image_from_shader_node(name, shader_node) - - if from_node is None: - return 0 - - # - - if len(from_node.inputs['Vector'].links) == 0: - return 0 - - input_node = from_node.inputs['Vector'].links[0].from_node - - # - - if isinstance(input_node, bpy.types.ShaderNodeMapping): - - if len(input_node.inputs['Vector'].links) == 0: - return 0 - - input_node = input_node.inputs['Vector'].links[0].from_node - - # - - if not isinstance(input_node, bpy.types.ShaderNodeUVMap): - return 0 - - if input_node.uv_map == '': - return 0 - - # - - # Try to gather map index. - for blender_mesh in bpy.data.meshes: - texCoordIndex = blender_mesh.uv_layers.find(input_node.uv_map) - if texCoordIndex >= 0: - return texCoordIndex - - return 0 - - def get_texture_transform_from_texture_node(texture_node): if not isinstance(texture_node, bpy.types.ShaderNodeTexImage): return None @@ -426,28 +172,6 @@ def get_texture_transform_from_texture_node(texture_node): 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) - extension = '.jpg' if file_format == 'JPEG' else '.png' - - return gltf2_io_get.get_image_name(blender_image.name) + extension - - -def get_image_format(export_settings, blender_image): - """ - Return the final output format of the given image. - - Only PNG and JPEG are supported as outputs - all other formats must be converted. - """ - if blender_image.file_format in ['PNG', 'JPEG']: - return blender_image.file_format - - use_alpha = export_settings[gltf2_blender_export_keys.FILTERED_IMAGES_USE_ALPHA].get(blender_image.name) - - return 'PNG' if use_alpha else 'JPEG' - - def get_node(data_path): """Return Blender node on a given Blender data path.""" if data_path is None: @@ -465,13 +189,3 @@ def get_node(data_path): return node_name[:(index)] - -def get_data_path(data_path): - """Return Blender data path.""" - index = data_path.rfind('.') - - if index == -1: - return data_path - - return data_path[(index + 1):] - diff --git a/io_scene_gltf2/io/exp/gltf2_io_get.py b/io_scene_gltf2/io/exp/gltf2_io_get.py deleted file mode 100755 index 35c65615..00000000 --- a/io_scene_gltf2/io/exp/gltf2_io_get.py +++ /dev/null @@ -1,316 +0,0 @@ -# Copyright 2018 The glTF-Blender-IO authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# -# Imports -# - -import os - -# -# Globals -# - -# -# Functions -# - - -def get_material_requires_texcoords(glTF, index): - """Query function, if a material "needs" texture coordinates. This is the case, if a texture is present and used.""" - if glTF.materials is None: - return False - - materials = glTF.materials - - if index < 0 or index >= len(materials): - return False - - material = materials[index] - - # General - - if material.emissive_texture is not None: - return True - - if material.normal_texture is not None: - return True - - if material.occlusion_texture is not None: - return True - - # Metallic roughness - - if material.pbr_metallic_roughness is not None and \ - material.pbr_metallic_roughness.base_color_texture is not None: - return True - - if material.pbr_metallic_roughness is not None and \ - material.pbr_metallic_roughness.metallic_roughness_texture is not None: - return True - - return False - - -def get_material_requires_normals(glTF, index): - """ - Query function, if a material "needs" normals. This is the case, if a texture is present and used. - - At point of writing, same function as for texture coordinates. - """ - return get_material_requires_texcoords(glTF, index) - - -def get_material_index(glTF, name): - """Return the material index in the glTF array.""" - if name is None: - return -1 - - if glTF.materials is None: - return -1 - - index = 0 - for material in glTF.materials: - if material.name == name: - return index - - index += 1 - - return -1 - - -def get_mesh_index(glTF, name): - """Return the mesh index in the glTF array.""" - if glTF.meshes is None: - return -1 - - index = 0 - for mesh in glTF.meshes: - if mesh.name == name: - return index - - index += 1 - - return -1 - - -def get_skin_index(glTF, name, index_offset): - """Return the skin index in the glTF array.""" - if glTF.skins is None: - return -1 - - skeleton = get_node_index(glTF, name) - - index = 0 - for skin in glTF.skins: - if skin.skeleton == skeleton: - return index + index_offset - - index += 1 - - return -1 - - -def get_camera_index(glTF, name): - """Return the camera index in the glTF array.""" - if glTF.cameras is None: - return -1 - - index = 0 - for camera in glTF.cameras: - if camera.name == name: - return index - - index += 1 - - return -1 - - -def get_light_index(glTF, name): - """Return the light index in the glTF array.""" - if glTF.extensions is None: - return -1 - - extensions = glTF.extensions - - if extensions.get('KHR_lights_punctual') is None: - return -1 - - khr_lights_punctual = extensions['KHR_lights_punctual'] - - if khr_lights_punctual.get('lights') is None: - return -1 - - lights = khr_lights_punctual['lights'] - - index = 0 - for light in lights: - if light['name'] == name: - return index - - index += 1 - - return -1 - - -def get_node_index(glTF, name): - """Return the node index in the glTF array.""" - if glTF.nodes is None: - return -1 - - index = 0 - for node in glTF.nodes: - if node.name == name: - return index - - index += 1 - - return -1 - - -def get_scene_index(glTF, name): - """Return the scene index in the glTF array.""" - if glTF.scenes is None: - return -1 - - index = 0 - for scene in glTF.scenes: - if scene.name == name: - return index - - index += 1 - - return -1 - - -def get_texture_index(glTF, filename): - """Return the texture index in the glTF array by a given file path.""" - if glTF.textures is None: - return -1 - - image_index = get_image_index(glTF, filename) - - if image_index == -1: - return -1 - - for texture_index, texture in enumerate(glTF.textures): - if image_index == texture.source: - return texture_index - - return -1 - - -def get_image_index(glTF, filename): - """Return the image index in the glTF array.""" - if glTF.images is None: - return -1 - - image_name = get_image_name(filename) - - for index, current_image in enumerate(glTF.images): - if image_name == current_image.name: - return index - - return -1 - - -def get_image_name(filename): - """Return user-facing, extension-agnostic name for image.""" - return os.path.splitext(filename)[0] - - -def get_scalar(default_value, init_value=0.0): - """Return scalar with a given default/fallback value.""" - return_value = init_value - - if default_value is None: - return return_value - - return_value = default_value - - return return_value - - -def get_vec2(default_value, init_value=[0.0, 0.0]): - """Return vec2 with a given default/fallback value.""" - return_value = init_value - - if default_value is None or len(default_value) < 2: - return return_value - - index = 0 - for number in default_value: - return_value[index] = number - - index += 1 - if index == 2: - return return_value - - return return_value - - -def get_vec3(default_value, init_value=[0.0, 0.0, 0.0]): - """Return vec3 with a given default/fallback value.""" - return_value = init_value - - if default_value is None or len(default_value) < 3: - return return_value - - index = 0 - for number in default_value: - return_value[index] = number - - index += 1 - if index == 3: - return return_value - - return return_value - - -def get_vec4(default_value, init_value=[0.0, 0.0, 0.0, 1.0]): - """Return vec4 with a given default/fallback value.""" - return_value = init_value - - if default_value is None or len(default_value) < 4: - return return_value - - index = 0 - for number in default_value: - return_value[index] = number - - index += 1 - if index == 4: - return return_value - - return return_value - - -def get_index(elements, name): - """Return index of a glTF element by a given name.""" - if elements is None or name is None: - return -1 - - index = 0 - for element in elements: - if isinstance(element, dict): - if element.get('name') == name: - return index - else: - if element.name == name: - return index - - index += 1 - - return -1 - |