本文へ移動
ハック!でAI

AIで映像を作る 第6回

AI で作った 3D と映像でゲームを作ってみた ブラウザで遊べる 1 面を公開

佐々木 航@w_sasakiwith Claude Code読了 約22分
浮かぶ芝生の島の上で、白とだいだい色の小さなロボットが石の台に乗り、光の粒に囲まれているゲームの画面

この記事でわかること

  • AI に作らせた 17 件の素材と、プロンプトの全文
  • 3D の向き・大きさ・重さなど、組み合わせでつまずいた所と直し方
  • かかった時間と 392.6 クレジットの内訳、遊べるページ

確認した環境: YOBITSUGI AI で素材を作成(GPT-Image-2.5 Sunburst・Tripo v3.1・Meshy・Kling 3.0・ElevenLabs・Lyria 3.5)/ three.js 0.186.1・esbuild 0.28.2・Blender 5.2.2・Google Chrome 152 で確認 / 2026年10月15日

生成 AI で作った 3D・画像・動画・音を組み合わせて、ブラウザで遊べる小さな 3D のゲームを 1 面作りました。素材は 17 件・392.6 クレジットで、どれも 1 回目の結果をそのまま使っています。つまずいたのは素材の出来よりも組み合わせる所で、3D の向きと大きさがそろわない、そのままでは重い、面を減らすと絵に線が出る、ページの CSP で 3D の絵が読み込めない、の 4 つが大きなものでした。

結果の早見

表。3D 3 個はロボットと結晶が Tripo v3.1、木が Meshy で 210.6 クレジット。編集部は三角形を減らし(3 個で 106.7 MB から 1.6 MB)、向きと大きさと底の高さをそろえ、歩く揺れを付けた。画像 7 枚は GPT-Image-2.5 Sunburst で 18.5 クレジット。編集部は空のつなぎ目を鏡に映した形で消し、JPEG に縮めた。動画 2 本は Kling 3.0 で 147.4 クレジット。編集部は 960 画素の幅に縮めて画面の後ろで流した。音 5 つは効果音 4 が ElevenLabs、BGM が Lyria 3.5 で 16.1 クレジット。編集部は後ろの無音を切り、効果音の大きさを -3 dB にそろえた。プログラムは AI の素材なしで、編集部が three.js で書いた(game.js 492 行)。合計 392.6 クレジット(予算 1,200)、遊べるページは 21 ファイル 6.48 MB、自動の操作でクリアまで 13.9 秒
AI に作らせた物と、編集部が作った物の内訳。AI の素材は 17 件・392.6 クレジット撮影・作図: 編集部
  • AI に作らせた物: 3D・画像・動画・音の 17 件です。クレジットの 91% は 3D と動画でした。
  • 編集部が作った物: プログラムと素材の直しです。島の側面、石の台、光の粒、足もとの影も three.js の形で作りました。
  • 確かめ: ヘッドレスの Chrome(画面を出さずに動かすブラウザ)で、PC とスマホの大きさ(タッチ)の両方を自動の操作でクリアまで動かしました。エラーも、外のサイトへの通信も 0 件でした。

遊んでいる様子

自動の操作で、タイトルからクリアまで遊んだ 20.9 秒の録画。音は、ゲームの中で鳴らした時刻に、同じ音のファイルを重ねたものゲームの録画(素材は生成 AI・プログラムは編集部)
  • GPU の無いヘッドレスの Chrome では 1 秒に 2 コマほどしか描けないため、ゲームの時間を 1/30 秒ずつ進めて撮り、つないでいます。
  • 操作は、ゲームの中の位置を読んでキーを押す、編集部の自動の操作です。13.9 秒で 5 つ集めました。人が遊んだときの時間は測っていません。

作ったゲーム

左の 3 枚は PC の大きさ。タイトルは、動画の上に「ひかりの庭」「はじめる」のボタン。遊ぶ画面は、芝生の島にロボットと木と石の台、左上に「結晶 2 / 5」と時間。クリアは、夕方の動画の上に「クリア!」とタイム 0:14、「もう一度あそぶ」のボタン。右はスマホの大きさの遊ぶ画面で、左下に丸いスティック、右下にジャンプのボタン。PC はキー、スマホはスティックの操作で、どちらもクリアまで動き、コンソールのエラーは 0 件
できたゲームの画面。左が PC の大きさのタイトル・遊ぶ・クリア、右がスマホの大きさ撮影・作図: 編集部
  • 丸い島の上でロボットを動かし、光る結晶を 5 つ集めるとクリアです。1 つは高さ 1 の石の台の上にあり、ジャンプして乗ります。
  • 木が 11 本あり、ぶつかると通れません。カメラは斜め上から追いかけ、回りません。キーの向きと画面の向きが同じです。
  • タイトルとクリアの画面では、AI で作った動画を後ろで流します。
  • 置いたのは、HTML・CSS・game.js、three.js 0.186.1、素材 14 ファイルなど、合わせて 21 ファイル・6.48 MB です。外の CDN(ほかのサーバーから部品を読み込む仕組み)は使っていません。
  • npm の three 0.186.1 の build のフォルダには、縮めた版(.min.js)がありませんでした。esbuild(JavaScript を縮める道具)で縮め、three.js の部分を 2.29 MB から 0.79 MB にしました。MIT ライセンスの全文(LICENSE)と、縮めたことを書いた NOTICE.txt を同じフォルダに置いています。

素材ごとのプロンプトとできた物

渡した文(プロンプト)を、そのまま載せます。同じ文で試せます。

画像: GPT-Image-2.5 Sunburst

設定は YOBITSUGI AI の provider openai と best(GPT-Image-2.5 Sunburst)です。大きさは、空だけ 1536×1024、ほかは 1024×1024 にしました。

上の段は設定画 3 枚。ロボットは目 2・腕 2・足 2・アンテナ 1 がそろい、白い背景で影なし、17.5 秒・2.5 クレジット。結晶は 3 本と灰色の岩で、真ん中がいちばん長い、16.6 秒・2.4 クレジット。木は葉のかたまりが 5 つ(3 つと指示)で ×、白い背景で影なし、19.7 秒・2.4 クレジット。下の段は地面の芝生と白い花の画像で、端どうしの差はとなりの列どうしの 1.4 倍(上下は 1.7 倍)、2×2 に並べて目では継ぎ目が分からなかった、18.6 秒・2.4 クレジット。空は青い空と白い雲で、左右の端どうしの差は 12.2 倍、つなぐと継ぎ目が見えた、15.4 秒・1.9 クレジット
ゲームに使った画像 5 枚。木の葉のかたまりは、指示の 3 つではなく 5 つだった撮影・作図: 編集部

ロボットの設定画(1024×1024):

テキスト
3D ゲームのキャラクターの設定画。架空の小さな探検ロボット 1 体の全身を、正面から見た絵。体は丸いたまご形で、白とだいだい色。顔は黒い画面で、水色の丸い目が 2 つ。短い腕が 2 本、短い足が 2 本。頭の上に、先が丸い緑のアンテナが 1 本。腕を少し下に開いて、まっすぐ立っている。背景は真っ白で、床の影も、ほかの物も描かない。やわらかい陰影の、3D のおもちゃのような質感。文字やロゴは入れない。

結晶の設定画(1024×1024):

テキスト
3D ゲームで集めるアイテムの設定画。青く光る結晶のかたまり 1 つ。先のとがった六角柱の結晶が 3 本、小さな灰色の岩の上から生えている。真ん中の 1 本がいちばん長い。斜め前から見た全体。背景は真っ白で、床の影も、ほかの物も描かない。やわらかい陰影の、3D のおもちゃのような質感。文字やロゴは入れない。

木の設定画(1024×1024):

テキスト
3D ゲームの背景に置く木の設定画。丸くてふっくらした緑の葉のかたまりが 3 つ重なった、背の低い木 1 本。幹は太くて短い茶色。斜め前から見た全体。背景は真っ白で、床の影も、ほかの物も描かない。やわらかい陰影の、3D のおもちゃのような質感。文字やロゴは入れない。

地面の模様(1024×1024):

テキスト
3D ゲームの地面に貼る、くり返して並べられる模様の画像。真上から見た、短い芝生と小さな白い花がまばらに混じった地面。明るい黄緑。影や光の向きが分からない、むらの少ない平らな明るさ。上下左右の端がつながるように描く。物や文字は入れない。

空(1536×1024):

テキスト
3D ゲームの背景に使う空の画像。晴れた昼の空。上は濃い青、下(地平線の近く)は明るい水色。白いふわふわした雲が下半分にいくつか浮かぶ。地面・山・建物・太陽・鳥は描かない。左右の端がつながるように描く。文字は入れない。
  • 部品の数は、ロボットと結晶はすべて合っていました。木は「葉のかたまりが 3 つ」と書きましたが 5 つで、3D もこの絵のまま 5 つです。
  • 地面は、並べても継ぎ目が目立ちませんでした。空は、つなぐと継ぎ目が見えました(「つまずいた所」の 5)。

3D: Tripo v3.1 と Meshy

3D は文章からではなく、上の設定画を 1 枚ずつ渡して作りました。文のプロンプトはありません。ロボットと結晶は Tripo(既定の standard = v3.1)、木は Meshy(既定)です。木だけ Meshy にしたのは、Tripo と Meshy の比較で Meshy のファイルが小さかったためです。

3 行。ロボットは Tripo v3.1・164.7 秒・52.7 クレジット。届いた 3D は三角形 1,480,658・44.1 MB・絵 2048 画素 3 枚で、目・腕・足・アンテナの数は合う。減らした 3D は三角形 19,999・0.80 MB・絵 1024 と 512 画素。結晶は Tripo v3.1・123.6 秒・52.7 クレジット。届いた 3D は 1,406,942・42.7 MB で、結晶 3 本と岩。減らした 3D は 3,999・0.22 MB・絵 512 と 256 画素。木は Meshy・87.7 秒・105.3 クレジット。届いた 3D は 538,028・19.9 MB で、元の絵と同じ 5 つのかたまり。減らした 3D は 12,000・0.59 MB・絵 1024 と 512 画素。減らしたほうは表面の凹凸の絵(ノーマルマップ)を外した
3D 3 個の、届いたままと、面を減らしたあと。左は元にした設定画撮影・作図: 編集部
ロボット・結晶・木の 3 行で、それぞれ 0 度から 300 度まで 60 度ずつ 6 枚。ロボットは 0 度で正面の顔、180 度で白い背中。結晶は 3 本の並びが向きで変わる。木は 5 つのかたまりと茶色の幹。どれも後ろ側まで形と色が付いている
ゲームで使う 3D を、60 度ずつ回して描いた図撮影・作図: 編集部
  • 3 個とも、元の絵の部品の数のとおりでした(ロボットの目・腕・足・アンテナ、結晶 3 本、木の 5 つのかたまり)。元の絵に写っていない後ろ側も、形と色が付いていました。
  • 届いた GLB(3D の形と絵をまとめたファイル)には、動かすための骨(スキン)も、動きのデータ(アニメーション)も入っていませんでした。ゲームでは、体ごと傾けて上下に揺らし、歩いているように見せています。

動画: Kling 3.0

動画は 2 本です。最初の場面の絵を GPT-Image-2.5 Sunburst で作り、その絵を Kling 3.0 に渡しました。絵を作るときは、ロボットの設定画を参考の画像として一緒に渡しています(1536×1024)。

タイトルの場面の絵(GPT-Image-2.5 Sunburst・参考の画像 = ロボットの設定画):

テキスト
ゲームのタイトルの場面の絵。参考の画像のロボット(白とだいだい色のたまご形の体・黒い顔の画面に水色の丸い目が 2 つ・緑のアンテナ)が、明るい芝生の小さな庭のまん中に立ち、空を見上げている。まわりに、青く光る結晶のかたまりが 5 つ、地面から生えている。背の低い丸い木が 2 本。晴れた空と白い雲。画面の上 3 分の 1 は空だけにして、あとで題を重ねられるようにする。やわらかい陰影の、3D のおもちゃのような質感。文字やロゴは入れない。

クリアの場面の絵(同じ設定):

テキスト
ゲームのクリアの場面の絵。参考の画像のロボット(白とだいだい色のたまご形の体・黒い顔の画面に水色の丸い目が 2 つ・緑のアンテナ)が、芝生の上で両腕を上げて喜んでいる。ロボットのまわりに、青く光る結晶のかけらが 5 つ、輪になって浮かんでいる。夕方のあたたかい光。背景は背の低い丸い木と、だいだい色から水色に変わる空。ロボットは画面のまん中。やわらかい陰影の、3D のおもちゃのような質感。文字やロゴは入れない。

タイトルの動画(Kling 3.0・5 秒・16:9 を指定・最初の場面 = タイトルの場面の絵・音なし):

テキスト
ゲームのタイトルの場面の動画。最初の場面の絵のまま、カメラがゆっくり前へ寄っていく。ロボットは空を見上げてから、こちらを向いて小さく手を振る。まわりの青い結晶が、きらきらと光る。雲がゆっくり流れる。画面の上の空の部分は、空のままにする。文字やロゴは入れない。

クリアの動画(Kling 3.0・同じ設定・最初の場面 = クリアの場面の絵):

テキスト
ゲームのクリアの場面の動画。最初の場面の絵のまま、ロボットがその場で 2 回ぴょんぴょん跳ねて喜ぶ。まわりの 5 つの青い結晶が、ロボットのまわりをゆっくり回り、最後に明るく光る。カメラは動かさない。文字やロゴは入れない。

Kling 3.0 で作った 2 本(5 秒ずつ・1 回目の結果)

タイトルの場面。カメラが寄り、ロボットがこちらを向いて手を振るKling 3.0
クリアの場面。ロボットが 2 回跳ね、結晶が回って光るKling 3.0
上はタイトルの場面の 0 秒から 5 秒の 6 コマ。59.3 秒・73.7 クレジット。最初のコマは渡した絵と同じ(画素の差 3.1)で ○。カメラが前へ寄る ○(ロボットの見かけの高さが 1.3 倍)。空を見上げる △(顔を右上へ少し向けた程度)。こちらを向いて手を振る ○(3.5 秒から正面、4〜5 秒に片手を振る)。結晶の数と文字 ○(5 つのまま、文字やロゴなし)。下はクリアの場面の 6 コマ。56.8 秒・73.7 クレジット。2 回跳ねる ○(2.0〜2.4 秒と 2.8〜3.4 秒)。結晶が回り、最後に光る ○(4.8 秒に光がはじける)。カメラを動かさない ○(太陽と木の位置が同じ)。結晶の数 ×(光のあと 5 から 4 に減った)。形の崩れと文字 ○。どちらも 16:9 を指定したが、届いた動画は 1176×784 画素(3:2)
2 本の動画の 1 秒ごとのコマと、指示した動きが出たか撮影・作図: 編集部
  • 数えた 10 項目のうち、○ が 8、△ が 1、× が 1 でした。数えたのは 0.5 秒ごとのコマで、跳ねた回数はアンテナの先の高さを 1/24 秒ごとに測って数えました。
  • × は、クリアの場面の最後です。4.8 秒に結晶がロボットに集まって光がはじけたあと、結晶が 4 つになりました。
  • タイトルの場面の絵には、指示していない柵と遠くの山が描かれていました。動画にもそのまま残っています。
  • タイトルの動画では、ロボットの目の形が 2 回変わりました(笑ったような形と、まばたきのような線)。クリアの動画でも、跳ねる前後に目が細い線の形になりました。3D のロボットの目は丸のままです。
  • 届いた 2 本は 24 コマ毎秒・5.04 秒で、音は入っていません。縦横は、16:9 を指定しましたが 3:2 でした(「つまずいた所」の 6)。

音: ElevenLabs と Lyria 3.5

効果音は ElevenLabs(記録の名前は eleven-sfx)、BGM は Lyria 3.5 で作りました。効果音の文は、YOBITSUGI AI の道具の説明に「英語のほうが当たりやすい」とあるので、英語で書きました。

拾う音(長さ 1 秒を指定・意味: 光る結晶を拾うときの、明るく短い魔法のような音。きらめき 1 回・音楽と声なし):

テキスト
A bright, short magical chime when picking up a glowing crystal in a cute video game. Single sparkle, clean, no music, no voice.

ジャンプの音(0.6 秒を指定・意味: 小さなロボットが跳ねる、やわらかくはずむ短い音):

テキスト
Short cartoon jump sound for a small robot in a cute video game, soft springy boing, no music, no voice.

はじめる音(1 秒を指定・意味: 「はじめる」のボタンの、2 音で上がるやわらかい確認の音):

テキスト
Short soft user interface confirm sound for a cute game start button, two-note rising chime, no voice.

クリアの音(3 秒を指定・意味: ステージクリアの、鈴とマリンバの明るく短いファンファーレ):

テキスト
Short cheerful victory fanfare jingle for a cute video game stage clear, bells and marimba, ends cleanly, no voice.

BGM(Lyria 3.5・長さは指定なし):

テキスト
ブラウザで遊ぶ小さな 3D の箱庭ゲームの BGM。明るくのんびりした曲。マリンバ、木琴、やわらかいシンセのパッド、軽い打楽器。テンポは 100 ほど。歌は入れない。くり返して流せるように、始まりと終わりを同じ調子にする。
拾う音(届いたまま)ElevenLabs(eleven-sfx)
ジャンプの音(届いたまま)ElevenLabs(eleven-sfx)
はじめる音(届いたまま)ElevenLabs(eleven-sfx)
クリアの音(届いたまま)ElevenLabs(eleven-sfx)
BGM(届いたまま。記事に載せるため 80 kbps に変換・174.6 秒)Lyria 3.5

編集部は音を聞いていません。長さと大きさを測った数だけを書きます。

指定した長さ 届いた長さ 後ろの無音 いちばん大きい所 大きさ(LUFS)
拾う音 1 秒 1.04 秒 0.21 秒 -6.0 dB -17.5
ジャンプの音 0.6 秒 0.63 秒 0.26 秒 -2.3 dB -16.1
はじめる音 1 秒 1.04 秒 0.55 秒 -14.4 dB -35.7
クリアの音 3 秒 3.03 秒 1.42 秒 -2.0 dB -12.5
BGM 指定なし 174.6 秒 2.64 秒 0.0 dB -12.4
  • 無音は -50 dB より小さい所、LUFS は人の耳の感じ方に合わせた大きさの単位です(ffmpeg で測定)。
  • はじめる音だけ、いちばん大きい所がほかの効果音より 8〜12 dB 小さく届きました(LUFS では 18〜23 小さい)。

組み合わせるときにつまずいた所

1. 3D の向きと大きさがそろわない

上は受け取ったままの 3 個を正面(+Z の側)から見た絵。ロボットと結晶は横を向き、3 個とも半分が緑の地面の下に埋まり、木だけ大きい。下はそろえたあとで、ロボットと結晶が正面を向き、3 個とも地面の上に立つ。表は受け取ったままの値で、正面の向きはロボットと結晶が +X(横)、木が +Z(正面)。高さは 1.00、1.00、1.90。いちばん下は -0.50、-0.50、-0.95
受け取ったままの 3D と、ゲームのプログラムでそろえたあと(three.js で描いた)撮影・作図: 編集部
  • Tripo の 2 個は、顔や正面が +X の側を向いていました。glTF(GLB の決まり)の正面は +Z なので、そのまま置くと横を向きます。Meshy の木は +Z が正面でした。
  • 大きさも違いました。Tripo は高さが 1.0、Meshy は約 1.9 です。どれも中心が原点にあるので、そのまま置くと半分が地面に埋まります。
  • 直し方は、素材ごとに回す角度とゲームの中の高さを決め、読み込んだあとに底を地面に合わせる、です。
JavaScript
// AI が作った 3D は、向きと大きさがそろっていない。ここでそろえる
const MODELS = {
  hero: { file: 'assets/hero.glb', yaw: -90, height: 1.3 },       // Tripo: 正面が +X・高さ 1.0
  crystal: { file: 'assets/crystal.glb', yaw: -90, height: 1.0 }, // Tripo: 正面が +X・高さ 1.0
  tree: { file: 'assets/tree.glb', yaw: 0, height: 3.8 },         // Meshy: 正面が +Z・高さ 約 1.9
};

2. そのままでは重い(3 個で 106.7 MB)

  • 届いた GLB は、ロボット 44.1 MB、結晶 42.7 MB、木 19.9 MB でした。三角形は合わせて約 343 万です。ブラウザで読み込むには大きすぎます。
  • Blender 5.2.2 を画面なしで動かし、面を間引く機能(Decimate)で、ロボット 19,999・結晶 3,999・木 12,000 の三角形に減らしました。絵は 2048 画素から 1024 画素(色)と 512 画素(ほか)に縮め、JPEG にしました。3 個で 1.61 MB です。
  • 表面の凹凸の絵(ノーマルマップ)は外しました。元の細かい面に合わせて作られた絵なので、面を減らすと合わなくなるためです。

3. 面を減らしすぎると、絵に細い線が出る

上の段は結晶。届いたまま(三角形 1,406,942)は線なし。4,000 に減らした物(絵 512 画素・ゲームで使用)は、面に細い黒い線が出た。4 万に減らした物(絵 512 画素・確かめ用)は線なし。下の段は木。届いたまま(538,028)は線なし。1.2 万に減らした物(絵 1024 画素・ゲームで使用)と、1.2 万で絵を 2048 画素のままにした物(確かめ用)は、同じ所に細い線が出た
減らしたあとの結晶と木の拡大。三角形を 4 万に増やすと線が消えた撮影・作図: 編集部
  • 減らしたあとの結晶と木を拡大すると、届いた 3D には無い黒い線がありました。
  • 絵を縮めずに面だけ減らしても、同じ所に線が出ました。三角形を 4 万に増やすと消えたので、原因は面の減らしすぎです。
  • ゲームの画面では結晶が小さく映るので、4,000 のまま使いました。近くで見せる物は、三角形を多めに残すほうが安全です。

4. ページの CSP で、3D の絵が読み込めない

1 回目の確かめでは 3D が真っ白に表示され、Chrome のコンソールにエラーが 20 件出ました。

  • CSP(ページが読み込める先を決める、セキュリティの決まり)で、fetch で読める先(connect-src)に blob: が入っていないと起きます。公開する先と同じ CSP を付けたサーバーで確かめて、公開の前に気づきました。
  • three.js の GLTFLoader(GLB を読む部品)は、多くのブラウザで、GLB の中の絵を blob: の URL にして fetch で読みます。ここが止められていました。
  • GLTFLoader の中身は書き換えず、プラグインで、絵を <img> で読む TextureLoader に替えて直しました。CSP の img-src で blob: が許されていれば読めます。
JavaScript
const gl = new GLTFLoader();
// CSP で blob: の URL を fetch で読めないときは、<img> で読む TextureLoader に替える
gl.register((parser) => {
  parser.textureLoader = new THREE.TextureLoader(parser.options.manager);
  parser.textureLoader.setCrossOrigin(parser.options.crossOrigin);
  parser.textureLoader.setRequestHeader(parser.options.requestHeader);
  return { name: 'hda_img_textures' };
});

5. 空の画像のつなぎ目

上はそのまま 2 回並べた空。真ん中の赤い点線の所で雲が切れ、青の濃さもずれる。左右の端の差はとなりの列どうしの 12.2 倍。下は右の 1 枚を左右反転してつないだ空で、継ぎ目が消える。three.js の MirroredRepeatWrapping を使い、絵は 1 枚のまま
空の画像を 2 回並べた所の継ぎ目と、鏡に映してつないだ形撮影・作図: 編集部
  • ゲームの空は、画像を丸い天井の内側にぐるりと 2 回貼っています。左右の端が合わないので、そのままでは継ぎ目が見えました。
  • three.js の MirroredRepeatWrapping(絵を鏡に映した形でくり返す設定)にすると、端どうしが同じ画素になり、継ぎ目が消えました。

6. 動画の縦横と、音の長さと大きさ

  • 動画: 16:9 を指定しましたが、3:2 で届きました。画面いっぱいに広げて流すので、スマホの縦の画面では左右が大きく切れます。
  • 効果音: 後ろに 0.2〜1.4 秒の無音がありました。ゲームでは無音を切り、いちばん大きい所を -3 dB にそろえました。はじめる音は 11.4 dB 大きくしています。
  • BGM: 174.6 秒の曲で、165 秒ごろから小さくなって終わり、最後の 2.6 秒は無音でした。「くり返して流せるように」と書きましたが、そのままくり返すと、つなぎ目で音が途切れます。ゲームでは後ろの無音を切り、最後の 1.5 秒を小さくしました。

かかった時間とクレジット

横棒のグラフ。3D はロボット 52.7 クレジット・164.7 秒、結晶 52.7・123.6 秒、木(Meshy)105.3・87.7 秒。動画はタイトル 73.7・59.3 秒、クリア 73.7・56.8 秒。音は BGM 14.0・26.2 秒、クリアの音 1.1・1.4 秒、拾う音 0.4・1.6 秒、はじめる音 0.4・1.5 秒、ジャンプの音 0.2・2.0 秒。画像はタイトルの絵 3.4・19.7 秒、クリアの絵 3.4・17.2 秒、ロボット 2.5・17.5 秒、結晶 2.4・16.6 秒、木 2.4・19.7 秒、地面 2.4・18.6 秒、空 1.9・15.4 秒。合計 17 件で 392.6 クレジット、649.5 秒(同時に 2〜5 件を流した)
素材ごとのクレジットと、頼んでから届くまでの秒撮影・作図: 編集部
  • クレジット: 合計 392.6 です。3D 3 個で 210.6、動画 2 本で 147.4 と、この 2 つで 91% でした。画像 7 枚は 18.5、音 5 つは 16.1 です。
  • 生成を待った時間: 4 回に分け、同時に 2〜5 件ずつ流して、合わせて 4 分 48 秒です(1 件ずつの秒の合計は 649.5 秒)。いちばん長かったのは、ロボットの 3D の 164.7 秒です。
  • 編集部の作業: 作り始めてから、PC とスマホの大きさでクリアまで動くのを確かめるまで、約 1 時間でした(生成を待つ時間を含み、図と記事を書く時間は含みません)。Claude Code での作業の時間で、人が手で作る時間とは違います。
  • 確かめ: three.js を縮めた版に替えたあとも、PC とスマホの大きさでクリアまで動きました。クリアまでは、ゲームの中の時間で 14.0 秒(PC)と 14.6 秒(スマホの大きさ)です。GPU の無い Chrome では 1 秒に 2 コマほどしか描けず、実際には 85 秒ほどかかりました。実際の端末での速さは測っていません。

気をつけること

  • 1 回ずつの結果です。 同じ文で作り直したときに同じ物ができるかは、試していません。
  • 実際のスマホの端末では試していません。 Chrome でスマホの大きさ(390×844 など 5 つ)とタッチの操作を再現して確かめました。
  • 素材の使い方の決まりを確かめます。 YOBITSUGI AI の利用規約では、作った物の権利は利用者にあり、運営会社は権利を主張しません。各 AI 事業者の決まりにも従います。各社の公式のページで確かめたのは、次の範囲です(2026年10月15日)。
    • Tripo: 有料の利用者は商用に使え、著作権も利用者にあります。元にした画像に著作権の争いが無いことは、利用者が確かめます。
    • Meshy: 有料の利用者は、作った物を所有します。無料のプランでは CC BY 4.0 です。
    • ElevenLabs の効果音: 商用に使えます。無料のプランでは elevenlabs.io の表記が要ります。
    • Lyria: Gemini API の規約では、Google は作った物の所有権を主張しません。曲には、聞いても分からない電子の透かし(SynthID)が入ります。
  • Tripo・Meshy・ElevenLabs の説明は、料金のプランごとの決まりです。 ほかのサービスを通して作った場合については書かれていませんでした。GPT-Image-2.5 Sunburst と Kling の決まりは、この記事では確かめていません。公開するゲームに使う前に、各社の決まりを確かめてください。
  • three.js は MIT ライセンスです。 配るときは、ライセンスの全文を一緒に置きます。

まとめ

  • 生成 AI の素材 17 件(392.6 クレジット)と、編集部のプログラムで、ブラウザで遊べる 1 面ができました。
  • 手間がかかったのは組み合わせる所で、3D の向きと大きさ、重さ、面の減らしすぎ、ページの CSP、空のつなぎ目を、プログラムと Blender の側で直しました。
  • 遊べるページは ひかりの庭 です。

参考にした公式の情報

XFacebookはてブLINE

執筆者

佐々木 航@w_sasaki

with Claude Code

プロフィール

株式会社Game 代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

この記事は、Claude Code を使って執筆しました。画面の画像は、検証環境で実際に操作して撮影したものです(引用の画像は出典を記載しています)。内容の誤りはお問い合わせからお知らせください。

連載

AIで映像を作る
全 6 回の目次
  1. 1VFX 映像はつくれる?! 爆発・魔法・変身を動画生成 AI で作ってプロンプトごと公開
  2. 2SF 映像は動画生成 AI でどこまで作れる? 宇宙船・ロボットをプロンプトごと公開
  3. 3映画のようなバトルシーンは AI で作れる? 剣・格闘・空中戦の映像とプロンプトを公開
  4. 4動画生成 AI は物理法則を守る? 落下・水・布・ドミノを作ってコマで確かめた
  5. 5ASMR 動画は AI で作れる? 切る・たたく音と映像のずれを測ってプロンプトごと公開
  6. 6AI で作った 3D と映像でゲームを作ってみた ブラウザで遊べる 1 面を公開(この記事)