前言:
项目太大太复杂,还不能偷懒直接买,那我只能使用3DMAX脚本语言来增加效率了,正好整理出来所有细节,全文大约3500字,请耐心阅读,都是认真整理出来的。
这几天就是有这么个需求,要批量建出1000个在尺寸/相对位置上有所差异,但组装方式比较相似的模型。用来做实验。本来是想在网上买的,哎,果然并不可能买到和需求一样的现成的模型。只好自己来,用3DMAX建模的速度实在是太慢了。这时候就发现了菜单栏上有一个仿佛是脚本语言的东西。
很好,简直救人于水火之中!当机立断放弃手动建模了。不过网上的maxscript教程参差不齐,很多就是小片段,还不是入门级的,要么又是丢出一大本API让人自己慢慢看。
作为maxscript的新手基础教程,所以写的教程也是自己对着API摸索清楚的超级入门教程。仅供参考。
我的目标是批量建模1000个这样的小房子,长方体是房子主体,四棱锥是屋顶,墙面配置1门,2窗,要能批量贴材质,批量渲染。并且脚本自动计算出各个零件的空间关系,导出文本数据供后续实验,导出渲染截图,保存max文件。
反正感觉基本上都是3dmax里很常用的形状拼接,但需要大批量建模,所以必须靠脚本!
一、第一部分: maxscript的基本用法:
看名字就觉得和javascript有点像,因为我自己以前是写过前端的,所以用的sublime编辑器写这种轻量级脚本。跟那些脚本语言一样,用记事本也可以写。直接在文件夹里创建一个demo.ms文件,自己改后缀为Ms就可以。并不是一定要在3dmax里头写。我是用sublime打开空的demo.ms,直接在3dmax外写代码,然后3dmax内运行代码就可以了。
切到3dmax,菜单- Maxscript- maxscript侦听器。把这个东西打开。(感觉就像一个交互式命令行)
在命令行里交互式创建长方体:
侦听器里打一句:
Box()
就会交互式的弹出下面这句话,是创建好的一个空间坐标@在0,0,0的box对象(就是长方体对象)名字是默认的Box001
$Box:Box001 @ [0.000000,0.000000,0.000000]
【我叫你一声Box001你敢答应吗?】【undefine】
试过就知道,虽然这对象名为Box001,但无法直接召唤,需要用$Box001,带上$符号,才能选中对象。

老麻烦了,试试下一种创建Box的方法。
a = Box()
跟其他编程语言一样,定义了一个a变量当它的名字。这样创建的Box,名字还是叫Box002,但我们喊一句“a”他也能选中。

我正式用来创建房体的时候是在脚本文件里写:
house01 = Box name:"house01"
maxscript里头的Box,Pyramid这