Webサイト上で立体的な表現やインタラクティブなアニメーションを目にする機会が増えました。
これらの多くは「WebGL」と呼ばれる技術によって実現されています。
本記事では、WebGL の基本から実装方法、さらに代表的なライブラリである Three.js を使った開発について分かりやすく解説します。
また、当サイトでは GUI操作でパーティクルアニメーションのコードを自動生成できるツールも公開しています。
難しい Three.js コーディングをせずに、パラメータを調整するだけでアニメーションを作成できますので、ぜひお試しください。
目次
1.WebGLとは?
WebGL(Web Graphics Library) とは、ブラウザ上で 3D グラフィックスや 2D グラフィックスを高速に描画するための標準仕様です。
特別なプラグインを必要とせず、Google Chrome、Firefox、Safari、Edge など主要なブラウザでそのまま動作します。
WebGL は OpenGL ES と呼ばれるグラフィックス技術をベースにしており、GPU(グラフィックボード)の性能を活用できるため、以下のような表現が可能です。
- 3D空間の構築
- 光源・影などリアルなライティング
- 高度なアニメーション
- ゲームのような操作性
- インタラクティブなビジュアル演出
企業サイトのメインビジュアルや商品紹介、アート表現、Webゲームなどなど、幅広い用途で活用される技術です。
2. WebGLの実装方法
WebGL はローレベルな API(低階層の処理)であるため、素の WebGL を扱うにはかなり専門的な知識が必要です。
例:
- シェーダー(GLSL)を記述
- バッファの生成
- 行列計算
- テクスチャの管理
- カメラや光源の計算
そのため、初心者がいきなり WebGL を直接書くのは難易度が高く、実務でもほとんどの場合は Three.js のような WebGL ライブラリを使って実装するのが一般的です。
3. Three.jsとは?
Three.js は WebGL を扱いやすくするために作られた、最も有名な JavaScript 3Dライブラリです。
WebGL の複雑な処理を抽象化し、初心者でも比較的簡単に 3D 表現を構築できるのが特徴です。
Three.js の主な機能は以下の通りです。
■ Three.js の特徴
- カメラ、ライト、メッシュ(3Dオブジェクト)などを簡単に扱える
- マテリアルの種類が豊富(Phong, Standard, Physical など)
- モデル(glTFなど)の読み込み機能
- 影、反射、環境マップなどリアルな表現に対応
- アニメーションシステムあり
- パーティクル、ジオメトリ、ポストエフェクトも実装可能
WebGL で本来必要な複雑なコードを Three.js が内部で処理してくれるため、開発コストを大幅に下げつつ本格的な 3D 表現が可能になります。
4. Three.js の基本的な実装手順
実際に Three.js で 3D 表現を作る場合、基本的な流れは以下の通りです。
① シーン(Scene)の作成
3D 空間の「入れ物」を作成します。
const scene = new THREE.Scene();
② カメラ(Camera)の設定
視点・画角を決めるカメラを配置します。
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
③ レンダラー(Renderer)を作成
描画処理を担当するレンダラーを準備し、canvas に描画します。
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
④ メッシュ(立体)を追加
例えば箱(Box)を表示する場合:
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
⑤ ライト(光源)を追加
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(5, 5, 5);
scene.add(light);
⑥ アニメーションループ
function animate() {
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
このように、Three.js を使うことで、数十~数百行のコードで 3D 表現を作成できます。
ジオメトリの形状は公式サイトで確認ができます。
5. Three.js を使うメリット・デメリット
■ メリット
- WebGL を直接扱うより圧倒的に簡単
- 豊富なチュートリアルとサンプルが存在
- Web制作・広告表現の現場でも利用されている
- glTF などの 3Dモデルとの相性が良い
■ デメリット
- 多機能ゆえに最初は慣れるまで少し時間が必要
- 高度な演出の場合はパフォーマンス調整が必要
- ライブラリサイズがやや大きい
とはいえ、WebGL を使った表現の大半は Three.js で十分に実装可能です。
6.パーティクルアニメーション
Three.js を使えば、パーティクル、エフェクト、インタラクションなど高度な表現も比較的簡単に実装できますが、とはいえコード量が多く初心者にはハードルが高い部分もあります。
そこで当サイトでは、GUI操作だけでパーティクルアニメーションを生成し、Three.js 用のコードをそのまま出力できるツールを公開しました。
粒子数や色、速度、サイズなどを画面上で調整するだけで、自動的にサンプルコードが生成されるため、WebGL を触ったことがない方でも簡単に利用できます。
プロトタイプ制作や演出作りの時間が大幅に短縮できますので、ぜひお試しください。
まとめ
WebGL はブラウザ上で動作する高性能な 3D グラフィックス技術であり、Three.js を利用することで比較的簡単に実装できます。
モダンな Web 表現として、企業サイト・採用サイト・ブランドサイトなど多くの場面で導入が進んでいます。
さらに、当サイトの生成ツールは、実装のハードルを大きく下げることができますので、WebGL に興味がある方はぜひ触ってみてください。