まだ死んでない

なんか作ったり作らなかったりしたいです。

ニコニコのブロマガがお亡くなりらしいので引っ越してきました。

f:id:x120byte:20210911192245p:plain

どうも、こんにちわ、120と申します。

ニコニコのブロマガがお亡くなりらしいので引っ越してきました。

その辺りの記事のリンク貼ろうと思ったんですが、そのうちリンク切れになるリンク貼っても仕方ないな、と思ったので貼らないことにします。ニコニコのブロマガは2021年10月7日(予定)で終わりらしいです。サービス開始は2013年1月23日らしいので、大雑把に10年弱ですね。

元々VRMと呼ばれるVR向けの3Dアバターモデルデータフォーマットに関する情報をMMDの流れを汲んで、関連情報の発信場所として選んだサービスでしたが、動画サービス注力とのことで先述のとおりとなりました。

と言いつつ、実は流石にニコニコのブロマガはシステム的に古すぎるなぁ、と思って途中でnoteに移行しました。noteを選んだ理由は、移行先を探してる頃にTwitterのタイムラインの記事がよくnoteで上がっていたから、という理由でした。

はてブも知ってはいたのですが、せっかくなら新しいnoteを、という感覚で選んだのですが、noteはニコニコのブロマガからの移行先に載っていなくて、はてブを選択したに至ります。はてブは結構昔からあると思っていたのですが、意外と11年からなので、ニコニコのブロマガとほぼ同世代なんですね。

はてブで印象的なのは増田という文化?(スラング?)です。Twitterからリンクが貼られていて、そこから知った言葉?だったのですが、最初意味が分からなかったです。

あ、ニコニコのブロマガの閲覧数が結構回っていたので、記念にここにも貼っておこうと思います。

f:id:x120byte:20210911193728p:plain

思いついたままに書いたので、支離滅裂な文章でしたが、せっかくなので記事を書いてみようと思って試した内容だったりします。画像がドラッグ&ドロップとかコピペで貼れるのが分かったので満足です。これが出来るか出来ないかが、個人的には重要だったりします。あと、エディタとHTMLとプレビューがタブっぽく切り替えられるのは良いなと思いました。

MMDとVRMのお人形遊び

概要

コレの宣伝のために、MMD絡めてテキトウに戯言を並べます。

MMD

この場でMMDの説明は不要でしょう。初版は2008年ということで、10年経過しても続いているニコニコ動画の主要コンテンツの一つと言えると思います。最盛期ほどの盛り上がりは見られないものの、運営体制が変わったMMD杯が今年も行われています。

MMD杯の余談

ここで悲しい現実です。
↓再生数13k


↓再生数277k(同じ動画のYoutube投稿)
https://www.youtube.com/watch?v=r9V5gy-s2J0&feature=youtu.be
これがニコニコの現状です。他にもこうした顕著な例はありそうですね。

↓再生数38k

こちらが100k行かないのも悲しい現実です。

VRM

VRM - VR向け3Dアバターファイルフォーマット -
VRM」はVRアプリケーション向けの人型3Dアバター(3Dモデル)データを扱うためのファイルフォーマットです。glTF2.0をベースとしており、誰でも自由に利用することができます。
また、Unity向けのVRMファイルの読み書きを行うC#による標準実装(UniVRM)がオープンソースで提供されます。
引用:https://vrm.dev/

VRMの実情

こちらの初版は2018/03/27です。最初はバーチャルキャストから始まりましたが、今は多数のサービスやアプリが存在します。とは言え、これは私の想像ですが、勢いを失ったと感じざるを得ないMMDよりも更に規模は小さいように思われます。(点在しているだけで全体規模としてはそうでもないかも……?)
参考:https://vrm.dev/vrm_applications/

VRMMMD

そもそもこの二つはファイル形式とアプリケーションなので、並べて書くならVRMとPMX(PMD)なのですが、それはともかく、VRMは公開から1年以上経過した今もMMDに変わるアプリケーションはありません。比較的近い文化圏から移民するには完全なる上位互換でない限り、なかなか躊躇ってしまうのが実情だと思います。

Unity

VRMMMDが存在しない理由として、Unityの存在が挙げられると思います。VRMを用いてMMDのようなことをしたければ、Unityを使った方が自由度も高く、高いクオリティの作品を作ることが出来ます。また、VRMMMDは恐らく、現在VRMに関心がある技術者各位にとって、あまり関心のない部分なのではないかとも思います。踏み込み難い背景事情に加え、そもそもVRを意識した形式であり、更にはこの手のツールは構成上、開発における技術的追求部分は少なく、只管にツールとしての作業的実装要素が強いと考えられる点を理由として挙げます。

VRMMMD

MMDの凄い所はMMDだけで全て完結してしまう所だと思います。MMD利用者であったとしても、モデルのファイル形式がPMXであることなど意識していない人が居るのではないかと思うほどです。更に動画を視聴する側にとっては「PMXなにそれ美味しいの?」だと思います。

これに対してVRMはかなり混乱してしまうのが事情だと思います。VRMとはフォーマットの名前でありながら、現状VRMと言えばUniVRMを刺しますし、そのUniVRMはUnityと組み合わせて使うものです。前述したとおり、VRMはFBXから作成するのが基本形と思わせつつ、VRoidやそれに類するモデル作成ツールも存在し、更には生成したVRMを使用できるアプリも多岐に渡ります。(逆にココが良い点なのかもですね。)

オリジナルと版権

MMDにオリジナルが無いとは言いませんが、元々が初音ミクであり、土壌がニコニコ動画ということもあり、MMDのモデルと言えば版権モデルを思い浮かべます。ボカロ、アイマス、東方の御三家時代から、ボイロ、艦これ、けもフレVtuberと言った具合かと思います。これに対してVRMはコレ!といった主要作品は無く、VRChatを土壌とした有名モデルのFBXを輸入してくるような状況です。VRoidの存在感は強いですが、版権が持つ強い引力のようなものは感じられません。

ライセンスと価値観

良くも悪くもMMDはライセンス的に緩い故に今があると思っています。砂上の楼閣とまでは言いませんが、奇跡的な経緯で成り立っていると言っても過言ではないように思われます。また、これは個人的にここ1,2年で感じたことなのですが、そうした危ういコンテンツを表立って共有することが憚られる時代になってきているのではないかと思いつつあります。

たとえばツイッターで「コレ面白い!」とツイートする時、(コレ版権的にアウトでは?)と心配するような感じです。ニコニコ動画の下火感はここにもあるのかな?と思ったりします。この辺りの世間的な事情を鑑みるに、VRMの目指す所と現状は合致しているようにも思えますが、実際まだまだ道半ば感は否めません。

まとめ

MMD歴史観と上手く融合、移行、住み分けしつつ、VRMによる更なる繁栄を期待したいと思います。
あ、VRMお人形遊び、宜しくお願い致します。
https://120byte.booth.pm/items/1654585



VRMお人形遊び向けアセットバンドルの作り方

〇概要

VRMお人形遊び
https://120byte.booth.pm/items/1099618
でアセットバンドルを読み込めるようにして、強引にアニメーション&曲再生に対応させたので、そのためのアセットバンドルの作り方を書きます。

〇作り方
※Unityのバージョンは2018.4.0f1です。

アニメーションの動作確認用に何等かのVRMモデルを読み込みます。(VRMモデルの読み込みにはUniVRMが必要です。)


アニメーションコントローラを「Controller」という名前で作成します。


VRMモデルのアニメーターのコントローラに先ほど作成したものを付けて、アニメーションウィンドウからアニメーションクリップを作成します。たぶんですが、作成済みのアニメーションクリップをコントローラに入れても動くと思います。(アニメーションクリップの名前は何でも大丈夫です。)


アニメーションウィンドウの左側のボタンを押して、アニメーターから動かしたい部位を追加します。


タイムラインにキーを打って値を設定します。この時点でUnityの再生ボタンを押せば動きが確認できるはずなので、所望の動きになるまで頑張ります。軽く丸まったようになるのはUnityの持病なので諦めてください。


動きが出来たら曲や効果音を追加します。空のゲームオブジェクトを作成して、オーディオクリップを付ければ自動的にオーディオソースが付いて便利です。必要に応じてボリューム調整やループ設定を行います。


作成したゲームオブジェクトをprefabにします。名前は「GameObject」にする必要があります。インスペクターからプロジェクトにドラッグアンドドロップするとprefabになって便利です。


アニメーションと音に関するファイルを全て選択し、一番右下端からアセットバンドルの名前を付けます。この名前は何でも大丈夫です。


アセットバンドルはビルドする必要があるので、エディタ用のスクリプトを追加します。スクリプトは以下をコピペして使ってください。※なお、このスクリプトはAssets/Editor/に入れないと動きません。

using UnityEngine;
using UnityEditor;
public class NewBehaviourScript : MonoBehaviour
{
[MenuItem("Example/Build Asset Bundles")]
static void BuildABs()
{
BuildPipeline.BuildAssetBundles("Assets/ABs", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
}
}
参考
https://docs.unity3d.com/ja/current/ScriptReference/BuildPipeline.BuildAssetBundles.html


前述のスクリプトを追加するとExample/Build Asset Bundlesというメニューが出てくるので、Build Asset Bundlesからビルドします。※ビルド先はAssets/ABsになっているので、ABsフォルダを作っておきます。



ビルドできたファイルをエクスプローラで開いて、拡張子として*.abを付けてあげたら完成です。


完成したファイルをVRMお人形遊びのANIフォルダに入れたら使えます。

niconareが死んじゃうからバーチャルキャスト向けスライドVCI作成ツールを作ったので宣伝



■まえがき
niconare死んじゃいますね。
https://blog.nicovideo.jp/niconews/104611.html

まぁ、言うて一度も使ったことないのですが、見た事くらいはあります。
私は普段バーチャルキャスト経由で間接的にniconareのお世話になります。

バーチャルキャスト
https://virtualcast.jp/about/

バーチャルキャストでは説明資料にホワイトボードを用います。
ホワイトボードはバーチャルキャスト内のアイテムです。
ホワイトボードを使ったスライドの作成方法は主に2種類あります。

一つは画像のURLを設定ファイル(json)に書き込む方法
https://qiita.com/miyumiyu/items/bb780c9582bb21e10e1d
※デメリットは面倒なことです。

もう一つはniconareです。
https://virtualcast.jp/blog/2019/02/virtualcast151a/
※ご存知の通りniconareはサービス終了の予定です。

■VCIについて
バーチャルキャストではバーチャルキャスト内で使えるアイテム(VCI)を自作できます。
https://virtualcast.jp/blog/2019/02/itempublicstudio/

自作できるのですが、ゲームエンジン(Unity)やプログラミング言語(Lua)など、
一般ユーザーに利用を強いるのはハードルのある作業になります。

Unity
https://unity.com/ja

Lua
https://ja.wikipedia.org/wiki/Lua

なにより、スライド内容ごとにVCI作成作業を毎回Unity+Luaで行うのはシンドイです。

■提案「画像から自動でスライドVCIが作れるツール」
という事で頭に貼った画像のスライドVCIが画像から自動作成できるツールを作りました。





宣伝
https://120byte.booth.pm/items/1297409

動作例
https://twitter.com/120byte/status/1153282775220285440

サンプル
https://seed.online/user/items/f10da44190a607ec651f7d7b7aef856753fb20ab68be76c1930d3faa03edfdea/edit

以上、宣伝でした。

VRMの着せ替え


© Unity Technologies Japan/UCL

余談
 いきなり余談かよ。という感じだと思うので、なんでもいいからやり方教えろ、という人は飛ばして大丈夫です。所謂ハードル下げとか、予防線というやつです。
 国内の3Dモデルの着せ替え文化は、私が知る限りMMD(PMX)→FBX→VRMです。PMXは時代的なものだったり、権利的なグレーゾーンが生まれやすい文化なのもあり、着せ替えのような改変行為はあまり語られていないように思います。無いとは言いませんが、情報の古さや独自型式故のしがらみに加えて若干のアングラ感があり、VRMからすると異世界的に映ります。また、FBXはVRChatで着せ替えがあったと思われます。「思われます。」というのは私がVRChat文化圏にあまり身を置いていないための予想です。よってここから先も予想ですが、VRChatにおけるモデル改変等の情報伝達はコミュニケーションの一環として口伝によるものが多い傾向にあり、インターネット上に情報としてあまり残らない形で伝わっているように感じます。(シェーダーについてはプログラム故に3Dモデルとは文化が若干異なり、この傾向はそこまで色濃くないように感じます。)
 これらの経緯から意外とVRMの着せ替えに相当する情報は、FBX含めなかなか無いように思われましたので、今回の記事の投稿に至りました。私はてっきりこうした情報は多種多様に出回っており、記事にするような必要はないものと思っていました。また、記事にするにあたり思い返してみると、意外と大まかなツールの種類を跨ぐために要素が多様で、需要に対しては確かに畑違いの人には辛い作業であると思われました。ただし、私も3Dモデルについては見様見真似の世界ですので、この記事の内容はあくまで一例としてご覧頂くようお願いします。前述したとおり、要素が多様であらゆる手段があり、ケースバイケース感の強い内容になると思われます。また、私は面倒が嫌いなので質より簡単さ重視です。以降の内容は悪く聞こえる言い方をすると「首のすげ替え」(首切り)であり、良く思わない人も居ますので、その点もご注意をお願いします。

概要
 VRMの着せ替え方法を記載します。頭と体を分けた簡易的な着せ替えです。今回の例ではVRMとしますが、両方または片方がFBXの場合であっても、基本は同様です。応用が利けば小物の追加なども同様にできます。

対象
 読者対象はVRMを作成したことがあり、Blenderの基本的な操作が分かる方とします。Blenderについては、最初に表示されている立方体を移動、回転、変形、削除できる程度で良いです。

注意
 この記事では方法の記載に注力しますが、使用する3Dモデルの利用に関する許諾および規約、ライセンスはよく確認してから作業に入るようにお願いします。

準備
必要なソフトウェアをインストールします。
Blender(https://www.blender.org/)
VRM importer(https://icyp.github.io/)
・UniVRM(https://github.com/vrm-c/UniVRM)
・Unity(https://unity.com/ja)
VRM importerの利用方法は以下が参考になると思います。
 https://www.cg-method.com/entry/blender-import-vrm/
  VRM_IMPORTERの導入
   アドオン(VRM_IMPORTER)のインポート

環境
念のため私の環境を記載しておきます。
Blender(2.79)
VRM importer(0.5)
・UniVRM(0.51)
・Unity(2018.4.0f1)
BlenderのバージョンによりVRM importerのバージョンが決まります。
VRM importerのバージョンによりUniVRMのバージョンがある程度決まります。
※よって、最新のUniVRMを使いたい場合、Blenderは2.80以上が必要かもしれません。
※頭と体の双方がFBXの場合、VRM importerは不要です。

方法
VRMBlenderにインポート
こちらもVRM importerの利用方法と同様に、以下のページにて丁寧にご説明頂いておりますので、引用させて頂きます。詳細はあちらのページをご確認願います。
https://www.cg-method.com/entry/blender-import-vrm/
 VRM_IMPORTERの導入
  データ(.vrm)のインポート
 データ(.vrm)の確認
 ブレンドシェイプの確認
 ボーン、ウェイトの確認
※FBXの場合はBlenderの標準機能でインポートできます。

Blender設定
まず赤枠内のアイコンをクリックして、陰面処理を無効にします。こうすることで、見えている方から反対側の頂点も選択できるようになります。


③頭を消す
モデル次第で作業の内容が全勢違いますが、今回は例としてVRoidを使用します。


目のアイコンをクリックして切り替えながら不要な部分を探します。


不要な部分が分かったら、そこは丸ごと右クリックで削除します。
ボーン構造は消さないように注意します。


モデルによっては、この時点である程度は消せます。
残った部分は、頂点などを選択して消していきます。


このモデルの場合、頭髪の面が繋がっているため、頂点付近で「Lキー」を押すと、繋がっている面が一度に選択できます。選択したら削除します。


「Bキー」で大雑把に選択します。


「Cキー」で細かい所を選択します。


だいたい消せればOKです。


頭を繋げるために首を伸ばします。


頭を傾げた時にはみ出ないよう、広がっている部分は狭めます。
一番端の辺を全て選択して「Sキー」で縮小すると簡単に狭められます。


不要なアーマチュア(ボーン)を削除します。(必須ではありません。)


BlenderからFBX出力すると、Unityで表示できるようになります。


③体を消す
こちらも②同様、モデル次第で作業の内容が全勢違いますが、今回はVRM化したユニティちゃんを使用します。ユニティちゃんをBlenderで読み込む場合は色々問題があるので、別途記事を書きました。
https://ch.nicovideo.jp/xelloss120/blomaga/ar1762869


基本的に同じで、目のアイコンで不要メッシュを探して削除します。


大雑把に選択して削除します。


残った細かい所を削除します。首は閉じたいので1行?残します。


頂点結合をして顎のラインで合わせます。


不要なアーマチュア(ボーン)を削除します。(必須ではありません。)
※ルート(Character1_Reference)から必要部分までは残す必要があります。


BlenderからFBX出力すると、Unityで表示できるようになります。


④Unityで着せ替え
体のRigをHumanoidに変更します。


頭と体をシーンに配置します。


体の大きさを調整します。
Yで首と顎を見ながら高さを合わせて、XとZに同じ値を設定するのが楽だと思います。


体側の頭の子を作成した頭にします。(作成した頭の親を体側の頭にします。)


VRMを作成
あとは普通にVRMを作成するだけです。
メタデータ、マテリアル、揺れ物、表情、目線を設定します。


備考
・体の方の首をまっすぐ長めにして残す方が無難です。(はみ出しや隙間の対策)
・頭の方を丁寧に作り、単体のまま揺れ物設定等をしておくと便利です。(流用が利く)
・同じ頭なら、VRM用の表情設定ファイルは上書きで使いまわせます。
・VRoidの体だと、テクスチャ差し替えによるお手軽着せ替えにも対応できて便利です。
・肌の色が合わない時は、テクスチャのカラーバランス等を画像処理ソフトで変更します。
 下はGimpでVRoidの肌テクスチャを極端な褐色風に変更した例


参考
https://twitter.com/120byte/status/1089459383208050688
https://toylabo.tech/blog/skills/52/
https://www.cg-method.com/entry/blender-import-vrm/

https://icyp.github.io/

ユニティちゃんをVRMにしてBlenderに読み込む

概要
ユニティちゃんをBlenderで読み込むのは顔周りのメッシュが問題となり、結構面倒だったりします。既に色々な方法が模索され、公開されていますが、ここであえてVRM経由でBlenderに読み込む方法をご紹介したいと思います。

準備
使用ツールとバージョンです。
Unity(2018.4.0f1)
UniVRM(0.51)
Blender(2.79)
VRM importer(0.5)

手順
①Unityでユニティちゃんのunitypackageをインポート
②展開されたfbxからUniVRMでVRMをエクスポート
BlenderVRM importerでVRMをインポート

問題
前述の手順でインポートすると以下のようになります。
ちなみにテクスチャは、3Dビューのシェーディングをマテリアルにすると表示されます。
以下はMToonの場合です。

現象としては「顔周りのメッシュのズレ」と「ボーン構造の不具合」です。
以下にこの問題の対策を記載します。

対策
①Character1_Head以下のSkinned Mesh Rendererを持つオブジェクトのTransformのPositionを0,0,0に設定(ダミーの親オブジェクトでオフセット)

具体的な手順は以下を参考にしてください。
①ー1対象オブジェクトを複製
①ー2複製したオブジェクトの(1)を削除(同名の方が都合が良いです※)
①ー3複製したオブジェクトが持つSkinned Mesh Rendererを削除
①ー4対象オブジェクトを複製したオブジェクトの子にする
Blenderで読み込んだ際にウェイトペイントが適用された状態になります。
これで「顔周りのメッシュのズレ」の対策とします。


②mesh_root以下のSkinned Mesh RendererのRoot BoneをCharacter1_Referenceに変更

これで「ボーン構造の不具合」の対策とします。

結果

顔周りのメッシュが正しい位置に表示され、ボーン構造も正常であることが確認できます。
確認のためポーズモードで腕と首を曲げています。

備考
BlenderからFBXでエクスポートすればUnityでも表示できることを確認しています。

ただし、問題と対策はUniVRMとVRM importerのバージョンに深く依存すると思われるため、バージョンが異なればこの通りにはならないことが予想されます。ご注意ください。

この記事の方法で生成したVRMは以下からDLできます。
https://1drv.ms/u/s!Ass7Jg1DXnrDgeZidF7tlFIwUHbvzg

参考
© Unity Technologies Japan/UCL
https://icyp.github.io/

https://www.cg-method.com/entry/blender-import-vrm/
http://bluebirdofoz.hatenablog.com/entry/2019/04/25/091709

VRMとBVH(モーションデータ)

●まえがき
バーチャルキャストやVRoidで話題のVRMですが、現状トラッキング前提の制御が主流となっており、ポージングまでは出来てもモーションの適用については、あまり目にする機会がありません。諸事情あって一緒に語る事が避けられがちながらも、やはり切り離して考えられないMMDの事を思うと、モーションの適用は重要な要素と思われます。余談が続きますが、「VRアプリケーション向けの人型3Dアバター」と謳われつつも、こちらも諸事情あって平面ディスプレイでの活躍の場は引き続き失われることは無いように思われます。

●BVHについて
VRMについては割愛しますが、「まえがき」に向けて現状取れる対策であるBVHについて書きたいと思います。誤解を恐れず強気な表現をすると、BVHはMMDで言う所のvmdです。つまり、モーションデータです。VRMデータを作成するためのUniVRMのサンプルシーンでBVHを読み込み、モーションを適用することができます。



VRMとBVHに対応しているアプリケーションは?
VRM Live Viewer
http://fantom1x.blog130.fc2.com/blog-entry-309.html

UniWinApiVrmViewer
https://dwango.github.io/vrm/vrm_applications/

VRMお人形遊び(宣伝)
https://120byte.booth.pm/items/1099618

他にもあると思います。たぶん……

●BVHの入手方法は?
LiveAnimation
http://www.drf.co.jp/liveanimation/library/la_bvh_sample.html

※参考※
無料モーション(主にbvh形式)配布サイトの紹介
http://a-side.r-cms.jp/blog_detail/id=392

●あんまりない
ご覧のとおり、vmdほど普及していません(私が見つけられないだけ?)。また、前述の入手方法に参考で挙げたページから入手は出来るものの、VRMに適用すると上手く動かなかったりと、互換性の問題もあります。

●なら作る?
実はBlenderにもBVHの出力機能があったりしますが、こちらも前述のとおり互換性の問題で上手く出来ませんでした。(もしかしたら適合する出力設定があるかもしれません。)そこで、LiveAnimationです。恐らく開発も停止している様子で、UIも失礼ながら前時代的ですが、こちらでVRMにも適用できるBVHが出力できます。宣伝した「VRMお人形遊び」に同梱したBVHはこのLiveAnimationで作成しています。また、LiveAnimationはvmd→BVHの変換が出来たりします。ただし、指の動きまでは対応していないようです。(未確定情報)





●いかがでしたか?(自虐)
すみません。あまり建設的な内容が書けませんでした。言いたい事としては、UniVRMはBVHの読み込みに対応していて、そのBVHは一応ながら入手と作成ができる!という所です。

余談ですが、BVH以外でもモーションに対応するアプリケーションも登場しました。
MocuMocuVRM
https://store.steampowered.com/app/1027280/MocuMocuVRM/