前言
笔者处理模型时下载到一个pbr材质库贴图包,手动每次创建材质过于麻烦,因此计划使用自动化脚本根据贴图名自动创建材质。
3dsmax的原本脚本使用的是maxscript,语法有点奇怪懒得学,发现也支持使用python编写脚本,但是python脚本的开发资料太少,官方文档的举例使用的是标准(standard)材质,pbr材质很多接口没有找到,试了很久发现名称应该是与英文3dsmax一致,这里简单记录一下。
一、思路
1. 根据文件夹名确定材质名称
2. 根据文件夹下贴图的名称确定各输入贴图
3. 将贴图赋予pbr材质的各位置
二、代码
import os
import pymxsdef 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_pathsif __name__ == '__main__':rt = pymxs.runtimefolder_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 = subdirt = rt.sphere() # 创建赋予材质的物体t.material = physical_materialmat_path = folder_path + "\\" + subdirtexture_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_textureelif "glossiness" in textureName: # 光泽度贴图——>粗糙度贴图bitmap_texture = rt.BitmapTexture()bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureNamephysical_material.RoughnessMap = bitmap_textureelif "normal" in textureName: # 法线贴图——>凹凸贴图bitmap_texture = rt.BitmapTexture()bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureNamephysical_material.BumpMap = bitmap_textureelif "reflection" in textureName: # 反射贴图——>反射贴图bitmap_texture = rt.BitmapTexture()bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureNamephysical_material.ReflColorMap = bitmap_textureelif "height" in textureName: # 高度贴图——>置换贴图bitmap_texture = rt.BitmapTexture()bitmap_texture.filename = folder_path + "\\" + subdir + "\\" + textureNamephysical_material.DisplacementMap = bitmap_texture
三、说明
physical_material后的属性参照上图,去除空格保留大小写
在3dsmax中选择脚本——运行脚本,选择python脚本运行即可