VRCアバター「くれなゐ」を強引にQuestPoorにした話

タイトルの通りです。Poorです。Mediumは無理でした。
表情以外のすべてを捨ててでもUnity上でポリゴン削減したい方なら参考になるかも。そんな人たぶんおらん

くれなゐはポリ削りに向いてない

アバターの最適化でよく言われるのは、見えない部分のメッシュを削除しろと言うことです。

テクスチャの色変え以外やってない状態
  • 長く複雑な髪

  • 前の開いたジャケットとシャツの二重構造

  • 穴の開いた袖

  • 生足

  • 大量の装飾

  • 細かく書き込まれたテクスチャ

難産になりそうなのはちょっと考えればわかりますね。
Quest用シェーダーは両面描画ができませんので、ジャケットは裏地にポリを割くか内側が透けるかの二択になりますし、穴から見えてしまうので腕を消し飛ばすのも躊躇われます。服と違って脚は顔ほどではないものの雑に削るとすぐ崩れてしまいますし、テクスチャも雑に削ったところが可視化されかねません。髪は比較的削りやすいですが、元の数が多いです。装飾も削りやすいですが全体の雰囲気が結構変わります。
ちなみにこのアバターは無料版の方だと、最初から手袋とブーツの中身がありません。その状態で60000ちょっとです。
今回はそこにうたげむし3匹を上乗せして開始しました。余計なもの入れるなって?うたげむしを見せるためのQuest対応なので……
しかもBlenderを通すとボーンが少々壊れることが判明しています。なるべくなら本体部分はUnity上で完結させたいところ。別にVeryPoorでもいいのですが、どうせならPoorにしようかなと。
Blender使いたくないって言ってるのにアホかな?

まずは簡単なところから

まずは装飾を削ります。と言いたいところですが、マテリアルの結合からです。使えるマテリアルスロットが4つしかない上に左右のうたげむしにも持っていかれますので結合が必須なのですが、メッシュをさんざんこねくり回したあとにUnityだけでテクスチャのアトラス化ができるすごい奴で結合したら、なんかぶっ壊れたので最初に結合します。つら。
終わったらMeshDeleterWithTextureで削れるところをどんどん削っていきます。ポーズ固定なので邪魔な裾も切り落とします。どうせ使わないので表情変化用のメッシュも削ります。冷や汗とかシイタケ目とか。

これは使いまわしのポーズ参考画像
ほぼ消し終えた状態。だいぶすっきり

胸元の留め具は1個だけ残しました。あとアホ毛も引っこ抜きました。
ここからまずは素体の胴体部分、背中側のシャツとジャケットの裏地を削ります。ここで重要なのは、見えない部分だけ削るのではなく、覗き込んだら見える部分も諦めてどんどん削ることです。あとである程度どうにかできますので。
ここまで消したら一度保存し、次にポーズをとった際に見えなくなる部分を削ります。腕を下すのでジャケットの腋周りを削る、両足が重なるのでブーツの内側を削る、うたげむしを手に持つので手のひらを削る、など。

この後素体の腋も消し飛ぶ

引っ張れ!メッシュ!

あれこれ消し飛ばしてもすぐに限界が来るので、見える部分にも手を出します。
二の腕や胸元、ジャケットの裏地など、テクスチャが単色もしくはそれに近く、多少変形させても違和感がない場所の大半を消し飛ばします。そしてにゃんにゃんメッシュエディターを使ってメッシュを変形させて誤魔化します。向こう側が透けていなければ無問題の精神でとにかく引っ張ります。形が崩れても知ったことじゃないと言わんばかりに引っ張ります。どうせ覗き込まれなければよくわかりませんし。ウェイトに気を付ける必要はありますが、どうせポーズ固定なので……
この時、すべてのマテリアルが結合されているせいで作業に支障が出ます、にゃんにゃんメッシュエディターは見えないメッシュは引っ張れないので。結合されていなければ邪魔な部分のマテリアルに透明なものをあててやればいいだけですが、結合されているのでそうもいきませんし、ワイヤーフレーム状態でもさっぱりわかりませんので、透過に対応しているシェーダーに切り替えてアルファマスクでなんとかします。
見えててもクリックできなくて引っ張れなかったりしますがアアアアアアアアアアアア!!!!!と叫びながらどうにかします。向こう側が透けていなければいい。(大事なことなので2回)

尻、爆散

それでもやっぱり無理だったので、更に素体を消し飛ばすことにしました。下から覗かれると尻が見えるわけですが、そこを塞いで見えなくなった部分を全削除します。蓋で増えたぶんよりもはるかに削れますので。スカートの中がパンツではなく虚無だったり深淵だったりするのは、パンツを丸見えにするわけにいかないタイプのゲームだとあるあるなので理解を得やすいですし。

使うツールの関係でボーンを付けたがなくてもいい

底面を塞ぐための12角形+前からの視線をガードする壁をBlenderで雑に作り、これまた引っ張り引っ張りして蓋にします。これをティターニアシステムと名付けました。由来?検索すればわかるよ。
これで尻と股間と太腿を大胆に削れました。今回はSkinnedMeshである必要があったので、雑にボーンをつけてあります。

唯一ローポリ化できる髪、しかしやりすぎると目立つ

あらかた削り終わってから髪の毛に手を付けます。モデルをボーンごと複製してMeshDeleterWithTextureで髪の毛だけ取り出します。後回しにしたのは、ローポリ化できるとは言えやりすぎるとものすごく目立つので使えるポリゴンのぎりぎりを攻めたいからです。他の見える部分は滑らかなのに髪の毛だけローポリ(しかも無理やり減らしてるのでバキバキ)というのはバランスが悪いので。
ツインテールを途中で切り落とし、削れる部分を先に削ってから、にゃんにゃんメッシュエディターで割合で減らします。そして切れ目の穴があいたところを雑に閉じる。どうせ頂点の数が合わなくて綺麗に閉じれませんので、適当でいいです。それっぽければ。

ところが、許容範囲の限界まで髪の毛を削っても20000には届きませんでした。切り落とした後にさらに0.3倍にしたのですが……

指を切り落とす

そこで、うたげむしを持つ手を更に削ることにしました。指先をうたげむしにめり込ませ、手のひら側と指先を一気に切り落とします。現実でも猫とかを掴むと、毛に指が隠れますよね。そういうことです。指はよく曲がる場所なのでポリ数も多く割かれています。ここを切り落とすだけでだいぶ浮きます。腰回りもそうですが、関節部分があるとないとで大違い。一気に1500ぐらい削れました。

仕上げにボーンを引っこ抜いてSkinnedMeshの結合

取り出した髪の毛を再度体にくっつけます。AvatarAssemblerで元の位置に接続、ボーン数がオーバーしているので使わないボーンをModelBoneDeleterで引っこ抜き、最後にAvatarOptimizerでSkinnedMeshの結合を行います。これがあるのでわざわざティターニアシステムにボーンを入れたわけです。今回、うたげむしで2枠のメッシュを潰されているのでスキンメッシュとして結合するしかなかったという。結合のためにメッシュむし2匹と別にスキンメッシュむし1匹を用意したりもしました。メッシュむしはメッシュむしで、結合するわけにはいかないので苦肉の策。

そんなこんなでQuestPoor達成。
次はフォールバックアバターに手を出そうかと思います。


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