Maya FEM節點框架完成

2022-07-31 15:36:15 字數 2100 閱讀 8230

這幾天把物理模擬框架移植到maya之中了。

maya程式設計有一點比較關鍵,就是要讓自己的程式邏輯適應maya的節點求值機制。在物理模擬中,往往需要進行時間積分,對此我的解決辦法是,寫乙個節點rigsimulator,存放模擬的狀態資料(例如: 位置、速度、加速度、過去模擬的結果),再寫乙個mel命令rigsimulate,讓指定的節點進行求值。模擬的主迴圈是乙個mel 指令碼,偽**如下

int $t = 0;

for ($t = $begtime; $t < $begtime + $length; $t++)

節點的屬性如下:

rigged mesh為受到引數控制的網格

mesh transform為網格變換矩陣

rig parameter為控制網格變形的引數,是乙個陣列

節點的屬性編輯器面板如下:

用法是先設定好物理引數,點initialize,然後設定模擬的長度,點simulate開始模擬,模擬過程中可以按esc退出。

前兩個引數控制四面體網格化的精細程度。

young modulus 為楊氏模量,與模型硬度有關。

nu是不用軸向變形的影響程度。

density是密度。

step time為每步的時間間隔,初始設定為1/24秒。

節點進行模擬時,需要獲得給定引數下的網格形狀。具體的做法是先設定rig parameter,然後讀取rigged mesh,此時maya便會對節點求值,返回乙個被引數控制的網格。

模擬後的結果存在節點內部,一旦節點的draw函式被呼叫,節點會首先根據當前幀查詢對應的模擬結果,再顯示出來。

下圖顯示乙個體網格化之後的圓柱體。

我給這個圓柱體加了乙個平移動畫,以及乙個彎曲變形器。希望做出圓柱體移動的時候彎曲的效果。

節點求值網路如下:

這個是原來節點的動畫

這個是模擬之後的動畫。

最後說一點,就是模擬過程中按esc退出功能的實現。這個功能雖然不是核心功能,但是卻對程式除錯帶來方便。下面貼出**:

global proc execsimulator(string $nodename)

// 模擬結束,不再顯示進度條,同時滑鼠指標回覆正常

progressbar -edit -endprogress $gmainprogressbar;

}

估計有人會說「你這個只用maya也能做到啊」,沒錯,而且這個外掛程式現在還不完善。

其實,下一步還有功能要實現,例如給某些自由引數一些指導,而不是讓它們完全自由。我把**移植到maya的目的是在實現這些下一步的功能時,有個方便除錯的平台(其中乙個好處就是,不用自己實現maya的各種變形器)。

當前的問題,以及下一步的改進有如下幾點:

1. 發現多個控制引數的時候模擬結果存在問題。不知道是不是雅可比矩陣的導數算錯了的緣故。下一步需要檢查。

2. 不能處理有洞的網格,估計自相交的也不行。

3. 暫時只支援corotational模型,不支援其他本構模型,例如neohookean。

4. 沒有使用bfgs演算法。

5. rig space physics文中提及的硬度控制、反向運動學沒有實現。

6. 把模擬出來的引數轉成動畫曲線,這一步估計用mel可以完成。

接下來幾天可能要轉向python、lua學習了。等這兩個任務搞定了,再接著完成這些改進,到時候可以考慮嘗試在maya用python程式設計。

二,使用框架完成http python伺服器

參看 皆來著原作者,保留 內署名。了解了http協議和html文件,我們其實就明白了乙個web應用的本質就是 瀏覽器傳送乙個http請求 伺服器收到請求,生成乙個html文件 伺服器把html文件作為http響應的body傳送給瀏覽器 瀏覽器收到http響應,從http body取出html文件並顯...

通訊錄主題框架 完成增刪查改

define crt secure no warnings include include include 實現乙個通訊錄程式,完成聯絡人資訊的儲存.1.新增 2.刪除 3.修改記錄 4.查詢記錄 5.列印全部記錄 6.排序記錄 7.清空全部記錄 管理 1.把基本資訊抽象並描述出來 結構體 2.需要...

imageloader框架 完美版

可在實現中對 bitmap 做一些額外處理,比如加圓角 動畫效果。displayer new bitmapdisplayer bitmap的質量,預設為argb 8888 bitmapconfig bitmap.config.argb 8888 build 構建 imageloaderconfigu...