帆立の貝殻

HOTATE's VIRTUALAB

View project on GitHub

自分の部屋をVRChatにアップロードしたので、そのあたりの話を。

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8">

 この部屋は、"フォトグラメトリー"という2Dの写真から3Dのオブジェクトを復元する技術を使ってVRChatにアップロードしました。 フォトグラメトリーは写真の撮り方などに多少のコツなどありますが、無料のソフトでもそれなりに部屋を再現することができます。 こちらから見れます → https://www.vrchat.com/home/launch?worldId=wrld_5cf851a5-eb94-4e1f-82be-c4283ba57747&instanceId=45250  今回はVRChater向けに自分の部屋をVRChatにアップロードするという目標で記事を書いていきます。

部屋を片付ける

 一番重労働!  床に物が落ちていたりすると写真を撮っている途中でモノが動いてしまい、フォトグラメトリーがうまくいかないので物を片付けましょう。部屋の中心に椅子があると、邪魔になるのであらかじめ部屋の外に出しておいたほうがいいかもしれません。 あと、意味があるかは微妙ですが、まっしろな壁はフォトグラメトリーで再構築しづらいので、ポスターなどを貼っておくとよいです。

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8">

 窓や鏡,PCディププレイなどの反射物はエラーの原因になるので、カーテンを閉める,ディスプレイに何か表示するなどの対策を取ります。

写真を撮る

 スマホや1眼カメラなどで部屋の写真を撮ります。複数枚の写真を撮るうえで、写真ごとに明るさが変わってしまうと困るので絞りとシャッター速度を固定します(Fは高め、シャッター速度は早めがおすすめです)。手振れはエラーの原因になるので、しっかり落ち着いて撮りましょう。

 またフォトグラメトリーの処理には写真どうしがある程度被っている必要があるので、それを意識しながら撮っていきます(RealityCaptureの初期設定では65%)。また物の形が写真から読み取れるように、対象物に対して回り込みながら撮影します。  8e36f4ec1cf6a51c20e66efcb0292ec5.gif ➡ d03a2d7c1ea85c8aed7404b6328816b3.png

 部屋の撮影をするときはできるだけ広い範囲を一度に撮れるように部屋の外周を回りながら、部屋の内側にカメラを向けて撮影します。 heya.png feef89ef45786f216412260381fac6a8.gif  また同じ場所でも、"低い場所から上に向けて","普通の高さから前に向けて","高い場所から下に向けて"と何回か撮影するのがコツです。 kabe.png 6dbf2e41f392dcd87af7c9360be04b9e.gif

 部屋全体を撮影した後、特に気になる小物を撮影しておくとうまくいきやすいです。  今回は7畳ほどの部屋で合計700枚の写真を撮りました(ちょっと多すぎかも)。

フォトグラメトリーのソフトに画像を読み込む

 フォトグラメトリーができるソフトには無料のものと有料のものがあります。無料でも十分なモデルは作成できますが、こだわるならRealityCaptureなどの有料ソフトを使うこともお勧めします!  今回はMeshRoomとReaityCaputureのそれぞれでフォトグラメトリーをしてみます。

MeshRoom(無料)

 ①MeshRoomを公式サイトからダウンロードします。 https://alicevision.org/#meshroom 8a5c137782dd402602318456519c3478.png  ②MeshRoomを起動します。(ここのチェック入れないとダメかも) 6fc8e39112ca5cac31bda8b860382177.png  ③先ほどの画像をドラッグ&ドロップで読み込みます。 05d3ed53b3115d0ccf26cd045e6a4c71_1.png  ④プロジェクトを保存した後、上の"Start"ボタンを押して処理を開始する。(部屋とかだと1日以上かかるかも) 9fe627716e785a4927028cbf29cfc3ea_1.jpg  ⑤RoadModelが表示されたら終了。  プロジェクトを保存したフォルダの MeshRoomCash\Texturing{数字とアルファベットのフォルダ}\texturedMesh.obj,texturedMesh.mtl,texture_1001.png あたりをUnityにインポートすれば読める d4463f500618ac362936f3b581ff6789.jpg

よく使う設定項目

CameraInf>DefaultFieldOfView 撮影に使ったカメラの視野角。 DepthMap>DownScale デプスマップのダウンスケール。下げればクオリティが低くなる代わりに処理が速くなる。 Meshing>MaxPoints 出力メッシュの最大ポリゴン数。ポリゴン数が多すぎるとUnityがまともに動かないので、10万程度にする。 MeshFiltering>SmoothingInterations メッシュのスムース。ノイズが減るがメッシュが消えることがある。 Textureing>FillHoles テクスチャの隙間の色が補完される。 5730229be9b4f3f5993e51b4eff79e28.png

RealityCaputure(有料)

 ①公式サイトもしくはSteamからRealityCaputureをサブスクライブ、ダウンロードする。  (何度も出力を試せるので、Steamでのサブスクライブが個人的におすすめです) https://store.steampowered.com/app/489180/RealityCapture/?l=japanese  ②先ほどの画像をドラッグアンドドロップで読み込む。 387fa5240d267293535648fd2a3eac58.png  ③WorkFlowタブのProcess>Startを押して処理を開始します。 ac9e686883df80037debec0f8b971d5d.png  ④ReconstructionタブのTools>SimplifyToolを起動し、右下に出てきた設定ウィンドウのTargetVertexCountを10万程度に設定しSimplifyを押しポリゴン数を減らす。  ⑤ReconstructionタブのModelColor&TextureのTextureを押してテクスチャを貼る。 cc3a64988fcdc06af1c7de14d044befe.jpg  ⑥ReconstructionタブのExport>Modelからfbxを選択しFBXとして出力する。 dfdbe6ce62b1198a8728fd2ddfe25ce7.jpg

よく使う設定項目

Color&TestureSettings>DefaultUnwrapPaqramenters>MaximalTextureResolution 出力テクスチャの解像度 Color&TestureSettings>DefaultUnwrapPaqramenters>MaximalTextureCount 出力テクスチャの枚数 AligmentSetting>MaxFeatures>MaxFeaturePerMpx メガピクセルごとの特徴点の最大数(160kくらいがいい) AligmentSetting>MaxFeatures>MaxFeaturePerImage 画像ごとの特徴点の最大数? AligmentSetting>MaxFeatures>ImageOverlap 画像同士の重なり(デフォルト65%) MaxFeatureReprojectionError 許容するエラー?(大きめにしたらシンプルな模様のベッドがループして伸びた) e36c18da6f2218b711fb408e9a759929.png

モデルを修正する

 BlenderやMeshLabでモデルを読み込み、穴埋めやアーティファクト(余計なポリゴン)を消す。 5962136b9cc7004ecd0fa5704320279d.png

Unityに読み込む

 ①fbxファイルとテクスチャをUnityに読み込む。シーンにドラッグ&ドロップする。 89a8b2e55346630bdc14c63a2fe68e66.png  ②マテリアルのシェーダーをUnlit/Textureにする。 a45b337ee0764759dea9ed3eaea232b2.png  ③テクスチャがぼやけている場合は、テクスチャ解像度が適切に設定されていない可能性があるので、importSettingから設定する。 e9eb9cbfe8a4e3e86400f4952e4be056.png  ④Cubeを組み合わせていい感じにコライダーを作る。 4bdd051af6bbdae57a9b6d95ce8cc945.png  ⑤VRChat等にアップロードする。

おわり

 VRChatでフォトグラメトリーの部屋を集めた企画をしているので、興味あればどうぞー。

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8">