ガジェット,時事ネタ,CGCeVIO AI,ChatGPT,Unity,パピフォン

何かと話題のChatGPT

 最近、何かと耳にしたChatGPT。自分も少し使ってみてはいたのですが、検索結果の真偽性はともかくとして、やはり会話形式で応答があるのはなんとなく人にやさしい感じがします。

 回答の仕方も人とチャットしているかのように自然だし、プロンプト的なものを使ってちょっとしたキャラクター付けも出来るみたいだし、そしてAPIも公開されていて、既にいろいろ作られている方も見掛けましたので、自分もその辺を参考にさせて頂きながら、何か作れないかなと思って合間の時間でちょこちょこ弄ってみました。

とりあえずパピフォンとお話しできた

 で、合間の時間で少しずつ進めて、なんとなく動作するところまで作ってみたのがこちら。

ChatGPTを使って自作キャラと会話してみた!

まぁ、ローコストで作ったので至らぬ点は多いのですが、なんとなく会話は成立していると思います。

会話の仕組みは簡単

 仕組み自体は誰しもが思いつくであろう組み合わせです。

 ベースはUnityでモデルはいつも通りパピフォンのVRMも読み込んでいます。で、前回のMV動画同様に目の動きにRealistic Eye Movement、口パクにはuLipySyncを今回はリアルタイム処理で使用、あと体が硬直しているとおかしいので少しだけ動くモーションを割り当てています。

 で、この上に質問と回答の仕組みを載せています。

マイクからの入力を文字列にする

 質問はマイクからの入力をUnity上で一旦AudioClipとして録音します。で、これをAudioClipからWavファイルに保存します。このWavファイルをChatGPTと同じOpenAI社のWhisperのAPIに投げています。他にもソリューションあるのかもですが、ひとまずChatGPTが話の起点だったので、同じOpenAIアカウントとAPIキーが使えるのが便利だなという事で。

 WhisperからはWavファイルから解析した日本語文字列が返ってくるのでこれを問い掛け文字列として受け取ります。

 UnityからWhisperに投げる所の実装については以下のサイトの記事が非常に参考になりました。ありがたし。

■Whisper APIをUnityで動かす
https://zenn.dev/dara/scraps/b8e2c8e994b384

問い掛け文字列をChatGPTに投げる

 で、問い掛け文字列が出来た所でこれをChatGPTのAPIに投げています。この時、ChatGPTに前提として少しだけキャラ設定的なものを付加しています。なので、通常のWebから検索的に質問を投げた時とは少し違った雰囲気で返答文字列が返ってきています。動画の中で語尾にやたら「ワン!」が付いているのとかが分かると思います。

 ChatGPTに投げる部分の実装は以下のサイトが非常に分かりやすいと思います。

■ChatGPT APIをUnityから動かす。|ねぎぽよし
https://note.com/negipoyoc/n/n88189e590ac3

 そう、いつもお世話になっているLuppetの作者様の記事です。つよい。

ChatGPTの返答をCeVIO AIでキャラクタの声にする

 ChatGPTから返された(キャラ付けされた)返答文字列は一旦テキストファイルに出力しています。で、今度はこれをキャラに喋らせる為にCeVIO AIにかけるのですが、ちょっとここで細工が必要になりました。

 CeVIO AIにコマンドラインからテキストファイル→キャラの発声Wavファイルが出来れば良かったのですが、標準ではその機能な無いようです。ただ、CeVIO AIはVisualStudio 2019の環境で使えるDLLの情報を公開してくれているので、今回はこれを使って指定したテキストファイルからキャラの発声Wavファイルを生成するコンバータを別途作成しました。

 作成しました…とはいえここに上がっているサンプルコードをちょっと改造してやっただけなのですが(^^; とても参考になりました、ありがとうございます。

■CeVIO AI ユーザーズガイド | .NETアセンブリとして利用
https://cevio.jp/guide/cevio_ai/interface/dotnet/

キャラクタの発声WavファイルをUnity上で再生する

 CeVIO AIから出力されたWavファイルが出来たらそれをUnity側にAudioClipとして読み込み、そのAudioClipをUnity上に用意してあるAudioSourceオブジェクトに設定してPlay()すれば応答完了となります。AudioSourceにはuLipSyncの設定がされているので発声を解析しながら適した口の形状で口パクしてくれます。

キャラの性格付けが面白い

はたしてAIはアイスクリームを食べるのか。

 動画の中ではパピフォンが(事情を知っていると)好き勝手喋ってますが、実はChatGPTに前提(content)として投げている設定は次の文字列だけだったりします。

「"あなたはパピフォンという名前の16歳の少女です。元気よく話します。喫茶店でアルバイトをしています。犬が大好きです。おすすめの犬種はボストンテリアです。語尾に「ワン」をつけて下さい。"」

 動画の中では最初に自己紹介をしてもらっていますが、そこはこの設定に忠実に述べているようです。

 2つ目の質問は「普段は何をしていますか?」と既に無茶振りな感じの質問をしていますが、「普段は学校に行っている」とか「学校が終わるとアルバイト」とか返ってきて驚きました(^^;。直結するような設定は無いのですが、ChatGPTが知っている"元気の良い16歳の少女"の普段がこんな感じで記憶されているのでしょうか…。

 また、「犬が大好きです。」の設定の影響で「家に帰ると犬と遊んだり散歩に行ったりする」という回答が導かれているようです。「休日は映画を見たり旅行に行ったりする事もある」とかは、もうキャラを作った僕すらも知らなかった設定です(笑)。

 3つ目の質問はうちのリアル娘ちゃんが近くでアイスクリームうんぬん…喋ってたのを聞いて、咄嗟に質問したという無茶振り極みのような質問です。生きてるうちにAIにアイス食べるか聞く時代がこようとは・・・(^^;。でも、ここでもちゃんと「16歳の少女で元気よく話す」という設定が効いているのか、「アイスクリーム大好き」とか「一緒に食べると嬉しいです」とか言われちゃいます。まるでこちらの心情まで察してくれているかのように…スゲー。

課金の話

 そんな感じでキャラ付けも出来るので、トコトン細かい所までの設定や膨大なシナリオを決めて、キャラクターとして細かく制御も出来そうではあるのですが、そうするとちょっと気になってくるのがトークンの使用量。

 ChatGPTはただWeb版を使うだけなら無料ですが、APIを使うにあたってはAPIキーを取得して作成したアプリケーションに埋め込む必要があります。このAPIの取得にはChatGPT Plusへ加入が必須となっており、その料金は月額20ドル(4/17日現在、日本円で2600円ぐらい)となっています。

 加入直後は数ドル分のトークンが付いてくるので、それで充分簡単なアプリの動作チェック等は行えますが、消費後もしくは有効期限が切れた後は、使用したトークンの量に併せて課金が発生します。

 トークンってなんやねん・・・って事になると思うのですが、端的に言ってしまえば送受信する文字列の量なのですが、この辺の計算の仕方が英語と日本語で違ったりで、日本語の方がやや使用量多めになる傾向があるようです。

 トークン使用量の注意点については以下のサイトの記事が分かりやすかったです。

 ■ChatGPTのAPIの利用料金を詳しく解説!使い方次第でトークン増大で高額費用も
 https://auto-worker.com/blog/?p=7459

 ■Chapter 09 OpenAIのAPI料金の計算方法
 https://zenn.dev/umi_mori/books/chatbot-chatgpt/viewer/how_to_calculate_openai_api_prices

 要は細かいキャラ付けや膨大なシナリオを設定する事は出来ますが、それらはChatGPTに質問を投げる度に毎回送信する必要がある為、トークンの使用量が跳ね上がる事になります。また、過去の質問に関連した会話も出来ますが、それにはその過去のやり取りを添付して、新しい質問を投げる必要があるので、これも処理の仕方によってはトークンの使用量が爆増する事になりそうです。

 まぁ、とはいえ1000トークンで0.002ドルだと個人で遊んでる限りは結構使っても大した額は行かなそうではあります。どうしても怖ければOpenAIのサイトから使用量のリミッターが掛けられるようになっているので、それを設定しておけば安心かと。

 で、ちょっと気になっているのが、課金はアプリケーションに埋め込まれたAPIキー→APIキーを持っているOpenAIのアカウントの支払い情報、と紐づく訳ですが、となるとうっかりアプリケーションにAPIキー仕込んだままアプリケーションを公開しようものならトークン使用量の請求は全て作者に来る訳です(^^; 独自の課金システムでも持っているなら良いのかもですが、個人でちょこっと遊ぶ分にはそんな事も出来ないしなぁ…という所です。

 アプリケーション側で入力欄作ってAPIキーの取得をユーザにお願いして入力して貰うという手もありそうですが、これはこれでChatGPT Plusの加入が必須になるので使える人は限定的になりそうです。

 この辺そもそもどうするのが一般的なのかもよく知らないのでちょっと興味ある所ではあります。

合成音声側の話

 実は当初、ChatGPTからの回答の読み上げにはCeVIO AIでは無く、VOICEPEAKを使おうと思っていました。というのもVOICEPEAK本体にコマンドライン実行機能がありまして使用が手軽そうだったので。以下のサイトを参考にさせていただきました。

voicepeak v1.2.1のコマンド – takashiskiのブログ
https://takashiski.hatenablog.com/entry/2023/01/13/235249

 今回のアプリケーションの中には既にこのコマンドラインの書式でVOICEPEAKを起動するクラスを実装済みで、現にWavファイルも出力されるのですが、この出力されたWavファイルで躓きました。

 ちょっと原因がまだ確定していないまま放置になっているのですが、実行時に作成されたWavファイルをUnityのAudioClipに読み込む際に、どの読み込みアセット使っても尽く失敗するんですよね…。Wavっててっきりベタしか無いものだと思ってたんですが、エラーの内容やヘッダーの情報見る限り、圧縮か何か掛かっている雰囲気がありました。ACMって奴がそれなのか…という気もするのですが、情報が少なく詳細不明。もしこれならオプションで非圧縮に出来ると良かったのですが…。

 で、今回のアプリケーションではパピフォンを使っていたので、よく考えたらいつも声当ててるのCeVIO AIの小春六花だなーという事でCeVIO AIに変更。調べたら、CeVIO AIは本体にはコマンドライン実行機能は無いようなのですが、前述の通り、CeVIO AIとのやり取りを仲介してくれるDLLの仕様が公開されている為、こちらを利用してコマンドライン用のコンバータ(exe)を作成した流れになっています。CeVIO AIから出力されたWavファイルはUnityのいずれのアセットでも普通に読み込めたので、課題自体はこれでクリア出来ました。(VOICEPEAKのWavはいずれ調べてみようかな…)

画面が縦長な理由

 元々このアプリケーション、手持ちのLooking Glass Portraitにパピフォンを表示しようと思って弄ってたアプリケーションだったんですよね。でも、画面の設定が上手くいってなくて何故か横の解像度だけが2倍になってしまうという現象に頭を悩まされています…orz。

 裸眼立体視のキャラとお話し出来たら「そこにいる感」凄そうなんですけどねー。これはもうちょっと先になりそうです。

プレビューはなんとなく動いてるんですけどねぇ…。

今後の動向

 ここまで作っておいてなんですが、OpenAI社の方で今後、音声や画像による入出力が出来るようにする計画があるらしいので、キャラは兎も角、質疑応答に関しては標準で出来るようになる日は遠く無さそうです。音声認識についてはWhipserあるし、回答作成についてはChatGPTがあるので、最後の合成音声部分はどういう実装になるのかなーというのが気になる所ではあります。

 単純に考えればAmazonのアレクサのように単一の声(とは言え最近男声も追加されましたが)による応答で充分機能は果たせるのですが、声まで何か弄れるようなギミックがあったら面白そう…というか既存の合成音声ソフトにも影響出そうで怖くはあります(^^;。

 まぁ、しばらくは動向を注視しておこうかなぁと…。

DTM,CGStudio One,Synthesizer V,Unity,Vroid,VroidStudio,ヴェロ

School Food Punishment の light prayerにしました

MVっぽいの作ってみた

 気が付けば年も越して2023年、しかも最初の月はあっという間に過ぎ既に2月となりましたが、ようやく作成していたMVを一旦まとめました。長かったですね…。

 2022年初頭からVRoid弄りだしてモデルを作り、6月ぐらいからStudio One弄って楽曲作り、10月ぐらいからUnityで動画作り…みたいな感じでしょうか。

 そもそもコンセプトとして「嫁子供ほったらかしにしない=作業時間は限られる」「ゲーマーなのでゲームする時間は確保する」「主要な部分は自作、そうでない所はアセットで時短」「こだわり過ぎずに実害少なそうなら次の作業に進む、後でやっぱり気になったら直す」みたいなのがありまして、低燃費走行をずーっと続けていた感はあります。ちゃんと娘ちゃんと一緒に"さいきょうゲッコウガ"も取りましたよ(^^;

School Food Punishment の light prayerという曲

 昔っからこの曲好きで、度々iTunesに入ってるの聴いてたんですよね。バンド自体はもう10年ぐらい前に解散してしまったのですけど、疾走感や透明感のある曲作りというのでしょうか、なんかすっかり身に染み込んじゃってるんですよね。"RPG"といえばドラクエでも無く、セカオワでも無く、ましてやロケットランチャーでも無く、School Food Punishmentの曲なんですよ、僕にとっては(どーでもいい)。

 なのでStudio One導入まで行って、さぁ何の曲を打ち込もうか…と思った時にもちろん最近人気の曲とかでもいいなとは思ったんですけど、たぶんそれは誰かがもう打ち込んでくれてるだろうし、だったら今はあまり世で聴ける機会も多くなくなった自分の好きな曲を掘り起こしてみるのも良いんじゃないかな…という事で、@ELISE(楽譜販売サイト)で譜面を漁り、見つけられたこの曲にする事にしました。

 ただ、この曲、今思えば最初に手を付けるには難易度高かったですね…(^^; 間奏のギター周りとか特に読み手に任せられている部分(でっかいバツ印しかない…)も結構あって僕には受け止めきれなかったナー…なんて思う部分も。

 まぁ、なんにしても原曲は良い曲です。

Studio OneとSynthesizer Vで楽曲の打ち込み

Studio One 5で編集中

 昔、MIDI楽器を弄っていた時はGS音源などある程度の規格化された音源がありまして、その中ではざっと生楽器の音が一通り揃っていて便利だったのですが、今どきだとこれに相当するのがKOMPLETEの存在なんですかね…。これとシンセ系の音が豊富に収録されているOmnisphere奮発して、今回はこれらの中で作ってみました。昨年末にセールもあったのでちょっと補強しようかな、とドラムとギターの音源を追加しましたが、どちらも習得にそれなりに時間が必要そうだったので今回は使っていません。

Synthesizer V Pro

 去年の春頃は作ったVRoidモデルを合成音声で喋らせて(トーク)遊んでいたので、Studio Oneで楽曲作るなら当然、合成音声による歌唱付きに挑戦でしょう…という流れでした。合成音声のエンジンはいくつか種類があるのですが、サンプル聴きまくった上で一番僕の理想に近かったSynthesizer Vを選択。独特の文化に成熟したといっても過言ではないVocaloid系の声も嫌いではないのですが、やはり昔、MIDI楽器ではやりたくてもやれなかった自然に近いボーカルというのは個人的には悲願でもあり(笑)、その方向性ならSynthesizer Vかな…と。

 これまたセールに合わせて歌唱データベースはいくつか導入してみたのですが、今回の light playerには合うのはどちらかというと高めのアイドルっぽい声ではなく、低い所から力強く唸ってくれる大人の女声が良いかな…という所で"Saki AI"を選びました。

 実は製作中にSynthesizer Vのシステムの大幅なアップデートがあり、それに合わせて歌唱データーベースも更新されたので、試してみた事はあるのですが、歌唱の表現の幅は広がったっぽいのですが、それまでに作成した部分に結構悪影響が出てしまい、今回は導入を見送っています。なもんで、今回は少し古めの環境(エンジンが2.4.1、Saki AIが119)で作ってます。たぶん、最初から最新データベースに合わせて作っていれば問題ないと思うので次回作は更新してからかなーと思ってます。(実の所エディタ側が落ちる現象も起きてたので戻すしか選択肢が無かった)

Unityで動画を作ろう

Unityで動画作成中

 曲がある程度の終盤に差し掛かった頃、手持ちのモデルで挿絵的なもの作りたいよナー…とはうっすら考えてました。ボカロ系の動画で見掛ける、静止画をベースとして切り出しやカメラワーク的なもので飽きさせない絵作りにして、歌詞を載せる感じな奴を3Dモデルで出来ないかな、と。

 さすがにステージモデルから作っていたら終わりが見えないので、ここはUnityのアセットストアで良さげ(且つ、手頃^^;)な奴を探しまして、今回はSICS Games様のToon Fantasy Natureを使わせて頂きました。フォトリアリスティックなステージが多い中、リアル調とアニメ調のちょうどいい中間ぐらいの作りになってまして、VRoidのセルシェーダーと比較的マッチするかなと思ってこの選択になっています。

リップシンクの話

あ、い、う、え、お

 今回これが無かったら成立しなかったアセットという意味では一番依存度が高いかなと思うのが、凹(へこみ)さんのuLipSyncですね。さすがに発声に合わせてフェイシャルモーション全部手付けとかやってられないですし…。音声解析で自動的に母音ごとに用意した口のターゲットにモーションしてくれる有難いアセットでした。

 当初、実行時にリアルタイムで解析させて使っていたのですが、最終的な動画キャプチャの段階で60FPS全フレームキャプチャする必要があった為、音声解析データからキーフレームに落としてクリップ化して使用しました。この辺の機能の対応も幅が広く、色々な使い方出来そうです。

目は口ほどに物を言う

こっち向いてベイベー

 リップシンクと共にどうしようかな、って当初困ったのが目のまばたき。モーションクリップでモデルにポーズ付けるにしても、ずっと目を開いたままなので1ショットなら良いですが、ずーっとカメラが回っているような状況だと明らかに不自然です。これに関して検索して辿り着いたのがTore Knabe様のRealistic Eye Movementsアセット。目を自然な感じにまばたきしたり、僅かに視線をずらしてくれたりします。

 ・・・します、のハズなんですが、こちらのアセットに関してはちょっと僕の習熟度が足りないようで今一つ制御しきれていない気がします。基本的にはメインカメラの方を見るようにしてるハズなのですが、若干目が泳ぎがちだったり(いやこれで正しいのか!?)、不要な所でこっちをチラ見(こっちみんな笑)したり…このパラメータかな、と思って制御したりはしたんですがどうにも。

 あと、このアセット、目以外にも顔をそちらに向けてくれる機能もあるのですが、顔だけ動くので若干ロボットみありますね…(^^;。聞いた話ではHead Look Controllerというアセットと組み合わせるとSpine側の回転と合わせて自然な動きになるようなのですが、実はこのアセット既にサポート外になっているらしく、アセットストアからは削除されていました…。みんなどうしてるんだろ…。

武装しましょう

炎を囲む戦闘民族が如く

 実際出来た動画の通り、最初はポーズだけ付けて静止画的なカットのみ…で考えてたのですが、まぁ、作り出すとあれもやりたいこれもやりたい…という気にはなってきて、アセットストアにも素晴らしいアセットいっぱい並んでるんでモーションデータを中心に年末のセールでいくつか買い込みました。

 で、戦闘モーションやるなら武器無いとな…と思ってた頃に、丁度NEOKETというバーチャルアバターで参加するイベントがありまして、この会場でビビっと来たのがこのIRREGULARS様の武器モデルたち。本来の目的はVRChat向けっぽくはあったのですが、Unityで読み込めるし使えるだろう…という事で迫力のある太刀っぽかったSOHAYAを購入。着脱ギミックまでちゃんと動きました。

 PSO2を遊んでた事もあって武器はSFっぽいのがいいなーとは思ってたんですが、アセットストアには中世のファンタジー系の武器防具は多いものの、意外とSF系のそれは多くなかったりするんですよね…。助かりました。

一番導入の多かったモーションデータ

 今回一番導入した数が多かったアセットはモーションデータです。そもそも、固定ポーズだけで作るつもりだったんですが、CLazy様の Runner Action Animation Pack の動きを見て、「メッチャカッコイイ…これ使いたい…」って思ってしまったのが運の尽き。跳んだり跳ねたりえらい事になってしまいました…。

 アセットストアにモーションデータは数あれど、何気に困ったのは歌ってるモーションというのが殆ど見当たらなかった事。アイドル系の曲のような激しいダンスのデータなら割とあるんですが、いわゆるミュージシャン寄りのMVで見られるような、ステージセンターで歌い上げるみたいなモーションはほぼ皆無かな、といった感じでした。意外とニッチな分野なんでしょうか…。

 そんな中で唯一見つけられたのがRamsterZ様のFemale Lounge Singer。たぶん、動き自体は欧米のジャズシンガーっぽいのかなとは思うのですが、一番イメージに近く、モーションも長尺のものが多かったので扱い易かったですね。ただ、曲のテンポと合うとは限らないので、その辺は実際に楽曲に乗せてみてからこっちの方が合うかなーといった感じで見繕ってました。

見送った要素

 当初の予定よりだいぶ動画の作業が膨らんでしまったのですが、それでも導入をカットした要素もありまして、今後はその辺の実験をしてみたいなーとは思っています。

 大きい所では夜のシーンをやりたいな、と思ったのですがステージへの設定の変更が結構いろいろ必要そうな事と単純にやってキレイ見えるかどうか今一つ分からなかったというのがありましてこれは今回見送っています。

 夜のシーンやるのであれば天候シミュレーション入れてみるのも良いのかな、と一つアセットも用意はしてみたのですが、導入した所シーンが非常に重くなってしまったので、これは色々最適化しながら使う必要がありそうとの判断で今回は見送りました。今度じっくり弄って色々な絵を出してみたいなと思っています。雨とか雪も楽しそう。

 パーティクルもやりたかったのですが、これは仕組みの習得が中々時間がかかりそうだった事と、爆発やら魔法のエフェクトをキレイに見せるにはやはり夜のシーンがいいかな…という事でやはり前述とセットで見送りに。

 ブルームを入れれば簡単に世界が変わると何処かで見掛けたので、導入してみた事もあるのですが、そもそもフォトメトリックな絵じゃなくてキャラもセルシェーダ寄りなせいか、パラメータ色々弄ってみても絵が飛び気味でコントラスト低い感じになってしまってこれも要調査だな、という事で見送り。

 あと、作業終わる頃に、あ、被写界深度表現入れれば良かった…とは思ったのですが、各カットでピントの調整とかしないといけないので、これも始めるとまた膨大に時間が延びそうだったので今回は見送りました。

 これらは後程、個別に実験して本サイトの記事ネタに出来たらなーとか考えてます。

新キャラ「ヴェロ」

地獄の門番ヴェロさん

 そういえば、この動画作成にあたって新規のキャラクターを起こしました。例によってVRoid Studioで作成しています。時短すばらしい。衣装に関してはパピフォンとある程度の統一感を出したかった為、パピフォンの衣装からゲーミング要素を取り払い、スタンダード寄りのデザインに差し替えました。

 いつも通りVRoid Hubには上げてありますので、良かったら連携ソフトから呼び出してみて下さい。

VRoid Hubのヴェロのページ

 こちらはVOICEPEAKによるトークも出来るようにこの後準備しようかと思っています。

次なに作ろうか

 折角環境も整ったし、次の曲打ち込みたいナーとは思うのですが、何にしようかなと。Aldious好きなんですけど、打ち込みでメタルとか鬼門っぽいですしね…もう少しポップス寄りの方が良いのかなーと色々思案中。

 いずれにしても次はSynthesizer Vを一気に最新版まで更新して、新しいエンジン試したいのと無償提供となった歌唱データベース「Mai AI」を試してみたいなと思ってます。

 音源の方は年末のセールでギター音源「Ample Guitar LP3」とドラム音源「BFD3」を追加してみたので、この辺も少し学習してから入れて行きたいなと考えてます。

 動画は・・・やっぱポーズのカットぐらいにしておかないと莫大な時間がかかるな、とは思ってます。モーションは買うにしてもお手頃価格ばかりでもないですしね…(^^; 最近、ソニーのmocopiを導入したので簡単なアニメーションなら自作してやり過ごせないかな、とも思うのですがあれはあれで作業大変そうですしねぇ…悩ましい。

DTMKOMPLETE,Omnisphere,Studio One,Unity

Studio OneとSynthesizer V

PV作れないかな…?

ちょっと間空きましたね…。前回の6月頃にボステリ店長まで作った後辺りから、うっすらとこれらのモデルを使ってPVみたいの作れないかなーと考えてまして、ちょっとDTM環境を用意してみて打ち込み等をやっていました。本当は1曲出来ましたデーンと掲載したかったのですが、まぁ昔と環境も変わっていて色々調べながら進めてたり、曲自体も昔自分が打っていたものより複雑なコードを扱う曲で入力量も多かったりと、なんだかんだ6月頃から3か月ほど経ってもまだ終わってなかったりします…。

DTM環境の構築

今思うと今年の4月~6月辺りはDTM環境整えるのには凄い良かったのかも知れません。

セール凄い多かったんですよね。先のVOICEPEAKの時もそうでしたが、DLSiteの方でSynthesizer Vとかの声データやエディタが20%オフ+クーポンで15%オフぐらいのやってて破格で揃えられましたし、ベースとなる音源のKOMPLETE 13もちょうど半額セールやっていたりと、かなり格安に良い環境作れました。

DAWはStudio Oneを選択

一番基礎となるDAWのStudio Oneだけはどうも年末にならないとセールにならないっぽいのですが、そこまで待ってるのも時間の無駄なのでこれは素直に導入。AI版を試用していたCubaseと迷っていたのですが、通常価格ベースだとStudio Oneの方がお得感あったのと、個人的に仕事でツール作っている身としては、やはりベースが新しい世代のものの方が、不具合を未然に防ぐ施策がされてたり、後からの機能追加もしやすく作られていたりするのが容易に想像出来るので、ここは元Cubaseの開発陣が一から作り直したと言われるStudio Oneを選択しました。

Studio One、Cubaseに比べると情報が少なく…みたいな話をちらほらWeb上では見掛けるのですが、今の所、僕が初期で困った事や使い方が分からなかった機能などに関しては、ググるとかなり大量に情報が出てくるので、近年急激に情報が増えてるのかな、という印象を受けました。(そのせいか、ググった内容が以前のバージョンのもので若干操作が違う、みたいな事は少しあります)

音源どうしようか

以前の経験…といってもハードウェア音源主流の時代ですが、その辺からたぶん音源は後から追加していくより、最初に少し高くても音色が多めに入ってる定番の奴を買って使い込むのが良いだろうな、と考えてました。

Omnisphere2のパッケージ

ネットで色々調べていくとOmnisphere 2というのが凄いらしい、一生かかっても使いきれない程の音色量で高品質!…とかいうのをチラホラ見掛けて、これもまた軽いセールをしていたのでこれでいけそうかと思って導入。

で、ちょっと弄ってみたのですが、確かに凄く重厚なシンセ音や燃えるピアノから発する音とか特殊極まりない音とか入ってるし、ベース周りはズンドコ響く好みの音も多くて、これはこれでユニークな曲を作る意味では色々な用途がありそうなのですが…何かの曲を模すための最初の一本では無かったな、と(^^;。(たぶん、EDM系とかで最初から作曲するつもりの人にはこれでいい気がしますが…。)

やはり復帰当初は好きなロック系の既存曲の打ち込みから始めようと思ったので、いわゆるGS音源やGM音源のような、ピアノ、ギター、ストリングス、ブラス…そして基本的なバストラやスネアのドラムセットみたいな生音を揃える必要があるという事でもう一度見繕い直してKOMPLETE 13を導入。こちらは運よく一番下のグレードのSELECTを半額で入手出来るバウチャーコードをWeb記事から見つけ、更にアップグレード半額セール期間中だったのでちょっと手順を踏んだら大変お得に入手出来ました。

KOMPLETE13の方はOminishpere2とは対照的に、一つの音源のプリセット音色が色々入っているものでは無くて、多数の音色プラグインの集合体となっています。なので、使うプラグインによって操作がまちまちで統一感が無かったりはするんですが、生音系は一通り揃っている感じで、僕も今はこちらをベースに打ち込みしてます。

Omnisphere2はUSBメモリ提供だし、KOMPLETE13に至ってはHDD提供だったりするので、インストールする環境にもそれなり空き容量が必要ですね。自分はマシンにSATAのSSD1TBを追加してそこにインストールしました。なんだかんだお金かかったな…(^^;

まぁでも、どちらも物凄い数の音色入ってるんで当面はこの2つだけで行けそうです。後はじっくり使い込んでみるだけ、と。

合成音声エンジンどうしようか

これに関してはサンプル散々聴いて、個人的にはSynthesizer V系の声が好みだったので、そちらの声をDLSiteのセール時にいくつか導入しました。トークではCeVIO系も愛用しているのですが、ソングに関してはVOCAROIDっぽいイメージに寄せたいのであれば有りかな、とも思ったのですが、今回はその逆を行きたかったのでSynthesizer V系にしました。

打ち込みが全然終わらない

まぁ、元々仕事終わった後に夜な夜なやってて、ゲームしたりする日も多々あるので、ペース的には亀なのですが、最初に手を付けた曲が3か月経っても終わっていません…。とは言え、飽きてるとかいう訳でも無くて打ち込み自体は悪戦苦闘しながらも楽しく進められているので、まぁ年末までには終わってるでしょ…ぐらいの長期スパンで考えるようにします。

最終的にはPVに出来たらなぁ…と思う所があるので、気分転換にその為のUnity周りを弄ったりもしています。

映像まで揃えるとなると、どんどんゴールが遠くなっていってしまうので、どういう形でキリを付けるかが中々悩ましい所です…。とりあえず、完成後のドーンと掲載は無理だと分かったので、今後細かいネタをちょろちょろ書いて行こうかなと思案中です。

CGRecotte Studio,VRM,Vroid,VroidStudio

前回の話の通り、VRoid Studioから出力したVRMファイルをBlenderに持っていき、そこでメッシュの追加やマテリアルの調整などを行うことでボステリ店長のモデル自体は出来ました。…が、そのモデルをBlenderから再度VRMファイルで出力し、Recotte Studioに持っていこうとすると、クラッシュが発生して読み込めないという状況にブチ当たりました。

他のツールでは読み込めているVRMである事、VRoid Studioの公式サンプルAちゃんでも一度Blenderを経由すると同様の現象が起きる事、でも公式サイトには全てのVRMの読み込みを保証するものではない、とある事などから、これは仕様なのか不具合なのかの判断も難しいな、という事でこの点については折角サポートIDもあるので、サポートの方に問い合わせてみました。

で、質問は投げておいて、とりあえず現状どうするか色々検討。やはりUnity環境へ読み込んで再度UnityのVRMでエクスポートするのが可能性あるのかなーと。

Unityに読み込んでみる

はるばる来たぜUnity…

Unityの環境自体は以前、OpenCVとか触ってみた時に構築したのがあったので、さっそくテスト読み込み用のプロジェクトを用意して環境自体はすぐ準備出来ました。で、VRMを読み込むのに必要な情報を「UniVRMをインストールする」や「vrm-c/UniVRM」を参考に自分の環境にもインポーターやエクスポータ等を含むUniVRMをインストールしました。

これだけ出来てしまえば後は単純で、BlenderからのVRMをシーンにドラッグドロップし(UniVRMで読み込まれる)、アセットに登録されているモデルを再度UniVRMでエクスポートします。

Recotte Studioで動いた!

Unityからエクスポートしたボステリ店長のVRMファイルを恐る恐るRecotte Studioの話者設定に指定すると・・・今度は読み込めました!どこかちょっとフォーマットが違うんでしょうかねぇ…。

どうにか到着した店長

折角読み込めたので、早速軽いサンプル動画を作成してみました。

パピフォンの声はCeVIO AI、ボステリ店長の声はVOICEPEAKを割り当てています。2つの合成音声ソフトを同時に使用していますが、割と違和感無く行けましたね。なお、ボステリ店長、もう少しおっさん声で良かったんですけど、VOICEPEAKはイケメン声しか無くて…(汗

何はともあれ、これで自分のアバターを登場させる、対話動画を作る、という目標は一応達成出来ました。

AHSのサポートさんから返答がありました

実はそんなこんなしてるうちにあっという間にRecotte StudioのサポートをしているAHSさんから返事のメールが届いておりました。全文を公開するようなことはしませんが、要点だけ記載しておきますと、

  • 現在、VRMの読み込みに関してはVRoid Studioで検証しており、Blenderを含めそれ以外のツールから出力されたVRMに関しては検証確認は出来ていない
  • 現状ではVRoid Studio以外のツールで出力したVRMファイルに関しては非対応という仕様

という事でした。まぁ、概ね、デスヨネーという所ではありますが、回答して頂いた事でモヤモヤせずに済みますね^^;。 そもそもRecotte Studioの3D話者モデルってMMDの方がベースだと思うので、VRMと両対応している時点で色々大変というのは想像に難しくなく…となれば正式なサポート範囲もそんなに広げられないでしょうし。

ただ、最後に一文ありまして、VRMファイルの提供が出来るなら開発元に要望として転送しますよ、と言って頂けました。なんという神対応…。ここはご厚意に甘えてVRMファイルを提出させて頂きました。この場合は僕の変なデータよりはより一般的なデータの方が良いだろうと思って、VRoid Hubに上がっている公式サンプルAちゃんをBlender通したものを同じ現象が起きるのを確認してから提出させて頂きました。

まぁ、あくまでも1ユーザーの要望なので(*1)まったく実装される確約はありませんが、いつかそのまま読めるようになったらUnity通す必要も無くなってスマートで良いなぁと楽しみにしておこうと思います。

と、いい感じに収まった所で、今回はここまでとしたいと思います。次は何しようかな…。

(*1)…とはいえVRoid HubなんかにもBlender等で編集済みのモデルは多いので同じ要望持ってる人は割といそうな気もしたり…。

※2022/06/21追記 Ver 1.6.0.0で修正された模様です!

Recotte Studioが1.6.0.0にアップデートされました。アップデート項目の中に、

【修正】
・一部VRMファイルを読み込んだ際にクラッシュする不具合を修正

という記述!これは試すしかないと思い、恐る恐る今までクラッシュしていたVRMファイルを投入してみたところ…問題無く読み込めました!ありがとうございます!

折角なのでクラッシュしていたデータ達で一本(^^;

CGRecotte Studio,Substance,VRM,Vroid,VroidStudio,ZBrush

自分のアバターを登場させたいナ

前回まででサイトの看板娘的なキャラクターを作成してRecotteStudioで動画作成してみたりしました。まぁ、VRoid周りのアプリケーションで遊ぶ時とかは可愛い女の子キャラの方が絵的にも映えるしいいなと思うのですが、反面、自分のサイトで自分の行動、意見について動画にまとめる時なんかは、やはり自分のシンボル的なキャラクターがあった方が良いよなぁと思う所がありました。

という訳で、またVRoid Studioで自分のアバターを作ってみる事にしたのですが、どーにもイケメンしか作れない仕様のようでして、まぁ自分に寄せるのもちょっと無理だな、と。どうしようかなぁ…とApple Musicで音楽聴いてると流れてきたのが、MAN WITH A MISSIONの曲「database」。よし、この手で行こう、我が家には幸いモチーフもいるwとなりました。

尻尾と腰リボン

以前、習作でサクラバクシンオーを作成した事があるのですが、この時、尻尾とリボンはVRoid Studioではどうにも表現出来ない範囲だったので、この部分だけBlenderで調整しなおした事があります。

この時は元々VRoidSudioの持っていたリボンパーツの移動とサイズ調整、尻尾はVroidStudio上の髪の毛として一旦作成したボーンとメッシュを腰骨の方に移動、ウェイト微調整みたいな事をやっただけなので、新規のメッシュの追加等は行っていません。

今回はメッシュを追加するのでその辺が各ツールで上手く動作するものか分からなかったので、実験も兼ねて作業を始めてみました。


ZBrushで被り物を作る

上手く最後まで作業パスが通るかどうかも良く分からない所だったので、今回の方針は兎に角「ちゃちゃっとワークフローを通してみる」でした。なのでクオリティに関しては後で調整すればいいやのノリなのでクオリティアップのテクニックとか求められてる方はごめんなさいです…。

適当に作ったら25万ポリゴン

さて、今回は”時短の為に”ZBrushを使ってみました。Blender等でポリゴンをパキパキ割りながら作っても良かったのかも知れませんが、ブラシでサーっと作って解像度落とす方が速いかもな、という思い付きもあったもので…。

ひとまず、我が家の愛犬(ボストン・テリア)を参考にサクサクっと頭部だけZBrushでモデリングしてみました。眼球は一応後のことを考えて別で作ります。作り方の好みが色々あると思いますが、今回はダイナメッシュを使う事で、ここもあまり深く考えずザクザク描き込みです。

当然、何も考えずにダイナメッシュを使っているので、この頭部だけで25万ポリゴン超あったりします。さすがにこれをそのまま最終アプリにまで持って行くのは重過ぎるので、ここでは複製を取ってからジオメトリ>Zリメッシャーを使って1万ポリゴン程度にまで一気に落としたメッシュを用意しています。

ポリゴン削減にはもう一つ意味があって、この後段のSubstance Painterがあまり多いポリゴン数を持って行くと重くなるなどトラブルの元になる事が多いそうで、予防的措置でもあります。

UVの方はZBrushの方でZプラグイン>UVマスターを使用してこちらもほぼお任せで作成しました。(…が、後々ここはもう少し要調整だな、という事が分かりました^^;)

ある程度形状が出来た所でZプラグイン>FBXインポートエクスポートで.fbxファイルとしてエクスポートしておきます。

Substance Painterで着色

FBXで出力したボステリ頭に色を塗ります。いつもだとUVガイド見ながらAffinity Designerで作成するのですが、これもSubstance Painterで作成した方が時短になるだろうかという事で使ってみています。ハイポリモデルもあるのでそのうち別の遊び方も出来るかもな、というのもあります。

Substance Painterでテクスチャ作成

うーん…。UV適当に作ったせいで顔周辺の解像度が足りないですな…。まぁ、モタモタすると即死亡または解放できないよとどこぞの神がおっしゃってたので、ここではとりあえずそのまま作業続行。

そもそも、最終的にはVRoid Studio連携アプリ等へ持って行く予定なので、トゥーンシェーディングなんですよね。なもんで、使うのはカラーマップぐらいかなぁ…という所でしょうか。ここでもあまり深く考えず着色だけしたら各テクスチャを単体テクスチャとしてエクスポートしておきました。

Vroid Studioで本体を作る

まぁ、ここに関してはいつも通りというか、通常のVRoid Studioの作り方で。

ボストン・テリアモチーフなので黒ベスト+白いシャツでカラーリングを寄せて、今回は自分のアバターという事もあり、普段愛用しているタミヤのエプロンのような何か(^^;を重ね着機能で作成してみました。

頭は被り物を被っちゃうので、髪が飛び出さないように坊主頭を選択。極端な話、顔のメッシュもいらないのですが、なんとなく無けりゃ無いで表情まわりのモーフとかでトラブりそうな気もしたので今の所そのままにしてあります。

で、VRMで出力しておきます。

Blenderに読み込む

ここまで出来た所で一応リソースとしては揃いましたので、今度はBlender上でこれらを読み込んで行きます。

Blenderには比較的標準的に皆さん使われている「VRM_Addon_for_Blender」をインストールしてあります。これのインポート機能により、VRoid Studioから出力したVRMを読み込みます。

今のBlenderだとFBXは標準で読み込み機能を持っているようなので、続けてボステリ頭のFBXファイルを読み込みます。ボディ側とスケール感とか全然違うと思うので、この辺は読み込んだ後に調整しました。

ZBrushからFBXでやってきたボステリ頭は当然、マテリアル周りはボディと全然合わないので、この辺は要修正です。基本的にはボディ側のパラメータ設定を見つつ、同じような構成にしていけば良いかと思います。シェーダ関連はボディ側が「MToon_unversioned」になっていたので、ボステリ頭側もそれに併せました。それと同時に、Substance Painterで作成したカラーテクスチャをMain TextureとShade Textureで刺しておきます。

目玉はBlender側の球モデルで適当に作成しました。シームを水平方向に切ってUV展開しなおしてというあくまでも簡易的な感じですが。

で、最後にボステリ頭モデルをAmature配下に入れてHeadあたりにウェイト振って、キャラとして動かせるような感じにはなりました。

これを再度VRM Addon for Blenderにより、VRMファイルにエクスポートしてひとますの完成です。テストがてら、このキャラをLuppetに突っ込んでみました。セリフは先日購入したVoicepeakの男声を使用して喋らせたものを、Luppetの音声入力に入れています。

UVの関係で解像度低かったり若干色味が頭だけ暗い感じもありますが、これは今後データの方を直していこうかと思います。取り敢えず動作に関しては期待した通り動いているかな、と。

看板娘とボステリ店長の感動の対面の道は険しかった

よし、これで看板娘キャラであるパピフォンとボステリ店長との掛け合い動画が作れるぞ、という事で早速ボステリ店長のVRMをRecotte Studioの話者選択画面から読み込み~!

なんで死んでしまうん…?

・・・ですよね、人生そんなに甘くないですよね。まぁ、トントン拍子で進んだ時に限ってメインの舞台ですっ転ぶもんですよね…。

とりあえず、例外が発生しているようで何度読み込んでもクラッシュになってしまいました。まぁ、僕の作った適当なデータだからどこか直さんといかんのかな~と思って色々検証してみたのですが、実は手持ちの他のVRM対応ツールでは全て正常に読み込めてしまっていたり、VRoid Studioの公式サンプルAちゃんのVRMをダウンロードして、Blenderに読み込み>再出力するだけでもやはり同様の現象が起きてしまっています。

実の所、Recotte Studioのサイトには「全てのモデルデータの読み込みを保証するものではありません」という注意書きがありまして、たぶんこういう辺りはある程度わかってはいるんだろうな、という気もします。

で、次回に続く

・・・という訳でこの辺で躓いて、色々試していたのですが、結論から言ってしまえば、一応目標は達成出来ました。また、Recotte Studioのサポートさんの方にも問い合わせさせて頂いて、現状のお話とかちょっと伺ってみたりしました。今回は長くなってしまったので次の記事でその辺の話を記述出来れば、と思います。話が途中な感じがすごい有るのでなるべく早めに…。