Max Script 入門教程

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 不區分大小寫

    1. Box()
    2. mybox = Box() 後面無參數就需要加上括號
    3. mybox = box length:20 width:20 height:20生成的box帶有一定的參數。類似函數調用,不能帶括號,後面是參數
      生成的box 的box默認的名字是Box001
  • 取得一個box

    1. $Box001 使用對象名
    2. mybox 使用變量名
  • 修改屬性

    1. $Box001.width=100
    2. mybox.length=100
    3. mybox.wirecolor = (color 255 0 255)
    4. mybox.scale = [1.5,1.5,1.5]
  • 變換

    1. move mybox [10,0,0] 移動
    2. scale name_obj [<x,y,z>] 放縮
    3. 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. 函數

  • 函數調用
    1. 【函數名 實參】
    2. 【函數名 參數名:值 參數名:值】
  • 函數定義
    1. 【fn 函數名 形參 = (……)】
    2. 【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,如有錯誤,歡迎指出。

發佈了36 篇原創文章 · 獲贊 65 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章