こんにちは、Karouです。KUKU BATTLE MASTERには40体以上のモンスターが登場しますが、これらを効率的に生成するために構築したAIパイプラインについて解説します。Claude APIによるデータ生成と、Pythonによる画像処理を組み合わせた仕組みの全体像です。
40体以上のモンスターをどう用意するか
RPGバトルゲームの面白さは、多彩な敵キャラクターとの出会いにあります。同じモンスターばかり出てくるゲームでは、すぐに飽きてしまう。KUKU BATTLE MASTERでは通常モンスター、ボス、隠しボスを合わせて40体以上のモンスターが必要でした。
しかし、1体ずつ手作業でデータを考え、画像を加工するのは膨大な時間がかかります。そこで、Claude APIとPython画像処理を組み合わせて、モンスターの「データ」と「ビジュアル」の両方を効率的に生成するパイプラインを構築しました。
Claude APIによるモンスターデータ生成
モンスターのデータ生成には、Anthropic SDK(@anthropic-ai/sdk)を使ったTypeScriptスクリプトを作成しました。Claude APIに対して、モンスターの名前、説明文、ステータス(HP、攻撃力)、属性などを一括で生成させます。
ここで鍵になるのがプロンプト設計です。KUKU BATTLE MASTERは子ども向けの教育ゲームなので、「怖すぎないけど個性的で、バトルしたくなるような魅力あるモンスター」を出力させる必要がありました。
プロンプトには以下のような指示を含めています。
- 子ども向けであること:グロテスクな要素やホラー要素は排除。かわいさやユーモアを持たせる。
- 個性的であること:名前や特徴が被らないように、食べ物系、動物系、ファンタジー系など多様なカテゴリを指定。
- ステータスのバランス:難易度に応じたHP帯と攻撃力の範囲を指定し、ゲームバランスが崩れないようにする。
- JSON形式での出力:そのままコードに取り込めるよう、構造化されたJSONで出力させる。
AIが生成したデータをレビューし、必要に応じて微調整を加えたうえでゲームに組み込む。完全自動化ではなく、「AIが下書き→人間が仕上げ」というワークフローが、品質とスピードのバランスとして最適でした。
Python画像処理パイプライン
モンスターのビジュアル面では、2つのPythonスクリプトを使った画像処理パイプラインを構築しました。
add_monster.py:画像の前処理
AIで生成した画像やイラストを、ゲームで使えるフォーマットに変換するスクリプトです。画像のリサイズ、フォーマット変換(PNG統一)、ファイル名の自動採番を行います。元画像のアスペクト比を保ちつつ、ゲーム内で統一的に表示できるサイズに調整します。
make_transparent.py:BFSベースの背景除去
こちらがパイプラインの核心です。モンスターのイラストから背景を除去し、キャラクター部分だけを透過PNGにする処理を、BFS(幅優先探索)アルゴリズムで実装しました。PillowとNumPyを使って画像をピクセル単位で処理します。
BFS背景除去の仕組み
- 画像の四辺から探索開始:画像の上下左右の端にあるピクセルをキューに追加し、BFSの起点とする。
- 「白に近い」ピクセルの判定:各ピクセルのRGB値を調べ、背景色(白)に十分近いかを判定。閾値を設定して柔軟に対応。
- 黒い輪郭線で探索停止:ピクセルの明度が閾値以下(=黒い輪郭線)に達したら、そこで探索を止める。これがキャラクターの境界になる。
- 探索済み領域を透過に設定:BFSで到達できた領域(=背景)のアルファ値を0にして透過化。
- 結果:キャラクター内部の白い部分(目のハイライトなど)は保持されたまま、外側の背景だけが透明になる。
一般的な背景除去ツールでは、キャラクター内部の白まで消えてしまうことがあります。BFSアプローチなら「外側から探索して輪郭線で止まる」ため、内部の白は確実に保持されます。シンプルなアルゴリズムですが、イラスト調のモンスター画像には非常に相性が良い手法でした。
5階層のモンスター体系
生成したモンスターは、ゲーム内で5つの階層に分類されています。
- 通常モンスター:約30体。各難易度のバトルでランダムに出現。
- ボス:8体。5連勝で解放される特別な敵。強力だが、倒せば大きな達成感がある。
- 隠しボス:5体。特定条件を満たすと出現する最強の敵。
難易度ごとに出現するモンスターを分けることで、段階的な挑戦感を演出しています。初級では手作りのシンプルなモンスターが登場し、中級・上級になるとAI生成のより個性的なモンスターが追加される構成です。プレイヤーが上の難易度に進んだとき、「見たことないモンスターがいる!」というワクワク感を生むための工夫です。
SVGからPNGへの移行
実は開発当初、モンスターの画像はSVGで作成していました。SVGならコードで生成・編集が容易で、解像度に依存しないメリットがあります。しかし、実際に運用してみると2つの問題が浮上しました。
- 表現力の限界:グラデーションや複雑な色表現がSVGでは難しく、モンスターのビジュアルが単調になりがちだった。
- ファイルサイズ:複雑なSVGは意外とファイルサイズが大きくなる場合があり、最適化されたPNGの方がコンパクトなケースもあった。
最終的にPNGに統一し、前述の画像処理パイプラインで一括変換する方式に落ち着きました。BGMやSEも含めたアセット全体の最適化を行い、PWAとしてのパフォーマンス(特に初回読み込み速度やオフライン対応)を確保しています。
「AI生成→Python画像処理→ゲームに組み込み」という一連のパイプラインにより、モンスターの追加が非常にスムーズになりました。新しいモンスターを思いついたら、数分でゲームに反映できる体制が整っています。