見出し画像

XREAL AirとWindows PCでゲームのヘッドトラッキングをする




0.はじめに

0-1.目的

XREAL Air(旧NREAL Air、以下Air)をWindows PCに繋ぎ、3DoFセンサーの値を利用してEuro Truck SimulatorやAmerican Truck Simulator、Microsoft Flight Simulatorなどのヘッドトラッキング対応ゲームでヘッドトラッキング視点操作を行います。

0-2.特徴

  • VRHMDのように常に顔の前にモニターがあるので、自然な視線の動きをすることができる。
    VR以外の多くのヘッドトラッキングは、頭を振りつつもモニターは机の上から動かないため、視線は体の正面に向け続けなければなりません。
    そういう動きは普段の生活でしないため不自然で、慣れが必要になります。

  • 可動域にほぼ制限がないため、ゲーム内の首振り角度と現実の首振り角度を近い値にできる。
    上記のように視線を体の前に固定する場合、目の可動域が実質的な可動域となります。(表示上の制限)
    また、モニターや机に固定したトラッカーが頭のマーカーを捉える方式では、マーカーを見失わない範囲に可動域が制限されます。(トラック上の制限)

    このためゲーム内で真後ろを見るなどの大きな動きをしたい場合は、小さい動きを大きい動きに増幅するようなマッピング設定が必要ですが、それに由来してカーブ調整を試行錯誤するとか、現実の動きと一致せず違和感があるとか、イマイチな点も出てきます。

    Airなら常に画面は目の前にあり、入力も本体のセンサーのみで行うため、表示/トラックともに可動域の制限がほぼありません。
    結果、現実の首振りとほぼ一致する(リニアな)マッピング設定でよいため、調整の手間や違和感が少なく済みます。

  • それでいてVRより手軽。
    まず重量が軽いです。
    元々ARデバイスなので、開放的で現実世界も見やすいです。(手元のキーボードやコントローラーなど)
    現実が見えすぎて気になる場合は付属のカバーを付けてしまえば解決です。
    普通のFHDのモニターを目の前に浮かべているような見え方で、車のメーターなどの細かい部分も比較的見やすく(VRHMDは小さい表示は比較的見づらい)、立体映像でもないので目も疲れにくいと思います(そこは個人差があるところか)。
    あとはテンプルから音も鳴らせるし、一応マイクも使えます。

  • 実はゲーム側がヘッドトラッキング対応してる必要すらない。
    今回の設定だと最終的にTrackIRのデータとして流していますが、マウス入力に変換することもできるので、マウスで視点操作できるゲームなら理論上何にでも使えます。
    ただ、当然デスクトップとかメニューとかのマウス操作にも影響するので、そこは注意/設定で対策が必要です。

  • 現状扱えるのはヨーとピッチのみ。 →【更新】ロールにも対応!
    後述しますが、Airのセンサー自体は3DoFに対応しているものの、値を取得変換するソフトがロール(首をかしげる動き)について現状値自体は取ってはいるが次のソフトに送信しないため、ヘッドトラッキングに使えるのは実質2DoFになります。
    また、XYZ(左右上下前後の移動)の動きは当然そもそもAirで取れません。

    【23.12.21 追記】
    opentrackの入力に"Fusion"を指定すれば、rotation(Yaw, Pitch, Roll)とposition(XYZ)を別々の入力から得て合成できるため、Airの他にXYZをトラッキングする方法が用意できれば6DoF(というか5DoF)対応が可能です。
    詳細は別途記事化予定。

    【24.06.26 追記】
    「Phoenix Head Tracker」がバージョン3.0.3.5にて、ロール値の送信にも対応しました!
    (従来は技術的な理由で制限していた模様)
    ツールの画面上は「ロール値は使われません」という注意書きが残っていますが、画面右のOpentrack UDPの設定欄に「Send Roll Data」のチェックボックスが表示されていれば、それをONにすることで送信可能です。
    ※以降の本記事の内容で、「ロール値が利用できない前提」で記載している部分は、古い内容なのでお手数ですが読み飛ばしてください。


  • 長時間使用は工夫が必要かも。
    軽いといっても普通のメガネよりは重く、個人の顔に合わせてオーダーメイドできるものでもないので、夢中になって長時間遊んでいると耳の上や特に鼻の付け根が痛くなってきます。
    こればっかりは仕方がないですが、私はプチプチとかマスクの鼻にフィットするワイヤーの部分とかを組み合わせてちょっと保護を追加したら改善されました。
    見た目はかなり悪くなりますが、私は外で使わないので問題ないです。

  • VRとは違う(立体映像ではない)⇒と言いつつVR化も可能ではある。
    使用感は既存ヘッドトラッキングデバイスよりVRHMDに近いですが、ゲームは普通の2D映像なので、立体的には見えません。
    でも普通に十分臨場感あるプレイができ、私は大満足しています。
    逆に言えば、非VRゲームでVRっぽく遊べるとも言えます。

    そして何なら実は、今回の手順から発展させてSteamVRでHMDとして使うこともできます。ちゃんと左右に別の映像を映して立体映像にできます。
    詳細は別記事で紹介予定です。
    【23.12.21 追記】
    別記事にまとめました。
    <XREAL AirをWindows PCでSteamVRのHMDとして使う>
    ですが、もともとVRゴーグルとして作られたものではないため、過度な期待は禁物です。

0-3.動作概要

以下のように入力値の変換を行います。
<Airの3DoFセンサー値>
⇩ PhoenixHeadTrackerで取得変換
<opentrack UDPデータ>
⇩ opentrackで変換
<FreeTrack2.0(TrackIR)データ>
⇩ 大抵勝手に読み取ってくれる
[ヘッドトラッキング対応ゲーム]



1.準備物

  • XREAL Air
    今回は初代を使いました。
    Air 2やAir 2 Proにも対応しているようです。

  • Windows PC
    USB-C(DP-alt対応)のポートを備えているのが望ましいですが、無い場合は次の項目にあるような変換器を用意してください。

    今回はWindows 10でやりました。Windows 11でできるかは未確認です。でも大抵大丈夫じゃないでしょうか。

  • HDMI/DisplayPort & USB-A(通信) ⇒ USB-C DP-alt 変換ケーブル/アダプター (PCにUSB-C DP-altが無い場合)
    単純にDisplayPort(以下DP)映像信号のみをUSB-C DP-altに変換する製品ではダメです。
    Airの音声(スピーカー・マイク)と3DoFセンサー値はDP映像信号とは別にUSBデータ通信で扱われるため、
    HDMI/DP(映像)・USB-A(データ) ⇒ USB-C(映像・データ) のような変換ができる製品である必要があります。
    また、Airに給電できる必要もあります。

    今回は次の製品を使いました。
    Loryi HDMI to Type-C 変換ケーブル
    https://amzn.asia/d/aogU5Ii
    「タッチパネル対応」とか謳われている製品が基本的に当てはまると思います。



2.接続

2-1.物理接続

Windows PCを起動し、次のように物理接続を行ってください。
PCにUSB-C DP-altのポートがある場合は、Airを直接そこに挿してください。

XREAL AirをPCに接続するイメージ
Airに挿すUSB-Cは、Air付属品を外して変換ケーブルを直接挿してOKです

挿したら、普段ディスプレイを挿した時と同じようにデスクトップ再配置などで画面がチカチカするほか、初めて挿した場合USB機器としてもセットアップが走る(多分スピーカー/マイク機能)ので終わるまで少し待ってください。

2-2.ディスプレイ設定

Windowsのディスプレイ設定を開き、Airが1920x1080のモニターとして認識されていることを確認します。
メインディスプレイ(あるいはゲーム画面を表示するディスプレイ)をAirに複製表示する設定にしてください。

Windowsのディスプレイ設定例
私は元々既に3画面だったんですが、Airは割り込んで3番モニターとして認識されました。真ん中の1番がゲームを映すメイン画面で、この場合"デスクトップを1と3に複製する"と設定します。

これで、ゲームしていない間やヘッドトラッキングしないゲームをするときの使用感を変えずにAirヘッドトラッキングが追加できます。
PC的には単純にモニターが1枚増えるため、パフォーマンスに影響する可能性があるかもしれませんが、私の環境では厳密に計測してないものの目に見える変化はありませんでした。

メインディスプレイが4KやウルトラワイドなどFHDでない場合は試していませんが、グラフィックドライバーの設定でスケーリング設定などすればできる……かもしれません。
あるいは、普段使いの不便さやパフォーマンス低下を考慮しないならば、複製ではなく拡張設定にしてその画面にゲームを表示すれば確実だと思います。

2-3.Airのファームウェア確認/更新

以下の公式ファームウェア更新Webページで、Air本体のファームウェアに更新が無いか確認してください。
https://ota.xreal.com/jp/air-update?version=1
今回は「07.1.02.313_20231027」でやりました。

詳しい更新手順はページの内容に従ってください。
「USB-Cで接続して」と書かれていますが、USBデータ通信ができればなんでもよくて、映像(DP/HDMI)が繋がっている必要すらないです。
むしろ更新中に画面がチカチカしたり、何故か途中で進捗が止まってしまったりするのでDP/HDMIは一旦抜いておいた方がいいかもしれません。
だから他にも例えばUSB-C⇔USB-Aのデータ通信だけのケーブルとかでもよいです。

Air 2は別ページかもしれないので公式サイトのサポート情報から確認してください。



3.ソフトウェア導入と設定、実行

3-1.PhoenixHeadTracker

3-1-0.ツールの概要
Airの3DoFセンサー値をopentrack UDPまたはマウス入力に変換するツールです。

3-1-1.ダウンロード
次のページから最新版をダウンロードしてください。
今回は「3.0.3.3」でやりました。
https://github.com/iVideoGameBoss/PhoenixHeadTracker/releases

3-1-2.インストール
zipの中身がもうツールになっています。(インストーラー実行不要)
好きな場所に配置してください。
「PhoenixHeadTracker.exe」を実行して使うので使いやすい場所にショートカットを作るとよいと思います。

3-1-3.起動/設定/使い方
▼起動

「PhoenixHeadTracker.exe」を実行します。次のようなウィンドウが開きます。

PhoenixHeadTrackerの画面
使い方は基本的に画面に書いてあります。

▼設定/使い方
▽Airを机の上など動かない場所に置き、左上の[Connect]をクリックします。
何やら数値がいっぱい変動して、赤いマークも激しく動き始めますが、センサーのキャリブレーション中なので落ち着いてそのまま見ていて下さい。

数十秒ほど経つと、値の変化が小さくなり、赤いマークがほとんど動かなくなります。
そうなったらAirを動かして(頭にかけて)も大丈夫です。

▽右上あたりの[Start Opentrack UDP]をクリックします。
これでもう傾きデータがopentrack UDPで送信されています。

送信先IPアドレスは基本的にデフォルト"127.0.0.1"(ローカルループバックアドレス)から変えないでください。
他のマシンに送るようなことがある場合にそのマシンのIPアドレスに変えてください。
送信先ポートも基本的にデフォルト"4242"から変える必要はありません。
他のアプリケーションなどと競合することがある場合に変えてください。

[Send Yaw Data]と[Send Pitch Data]のチェックと[Invert]のチェックで、ヨー(左右に振る動き)とピッチ(見上げる/見下げる動き)の送信有無と反転を設定できます。
ただ、ここのチェックは起動するたびにリセットされてしまうほか、設定をプロファイルとして分けることもできないので、この後出てくるopentrack側で設定するのが良いと思います。
そのほか感度調整とかも基本的にopentrack側でやればいいので、このツールであまり設定をいじる必要はないです。

▽それぞれの赤いマークの下に[Opentrack Fight Drift]という設定値がありますが、これはセンサー入力がドリフト(実際の動きに関わらず特定の方向に動き続ける)してしまっているときに反対方向への入力を追加してカウンターを当てる設定だと思います。
使いながら必要に応じて設定してください。

▽0-2で触れましたが、このツールはロール(首をかしげる動き)の値を読み取ってはいるものの送信はしません。
ツールの説明書きに明記してあるので意図的な仕様だと思われます。
理由は不明ですが、マウス操作モード(上下2次元入力しかない)との互換性とかでしょうか。
このツールの惜しい点です。

▽右下あたりの[Start Mouse Track]は、その名の通りマウスカーソルの操作を首振りで行えます。
ヘッドトラッキング非対応タイトルや普通のFPSみたいな、マウスで視点操作できるゲーム向けだと思います。
こういうのはゲーム以外にもマウス操作にハンディキャップがある人のアクセシビリティ向上とかにも需要があったりするので、そういう使い道もあるかもしれません。
使いたい場合、この後出てくるopentrackでもマウス出力はできて、かつフィルター(補正)とかの調整もできるので、そっちでやった方がいいかもしれません。

3-2.opentrack

3-2-0.ツールの概要
手作りマーカーや顔認識、TobiiアイトラッカーからWiiリモコンまで、様々な入力をFreeTrackとかMSFSの規格とかジョイスティックとか様々な出力に変換できるツールです。
今回の使い方以外にも、「○○でヘッドトラッキングできないかな?」と思ったときは大体このツールを起点にすれば解決できると思います。

ヘッドトラッキング愛好家(?)ならぜひ押さえておきたいツールです。

3-2-1.ダウンロード
次のページから最新版をダウンロードしてください。
https://github.com/opentrack/opentrack/releases
「opentrack-バージョン-win32-setup.exe」のファイルです。
今回は「2023.3.0」でやりました。

ポータブル版はちょっとだけ違いがあるらしいですが、よく知りません。逆に言えばほぼ同じはずなので、そっちがいい方はそっちでやってみてください。
64bit版は無い(使っているライブラリか何かに互換性が無く作れない、パフォーマンス上の利点も無い)そうです。

3-2-2.インストール
「opentrack-バージョン-win32-setup.exe」を実行して、画面の指示に従ってインストールしてください。

3-2-3.起動/設定/使い方
▼起動

「opentrack.exe」(ショートカットを作ったならそれ)を実行します。次のようなウィンドウが開きます。

opentrackの画面
謎のタコさんアイコンで怪しいソフトに見えますが、大丈夫なやつです。たぶん。

▼設定
▽設定を触る前に新しいプロファイルを作るとよいでしょう。
このツールは、この画面の設定は変えた都度直ちに保存されるので注意してください。
画面右側真ん中あたりの[Profile]をクリックし、"Create new copied config"を選択します。
設定ファイル名を決めます。今回は例として"XREAL_Air.ini"にしておきます。

▽画面左側真ん中あたりの[Input]のプルダウンから"UDP over network"を選択します。
これで先ほどのPhoenixHeadTrackerから送られるUDPを受信して入力とします。
PhoenixHeadTracker側で送信ポート番号を変えている場合、右の金槌マークをクリックして受信ポート番号をそれに合わせて変更して下さい。
[Add to axis]は今回基本的に関係ありません。何かの理由で入力値にオフセット角度を加えたい場合、90°単位で指定できるようです。

▽[Input]の下の[Output]のプルダウンで"freetrack 2.0 Enhanced"を選択します。
このfreetrack2.0とか2.1とか言われるものが、多くのヘッドトラッキング対応ゲームに使える形式になります。
こちらはさらに詳細設定が必要です。右の金槌マークをクリックします。
[Select interface]のプルダウンで"Use TrackIR, disable freetrack"を選択します。
大抵のゲームは厳密にはfreetrackというよりTrackIR(という製品)に対応してる、ということになっています。その2種類のデータの両方を送信するか片方かを選べるわけですが、基本的に「TrackIRのみ」を送信するのがうまくいくと思います。
目的のゲームでダメだった場合は変えてみてください。

そのほか、0-2.で触れたようにマウス入力をエミュレートしたい場合は"mouse emulation"を選択してください。

▽[Output]の下の[Filter]について、必須ではないですが何か選んでおくのがオススメです。
これは頭の微細な動きとかのノイズを低減したり色々補正したりする機能で、方式に色々種類があります。
時間があれば使い比べて合うものを見つけるといいですが、迷ったらとりえあず"NaturalMovement"を選んでおけばいいかなと思います。
右の金槌マークを押せばさらに詳細な調整ができます。(そのままでも普通に使えます)

▽画面右側、最初に触った[Profile]の下の[Options]をクリックします。
色々設定がありますが、最低限以下の2つはやっておいた方がいいです。
設定したら、この画面は右下の[OK]で保存して閉じてください。

①[Shortcuts]タブのキーバインドで、一番左上の[Center]にキー割り当て
→頭を振っていると、現実とデータにズレが生じて、現実では真正面を向いているのにゲーム内では横を向いているような状態が起こりえます。
 そういうときにこれに割り当てたキーを押せば、現在の向きが真正面の値となるようリセットされます。
 ゲーム内で使っていない押しやすいキーか、視点リセット操作とかのキーと合わせるのがよいと思います。
 私はテンキー0と、ハンコンの視点リセットに使ってるボタンを当ててます。

opentrackのオプション画面(キーバインド設定)
ハンコンとかのボタンも使えます。

②[Output]タブで、ヨーの反転やピッチのオフ
現実の首振りとゲーム内の首振りが逆になっている場合、[Invert]にチェックを入れて反転させてください。
他にも例えば、「車のゲームで左右を見るだけだから上下の入力は不要だな」みたいな場合は、[Pitch]の[Source]を"Disabled"に指定してください。
Rollについても、Airの場合現状では使えませんから、必要ないと思いますが一応オフにしておくのもいいと思います。

▽画面右下、[Options]の下の[Mapping]をクリックします。
次のような画面が開きます。今回は[Yaw]タブと[Pitch]タブを触ります。
ちょっと説明が多くなりますが頑張って読んでください。何の設定か分かる人は飛ばしても大丈夫です。
トラッキング実行中に実際に動かしながら調整してもいいです。

opentrackのオプション画面(マッピング、ヨー)
マウスオーバーすれば数字で値を確認できます。
これは首を横に90°振ったらゲーム内で180°振り返る設定(カーブ無しリニアマッピング)です。
opentrackのオプション画面(マッピング、ピッチ)
見切れてますが、入力が30°のとき出力が45°になるようにリニアマッピングしてます。
現実の角度に近いマッピングほどリアル感が増しますが、激しく動かすとき大変になります。

まず見方ですが、グラフの横軸がInput(現実の振り角度)、縦軸がOutput(ゲームに渡される角度)になります。
この線を調整することで、「現実で何度首を振ったらゲーム内で何度視点が動くか」を決められます。真正面が0°です。

上の[Max input]や[Max output](YawとRollには無い)で扱う上限値が決められます。
クリックすれば新しい点を追加できます。既にある点はドラッグで動かせます。点を右クリックすると削除できます。
点の間の線はなるべく滑らかに変化するように自動で補完されます。

設定の考え方についてですが、例えばYawを例にとると、現実の動きと完全に一致させるならば「入力が180°のとき出力が180°となる、変化量が常に一定な(リニアな)」線にします。
すなわち"180.00x180.00"の1か所にのみ点を置き、直線を描きます。
あるいは「45°くらいまでは現実と同じように動いて、そこからは大きく動いて60°時点で180°振り返れるようにしたい」という場合なら、"45.00x45.00"と"60.00x180.00"の2ヵ所に点を置き、カーブを描きます。

個人的には、Airの特徴を活かすなら、なるべくリニアな設定(直線に近くなる設定)がよいと思います。
0-2.でも触れていますが、カーブをかける主な理由は表示やトラックできる角度に制限がある場合に、それでもゲーム内の可動域を確保しつつ中央付近の動作は安定させたい……みたいな事情があるためで、代償として変化量が一定でないので、「中央付近の感覚で首を振るとある角度から急に真後ろまで振り向いてしまう/角度によって首振りの勢いを変えなければならない」という不自然さ/不便さが出てきます。
Airにおいてはそもそもカーブをかける理由となる可動域の制限が無いため、そういう設定をする必要がありません。
もちろん別の事情があればそういう設定をするのも全然アリで、例えばVtuberの方でアバターをWebカメラで動かすなら、ゲームのヘッドトラッキングとは別の可動域の制限があると思うので、その範囲で動かせるように設定する必要が出てくると思います。

デフォルトで左右/上下対称な設定になっていますが、非対称にしたい場合は真ん中の[Asymmetric mapping below]にチェックを入れて、上下のグラフそれぞれで設定できます。

▼使い方
設定できたらいよいよ動かします。画面右下の[Start]をクリックします。
画面右上のタコさんのアイコンが、出力に合わせて動くプレビューになります。
上で設定したセンターリセットキーなど、これで動作確認してみてください。



4.ゲームの起動、設定(必要に応じて)

ゲームを起動して、Airにゲーム画面が映っていること、頭の動きに合わせてゲーム内で視点が動くことを確認してください。

ゲームによっては、TrackIRによる操作を有効化する設定が必要だったり、一時的なオン/オフや位置リセットのキー設定が必要な場合があるので、確認してください。
有効化に関しては、特に操作せずとも自動でTrackIRの入力を検知して切り替わるゲームも多いと思います。私の持ってるタイトルだとEuro Truck Simulator 2やTruck and Logistics Simulatorがそうです。

Airにカバーをしていない場合、奥にPC本体モニターが透けて見づらいかもしれません。モニターを消灯しましょう。
あるいはAirにカバーを付けましょう。

ゲーム音をAirのテンプルから再生したい場合、スピーカーにUSBオーディオ機器としてAirが加わっていると思うので、それを再生デバイスにしてください。
(USBオーディオとしてのAirの他に、DP接続スピーカーとしてのAirも見えるかもしれませんが、それは今回使わない(使えない)です)
あと一応マイクも使えますが、音質はそれほどでもない感じなのと、テンプルスピーカーから出る音を拾ってしまいがちな感じがします。



5.終了

opentrackは右下の[Stop]で、PhoenixHeadTrackerは右上の[Stop Opentrack UDP]で動作を止めます。
あとはウィンドウ右上の[×]で閉じて大丈夫です。
停止/終了する順番は特に気にしなくていいです。



6.あとがき

0-2.で挙げたように、Airでのヘッドトラッキングゲーム体験はVRのような臨場感と、VRにない手軽さを兼ね備えた革新的なものだと思います。
私は車を運転するゲームが好きで、その中でヘッドトラッキングに興味を持ちTobiiなどを導入してきましたが、Airを体験した今はもう戻れないかなというくらいの気持ちです。

Airを購入してからこれを導入するまで、その使い道については3DoFセンサーを活用できる場面がほぼなく、正直なところ「メガネ型ディスプレイ」止まりで持て余していたのですが、これを機に買ってよかったとはっきり思えるようになりました。
同じように「買ったもののフル活用できてないな」と思っている方はぜひ試してみて欲しいです。

VRHMDとの比較をいくつか述べていますが、これらはどっちがよいというものではなく、それぞれ特徴があるので「どっちもそれぞれよい」という感じです。

また、ヘッドトラッキングとしての優秀さは何度も言っている通りなのですが、そもそもAirの使い心地(装着感、画面の見やすさなど)が人によって合う/合わないがあり、調整もあまり効かないため、その点において手放しでオススメはできません。
安いデバイスでもないため、購入検討される際は可能であれば、ぜひ展示などで一度実物の使用感を試してみてほしいです。

それから、今回はWindows PCでやりましたが、Steam Deck(あと実質的にLinux)にも同じようにAirのセンサー値を活用できるプラグインが存在し、マウス/スティック操作ヘッドトラッキングや仮想ディスプレイ(空間固定された仮想モニター)などの機能が利用できます。
元々私もそこからAir活用の有志開発の状況について調べていきました。
そちらについてもまた別途紹介記事を作りたいと思っています。

最後に、この記事で紹介したツール(PhoenixHeadTrackerとopentrack)は有志が善意で開発し無償で(!)提供しているものになります。感謝しながら使用しましょう。
また、サポート寄付も受け付けているようなので、支援したい方は送ってあげると喜ばれるかもしれません。