MAXscript是3ds Max內置腳本語言,Max2.0及以後加入的功能。也能使用在與3ds Max相關的產品中如Autodesk VIZ,character studio,Plasma和GMax;腳本可使用於建模,動畫,材質,渲染等等。它是專門爲3D Studio Max設計的。 – 摘自百度百科
1. 啓用max腳本
- 在3d max軟件中打開max script菜單,打開max script偵聽器,這是一個交互式的界面,可在裏面輸入腳本代碼。
- 在max script菜單中,打開max script編輯器可編輯腳本文件,主要好處是有高亮顯示,也可以用別的編輯器。
- 在max script菜單中,選擇運行腳本,選擇腳本位置,即可運行自定義的腳本文件。
2. 數據類型
1. int
2. float
3. string
4. 數組 數組的每個元素可以是不同的,下標是從1
開始的
1 +2
3
1.0+2.0
3.0
a = "hello"
"hello"
#(1,2,3,"asd",[12,3])
#(1, 2, 3, "asd", [12,3])
a = #(1,2,4,4)
#(1, 2, 4, 4)
a[1]
1
a[3]
4
5. 類型轉換
a = 1
1
a as string
"1"
a = "1"
"1"
a as float
1.0
a = "1.0"
"1.0"
a as integer
1
6. 結構體
struct <struct_name> ( <member> , <member> )
聲明:Struct person (name, height, age, sex)
實例化:Bill = person name:"Bill" height:72 age:34 sex:#male
3. 基本使用
基本數學操作
2*3
6
pi *2
6.28319
2 ^3
8
"asd"+"def"
"asddef"
random 1 100 // 生成1 -100 的隨機數
1
random 1.0 100
56.6555
x =1
1
x+=1
2
建模操作
生成一個
box
不區分大小寫Box()
mybox = Box()
後面無參數就需要加上括號mybox = box length:20 width:20 height:20
生成的box
帶有一定的參數。類似函數調用,不能帶括號,後面是參數
生成的box
的box默認的名字是Box001
取得一個
box
$Box001
使用對象名mybox
使用變量名
修改屬性
$Box001.width=100
mybox.length=100
mybox.wirecolor = (color 255 0 255)
mybox.scale = [1.5,1.5,1.5]
變換
move mybox [10,0,0]
移動scale name_obj [<x,y,z>]
放縮rot_box = eulerangles 0 30 0
rotate mybox rot_box
旋轉,需要先設置一個旋轉角,再旋轉,可以看成是函數的調用
增加修改器
addModifier mybox (twist angle:30)
更改修改器屬性
mybox.twist.angle = 60
獲得修改器的屬性
showclass "twist.*"
Twist(扭曲) : modifier {90,0}
.axis(軸) : integer
.bias(偏移) : float
.angle(角度) : float
.limit(限制) : boolean
.upperlimit(上限) : float
.lowerlimit(下限) : float
OK
- 獲取某個修改器的全部屬性
showclass "box.*"
Box(長方體) : GeometryClass {10,0}
.height(高度) : float
.length(長度) : float
.lengthsegs : integer
.width(寬度) : float
.widthsegs : integer
.mapcoords : boolean
.heightsegs(高度分段) : integer
4. 語法
條件
if mybox.height == 10 then mybox.width = 20
循環
for i = 1 to 5 do
(
box_copy = copy mybox
box_copy.pos = [i * 50, 0, 0]
)
設置間隔
for i = 1 to 5 by 2 do
(
box_copy = copy mybox
box_copy.pos = [i * 50, 0, 0]
)
使用
arr = for i=1 to 5 collect i
#(1, 2, 3, 4, 5)
for i in arr do print i
1
2
3
4
5
OK
for i = 1 to arr.count do print arr[i]
1
2
3
4
5
do while 循環
do <expr> while <expr> -- do loop
while <expr> do <expr> -- while loop
x=10
while x>0 do print (x-=1)
9
8
7
6
5
4
3
2
1
0
0
x=10
do print (x-=1) while x>10
局部變量和全局變量
for i = 1 to 3 do
(
local rad = 10
s = sphere()
s.pos.x = i * 10
s.radius = rad
)
global rad = 10
sphere radius:rad
5. 函數
- 函數調用
- 【函數名 實參】
- 【函數名 參數名:值 參數名:值】
- 函數定義
- 【fn 函數名 形參 = (……)】
- 【function 函數名 參數1:值 參數2:值 = ()】
如果有多個參數直接往後疊加就行
// 方式二
function sig num:0 test:"2" =
(
if num==0
then messagebox("0")
else if num ==1
then messagebox ("1")
else messagebox("2")
messagebox(test)
)
sig test:"3" num:0
// 方式一
fn si temp =
(
messagebox(temp)
)
si "data"
6. 導入導出
- 導入
importFile "C:\Users\uux\Desktop\576.obj" #noPrompt
- 導出
exportFile "C:\Users\uux\Desktop\5761.obj" #noPrompt
- 重置場景
resetMaxFile #noprompt
無提示
7. 應用實例
學習max script腳本主要是有一個需求對obj文件進行批量的細化操作,以下是操作代碼。
for i =0 to 590 do
(
resetMaxFile #noprompt
url1 = "F:\m\seg" +i as string + ".obj"; -- 獲得文件名
url2 = "F:\\nm\seg" +i as string + ".obj";
importFile url1 #noPrompt -- 導入
addmodifier $default (tessellate tension:0) -- 增加細化修改器
$default.tessellate.iterations = 1 -- 修改迭代次數
exportFile url2 #noPrompt -- 導出
)
8. 總結
max script腳本是一門很有用的語言,使用腳本基本可以實現圖形界面大部分的操作,可快速的進行批量的模型操作,同時還可以生成動畫,建模,模型調整等等操作,可以較大提升生產力。第一次接觸,並不是很瞭解max script,如有錯誤,歡迎指出。