0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIを活用して本格的3Dビリヤードゲームを作ってみた話

0
Last updated at Posted at 2026-05-26

はじめに

今回、AIを活用して本格的な3Dビリヤードゲームを開発しました。Three.jsを使った3Dレンダリングと物理演算、さらにCPU対戦機能まで実装できたので、その記録と学びをまとめます。

作ったもの

本格的3Dビリヤード
🔗 https://billiards-game.vercel.app/

ブラウザ上で動作する3Dビリヤードゲームです。CPU対戦も可能で、リアルな物理演算によるボールの挙動を楽しめます。

image.png

image.png

操作方法

操作 方法
カメラ回転 右クリック押下中にカーソル移動
視点移動 スペース押下中にドラッグまたは矢印キー
ズーム ピンチ操作
ショットモード切替 左クリック
ショット実行 ショットモード中にドラッグ状態を解除

アプリの特徴

1. 自由な視点切替

プレイヤーが自由にカメラアングルを変更可能。狙いを定めやすい角度から戦況を確認できます。(視点操作はマウス推奨)

2. 2つのゲームモード

・9ボール
1〜9番のボールを順番に狙い、9番ボールをポケットに入れた方が勝利するクラシックルール。

・ベーシックゲーム
順番に関係なく、より多くのボールをポケットに入れた方が勝ちとなるシンプルモード。ビリヤード初心者にもとっつきやすいです。

3. CPU対戦機能

一人でも楽しめるよう、CPUとの対戦モードを実装。
CPU機能は生成AIではなく純粋なアルゴリズム(幾何計算) だけで実現しています。

ショット選択のロジック

CPUは以下の優先順位でショットを選びます。

① 直接ショット(ストレート)
キューボールからターゲットボールへの経路に障害物がないか判定します。経路チェックには「レイキャスト」という手法を使っており、光線を飛ばして途中のボールに当たるかどうかを数学的に計算しています。

② バンクショット(クッション)
直接狙えない場合、クッション(壁)に1回当てて間接的に狙います。角度の計算には鏡像法を使っています。ターゲットボールの位置を壁に対して折り返した「仮想ターゲット」を作り、そこへの直線がそのままバンクショットの角度になります。

③ フォールバック
どちらも無理な場合は、ターゲット方向へ弱めに打ちます。ファウルを受け入れる処理です。

「人間らしさ」の工夫

計算上は一瞬でショットが確定しますが、そのまま即打ちするとロボットっぽくなります。そこで2つの工夫を加えています。

  • 思考時間の演出:0.6〜1.0秒のランダム遅延を入れてから打ちます
  • 意図的な誤差:計算した正確な角度に小さなランダム誤差を加えています。距離が遠いほど誤差の影響が大きくなるため、自然と長距離ショットが難しくなります

4. リアリティのある物理演算

ボール同士の衝突、クッションの反射、摩擦による減速など、現実に近い物理挙動を再現しています。

技術スタック

  • Compound Engineering(複合的なAI活用開発手法)
  • Claude 4.7 Opus
  • Three.js(3Dレンダリングライブラリ)
  • Vanilla JavaScript(ESModules)

開発を通じて得た学び

Three.jsのようなライブラリ開発もAIで容易に

Three.jsは3D描画ライブラリとしては有名ですが、3D空間の座標計算やカメラワーク、ライティングなど学習コストが高い印象でした。しかしAIに任せることで、ライブラリの知識が浅くても本格的な3Dアプリケーションを構築できることを実感しました。

CPU機能もAIで実装可能

ビリヤードのCPUロジック(どのボールを狙うか、どの角度で打つかなど)も、AIに指示するだけで実装できました。ゲームAIの実装ハードルが大きく下がっています。

盤面のリアルな表現が難関だった

今回の開発で一番詰まったのが、盤面をリアルに見せる部分です。たとえばポケットの形状が実際のビリヤード台より広く、ボールが入りやすすぎるといった問題があり、「それらしく見える」状態にもっていくまでに何度も試行錯誤しました。

解決策として、実際のビリヤード台の画像をプロンプトとして与え、視覚的な情報をAIに共有しながら調整を進めました。それでもなかなかうまくいかず、AIに画像を検索・参照させたり、複数の生成AIモデルを使い分けたりしながら対応しました。

物理演算のロジック自体はAIが得意とするところですが、ビジュアルのリアリティはAIへの指示の言語化が難しく、最も時間がかかった部分でした。

・最初に出力された盤面
image.png
ポケットの形状が実際のビリヤード台と異なり、ゲームとしての難易度が下がってしまっていた。

AIが得意な開発領域が見えてきた

今回の開発で、AIで作りやすいアプリの特徴が明確になりました。

  • UIがシンプルなもの
  • ルールが明確化されているもの
  • メジャーなゲームジャンル

ビリヤードのように 「ルールが世界共通で明確」 なゲームは、ロジック面ではAIが学習データから多くの知識を持っているため、開発がスムーズに進みます。

一方で、今回の一番の詰まりポイントである盤面のリアルな表現のように、ビジュアルの品質調整はルールの明確さに関係なく難しいと感じました。「もっとリアルに」「添付画像のように作って」といった抽象的な要望はAIへの指示が難しく、前回作成したピンボールアプリと同様に試行錯誤が必要でした。

前回作成したピンボールアプリ

まとめ

AIを活用することで、これまで個人開発では手が出しづらかった3Dゲーム開発のハードルが大きく下がりました。特に「明確なルールがあるメジャーなゲーム」はAI開発との相性が抜群です。

これからゲーム開発に挑戦したい方は、まずはルールが明確なクラシックゲーム(チェス、オセロ、ビリヤードなど)から始めると、AIの恩恵を最大限受けられると思います。

ぜひ一度プレイしてみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?