2012年3月23日 星期五

MAXscript : 圖檔轉檔

在MAXscript Reference 9.0中有寫並不支援輸出DDS檔
DDS : BitmapIOClass
instances not creatable by MAXScript, no interfaces or properties exposed
不過先用Max來Render輸出1張dds後,就能夠成功的用ms來輸出dds檔案了


sourceImage = openBitMap  "filename_string" --定義來源檔案(.psd ..)
outputImage = bitmap sourceImage.width  sourceImage.height --定義輸出檔案
copy  sourceImage outputImage --拷貝bitmap
outputImage.fileName = "filename_string" --定義檔案路徑
save outputImage --儲存
close sourceImage


但是openBitMap讀取的PSD檔案不包含alpha(只會有空的alpha 囧)

2012年3月16日 星期五

[3dsMax] 開檔時間異常的慢或者檔案容量異常的大的解決方法

  有時會發現Max檔案的容量很大或者是開檔案時會異常的慢,但刪除檔案內所有物件後存檔卻沒有變小,這種檔案是空的卻容量很大的狀況是因為有一些沒有實體的數據資料還殘留在檔案內(例如Motion Mixer, reactor..),在網上找到了解決的方式,第一篇文章說明的很清楚,且有ms檔案可下載:
  1. Scenes that take a long time to open or save and take up a lot of memory
  2. Cleanup of a 3d max file. HELP!!!!! - pietro cunin
    Cleanup of a 3d max file. HELP!!!!! - marcwe
  3. max file grew too big pls HELP - Alex Ayuso

簡而言之:
  1. 以Maxscript清除trackview nodes的資訊
    // 請Copy下面這一行指令在Max中執行
    t=trackviewnodes; n=t[#Max_MotionClip_Manager]; deleteTrackViewController t n.controller; gc()
    // 如果執行後有-- Unknown property: "controller" in undefined 的錯誤訊息代表此方式可能幫不了你了
    
    // 下面將此行指令分行方便瀏覽
    t=trackviewnodes
    n=t[#Max_MotionClip_Manager]
    deleteTrackViewController t n.controller
    gc()
    
    
    如果不會使用Maxscript的話請看下面: 
    開啟Maxscript Listener,熱鍵F11
    或者直接用左下角的Listener
    貼上指令之後按下九宮格鍵盤區的Enter執行
  2. 在只需要Objects及Hierarchy的狀況下,只需要File>New>Keep Objects and Hierarchy,就可存出乾淨的檔案
  3. 也有可能只是Biped骨架系統的Copy Collections造成,刪除掉即可
    有時會重覆載入過多的collections,刪除掉即可

2012年3月6日 星期二

MAXScript : 讓Max說話

在網路上發現的有趣東西XD

透過OLE使用語音功能
theVoice = CreateOLEObject "SAPI.SpVoice"
theVoice.Speak "Hello"
如此就能讓MAX說話了 : D

來源 http://www.cnblogs.com/sitt/archive/2011/11/22/2258834.html

2012年3月2日 星期五

MAXscript : Display Layer

Interface: LayerManager

.count
Get the number of layers in the scene
.current
Returns a LayerProperties MixinInterface to the current layer.

getLayerFromName #name
Returns a LayerProperties MixinInterface to the layer with the given name.

選取Layer中的物件
layer = layerManager.getLayerFromName #name
--Returns true on success, and an array of all nodes on the layer in the by-reference Out parameter.
layer.nodes &theNodes
select theNodes