def create_material(new_mat: bpy.types.Material, base_image_path: str, ambient_occlusion_image_path: str, metallic_image_path: str, roughness_image_path: str, alpha_image_path: str, normal_image_path: str, displacement_image_path: str): """ Create a material for the cctexture datatset, the combination used here is calibrated to this. :param new_mat: The new material, which will get all the given textures :param base_image_path: The path to the color image :param ambient_occlusion_image_path: The path to the ambient occlusion image :param metallic_image_path: The path to the metallic image :param roughness_image_path: The path to the roughness image :param alpha_image_path: The path to the alpha image (when this was written there was no alpha image provided \ in the haven dataset) :param normal_image_path: The path to the normal image :param displacement_image_path: The path to the displacement image """ nodes = new_mat.node_tree.nodes links = new_mat.node_tree.links principled_bsdf = Utility.get_the_one_node_with_type(nodes, "BsdfPrincipled") output_node = Utility.get_the_one_node_with_type(nodes, "OutputMaterial") collection_of_texture_nodes = [] base_color = MaterialLoaderUtility.add_base_color(nodes, links, base_image_path, principled_bsdf) collection_of_texture_nodes.append(base_color) principled_bsdf.inputs["Specular"].default_value = 0.333 ao_node = MaterialLoaderUtility.add_ambient_occlusion(nodes, links, ambient_occlusion_image_path, principled_bsdf, base_color) collection_of_texture_nodes.append(ao_node) metallic_node = MaterialLoaderUtility.add_metal(nodes, links, metallic_image_path, principled_bsdf) collection_of_texture_nodes.append(metallic_node) roughness_node = MaterialLoaderUtility.add_roughness(nodes, links, roughness_image_path, principled_bsdf) collection_of_texture_nodes.append(roughness_node) alpha_node = MaterialLoaderUtility.add_alpha(nodes, links, alpha_image_path, principled_bsdf) collection_of_texture_nodes.append(alpha_node) normal_node = MaterialLoaderUtility.add_normal(nodes, links, normal_image_path, principled_bsdf, invert_y_channel=True) collection_of_texture_nodes.append(normal_node) displacement_node = MaterialLoaderUtility.add_displacement(nodes, links, displacement_image_path, output_node) collection_of_texture_nodes.append(displacement_node) collection_of_texture_nodes = [node for node in collection_of_texture_nodes if node is not None] MaterialLoaderUtility.connect_uv_maps(nodes, links, collection_of_texture_nodes)
def create_material(new_mat: bpy.types.Material, base_image_path: str, ambient_occlusion_image_path: str, specular_image_path: str, roughness_image_path: str, alpha_image_path: str, normal_image_path: str, displacement_image_path: str, bump_image_path: str): """ Create a material for the haven datatset, the combination used here is calibrated to the haven dataset format. :param new_mat: The new material, which will get all the given textures :param base_image_path: The path to the color image :param ambient_occlusion_image_path: The path to the ambient occlusion image :param specular_image_path: The path to the specular image :param roughness_image_path: The path to the roughness image :param alpha_image_path: The path to the alpha image (when this was written there was no alpha image provided \ in the haven dataset) :param normal_image_path: The path to the normal image :param displacement_image_path: The path to the displacement image :param bump_image_path: The path to the bump image """ nodes = new_mat.node_tree.nodes links = new_mat.node_tree.links principled_bsdf = Utility.get_the_one_node_with_type( nodes, "BsdfPrincipled") output_node = Utility.get_the_one_node_with_type( nodes, "OutputMaterial") collection_of_texture_nodes = [] base_color = MaterialLoaderUtility.add_base_color( nodes, links, base_image_path, principled_bsdf) collection_of_texture_nodes.append(base_color) specular_color = MaterialLoaderUtility.add_specular( nodes, links, specular_image_path, principled_bsdf) collection_of_texture_nodes.append(specular_color) ao_node = MaterialLoaderUtility.add_ambient_occlusion( nodes, links, ambient_occlusion_image_path, principled_bsdf, base_color) collection_of_texture_nodes.append(ao_node) roughness_node = MaterialLoaderUtility.add_roughness( nodes, links, roughness_image_path, principled_bsdf) collection_of_texture_nodes.append(roughness_node) alpha_node = MaterialLoaderUtility.add_alpha(nodes, links, alpha_image_path, principled_bsdf) collection_of_texture_nodes.append(alpha_node) # only add a bump map if no normal map was found if not os.path.exists(normal_image_path): bump_node = MaterialLoaderUtility.add_bump(nodes, links, bump_image_path, principled_bsdf) collection_of_texture_nodes.append(bump_node) else: normal_node = MaterialLoaderUtility.add_normal( nodes, links, normal_image_path, principled_bsdf, invert_y_channel=False) collection_of_texture_nodes.append(normal_node) displacement_node = MaterialLoaderUtility.add_displacement( nodes, links, displacement_image_path, output_node) collection_of_texture_nodes.append(displacement_node) collection_of_texture_nodes = [ node for node in collection_of_texture_nodes if node is not None ] MaterialLoaderUtility.connect_uv_maps(nodes, links, collection_of_texture_nodes)