【Blender】批量修改场景中材质属性

闲橙砸
2023-08-15

我在修改倾斜摄影的地形模型时候遇上了导入的FBX携带的材质金属度是1,粗糙度是0,看上去金光闪闪的,由于我不会编程,所以搜了一圈,找到一个相关文章

3dsMax导出模型到Blender后金属度变成1_3dmax转blender_(Always)的博客-CSDN博客


在想修改的参数上右键有个复制数据路径,点击之后会将当前数据路径(包括属性的数字代码)复制到剪贴板,然后去随便哪个聊天软件或者文本框里粘贴就看得到了


比如我这复制的是自发光的颜色选择框,复制出来就是以下内容



以下代码复制到Blender脚本编辑器里运行就会将场景中的所有BSDF着色器节点的金属度的值修改为0;粗糙度的值修改为1,自发光颜色改为黑色,自发光强度改为0。你也可以按需修改数字来修改不同的属性的值(最好先做个测试,把项目备份一下以防万一)。

for m in bpy.data.materials:


    if m.node_tree:


        m.node_tree.nodes["Principled BSDF"].inputs[1].default_value = 0


        m.node_tree.nodes["Principled BSDF"].inputs[2].default_value = 1

     

        m.node_tree.nodes["Principled BSDF"].inputs[26].default_value =(0,0,0,1)

             

        m.node_tree.nodes["Principled BSDF"].inputs[27].default_value = 0


2024/07/08

用讯飞星火大模型修改了一下代码,用blender4.1.1修改了模型材质,可以正常使用(不知道为啥我一部分模型材质里("Principled BSDF")即“原理化BSDF”是中文的,卡了一阵子,后来把 principled_bsdf = slot.material.node_tree.nodes.get("Principled BSDF")”中的("Principled BSDF")修改为("原理化BSDF")把用中文的材质修改了

#以下为修改场景中的所有材质:


import bpy


# 遍历场景中的所有对象

for obj in bpy.data.objects:

    # 确保对象是一个网格类型

    if obj.type == 'MESH':

        # 遍历对象的材质插槽

        for slot in obj.material_slots:

            if slot.material and slot.material.node_tree:

                # 查找名为"Principled BSDF"的节点

                principled_bsdf = slot.material.node_tree.nodes.get("Principled BSDF")

                if principled_bsdf:

                    # 设置节点属性

                    principled_bsdf.inputs[1].default_value = 0

                    principled_bsdf.inputs[2].default_value = 1

                    principled_bsdf.inputs[26].default_value = (0, 0, 0, 1)

                    principled_bsdf.inputs[27].default_value = 0




#以下是修改场景中的活动对象的材质


import bpy


# 获取当前活动对象

active_object = bpy.context.view_layer.objects.active


# 确保活动对象是一个网格类型

if active_object and active_object.type == 'MESH':

    # 遍历活动对象的材质插槽

    for slot in active_object.material_slots:

        if slot.material and slot.material.node_tree:

            # 查找名为"Principled BSDF"的节点

            principled_bsdf = slot.material.node_tree.nodes.get("Principled BSDF")

            if principled_bsdf:

                # 设置节点属性

                principled_bsdf.inputs[1].default_value = 0

                principled_bsdf.inputs[2].default_value = 1

                principled_bsdf.inputs[26].default_value = (0, 0, 0, 1)

                principled_bsdf.inputs[27].default_value = 0



20240819

过去的两周,用通义千问修改了代码,有了UI面板,可以看这里:https://www.yuque.com/orange_shawn/bxzspq/vzkh5kd0plg1cx41#paLN8


阅读199
分享
写评论...