【pymxs】max文件导出fbx文件

article/2025/9/12 21:18:37

1. 前言

.max格式是Autodesk公司下的3dsmax软件的通用格式,许多软件出于商业考虑都有自己的格式,例如网易云下载的音乐。

这也就意味着.max文件只能用Autodesk的产品打开,即3dsmax或maya。

Autodesk的产品均是非开源、封闭式的,导致它的生态不佳,为后续操作带来很多的不方便。


2. 软件准备

要读取一个.max文件,不仅需要建模软件,还需要数个渲染软件,建模软件公司和渲染软件公司是独立存在的。这些渲染软件以插件的形式结合到建模软件里。由于这些软件彼此之间独立存在,他们之间注定存在兼容性问题。

安装:

  • 3dsmax可以去官网申请30天试用版

  • chaos公司出品的vray和corona渲染软件也可以去官网申请30天试用版

    注意如果建模软件用的是3dsmax,那么渲染软件就得下载**‘vray/corona for 3dsmax’**

3dsmax试用版似乎只能下最新版的,那么渲染软件也全部下最新版即可。


3. 前置知识

(1) 不同渲染软件使用的引擎不同,导致即使同属material对象,不同的渲染软件生成的材质也具有完全不同的属性,这就是不兼容的体现。也就是说,不同渲染软件生成的材质,不能互相转换

(2) 3ds Max导出fbx的导出工具是由Autodesk公司开发的,这也就导致了他没有义务去支持第三方渲染软件的材质格式,实际上很可能不仅是材质,任何地方使用了三方公司的插件,都可能导致不兼容。而第三方渲染软件也没有义务去改进Autodesk开发的导出工具。结果就是,只要.max文件里含有第三方公司产生的内容,在导出fbx时就可能出问题。

(3) .fbx格式也是Autodesk开发的格式,所以第(2)点说的“出问题”,大多是指用别的建模软件打开会出问题,用3ds Max本身打开还是可以的。

(4) 为了解决导出的fbx的材质问题,必须事先就将第三方公司的材质转换成3ds Max的标准材质,由于两边材质属性完全不同,这个转换过程基本相当于重新把材质画了一遍,所幸这个过程可以用其他插件完成。虽然转换前后看起来差别不大,但转换后的材质和原本材质的底层数据肯定不一样了。

(5) 3ds Max提供了Python的SDK pymxs,但是只能在3ds Max打开的情况下,在它内部使用Python。


4. 3ds Max

认识一些基本按钮。

  • 打开.max文件

image-20230627135103065

  • 导入导出fbx等其他格式的文件

image-20230627135152523

导出时必须勾选Embed Media以保留material;可以更改Type选择Binary/ASCII格式

image-20230627135604645

  • 新建/打开脚本

image-20230627135225159

  • 查看material

image-20230627135311167

image-20230627135346471

  • 渲染为图像和渲染配置

image-20230627135451377


5. pymxs

说明文档

这个文档最大的问题是关于Python的案例、教程很少,详细的参数说明得查看接口文档

为了将Python和3ds Max自带的Max脚本结合,pymxs内所有对象全部经过了封装,直接查看对象的属性什么都查不到。

可能是因为版本迭代了太多次,属性、方法名混杂着大驼峰命名、小驼峰命名、蛇形命名

  • 使用rt操作所有的接口
import pymxsrt = pymxs.runtime
  • 使用stringStream获取说明
# 获取rt的所有可操作接口
res = rt.stringStream('')
rt.apropos('', to=res)
print(res) # 也可以直接dir(rt)获取rt对象的属性和方法

使用rt.showProperties(object, to=res)可以获取其他对象的属性

  • 其他的看了就会:
INPUT_PATH = r"D:\sprite\PythonProject\main\o1_max_to_fbx\max_files"
OUTPUT_PATH = r"D:\sprite\PythonProject\main\o1_max_to_fbx\fbx_files"import os
import sys
import jsonimport pymxsdef list_dir(cur_path,ext_filter
):"""列举文件根目录下各文件的路径.Parameters----------cur_path: str根目录.ext_filter: Optional[List], default None用作筛选的后缀名.Returns-------List文件路径列表."""file_paths = []for root, dirs, files in os.walk(cur_path):for file in files:file_paths.append(os.path.join(root, file))if ext_filter:file_paths = list(filter(lambda x: os.path.splitext(x)[-1] in ext_filter, file_paths))return file_pathsrt = pymxs.runtimemax_files = list_dir(INPUT_PATH, ['.max'])
for mf in max_files:output_folder = os.path.join(OUTPUT_PATH, os.path.splitext(os.path.basename(mf))[0])if not os.path.exists((output_folder)):os.makedirs(output_folder)# 读取3ds Max文件max_file = rt.loadMaxFile(os.path.join(INPUT_PATH, mf),quiet=True,                       # 无视任何提示useFileUnits=False, ignoreMissingExternalFiles=True)# 获取灯和相机lights_cams = [x for x in rt.lights] + [x for x in rt.cameras]# 获取场景中的所有对象for i, obj in enumerate(rt.rootNode.Children):# 灯和相机非实体,不用导出if obj in lights_cams:continue# 选中object对象rt.select(obj)# 在FBX导出配置里设置EmbedTextures为True, 还有很多别的参数可以配置rt.FBXExporterSetParam("EmbedTextures", True)# 导出fbx, 以下就是exportFile全部参数了rt.exportFile(os.path.join(output_folder, f"{obj.name}_{i}.fbx"),rt.name('noPrompt'),    # 无视任何提示selectedOnly=True,      # 只导选中物体using=rt.FBXEXP         # 使用FBX导出工具)

当然,pymxs里还提供了非常多的功能,object对象也有很丰富的属性可以查看,只是目前这样已经足够完成导出fbx的需求了。


http://chatgpt.dhexx.cn/article/GBFak8jU.shtml

相关文章

Fbx文件解析(一)——FBX SDK for Windows环境配置

Fbx文件解析(一)——FBX SDK for Windows环境配置 一、下载并安装FBX SDK 下载网址:http://www.autodesk.com/fbx 找到与自己Windows对应、与自己的VS版本对应的SDK版本,下载并按照安装步骤安装。安装时选择的安装文件夹就是下…

pmx转fbx的具体步骤

本文主要讲述了在Windows10环境下,通过blender将pmx格式文件转化为fbx文件的具体步骤 本文主要包括以下三个部分: 一、blender下载与安装二、cats插件安装三、pmx格式转换为fbx格式 一、blender下载与安装 1.下载blender到电脑上 blender下载 建议下载…

关于unity导出FBX文件

最近有项目需求需要根据特殊文件来绘制自定义图形,考虑到其他编辑器对此文件的共用,所以将图形导出为FBX格式。 在网上找到了一个git仓库在这也记录分享一下: Git仓库:UnityFBXExporterhttps://github.com/Ymiku/UnityFBXExporter 插件功能…

加载FBX模型文件

深入理解加载FBX模型文件 每个模型文件都有自己的格式,有自研引擎的模型格式,有AutoDesk提供的模型文件格式,比如FBX模型文件,因为Unity与UE4引擎的使用而备受关注,FBX文件是AutoDesk提供的SDK,已经封装好了…

FBX格式转换为GLTF/GLB格式

有小伙伴说通过blende将fbx转glb/gltb格式的模型无法在web端加载,或glb模型无法打开,比如腾讯地图加载gltf。 这里个大家分享一个插件 可以将fbx格式转换为glb格式 window版本 链接:https://pan.baidu.com/s/17wwI-hmezg9-sOnHZNn_uw?pwd1…

FBX文件导入Unity导致贴图丢失问题解决,以3ds max,Blender导入导出为例

一 . 首先把资产文件导入三维软件中 1 . 3ds Max 1.1 导入FBX——【免费或者质量差的资源可能会出现平滑组错误的情况,可以直接镜像一个模型更改法线或者删除面重新封口能解决问题】 1.2 导出FBX至Unity引擎 1.2.1 导出文件预设 注意【导出之后会产生一个FBX文件和流…

基于FBX SDK的FBX模型解析与加载 -(一)

1. 简介 FBX是Autodesk的一个用于跨平台的免费三维数据交换的格式(最早不是由Autodesk开发,但后来被其收购),目前被 众多的标准建模软件所支持,在游戏开发领域也常用来作为各种建模工具的标准导出格式。Autodesk提供…

Unity场景素材导出为 FBX文件的方法

系列文章目录 一、Unity场景素材导出为 FBX文件的方法:http://t.csdn.cn/Xyjxe 二、Unity场景素材导出为 OBJ文件的方法:http://t.csdn.cn/08RY3 三、Unity地形导出为 OBJ文件的方法 (大家可以打开我的博客主页进行查看此系列其它文章&…

Unity导入FBX动画文件

给刚入门的同学稍微记一下fbx格式动画导入unity的步骤: 首先直接把fbx文件拖入unity内,如图操作 将avatar骨骼创建之后,我们接下来就根据自己对动画的一些需求设置一下动画的参数,比如截取一下动画的开始帧和结束帧来达到剪切的目…

深入理解加载FBX模型文件

每个模型文件都有自己的格式,有自研引擎的模型格式,有AutoDesk提供的模型文件格式,比如FBX模型文件,因为Unity与UE4引擎的使用而备受关注,FBX文件是AutoDesk提供的SDK,已经封装好了,我们并不能查…

FBX模型

概览 fbx文件,一般是导出给unity使用的模型文件。 如下图所示,建立一个models目录,然后右击,选择 imoprt new asserts 即可导入这些文件。 展示如下,Mesh定义了形状。 铅笔也是同理,只不过铅笔有自己的贴图…

FBX文件简述

1. 关于FBX Autodesk FBX是Autodesk公司出品的一款用于跨平台的免费三维创作与交换格式的软件,通过FBX用户能访问大多数三维供应商的三维文件。FBX 文件格式支持所有主要的三维数据元素以及二维、音频和视频媒体元素。 FBX由Kaydara开发并于2006年被AUT…

fbx格式研究

Part1fbx简介 Autodesk FBX是Autodesk公司出品的一款用于跨平台的免费三维创作与交换格式的软件,通过FBX用户能访问大多数三维供应商的三维文件。FBX 文件格式支持所有主要的三维数据元素以及二维、音频和视频媒体元素。FBX对于三维软件的兼容性非常非常强大&#x…

matlab 画图的颜色

plot函数代表不同颜色的标示符一共有八种: y:黄色;k:黑色;w:白色;b:蓝色;g:绿色;r:红色;c:亮青色&#xff1b…

Matlab画图线型、符号及颜色汇总

【1】线型、标记符、颜色的说明 【2】对于坐标轴的注释内容xlabel,ylabel的属性说明 figure,plot(Seg1,SS1_QJ1,k);hold onplot(Seg1,SS1_QJ1,ks)plot(Seg1,Q1*ones(length(Seg1)),r)xlabel(\bf{安装角}(),FontSize,10.508) %\bf是加粗的意思%xlabel(\fontsize{10.508}\fontn…

matlab绘图颜色RGB

一.1.MATLAB中颜色数值 二.常用颜色

matlab中的颜色,Matlab里面除了常用的还有哪些颜色?已知的颜色不够怎么办?

我这里有个自己写的函数,支持64个色 %% H:取色函数 % INTRODUCTORY TEXT %标题综述************************ %调用默认色图可实现64色的选取 %输入**************************** %①所选颜色个数 %输出**************************** %①待用颜色的RGB矩阵 %调用流程…

Matlab中绘制颜色渐变曲线

大家在文章中是否看见过各类颜色渐变的曲线呢?今天小编就教大家在matlab中如何绘制这类颜色渐变的曲线。 一、scatter3函数 这个函数是大家最常想到的函数,具体用法就看其帮助文档,小编就给出一段示例代码: % Matlab% data z …

matlab画图配色RGB+线性

转载自https://blog.csdn.net/a_cherry_blossoms/article/details/115185831 画图的线型和符号该博主链接中可以找到:https://blog.csdn.net/weixin_45634606/article/details/104422695 1.使用matlab画图时,怎样才能调出顺眼的颜色呢?反正我…

matlab中surf怎么改变颜色_MATLAB作图

未完,之后将逐渐更新 %%2D作图 1、极坐标转直角坐标 1.1直接用公式 利用极坐标转直接坐标公式 thet=0:2*pi/100:2*pi; rho=1; x=rho.*cos(thet); y=rho.*sin(thet); plot(x,y); 1.2 用pol2cart [x,y]=pol2cart(thet,rho);相当于1.1中第三第四行代码 同理直角坐标转极坐标用car…