def __has_image_node_from_socket(socket): result = gltf2_blender_search_node_tree.from_socket( socket, gltf2_blender_search_node_tree.FilterByType(bpy.types.ShaderNodeTexImage)) if not result: return False return True
def __get_tex_from_socket(socket): result = gltf2_blender_search_node_tree.from_socket( socket, gltf2_blender_search_node_tree.FilterByType( bpy.types.ShaderNodeTexImage)) if not result: return None return result[0]
def __gather_normal_scale(primary_socket, export_settings): result = gltf2_blender_search_node_tree.from_socket( primary_socket, gltf2_blender_search_node_tree.FilterByType( bpy.types.ShaderNodeNormalMap)) if not result: return None strengthInput = result[0].shader_node.inputs['Strength'] if not strengthInput.is_linked and strengthInput.default_value != 1: return strengthInput.default_value return None
def __get_cycles_emission_node(blender_lamp) -> Optional[bpy.types.ShaderNodeEmission]: if blender_lamp.use_nodes and blender_lamp.node_tree: for currentNode in blender_lamp.node_tree.nodes: is_shadernode_output = isinstance(currentNode, bpy.types.ShaderNodeOutputLight) if is_shadernode_output: if not currentNode.is_active_output: continue result = gltf2_blender_search_node_tree.from_socket( currentNode.inputs.get("Surface"), gltf2_blender_search_node_tree.FilterByType(bpy.types.ShaderNodeEmission) ) if not result: continue return result[0].shader_node return None
def __gather_intensity(blender_lamp, _) -> Optional[float]: emission_node = __get_cycles_emission_node(blender_lamp) if emission_node is not None: if blender_lamp.type != 'SUN': # When using cycles, the strength should be influenced by a LightFalloff node result = gltf2_blender_search_node_tree.from_socket( emission_node.inputs.get("Strength"), gltf2_blender_search_node_tree.FilterByType(bpy.types.ShaderNodeLightFalloff) ) if result: quadratic_falloff_node = result[0].shader_node emission_strength = quadratic_falloff_node.inputs["Strength"].default_value / (math.pi * 4.0) else: gltf2_io_debug.print_console('WARNING', 'No quadratic light falloff node attached to emission strength property') emission_strength = blender_lamp.energy else: emission_strength = emission_node.inputs["Strength"].default_value return emission_strength return blender_lamp.energy