タッチパネル向けソフトウェアキーボード（Senorita）をVR向けに実装してみた話


## はじめに
先日のCHI '20（Conference on Human Factors in Computing Systems 2020）[^1]にて、カルフォルニア大学のGulnar Rakhmetulla氏らが、タッチパネルを搭載した端末（スマートフォン / タブレット）向けのソフトウェアキーボードとして「Senorita[^2]」を開発および発表しました。
[^1]: [Conference on Human Factors in Computing Systems 2020 (CHI '20)](https://chi2020.acm.org)
[^2]: [Senorita: A Chorded Keyboard for Sighted, Low Vision, and Blind Mobile Users](https://dl.acm.org/doi/abs/10.1145/3313831.3376576)

このソフトウェアキーボードをVR向けに実装したら面白いと思って実装してみました。

### Senorita
![SenoritaImage.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271591/3b2412bc-b22b-515b-6882-3447bf4b222d.jpeg)
画像：
<font size="1">Senoritaキーボードの表示[^2]。（左）初期状態。（中）1つ目のキーを押した状態。（右）2つ目のキーを押して、文字が入力される。</font>

Senoritaとは、2つのキーをそれぞれ入力することにより、1文字を入力できるキーボードです。
文字キーが1行8キー（左右4+4キー）のレイアウトに収まることにより、キーボード全体の表示面積が小さく、またブラインドタッチもしやすいです。

入力方法は以下の通りです。
ここでは上記の画像に沿って「w」を入力する例を示します。
1. 8キーのうち1キーを押す（画像左）。
入力したい文字（w）が表示されたキー（左側、左から3番目）を押す。
2. 押したキーに対応して表示が変化する（画像中央）。
押したキー中に表示されていた文字（i, x, w, f, c）がそれぞれの位置に表示される。
    - キー上段（i）：押したキーの位置
    - キー下段（x, w, f, c）：押したキーの反対側4キーの左から1, 2, 3, 4番目の位置 
3. 変化した表示のうち1キーを押す（画像右）。
入力したい文字（w）が表示されたキー（右側、左から2番目）を押す。

入力補助として、Nextキー、Backspaceキー、Spaceキーが文字キーの下に配置されています。

（間違えていたらすみません。）

## 実装
### VR向けの実装点
Oculus Quest向けコントローラを使用しました。
![CtrltoIdx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271591/753e7ded-ecc5-17e5-4243-913a6b629812.png)
画像：<font size="2">コントローラの入力とキーの位置との対応。図中では右コントローラとキーボードの右側のキーとの対応を表す。</font>

片コントローラ中の4入力（ボタン1：親指, ボタン2：親指, トリガ（Index Trigger）：人指指, グリップ（Hand Trigger）：中指）を、Senoritaの片側4キーに割り当てました。
また、JoyStickによる操作（左コントローラのJoyStickを左に倒す等）を入力補助に割り当てました。

### 実装環境
Unity, Vive Input Utility, Oculus Integration, Oculus Quest

### 使用感
![SenoritaVR.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271591/1b23fce0-94ba-2704-22a7-d9b6a10b5d3d.jpeg)
 <font size="2">実装したキーボード。</font>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271591/221df378-145e-f0bb-b87a-d1ba1918bbdd.gif" width=52%>
<font size="2">実際の挙動。</font>


Senorita自体の良し悪しは、当論文に記載されているため割愛します。
VR向けならではの点、またはVR向けにしてもなお感じた点を述べます。

#### 良かった点
- ブラインド入力（eyes-free入力）が可能である（短期間の使用で可能になるとは言ってない）。
- コントローラ、体および視線の位置に依らない入力が可能である。
- ボタン系を用いた入力で文字入力が完結する。
- キーボードを見る場合においても、キーボードとテキストの距離が近い（近くできる）。
- キーボードの表示面積が小さい（小さくできる）。
- キー配列が文字出現頻度および人間工学に基づいている。
出現頻度が高いとされるキー上段の「S, E, N, O, R, I, （T,） A」を1タップ（それぞれを押して、反対側を押さない）で入力可能である点が楽。 

#### 悪かった点
- キー配列および入力方法に慣れない。
- 2回の入力にて1文字が入力されるので、入力速度が低下する。
- Qwerty配列とは異なる配列である。

### 改善点
Q1. 「この位置はどの指で入力するんだっけ」が多発しました。 元々のSenoritaでは、すべての指を親指で押すので（多分）この課題は起きません。そもそも自分のキーの覚え方が悪い気がします。
A1. キー位置と入力位置を識別しやすい色で対応づけてみる。

（以下は実装不十分点）
Q2. 入力補助キーの配置が悪い。JoyStickによる操作で「削除」「空白」「決定」等はやりにくいです（慣れかもしれませんね）。
A2. 用いたコントローラによる改善は思い浮かんでません。ただし、別のコントローラを用いるとボタン系の数が増加するので改善できると思います。例：Vive Cosmos コントローラ - バンパ（もう1つのトリガ）が増える。手形状認識（Valve Indexコントローラ / Leap Motion / Oclust Quest / etc ...） - 5本指による入力が可能である。

全体的にフィードバック / フィードフォワードが物足りません。

## おわりに
良かった点は非常に「良かった」と感じる点であり、従来のVR向けキーボードに対して自分が不満に思っていた点をことごとく改善してくれたように感じました。
このキーボードに慣れないと入力速度は非常に遅く、慣れることも苦労しそうだと感じましたが、キーボードに慣れれば（慣れるだけで）これまでの入力は快適になる気がします。
使用して悪いと感じた点として「Qwerty配列と異なる」という点を挙げましたが、自分は正直悪いとは思いません。「Qwerty配列と異なるので入力しづらいが、それは、入力に向いていないQwerty配列と、そんな配列に慣れて日常的に使用してる自分が悪い」といったところでしょうか。
Senoritaおよび実装したキーボードは文字（a--z）入力以外が不可能です。 しかし、キーボードの日常的な使用において、数字、記号または修飾キーの充実が必要ですし、この課題は自分が実装したキーボードにも言えることであるため、対応が必要ですね。

## 参考文献
- [Conference on Human Factors in Computing Systems 2020 (CHI '20)](https://chi2020.acm.org)
- Senorita: A Chorded Keyboard for Sighted, Low Vision, and Blind Mobile Users: [Paper - ACM](https://dl.acm.org/doi/abs/10.1145/3313831.3376576), [Movie - YouTube](https://www.youtube.com/watch?v=5ujSvRtbpR4&t=49s)
- [11キーを両親指で操作する新キーボード配列「Senorita」カリフォルニア大学が開発 - ITmedia](https://www.itmedia.co.jp/news/articles/2005/12/news054.html)