VRで自分の手がオブジェクトを貫通しないようにして"ものに触っている感"を出す
こんにちは!新しく代表になりました学部二年のにとです。この記事はA-PxLのアドベントカレンダーに向けて執筆しました。最近はHalf-Life:AlyxやGreen Hell、ルインズメイガスなどいろんなVRゲームで遊んでいますが、やはり没入感を高める細かい工夫がたくさんあってすごく参考になりますね。今回は地味ながらも没入感がアップする"ものに触っている感"を作っていこうと思います。
環境
HMD : Meta Quest2
Unity : 2021.3.11f1(URPを導入)
XR Interaction Toolkit : 2.0.4
作るもの
今回はVR内の手でオブジェクトに触れて、貫通しないようにしようと思います。
赤丸がコントローラーの位置
youtu.be
今まではXR Interaction Toolkitが提供しているXR Originのアンカーの子オブジェクトに手を配置していたんですが、そうするとVRで壁などの動かないオブジェクトに触れようとするとコライダーをつけていても貫通してしまいます。意外と盲点でした。
実装方法を考える
作るにあたって3つの実装方法案を考えました。
Rayを使ってオブジェクトとの距離を測り、手が埋まらないようにtransformを変えていく
Rigidbodyとコライダーを信じてオブジェクトと手を接触させる
- Jointを使う
まず1は主にベクトルの計算をしていくのですが、オブジェクトがただの平面のときはよくても曲面や凸凹面になるとややこしくなってしまったのでダメでした。
2に関しては簡単に作れたのですが、↓のように挙動が安定しないのと、オブジェクトに触れた後に手の位置が変わってしまうなどの不具合があってダメでした。
3のJointを使う方法が一番うまくいったので紹介しようと思います。
Fixed Jointを使って実装する
1. XR Interaction ToolkitでVR環境を作る
まずはXR Interaction Toolkitの導入をしていきます。
いつも参考にさせていただいている記事↓
framesynthesis.jp
これで環境が整ったらXR Originをシーンに配置します。一応移動とスナップターンができるよう、XR Originに
- Locomotion System
- Continuous Move Provider
- Snap Turn Provider
をアタッチします。Continuous Move ProviderとSnap Turn ProviderはAssets>Samples>XR Interaction Toolkit>2.0.4(バージョン)>Starter Assetsの中の「XRI Default Continuous Move」と「XRI Default Snap Turn」をインスペクタにドラッグアンドドロップすると細かい設定をせずにアタッチできます。
こんな感じになれば大丈夫です。
XR Originを入れるところ忘れずに!
2. シーンに手のモデルを配置する
次に手をシーンに配置します。無料のモデルがAsset Storeになかったので「手 3Dモデル フリー」などと調べて出てきたものを適当に追加しました。手の位置や大きさを調整していい感じになったらOKです。(QuestLinkなどで実行しながら調整して値をコピーし、実行停止してペーストするのがラク)
今回はオブジェクトに触れる手を作るので、RigidbodyとColliderも追加しましょう。また、RididbodyのConstrainsのFreeze Rotationのxyz全てにチェックを入れます。
僕が使ったモデルは軸がおかしかったので空のGameObjectを作ってその中に手のモデルを入れました。(画像は空のGameObjectのインスペクタ)
3. Fixed Jointを設定する
次にFixed Jointを追加していきます。
XR Originの子オブジェクトの中の「Left Hand Controller」と「Right Hand Controller」にFixed Jointコンポーネントを追加します。追加されたRigidbodyのIs Kinematicにはチェックを入れておきましょう。
ここでFixed JointのConnected Bodyに手を入れても動くのですが、動きがガクガクしてしまうので、オブジェクトに触れている間だけ接続して、触れていない間はコントローラーを追従するようにします。
4. スクリプトを書く
手のモデルをコントローラーに追従させ、オブジェクトに触れたらFixed Jointに接続するコードを書いていきます。
using UnityEngine; public class HandJointBehavior : MonoBehaviour { [SerializeField] private Transform _controller; private bool _isTouch; private Rigidbody _rigidbody; private FixedJoint _joint; private void Start() { _rigidbody = GetComponent<Rigidbody>(); _joint = _controller.GetComponent<FixedJoint>(); } private void Update() { // 回転は常に追従 transform.rotation = _controller.rotation; // 触れていないときはコントローラーを追従する if (!_isTouch) { transform.position = _controller.position; } } private void OnCollisionStay(Collision other) { _isTouch = true; _joint.connectedBody = _rigidbody; // FixedJointに接続 } private void OnCollisionExit(Collision other) { _isTouch = false; _joint.connectedBody = null; // FixedJointから切断 } }
シンプルに実装できました。
最後に、書いたスクリプトを手のオブジェクトにアタッチします。アタッチしたらインスペクタのControllerに対応するコントローラーを入れます。
完成
さいごに
VR内で手を衝突させることで現実の手の位置とのズレが生じるのですが、違和感なく手がオブジェクトに触れている感じを表現することができました。触れたときにSEを出す、触れている間はコントローラーを振動させるなどでさらに没入感を得られると思います。
今年は勉強会の講師やチーム開発のリーダー、IVRCなど初めてのことをたくさん経験し、大きく成長できた一年でした。これからはA-PxLの代表としてより一層がんばっていこうと思います。そして来年はXRの面白さをもっと知り、いろいろな技術に触れていきたいです。
2023年もよろしくお願いします!
開発者視点のVR酔い対策
学部2年の星野です。自分が大体のもので酔いやすいこともあり、VRコンテンツを制作する際にVR酔いについてはかなり注意しているつもりです。今回は開発者視点におけるVR酔いの対策について書いていきたいと思います。
VR酔いとは
VRを体験している途中や後で、吐き気や頭痛などの症状がでること。
症状としてはほぼ車酔いと同じ
原因としてはいくつか説があるが、視覚と感覚のずれによるものという説が有力(車酔いと同じ)
自分自身も何回かなったことがありますが、その時はかなりキツかったです。(もちろん状況や人によって症状は変わります。)
VR酔いの対策
fpsとリフレッシュシートを確保する
fpsはアプリ側、リフレッシュシートはヘッドセット側の映像更新の頻度を表す
ちゃんと確保しないと映像が遅延するため酔いやすくなる
ときには解析度を犠牲にしてでもfpsを確保
VRを違和感なく進行するためには90fps以上必要
次の動きを予想させる
- 視点や画面が大きく切り替わる前に予告を出したりフェードインやフェードアウトを使うことで、脳に準備をさせる
移動の実装には注意する
テレポート
コックピットなどの表示(周辺視野を隠す)
移動させない(ルームスケールの範囲内)
実践
自分の参加しているチーム開発のカメラや移動のシステムを担当しました。 下の動画は現在の進捗です。
次の動きを予想させる→フェードイン、アウトを使う。 移動の実装→テレポート
そのおかげか、気持ち悪さや酔いを感じたことはなかったです。(慣れもあるかもしれません)
まとめ
今後もVRコンテンツを制作する時には上であげたことに注意していきたいと思います。
女の子になってリモート勉強会を行った感想
始めに
こんにちは、なおしです。
コロナウイルスが今年の3月ごろから流行りだし、今現在も大学では部活動が制限されている状況が続いています。
そうなると、新入生向けの勉強会の開催が困難になりリモートで行うことになりました。
何か新入生を楽しませることが出来ないかと考えVTuberとなって勉強会を行いました。
これを行おうと決めたきっかけ
今年の3、4月ごろにこれらの記事を拝見しました。
これらの記事を拝見したときは私もやりたいとは思っていませんでした。
しかし新入生歓迎会が中止になったことでやらないといけないと考えなおしました。
例年であれば、大学の様々な部活がこれまでの部活動を紹介し新入生とコミュニケーションをとる機会がありました。
しかし、今年はclusterでのバーチャル開催となり例年より部活と新入生との距離があったのではないかと感じました。
そこで、新入生にA-PxLに興味を持ってもらうこととどんなことが出来るのかという指標を示すためにバ美肉して勉強会をすることに決めました。
作成したもの
以下の動画は会津大学で開催された「コロナウイルスにITで立ち向かおう」ハッカソンに提出した動画です。 こちらの動画は開発途中のものとなります。
https://www.youtube.com/watch?v=D7PUiIpVvzQ
VR空間上にスライドを表示して指し棒を使って説明するようにしました。
また、新入生が書いたプログラムを確認する必要があったのでPC画面をVR空間上に表示しました。
実際に行ってみて
個人的な感想
私自身の感想としては身振り手振りを使って会話ができるのでとても楽しかったです。
ただし、どうしようもない問題がありました。
- 勉強会中はずっと立ちっぱなし(約3時間)
- 飲食できない
- HMDをずっとつけなければいけない
1,2つは頑張れば大丈夫でしたが、何度か気分を悪くしたことはありました。
そこだけは慣れが必要かもしれません。
アンケートで頂いた感想
勉強会終了後アンケートを取りました。 また、新入生だけでなく同席した先輩もアンケートに回答して頂きました。
アンケートで集めた回答は以下の通りです。
- 勉強会をVTuberで行って良かったか
- 勉強会の内容は良かったか
- 資料、サンプルが役に立ったか
- 演習の難易度は難しかったか
- 勉強会の雰囲気は良かったか
- 普通の授業と比べて良かったか、悪かったか等の感想
ここでは、1、2、5、6番の回答についてまとめたいと思います。
勉強会をVTuberで行って良かったか
「勉強会をVTuberで行って良かったか」では悪い回答はなく良かったと回答して頂けました。
勉強会の内容は良かったか
こちらはすべての回答でとても良かったを頂きました。
勉強会の雰囲気は良かったか
こちらは「とても良かった」と「良かった」の回答が半々となりました。勉強会自体でどこかしらの改善点があったかもしれません。
普通の授業と比べて良かったか、悪かったか等の感想
全体的な感想として楽しくできたこととコミュニケーションがしやすかったことが挙げられておりました。
アンケートの回答では悪かった点はなかったです。
バーチャルで勉強会をしての利点と欠点
アンケートと私自身が感じたことを総括すると
- 新入生と先輩とのコミュニケーションの敷居が下がる
- バーチャルで行うことで面白みがある
と感じました。ただ個人的な感想ではありますが、授業がわかりやすくなる、内容の理解がしやすくなる等に大きく影響を与えることはないと考えます。
新入生にとってわかりやすいものにするためには資料や説明、解説の仕方によるものであり、それはバーチャルでやろうと対面で授業しようと変わらない部分だと思います。ただし、バーチャルで行うことで画面の変化が増えて勉強会に飽きにくくなるのではないかと感じました。
欠点としてあげられることはこの2つがあると感じました。
- 資料の準備に加えシステムの調整などの手間が増える
- 勉強会中に機材のトラブル等でストップすることがある
前者については資料の作成はもちろん、そしてシステム自体に致命的なバグがないか、勉強会が進行できなくなるバグがないかを確認しなくてはいけないのでかなり準備が必要だと感じました。
後者についてはリモートで行う以上起こりうる問題ではありますが、VR機材の接続不良などでさらに勉強会が止まったりすることが何度か起こりました。
まとめ
バ美肉で勉強会をするのは予想以上に大変でした。しかし、それによって対面での授業が出来ない環境でも楽しく勉強会を行うことが出来たかと思います。
これからはリモートでの発表や別の勉強会等でバ美肉をするかもしれませんので引き続き改良をしていこうかと思います。
また、このバ美肉についてはnoteや個人のブログにまとめておりますので拝見して頂くと幸いです。
部室を3Dスキャンしてみた
こんにちは、ぶろっくのいずです。 タイトルの通り、許可を得てスマートシティAiCTにあるA-PxLの部室を数千枚の写真から3D復元してみました。
出来たのはこんな感じです。
スマートシティAiCTという建物があり、A-PxLの部室エリアはその一部です! pic.twitter.com/LP2UtQRnQX
— ぶろっくのいず (@blocknoise26) 2020年4月5日
clusterというアプリ(PCとスマホ対応)で歩き回れます。
会津大学VRサークルA-PxLの部室(AiCT)
— ぶろっくのいず (@blocknoise26) 2020年4月5日
を許可を貰いスマホで撮った数千枚の写真から3D復元しました!
clusterというアプリから見られます↓https://t.co/Z8nFxC2Xv2 #clusterVR #Photogrammetry
そして、A-PxLはなんとVRのコミケ「バーチャルマーケット4」に出店予定!!
A-PxLのブース映ってる
— ぶろっくのいず (@blocknoise26) 2020年4月12日
なんか嬉しくてスクショした https://t.co/NFC5gsSFj6 pic.twitter.com/iRuxmwWs1D
バーチャルマーケットでもA-PxLの部室が使われることになりました。
※A-PxLが出店しているこのブースは現在、数人の部員によるチームで活動しています。
今回、使ったのはフォトグラメトリという技術です。フォトグラメトリとは、被写体を様々な角度から撮影し、その写真を解析することで被写体を3次元的に復元する技術のことです。
フォトグラメトリのソフトの紹介↓
自分もフォトグラメトリをやりたい!という人には、まず、スマホのアプリ「Display.land」をおすすめします。
styly.cc
無料な上に扱いやすく、撮影を頑張ればモデルのクオリティもそれなりに高いです。
スマホじゃなくてパソコンでフォトグラメトリをやりたいという人には、まずSteamにある「3DF Zephyr」の体験版をおすすめします。
store.steampowered.com
3DF Zephyrの体験版は50枚まで写真を使えて、モデルをエクスポートすることができるため、フォトグラメトリを使ってみたい人にはおすすめです。3DF Zephyrは日本語にも対応してるので人によっては使いやすいですね。
「お金は出すから一番クオリティが高いフォトグラメトリのモデルが欲しいんだ!」という人には「Reality Capture」をおすすめします。
store.steampowered.com
業者が使うようなライセンスはめちゃくちゃ高くて、Steamの個人向けのライセンスでも高いです。それでも、フォトグラメトリソフトでReality Capture以上の品質を出せるソフトは今のところ見たことがありません。ちなみに今回の記事で紹介しているA-PxLの部室のモデルは、Reality Captureを使っています。
それぞれのフォトグラメトリソフトに得意不得意があるかと思いますが、おすすめしたいソフトはこんな感じです。
...終わり...
バーチャルを「仮想」と訳す君に申したい
こんにちは! A-PxL部員の橋本です。もうそろそろ大学生活の3/4が過ぎようとしていることに驚きを隠せない今日この頃です。さて、他の部員がIT分野(主にUnity)に関してのブログを多数執筆しているので、今回は私が世間のVRの認知に対して思うことを書いていきたいと思います。
今回の記事で私が言いたいことは
VRを仮想現実と訳すのは間違いだ!
ということです。では、なぜそう言えるのか順に解説していきましょう。
バーチャルの意味
バーチャル(virtual)は形容詞で、名詞はバーチュー(virtue)となっています。というわけで、まずはバーチューの意味を辞書を引いて調べてみます。バーチューは「徳」、「善行」、「効力」などを意味しますが、さらに原義に戻ってみると、「そのものをそのものとして在らしめる本来的な力」という意味を持ちます。米国継承英語辞典(The American Heritage Dictionary)では、「Existing in essence or effect though not in actual fact or form」と定義されています。これは 「みかけや形はそうじゃないけど、本質や効果としてはそのもの」 という意味を表します。つまり、「バーチャル〇〇」は「みかけや形は〇〇じゃないけど、実質的には〇〇」を意味することになります。
例えば、「バーチャルマネー」はオンライン上で使用することができるお金(MMORPG内の通貨や電子決済)を表しますが、実際に硬貨や紙幣として目で見たり触ったりすることはできません。しかし、現金と同じように価値を有しており、取引に使うことができる。すなわち、「見かけはお金じゃないけど、効果的にはお金」。だからバーチャルマネーなのです。
他にも、2016年から活動開始したキズナアイを筆頭に今でも増え続けている「バーチャルYouTuber」も同じように考えられますね。すなわち「みかけはYouTuberじゃないけど、実質的にはYouTuber」ってことです。ちなみに、私はそこまでバーチャルYouTuberに詳しくはありません。せいぜい四天王の5人+αくらいです。
(四天王なのに5人とはこれいかに...)
バーチャルの類義語、反意語、そして「仮想」
バーチャルの意味が分かったところで、次にバーチャルの類義語、反意語を調べてみたいと思います。まずはじめにバーチャルの反意語ですが、これはノミナル(nominal)「名目上の」となっています。では、ノミナルの反意語はどうなっているかというと、実はこれはリアル(real)「現実の」が相当します。これが意味することはリアルの反対はバーチャルじゃないくて、リアル=バーチャルなんだよということです。ちなみに、リアルの対を成す言葉はイマジナリ(imaginary)「架空の」が相当すると考えられています。
バーチャルの反意語、類義語について理解していただいたところで、「仮想」について考えてみましょう。仮想は読んでそのまま「仮に想定した」という意味を表します。これは英語にするならsupposedなどと表すべきであり、これはvirtualとは異なる概念であると言えます。つまり、概念的な違いによりバーチャルは「仮想」と訳すことができないのです。
バーチャルリアリティの意味と訳し方
以上のことより、バーチャルリアリティとは「見た目的には現実じゃないけど、実質的、効果的には現実」を意味し、「現実に似せた偽物の現実」ではありません。そして、「仮想現実」と訳すこともできません。では一体どう訳すればいいのかということですが、これはそのまま「バーチャルリアリティはバーチャルリアリティだ」で十分です。どうしても日本語に訳したいという方は「人工現実感」と訳すのがベストということになっています。
また、話は変わりますが、世間では「VR=アタマになんか被ってやるアレ」という認識をされている方も多くいらっしゃることと思います。確かにOculus RiftやHTC ViveといったHMD(ヘッドマウントディスプレイ)の登場によりVRの人気が出たといっても過言ではないので一概に間違いとは言えないのですが、VRの概念から考えると、HMDはあくまで「VRを体験するための道具」なのでVR=HMDとはなりません。このことについても頭の片隅に置いといてもらえればと思っています。
さらに余談ですが、VR技術とは、「コンピュータなどを使って現実と同じ、もしくは現実では起こりえないことを再現する技術」と言えます。それゆえ、VRの研究対象は心理学からロボティクス、CGやヒューマンインターフェースなど多岐に渡っており、とても広大です。将来的に大学ではVRについて研究したいと思っている高校生は、VRの中のどの分野について研究したいのか高校在学中に決めておくことをお勧めします。
まとめ
- バーチャルはリアルとほぼ同義語である。そして「仮想」と訳すことができない。そのまま「バーチャル」と言いましょう
- バーチャルリアリティを日本語にするなら「人工現実」と訳しましょう
特に、今A-PxLに所属している部員、そしてこれからA-PxLに所属することになる未来の部員たちには以上のことを最低限知っておいて欲しいものです。
参考
- 作者:
- 出版社/メーカー: コロナ社
- 発売日: 2010/12/16
- メディア: 単行本(ソフトカバー)
以上の本の内容を試験としたVR技術者認定試験も開かれております。現在のA-PxLにも何名かの合格者がいます。興味がある方はぜひトライしてみましょう!