W3C Workshop on Web Games参加レポート

2019/07/03
このエントリーをはてなブックマークに追加

2019-07-16追記
ブレークアウトセッションで提案した3Dシーン用HTMLタグの正式なIssueをSushanthが立ててくれました。議論が盛り上がるといいなぁ。

はじめに

こんにちは。カブクでひみつ開発しているあんどうです(ゲーム開発ではありません)。欲しいひみつ道具は翻訳こんにゃくです。

6月27-28日にレドモンドのマイクロソフト本社で行われた「W3C Workshop on Web Games」に参加して来ました。今回はそのご報告です。

W3C Workshop

そもそもW3C Workshopとはなんでしょう?W3Cのウェブサイトにはこうあります。

W3CのワークショップはW3Cの活動の発展に向けメンバーやその他の人々の初期の参加を促すために開催されます。通常、ワークショップの目的は技術や方針についての考えを交換するために専門家やそれ以外の興味を持った人々を集めることや、W3Cメンバーの緊急の問題を扱うこととなります。

うむ、なんもわからん。事前にこれを読んだときはそう思ったわけですが、実際に参加して得られたワークショップの感触は次のような感じです。

最近アツい、もしくはW3Cとして盛り上げていきたいトピックスについて興味や関係のある人を集め、各人の状況を共有し、実際に対応すべき課題を明確にした上で、それぞれの課題について次のステップを明確にする

W3Cは標準化団体なので「次のステップ」とは当然標準化に向けたステップです。それには次のようなものがあります。リストの下の方にあるものほど標準化に近そうです。

  1. 何もしない
  2. ビジネスグループ(BG)やインタレストグループ(IG)で更に議論を深める
  3. コミュニティグループ(CG)でアイデアを揉む
  4. ワーキンググループ(WG)を設立/再開する

もしかしたら今回だけなのかもしれませんが、ステップの明確化は参加者任せにされるわけではありませんでした。会期中の議論で出た課題をスタッフが記録しておき、ワークショップの最後に時間を取って、ひとつひとつきちんと「この課題についてどうしますか?コミュニティグループを作りますか?担当は誰ですか?」等々オーガナイザの方が確認します。この場でそこまで明確にしてしまうのかと驚きました。ワークショップ自体はあくまでもきっかけを作る場であって、その後の継続した議論の方が本番ということなのでしょう。

W3C Workshop on Web Games

そのようなワークショップをウェブゲームをテーマに行ったのが今回参加した「W3C Workshop on Web Games」です。会期は2019年6月27日・28日の2日間、会場はワシントン州レドモンドのマイクロソフト本社、参加者は100名ほどでしょうか。参加者リストで所属を見るとブラウザベンダーやゲーム会社など強そうな会社ばかりです。参加国としては英語圏かヨーロッパから来た人がほとんどで、後はXiaomiやTencentなど中国系の方がちらほら。ちなみに日本人は私とW3C/Keioの下農さんのふたりだけでした。

全体的な流れ

ワークショップ全体の流れは次のとおりです。

  1. セッション&質疑(1トラック)
  2. ブレークアウトセッション。テーマごとに小グループに分かれて議論(4トラックx2)
  3. 上記ブレークアウトセッションの内容を全体で共有
  4. 会期を通して抽出された各課題について次のステップを決定

セッション

テーマが「ゲーム」だけあってセッションの内容は非常に多岐にわたります。アジェンダはこちらにありますが、グラフィックス、サウンド、マネタイズ、アセット管理、ローカライズ、ネットワーク・・・、とにかく何でもありです。

そのため、全体としてどういう話し合いだったかはまとめようもないのですが

  • ウェブゲームの発見可能性(Discoverability)
  • ウェブゲームのマネタイズ(Monetization)

の二つは参加者共通の問題意識としてよく取り上げられていたように思います。いずれも「オープンプラットフォーム」というウェブの最大の特徴が裏目に出てしまう部分であり、さもありなんと言ったところでしょうか。

以下に各発表をそれぞれ数行でまとめました。ただし実際には発表は単なるきっかけで、その後で行われた議論が本番です。議事録はすべて公開されているので(Day1Day2)気になるものがあれば読んでみるといいでしょう。プレゼンのスライドも後ほど共有されるそうです。

Day1

Day2

ブレークアウトセッション

ブレークアウトセッションは全8セッションあり、4テーマずつ2回に分けて行われました。従って各人2テーマを選んで参加することになります。各ブレークアウトセッションの議事録は公開されていないようですが、以下で太字で記述されているセッションは事前に送付されたPosition statementが元になっているため、そちらで内容を確認できます。それ以外のセッションのテーマはそれまでの議論を元に当日決定しました。ブレークアウトセッションの内容を全体共有した際の議事録はこちらで確認できます。

私が参加したブレークアウトセッションは「We can haz Threads」と「New HTML element to display a 3D scene」の2つです。ひとつめはスレッドの実装についてで、正直あまり話についていけませんでした。ふたつめについてはこの後で説明します。

Breakout Session 1

Breakout Session 2

New HTML element to display a 3D scene

ブレークアウトセッションの「New HTML element to display a 3D scene」ですが、実は私の起案です ( ・`ω・´) ドヤッ!

WebGLが登場してもう10年になるのに、ゲームを除けばWebGLが使われるのは単発プロモーションサイトや広告ばかりで、しかもそれらがやってることは3Dモデルを表示するだけみたいな。そんならもう3Dシーン表示用のHTMLタグを用意してはじめからそれ使ったらええやん

という誰でも思いつく話をしに、遙かシアトルまで突貫で行ってきました。

ゲームにあまり関係なさそうな話でどうかと思ったんですが、Program CommitteeのFrançoisさんが「あんまり聞かない要望だしワークショップに参加登録してPosition statementsだけでも出してみれば」とおっしゃってくれたので、Position statementsを登録しました。その結果ブレークアウトセッションの一枠を頂けたので空気読まずにノコノコ出向いたというわけです。

ウェブゲームがテーマのワークショップで「それはそれとして新しい3Dビューアータグ作ろうよ」という意味不明なブレークアウトセッションにどれだけ人が来るのか(来ないのか)、不安しかありません。ところがいざ始まってみるとありがたいことにThree.jsのmr.doob、MSでEdge作ってる人、Babylon.js作ってる人、WebXRのスペック作ってる人、Khronos Groupの偉い人などなど、強そうな人が勢揃い。

「このテーマでこのメンバーを一室に集めただけで私の仕事は終わった・・・。帰ろう、愛する家族の待つ日本へ・・・」

とも思ったんですが、まぁ立場上そういうわけにはいかず。

実はブレークアウトセッションで何をするのかすらイマイチわかってなかったので、とりあえず5分くらいのスライドを用意して日本から持って行ってました。ところがどうもブレークアウトセッションの起案者に求められるのはスライドを元にした発表ではなく、議論の司会進行のよう。もちろん私の英語力でそんな事はできるわけもなく。仕方ないので空気を読まずに5分間だけLT的な話をし、「私は英語できないので後はよしなに」って言うだけ言った後は、流れ弾に当たらないように部屋の隅で頭を低くしてガタガタ震えていました。こんなメンバーの流れ弾、当たるどころか掠めただけでも死ぬ。

飛び交う銃弾、鳴り響く銃声の中、かろうじて聞こえてきた声だけを書き残しておくと

  • Googleのmodel-viewerや、Babylon.jsを使ったサンプルなど、3Dモデルビューアーウェブコンポーネントはいくつかあるが、ネイティブのタグを用意する意味はあるのか?
  • パフォーマンスが違う。同一画面で3Dビューアーを複数表示した場合にウェブコンポーネントだとWebGLのコンテキストが複数できるという問題もある。ネイティブのタグであればWebGLコンテキストは一つで済む
  • スライドではglTFが使用されていたが、他のフォーマットはどうする?
  • 3Dデータはフォーマットごとに3Dモデルを保持する構造が異なるのでJS APIで3Dシーンの内容を処理する場合は気をつける必要がある
  • glTFは拡張可能だが、そういったものを規格化されたタグで扱うにはどうすべきか?
  • glTFではPBRの結果が環境ごとに異なるけどどうする?
  • videoタグはブラウザが異なってもピクセル単位で結果が同じになるようにテストしているが、3Dビューアタグを作ったとしてそういった確認は可能か?

なんだかそういう感じのことが話されていた気がします。他にもいろいろあったはずですが、いかんせん防爆体勢で床に伏せていたのでよくわかりません。最終的には

  • ファイルフォーマットに関する検討を行うためにKhronosグループとも協力して話し合う必要がある
  • ここで話し合っているメンバーはだいたいImmersive Web Working Groupに参加しているので、まずはそちらで議論を進める

あたりに話が落ち着きました。

始まる前は、的はずれな議題だったらどうしようと不安で仕方がなかったんですが、実際には同じようなことを考えていた人たちがいたようで、ちょうどいいタイミングでちょうどいい機会が得られたと何人かに直接声をかけて喜んでもらえました。ブレークアウトセッションでの議論が活発に進んだだけでなく、今後も継続して話し合われるという流れになっているようで、提案してよかったと本当に思います。

ちなみにブレークアウトセッション後の全体共有は諸手を上げて白旗を振ったらmr.doobが変わって発表してくれました。ありがとうmr.doob。Three.jsはボクのズッ友だょ……!!

ワークショップまとめ

今回のワークショップの結果、先ほどの3Dビューアータグを含めて次のアクションが決まったものがいくつかあります。ただ、残念ながらそのときの私はすでに力尽きていてメモを忘れてしまいました。後ほど公開されたらここに追記します。

最後に

W3Cワークショップについてですが、ある程度英語ができてウェブの標準化に興味がある人はちょっと無理しても参加する価値が大いにあります。ウェブ標準化の源泉(のひとつ)は確実にここです。ワークショップで話し合われた内容が、BG/IGで深められ、CGで詳細化され、WGで標準化されていきます。ウェブの最先端にどういった課題があり、それについてどのようなメンバーがどのような意見を持っているのかを実際に目にするだけでも意味がありますし、そこに自分が関与できるならさらにすばらしいことです。

近日開催されるワークショップの一覧は以下のサイトにあります。興味のあるテーマのワークショップを見つけたら思い切って参加してみるといいのではないでしょうか。

https://www.w3.org/2003/08/Workshops/

謝辞

最後になりましたが、W3C/Keioの下農さんには渡米前から滞在中を通してひたすらお世話になり続けました。本当にありがとうございました。バス移動が多かったこともあり、きっと一人だと遭難していたことでしょう。

おまけ

スターバックス一号店。店の前でみんなが記念写真を取る結構な観光地でした。

Amazon Go一号店。十分に発達したショッピングは万引きと見分けがつかない。

電源付き、WiFi付きのイートインコーナーも併設


株式会社カブクではウェブの標準化に興味のある開発者を募集しています。

https://www.kabuku.co.jp/recruit

その他の記事

Other Articles

2022/06/03
拡張子に Web アプリを関連付ける File Handling API の使い方

2022/03/22
<selectmenu> タグできる子; <select> に代わるカスタマイズ可能なドロップダウンリスト

2022/03/02
Java 15 のテキストブロックを横目に C# 11 の生文字列リテラルを眺めて ECMAScript String dedent プロポーザルを想う

2021/10/13
Angularによる開発をできるだけ型安全にするためのKabukuでの取り組み

2021/09/30
さようなら、Node.js

2021/09/30
Union 型を含むオブジェクト型を代入するときに遭遇しうるTypeScript型チェックの制限について

2021/09/16
[ECMAScript] Pipe operator 論争まとめ – F# か Hack か両方か

2021/07/05
TypeScript v4.3 の機能を使って immutable ライブラリの型付けを頑張る

2021/06/25
Denoでwasmを動かすだけの話

2021/05/18
DOMMatrix: 2D / 3D 変形(アフィン変換)の行列を扱う DOM API

2021/03/29
GoのWASMがライブラリではなくアプリケーションであること

2021/03/26
Pythonプロジェクトの共通のひな形を作る

2021/03/25
インラインスタイルと Tailwind CSS と Tailwind CSS 入力補助ライブラリと Tailwind CSS in JS

2021/03/23
Serverless NEGを使ってApp Engineにカスタムドメインをワイルドカードマッピング

2021/01/07
esbuild の機能が足りないならプラグインを自作すればいいじゃない

2020/08/26
TypeScriptで関数の部分型を理解しよう

2020/06/16
[Web フロントエンド] esbuild が爆速すぎて webpack / Rollup にはもう戻れない

2020/03/19
[Web フロントエンド] Elm に心折れ Mint に癒しを求める

2020/02/28
さようなら、TypeScript enum

2020/02/14
受付のLooking Glassに加えたひと工夫

2020/01/28
カブクエンジニア開発合宿に行ってきました 2020冬

2020/01/30
Renovateで依存ライブラリをリノベーションしよう 〜 Bitbucket編 〜

2019/12/27
Cloud Tasks でも deferred ライブラリが使いたい

2019/12/25
*, ::before, ::after { flex: none; }

2019/12/21
Top-level awaitとDual Package Hazard

2019/12/20
Three.jsからWebGLまで行きて帰りし物語

2019/12/18
Three.jsに入門+手を検出してAR.jsと組み合わせてみた

2019/12/04
WebXR AR Paint その2

2019/11/06
GraphQLの入門書を翻訳しました

2019/09/20
Kabuku Connect 即時見積機能のバックエンド開発

2019/08/14
Maker Faire Tokyo 2019でARゲームを出展しました

2019/07/25
夏休みだョ!WebAssembly Proposal全員集合!!

2019/07/08
鵜呑みにしないで! —— 書籍『クリーンアーキテクチャ』所感 ≪null 篇≫

2019/06/28
TypeScriptでObject.assign()に正しい型をつける

2019/06/25
カブクエンジニア開発合宿に行ってきました 2019夏

2019/06/21
Hola! KubeCon Europe 2019の参加レポート

2019/06/19
Clean Resume きれいな環境できれいな履歴書を作成する

2019/05/20
[Web フロントエンド] 状態更新ロジックをフレームワークから独立させる

2019/04/16
C++のenable_shared_from_thisを使う

2019/04/12
OpenAPI 3 ファーストな Web アプリケーション開発(Python で API 編)

2019/04/08
WebGLでレイマーチングを使ったCSGを実現する

2019/03/29
その1 Jetson TX2でk3s(枯山水)を動かしてみた

2019/04/02
『エンジニア採用最前線』に感化されて2週間でエンジニア主導の求人票更新フローを構築した話

2019/03/27
任意のブラウザ上でJestで書いたテストを実行する

2019/02/08
TypeScript で “radian” と “degree” を間違えないようにする

2019/02/05
Python3でGoogle Cloud ML Engineをローカルで動作する方法

2019/01/18
SIGGRAPH Asia 2018 参加レポート

2019/01/08
お正月だョ!ECMAScript Proposal全員集合!!

2019/01/08
カブクエンジニア開発合宿に行ってきました 2018秋

2018/12/25
OpenAPI 3 ファーストな Web アプリケーション開発(環境編)

2018/12/23
いまMLKitカスタムモデル(TF Lite)は使えるのか

2018/12/21
[IoT] Docker on JetsonでMQTTを使ってCloud IoT Coreと通信する

2018/12/11
TypeScriptで実現する型安全な多言語対応(Angularを例に)

2018/12/05
GASでCompute Engineの時間に応じた自動停止/起動ツールを作成する 〜GASで簡単に好きなGoogle APIを叩く方法〜

2018/12/02
single quotes な Black を vendoring して packaging

2018/11/14
3次元データに2次元データの深層学習の技術(Inception V3, ResNet)を適用

2018/11/04
Node Knockout 2018 に参戦しました

2018/10/24
SIGGRAPH 2018参加レポート-後編(VR/AR)

2018/10/11
Angular 4アプリケーションをAngular 6に移行する

2018/10/05
SIGGRAPH 2018参加レポート-特別編(VR@50)

2018/10/03
Three.jsでVRしたい

2018/10/02
SIGGRAPH 2018参加レポート-前編

2018/09/27
ズーム可能なSVGを実装する方法の解説

2018/09/25
Kerasを用いた複数入力モデル精度向上のためのTips

2018/09/21
競技プログラミングの勉強会を開催している話

2018/09/19
Ladder Netwoksによる半教師あり学習

2018/08/10
「Maker Faire Tokyo 2018」に出展しました

2018/08/02
Kerasを用いた複数時系列データを1つの深層学習モデルで学習させる方法

2018/07/26
Apollo GraphQLでWebサービスを開発してわかったこと

2018/07/19
【深層学習】時系列データに対する1次元畳み込み層の出力を可視化

2018/07/11
きたない requirements.txt から Pipenv への移行

2018/06/26
CSS Houdiniを味見する

2018/06/25
不確実性を考慮した時系列データ予測

2018/06/20
Google Colaboratory を自分のマシンで走らせる

2018/06/18
Go言語でWebAssembly

2018/06/15
カブクエンジニア開発合宿に行ってきました 2018春

2018/06/08
2018 年の tree shaking

2018/06/07
隠れマルコフモデル 入門

2018/05/30
DASKによる探索的データ分析(EDA)

2018/05/10
TensorFlowをソースからビルドする方法とその効果

2018/04/23
EGLとOpenGLを使用するコードのビルド方法〜libGLからlibOpenGLへ

2018/04/23
技術書典4にサークル参加してきました

2018/04/13
Python で Cura をバッチ実行するためには

2018/04/04
ARCoreで3Dプリント風エフェクトを実現する〜呪文による積層造形映像制作の舞台裏〜

2018/04/02
深層学習を用いた時系列データにおける異常検知

2018/04/01
音声ユーザーインターフェースを用いた新方式積層造形装置の提案

2018/03/31
Container builderでコンテナイメージをBuildしてSlackで結果を受け取る開発スタイルが捗る

2018/03/23
ngUpgrade を使って AngularJS から Angular に移行

2018/03/14
Three.jsのパフォーマンスTips

2018/02/14
C++17の新機能を試す〜その1「3次元版hypot」

2018/01/17
時系列データにおける異常検知

2018/01/11
異常検知の基礎

2018/01/09
three.ar.jsを使ったスマホAR入門

2017/12/17
Python OpenAPIライブラリ bravado-core の発展的な使い方

2017/12/15
WebAssembly(wat)を手書きする

2017/12/14
AngularJS を Angular に移行: ng-annotate 相当の機能を TypeScrpt ファイルに適用

2017/12/08
Android Thingsで4足ロボットを作る ~ Android ThingsとPCA9685でサーボ制御)

2017/12/06
Raspberry PIとDialogflow & Google Cloud Platformを利用した、3Dプリンターボット(仮)の開発 (概要編)

2017/11/20
カブクエンジニア開発合宿に行ってきました 2017秋

2017/10/19
Android Thingsを使って3Dプリント戦車を作ろう ① ハードウェア準備編

2017/10/13
第2回 魁!! GPUクラスタ on GKE ~PodからGPUを使う編~

2017/10/05
第1回 魁!! GPUクラスタ on GKE ~GPUクラスタ構築編~

2017/09/13
「Maker Faire Tokyo 2017」に出展しました。

2017/09/11
PyConJP2017に参加しました

2017/09/08
bravado-coreによるOpenAPIを利用したPythonアプリケーション開発

2017/08/23
OpenAPIのご紹介

2017/08/18
EuroPython2017で2名登壇しました。

2017/07/26
3DプリンターでLチカ

2017/07/03
Three.js r86で何が変わったのか

2017/06/21
3次元データへの深層学習の適用

2017/06/01
カブクエンジニア開発合宿に行ってきました 2017春

2017/05/08
Three.js r85で何が変わったのか

2017/04/10
GCPのGPUインスタンスでレンダリングを高速化

2017/02/07
Three.js r84で何が変わったのか

2017/01/27
Google App EngineのFlexible EnvironmentにTmpfsを導入する

2016/12/21
Three.js r83で何が変わったのか

2016/12/02
Three.jsでのクリッピング平面の利用

2016/11/08
Three.js r82で何が変わったのか

2016/12/17
SIGGRAPH 2016 レポート

2016/11/02
カブクエンジニア開発合宿に行ってきました 2016秋

2016/10/28
PyConJP2016 行きました

2016/10/17
EuroPython2016で登壇しました

2016/10/13
Angular 2.0.0ファイナルへのアップグレード

2016/10/04
Three.js r81で何が変わったのか

2016/09/14
カブクのエンジニアインターンシッププログラムについての詩

2016/09/05
カブクのエンジニアインターンとして3ヶ月でやった事 〜高橋知成の場合〜

2016/08/30
Three.js r80で何が変わったのか

2016/07/15
Three.js r79で何が変わったのか

2016/06/02
Vulkanを試してみた

2016/05/20
MakerGoの作り方

2016/05/08
TensorFlow on DockerでGPUを使えるようにする方法

2016/04/27
Blenderの3DデータをMinecraftに送りこむ

2016/04/20
Tensorflowを使ったDeep LearningにおけるGPU性能調査

→
←

関連職種

Recruit

→
←

お客様のご要望に「Kabuku」はお応えいたします。
ぜひお気軽にご相談ください。

お電話でも受け付けております
03-6380-2750
営業時間:09:30~18:00
※土日祝は除く