iPhoneのScaniverseで撮った食べ物をなるべくきれいにしてVRChatにもってく備忘録
リアルな食べ物モデルを求めて
LiDAR搭載のiPhoneで使えるScaniverseは、撮影したものをFBXで出力することができる。だが、そのままの状態だと普通は余計なものが移りすぎていて容量も無駄が多い。UV展開の内容もかなり扱いづらい形になっているはずだ。
フォトグラメトリ、LiDARのアプリはオブジェクトを認識しない。そのためUVは全部ばらばらで、テクスチャにも無駄が多い。カオスである。これを一つにまとめたい。
これらをきれいにまとめるにはBlenderでハイポリのモデルをローポリに転写する、ベイクという手法がおそらく適切であろうと考えた。かなり自己流で手抜きではあるのだけれど、一応うまくいったしとりあえずはコレでいいだろうと思っている。
実例は以下の通り。カツ丼なのだが、器の部分はうまくキャプチャできなかったので、単純な形だし円柱をうまく切り出して作成。もとのカツ丼部分は余分な部分を削ったものとモデルをローポリモデルのように使ってベイクしたものを使っている。
Blenderでの操作について
参考になったのは上記URL。Blenderは2.83を利用していた。(アップデートをサボってた)
まずは元のモデルをハイポリとここでは定義する。ハイポリ部分も使わない机の部分とかは削っておく。使える部分の中でベイクしたい部分だけ切り出す。カツ丼の場合は器の部分はボロボロで使えないので全削除。具の部分だけ切り出す。これをローポリとする。
で、モデルの原点を一応変更しておく。よくわからない位置が原点になってるとのちのち面倒なので。今やらなくてもVRChatとかに持ち込む前にはやったほうがいい。
で、元のハイポリモデルにローポリモデルを重ねておく。特に動かしてなければ完全に一致するはずだ。お互い動かさなくていい。
で、ローポリモデルについてはUV展開をやっておく。開き直す。
カツ丼はなんかうまく一枚で開けているのだけど、だめなときはばらばらになる。それはしょうがない。きれいにしたい場合は自分でローポリモデルを作ることになるだろう。ローポリモデルにノーマルまで焼けばおそらく綺麗にできるはず…だが大変なのでまだやってない。
まあそれでもテクスチャの効率はたぶんいいはずだし、あまり気にせずやっていこう。
さて、その後に基本的な準備をする。レンダーエンジンをCyclesに。デバイスをCPU -> GPUに。VRChatやってるならいいGPUがあるはずだ。使ったほうがいい。
SceneタブのレンダーエンジンからCyclesを選ばないとベイクという項目がでてこない。
で、ベイクタイプもディフューズでいいらしい。いじるとライティングの影響をうけたり大変らしい。直接照明、間接照明のチェックを外す。カラーだけにする。
レイの距離によって品質が変わるらしいが…よくわからない。0.01とか0.05にしておくといいだろう。
設定後、ベイクを押せばベイクされるが…その前にShadingのウィンドウに移動し、設定をこなす必要がある。
まずハイポリモデルに移動して、ハイポリモデルにつながっている画像テクスチャを選択してアクティブにしておく。
で、ローポリモデルのほうでなにもないところで画像テクスチャを作成。
画像テクスチャノードの新規を押して、最終出力するための画像の名前を書いておく。
作成したら特にシェーダーには繋がなくてOK。一応クリックして選択状態にしておく。
最後にLayoutタブに戻りハイポリ -> ローポリの順でCtrlをクリックしながら複数選択する。で、先程いじったCyclesのレンダリングメニューのベイクを押して暫く待つとベイク画像が生成される。…うまく行かなかったら再調整を繰り返していくしかない。
あとは生成された画像を保存し、ローポリモデルをFBXとしてエクスポートする。
UnityへFBXをインポートし、VRCPickUpやObjectSyncを使うことで持って遊ぶことができる。
いまのところこんな感じで作っているが、もっといい方法が作れるようになったら新しく記事を書く予定。