Up:[[Tutorial]] Previous:[[実世界のロボットの取り込み]] ---- #contents *123D Catchを用いて実世界のオブジェクトの3Dモデルを得る [#mb90b98b] **123D Catchのインストール [#y44ce740] [[123D Catch>http://www.123dapp.com/catch]]を用いて実世界のオブジェクトの3Dモデルを得ます。 -[[こちらのページ>http://www.123dapp.com/catch#download]]から「PC Download」をクリックして123D Catchをパソコンにインストールします。 -123D Catchは、カメラで様々な方向から撮像した画像を用いてオブジェクト3Dモデルを構成します。 - パソコンに接続したカメラも利用できますが、iPhoneを利用する事も可能です。 - iPhoneを利用する場合は、「Download on the App Store」をクリックして123D Catchのアプリケーションをインストールします。 **123D Catchによるオブジェクトの撮像 [#ecabb868] ここでは、人の腕と手の部分をiPhoneのアプリとカメラを使って撮像して、3Dモデルを得る場合について説明していきます。 - まず、対象を全方向から撮像できる空間を下図のように確保します。 このとき、対象の下に3Dモデルを構成するための基準となるものを敷くと欠損のない3Dモデルを得やすくなります。 ここでは、テクスチャのあるタオルを敷いています。 &ref(WS100.jpg); - 次に、対象の周囲360度から数十枚程度の写真を撮ります。 - 最後に、3Dモデルを構成するため、サーバーに写真を送信します。 **123D Catchによる3Dモデルの構築とエクスポート [#h816556e] ここからは、パソコンにインストールした123D Catchによる作業です。 - まず、サーバーから構成された3Dモデルをロードします。以下のように周囲の環境を含む3Dモデルが得られます。 &ref(WS101.jpg); - 次に、ツールを使って以下のように対象以外の領域を取り除いていきます。 &ref(WS102.jpg); - 以下のように対象以外の領域を取り除いたら、「File」→「Export Capture As」→「OBJ(obj)」で出力します。 &ref(WS103.jpg); - この場合、3次元形状の「arm.obj」、それに貼り付ける画像の「arm_tex_0.jpg」、「arm_tex_1.jpg」、「arm_tex_2.jpg」、対応関係を記述したファイル「arm_tex.mtl」が出力されました。このとき、貼り付ける画像の枚数は、撮像環境によって異なります。 *テクスチャ有りの.objファイルからSIGVerse用の.x3dファイルを作成する [#m96295ae] blender(2.73)を使って,SIGViewerに表示するアバターの表面にテクスチャを貼る方法を説明します. **前提など [#j567aeb7] 前提などは次の通りです. -[[123D Catch>http://www.123dapp.com/catch]]で.objが作成されていること&br; 具体的には,次の3種類のファイルが同じフォルダに配置されていること ++3次元形状ファイル「arm.obj」 ++テクスチャとして貼り付ける画像ファイル群「arm_tex_0.jpg」「arm_tex_1.jpg」「arm_tex_2.jpg」 ++オブジェクトの3次元座標と画像の座標の対応関係を記したファイ「arm_text.mtl」 -[[blender>http://blender.jp/modules/docs/index.php?content_id=2]]がインストールされていること(日本語化してあるとなお良い) -blenderの基本的な操作方法(オブジェクトの表示倍率変更や視点の移動など)は把握していること -できあがる.x3dファイルは関節を無視したもの **テクスチャの画像ファイルの配置 [#g9ecbc2e] テクスチャとなる画像は,今回の例では「arm_tex_0.jpg」,「arm_tex_1.jpg」,「arm_tex_2.jpg」の3枚の画像とします.&br; これらの画像を,SIGViewerのテクスチャ画像用フォルダに配置します.&br; 今回の例では「C:\Program Files (x86)\SIGViewer_2.3.0\SIGViewer\media\materials\textures\」に配置しました. **.objファイルのインポート [#ad562e25] blenderを起動して,ファイル->インポート->Wavefront(.obj)をクリックします. &ref(WS000000.JPG); ↓ &ref(WS001.JPG); 読み込む.objファイルを指定してインポートすると次のような画面になります. &ref(WS035.JPG); **ポリゴン数の削減 [#p231b24a] -お使いのPCの描画性能が高い場合,この作業は不要かもしれません. -一般的に123D Catchが生成する.objファイルは非常に高精細であるため,SIGViewerの描画に時間がかかりすぎるというデメリットがあります. -そこで,まずはポリゴン数を削減して描画への負担を軽くします. 読み込んだオブジェクト上で右クリックして, 画面右側にある &ref(WS003.JPG); を &ref(WS004.JPG); にします. スパナのマーク(モディファイアー)をクリックして「ポリゴン数削減」をクリックします. &ref(WS005.JPG); 比率: 1.0000 となっているところをクリックすると数値を入力できるので,削減後のポリゴン数の比率を入力します. &ref(WS006.JPG); 今回の例では比率を0.2000にします. &ref(WS007.JPG); 「面数」のところに削減後の面数が表示されます. オブジェクトも,表面の凹凸が粗くなったことがわかると思います. 「適用」ボタンをクリックします. **.x3dファイルの保存 [#le7b517d] オブジェクトの対話モードを「編集モード」に切り替えて,ファイル->エクスポート->X3D Extensible 3D(.x3d) をクリックします. &br; ここで保存する.x3dファイル名を,ひとまずarm_right.x3dとしておきます. &ref(WS028.JPG); この.x3dファイルの内容を使って,SIGVerseのアバターの情報を記述している.x3dファイルを変更していきます. **アバターの選択 [#p98a1adc] この例では,Man-nii.x3dを元のアバターとします. &ref(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を作業ディレクトリにコピーします. **アバターの腕へのテクスチャ貼り付け [#u303315d] man_nii_v2.x3d のある部分を,arm_right.x3dの内容に置き換えるために,二つのファイルをテキストエディタで開きます.&br; (注意:arm_right.x3dの方は,非常に長い文字列の行が含まれているため,テキストエディタの動作が多少重くなります) テキストエディタでの作業手順を次に示します(各ファイルは作業ディレクトリ内のものです). +man-nii-v2.x3dの874行目~982行目を削除します.(<Transform>の後の<Shape>から,12回連続で</ProtoInstance>がある箇所の3つ目の</ProtoInstance>までを削除) +arm_right.x3dの29行目~87行目(<Shape>から</Shape>までを画像の枚数分だけ.今回は3枚分なので<Shape>~</Shape>を3個分)をコピーして,man-nii-v2.x3dの874行目(先ほど削除した箇所)に挿入します. +man-nii-v2.x3dに挿入した内容の最後の位置(最後の</Shape>)の後に行を追加して,「</Transform>」と記述します. +man-nii-v2.x3dの875行目(<Appearance>)の後に行を追加して,「<ImageTexture DEF="IM_arm_tex_0_jpg" url="arm_tex_0.jpg" />」と記述します. +次の「<Appearance>」の後に「<ImageTexture DEF="IM_arm_tex_1_jpg" url="arm_tex_1.jpg" />」の行を挿入します. +その次の「<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の順になっていましたが,順番が変わっているときもあります. +<Material>タグのdiffuseColor ~ transparencyを次のように変更します.&br; 変更前&ref(WS030.JPG); → 変更後&ref(WS031.JPG); &br; MA_Texture_1とMA_Texture2にも同様の変更を行います. --この変更は,テクスチャの色表現(光の反射)に関する変更なので,場合によっては変える必要が無いかもしれません. --今回の例では,ここのパラメータを変更しないと,腕の表面の色がまだらになって不自然でした(もっとも,変更しても若干の不自然さは残ります). +編集中のman-nii-v2.x3dを,「man-nii-v2_realrighthand.x3d」という名前で作業ディレクトリに保存します. +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でアバターの状態を確認することができます. &ref(WS032.JPG); テクスチャのついた腕が肩の先にありますが,ちゃんと着いていません.&br; 腕全体の大きさも合っていないようですし,色も心なしか黒っぽいです.&br; (テクスチャ画像を画像編集ソフトで明るくするなどしましょう) **スケールと回転と位置の微調整 [#f2897319] 腕のスケールと回転,平行移動を行います. 先ほど保存しておいたblenderファイルをblenderで開いて,スケールの変更(拡大)と回転を行います.blenderの操作方法については割愛します.&br; スケールの変更と回転を行った結果を「arm_right_scaled_rotated.x3d」という名前で.x3dファイルにエクスポートします.&br; 先ほどの[[アバターの腕へのテクスチャ貼り付け>#u303315d]]と同じ作業をしてもいいのですが,変更点は3次元オブジェクトの点の座標だけなので,次の手順で変更が適用できます. +(スケールの変更と回転)blenderで先ほどのオブジェクトファイルに対してスケールの変更と回転を行い,「arm_right_scaled_rotated.x3d」という名前で.x3dファイルにエクスポートします.&br;エクスポートしたら,Ubuntuの作業ディレクトリにファイルをコピーします. +man-nii-v2_realrighthand.x3dの&br; &ref(WS033.JPG); &br; の,<IndexedFaceSet ... ~ </IndexFaceSet>を,arm_right_scaled_rotated.x3dの<IndexedFaceSet ... ~ </IndexFaceSet>で上書きして保存します. +(平行移動)man-nii-v2_realrighthand.x3dの850行目(RARM_JOINT4の記述が始まった直後辺り)の後に行を追加し,「<fieldValue name='translation' value='0.0 2.0 1.0' />」と記述します. --value='[x軸方向の移動量 y軸方向の移動量 z軸方向の移動量]'で移動量を記述します. +SIGServerを起動し,SIGViewerで腕の配置を確認しながら,適切な位置に腕が配置されるまで以上を繰り返します. **結果 [#l7fcde82] 結果は次のようになりました. &ref(WS036.JPG); &ref(WS037.JPG); **コメントなど [#q11797ed] -[[アバターの腕へのテクスチャ貼り付け>#u303315d]]のところがわかりにくくてすみません. -要は,今回の例で示す右腕は,man_nii_v2.x3dでは「RARM_JOINT4」から「RARM_JOINT7」に該当するので,元のファイルからそれらのJOINTの記述を削除して,腕全体をRARM_JOINT4として記述し直すということです. -現状では,手のひらの表と裏のつなぎ目ではテクスチャが不自然です. -ポリゴン数を20%にしてもまだ多いようです.SIGViewerが少し重くなるように感じます.