見出し画像

cluster用のVRM調整ツールを作ったついでにVRoidFFのランウェイに出てみた話

VRoidFF、参加してませんでした

当店、一応は衣装屋なんですよね。

プログラマー?ちがいますよ?「ドリルの穴が欲しい」と思ったらいつの間にかドリルを作ってただけですよ?

ただ、衣装制作とか手が追いつかないくらいに自分の時間がプログラムの開発と保守に追われていたというのは事実です。ソフトウェアのメンテとかもやりたかったのもあるし、年末年始は色々イベントが重なっていることもあって、VRoidFFは最初は気にも止めていませんでした。基本マイペースです。

clusterでテクスチャが破綻する問題がひたすら気になっていた

cluster向けに少しでも綺麗に着られる衣装を作ろうと思ってたんですが、どうしてもリサイズによる破綻が酷くて、それを克服するためのソリューションが必要だと思ったんですね。UnityやBlender立ち上げてどうこうじゃなくてもっと気軽に誰でも使えるような。そしたら気になる情報が。

思いついたら即行動、ということで、Unityを立ち上げずにVRMのテクスチャをリサイズできる方法を思いつき実践します。

もっと簡単に使えるソフトが必要と思った

手抜きのための労力を厭わない偏執狂の佐世がこれで満足するわけがなく、更にはこの後数日の間にGLBコンテナの仕様を調べ上げ、UniVRM/UniGLTFに依存しないVRMのパーザを書き上げてリサイズツールをリリースするという行動力モンスターぶりを発揮します。

とはいえ、リサイズの実処理を行うImageSharpというライブラリは別のソフトで使った経験があるし、ここ数ヶ月VRoid Studio関連のデータ編集ツールを作ってきた私には朝飯前な仕事でした。

実はこれ以外にもRubyでVRMファイルに含まれるテクスチャファイルを一括抽出するスクリプトを書いているのですが、こちらのFinder拡張(Automator)で内部的に使われています。Rubyで書いた自作のVRMパーザをC#に移植して、という流れなので実際こっちの方が先でした。

そしてVRoidFFのランウェイにエントリー

少なくともVRChatなら参加してなかったと思いますが、clusterでのVRoid関連イベントということで、VRoidを利用する人にアピールする絶好の機会だと思ったわけですね。

もちろん当店(佐世の裁縫台)は今回のVRoidFFにはショップとして参加していないので、基本借り物レースなわけですけど、カジュアル系衣装に定評のある綿雪ひぃさんのとこの衣装を中心にコーディネートすることにしました。

私はVRは割と好きでOculusの単体版はGoからQuest2まであったりするんですが、飽くまでスタンドアロンで使うためで、PCと繋ぐためではありません。clusterのOculusQuest対応遅れは割と痛かった。HMD3台持ってるのに一つも使えないじゃん!

PCがWindowsでそこそこのグラフィック性能あったらOculus Linkで使うと言う手もあったかもしれませんが、私はMacです。

よくお世話になってるコワーキングスペースさんに機材貸してもらうという手も考えはしたのですが、時期が時期だけに諦めました。まあ、慣れない動作で見苦しく動くよりも、撮影班がそれらしいカメラワークをしてくれることを期待してとりあえず歩いたり回ったり視線を移動するだけでも十分いける気もしたり、しなかったり。

どこで頑張るか?

ただ買ってきた衣装を着てステージの上で歩いたり突っ立ってるだけってのもアレなんで、四肢が自在に動かせない分どこでアピールするかと言う話になるのですが、そこで初めて「佐世の裁縫台」の商品を使うという流れになるわけですね。

もちろん衣装ではないですよ(エントリーしてません)。テクスチャをディティールが潰れないようにリサイズするのも、技術です。これは私が言うから間違いないのですが、アトラス解像度4096pxで出力してから2048pxでリサイズした方がVRoid Studioが吐き出す2048pxよりも確実に綺麗に出力できます。

これは4096pxでマテリアル結合で出力したヴィクトリアちゃんのアトラスです。これを2048px上限としてにそのまま縮小する感じになります。50%に縮小なら割とどんなアルゴリズム選んでもそうそう汚くならない気はします。

スクリーンショット 2020-12-17 2.46.03

続いてこっちがVRoidで2048pxで出力したアトラス。

スクリーンショット 2020-12-17 2.45.42

どうして4096pxからリサイズしたほうが綺麗なのかなんて聞くのが野暮な程度に、VRoid側に問題があります。なぜ整数分の1スケールで縮小しないのか?この程度の差でも、ズームするとディティールが破綻してるんです。速度優先のチープなリサイズアルゴリズムで、整数スケールですらない縮小率で縮めたらドットが潰れるに決まってるでしょう。言うまでもない。

そしてノーマルマップに手を入れた

でも、拘りポイントはそう言うことだけではないのです。それで当日の昼に書いたこの記事の内容になるわけですが、準備期間は本当に短かったです。件の「cluster用テクスチャ最適化ツール」のバグとかないかの検証に、テクスチャをガチャガチャと差し替えてみたのです。テクスチャ差し替えって便利ですからね。だからちゃんと動かないといけない。

それで、色々試してて、間違ってノーマルマップ想定外のに差し替えて表示確認してたときに「あれ?」と思ったんです。トップスもアトラスの該当部分に適用してやるだけで、ノーマルマップが適用されるという重大な事実。結果として、ノーマルマップ用アトラスで紫色になっている部分の全体にかかる衣装が、ノーマルマップが適用できるという結論に至りました。

そもそも衣装部分はアトラス化しないとノーマルマップはVRM内に含まれないのですが、clusterではマテリアルを削減するためにアトラス化を行う必要があるのです。衣装用のノーマルマップを入れる場所は実質0コストで入手できることになるわけです。

このノーマルマッピングに関する記事を書いているのはランウェイの当日です。すごい発見をしたのだと、よっぽど嬉しかったのですね。

しかしテクスチャがアトラス化してあると、その部分要素だけを差し替えるのって、めんどくさいと思うわけですね。4096x4096で出力すると、全てのテクスチャが実寸で表示されるので、比較的アトラスの修正もしやすいのですが(50%ですらない2048px版アトラスでは目も当てられない)、ノーマルマップのテクスチャをわざわざ指定位置に合わせてから貼り付けるなんて作業は、割と単調で面倒だと思われます。

ノーマルマップのアトラスもVRoid Studioで作れる

だったらVRoid Studioにやらせましょう。ベースカラーマップとノーマルマップの位置関係は同じなので、衣装テクスチャとして着用し、ダミーのVRMを出力します。こうすることで、そのVRMファイルから、対象のVRMと同じ並びでアトラス化したテクスチャを得ることができるのです(4096x4096pxの場合、対応するノーマルマップのサイズは2048x2048pxなので、50%に縮小する必要あり)

スクリーンショット 2021-01-04 19.34.54

VRMを出力したらテクスチャを取り出して差し替えるだけの簡単な作業です。ワンピース以外の部分は不要だとしてもそれで十分です。レイヤーマスクをかけて元のノーマルマップに貼り付けるだけの簡単な仕事ですので。

これもまた回りくどいんで、VRoidのアトラスを切り貼りするためのソフト書くかもしれません。

模様が潰れるようにノーマルマップもリサイズによってディティールが破綻します。clusterのワールドやイベントの観覧主体で使うには、512px四方のテクスチャが必要でしょうね。

バイキュービック法は線を保持するには強いのですが、衣装の材質パターンみたいなものは実用に耐えなくなってしまうことも多いので、ノーマルマップも512px用にデフォルメしたものに差し替えてやると良さそうです。

ステージに立ってみた感想

いや、他の参加者のフルトラッキング勢がグリグリ動くの見るとやっぱりHTCの高価なトラッカーが売れるのも納得というか。。。そんな中でも私の拘りポイントに気づいてくれた人もいたようで私は満足です。

本来なら司会の人が説明する台本に入れるべきだったんでしょうけど、ノーマルマップ入れる変更を行ったのが当日だったので、台本に入れる時間的余裕がなかったというのが正直な話です(そもそも技術的な話は裏方仕事であってステージ上で語られるものじゃないと思ってるのですが)。

衣装屋として名前が挙がったのは「結果論」

エントリー時点では誰がどんなコーデで参加するなんて情報はありませんし、衣装作者としての佐世の名前が呼ばれることになったことについて事前打ち合わせなどもありません。

次に機会があったら衣装屋で参加しますね。VRoid Studio外での編集については特にレギュレーション違反にはならないようですし、ノーマルマップつきで衣装を売っていこうかなと思ってます。

この記事が気に入ったらサポートをしてみませんか?