深入研究d3dx(14)——帶有骨骼動畫的四種蒙皮技術
darren
//基於shader的蒙皮和基於軟體的蒙皮技術
預備知識
(1)模型的骨骼:骨骼動畫中的就是一些矩陣資料,這些矩陣儲存的是各個相關頂點的資訊,不同的頂點對應不同的矩陣就得到了骨骼,比如乙個立方體的頂部4個頂點的變化我們將其繫結骨骼是一組矩陣a,底部的四個頂點同理可以得到矩陣b,這兩個矩陣儲存的資料完全不同,於是產生了不同的骨骼定義。
(2)蒙皮的實質:蒙皮的實質就是按照骨骼矩陣資料資訊將模型的每個頂點建立一塊塊面,從而實現網格的效果mesh。
(3)操作流程的位置:本次操作流程位置在貼圖之前。試想如果沒有網格,那麼貼圖將無從按照指定的模型貼上。注:一般的遊戲引擎裡面都會有一些對於模型進行預處理的工序,比如,假如沒有骨骼的矩陣資料,那麼引擎會直接對所有的頂點按照相鄰3個頂點為乙個平面為原則,把這個模型蒙皮。
四種種蒙皮的原理
一 固定函式非索引蒙皮渲染rendering with fixed-function non-indexed skinning
1 原理
這個是直接取得骨骼動畫的所有矩陣,在這個流程當中,每個骨骼在下一幀變化之前的狀態都會得到渲染
具體就是呼叫id3dxskininfo::converttoblendedmesh
在每一次渲染過程中就是在不斷呼叫idirect3ddevice9::drawindexedprimitive
.這個函式實時將預設的材質按照定點和骨骼資訊蒙皮得到乙個三維模型。
骨骼的繫結資訊在d3dx9裡面有這樣乙個結構體描述
typedef struct d3dxbonecombination d3dxbonecombination, *lpd3dxbonecombination;
然後呼叫idirect3ddevice9::settransform
進行骨骼的變化,其實這個函式包含兩個引數,第乙個是state是表示骨骼矩陣資料的可修改狀態,另乙個是matrix就是骨骼矩陣本身,就是修改後的骨骼矩陣資料。
2這種方法的優缺點:優點是比較精確,並且實時反映變換,缺點是無法進行著色,不能利用pattle.,占用記憶體比較厲害。
3 它的使用範圍:在貼圖之前要求保持原始貼圖狀態而不變化貼圖的材質。
二 固定函式索引蒙皮渲染rendering with fixed-function indexed skinning
1 原理:這種方式和上一種方式比較相似,最大的差別就是引入了調色盤palette。而且引入的調色版是靜態的,就是事先現將一組palette矩陣分配到記憶體當中。然後呼叫
id3dxskininfo::converttoindexedblendedmesh
函式進行蒙皮,此函式呼叫過後不止會將蒙皮進行,而且可以對於蒙皮過程的每乙個小平面保留乙個索引,這個索引和調色盤的索引一一對應。同上面的原理,他也是在第二次更新矩陣資訊之前進行更新。
2 優缺點:優點是可以動態調節可變化的模型材質顏色,缺點,由於得給調色盤單獨開乙個buffer造成的記憶體浪費比較嚴重,在記憶體緊張時候無法支援大的調色盤。
3 適用範圍:給定的調色盤並且讓其進行著色,或者實時轉換模型的材質顏色等。
三 基於shader的蒙皮渲染rendering with shader-based skinning
1 原理:渲染管線是在模型的三維空間外部的一種對映表現。可以這樣理解,三維模型將映像投射到渲染管線當中(其實程式中實現是先把三維空間的模型的頂點資料資訊裝進管線的記憶體當中,可見的圖案就是渲染管線經過計算之後的效果)。此一級操作是建立在空間蒙皮之前的。就是將模型的骨骼矩陣完全儲存在渲染管線shader當中。表現為矩陣matrix的四個引數中有前三個引數全部變成了shader物件的成員,然後就執行上面第二種渲染方法,同樣是呼叫
id3dxskininfo::converttoindexedblendedmesh函式,只不過這一次,每乙個小麵的索引對應的不是儲存在記憶體中的調色盤資料的索引,而是經過shader處理後的調色盤索引,這個調色盤的儲存位址是在shader中的,所以相對比較節省記憶體。
由於骨骼的矩陣matrix的前三個引數都是shader物件的成員,那麼最後乙個引數一般就是
(0,0,0,1);用不著特意去設定。
值得強調的是在程式執行的最前端,啟動shader程式處理的函式可以是
呼叫的是idirect3ddevice9::setvertexshaderconstantf
或者id3dxbaseeffect::setmatrixarray
。這兩種都可以實現不同模式的shader管線渲染。
2 優缺點:優點是記憶體占用小,靈活性超強,缺點是對於機器以及作業系統的配置要求非常高,否則無法滿足遊戲的需求,但是在目前的pc機顯示卡幾乎都支援了shader2.0的基礎上,幾乎沒什麼影響。
3 適用範圍:幾乎適用於各種情況的開發,尤其是強調畫面的特效和靈活的動效的程式上。
四 軟體預設蒙皮渲染rendering with software skinning
1 原理:關於這個其實沒有什麼可以特殊說明的,因為這就是我在第一種方案中提到的一般有引擎處理沒有繫結骨骼的動畫的方式,就是按照其模型的所有頂點進行直接蒙皮,與第一種方案的區別是呼叫id3dxskininfo::updateskinnedmesh
函式,進行渲染的同時自動讀取pc的現有調色盤進行著色,這樣就可以根據材質資訊直接按照pc自帶的調色盤進行著色。
2 優缺點:優點是適應性強,記憶體消耗少。缺點是:專業性差,不能夠實時反映程式編碼者的要求。
3 適用範圍:跨平台的遊戲,可移植性,可通用性比較強的渲染程式。
關於四種骨骼渲染方法就介紹到這裡,具體參見drectx sdk2007的以下demo可以看出各種方法的不同渲染效果。
pic,mutianimation, postprocess.exe, meshfromobj.exe depthoffield.exe
jsp的四種會話跟蹤技術
客戶端開啟與伺服器的連線,發出請求直到伺服器響應客戶端請求的全過程稱之為會話 瀏覽器與伺服器之間的通訊是通過http協議進行通訊的,而http協議是 無狀態 的協議,它不能儲存客戶的資訊,即一次響應完成之後連線就斷開了,下一次的請求需要重新連線,當使用者在同一 的多個頁面之間轉換時,根本無法確定是否...
四種會話跟蹤技術的對比
會話跟蹤是一種靈活的機制,雖然http是一種無狀態協議,但會話跟蹤技術使web上的狀態程式設計成為可能,目前普遍存在四種會話跟蹤技術 url重寫 隱藏表單域 cookie session。可以在 url 後面附加引數,和伺服器的請求一起傳送,這些引數為鍵 值對 cookie 是瀏覽器儲存的乙個小檔案...
Linux核心熱補丁的四種技術
有多種技術在競爭成為實現linux核心熱補丁的最優方案。沒人喜歡重啟機器,尤其是涉及到乙個核心問題的最新補丁程式。為達到不重啟的目的,目前有3個專案在朝這方面努力,將為大家提供核心公升級時打熱補丁的機制,這樣就可以做到完全不重啟機器。首先要介紹的專案是ksplice,它是熱補丁技術的創始者,並於20...