体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

WebVR・MRなど、最新のVRテクノロジーを体験できる「WebVRとか文化祭」はいいぞ!

WebVRを支える技術を紹介

html5jプラットフォーム部勉強会「WebにVRを求めるのは間違っているだろうか?」が大盛況に終わったことで、今回そのスピンアウト企画「Web VRとか文化祭」が11月23日に開催された。

最初に登壇したのはMozilla Japanの清水智公さん。清水さんはMozilla Japanでエバンジェリストとして活動。言語処理系やWebVRなどが担当範囲で、型の強い言語が特に好きだという、セッションタイトルは「WebVRと、それを支える技術」。

MozillaはFirefoxというWebブラウザを開発している非営利の公益法人。Webを豊かにしていくことが同組織のミッションだ。

一昨年末にMozillaの中にVRチームができたのだが、そのチームリーダー(現在はGoogleでVRの開発に携わっている)にインタビューしたところ、「YouTubeのようなものを作りたい」と語っていた。

YouTubeの登場により、ブラウザでも動画が再生できるようになった。VRでも同じようなことができるはずと開発に取り組んできた。

では実際、VRのコンテンツをブラウザ上で実現するにはどういった技術的な課題があるのだろうか。

VRコンテンツに対する要求の第一が没入感と臨場感である。没入感を実現するにはプラットフォームは高リフレッシュレートが求められる。

通常Webブラウザの動画再生は1秒間に60fps。一方、VRのヘッドセットは多くが120fpsとなっている。つまり倍のスピードで書き換えが必要になるというわけだ。

また酔いを防ぐためには低遅延性やヘッドトラッキングも必要になる。さらに入力インタフェースへの対応も必要だ。

また臨場感を得るためには3Dグラフィックス、立体音響への対応も求められる。音なしでVRコンテンツを見ても面白くない。音があるとそこにいるんだという感じがある。

そして開始までのハードルを下げるためには、ページをクリックして早くロードできるか、プログラムが小さくできるかも課題となっている。

これらの課題を解決するWeb技術が次の表だ。

WebVR APIは高フレッシュレートとヘッドトラッキングのハードウェアのアクセスを可能するためのAPIをまとめて提供している。

また高速に描画するための技術がasm.jsである。通常、Webブラウザの中にはJavaScriptとasm.jsという2種類のプログラム処理系が入っている。asm.jsはJavaScriptを速く動かしたいという要求から生まれた技術である。

以下の図を見れば分かるが、JavaScriptはダウンロードして実行して、よく使うコードだけコンパイルしてネイティブコードにする。

一方のasm.jsはダウンロードするとすべてをコンパイルし、ネイティブコードにしてから実行する。こうすることで、ネイティブコードと同じぐらいのスピードで動くようになったが、asm.jsには欠点もある。それはコンパイルをするため、ビルドに時間がかかること。

つまりダウンロードしてすぐ動かすことができないのである。そこで、作られた技術がWebAssemblyだ。

これを使えば、データをバイナリーにするので、プログラムのサイズが非常に小さくなる。またダウンロードも速くなり、コンパイルも速くなる。

コードは次の通り。

だがこれを書くのはつらい。そこで使いたいのが「emscripiten」というC・C++のコンパイラだ。これを使えばC言語で書いたプログラムをHTMLで出力できる。

しかし問題は、コードのサイズが大きくなること。ZIPで圧縮してもかなりの大きさになるため、バイナリー表現にしたい。そこでWebAssembly Explorerというサイトでバイナリー表現にすることができる。

低遅延性、小フットプリントを解決する技術として、「SharedArrayBuffer」が提供される。これは共有メモリーの機能を使うと、2つのスレッドで1つのメモリー空間をシェアできるArrayBufferである。

例えばオーディオデータをデコードしてメモリー空間に置き、別のスレッドで再生することができるようになる。ただやると、2つのスレッドが1つのものをシェアするといろんな問題が起こるので、それを調停するためAtomicsというAPIを使う提案が行われている。

このようにWebVRを実現する技術は揃ってきているが、足りないものがある。それは作り手である。WebVRはJavaScriptで書いてもいいし、フレームワークやゲームエンジンを利用してもよい。

またWebベースのオーサリングを使ってもよい。Webの強みは、どんなデバイスでも同じコンテンツが再生できるということ、そしてWebページにVRコンテンツを埋め込めることだ。ぜひ、WebらしいVRを考えて世に出してほしい。今なら世界一になれるかもしれない。

UnityではVRをどこまでサポートしているのか

2人目の登壇者はユニティ・テクノロジーズ・ジャパンの鎌田泰行さん。セッションタイトルは「UnityのVR機能とWebVRの対応について」。

1 2 3 4 5次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。