当前位置: 首页 > article >正文

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

前言

        笔者处理模型时下载到一个pbr材质库贴图包,手动每次创建材质过于麻烦,因此计划使用自动化脚本根据贴图名自动创建材质。
        3dsmax的原本脚本使用的是maxscript,语法有点奇怪懒得学,发现也支持使用python编写脚本,但是python脚本的开发资料太少,官方文档的举例使用的是标准(standard)材质,pbr材质很多接口没有找到,试了很久发现名称应该是与英文3dsmax一致,这里简单记录一下。


一、思路

1. 根据文件夹名确定材质名称
2. 根据文件夹下贴图的名称确定各输入贴图
3. 将贴图赋予pbr材质的各位置


二、代码

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


http://www.kler.cn/a/572521.html

相关文章:

  • 6、什么是重排重绘?
  • Nginx 部署 Vue.js 项目指南:结合慈云数据服务器的实践
  • Vue Table 表格列筛选,前端筛选与后端筛选的写法
  • 4 Redis4 List命令类型讲解
  • C# IEquatable<T> 使用详解
  • Serilog: 强大的 .NET 日志库
  • c++中什么时候应该使用extern关键字?
  • 大模型管理工具:LLaMA-Factory
  • ssm_mysql_小型企业人事管理系统
  • c++进阶--继承
  • 【数据结构-图】
  • PostgreSQL 创建表格
  • 3D Web轻量化引擎HOOPS Communicator的核心优势解析:高性能可视化与灵活部署!
  • MQ消息丢失解决方案
  • 影刀RPA开发拓展--正则表达式
  • Git是什么
  • 仿12306项目(4)
  • 【入门Web安全之前端学习的侧重点和针对性的建议】
  • 掌握 findIndex、push 和 splice:打造微信小程序的灵活图片上传功能✨
  • CSS的列表属性