背景
物語は5年前から始まった...
そう、クソアプリを作ったところから...
おおよそ、2年周期ぐらいでやってくる、この感情...
「自分はもっとやれるんじゃないか」と...
3度目の正直ということで、今回はクソアプリカレンダーではなく、普通にトライしてみました
結論
成果物はこちらです
PC/スマホに対応したWebアプリです
メモリ・処理的にスマホはちょっと厳しいところありますが
制作工程
実際の時系列通りではないのですが、説明がしやすい順番で書いていきます
キャラクターを作る
確か、きっかけはiPad版VRoid Studioがあることを知ったから
iPadならPencilあるし、もっと上手くできるかも…と
結果的にはiPad版はクラッシュが多くて諦めて、PCで作業しました(pixivさん頑張って!)
で、作ったモデルはこんな感じ
私の個人的な好みとして、目が大きすぎず、ペルソナの副島さんのような絵柄が好きです
もしくはバクマンの小畑さん
勢いで量産します
ここで1個だけこだわりがあります
VRoid Studioでは目頭のあたりまでアイラインが引けませんでした
そのため、Astraに作ってもらったBlenderとMCP経由で通信するアプリを使ってアイラインを加工します
テクスチャを貼る
制服姿は手作業でテクスチャを修正してましたが私服は気にいるのがなかったので1から作ることに
Codexを使ってテクスチャを作りました(Astraだったか、Solだったか忘れました)
バリエーションを作る
カバンを持った姿も欲しかったのでリュックをAstraで作りました
そのまま作るとシェーダーをMToonにしてくれないのでVRoidと同じになるようにMToonを設定してもらいます
表示系を作る
ZennのScrapに書き留めてました
すっぴんの表示と比べて、これぐらい見た目が変わります
アウトライン(輪郭)の線をマテリアルの色の同系色にしたい、つまり顔の輪郭は茶色、青い服の輪郭は紺色みたいな感じにしたいのに1〜2年前のAIではコーディングできない…で諦めていたのですが最近試したらできたのをきっかけに、どんどんレンダリング・ポストプロセスを追加していきました
人だけでなく陰影のコントラストやブルームによる発光、路面の水溜りやアニメ映画っぽい雰囲気を目指して処理を追加
音声を作る
Irodori-TTSを使いました
Irodori-TTSは本当に素晴らしいです
ボイスデザインの機能で各キャラクタの音声を作っていきます
こんな感じでボイス案を作ってもらって選んでいきます
最終的にゲームの台本ができると音声が1000個以上必要だったのでColab CLIを使ってバッチ生成しました
利用したモデルはIrodori-TTSのLargeです
音声を生成し、Whisperで文字起こしをして怪しい奴をピックアップするというのもColab内で実施します
リップシンクを作る
オレオレリップシンクを作ります
本来、音声と口の形は人によって異なるためリップシンクにはキャリブレーションが必要です
ただアニメでそこまで正確なものは不要なのでAIに適当な閾値で作ってもらい、メインヒロインの音声で「あいうえお」の口の形を確認して違和感ないことを確認します
この処理はWASMにする方が向いているので、処理を切り出してWASM化します
また音量によって口の大きさが変わるようにして、小声なのに口を大きく開くことがないようにします
表情を作る
VRoidで作ったVRMにはExpressionが最初から用意されているので、笑顔や怒りなどの表情が最初からあります
デフォルトだと漫画みたいな顔になるのでパラメータを変更します
またカスタムな表情を作ることができるため、いくつか追加します
この例では以下を組み合わせています
- 眉は「悲しい」で目は「嬉しい」
- 頬を赤くするテクスチャ
- 怒りマークを表示するテクスチャ
これで「ラッキースケベが起きてワナワナしているヒロイン感」がでた...はず
モーションを作る
mixamoのFBXでモーションを再生しています
可能であればmixamoを利用します
mixamoは戦い系の動きが多いので日常生活の動きがあまりないので追加で用意する必要がありました
ardy-miniを試す
ardyはちょっと重たいのでminiで試してみました
ガチャ要素が強く、歩くとかそういう動きは良いのですが、腰に手を当てて立つとか結構できない動きが多いので諦めました
イラストから作る
Codexでイラストを生成し、Colab CLIで画像→SAM3D Bodyの姿勢推定をします
その後、接地・IKの制約を入れながらmixamo形式のFBXに変換します
破綻をチェック
衣装の貫通を確認し、下の衣装のテクスチャを消したり肌マスクをかけたりします
AIで自動チェックできないかと思ってやってみましたが、自分でわかっていた以上の発見はなかったです
また、体の貫通があるのはわかっているのですがOpusで調整してもなかなか...というところなので、「人間はその方向に関節は曲がらない」というもの以外は修正できていないところがあります
背景を作る
背景には1枚絵の背景と、簡易的な3D背景を作りました
簡易3Dは箱や板にテクスチャを貼ってそれっぽく見せている背景です
遠近感を出すために表示時は遠くの風景はぼかしが入るようにしています
Opus+Codexでガリガリ作ってもらいます
ここまででエンジンとStudioアプリが完成
こんな感じでStudioアプリができました
台本があれば簡単な指示でAIがシナリオを作れるようになりました
解像度的に顔のアップとかは粗が目立つので、「極端な接写をしない」などのルールをインストラクションとして書いてます
効果音を作る
効果音ラボさんの効果音を利用していましたが、探すのが面倒になってきたのでStable Audio Openで生成するようにしました
新しいモデルでもないし、ちょっと怪しい音もありますが、8割ぐらいはまあいいかな・・・という感じ
これもColabでバッチ生成しました
BGMを作る
Sunoは無課金ユーザーなのでGeminiでLyriaを使って音楽を作りました
まあまあ良いです
ゲームシステムを作る
よくある感じのゲームシステムで作りました
- 1日X回行動すると1日が終わる(今回は2回)
- 強制イベントが発生する
- 選択肢で好感度・フラグが制御される
- 選択肢でオートセーブがされる
オリジナリティとしては夜にヒロインから連絡(TV電話、通話、メール)が来ることがあります
すべてを3Dで準備はできないのでカットイン画像や一枚絵画像を組み合わせて誤魔化します
最近はTiboリセットが頻発してるのでガンガン作ります
パフォーマンスチューニング
事前ロード
VRMモデルが結構重たいのでモデルはアプリSTART時に事前ローディングします
音声・背景はシナリオ開始前の幕間でローディングします
メモリリーク対応
通しで動かしてるメモリ利用量が1GBを超えてました
調べるとThree.jsのキャッシュは消えずに溜まることがわかったのでキャッシュはしないようにしました
モバイル対応
レンダリングを色々いじった関係で描画が重たいです
そのため一定のフレームレートを下回ると一部レンダリング処理をOFFにします
そのほか、処理を何回か見直して計算回数を減らしました(例えばThree.jsのgodraysの処理を見直すなど)
シナリオを書く
以下の流れで作りました
- 出だしを考える
- Gemini 3.8 Flashと壁打ち
- Gemini 3.8 Flashに全部書いてもらう
- Opus 5.5で見直して修正してもらう
- 自分で読んで書き換える
作業にはオレオレ執筆ツールを使ってます
結果、5万文字ぐらいのボリュームになってます
正直、気力が持たず、結構妥協している部分があり、展開が変・言葉足らずだったりヒロインによって作り込みの差があります...
テストプレイ
プレイして、気になった点をメモに書き留め、Opusに丸投げを繰り返す日々です
おまけでBoothでモデルを公開
GitHubのpublicなリポジトリにもモデルは入ってるのですが初めてBoothにも出品してみました
無料なので気に入ってもらえたら宣伝しておいて下さい笑
完成?
たぶん、いつまで経っても完成はしないと思うのでキリの良いところで公開しちゃいます
感想
個人的にはだいぶ頑張ったのですが、ぶっちゃけそんなにプレイはされないだろうなとは思ってます笑
またその道のプロの方をXで見かけると、当然ですが全くレベルが違うなと...
このシリーズは1回終わって、次を作るぞ
この記事について気に入ってもらえたら、是非「いいね」やXのフォローなどお願いします


























