AIをフル活用してホラーゲームを作る (#4)

# 0.前回のまとめ
前回は以下のゲームの仕様をchatgptに決めてもらいました。
```
1.　ゲーム内ストーリー
2.　バックグラウンド
3.　マップ(間取りなど)
4.　敵(見た目や動き)
5.　プレイヤー(操作やステータス)
6.　アイテム(種類・用途)
7.　クリア条件
8. ゲームオーバー条件
9. 画面遷移
10. 各画面・UIデザイン
11. 必要な効果音リスト
12. 必要なオブジェクトリスト
```
主軸となるストーリーやゲーム内マップの間取り・家具に各敵オブジェクトの攻撃方法だけでなく、
プレイヤーが持つ特殊なステータスやアイテムの使用用途まで考えてもらいました。
<br>
そろそろ見た目を作っていきたいというところで、
今回はshap-eを使って3Dオブジェクトの生成を行っていきたいと思います。

### と思ったんですが、
その過程でちょっと問題発生していて今回は途中経過報告になります。

# 1. アイテム生成
早速shap-eを使って3Dオブジェクトの生成をしてもらいますが、
まずは練習もかねて前回リスト化してもらった小物のアイテムから作ってみようと思います。
```
懐中電灯
カギと鍵
日記や手紙
回復アイテム
錠前解除キット
カメラ
防御アイテム
```

※自前のWindowsPCで環境構築しようと思ったんですが、初心者でわからないことも多いためか手順に沿ってやってもうまくいかずGoogle Colab環境で構築しました。

## A. 懐中電灯生成
早速「懐中電灯」を作ってみます。
プロンプト： the flashlight
とものの数十秒で4つのモデルが生成されました。
4つのモデルから見た目的にいい感じのものを選び以下の懐中電灯が誕生しました。
![スクリーンショット 2023-12-11 20.34.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538222/c3fa90b3-8820-c3f3-062e-eab5f95a814f.png)
ギザギザして変な部分もありますが、全然使えるレベルかと思います！

ところで、ゲームを作るときに3Dモデルを扱う際に重要な注意点があります。
それは、
### モデルのポリゴン数　です。

これはモデルを構成する面の数で、これが多ければ多いほど、
メモリや描画する時の処理負荷があがってしまいます。

参考までにモデルを作る際のポリゴン数は、
スマホでは、300~1500
PC向けでは、1500~4000
が理想的とUnityで言っています。
※画面内にオブジェクトをいくつ配置する想定のゲームかでも変わってくると思います。

このホラーゲームもスマホ・PC両方向けで考えているため、大体1500くらい近辺で作ってくれてるといいなぁ。
blenderというモデリングなどができるCGソフトで確認してみます。
![スクリーンショット 2023-12-11 20.23.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538222/82474d16-a3f2-14e4-09c7-918464af6c5c.png)


26,552!
わお、あまりにも多い。
もしかするとshap-eはゲーム用のモデル作成を想定してるわけではないのか？
※念のため、lowpolyという魔法の言葉を付け足して再生成しても変わらず。

#### ただ、安心してください。
blenderという神ソフトには、"Decimate"という面を減らすためのツールが用意されています。
スライダーをいじるだけで面を何％減らすか自由自在です。

1500近辺にするとこのような感じになりました。
![スクリーンショット 2023-12-11 20.50.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538222/9750cdcb-b0b7-4d6a-5164-7ade000e640d.png)

ちょっと角張ってしまうのでスムーズシェードでなめらかに見えるようにして誤魔化します。

こんな流れで次々作っていきましょう。

## B. カギと鍵生成
プロンプト：　the old house key
プロンプト変えていくつか生成しましたが、どれも微妙でした。
その中でも一番まともなの選びました。
![スクリーンショット 2023-12-11 20.53.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538222/312e93ac-053e-4ef6-57aa-08e0dec3baf6.png)

これもポリゴン数が多いので"Decimate"処理して以下になりました。
![スクリーンショット 2023-12-11 20.54.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538222/2930a0ee-50d9-1b7e-5d4d-efb9aaa6bd66.png)

<br>
とここまではよかったんですが、
問題は次です。

## C. 回復アイテム
プロンプト： a medical kit
回復アイテムといえば薬草系を思いついたんですが、それで回復するのは現実味がない気がしていて、
救急キットのようなものにしました。
![スクリーンショット 2023-12-11 21.04.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538222/6afc1457-b8ca-2d59-48fd-a450853dd4d1.png)

色合いや形的にも回復アイテムだとわかるレベルだと思います。
これもblenderで"Decimate"処理をしていきます。

![スクリーンショット 2023-12-11 21.06.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538222/2aee04b5-40db-d10d-4884-d4691401ada6.png)

### あれ、色が...

と、こんなように使えるレベルではなくなってしまいました。
<br>
まだまだ作るものも多いですし、
より複雑な形をした人型モデルなどではもっと使えないものになってしまうことが考えられるため、
このまま無理に続行するより一旦生成作業をストップして、
別の方法を考える必要があると思っています。
<br>
# 3. 問題点
### 1. 生成されるポリゴン数が多すぎる
複雑な形をしているものではないものを生成してもポリゴン数があまりにも多い。
例えば回復アイテムを人が最低限の面で作ろうとすると、
箱の側面(6)+取っ手(9?)+鍵部分(20くらい?)でできてしまう。
角を丸くすることなど考えるともう少し増えるが、いっても100~200程度じゃないかと思われる。

### 2. 生成されるモデル形式
生成したモデルのフォーマットが.ply形式だった。
そのモデルの情報の中にはすでに色が入っており、それは頂点ごとに座標が決まっているらしい。
なので、下手に"Decimate"で面を減らすと、色合いがおかしくなることは間違いない。

そもそも生成されたモデルが、欲しいポリゴン数＋500~1000程度であればここまでひどくならないはず。
ローポリモデルも生成できれば一番いいんですが。。。

# 4. 方策
### 1. ネタにする
このまま何なのかわからないモデルを使ってゲームを完成させる。
ただ、AIが生成したってことを明確化することで面白おかしくプレイできるんじゃないか。

例えば、発電機を修理するなどの目的が発生した時、まずは発電機を見つけることになると思うが、
どう見ても電子レンジかカバンにしか見えないものが発電機になっていて、
プレイヤーは「これが発電機かよっ！」と突っ込みを入れる。みたいな。
リアクションが取れやすく配信に向いているんじゃないか！？とポジティブに考えてみたり。

ただ、それによってゲームをやめたくなるという方向に向いてしまうとも限らない。

### 2. .objファイルで生成してみる？
この記事書いてて思ったんですが、.obj形式で生成できるらしく試してみる価値あり。
もしマテリアルやテクスチャが別で生成されるのであれば、少しの手間で、
面を減らし、色合いをキープできる可能性がある。
もし.objに限っては色なしで出力されるなら終了。

### 3. 別の3Dモデル生成AIに頼る
このプロジェクトの目的である「AIをフル活用して作る」
これが達成できなければ意味がないので、こちらを優先度高めで今取り組んでいる。
が、環境構築がうまくいかずに苦戦中。。。

### 4. 人が作ったアセットを探す
Unity Asset storeでは人が作成したモデルを売り買いできる。
無料でもクオリティの高いものも多いため、いつも活用させてもらっています。
ゲームが完成せずに終わってしまうよりはマシなので検討しますが、
本目的とずれるため優先度低め。

### 5. ローポリ生成できるようになるまでAIの進化を待つ
最近の進化は早いから余計なことするより実は近道だったりするかも...

# 5. まとめ

以上により少々プロジェクトの進みが遅くなっています。
(他にもパチンコのシミュレーションアプリのアプデもかなり忙しく...)

調べてみたところローポリ(low polygon)のモデルを作るのは、
AIにはまだ難しいようですね。

お金はかかりますが、MeshyというAI生成がかなり優秀そうです。
見た感じクオリティが一番高い。
(※これもローポリはできないようですが。)
https://www.meshy.ai/