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 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
麻雀飞吧17 小时前
最新量化学习路径,交易认知和技术实现要并行
人工智能·python
C^h21 小时前
python函数学习
人工智能·python·机器学习
Fanta丶21 小时前
4.Python set()集合、dict(字典、映射)、 数据容器的通用功能
python
决战灬21 小时前
langgraph之interrupt(理论篇)
人工智能·python·agent
兜客互动1 天前
2026年AI关键词拓展挖掘软件,高效助力内容创作精准获流
人工智能·python
weixin_538601971 天前
智能体测开Day30pytest测试框架
python
MC皮蛋侠客1 天前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
邪神与厨二病1 天前
牛客周赛 Round 153
python·算法
yaoxin5211231 天前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python