MRが楽しい

MRやVRについて学習したことを書き残す

モデルのエラーチェック方法を試す

本日は Blender の技術調査枠です。
書籍「Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]」を参考に作成したモデルのエラーチェックを試してみます。

メッシュ分析

編集モードかつソリッド表示でプロパティシェルフのメッシュ分析タブにチェックを入れることで、メッシュを条件ごとに色分けできます。
注意点として、ミラーモディファイアなどを反映中のオブジェクトは色分けが行われません。
一時的にモディファイアを非表示にする必要があります。
エラーチェックで使いそうなのは以下の二つです。(書籍では全てのパラメータについて紹介されています)

歪み

メッシュが歪んでいる部分ほど赤く表示する。
f:id:bluebirdofoz:20180202092413j:plain

交差

メッシュが交わってしまっている部分を赤く表示する。
f:id:bluebirdofoz:20180202092422j:plain

クリーンアップ

編集モードから メッシュ -> クリーンアップ の機能を使うことでメッシュのエラーを自動修正できます。
以下の二つは必ず実行してよいかもしれません。

孤立を削除

どの面にもつながっていない辺や頂点を削除する。
f:id:bluebirdofoz:20180202092441j:plain

大きさ0を融解

面積が0の面を削除し、1つの頂点にまとめる。
f:id:bluebirdofoz:20180202092450j:plain

重複頂点を削除

重複している頂点を1つの頂点にまとめる。
f:id:bluebirdofoz:20180202092501j:plain

openMVGで出力される各ファイルについて

本日は openMVG の調査枠です。
openMVG で使用する各コマンドの出力ファイルに関するコメントがあるページを見つけました。
・how to visualize SFM results?
 https://github.com/openMVG/openMVG/issues/1179

公式ドキュメントでは各コマンドのオプションや機能については言及されています。
https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/

しかし、出力ファイルに関する細かな情報はなかったので貴重な情報です。記事として情報を残して置きます。

openMVG_main_SfMInit_ImageListing で作成されるファイル

sfm_data.json : 画像と組み込みカメラモデルの関係のリスト

openMVG_main_ComputeFeatures で作成されるファイル

* .feat : sfm_data.jsonファイルに記載された各画像の特徴点(features)
* .desc : sfm_data.jsonファイルに記載された各画像の記述子(descriptor)
image_describer.json : 使用されている記述子(Image_describer)設定の情報

openMVG_main_ComputeMatches で作成されるファイル

matches.putative.bin : 推定された共通点情報。
putative_matches.svg、PutativeAdjacencyMatrix.svg : 推定画像接続をグラフまたは隣接行列として見るためのビジュアルファイル。
matches.X.bin : 幾何学的にフィルタリングされた共通点情報。
(X: 使用する幾何学的モデルに応じて e、f、h を使用する(必須、基本、ホモグラフィフィルタ))
geometric_matches.svg、GeometricAdjacencyMatrix.svg幾何学的画像の接続をグラフまたは隣接行列として見るためのビジュアルファイル。

openMVG_main_IncrementalSfM で作成されるファイル

initialPair.ply : 最初の復元結果の3Dデータ
0000000X_Resection.ply : 一時的な復元結果の3Dデータ
sfm_data.bin : openMVG SfM-Dataシーン(他のOpenMVGプロセスで使用される)
cloud_and_poses.ply : sfm_data.binファイルに相当する3Dデータ
Reconstruction_Report.html : SfMプロセスに関する最終統計結果
SfMReconstruction_Report.html : 再構成ログ(デバッグ目的で使用される)

Blenderで「穴を埋める」クリーンアップを試す

本日は blender の技術調査枠です。
クリーンアップ機能の一つである「穴を埋める」機能について試してみます。
f:id:bluebirdofoz:20180131084922j:plain

説明にある通り、これはメッシュの穴を埋める機能です。
例えば、以下のように一部のメッシュが欠けたUV球オブジェクトを用意します。
f:id:bluebirdofoz:20180131084931j:plain

このオブジェクトに対して「穴を埋める」機能を実行してみると……。
f:id:bluebirdofoz:20180131084939j:plain
自動的に面が貼られました。面の貼り忘れを修正するときなどに便利です。

更に、以下のように穴を広げたらどうなるか確認してみます。
f:id:bluebirdofoz:20180131084952j:plain

このオブジェクトに対してそのまま「穴を埋める」機能を実行してみると穴は埋まりません。
f:id:bluebirdofoz:20180131085009j:plain
これはデフォルトのプロパティの設定が「辺数:4」になっているためです。

穴の大きさに合わせて「辺数:8」にすると穴が埋まりました。
f:id:bluebirdofoz:20180131085020j:plain
辺数に気を付けておけば、自動で埋めてほしくない穴を除外することも可能です。
(ただし設定した辺数と同数の辺を持つ穴を防ぐ訳ではなく、辺数以下の辺を持つ穴を全て塞ぎます)

3DデータをUnityに取り込む際に参照されるテクスチャについて

本日は Unity の技術調査枠です。
前回 openMVS で作成した3Dデータを Unity に取り込む際に少し手間取ったので、事象をメモしておきます。
bluebirdofoz.hatenablog.com

作成した ply ファイルを Unity に取り込むため、Blender を経由して FBX ファイルとしてエクスポートしました。
f:id:bluebirdofoz:20180130012509j:plain

これを Unity に取り込むとテクスチャの表示がおかしくなる事象が発生しました。
f:id:bluebirdofoz:20180130012521j:plain

原因は凡ミスで、同プロジェクトに過去に取り込んだ openMVS で作成した3Dデータのテクスチャを参照していたためでした。
(openMVS で3Dデータを作成するとテクスチャのデフォルトファイル名は同じになります)
f:id:bluebirdofoz:20180130012531j:plain

今回新たに作成した3Dデータのテクスチャを Unity にインポートし、FBX ファイルを再び取り込むと、正常なテクスチャが表示されました。
f:id:bluebirdofoz:20180130012548j:plain

この時点でプロジェクトに、同じ名前のテクスチャが2枚存在していることになります。
どうやって使用するテクスチャを判別しているのか気になり、この状態で、以前のテクスチャがあるフォルダに FBX ファイルを取り込んでみました。
f:id:bluebirdofoz:20180130012558j:plain
結果、以前のテクスチャの方が参照されました。
プロジェクト内に同じ名前のテクスチャが存在する場合、インポート時の同ディレクトリに配置されているテクスチャが優先利用されるということのようです。

openMVGのサンプル画像で3Dデータを作成する

本日は openMVG の調査枠です。
以前、openMVG を試す際、利用画像に Bundler のサンプル画像を使用しました。
bluebirdofoz.hatenablog.com

調べたところ、openMVG でも公式ドキュメントの風景サンプルの画像が提供されていました。
SfM: Structure from Motion — openMVG library

以下からサンプル画像が取得できます。
github.com

11枚のサンプル画像を利用して処理を実行したところ、以下のような3Dデータが作成できました。
f:id:bluebirdofoz:20180129035701j:plain

Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]を試す その43(武器パーツの作成)

本日は書籍「Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]」の実施枠です。

本日は武器パーツのモデリングを行います。
f:id:bluebirdofoz:20180127194121j:plain

武器パーツは正面以外に、横からの絵もあるのでこれらを配置します。
また、キャラクタとの相対的な大きさをここで決定しておきます。
f:id:bluebirdofoz:20180127194129j:plain

初めに側面図に沿って平面メッシュを作成し、大まかな形を決定します。
f:id:bluebirdofoz:20180127194137j:plain

その後、マテリアルで色付け、押出(Eキー)による厚み付けで立体化します。
f:id:bluebirdofoz:20180127194147j:plain

細かな装飾を付けたら完成です。キャラクタを表示して最後にオブジェクトでのサイズ調整を行います。
f:id:bluebirdofoz:20180127194156j:plain

以上で全パーツのモデリングが完了です。

Blenderでの多角形の面張りを試す

本日は Blender の技術調査枠です。

今回は多角形の面張りについてまとめておきます。
例えば以下のような円柱形の上部に蓋をするように面張りをするケースです。
f:id:bluebirdofoz:20180126063132j:plain
様々なトポロジが想定され、利用する機能によってメッシュの形が変わります。

メッシュ -> 面 -> 面作成(Fキー)を用いた場合です。
f:id:bluebirdofoz:20180126063142j:plain
この場合、Nゴンという多角形の面が貼られます。

メッシュ -> 面 -> 面を張る(Alt + Fキー)を用いた場合です。
f:id:bluebirdofoz:20180126063152j:plain
この場合、全ての面が三角面となるように面が貼られます。

メッシュ -> 面 -> グリッドフィル(Alt + Fキー)を用いた場合です。
f:id:bluebirdofoz:20180126063159j:plain
この場合、辺の分割頂点を結ぶ格子状で面が貼られます。

メッシュ -> 面 -> 面作成(Fキー) の後、メッシュ -> 面 -> 扇状に分離(Alt + Pキー)を用いた場合です。
f:id:bluebirdofoz:20180126063209j:plain
この場合、中心に新しい頂点が生成され、そこを中心に扇状の面が貼られます。

以上です。他にも面の貼り方があれば追記していきます。