自分の部屋をVRChatにアップロードしたので、そのあたりの話を。
ここがたった一つの現実だと思った? pic.twitter.com/7ignemc1YF
— ほたてねこまじん🐾にゃんにゃん (@HhotateA_xR) October 3, 2019
おまけ#VRChat #VR #HMD #RealityCapture #フォトグラメトリー#Photogrammetry pic.twitter.com/gmYmEme8kB
— ほたてねこまじん🐾にゃんにゃん (@HhotateA_xR) October 8, 2019
この部屋は、"フォトグラメトリー"という2Dの写真から3Dのオブジェクトを復元する技術を使ってVRChatにアップロードしました。 フォトグラメトリーは写真の撮り方などに多少のコツなどありますが、無料のソフトでもそれなりに部屋を再現することができます。
こちらから見れます → https://www.vrchat.com/home/launch?worldId=wrld_5cf851a5-eb94-4e1f-82be-c4283ba57747&instanceId=45250
今回はVRChater向けに自分の部屋をVRChatにアップロードするという目標で記事を書いていきます。
部屋を片付ける
一番重労働!
床に物が落ちていたりすると写真を撮っている途中でモノが動いてしまい、フォトグラメトリーがうまくいかないので物を片付けましょう。部屋の中心に椅子があると、邪魔になるのであらかじめ部屋の外に出しておいたほうがいいかもしれません。
あと、意味があるかは微妙ですが、まっしろな壁はフォトグラメトリーで再構築しづらいので、ポスターなどを貼っておくとよいです。
特徴点 pic.twitter.com/u9N8hOh7hd
— ほたてねこまじん🐾にゃんにゃん (@HhotateA_xR) September 27, 2019
思ったより効果あった(*‘ω‘ *) pic.twitter.com/P4aElpBfXb
— ほたてねこまじん🐾にゃんにゃん (@HhotateA_xR) September 30, 2019
窓や鏡,PCディププレイなどの反射物はエラーの原因になるので、カーテンを閉める,ディスプレイに何か表示するなどの対策を取ります。
写真を撮る
スマホや1眼カメラなどで部屋の写真を撮ります。複数枚の写真を撮るうえで、写真ごとに明るさが変わってしまうと困るので絞りとシャッター速度を固定します(Fは高め、シャッター速度は早めがおすすめです)。手振れはエラーの原因になるので、しっかり落ち着いて撮りましょう。
またフォトグラメトリーの処理には写真どうしがある程度被っている必要があるので、それを意識しながら撮っていきます(RealityCaptureの初期設定では65%)。また物の形が写真から読み取れるように、対象物に対して回り込みながら撮影します。
➡
部屋の撮影をするときはできるだけ広い範囲を一度に撮れるように部屋の外周を回りながら、部屋の内側にカメラを向けて撮影します。
また同じ場所でも、"低い場所から上に向けて","普通の高さから前に向けて","高い場所から下に向けて"と何回か撮影するのがコツです。
部屋全体を撮影した後、特に気になる小物を撮影しておくとうまくいきやすいです。
今回は7畳ほどの部屋で合計700枚の写真を撮りました(ちょっと多すぎかも)。
フォトグラメトリーのソフトに画像を読み込む
フォトグラメトリーができるソフトには無料のものと有料のものがあります。無料でも十分なモデルは作成できますが、こだわるならRealityCaptureなどの有料ソフトを使うこともお勧めします!
今回はMeshRoomとReaityCaputureのそれぞれでフォトグラメトリーをしてみます。
MeshRoom(無料)
①MeshRoomを公式サイトからダウンロードします。
https://alicevision.org/#meshroom
②MeshRoomを起動します。(ここのチェック入れないとダメかも)
③先ほどの画像をドラッグ&ドロップで読み込みます。
④プロジェクトを保存した後、上の"Start"ボタンを押して処理を開始する。(部屋とかだと1日以上かかるかも)
⑤RoadModelが表示されたら終了。
プロジェクトを保存したフォルダの MeshRoomCash\Texturing{数字とアルファベットのフォルダ}\texturedMesh.obj,texturedMesh.mtl,texture_1001.png
あたりをUnityにインポートすれば読める
よく使う設定項目
CameraInf>DefaultFieldOfView 撮影に使ったカメラの視野角。
DepthMap>DownScale デプスマップのダウンスケール。下げればクオリティが低くなる代わりに処理が速くなる。
Meshing>MaxPoints 出力メッシュの最大ポリゴン数。ポリゴン数が多すぎるとUnityがまともに動かないので、10万程度にする。
MeshFiltering>SmoothingInterations メッシュのスムース。ノイズが減るがメッシュが消えることがある。
Textureing>FillHoles テクスチャの隙間の色が補完される。
RealityCaputure(有料)
①公式サイトもしくはSteamからRealityCaputureをサブスクライブ、ダウンロードする。
(何度も出力を試せるので、Steamでのサブスクライブが個人的におすすめです)
https://store.steampowered.com/app/489180/RealityCapture/?l=japanese
②先ほどの画像をドラッグアンドドロップで読み込む。
③WorkFlowタブのProcess>Startを押して処理を開始します。
④ReconstructionタブのTools>SimplifyToolを起動し、右下に出てきた設定ウィンドウのTargetVertexCountを10万程度に設定しSimplifyを押しポリゴン数を減らす。
⑤ReconstructionタブのModelColor&TextureのTextureを押してテクスチャを貼る。
⑥ReconstructionタブのExport>Modelからfbxを選択しFBXとして出力する。
よく使う設定項目
Color&TestureSettings>DefaultUnwrapPaqramenters>MaximalTextureResolution 出力テクスチャの解像度
Color&TestureSettings>DefaultUnwrapPaqramenters>MaximalTextureCount 出力テクスチャの枚数
AligmentSetting>MaxFeatures>MaxFeaturePerMpx メガピクセルごとの特徴点の最大数(160kくらいがいい)
AligmentSetting>MaxFeatures>MaxFeaturePerImage 画像ごとの特徴点の最大数?
AligmentSetting>MaxFeatures>ImageOverlap 画像同士の重なり(デフォルト65%)
MaxFeatureReprojectionError 許容するエラー?(大きめにしたらシンプルな模様のベッドがループして伸びた)
モデルを修正する
BlenderやMeshLabでモデルを読み込み、穴埋めやアーティファクト(余計なポリゴン)を消す。
Unityに読み込む
①fbxファイルとテクスチャをUnityに読み込む。シーンにドラッグ&ドロップする。
②マテリアルのシェーダーをUnlit/Textureにする。
③テクスチャがぼやけている場合は、テクスチャ解像度が適切に設定されていない可能性があるので、importSettingから設定する。
④Cubeを組み合わせていい感じにコライダーを作る。
⑤VRChat等にアップロードする。
おわり
VRChatでフォトグラメトリーの部屋を集めた企画をしているので、興味あればどうぞー。
フォトグラメトリーで自分の部屋を再現するの興味持たれた方はこちらどうぞー
— ほたてねこまじん🐾にゃんにゃん (@HhotateA_xR) October 2, 2019
VRChatにフォトグラメトリーアパートを作ろうプロジェクトです!https://t.co/8DtStNhZ7u