標籤:
在cocos2dx中常用的骨骼動畫編輯器就是cocosStudio和spine了。
一、spine術語和概念
1. Skinmesh 蒙皮 在最終的渲染結果中,蒙皮將完全顯示出來,蒙皮實際上就是頂點、法線和紋理座標等將被渲染的元素。 而其中,最關鍵的當然是頂點,頂點將直接被骨頭牽扯運動,因而使得整個模型呈現骨骼所決定的樣子。
2. Skeleton 骨骼 骨骼是一種抽象的概念,在最終的渲染結果中,它不可見。類如人體骨骼,骨骼是若干骨頭(Bone)成樹狀的集合體,而每塊骨頭又分別與若干數量的蒙皮頂點關聯。 當骨頭運動的時候,與之關聯的所有蒙皮頂點也會受骨骼的影響而運動。
骨頭與蒙皮頂點的關聯需要考慮到每塊骨頭對蒙皮頂點的影響。儘管大部分情況下,一個頂點將僅僅被一個骨頭的影響,但是關節處的頂點往往被多根骨頭影響,例如踝關節,可能會分別受小腿骨50%和腳骨50%的影響,這種影響叫作權重(Weight)。在這種情況下,我們稱踝關節的這些頂點,受小腿骨影響的權重是50%,受腳骨影響的權重也是50%。
3. Bone 骨頭 spine 是骨骼編輯器,所以骨頭是基礎。每個骨頭都會有 位移T/縮放S/旋轉R 的屬性(TSR屬性)。骨頭可以有子節點,最終形成了一個樹型結構。可以對應2dx 裡面的 node。
4. Slot 插槽 骨頭上的一個掛載點。不是所有的骨頭上都能放置東西的,因為很多骨頭其實只參與計算,真正重要的骨頭,也就是需要掛載其他東西的骨頭上必須放置插槽。slot 只是用來標記特殊的骨頭位置,本身只有一個顏色屬性,也可以說,重要的骨前端節點可以稱為 slot。
5. Attachment 附件 掛在插槽上的內容,可以是圖片,也可以是判定地區,只要是你能想到的東西,都可以當成附件。
6. Draw order 描畫順序 骨架上插槽的一個順序列表。用來控制描畫的先後順序。
7. Animation 動畫 基於時間軸的一個骨頭狀態列表。
8. Skin 皮膚 一套Attachment(附件)的集合,類似於換裝。
9. Bounding Box 邊界框 用來指定骨頭上的邊界的多邊形的地區。
10. atlas 圖集 貼圖集合,小圖片合并在一起,就成了圖集。
二、實現
上面大致介紹了一些基本概念,然後我們從實現角度上來說下為啥這麼設計。
(1)首先,假設我們需要一個骨骼系統。於是,我們就設計了一個樹狀的骨架,每個節點就是(Bone)。
(2)再想下,骨頭上要放圖片啥的,於是我們就需要訪問到特定的骨頭,遍曆太傻了,好吧,我們給這些骨頭加個名字,這樣就能訪問到具體的骨頭了,那這些名字就叫slot。
(3)好吧,可能有些人覺得,slot 和 bone 本質上一樣,為啥需要分開呢,沒必要的。我只能說事情其實並不簡單。來想下,我們已經有了一個完美的骨架,圖片也在應該在的骨頭上了。那我們該如何顯示圖片嗎?遍曆麼,從根結點開始,一直到最下層的節點,不管你用啥排序,這個順序是固定的,但是現實總是很殘酷,很多時候,我們需要不停調整圖片描畫的順序,也就是調整樹的節點排序。那怎麼辦,我們指定下骨頭描畫的順序吧(Draw order),這些特定的骨頭也就是 slot。
(4)你看,這下完美了,也就是 bone 用來計算位置,slot 用來控制描畫。
(5)完美的骨骼系統,一定要有碰撞地區(bounding box),這和圖片差不多,一個用於顯示,一個用於邊界判斷,好吧,那就抽象成一個概念叫(attachment),於是,slot 上就可以附加不同的 attachment 了。
(6)終於可以換附件了,但是一個一個換好累。於是,我們把一組附件合在一起,組成了 skin。這下簡單了,一換 skin,整個世界就變樣了。
(7)啊,做著做著,就發現圖片太多了,要最佳化啊。怎麼辦,簡單,把小圖片合在一起,每個圖片對應了一個大圖裡面的一個地區,這就是 atlas。
【參考】http://kingzeus.blog.51cto.com/8504664/1540262
spine之一——術語和概念