3dsmax中使用python创建PBR材质并挂接贴图

前言

笔者处理模型时下载到一个pbr材质库贴图包,手动每次创建材质过于麻烦,因此计划使用自动化脚本根据贴图名自动创建材质。

3dsmax的原本脚本使用的是maxscript,语法有点奇怪懒得学,发现也支持使用python编写脚本,但是python脚本的开发资料太少,官方文档的举例使用的是标准(standard)材质,pbr材质很多接口没有找到,试了很久发现名称应该是与英文3dsmax一致,这里简单记录一下。

一、思路

  1. 根据文件夹名确定材质名称

  2. 根据文件夹下贴图的名称确定各输入贴图

  3. 将贴图赋予pbr材质的各位置

二、代码

python 复制代码
import os
import pymxs

def get_files_in_folder(folder_path):
    file_paths = []
    for root,dirs,files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root,file)
            file_paths.append(file_path)
    return file_paths
    
if __name__ == '__main__':
    rt = pymxs.runtime
    folder_path = "XXXX"  # 文件夹路径
    
    subdirectories = [d for d in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, d))]

    for subdir in subdirectories:
        physical_material = rt.PhysicalMaterial() # 创建一个物理材质
        physical_material.name = subdir
        t = rt.sphere() # 创建赋予材质的物体
        t.material = physical_material

        mat_path = folder_path + "\\" + subdir
        texture_paths = get_files_in_folder(mat_path)

        for path in texture_paths:
            textureName = path.split("\\")[-1]
            if "diffuse" in textureName: # 漫反射贴图------>基础色贴图
                bitmap_texture = rt.BitmapTexture()
                bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureName            
                physical_material.BaseColorMap = bitmap_texture
            elif "glossiness" in textureName: # 光泽度贴图------>粗糙度贴图
                bitmap_texture = rt.BitmapTexture()
                bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureName
                physical_material.RoughnessMap = bitmap_texture
            elif "normal" in textureName: # 法线贴图------>凹凸贴图
                bitmap_texture = rt.BitmapTexture()
                bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureName
                physical_material.BumpMap = bitmap_texture
            elif "reflection" in textureName: # 反射贴图------>反射贴图
                bitmap_texture = rt.BitmapTexture()
                bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureName
                physical_material.ReflColorMap = bitmap_texture
			elif "height" in textureName: # 高度贴图------>置换贴图
                bitmap_texture = rt.BitmapTexture()
                bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureName
                physical_material.DisplacementMap = bitmap_texture

三、说明

physical_material后的属性参照上图,去除空格保留大小写

在3dsmax中选择脚本------运行脚本,选择python脚本运行即可

相关推荐
程序员佳佳17 分钟前
文章标题:彻底抛弃OpenAI官方Key?实测GPT-5.2与Banana Pro(Gemini 3):这才是开发者的终极红利!
开发语言·人工智能·python·gpt·ai作画·api·midjourney
qq_3561969532 分钟前
day49_通道注意力机制 @浙大疏锦行
python
Yeats_Liao36 分钟前
MindSpore开发之路(十四):简化训练循环:高阶API `mindspore.Model` 的妙用
人工智能·python·深度学习
写代码的【黑咖啡】1 小时前
Python中的Pandas:数据分析的利器
python·数据分析·pandas
机器懒得学习1 小时前
WGAN-GP RVE 生成系统深度技术分析
python·深度学习·计算机视觉
晨光32111 小时前
Day43 训练和测试的规范写法
python·深度学习·机器学习
海棠AI实验室1 小时前
Python 学习路线图:从 0 到 1 的最短闭环
开发语言·python·学习
玄同7651 小时前
Python 函数:LLM 通用逻辑的封装与复用
开发语言·人工智能·python·深度学习·语言模型·自然语言处理
俞凡1 小时前
深入理解 Python GIL
python
luoluoal1 小时前
基于python的自然语言处理技术的话题文本分类的研究(源码+文档)
python·mysql·django·毕业设计·源码