模型動畫系統設計的一些心得:
模型系統是乙個渲染引擎裡的重要組成部分。它的質量直接關係到引擎的渲染效率,和開發效率。
我覺得評價乙個模型系統主要包含兩個方面:
一: 演算法。
演算法這東西其實是挺透明的。網上到處可以找到這些東西的資料。其中比較有用的技術有:骨骼動畫,表情動畫,材質動畫,布料(柔體)系統等。這些東西沒什麼好講的。講也講不過各位大大。
二:系統設計。
系統設計一般是做工程人的才會考慮。網上這方面的資料相對就少的多。這段時間我一直在做角色系統,花的時間最多也就是這塊。我總結出一些初步想法。列在下面。請大家提意見。
我的設計目標是乙個靈活,兩個簡單。
1: 美術策劃使用我這個模型系統簡單(匯出模型簡單,策劃程式在組織整個遊戲的資料的時候簡單)。
2: 程式設計師在使用這個模型系統的時候簡單。
3: 自己在以後擴充套件系統的時候靈活。比如能夠方便的整合一些新的演算法如ik動畫之類的。
根據以上三個部分,我將我的模型系統分成以下幾個部分。
一:資料組織模組:
二:資料呈現模組:
三:資料控制模組:
四:資料加工模組:(尤其感謝宋l疆的modifier的嘗試,給了我做這個模組的信心)
1):資料組織模組.
目前我僅僅完成了資料組織模組。我認為所有的模型系統的資源(mesh,skeleton , action data等)都應該有資源管理器來統一排程。比如乙個模型裡有多個mesh,多個action。那麼這些mesh,action都應該有對應的管理器來管理。
同時,我認為,所有的資源能靈活的組合起來。比如你可以往乙個model裡加入不同的mesh。加入不同的action。並能把這些mesh繫結到特定的骨架上面。
所以我加入了以下的resource manager:
coremesh manager: 所有的mesh都從這裡載入 (coremesh和mesh的分別為乙個是資料,
乙個是可以直接面向使用者的物件)
action manager : 所有的動作都從這裡載入。
coremodel mananager : coremodel裡儲存了骨架等資訊
model manager : 管理對應的model,model由mesh,coremodel,action等組成。
以上四個管理器能做到從打包/非打包的檔案系統裡載入任何需要的資料。
介面上,用法為:
xmodelmanager modelmgr;
hxmodel hmodel = modelmgr.loadmodel("actor",false);
hmodel->addmesh(modelmgr.loadmesh("dress/red_cloth" , "actor");
或者如下(載入乙個完整的模型)
xmodelmanager modelmgr;
hxmodel hmodel = modelmgr.loadmodel("npcwolf",true);
2) 資料加工模組.
也就是老宋現在的vmodifier系統。
coremesh/coremodel裡儲存了模型的資料。vmodifier對這些資料進行修改(cpu或者gpu的)。
然後產生乙個新的容納資料的物件xmeshobject.
3) 資料呈現模組.(似乎這塊不完全屬於模型系統)
該模組負責和渲染器的材質系統進行介面,從modifier的堆疊裡把加工過的最終xmeshobject取出來,然後根據附加載模型上的材質,來生成乙個或者多個xdrawelement丟到渲染器裡進行渲染。
4) 模型的控制模組.
到以上模組為止,模型還沒有動作的概念。資料控制模組負責對骨架之類的進行控制。主要分以下幾類。
(a)骨架控制:能用動作資料來混合骨架,配合skinmodifier來完成骨骼動畫。
並能完成走幀,動作過渡,動作融合等。
(b)頂點動畫的控制,如果mesh是乙個頂點動畫,那麼這個控制器可以控制頂點動畫的走幀等功能。
(c)表情動畫控制。
(d)柔體的計算控制,似乎也可以用乙個對應的柔體計算的修改器。
C 類設計的一些心得
前段時間一直在重構遊戲裡面的幫戰系統,在重構的過程中幾次都放到了外網去測試,結果出了很多問題,死鎖一次,漏鎖一次 導致coredump 也正是在這次重構的過程中發現了如何設計健壯的類。1 整個的幫戰系統主要是有兩個類,乙個玩家類leaguebattler,乙個戰場類leaguebattlefield...
C 類設計的一些心得
前段時間一直在重構遊戲裡面的幫戰系統,在重構的過程中幾次都放到了外網去測試,結果出了很多問題,死鎖一次,漏鎖一次 導致coredump 也正是在這次重構的過程中發現了如何設計健壯的類。1 整個的幫戰系統主要是有兩個類,乙個玩家類leaguebattler,乙個戰場類leaguebattlefield...
系統設計的一些原則
系統設計的好壞在根本上決定了軟體系統的優劣。可以說 差的系統設計必定產生差的軟體系統 但是不能保證 好的系統設計必定產生好的軟體系統 因為在設計之前有需求開發工作,在設計之後還有編碼,測試和維護工作,無論哪個環節出了差錯,都會把好事搞砸了。據說上帝把所有的女士都設計成天使,可是天使們在下凡的時候,有...