ガレージ暮らしのトライタム

プログラムやツールの解説や技術を公開する場所

Live2DCubism3でmocファイルが書き出せない原因と対処方法

ここでは、moc3ファイルが書き出せない時の原因と対策です。

問題

f:id:traitam:20170713202659p:plain

mocファイル書き出したいときに画像のようなエラーが出ました。

テクスチャアトラスとは?

Cubism2.1では「テクスチャ」と言われていたものです。
扱う素材を管理するためのテクスチャ、と覚えておけばいいと思われます。
Cubism2.1ではPSDインポートと一緒にテクスチャは生成されましたが、3.0ではそうではないようです。

問題の対処法

対処法は「テクスチャアトラスを作る」です。

作り方は、画像の赤枠内にあるボタンを押します。
f:id:traitam:20170713203113p:plain

その後、新規ウィンドウでテクスチャアトラス名を記述する欄が出るので、記述(もしくはそのまま)してOKボタンを押します。
f:id:traitam:20170713203212p:plain


これで無事にmocファイルを書き出せるようになりました。

最後に

この問題は、パパッとテストモデルを作成してmoc3ファイルの生成をしようとしたときに発生しました。
プロトタイプとか、実験的に書き出すときに当たりそうな問題です。

ただ、対処は難しくないので記憶の隅に入れておくといいと思います。

それではみなさん、楽しい創作ライフを!

Live2DCubismEditor3で、モデルに自動でポリゴンを追加する

概要

CubismEditor2.1では「PSDインポート」という項目を行えば、それ合わせてポリゴンの割り当てを行ってくれましたが3.0からはそれが無くなっています。
パーツが増えれば増える程自動設定の必要性が高くなります。
そこでここでは、
CubismEditor3.0で「PSDインポート~自動ポリゴン割り当て」までを行います。

検証Verは3.0.06です。

PSDインポート

Editorを開き、「ファイル」→「ファイルを開く」でインポートしたいPSDファイルを選択し、読み込みます。
f:id:traitam:20170625201213p:plain

もし、レイヤーの統合が済んでいない場合は、手動で統合するか、公式が配布しているスクリプトを用いて統合をしてください。
Photoshop用スクリプト - Live2D Cubism 2 マニュアル

これでモデルが表示されればインポート完了です。

ポリゴン割り当て

ポリゴン割り当てですが、パーツタブで先ほどインポートしたパーツをすべて選択します。
その後、「メッシュの自動生成」ボタンを押します。
f:id:traitam:20170625201644p:plain

その後新しく出たウィンドウで「プリセット」→「標準」を選択すれば、すべてのパーツにポリゴンが割り当てられます。
f:id:traitam:20170625201925p:plain

これで無事にすべてのパーツにポリゴンが割り当てられたら作業終了です。

プリセット部分は最初から「標準」「変形度合い(小)」「変形度合い(大)」3つのレベルで設定が可能です。
また、オリジナルでカスタムしたプリセットも登録可能です。

ポリゴン自動割り当てのもう一つの方法

パーツを選択し、メッシュの自動生成を押せばポリゴンが生成されますが、別の方法で同じ結果ができますので以下に記述します。

パーツの全選択をして、今度は「メッシュの手動編集」ボタンを押します。
f:id:traitam:20170625202329p:plain

ボタンを押すと、メニューバーに「メッシュ編集モード」という表示が出ます。
この状態になればメッシュを変更することができます。この状態でない時に「ツール編集タブ」からポリゴンを割り当てようとしてもできません。
メッシュ編集モードが確認できたら「ツール編集タブ」からAUTOボタンを押します。
f:id:traitam:20170625202837p:plain

その後、ウィンドウが出てくるので先ほどと同じように「プリセット」→「標準」と選択すればポリゴンが割り当てられます。
また、手動編集でのメリットとして編集した割り当ての編集内容を設定、もしくは破棄することができます。
モデルウィンドウの下に画像の赤枠内になる設定ボタンを押すことで編集した内容を破棄するか設定するか選択することが可能です。
f:id:traitam:20170625203106p:plain

また、「メッシュの手動編集ボタン」を押すと、編集内容が設定されます。もし、設定を戻したい場合はCtrl+Zで戻すことが可能です。

注意点

2.1以前とは違い、ポリゴンを設定したら同じレイヤーのものはたとえ、離れていても1つのパーツとして扱われます。
そのため、1つのレイヤーに複数のパーツを入れている場合は自動選択を行った後、手動でポリゴンを分ける必要があります。
この辺は2.1以前とは違う部分ですので注意してください。
f:id:traitam:20170625204026p:plain


CubismEditor3では2.1以前と比べて流れが異なる部分が存在します。
しかし、自由度は高まっているため少しでも早く慣れ、自由にモデルが作れるようになりたいものですね。

それではみなさん、楽しい創作ライフを!

Live2DCubism2.1以前で作られたモデルをCubism3.0SDKで使う

CubismEditorの方は記事があるのに、SDKの使い方が見つからなかったので書きます。

以下お品書きです。
Unity対応のCubism3.0SDKの導入
Unity用モデルを作成する
Unityでモデルを表示させる・アニメーションさせる

今回使用しているモデルはLive2D公式からダウンロードできる、こはるちゃんを活用しています。
自作モデルが無い、手っ取り早くSDKを使いたい方は以下のリンクからダウンロードください。
サンプルデータ集 - Live2D Cubism 2 マニュアル
f:id:traitam:20170619212317p:plain

Unity対応のCubism3.0SDKの導入

Unityのバージョンは5.6以上が必要だとのことですので、Unityバージョン5.6以上を用意します。
やっちゃん on Twitter: "あぁそうそう、Unity版Cubism 3.0 SDKですが、最新版の5.6が動作対象です
5.5以下はパッケージをインポートしても表示がおかしくなりますし、基本的にサポート対象外ですのでご注意を"

次に、リンクからSDKをダウンロードします。
Live2D @ GitHub
f:id:traitam:20170619205112p:plain

f:id:traitam:20170619205300p:plain

SDKはunitypackageで配布されているため、Unityへドラッグ&ドロップでインポートすることにより使えるようになります。
サイト内には2つのリンクがありますが、一つはSDKを使うためのunitypackageで、もう一つはSDK開発者用(?)のものになっています。
そのためunitypackageの方のみダウンロードすればOKです。

また、インポート時、以下の画像のようなエラーが出てくることがあります。
これはSDKをインポート直後はDllが読み込まれないためのエラーです。
f:id:traitam:20170619212047p:plain

この状態でモデルをインポートしようとAsset内にモデルを入れても、プレハブ化してくれません。
対策として、一度Unityを再起動します。
再起動することで、Dllが読み込まれLive2Dモデルインポートが可能になります。

Unityでモデルにアニメーションさせる

SDKはCubism2.1以前のモデルには対応しておらず、3.0と拡張子が異なっています。
そのため、使いたいモデルは一度CubismEditor3.0で組込み用モデルを作成する必要があります。

方法はCubismEditor3.0でCubism2.1以前に作られたモデルを開きます。
その後、「ファイル」→「組込み用ファイル書き出し」→「moc3ファイル書き出し」
を行い、moc3ファイルを作成します。
f:id:traitam:20170619210520p:plain

これで、Unityで使うためのモデルの用意はできました。
ただ、これだけではモデルは表示できますがモーションが使えません。

ですので、以下の流れで組込み用モーションの出力を行います。
これも今までは.mtnファイルだったのが.jsonファイルになっています。
手順としては以下の通りです。
まず、Cubism2.1以前で作られたアニメーションファイル。.canxファイルをCubismEditor3.0にドラッグ&ドロップします。
次に、組込み用モーションにしたいアニメーションをダブルクリックし、編集タブを開きます。
その後、「ファイル」→「組込み用ファイル書き出し」→「モーションファイル書き出し」を押します。
f:id:traitam:20170619210925p:plain

そして、ウィンドウが新しく出てきますので「選択中のシーンを出力」にチェックを入れ、OKを押します。
f:id:traitam:20170619210914p:plain

これで必要なデータは全て揃いました。
モデルファイル(.moc3)、モデル情報(.model3.json)、テクスチャデータ(フォルダ)、モーションデータ(.model3.json)
2.1以前とは違いモデル情報とモーションデータの2つが同じ拡張子になっています。

Unityでモデルを表示させる・アニメーションさせる

予め、SDKを入れたUnityプロジェクトにモデルデータが分かりやすいようにAssetフォルダの下に「Live2DModels」フォルダを作成します。
その中に先ほど作った4つのデータを入れると自動変換が行われプレハブデータや.animデータを作成してくれます。
これはUnityで良く使われているもので、今回のSDKをこれらのデータを活用してモデルを表示やアニメーションを作っていきます。

無事にインポートされれば以下の画像のようになります。
f:id:traitam:20170619212645p:plain

Sceneウィンドウ、もしくはHieraruchyウィンドウにプレハブをドラッグ&ドロップします。
f:id:traitam:20170619212900p:plain

これでモデルが表示されれば成功です。


モデルが正しく表示されない?
その場合、Unityのカメラを設定する必要があります。
HieraruchyウィンドウのMainCameraを選択し、ProjectionをOrthographicに変更します。
f:id:traitam:20170619213202p:plain
f:id:traitam:20170619214456p:plain
f:id:traitam:20170619214508p:plain

これで無事に表示されるはずです。
これでモデルの表示は終了です。

ただ、これではモデルが動いてくれません。
ですので次はアニメーションを設定します。

画像のように、一度モデルを選択した後に、Inspecterウィンドウに.animデータをドラッグ&ドロップします。
f:id:traitam:20170619213545p:plain

そのご再生ボタンを押すとモデルがアニメーションしてくれます。
f:id:traitam:20170619213636p:plain
かわいいですね。


本日は以上です。
キモになっているのは「Cubism2.1以前で作られたモデルをどのようにCubism3.0SDKで使うか」という所で、モデルを最新版の拡張子にするという点でした。
これが出来るようになれば2.1以前より3.0SDKはUnityの仕様に沿った使い方で活用ができるので、Unityに慣れている方には嬉しい変更ですね。

メカニムを活用したアニメーションの推移は書かないんですか?という質問を想定して。
これはUnityの仕様になってしまうので、これ以上はいいかな、と考えています。


それではみなさん、楽しい創作ライフを!

「Live2D Drawer」AviUtlでLive2Dを使う02


前回
traitam.hatenablog.com

概要

今回は、導入後。実際に使っていく方法を書いていきます。
内容としては、

モデルの表示
モデルにモーション適用(ファイル参照)
モデルにモーション適用(コードから)
音声に合わせて口パク
パラメータ操作
まばたき

になります。
プラグインの中には、まばたきさせるための機能がありますが、私の環境ではどうしてもLive2D Drawerが止まってしまうので割愛します。
ご了承ください。

まばたきが使えるようになったので、この記事で合わせて説明をします。

モデルの表示

まずはAviUtlを起動します。
その後、拡張編集ウィンドウから「右クリック」→「新規プロジェクトの作成」を押します。
サイズはご自由に、今回私は854*480で作成しています。

プロジェクトを作成したら次に拡張編集ウィンドウを「右クリック」→「メディアオブジェクトの追加」→「カスタムオブジェクトの追加」を押します。
f:id:traitam:20170617124735p:plain

拡張編集ウィンドウに出したカスタムオブジェクトを、編集ウィンドウで「集中線」から「Live2Dモデル登録@Live2d」に変更します。
f:id:traitam:20170617125014p:plain

その後参照ボタンを押して、モデルファイルを選択します。
ここで注意が必要なのは、mocファイルの選択ではなく、.model.jsonファイルを選択することです。

これだけではまだ表示できないので、また新しくカスタムオブジェクトを追加。表示時間のサイズを合わせて、今度は「Live2Dモデル描画@Live2d」を選択します。
この際、拡張編集ウィンドウの赤線がLive2D描画と重なると「Live2DDrawerウィンドウ」が開きます。
これは必要になりますので、ウィンドウを閉じないで作業を行ってください。
以上の設定が終われば無事にモデルが表示されているはずです。
f:id:traitam:20170617125646p:plain

登録・描画の際に重要なことがあります。それは、モデル登録を最下段、描画を最上段に設置するということです。
もし、これに合わせてモーションやパラメータの設定を行う場合は画像のように2つのレイヤーの間に入れる必要があります。
f:id:traitam:20170617130127p:plain

モデルにモーション適用(ファイル参照)

ここではモデルにモーションをファイルを参照して適用します。
.mtnファイルが対象になっています。
モーションファイルは登録オブジェクトと描画オブジェクトの間に入れて使います。
「右クリック」→「メディアオブジェクトの追加」→「カスタムオブジェクトの追加」で、カスタムオブジェクトを追加し、今度は「Live2Dモーション(ファイル)@Live2d」を選択します。
その後、参照ボタンから.mtnファイルを選択し適用します。
f:id:traitam:20170617130856p:plain

登録しているモデルで作成したモーションが推奨されますが、別のモデルで作成したモーションファイルも適用可能です。しかし、パーツ量や動きの量が変わるため、違和感のあるモーションになる場合がありますのでご留意を。

モデルにモーション適用(コードから)

コードからとは?と最初はなるかもしれません。コードというのは.model.jsonの事を指しておりその内部に設定されているモーションを参照することでモーションが行えます。.model.jsonをメモ帳、もしくはお好きなエディタで開いてください。そうするとversionだとかmodelだとか記述された内容が見れるはずです。コードからというのはこの「motions」に登録されているモーションを、この.model.jsonファイルから呼び出すプラグインとなっています。
先ほどのファイル参照より、やや難解に感じる場合があります。しかし、ファイル参照とは違いAviUtlからモーションの指定ができるため、AviUtlの機能と合わせることで別の表現が可能になると思われます。
例として、Live2D公式が配布しているモデル、つみきちゃんのデータを見てみます。
f:id:traitam:20170617133012p:plain

つみきちゃんのmodel.jsonファイルを開き、motionsの欄を見ると以下のようになっています。
f:id:traitam:20170617133058p:plain

これをAviUtlのカスタムオブジェクト設定から呼び出すようにします。
先ほどの、「Live2Dモーション(ファイル)@Live2d」を「Live2Dモーション(コード)@Live2d」に変更します。
そしてカスタムオブジェクトの設定ボタンでタグを設定します。ここは初期状態では"idle"になっています。
f:id:traitam:20170617133403p:plain

タグとは?
タグとは.model.json内部の赤枠内で囲まれたものを指します。
これはLive2DViewerから設定することが可能です。
f:id:traitam:20170617133523p:plain

これがmotioncallに入れるタグになります。
名称未設定の場合は「""」という形になり、これを参照したい場合はmotioncall内は空白にしてOKボタンを押します。

次に編集でCallNumを設定します。これは先ほど選択したタグ内のモーションのどれを使うか選択することができます。
f:id:traitam:20170617133944p:plain

CallNumの番号ですが、先頭を0番として、そのモデルが持っている番号まで設定することができます。
f:id:traitam:20170617134250p:plain

たとえばこの場合ですとCallNumを3にするとtsumiki_m_02.mtnが呼ばれ、そのモーションが再生されます。

音声に合わせて口パク

これは「Live2D音声連動@Live2d」で使うことができます。
参照ボタンから音声ファイルを選択し、再生することで、音声に合わせて口を動かしてくれます。
ゆっくりボイス・各種ボイスロイドの活用を想定された機能と考えられます。

また、設定で「底上げ」という項目で音声に対する口パクの感度を変えることができます。マイナスにすると口パクの開き具合を抑えめに、プラスにすると小さな音でも口を開いてくれるようになります。
f:id:traitam:20170617135940p:plain

パラメータ操作

ここではパラメータ操作の説明になります。
プラグインは「Live2Dパラメータ操作@Live2d」となっています。
編集の「値」を操作することでパラメータの数値を変更することができます。
また、「パラメータIdx」はパラメータの種類を変更することができます。
これはCubismEditorのパラメータと連動しています。
f:id:traitam:20170617140943p:plain
f:id:traitam:20170617140953p:plain

パラメータIdxが0だった場合、角度Xが編集可能。
パラメータIdxが1だった場合、角度Yが編集可能。
パラメータIdxが3だった場合、左目 開閉が編集可能。
という具合です。
モーションからパラメータを微調節したい場合は覚えておきたい部分になっていますね。

まばたき

まばたき機能は、文字通りLive2Dモデルにまばたきを行わせる機能になっています。
カスタムオブジェクトで「Live2Dまばたき@Live2d」を選択すれば使えるようになります。
まばたきの速さや、目の開閉スピードはカスタムオブジェクトの設定から行っていきます。
f:id:traitam:20170617151650p:plain

初期設定では、一度まばたきを行うと、再度行う時間が長いので「間隔最短」・「間隔最長」の数字を小さくすることでまばたきを素早く連続で行えるようになります。
また、まばたきの閉じるスピードは「閉じかかり時間」、
閉じている時間は「閉じ待機時間」、
まばたきの開くスピードは「開きかかり時間」
で、それぞれ設定が可能です。

設定をしたけどまばたきをしてくれない!
そんな場合は一度IDを確認してみてください。
初期設定では「PARAM_EYE_L_OPEN\,PARAM_EYE_R_OPEN」となっています。
これはCubismEditorのIDと名前を合わせる必要があります。一度CubismEditorのパラメータ設定を開き、IDを確認してみてください。
f:id:traitam:20170617152533p:plain

違う場合は「“左目ID”\,“右目ID”」という形式でAviUtlの設定を行い、まばたきが出来ていればOKです。


以上で、機能説明は終わりです。
特にパラメータ調整は、多くのタイミングで活用可能と思われますので是非覚えておきたいですね。

それではみなさん、楽しい創作ライフを!

「Live2D Drawer」AviUtlでLive2Dを使う01

概要

今回はAviUtl内部でLive2Dのパラメータ諸々がいじれるプラグインが公開されたので、それの導入や使い方などを備忘録も兼ねて書いていこうと思います。
使うスクリプトは、がねーしゃさん(がねーしゃ@Live2Dいじり回し勢 (@Ganeesya) | Twitter)が開発されたLive2D Drawerです。記事執筆時点ではバージョンが1.0.1です。

AviUtlを導入してない・できない!

使ってみたいけどAviUtlの導入をしてない・できない!
確かに、AviUtlは便利ですけども導入が少々難しいです。
そんな方へ。以下の動画リンクから導入してみてください。
www.nicovideo.jp

こちらの導入編・初期設定編。任意でマイリストから2本のチュートリアル動画を観れば、AviUtlの導入・操作が分かります。
ネックはプラグインの部分になりますので、その点を気を付ければ他動画の導入動画でも使えるようになるはずです。
では本題へ。

Live2D Drawerとは?

youtu.be

AviUtlでLive2Dを直感的に扱えるようになるプラグインです。
これはEntyの出資者に公開される「完全版」。そうではない方の「一般版」があります。
一般版は機能限定版になっていて、完全版と違い一部使えない機能があります。
けれども基本的な機能は揃っています。
今回は一般版を使っていきます。

ダウンロード~導入

ダウンロードリンクは動画本文内にありますので、リンクをクリックしEntyへ飛びます。
ダウンロードはEntyのアカウントが必要になるので、ログインします。
もしEntyアカウントを持っていない場合はグーグル・ツイッター・メールアドレスのいずれかでアカウントを作成します。
ダウンロードが済んだら解凍します。

解凍出来たらinstallフォルダを開き、赤枠内の2つをコピーします
f:id:traitam:20170616204235p:plain

それをAviUtl/Pluginsフォルダにペーストします。
f:id:traitam:20170616204659p:plain
ここで大事なのは、exedit.auiというファイルがある場所へペーストするという事です。
これが無い場所へプラグインを入れても動作しません。

ペーストした後は、AviUtlを開き、
拡張編集ウィンドウを「右クリック」→「新規プロジェクトの作成」でプロジェクトを作成します。
その後、拡張編集ウィンドウを「右クリック」→「メディアオブジェクトの追加」でオブジェクトを追加します。
そして、カスタムオブジェクトの種類選択で「@Live2D」のカスタムオブジェクトがあれば導入成功です。
f:id:traitam:20170616205518p:plain

カスタムオブジェクトはどこから編集するの?という方へ。
赤枠内にあるカスタムオブジェクトをダブルクリックすれば表示・非表示ができます。
f:id:traitam:20170616205559p:plain


今回はここまで。次回は実際にLive2Dを表示したり、各カスタムオブジェクトの説明をしようと思います。
それではみなさん、楽しい創作ライフを!


次回
traitam.hatenablog.com

簡易ディスプレイボードを作る

ディスプレイボートとは?

ディスプレイの上にスペースを作って物を置くボードの事です。
以下リンクは製品です。
www.kingjim.co.jp

あると何かと便利ですが、小さいサイズでも1000円~2000円、大きいサイズだとそれ以上のお値段がします。
個人的にはちょっとお高い。

でも使ってみて、本当に使えそうか試してみたい。
という訳で100均のものを使って簡易ディスプレイボード作ります。こういうの作ります。
f:id:traitam:20170313151601j:plain

この記事は以下の方にオススメです

ディスプレイボードの大まかな使い心地を知りたい
製品が高くて手が出しづらい
100均スキー

作り方
  • 用意するもの

f:id:traitam:20170313150911j:plain
・ワイヤー型タブレットスタンド2つ
・水切りスタンドネット

小さいものを作りたい場合はタブレットスタンド1つでも事足ります。
水切りスタンドネットにした理由は「埃が溜まらない」という理由で採用しました。
細長い板状のものであれば代用可能です。花壇受け皿、木の板、まな板等々……。

  • 組み立て方

まず以下のようにタブレットスタンドを形作ります

f:id:traitam:20170313151251j:plain

コの字型の方でディスプレイに引っ掛けて、もう片方で支えるという形です。これを2つとも同じように作ります。

次に、作ったら実際に引っ掛けて面が水平になるように調整します。
調整が終われば、ねじをキツめに締めてしっかりと固定します。
ここが緩いとモノが落ちます。
f:id:traitam:20170313151339j:plain

最後に網を乗せれば完成です。
f:id:traitam:20170313151519j:plain

好きに物を乗せましょう。
私はカレンダー置いたり、Kinect置いてモーキャプ台座にしたりしてます。
f:id:traitam:20170313151601j:plain

注意点
  • 極端に重いものは乗せないようにしましょう(崩れる危険性を考慮して。大体1.5kg以下?)
  • 液体類は乗せないようにしましょう(飲み物をディスプレイの後ろでこぼして突然の死を防ぐため)
  • ディスプレイとの相性問題があります。ディスプレイのフチが狭いものはディスプレイを破損させる恐れがあります。私のディスプレイは20mmで、ちょうどコの字部分がフィットしました。
  • 実践して、万が一損害が起きても当ブログは一切責任を負いません

それではみなさん、楽しい創作ライフを!

apricotモデル作成(その7)

前回
traitam.hatenablog.com


今回は特定の時間や特定の日時にセリフを言わせるように加筆していきます。

ここでは主に、正規表現を取り扱うので理解されている場合はやっていることは前回より前と変わることはありません。では、始めていきましょう。

記述としては以下のようになります

    <!--サービス開始日ボイス-->
    <sequence name="Tick" state="\d{2,4}-04-23[\w\s]00:00:00">
      <sequence name="Samidare.ArmSwing" />
      <message>提督、今日は記念日ですね!<break/>素敵ですね!<break/>五月雨、いつもよりがんばっちゃいます!♪</message>
      <sequence name="Samidare.Say" />
    </sequence>

艦これのサービス開始時が4月23日だったので正規表現を用い、state内を書いていきます。

そもそも、正規表現とは。です。
だいたい「この文字があったら拾って処理にかける」とか「この文字はいらないから捨てる」みたいなかなり抽象的なシステムを書く時に使います。
今回、上記の記述だと「(何年でもよい)4月23日の(何時でもよい)タイミングで呼び出す」という形です。

正規表現は、書いてる私も現在勉強中なので多くの事が言えないですが、そんな感じだと思います。

また、シーケンスがTickですので、「今日は何日です」というタイミングで呼ばれます。

別の例を見てみます。

    <!--梅雨ボイス-->
    <sequence name="Tick" state="\d{2,4}-(05|06)-([0-2][1-9]|30|31)[\w\s]00:00:00">
      <message>梅雨の季節、五月雨、結構好きなんです。<break/>なんかこう…雨って良くないですか?ね♪</message>
      <sequence name="Samidare.Say" />
    </sequence>

state内が一気にごちゃっとしました。
これは「5,6月の01~29、もしくは、30日、もしくは31日のタイミングで呼び出す」という形です。
縦棒で、もしくは、orの表現ができます。日にちは2桁あるので[2桁目][1桁目]という記述になっています。これは時間でも同じような表現で記述ができます。
結構複雑なのですが、正規表現は結構大事な分野なので覚えておきたいですね。

無事に実装が終わると、Startシーケンスの後に期間内であれば以下のように喋ってくれます。
f:id:traitam:20170208105732p:plain

本日はこれでおしまいです。

それではみなさん、楽しい創作ライフを!

あ、そうだ。現段階から五月雨ちゃんモデルをGithubの方に上げました。
興味のある方はどうぞー。
github.com