LoginSignup
98
82

More than 3 years have passed since last update.

自分の部屋をデジタル空間に持っていった話

Last updated at Posted at 2019-11-30

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

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

部屋を片付ける

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

 窓や鏡,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でフォトグラメトリーの部屋を集めた企画をしているので、興味あればどうぞー。

98
82
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
98
82