ウェブ上の 3D ゲームの概要
===============

ウェブでのリッチなゲーム体験を実現するためには、HTML の `<canvas>` 上にレンダリングされる WebGL が武器となります。 WebGL は基本的にウェブ用の OpenGL ES 2.0 であり、リッチでインタラクティブなアニメーションや、もちろんゲームを構築するためのツールを提供する JavaScript API です。ハードウェアアクセラレーションによる JavaScript で、動的な 3D グラフィックを生成し、レンダリングすることができます。

ドキュメントとブラウザーの対応
---------------

WebGL プロジェクトのドキュメントと仕様書は、 Khronos Group が管理しており、ほとんどの Web API のように W3C が管理しているわけではありません。最近のブラウザーでの対応は、モバイルでも非常に優れているので、あまり気にする必要はありません。主要なブラウザーはすべて WebGL に対応しており、使用する端末でのパフォーマンスを最適化することに集中すればよいのです。

近い将来、 WebGL 2.0（OpenGL ES 3.0 に基づく）のリリースに向けた継続的な取り組みがあります。これにより、多くの改善がもたらされ、開発者は現在の強力なハードウェアを使用して最新のウェブ用のゲームを構築することができるようになります。

基本的な 3D 理論の説明
-------------

3D 理論の基本は、3D 空間で表される形状を中心としており、座標系を使用してそれらの位置を計算します。必要なすべての情報については、基本的な 3D 理論の説明の記事を参照してください。

高度な概念
-----

WebGL を使用すると、さらに多くのことができます。シェーダー、衝突検出、または最新のホットトピックであるウェブ上の仮想現実など、詳細に掘り下げて学ぶ必要のある高度な概念がいくつかあります。

### シェーダー

それ自体は別の話であるシェーダーについて言及する価値があります。 シェーダーは、グラフィックパイプラインによって直接実行される C と同様の構文を持つ特別な OpenGL シェーディング言語である GLSL を使用します。 これらは、頂点シェーダーとフラグメントシェーダー（またはピクセルシェーダー）に分割できます。 前者は形状の位置を実際の 3D 描画座標に変換し、後者はレンダリングする色やその他の属性を計算します。 それらの詳細については、GLSL シェーダーの記事を必ず確認してください。

### 衝突検出

衝突検出のないゲームを想像するのは難しいです — 何かが何かにぶつかっているときには、常にそれを解決する必要があります。 以下に学ぶことができる情報があります。

* 2D の衝突検出
* 3D の衝突検出
### WebVR

仮想現実の概念は新しいものではありませんが、Oculus Rift などのハードウェアの進歩と VR ハードウェアから情報をキャプチャして JavaScript アプリケーションで使用できるようにするための (現在実験的な) WebVR API のおかげで、ウェブに押し寄せています。 詳細については、WebVR — ウェブによる仮想現実をご覧ください。

また、A-Frame を使った基本的なデモの構築の記事では、 A-Frame フレームワークを使用して仮想現実の 3D 環境を構築することがいかに簡単であるかを示しています。

ライブラリーとフレームワークの台頭
-----------------

生の WebGL のコーディングはかなり複雑ですが、プロジェクトがより高度になるにつれて、長期的にはそれを理解する必要があります（始めるには、WebGL ドキュメントを参照してください）。 実際のプロジェクトでは、開発をスピードアップし、作業中のプロジェクトを管理するのに役立つフレームワークをたぶん使うことになるでしょう。 3D ゲームのフレームワークを使用すると、使用するツールによって多くの処理が行われるため、パフォーマンスを最適化するのにも役立ちます。 これにより、ゲーム自体の構築に集中できます。

最も人気のある JavaScript の 3D ライブラリーは Three.js で、一般的な 3D 技術をより簡単に実装できる多目的ツールです。 他にもチェックする価値のある人気のあるゲーム開発ライブラリーやフレームワークとして、 A-Frame、PlayCanvas、Babylon.js などは、豊富なドキュメント、オンラインエディター、活発なコミュニティを備えた、最もよく知られたものです。

### A-Frame を使った基本的なデモの構築

A-Frame は、3D および VR エクスペリエンスを構築するためのウェブフレームワークです。 内部的には、宣言型のエンティティコンポーネントパターンを備えた Three.js フレームワークなので、 HTML だけでシーンを構築できます。 デモを作成するステップバイステップのプロセスについては、A-Frame を使った基本的なデモの構築のサブページを参照してください。

### Babylon.js を使った基本的なデモの構築

Babylon.js は、開発者が使用する最も人気のある 3D ゲームエンジンの 1 つです。 他の 3D ライブラリーと同様に、一般的な 3D 機能をより迅速に実装するのに役立つ組み込み関数を提供します。 開発環境のセットアップ、必要な HTML の構造化、JavaScript コードの記述など、Babylon.jsの 基本的な使い方については、Babylon.js を使った基本的なデモの構築のサブページを参照してください。

### PlayCanvas を使った基本的なデモの構築

PlayCanvas は、GitHub でオープンソース化された人気の 3D WebGL ゲームエンジンであり、オンラインで利用可能なエディターと優れたドキュメントを備えています。 より高度な詳細については、PlayCanvas を使った基本的なデモの構築のサブページを参照してください。 また、PlayCanvas ライブラリーとオンラインエディターを使ったデモの作成方法については、さらに詳しい記事を参照してください。

### Three.js を使った基本的なデモの構築

Three.js は、他のライブラリーと同様に、巨大なアドバンテージを提供します。 何百行もの WebGL コードを記述して興味深いものを構築する代わりに、組み込みのヘルパー関数を使用して、はるかに簡単かつ迅速に構築できます。 デモを作成するステップバイステップのプロセスについては、Three.js を使った基本的なデモの構築のサブページを参照してください。

### その他のツール

Unity と Unreal はどちらも asm.js を使用してゲームを WebGL にエクスポートできるため、それらのツールとテクニックを自由に使用して、ウェブにエクスポートするゲームを構築できます。

![](/ja/docs/Games/Techniques/3D_on_the_web/shapes.png)

次に行くべきところ
---------

この記事では、現在利用可能な技術で可能なことの表面に触れただけです。WebGL とその上に構築されたライブラリーやフレームワークを使用すれば、ウェブ上で没入感のある、美しく、高速な 3D ゲームを構築することができます。

### ソースコード

このシリーズのデモのすべてのソースコードは GitHub にあります。

### API

* Canvas API
* WebGL API
* WebVR API
### フレームワーク

* Three.js
* PlayCanvas
* Babylon.js
* A-Frame
### チュートリアル

* Three.js を使った基本的なデモの構築
* PlayCanvas を使った基本的なデモの構築
* Babylon.js を使った基本的なデモの構築
* A-Frame を使った基本的なデモの構築