2017年2月2日 星期四

Adobe AIR + Kinect (2) - Skeleton with 2D Character


Skeleton

Kinect有使用者骨架的偵聽事件,當User進入到攝影鏡頭範圍時約略等待一會就能觸發。




搜尋一下也能看到前輩們關於骨架的描述教學,操作細節便不贅述了。

[教學] AIRKinect 的魔法帽子
AIRKinect [4] Skeleton 使用者骨架擷取





節錄重點:

1. Kinect最多可同時擷取6人,其中2人全身共20個骨架節點(SkeletonJoint),另外4人只有核心節點。(後者看來實用性較不高)
雖然有擷取上半身的設定,不過測試時可能距離鏡頭太近,還是得站起來才能被辨識。
(抑或是這本來就是得讓User Skeleton先完整被偵測到才行!?)



2. 測試時解析度採用RGB預設640*480,下半身節點可能因為距離&電腦桌的關係導致對位不準確。似乎不太要緊,因為以用途看來沒有上半身節點來得多。(所以管他的呢!)





3. 骨架資訊應用的範圍很多,可說AIRKinect ANE有最大應用範圍的就是Skeleton,
除了上圖可以看到根據骨架位置貼上偷蛋豬之外XD,做個簡單的AR也就不是太難的事情。

更有甚者,根據骨架節點與節點之間的相對位置去判斷是否為靜態姿勢,
or擷取連續時間內根據節點路徑(或說軌跡)來判斷是否為手勢(Gesture)或其他姿勢。
以此就能有更多豐富的互動操作方式,

但這又是另外一回事囉......ANE內沒有這樣的feature。
在Github上遍尋關於AIRKinect Gesture的相當稀少且有限制(當然嘛....)。
想必native C++, C# 的高手們也早就開發出對應於Kinect的眾多gesture or posture library。要有Gesture必須要靠自己完成,只能留待後話了.....(意思就是現在沒空&難度也不低)





言歸正傳

既然談到Skeleton,也許會想到是否User做甚麼動作,讓腳色也跟著一起動作呢?
答案是可以,但並不如想像中美好。


先解釋一開始測試的思路,單純的以為只要把腳色的肢體對應到人體上,
那麼User做甚麼動作,腳色貼圖也就跟著動作,這麼簡單就大功告成了!?

真是大錯特錯 (大錯特錯~不要來~)



◎肢體位置的對應
首先,以成人的比例而言,骨架的相對位置大多都是固定。
但腳色的四肢位置與比例,卻會因為設計或腳色本質的關係,而不可能每次都能與User對應。
以下圖的喵喵為例,若是以腳色head → User head還沒問題,
但腳色hand → User hand,那腳色不就變成手跟身體分家啦,
所以這個方式根本不可行。



◎肢體的角度極限
上圖中,可以看到User左手略為舉高,喵喵的左手也跟著平舉。
但右手已經舉到與頭同高,但腳色的手也無法跟著舉到對應的角度&高度!?

其實仔細觀察&思考,可以發現:
1. 標記圓圈的地方已經露餡啦! (設計時沒有考慮到手臂旋轉的細節)

2. 人體關節可以自然呈現移動的角度非常大(廢話),但2D腳色可不是這樣,
    尤其是像這樣的2頭身腳色。(3D不熟無法評論,不過若是3D真人比例的模組來說,
    曾看過範例是可以做到的,只是不知如何實作)。

    如果沒有繪製對應的角度素材,硬是要讓腳色手臂旋轉角度跟User一樣,
    就會變成非常詭異的畫面.....(整隻手幾乎快跟身體分離,只剩一個點)



因此這個互動方式的要點在於
◎必須先設定 & 限制腳色的活動姿勢
◎承上,美術與程式討論後設計對應的素材
◎如果腳色的再用性不高,是否有必要為其特地coding & design?



在這個範例中實現了搖頭、擺手。
手部移動的原理是基於shoulder水平線 & hand的位置去計算夾角,

再轉換成元件可旋轉的角度。

喵喵搖頭的原理與上述類似,以 torso 為基準點,計算head的傾斜角度。
(不使用neck是因為也會移動,這樣就不準確了,只有軀幹是不可能亂旋轉的嘛)


像真人一樣帶動唱跳歌跳舞,看來不太可行。
儘管如此,還是能夠實現讓2D腳色可以隨著User作一些簡單運動。
若對象是小鬼們操控著自己喜愛的動漫腳色,
也能高興好一會兒吧!!

影片請點我




沒有留言:

張貼留言