インタビュー
Mozillaのゲームに対する本気度を担当者が語る。WebGLが拓くゲームプラットフォームとしてのWebブラウザの姿
4Gamerでは,CEDEC 2014に合わせて来日した2人の担当者に話を聞く機会を得たので,ここではCEDEC 2014のセッションの内容を交えつつインタビューをお届けしたい。
Webブラウザをゲームプラットフォーム化するキーテクノロジー
GDC 2013では,ブラウザ上で動作するUnreal Engine 3(以降,UE3)製デモ(プラグインではなくJavaScriptやWebGLといったWebベースの技術で作成されたもの)が披露され,ブラウザ上で動くゲームの実力に筆者などは度肝を抜かれたわけだが,あれから1年以上が経過しブラウザゲームを支える技術はさらに進歩している。復習と現状確認を兼ねて,インタビューに入る前にブラウザゲームを支える技術をまずまとめておきたい。
CEDEC 2014のMozillaセッションでは,ゲームエンジンとしてUnreal Engine 4(以下,UE4)とUnityの次のバージョンとなる「Unity 5」がWeb技術をサポートすることがアピールされた。どちらも非常に広く使われているゲームエンジンである。
Unityでは以前からブラウザプラグインをサポートしてきたが,世の中的にはセキュリティ上の理由からプラグインを制限する方向に向かっていることもあり,Unityではプラグインに代わるブラウザのサポート方法としてWeb技術をメインにしていくことになるのかもしれない。CEDEC 2014のUnityのセッションでもUnity 5のWebGLサポートについてアピールが行われたようだ。
これらのゲームエンジンに加えplaycanvasやturbulenzといったゲームエンジンも登場してきている。とくに後者はブラウザゲーム「翠星のガルガンティア 〜キミと届けるメッセージ〜」の開発に採用されており,日本では知られたエンジンといえるかもしれない。
詳しく書くと,JavaScriptからOpenGLを使って3Dグラフィックスを自在に操れるようになり,既存のゲーム開発で使われていたC++言語のプログラムを非常に高い精度でJavaScriptに変換して実行可能になった。さらに,多機能で扱いやすいが実行速度が上がりにくかったJavaScriptにサブセット版言語仕様が作られ,機能が限定される代わりに驚くような速度でコードを実行できるようになったのだ。
これらを利用することにより,Webブラウザ上で実行されるプログラムは,これまでとは桁違いの可能性を秘めたものとなるわけだ。
Unity 5,UE4という2大ゲームエンジンがWeb技術をサポートし,さらにC/C++で記述されたゲームも,多少の手直しは必要だがemscriptenでWebブラウザに持ち込むことが可能になる。そのためCEDEC 2014のMozillaセッションでは,PC,家庭用ゲーム機,モバイル(iOS&Android),そしてブラウザに対し,一つのソースコードでゲームをリリースすることが可能になったという点が強調されていた。
Web技術を使ったゲームはすでにいくつかリリースされている。例えば,Trendy Entertainmentがリリースする「Dungeon Defenders Eternity」がその代表的なタイトルだ。また,すでに触れたように日本でも無料ゲームではあるが「翠星のガルガンティア 〜キミと届けるメッセージ〜」でWeb技術が利用されている。
このように着実に広がりを見せている新技術を使ったブラウザゲームだが,いろいろと疑問を感じる部分もある。今回はMozilla Japanの協力を得て,米Mozillaでブラウザのゲームプラットフォーム化に取り組んでいるVladimir Vukicevic氏とMartin Best氏の二人に直接話を聞いてきた。
ちなみに,Vukicevic氏はMozillaのテクニカルディレクターとしてゲーム全般を担当し,Best氏はゲームデベロッパとのやりとりなどMozillaのゲーム戦略を支えている人物である。ブラウザゲームの最先端を走っているお二人に,いろいろと気になる点を聞いてみたので以降にまとめてみよう。
Mozilla Engineering Director.Platform Gaming Vladimir Vukicevic氏 |
Mozilla Game Platform Strategist Martin Best氏 |
UE4とUnityのサポートでブラウザを含めたゲームのマルチプラットフォーム化が可能になる
4Gamer:
よろしくお願いします。まず,Mozillaという組織が何をしているのか教えていただけますか。Firefoxブラウザを開発して配布している組織という認識の人も多いと思いますし,いったい何を行っている団体なのでしょうか。
Vukicevic氏::
そして我々の製品は,すべてその目的のために発表しています。例えば,Firefoxはまさにユーザーを第一においたブラウザで,プライバシーやセキュリティといったことを考えて開発しています。
また,最近Firefox OSというモバイルOSを発表しました。これは同じ原理をモバイル空間で展開するために発表した製品です。FirefoxOSは,HTML,CSSといったWeb技術で作られたOSだという点が特徴です。
4Gamer:
お二人はMozillaでゲームを担当されているということですが,私自身は2013年のGDCでemscriptenやasm.jsでブラウザに移植されたUE3のデモを見て非常に驚きました。それで,GDC後に,UE3で作られているというゲームを自分自身でプレイしてみたのです。
ですが残念ながらそのときにはキーボード操作でフォーカスが外れてフリーズしてしまったりと安定してゲームができず少しガッカリしてしまったという経験があります。今はどうなのでしょうか。
Vukicevic氏::
2013年のUE3は単なる技術デモで“こういうことができる”とデベロッパに見せるためのものでした。(Unreal Engineシリーズの開発元の)EpicはすでにUE4に注力していて,WebGLのサポートも正式にはUE4からです。
Best氏:
あのデモ(GDC2013のUE3のデモ)はたった4日間で用意したんですよ。現在のUE4はもっと時間をかけて,しっかり磨きをかけたものです。UE4で作成されたTrendy Entertainmentの「Dungeon Defenders Eternity」というゲームがありますが,家庭用ゲーム機レベルのクオリティが出ています。このゲームは先月リリースされているのでぜひプレイしてみてください。
Vukicevic氏::
2013年はGDCの数時間前まで作業をやっていて,GDCの直前に完成したデモでした。なにしろUE3をブラウザに移植したのが(GDCが行われた)3月ですからね(笑)。
4Gamer:
今は当時よりずっと完成度が高くなっているのですね。
Vukicevic氏::
もちろんです。現在はEpicやUnityがWebGLをサポートした製品を出荷した,あるいは出荷できるという状況です。また,これらとほぼ同じ技術を使ったゲームが,すでに市場に出ています。
4Gamer:
UE4やUnityで作られたゲームはそのままブラウザに持っていけるということですか?
Vukicevic氏::
基本的にはその通りです。もちろん,例えば入力の仕組みを変えるといった必要はあるかもしれません。ゲームパッドからキーボードとマウスに切り替えるとかですね。でもゲームのコアになるコードは同じように使えます。
Best氏:
現在はブラウザのAPIで非常に大きなグローバルファイルストレージをサポートしています。それと非同期ファイルアクセスとを組み合わせると,ユーザーにとっていちばん良い体験ができるようになります。バックグラウンドでストリーミングをを実行するというのがもっとも最適なロードの方法で,プレイヤーが瞬時のロードを体験できます。Trendy Entertainment(のDungeon Defenders)が,まさにそれをやっています。
Vukicevic氏::
どんなプラットフォームでも固有の最適化が必要な部分はあります。Webもそれと変わりません。ですが最初の(移植)作業はとても簡単です。
4Gamer:
ほかのプラットフォームに移植するのとさほど手間は変わらないということですか?
Vukicevic氏::
変わらないということを一つの目標としています。
4Gamer:
UnityはC#など多数の言語をサポートしていますが,どの言語で作られたゲームもブラウザに移植できるのですか?
Vukicevic氏::
Unityはそうです。それはUnityだけに言えることですが。
Best氏:
Unityは“IL2CPP”という新しい技術を開発しています。.net FrameworkやMonoでは,言語で書かれたプログラムを中間言語(MonoではIL)にコンパイルしています。中間コードの状態のものをIL2CPPでC++のソースコードに変換するので,すべての言語をIL2CPPでC++に変換しているともいえるわけですね。そこから(emscriptenで)asm.jsに変換する形になります。IL2CPPは,そのほかのプラットフォームでも利用でき,遅いC#のコードをC++と同じ速度で実行するといったことができる優れたシステムです。
ネイティブコードに迫るasm.jsの性能
4Gamer:
高速化という点についてですが,CEDECのセッションで実行時間がネイティブコードの1.5倍程度に収まるという点を強調されていました。スクリプト言語の実行時間がネイティブコードの1.5倍程度というのは驚きですが,どのような手法で高速化されているのですか?
Vukicevic氏::
asm.jsが登場する以前は,JavaScriptに移植すると実行時間が10から20倍ほどになっていました。そこで,Luke Wagnerというエンジニア(asm.jsの開発者)がJavaScriptの実行時間を少しでもネイティブコードに近づけるためにJavaScriptを簡素化し,それをさらに効率的にするという作業を何度も繰り返して,1.5倍というところまで実現してきたのです。この1.5倍の実行時間という数字は,かなりネイティブに近い驚くべき数字だと思っていますが,我々はさらなる高速化を目指しています。
Best氏:
asm.jsでは,JavaScriptには普通含まれない変数型の情報を埋め込むことができます。それでマシンレベルでの解釈がより効率的にできるようになっています。
4Gamer:
asm.jsのインタプリタではJust In Time(JIT)Compileのようなことをやっているのですか?
Vukicevic氏::
普通のJITよりもっと効率的です。
Best氏:
※JavaScriptのような変数型がない言語は,実行時に動的型付けというやや面倒な手続きを行って変数型を決定しなければならない。asm.jsはそれがパスできるのが大きいということだと思われる。
4Gamer:
その代わりasm.jsは可読性(読みやすさ)が悪いですよね?
Best氏:
もともとasm.jsは手書きのために作られている言語ではありません。アセンブリ言語みたいなものです。低レベルの仮想マシンが解釈して実行することを前提に作られています。
Vukicevic氏::
デバッグをやりやすくするほうが(可読性よりも)重要だと思っています。ネイティブコードのデバッグと同じで,asm.jsにあまり手を加えなくてもデバッグできるようにする。というのはasm.jsは手を加えやすい言語ではないのです。
Best氏:
つまり,asm.jsでは実行速度が最優先,それ以外の要素は後回しです。
4Gamer:
ゲームプログラムでは高度な最適化が必要になることもあります。最適化はasm.jsに手を加えるのではなくC/C++コードのほうに手を加えるわけですか?
Vukicevic氏::
emscriptenでは普通のコンパイラと同じ手法が使えます。emscriptenはLLVMをベースにしていますから,LLVMベースのほかのコンパイラと同じように最適化のステップが終わってからJavaScriptコードを出力します。
最適化のやり方はすべてほかのプラットフォームと同じです。JavaScript特有の最適化というのもいくつかありますが,基本的にはx86やそのほかのプラットフォームと同じように最適化できます。
4Gamer:
もし私がemscriptenのためにC/C++コードを書くとして,なにか注意すべき点はあるのでしょうか?
Vukicevic氏::
何も気にしなくてもいいですよ。そこが素晴らしいところなんです。ネイティブアプリの開発に使うライブラリ(API)も全部使えます。
Best氏:
最近は私達のサポートが必要とされない開発事例がたくさん出てきています。製品が出荷されてから私達がそれらを知るということが,本当に多くなりました。我々の手伝いなしに開発ができるほどにemscriptenやasm.jsの成熟度が向上したということでしょう。
Vukicevic氏::
4Gamer:
ソースコードの互換性に関して,CEDECのセッションの中でスレッドの実装が今後の課題だとおっしゃっていました。しかし,現状でもUE4やUnityから出力されたコードが動作しているのですからスレッドは実装されているはずですよね?
Vukicevic氏::
現在は,Web WorkerというHTML5のAPIでスレッドを実装しています。Web Workerでマルチスレッドにはできるのですが,スレッド間でメモリが共有できないんです。しかし,ネイティブアプリではスレッド間でメモリが共有できますよね。それで,ネイティブで使われているpthread(POSIX仕様のスレッド)やそのほかの方法のスレッドを実装するのが今後の課題になっています。
4Gamer:
メモリの共有の実装はセキュリティに関わってきませんか?
Vukicevic氏::
そんなことはありません。限られたスレッドの間でメモリを共有するのですからセキュリティは保てます。
Best氏:
セキュリティより大きいのは,複数のスレッド間で同じメモリに同時にアクセスしようとするときの問題です。デッドロックが起きますよね。
Vukicevic氏::
ネイティブ開発を行っているデベロッパは,デッドロックに対して対策を施しますが※,Webでは同じ問題が起きないようにしたいと思っています。面倒な手続きなしにマルチスレッドを使えるようにしたいですね。
※ネイティブ開発ではセマフォやミューテックスといった仕組みを使ってデッドロックの可能性があるメモリアクセスを一つのスレッドに制限して問題を解決する。Vukicevic氏らは,そうした特別な対策なしにスレッド間でメモリの共有を可能にする仕組みを提供したいようだ。
4Gamer:
セキュリティに関して続けますが,CEDECではこれからもJavaScriptの高速化に取り組んでいくという話がありました。高速化とセキュリティの両立は難しくはありませんか?
Vukicevic氏::
Web上ではセキュリティが最優先です。asm.jsもほかのWeb技術と同等のセキュリティを満たさなければなりません。asm.jsがネイティブコードより遅い理由の一つが,そこにあります。我々は,その遅延をできるだけ小さくしたうえで,Webの最大の利点である高度なセキュリティを開発者が活用できるようにすることを目指しています。
例えば,asm.jsを使ったアプリはWeb上で簡単なリンクとして示すことができますが,プレイヤーは“ウイルスがダウンロードされるのではないか”と心配する必要がありません。Webブラウザがasm.jsのセキュリティを確保してくれるので安心してダウンロードできるのです。
4Gamer:
しかし,例えばシステムに異常な負荷をかけるようなコードを埋め込むといったことができるのではありませんか。
Vukicevic氏::
DoS攻撃のようなことをおっしゃっているのだと思いますが,それは可能かもしれません。しかし,それは今でも可能なことです。asm.jsもWebブラウザにとってはJavaScriptの一部です。スクリプトが長時間実行されている場合,Webブラウザが検出して,ユーザーに実行を中止するかどうか選択させますから,大きな問題にはならないでしょう。
もちろん我々は,DoSのような攻撃を最小限に抑えようとしています。でも,仮にDoSが可能だったとしても,プライバシーの漏洩よりはずっと(DoSのようなアプリはプレイヤーが停止させられるだけなので)被害は少ないのではないでしょうか。
日本のゲームデベロッパの支持も得ているWeb技術
4Gamer:
WebのAPIにはさまざまなものがあります。WebGLやWeb Audio,IndexeDBといったAPIがオープンソースで開発されていますよね。一方で,日本のゲームデベロッパの中には問い合わせの窓口を一つにしてほしいというところもあると思うのですが,Mozillaがまとめて開発サポートの窓口になってもらえるのですか。
Best氏:
私達がいまゲーム開発者に対して何をやってるかは,お話しすることができます。Mozillaの複数のグループがパートナーの質疑応答の対応をやっています。”パートナーエンジニアリンググループ”が最大の質疑応答の窓口です。パートナーエンジニアリンググループの目的はゲームデベロッパがWeb技術を使った製品を発表できるようにするというもので,すでに多くのアプリが開発されています。
Vukicevic氏::
ゲームデベロッパが,直接APIにアクセスする必要はあまりないのではないでしょうか? 例えば,Unityを使っているならエンジニアがDirectXをどうやって使うのかといったことは気にしなくて済みます。多くのゲームデベロッパはUnityやUE4といったゲームエンジンを使ってAPIに触らずに済むようにしていると思いますが。
4Gamer:
日本のゲーム会社はコードを内製しているところも多いようです。
Vukicevic氏::
emscriptenはC/C++コードをJavaScriptに変換し,例えばOpenGL ESで書かれたコードはWebGLに変換してくれますから,そのようなゲームにも対応できます。
私自身,大手の日本のゲームデベロッパと多くの話をしました。彼らはWeb技術にはあまり詳しくない一方で,OpenGLには慣れ親しんでいます。そんな彼らでもコンテンツを(emscriptenを使って)Web上に簡単に立ち上げることができたんです。
Best氏:
彼ら(日本のゲームデベロッパ)はemscriptenのサイトにあるドキュメントを使って移植作業を行っていました。サイトにはemscriptenの開発コミュニティに参加しているメンバーの連絡先が入っているのですが,それがとても有用だったと言っていました。emscriptenのコミュニティのサポートだけで十分に開発できたそうです。彼らは,先に話した我々のパートナーエンジニアリンググループをまったく通さずに開発してしまったんですよ(笑)。
4Gamer:
日本のゲームデベロッパともコンタクトをとられているんですね。
Vukicevic氏::
ええ,コンタクトをとっています。Windowsや家庭用ゲーム機の開発者達とも話をしていますし,Firefox OSについてもとても興味を示してくれています。
4Gamer:
日本のゲーム開発者の反応はどうですか?
Best氏:
ゲームデベロッパと話をしていると,必ず同じ道筋をたどります。まず,最初の4日間は私達が言っていることはまったく無視されます。それで最後の日にネットワーキングのデモを見せると,彼らはすごくワクワクして,それで私が急に忙しくなるんです(笑)。
Vukicevic氏::
我々はずいぶん長くこの技術に取り組んでいて,すでに相当な成熟度に達しています。CEDECの講演後に日本のデベロッパからアプローチされたんですが,彼らはすでに実際に使っていたんです。実際にやってみると「これは凄い」と誰もがなります(笑)。
Best氏:
ですから私達としては「実際にやってみてください」と言いたいですね。
4Gamer:
CEDECのセッションの中でゲーム開発者からJavaScriptだからゲームロジックがユーザーに丸見えになってしまうのではないか,という質問がありました。この心配は私もよく耳にします。それに対する回答はありますか?
Vukicevic氏::
大きく二つあると思います。一つはシングルプレイヤーのゲームにおいてゲームロジックが盗まれたりコピーされてしまうという心配です。しかし,考えてみればお分かりでしょうが,それはほかのプラットフォームでも同じです。ネイティブコードでもバイナリからゲームロジックをコピーしたり盗んだりできてしまいますよね。
4Gamer:
つまりほかのプラットフォームと変わらないということですね。
Best氏:
asm.jsはとても低レベルな言語で,多くの場合使われるのは別の言語から変換されたコードですから,それをいじるのはとても難しいのです。またテキストの注釈などは残っていませんから,とても読みづらいものです。
Vukicevic氏::
Best氏:
asm.jsは非常に高速ですので,ゲームの中にセキュリティのソリューションを埋め込むこともできます。実際,すでにasm.jsを暗号化のために使っているファイル共有のサイトがあります。一般のWebサイトではこのような暗号化を必要としませんが,コードを保護したいゲーム開発者なら暗号化処理を埋め込むという選択肢もあるでしょう。
Vukicevic氏::
もう一つの懸念はオンライゲーム,マルチプレイヤーゲームにおいてコードをいじったハッキングをされるのではという点です。それも結局ほかのプラットフォームと変わらないと思います。
プレイヤーがオンラインゲームで何をするかということについては,確かに見ていく必要はあるとは思います。しかし,ネイティブであっても(オンラインゲームでは)絶えず監視が必要ですし,イタチごっこみたいな状況ですよね。
将来はVR技術のサポートも
4Gamer:
続けてCEDECのセション内容からの質問ですが,UnityやUE4といったゲームエンジンが使えることでゲームデベロッパが家庭用ゲーム機やモバイル,Windows,そしてブラウザに対して同じゲームを開発できるという点を強調されていました。逆にMozillaがHTMLレンダリングエンジン(Gecko)を家庭用ゲーム機に移植するというのも面白いと思うのですが。
Vukicevic氏::
8年くらい前ですか,PS2かPS3の初期の頃に,Geckoエンジンを移植するということが行われたことがあります。もちろんそれは可能だと思いますし,今の家庭用ゲーム機ならなおさら可能でしょう。しかし,ゲーム開発者は(HTML5ではなく)ネイティブ開発を好みますからどうでしょうね。
Best氏:
インディーズゲームに対してならありえるでしょうね。
4Gamer:
任天堂がまさにインディーズゲームの開発者に対してWebKitベースの開発環境を提供しています。同じことをMozillaがほかの家庭用ゲーム機に対してできるのではないですか。
Best氏:
もちろん,そうですね。任天堂は正しい方向に進んでいると思います。ただ,彼ら(任天堂)は標準ではないAPIを埋め込んでしまっています(笑)。彼らにはぜひ,標準の方向に進んでいただきたいと思っています。
Vukicevic氏::
最終的には彼ら(家庭用ゲーム機を作っているプラットフォーマー)がどう考えるかだと思います。
Best氏:
4Gamer:
CEDECではOcculus VRのRift対応ということも今後の計画とおっしゃっていましたね。どのように対応するのでしょうか?
Vukicevic氏::
VRは,デバイスに依存しない形でサポートしたいと思っています。なんらかのパラメータをAPIに導入してVRデバイスを使えるような形です。例えば,ブラウザがRiftを認識して使えるようにするという感じですね。
GoogleダンボールVRヘッドセットをご存じですか?(2014年のGoogle I/Oで発表された段ボールを使う簡易型VRヘッドセット) あのようなものも同じAPIで使えるようにしたいのです。
Best氏:
VRでは入力デバイスも関わってきます。その方向でどういう方法があるのか追求しないといけません。それらの新しい発展をブラウザにすべて取り入れられるかといったことも検討しています。
4Gamer:
WebにVRが持ち込まれたら1980年代のサイバーパンクみたいですよね。
Best氏:
そうですね(笑)。このプロジェクトは研究段階です。いつ発表するとか,そういったことはまだ言えません。市場のニーズに応えられるくらいまで持って行きたいと思っていますが,市場がVRに追いつくまで待たなければならないということもありますし(笑)。
4Gamer:
Firefox OSについても教えてください。日本のモバイル市場はiOSが大きなシェアを持っています。iOSとAndroidで十分だという声も聞くのですが,Firefox OSのどこを推すべきと考えておられますか?
Best氏:
我々はFirefox OSの直接の担当ではなく,それについて話す権限も与えられていないのですが,私達はWebプラットフォームの信者です。Firfox OSはモバイル領域において,それを証明する一つのツールになると思っています。
Vukicevic氏::
Mozillaのミッションの一つがイノベーションです。そして今日ではモバイルデバイスがWebの主要なアクセスの手段になっています。そんな中で,iOSやAndroidは閉ざされた環境です。AppStoreやGoogle Playを通さなければアプリが買えません。
Mozillaとしては,モバイルデバイスをもっとオープンにしなければならないと思っています。Firefox OSは非常にオープンです。Mozillaのマーケットプレースはありますが,どのWebサイトでもアプリをアップすることができますし,そのための環境を完全にオープンにしています。
Best氏:
この点はとても重要です。デバイスを提供する会社が意図する形ではなくユーザーが自由にできるという点が大事なのです。
4Gamer:
Googleもある程度はオープンだと言っていますが……
Best氏:
AndroidはGoogle Play以外のアプリにセキュリティのリスクがあります。Androidのアプリはサンドボックスで実行されますが,アプリに多くの権限が与えられているからです。Googleが言うように,iOSよりはAndroidのほうがオープンかもしれません。ですが,プレイヤーがセキュリティの脅威を感じるという点が障害になっています。ここがFirefox OSとの大きな違いです。
4Gamer:
Firefox OSなら安全ということですか?
Best氏:
そうです。Firefox OSは,Web技術をベースにしていますので,現在のWebページ上のJavaScriptが危険でないのと同様にアプリが完全にセキュアな環境で動作します。
4Gamer:
AppleとGoogleという二つの会社の名前が出ましたが,CEDECではブラウザを開発するほかのベンダーとも密接に協力しているという話がありました。協力は得られていますか?
Vukicevic氏::
4Gamer:
いろいろお話を聞けて参考になりました。最後に4Gamerの読者に何かメッセージをいただけませんか。
Vukicevic氏::
これは開発者の方にも言いたいんですが「Webでびっくりしてみよう」ということですね。Webブラウザで何が可能なのか皆さんに見てほしいです。
Best氏:
この動きはまだまだ始まったばかりです。これからも,もっと興味深いことが続きますよ。
4Gamer:
楽しみにしています。本日はありがとうございました。
Mozilla Japan公式サイト
- この記事のURL: