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灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP