本文主要參考 OpenNI Arena(介紹)的《NI Apps Guidelines》(PDF 檔)。這份文件,算是 OpenNI 提出來,給 OpenNI 開發者的一些建議、導引,算是要寫一個能放到 OpenNI Arena 的程式的注意事項。它裡面共分六個章節,依序是:
- Introduction(簡介)
- The NI App Format(NI App 的格式)
- User Experience Recommendations(使用者體驗的建議)
- Checklist before NI App Submission(提交 NI App 前的注意事項)
- Publish a NI App(發布 NI App)
- NI App Review Process(NI App 審閱流程)
雖然其中大部分的內容都是針對 OpenNI Arena 的,但是第三章的《User Experience Recommendations》則算是對於一般性的 NI 程式開發都有相當地幫助~下面就是《NI Apps Guidelines》這份文件所提供的建議,Heresy 自己根據意思、很不精準地翻譯了一下,並且加入了一些自己的想法:
使用動作或姿勢來結束程式
建議定義一個結束應用程式用的姿勢、用來離開應用程式,而不要使用 Esc 鍵,或是其他鍵盤、滑鼠等輸入。因為實際上如果還要用鍵盤或滑鼠等其他裝置來做停止的動作的話,一個是不方便,另外更重要在某些狀況下,可能會在這過程中造成其他事件/動作的誤觸發。
而 OpenNI 建議的結束姿勢,則是「手交叉」這個動作(右圖)。他們發現這個動作不容易不小心就被觸發到。不過比較討厭的是,NITE 所提供的姿勢辨識,還是只有「Psi」一個…
可視區域指示
在程式執行時,最好可以告訴使用者,站到最佳位置上、並且當在使用者快要到活動區域的邊緣時、做出適當的警告,避免使用者沒有發現自己已經沒辦法被偵測到了。
而一個讓使用者知道自己已經在可視區域外的方法,就是把可是區域顯示出來。
(註:這邊的「可視區域」的原文是「Field of View」、也就是 FOV。)
操作指示
由於沒有實體的操作裝置,而使用者有無限多種可能用來操作程式的動作、姿勢,所以最好在程式中告訴使用者該如何操作;同時使用者也會期望在正確操作時、能夠得到一些回饋。
另外,如果牽涉到多個使用者時,想辦法提供目前是哪個使用者在操作,也是非常有用的。
使用現實事件的概念
在真實世界的既有知識上建立互動,會比較合適。例如往前推來按下按鈕、揮手來引起注意,這類大部分已經習慣的概念,會讓使用者覺得比較直覺,同時更容易學會如何操作這個程式。
充分的回饋
因為體感操作缺少了實際上接觸的回饋,所以連續性的回饋是相當重要的;使用大量的視覺、聲音上的回饋,都可以強化所需操作。
明確地定義影響
各種行為可能產生的影響,都需要明確地定義;同時,可能的選擇也要盡量減少,避免使用者混淆。
讓使用者可以恢復非預期的動作
由於動作追蹤、分析都有一定程度的不準確性,所以或多或少都有可能產生使用者預期以外的動作或影響;也因此,讓使用者可以順利地取消這些預期以外的動作或影像,是相當重要的一件事!
防止物理上的不適
要確定就算經過長施間的使用,這個程式也不會造成使用者的不舒適。同時,也應該適時地鼓勵使用者休息,而且程式不會因為這個休息產生問題(如果是遊戲的話,也不應該因為休息而扣分)。
考慮可能的動作序列
妥善地計畫可能產生的動作序列,確定某個動作不應該造成下一個動作的不確定性;同時也要考慮由於前一個可能動作的不同,這個動作可能會由不同的狀態開始。
強化使用者
只允許做他們在現實世界希望做的事,同時給使用者好的(讓使用者高興的)回應、並且讓他們比在現實世界中、有更多的選擇、和更多的能力。
確定互動的動作是安全的
很多動作遊戲需要迅速的手腳移動,而這些很有可能會打到其他東西、或是其他人。所以如果一個程式有可能會因此傷害到自己或其他人時,應該要在程式開始前、做出適當的警告,提醒使用者清空活動區域、並注意有沒有人忽然進入這個區域,以避免受傷。
另外,之前的《Kinect for Windows 開發社群大會課程內容》一文裡,也有一些圖形介面的設計建議:
-
按鈕設計
- 由於使用手掌做「按一下」的動作並不容易正確辨識
- 因此一般都是設計成將手掌放在按鈕上不動,經過數秒後表示按到該按鈕
- 可以使用動畫讓使用者了解到,手掌已經正確的放在按鈕上
-
介面設計準則
- 手掌在按鈕上停留的時間要大於兩秒以上才算按到按鈕
- 按鈕在畫面上最好是手掌兩倍以上的大小
- 按鈕的間隔至少要大於一個按鈕的大小
- 由於使用者有可能誤按了按鈕,因此要設計回上一頁的按鈕功能
- 按鈕最好放在畫面的兩側,不要放在畫面正中間,以免骨架無法判斷手部的位置
這篇大概就寫到這了。基本上,這邊都不是程式設計的東西,主要都是設計概念上的東西,但是在體感操作這個新領域上,這些注意事項的確是要特別注意一下的~
[…] 另外,微軟這次還有提供一份《Kinect for Windows Human Interface Guidelines》的文件(PDF 檔),和之前的《體感軟體開發的注意事項》類似,都是提供一些建議、給要設計體感程式的開發者看的~建議正在寫、或是準備寫提感程式的人,都應該看看裡面的建議。 […]
讚讚
您好:
目前利用 OpenNI + Unity 開發一個專案
想要玩家可以手持道具做動作,類似最近 kinect 的星際大戰,玩家可以手持光劍
但是發現 OpenNI 會把手持物視為骨架的延伸,造成骨架的誤判
microsoft kinect sdk 則不會,大概就是老師那天上課提到 microsoft kinect sdk 多了那4個節點…
想請問在 OpenNI 上可有什麼解決之道??
讚讚
這部分與其說是差在那幾個關節點,倒不如說是因為演算法核心的部分處理方法完全不同了…
而由於 NITE 不是開放原始碼的專案,所以也沒辦法自己去修改他的演算法,所以除了向 PrimeSense 反映、等他們修改演算法外,在這方面可以算是無解了。
不過,如果只是希望可以在 OpenNI 環境下使用 Microsoft 的分析結果的話,或許可以試試看 kinect-mssdk-openni-bridge
https://kheresy.wordpress.com/2011/07/01/using_kinect_via_microsoft_sdk/
讚讚