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

相关推荐
清空mega4 分钟前
Flask入门学习指南
后端·python·flask
万邦科技Lafite5 小时前
京东按图搜索京东商品(拍立淘) API (.jd.item_search_img)快速抓取数据
开发语言·前端·数据库·python·电商开放平台·京东开放平台
丁浩6666 小时前
Python机器学习---6.集成学习与随机森林
python·随机森林·机器学习
charlie1145141917 小时前
现代 Python 学习笔记:Statements & Syntax
笔记·python·学习·教程·基础·现代python·python3.13
麦麦大数据9 小时前
F036 vue+flask中医热性药知识图谱可视化系统vue+flask+echarts+mysql
vue.js·python·mysql·flask·可视化·中医中药
移远通信10 小时前
MQTT协议:物联网时代的通信革命
python·物联网·网络协议
Amo Xiang10 小时前
JavaScript逆向与爬虫实战——基础篇(css反爬之动态字体实现原理及绕过)
爬虫·python·js逆向·动态字体
编程让世界美好10 小时前
选手评分问题(python)
python
java1234_小锋10 小时前
PyTorch2 Python深度学习 - PyTorch2安装与环境配置
开发语言·python·深度学习·pytorch2
CClaris10 小时前
深度学习——反向传播的本质
人工智能·python·深度学习