GameDesign 板


LINE

(接在cjcat、chenglap、NDark 幾位強者後面貼文,壓力好大 >"<) 小弟不才,上週在小遊戲板發了一篇自製的HTML5益智小遊戲: 「NP Lab之著色問題」 #1HWDDAEN (Little-Games) 在程式撰寫的時候恰巧有碰到IK控制這一塊, 寫了一篇文章做記錄,跟大家分享,請大家隨意看看~ 網誌好讀版:http://alimencave.blogspot.tw/2013/05/blog-post.html (因為有圖片解說及方程式的關係,推薦切到網頁去看) 二維二骨骼反向動力學解算   在NP Lab: Coloring Problem遊戲裡,有兩隻會追蹤玩家滑鼠游標的機械臂。無獨 有偶,這兩隻機械臂正好一個是由FK (Forward Kinematics, 正向動力學)控制,而另一 個是IK (Inversed Kinematics, 反向動力學)控制。   正向動力學相對來說簡單很多:由父層級的關節帶動子關節;拿人體來比喻的話就是 我先決定上臂的位置(肩關節的角度),再決定下臂的位置(肘關節的角度)。在遊戲裡,所 有的滑鼠位置都可以計算出一個特定的角度值,將上臂移到此位置後,再將下臂直直指向 滑鼠,就完成了追蹤。   反向動力學則剛好相反:由子層級的關節帶動父關節;對於人體來說比較像是伸手去 拿茶杯,先知道手要往哪擺,再去想下臂、上臂在哪。而這時候,問題就來了:我們要如 何一次求出兩個關節的角度呢?   接下來這篇文章會帶入Two-Bone IK解算的數學定義、簡述一般通用的算法,並介紹 我在NP Lab: Coloring Problem中所用的簡化算法。 一、問題定義   給定一個骨骼Bone1與Bone2構成的骨骼鏈,其中Bone1位於原點O,Bone2為Bone1的子 骨骼,且每個骨骼均具有角度θ與固定的長度參數d (如下圖一)。請問:給定一點 T(x,y),θ1與θ2各要是多少,才能使Bone2的尾端恰好位於T點?                http://ppt.cc/vOJZ                 ▲ 圖一 二、可解範圍   不論是 d1 < d2 (如下圖二)或是 d1 > d2 (圖三)的情況,假如我們使θ1固定為0 (Bone1與x軸重疊),則此骨骼系統所能夠碰觸到的點只有圖中綠圈線上的所有點而已。此 時旋轉Bone1,我們可以很清楚的看到,此二骨骼系統所能搆到的最遠距離就是d1 + d2, 而在離原點距離小於 | d1 - d2 | 的點會處於死角之中搆不到。 http://ppt.cc/E9EK ▲ 圖二、圖三   換言之,T與原點的距離關係必須符合下列式子,否則此骨骼系統無法達到「使Bone2 的尾端恰好位於T點」的目標: _ | d1 - d2 | ≦ OT ≦ (d1 + d2) 三、解算 一般用到IK控制的場合中,考慮到關節角度限制、以及為了方便推廣到多骨骼的場合 ,一般會如圖四分解問題: http://ppt.cc/UX_B ▲圖四   在這個架構下,求解θ1、θ2,其實就是在解下列的聯立方程: x = d1 cos θ1 + d2 cos(θ1 + θ2) y = d1 sin θ1 + d2 sin(θ1 + θ2)   此式雖可化簡,但過程繁瑣,在此不詳列。   在NP Lab: Coloring Problem中,由於關節沒有角度限制,且所有滑鼠座標均事先映 射到可解範圍之中,所以我就用了一個相對簡單的算法來作IK解算。 四、利用餘弦定理 _   我們把圖一重新畫上輔助線如下圖五,其中d3 = | OT | ,θ1 = (OT與x軸夾角 - a2),θ2 = (180 - a3)。 http://ppt.cc/LmOM ▲ 圖五 在d1、d2、d3均為已知的情況,整個問題就變成了「已知三邊長,求角度」的形式。 只要利用餘弦定理即可解出: a1 = acos( (d2^2 + d3^2 - d1^2) / 2*d2*d3 ) a2 = acos( (d1^2 + d3^2 - d2^2) / 2*d1*d3 ) a3 = acos( (d1^2 + d2^2 - d3^2) / 2*d1*d2 )   要注意的是,這裡求出來的數值是角度而不是角向量,所以角度的加減要考慮進去。 例如底下圖六就是一個不同的狀況:θ1 = (OT與x軸夾角 + a2) http://ppt.cc/RauW ▲ 圖六 五、小結   IK控制在2D遊戲中其實並不多見,主要用在「需要適應環境」的情境中,例如沙羅曼 蛇的觸手魔王就是一個很好的例子。3D環境中IK控制就用得多了,要讓雙腳踏在斜坡上不 會一腳踏空一腳插進地表時可以用來修正膝蓋、股關節的角度,跳躍、攀爬的誤差也可以 依同法修正,用途廣泛。不過......這就留給之後再來研究吧! XD   感謝收看! -- 「你知道嗎?」納許的囚徒這樣對著他的獄友說:「據說柏拉圖的囚徒,都在看電影」 「是阿是阿,」對方不耐煩地回答:「所以你下次到底要選合作還是背叛?」 ──《林人狂的小書櫃》 http://alimencave.blogspot.tw --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.211.70 ※ 編輯: Alimen 來自: 219.85.211.70 (05/07 12:07)
1F:推 cjcat2266:推! 正好不久之後打算研究IK :) 05/07 12:10
cjcat你那邊應該是直接進3D領域了吧~ 期待你之後的分享喔~ ^_^b
2F:推 NDark:骨架動畫真的是很煩......寫過一次就不想再碰了. 05/07 12:10
習慣就好......(問題發言)
3F:推 cowbaying:如果你覺得壓力很大 我可以以版主名義發個廢文 05/07 14:08
4F:推 cowbaying:這樣你就不會覺得壓力大了 XD 05/07 14:08
5F:→ cowbaying:網誌的上一篇也很不錯 一次附上兩篇文如何? 05/07 14:12
感謝板主厚愛XD 另外一篇我稍微整理成適合GameDesign的文章晚點再貼過來
6F:推 KanoLoa:推受益 05/07 14:30
7F:推 MINAMIYA:最近好文真多~ 05/07 14:55
8F:推 johnny94:Game design板就是需要這類文章多一點! 05/07 16:27
感謝推~ ※ 編輯: Alimen 來自: 219.85.209.161 (05/07 19:55)
9F:→ ycjcsie:我有研究過3D的IK 必須跑很多次回圈去趨近 05/09 13:09







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP