CAD 模型自动流水线:Microsoft 3ds Max 无人值守生成 Asset Bundle 完整指南
【免费下载链接】MixedRealityCompanionKitThis is a MixedRealityToolkit style repository for code bits and components that may not run directly on Microsoft HoloLens or immersive headsets but instead pair with them to build experiences.项目地址: https://gitcode.com/gh_mirrors/mi/MixedRealityCompanionKit
MixedRealityCompanionKit 中的 Bundler 是一条CAD 模型自动流水线:把 CAD 工程文件打成 ZIP 丢进监控目录,后台服务自动唤醒 3ds Max 完成导入、减面和多级 LOD 生成,再无人值守地调用 Unity 批量打出 HoloLens 可直接加载的 Asset Bundle,全程无需人工点击。
💡适合场景:工程/设计团队有大量 CAD 子装配体需要快速做实时评审。官方将其定位为"实验性工具"——对中小装配体非常好用,但不覆盖所有超大、超复杂的 CAD 工程。
一、先认识流水线上的 3 个"角色"
| 角色 | 是谁 | 职责 |
|---|---|---|
| 🕵️ 监工 | Asset Processor 服务(控制台程序) | 盯着 Upload 目录,发现 ZIP 就排队处理,全程记录状态 |
| 🛠️ 老师傅 | Autodesk 3ds Max | 批量导入各种 CAD 格式、自动减面、按目标顶点数生成 LOD、导出 FBX |
| 📦 打包工 | Unity 编辑器(批处理模式) | 把 FBX 转成 HoloLens 端可直接下载加载的 Unity Asset Bundle |
为什么选 3ds Max?因为它能导入市面上绝大多数的 CAD 文件格式,而且提供完善的 MaxScript 脚本接口——这正是"无人值守"的关键。官方验证环境:Windows 10 / Windows Server 2016 + 3ds Max 2017(2015 起均可)+ 32GB 以上内存。
二、流水线全景:一个 ZIP 的 6 步旅程
- 投喂:把包含 CAD 模型(可附带
settings.ini覆盖配置)的 ZIP 丢进Data\组\用户\Upload目录; - 排队:服务每 10 秒扫描一次 Upload 目录,发现新 ZIP 立即加入处理队列,见 Program.cs;
- 唤醒 3ds Max:ZIP 解压到 Temp 后,服务直接用命令行拉起
3dsmax.exe -mxs ...,注入输入目录、目标平台、顶点数等全局变量,然后filein执行打包脚本,全程无界面交互,见 FileProcessor.cs; - 自动减面 + LOD 生成:Max 脚本递归导入 CAD 文件 → 焊接合并 → 逐级减面生成 LOD0~LOD5 → 渲染
mesh.png缩略图(依赖启动文件maxstart.max)→ 写出maxinfo.json统计信息 → 按 LOD 逐个导出 FBX,核心逻辑见 HoloAssetCreator.ms; - Unity 自动打包:UnityBundler.cs 把 FBX 拷入 Unity 工程,并行用 5.5 与 5.6 两个版本的 Unity 执行
-batchmode -quit -executeMethod BuildAssetBundles.BuildBundles——因为不同 Unity 版本的 bundle 互不兼容,所以双版本并行出包,客户端按需取用; - 归档:成功的 ZIP、FBX、缩略图进入 Processed,bundle 与 JSON 目录进 Bundles;失败的一律进 Failed 留档,方便事后排查。
三、如何配置减面参数:一个 settings.ini 说了算
全局默认值写在服务配置中(如MaxTargetPlatforms、MaxTargetVertexCount),而对单个模型想"特事特办"?把 settings.ini 模板放进 ZIP 根目录即可覆盖:
[Decimation] targetPlatforms = VR-PC,HoloLens targetVertsCount = 1000000,100000 dontDecimateLessThan = 75 CombineSameMats = false allFiles = true qualitySurfAreaCalc = false| 参数 | 含义 |
|---|---|
targetPlatforms | 要生成的 LOD 标签,每项对应一级 LOD |
targetVertsCount | 每级 LOD 的最大顶点数,数量必须与上一行一致 |
dontDecimateLessThan | 小于该顶点数的零件不做减面,避免小件失真 |
qualitySurfAreaCalc | 是否用逐面面积精算表面占比(更准但更慢) |
⚠️ 注意:targetPlatforms与targetVertsCount的条目数量必须严格一致,脚本依赖这一点来决定生成多少级 LOD。
四、快速上手:4 步把 Bundler 跑起来
- 准备专用机器:建议用独立机器或虚拟机,避免与日常 3ds Max 项目打架;
- 布置启动文件:把 maxstart.max 拷到 3ds Max 启动目录(默认
C:\Users\用户名\Documents\3dsMax\scenes),它负责渲染模型缩略图; - 固化导入设置:打开 Max,通过 File → Import 导入 ImportTest.IGS 并保存为默认 CAD 导入设置;再到 Customize → Preferences → Files 关闭 Auto Backup(避免减面中途卡在大文件备份上),然后关闭 Max;
- 启动服务投喂:确认 HoloAssetCreator.ms 已放置到配置路径,运行 AssetCreator 服务,开始往 Upload 目录丢 ZIP 吧 🎉
完整步骤见 Bundler/README.md 与 ProcessorService/README.md。
五、模型上头:HoloLens Viewer 如何加载 Asset Bundle
打包完成只是上半场。Bundler 自带一个 Unity 版 Asset Viewer(位于Bundler/Viewer/Unity),由场景 Managers 节点上的 ServerManager.cs 负责从 HTTP 服务器下载 bundle 并在 HoloLens 中展示;未配置服务器时则回退到本地资源。
零代码体验路径(5 步看模型):
- 用与 Viewer完全相同的 Unity 版本打开
Bundler/Processor/Unity工程; - 菜单栏选择 Bundle → CreateAssetBundles,自动产出 boat 与 teapot 两个 bundle;
- 把
AssetBundles目录下的.unity3d文件拷到Bundler/Viewer/TestBundle/AssetBundles对应子目录; - 右键 AssetBundles 目录,「发送到 → 压缩(zipped)文件夹」打个 ZIP;
- 用 Device Portal 的文件管理器把 ZIP 上传到设备端 AssetViewer 的 LocalState 目录(注意:Edge 浏览器上传有兼容问题,换 Chrome 等浏览器即可)。Viewer 下次启动会自动解压加载。
六、源码导航:读懂这条流水线的 6 个关键文件
- 总览与部署步骤:Bundler/README.md
- 目录监控与任务队列:Program.cs
- ZIP 处理主流程与 3ds Max 命令行调用:FileProcessor.cs
- Unity 双版本并行打包:UnityBundler.cs
- 减面 / LOD / 导出核心脚本:HoloAssetCreator.ms
- 目录结构与分组权限设计:ProcessorService/README.md
写在最后
Bundler 的精髓可以浓缩为一句话:目录监控 + 命令行 3ds Max + Unity 批处理。虽然它只是实验性质,且对极端复杂的 CAD 装配体无能为力,但它展示的"投入即转化"的资产自动化流水线模式,对任何需要把大量模型批量喂给 XR 设备的团队,都是值得直接借鉴的工程范本。
【免费下载链接】MixedRealityCompanionKitThis is a MixedRealityToolkit style repository for code bits and components that may not run directly on Microsoft HoloLens or immersive headsets but instead pair with them to build experiences.项目地址: https://gitcode.com/gh_mirrors/mi/MixedRealityCompanionKit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考