Up:Tutorial?     Previous:実世界のロボットの取り込み


123D Catchを用いて実世界のオブジェクトの3Dモデルを得る

123D Catchのインストール

123D Catchを用いて実世界のオブジェクトの3Dモデルを得ます。

123D Catchによるオブジェクトの撮像

ここでは、人の腕と手の部分をiPhoneのアプリとカメラを使って撮像して、3Dモデルを得る場合について説明していきます。

WS100.jpg

123D Catchによる3Dモデルの構築とエクスポート

ここからは、パソコンにインストールした123D Catchによる作業です。

WS101.jpg

WS102.jpg

WS103.jpg

テクスチャ有りの.objファイルからSIGVerse用の.x3dファイルを作成する

blender(2.73)を使って,SIGViewerに表示するアバターの表面にテクスチャを貼る方法を説明します.

前提など

前提などは次の通りです.

テクスチャの画像ファイルの配置

テクスチャとなる画像は,今回の例では「arm_tex_0.jpg」,「arm_tex_1.jpg」,「arm_tex_2.jpg」の3枚の画像とします.
これらの画像を,SIGViewerのテクスチャ画像用フォルダに配置します.
今回の例では「C:\Program Files (x86)\SIGViewer_2.3.0\SIGViewer\media\materials\textures\」に配置しました.

.objファイルのインポート

blenderを起動して,ファイル->インポート->Wavefront(.obj)をクリックします.

WS000000.JPG

WS001.JPG

読み込む.objファイルを指定してインポートすると次のような画面になります.

WS035.JPG

ポリゴン数の削減

読み込んだオブジェクト上で右クリックして, 画面右側にある

WS003.JPG

WS004.JPG

にします.

スパナのマーク(モディファイアー)をクリックして「ポリゴン数削減」をクリックします.

WS005.JPG

比率:     1.0000 となっているところをクリックすると数値を入力できるので,削減後のポリゴン数の比率を入力します.

WS006.JPG

今回の例では比率を0.2000にします.

WS007.JPG

「面数」のところに削減後の面数が表示されます. オブジェクトも,表面の凹凸が粗くなったことがわかると思います.

「適用」ボタンをクリックします.

.x3dファイルの保存

オブジェクトの対話モードを「編集モード」に切り替えて,ファイル->エクスポート->X3D Extensible 3D(.x3d) をクリックします.
ここで保存する.x3dファイル名を,ひとまずarm_right.x3dとしておきます.

WS028.JPG

この.x3dファイルの内容を使って,SIGVerseのアバターの情報を記述している.x3dファイルを変更していきます.

アバターの選択

この例では,Man-nii.x3dを元のアバターとします.

WS029.JPG

作業ディレクトリをサーバ(Ubuntu)側に用意します.作業ディレクトリは /home/workspace/ としておきます.

元のアバターの.x3dファイルを作業ディレクトリにコピーします.今回の例では,/home/sigverse-2.2.0/share/sigverse/data/shape/man_nii_v2.x3dをコピーします.

サーバ(Ubuntu)側のsigverseのディレクトリ(おそらく/home/sigverse/sigverse-2.2.0/share/sigverse/Data/xml/)から,Man-nii.xmlを作業ディレクトリにコピーします.

アバターの腕へのテクスチャ貼り付け

man_nii_v2.x3d のある部分を,arm_right.x3dの内容に置き換えるために,二つのファイルをテキストエディタで開きます.
(注意:arm_right.x3dの方は,非常に長い文字列の行が含まれているため,テキストエディタの動作が多少重くなります)

テキストエディタでの作業手順を次に示します(各ファイルは作業ディレクトリ内のものです).

  1. man-nii-v2.x3dの874行目~982行目を削除します.(<Transform>の後の<Shape>から,12回連続で</ProtoInstance>がある箇所の3つ目の</ProtoInstance>までを削除)
  2. arm_right.x3dの29行目~87行目(<Shape>から</Shape>までを画像の枚数分だけ.今回は3枚分なので<Shape>~</Shape>を3個分)をコピーして,man-nii-v2.x3dの874行目(先ほど削除した箇所)に挿入します.
  3. man-nii-v2.x3dに挿入した内容の最後の位置(最後の</Shape>)の後に行を追加して,「</Transform>」と記述します.
  4. man-nii-v2.x3dの875行目(<Appearance>)の後に行を追加して,「<ImageTexture DEF="IM_arm_tex_0_jpg" url="arm_tex_0.jpg" />」と記述します.
  5. 次の「<Appearance>」の後に「<ImageTexture DEF="IM_arm_tex_1_jpg" url="arm_tex_1.jpg" />」の行を挿入します.
  6. その次の「<Appearance>」の後に「<ImageTexture DEF="IM_arm_tex_2_jpg" url="arm_tex_2.jpg" />」の行を挿入します.
    • 手順4~6の"IM_arm_tex_0_jpg"と"arm_tex_0.jpg"の番号「0」や「1」などは,直後の行の「<Material DEF="MA_Texture_0"」の番号「0」や「1」に合わせます.
    • 今回はたまたま0→1→2の順になっていましたが,順番が変わっているときもあります.
  7. <Material>タグのdiffuseColor ~ transparencyを次のように変更します.
    変更前WS030.JPG → 変更後WS031.JPG
    MA_Texture_1とMA_Texture2にも同様の変更を行います.
    • この変更は,テクスチャの色表現(光の反射)に関する変更なので,場合によっては変える必要が無いかもしれません.
    • 今回の例では,ここのパラメータを変更しないと,腕の表面の色がまだらになって不自然でした(もっとも,変更しても若干の不自然さは残ります).
  8. 編集中のman-nii-v2.x3dを,「man-nii-v2_realrighthand.x3d」という名前で作業ディレクトリに保存します.
  9. Man-nii.xmlの「<filename>man-nii-v2.x3d</filename>」を「<filename>man-nii-v2_realrighthand.x3d</filename>」に変更し,このMan-nii.xmlを作業ディレクトリに保存します.

ここで保存したMan-nii.xmlをSIGServerの世界ファイルに記述して作業ディレクトリ内でSIGServerを起動すれば,SIGViewerでアバターの状態を確認することができます.

WS032.JPG

テクスチャのついた腕が肩の先にありますが,ちゃんと着いていません.
腕全体の大きさも合っていないようですし,色も心なしか黒っぽいです.
(テクスチャ画像を画像編集ソフトで明るくするなどしましょう)

スケールと回転と位置の微調整

腕のスケールと回転,平行移動を行います.

先ほど保存しておいたblenderファイルをblenderで開いて,スケールの変更(拡大)と回転を行います.blenderの操作方法については割愛します.
スケールの変更と回転を行った結果を「arm_right_scaled_rotated.x3d」という名前で.x3dファイルにエクスポートします.
先ほどのアバターの腕へのテクスチャ貼り付けと同じ作業をしてもいいのですが,変更点は3次元オブジェクトの点の座標だけなので,次の手順で変更が適用できます.

  1. (スケールの変更と回転)blenderで先ほどのオブジェクトファイルに対してスケールの変更と回転を行い,「arm_right_scaled_rotated.x3d」という名前で.x3dファイルにエクスポートします.
    エクスポートしたら,Ubuntuの作業ディレクトリにファイルをコピーします.
  2. man-nii-v2_realrighthand.x3dの
    WS033.JPG
    の,<IndexedFaceSet ... ~ </IndexFaceSet>を,arm_right_scaled_rotated.x3dの<IndexedFaceSet ... ~ </IndexFaceSet>で上書きして保存します.
  3. (平行移動)man-nii-v2_realrighthand.x3dの850行目(RARM_JOINT4の記述が始まった直後辺り)の後に行を追加し,「<fieldValue name='translation' value='0.0 2.0 1.0' />」と記述します.
    • value='[x軸方向の移動量 y軸方向の移動量 z軸方向の移動量]'で移動量を記述します.
  4. SIGServerを起動し,SIGViewerで腕の配置を確認しながら,適切な位置に腕が配置されるまで以上を繰り返します.

結果

結果は次のようになりました.

WS036.JPG WS037.JPG

コメントなど


Front page   New List of pages Search Recent changes   Help   RSS of recent changes