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脚本运行即可

相关推荐
Huanzhi_Lin27 分钟前
python源码打包为可执行的exe文件
python
声声codeGrandMaster41 分钟前
django之账号管理功能
数据库·后端·python·django
娃娃略1 小时前
【AI模型学习】双流网络——更强大的网络设计
网络·人工智能·pytorch·python·神经网络·学习
LCY1331 小时前
python 与Redis操作整理
开发语言·redis·python
广西千灵通网络科技有限公司2 小时前
基于Django的个性化股票交易管理系统
后端·python·django
项目題供诗2 小时前
Python类和对象四(十三)
python
roc-ever2 小时前
用Python做有趣的AI项目1:用 TensorFlow 实现图像分类(识别猫、狗、汽车等)
人工智能·python·tensorflow
朴拙数科3 小时前
基于 RAG 的 Text2SQL 全过程的 Python 实现详解,结合 LangChain 框架实现自然语言到 SQL 的转换
python·sql·langchain
xiaohanbao093 小时前
day6 python数据可视化
python·学习·信息可视化·pandas
szial4 小时前
如何在 Conda 环境中降级 Python 版本:详细指南
python·conda