iPhoneアプリ開発:AR 目次

 

 油圧ショベルの作成に入る前に、boom、arm、backetがどういうオブジェクトで構成されてるかを紹介します。とりま、Blenderを起動して新規に用意された作業空間に「見た目が大事」でプロジェクトに組み込んだyumbo.daeファイルを読み込んでみてください。

 

これね↓

COLLADAファイル:

 http://tetera.jp/xcc/book-sample/yumbo.dae.zip

 

 読み込むといっても、前にも言ったようにCOLLADAファイル自体は公開された形式(format:フォーマット)に基づいたファイル なだけであって、Blender固有(native:ネィティブ)のファイル形式じゃないっす。

 Blenderのネィティブファイルは、前回の最後に紹介した、情報ビューのファイル>保存…メニューで現在編集中の作業空間の情報を書き出して作成される、拡張子が.blendのファイルっす。

 

 

↓こんな感じのファイルが作られる

 

 

 で、Blenderはネィティブ以外のファイル形式、つまり他のアプリが作った3D情報ファイルもサポートしてて、それらのファイルから3D情報を現在編集中の作業空間に取り込むことが可能。Blanderではこの処理をインポートって呼んでます。

インポート

 yumbo.daeファイルといったネイティブじゃないファイルの3D情報は、この機能でBlenderに読み込むわけっすね。
 まずはBlenderを起動して、新規作成状態の立方体一つの状態のウィンドウを開きましょう。
 でもって3Dビューの上にある情報ビューからファイル>インポートメニューを選ぶと出てくる、Blenderが読み込めるファイル形式一覧のサブメニューの中から、読み込みたい形式を選ぶことで実行できます。
 

 

 COLLADAの他にも3D StudioやFBX、Wavefrontのファイルなんかも読み込めるわけっすな。.3dsや.fbx、.objなんかは3Dモデルをネットで漁った人にはおなじみの拡張子だと思われ。

 Colladaを選ぶとファイルの場所を指定する画面が表示されるんで、yumbo.daeファイルを選んで「COLLADAファイルのインポート」ってボタンをクリック。画面左にインポート時のオプションが表示されてるけど、特に何も触らなくていいです。

 


 読み込まれたオブジェクトは、その時点で作業空間に存在するオブジェクトを残したまま追加される。なのでarmやboomが立方体にめり込んじゃってますな。

 

 

 ここまでできたら、右端上側のアウトライナービューに注目。

アウトライナービュー

 

 こいつは、現在の作業空間内のオブジェクトを一覧できるビューで、最初に用意された立方体がCube、それ以外に光源(Lamp、Lamp.001、Sun)、カメラ(Camera、Camera.001)、そして今読み込んだファイル から取り込まれたboom、arm、bucketが見えると思います。

 ちょっと狭いなーと思った人はビューとビューとの境目をドラッグしましょう。

 

カーソルの形状がこの形に変わるところが境目

 

 

ビューの調整

 こんな感じでBlenderは各ビューの大きさを自由に変えることができる。

 だけじゃなく、各ビューの右上や左下にある取手を引っ張れば、ビューを増やすことも可能。

 

 

 どんどん増える。

 

 

 でもって気づいてた人もいると思うけど、各ビューの内容は左下もしくは左上にあるアイコンをクリックして切り替えることができるんすよ。

 

 

 そこには、各ビューの一覧があるわけで…、つまり今まで見ていた各ビューはそれぞれが同じもので、表示内容をこのメニューで切り替えて表示してるってわけなんですな。

 で、どんどん自分を分割できると…、こういった再帰性は、いかにもプログラマが好きそうなデザインっす。使いやすいかと言われると微妙だけど。

 それはともかく、増やしたビューを減らす方法がわかりにくいんすよ。

 ビューに閉じるボタンがないんで境目をドラッグしてビューを小さくすれば消えるのかな〜ってドラッグしても消えてくれない。取手に仕掛けがあるのかな〜と取手をドラッグしてもビューが増える一方というね、無間地獄。

 

 

 どんどん増える。

 いらないビューを消すには、どれか残したいビューの取手を、隣接する消したいビューの方にドラッグしなきゃいけないみたいっす。

 

 

 ドラッグ中に一度、この状態になれば、そのままボタンを放さずに逆方向(残したいビュー側)にドラッグして、残したいビューと消したいビューを切り替えることも可能。

 ただし、接続部分の長さが一致してないとダメというね。

 

 

 めっちゃ癖のあるインターフェース。笑。

 

 ちなみに、こうやってカスタマイズした画面構成は記録できるようにもなってて、情報ビューにあるスクリーンレイアウトの「+」ボタンで追加になります。

 

 

 一覧表示で出てくるメニューを選ぶと、プリセットされてるレイアウトに切り替わります。色々な作業に適したレイアウトがあるんで、以後、作業に合わせて選ぶことのなると思います。とりあえず今はDefaultで。

新規作成時のプリセット

 それとスクリーンレイアウトの一覧から好みのレイアウトを選んだあと、ドラッグ&ドロップで、そのレイアウトのビュー配置を自分好みに変更しても、その配置を記憶していてくれるのは、その作業空間の時だけです。

 新規作業空間作成時には元の状態に戻ります。

 追加分のレイアウトに関しては追加時の状態で残るけど、追加後に加えた変更は残らない。

 作業空間を情報ビューのファイル>保存メニューでネイティブファイルとして残しておけば、その作業空間にのみ、レイアウトの変更が残ることになってる。

 新規作業空間時もこのレイアウトを残したいんじゃ〜と思ったら、情報ビューのファイル>スタートアップに記録メニューを選びましょう。

 これで現在の作業空間が新規作成時のプリセット値となる。

 ただし、作業空間に配置したオブジェクト群もプリセットとして再現されちゃうのでその点は気をつけるように。今の油圧ショベルを読み込んだ状態でやっちゃうと、以後、新規作成時は、必ず立方体と油圧ショベルが登場するというね。

 いらないオブジェクトは削除してからやりましょう。

注意)最悪、ファイル >初期設定を読み込むメニューで、まっさらの状態に復帰できるけど、日本語化とか色々設定し直すことになる。


 といったところで、アウトライナービューに話を戻します。

 アウトライナービューでは作業空間に配置されたオブジェクトの一覧を見ることがきるわけでして…

 今回だと、boom、arm、bucketの他に、Camera.001とかLamp.001、Sunなんてのも見えると思います。

 当然ですが、こいつらもyumbo.daeから読み込んできたもんです。Blenderで油圧ショベルをCOLLADAファイルとして書き出すときに、一緒にカメラや光源も書き出しちゃったんですな。

 Camera.001とかLamp.001なんて初期状態のままいじってないので、もともとあったCameraやLampの位置と重なっちゃってる。

 COLLADA側のファイルにはCameraやLampという名前で残ってるんだけど、インポートした時に、すでにCameraやLampという名前のオブジェクトがあったんで、Blenderが名前を変更したんですな。001,002,003,…って感じでナンバリングされるみたい。

 アウトライナービューと3Dビューのオブジェクトの選択状態は常に連動してて、アウトライナービューの項目を選択することで、3Dビューでも選択状態にできるんで、Camera.001とかLamp.001を選んでCameraやLampの位置と重さなってるのを確認してみるといいです。

 アウトライナービューでの選択は項目のアイコンを左クリック、追加・解除はshift+左クリックね。

 

 

 こんな感じでアウトライナービューは重なったオブジェクトを選ぶときなんかにも重宝する。

 で、項目の名前部分をダブルクリックすると名前を変更できるようにもなってる。

 私はこれでboom、arm、bucketを命名したわけです。

 


 ここに表示されてる名前がSCNNodeでも利用されるわけっすね。ここらへんの経緯は「見た目が大事」ね。

注意)すでに命名済みの別のオブジェクトと同じ名前を付けた場合、命名済みのオブジェクトの方の名前が変わったりもします。同じ名前をつけるなというアラートを出すんじゃなく、同じ名前を先に持っていたオブジェクト側の名前を変更するという…、ここら辺も独自な仕様。Lamp.001側の名前をLampにしたらどうなるか、試してみるといいです。


 項目左の「+」マーク(デスクロージャとか言います)をクリックすると、そのオブジェクトの内容を見ることもできます。例えばCubeだと自身の3D形状の項目のみなんですが、boomだとそれ以外に3つのオブジェクトが内包されてるのがわかる。

 

 

 で、この内包ってのはオブジェクトの親子関係を示してまして、boomには子供オブジェクトが3人いるってことを示してるわけですな。

 項目のアイコンを左クリックで選択すれば、3Dビューでどの部分が子供オブジェクトなのかわかります。

 「見た目が大事」のyumboプロジェクトでSCNNodeとして読み込んだ時も、この親子関係が維持されます。つまりboomとして読み込んだSCNNodeは、単独のSCNNodeじゃなく、すでに親子関係が構築された複数のSCNNodeだったわけだ。

 

 

 で、このboomの子供である、arm_powerやboom_powerも子供を持ってたりして、突き詰めると円柱の組み合わせだったりします。

 

 

 

 親子関係は、子供側のオブジェクトを親側オブジェクトの外にドラッグ&ドロップしてやれば解消される。

 例えばboom内のarm_powerをドラッグしてboom外にドロップすると〜

 

 

 boomとarm_powerの親子関係は解消され、arm_powerはboomと同じ階層に並ぶことになる。

 3Dビューでのarm_powerの位置が移動してることにも注目。

 


 これはarm_powerの位置が、親であるboomのモデル空間内での位置ではなく、ワールド空間内での位置として解釈されたため。モデル空間、ワールド空間、なんスカそれ?な人は「光あれ」を読みましょう。

 arm_powerは、もはやboomの子ではなく、ワールド空間内に存在する単独のオブジェクトなわけで、boomの移動に合わせて一緒に動くこともなくなるわけですな。

 この点、3Dビューでオブジェクトを移動したり回転させたり、拡大縮小したりして、親子関係がある場合とない場合でどうなるか、いろいろ試してみるといいです。

 「光あれ」で説明した親子関係を、頭の中であれこれ考えるより、ここで試すのが一番ピンとくる。

 

 COLLADAファイル:yumbo.daeとして書き出して、「見た目が大事」で用意したサンプルのyumbo.daeと差し替えてみるのもいいかも。

 

↓こいつね

サンプル:

 http://tetera.jp/xcc/book-sample/yumbo-blender.zip

 

 COLLADAファイル、つまりネィティブ以外の形式で現在編集中の作業空間をファイルに書き出すことを、Blanderではエクスポートって呼んでます。

エクスポート

 情報ビューのファイル>エクスポートで表示される形式サブメニューからColladaを選んで書き出しましょう。エクスポート画面にもオプションがいろいろあるけど、今は下に書いてる状態に合わせて書き出してください。

 

 

 ちなみに、この中の「選択物のみ」をチェックしてれば、書き出すオブジェクトをコントロールすることもできた(CameraやLampを書き出さない)わけだ。

 

 書き出したCOLLADAファイルをプロジェクトのSecneKit Catalogフォルダ内のyumbo.daeファイルと置き換えて(もちろんファイル名をyumbo.daeにするか、読み込み側でエクスポートしたファイルを指定するかはしてね)Runするとarm_powerの抜けた油圧ショベルが表示されます。

注意)arm_powerはboom、arm、bucketと同じ階層で独立してるので、アプリで使いたければ"arm_power"で探して取り出す必要がある。

 

 チューことで、これで皆さんは、ネット上に転がってる色々な形式のフリーの3D素材をインポートして、COLLADAファイルでエクスポートしてSceneKitで利用することができるようになったわけっすな。

 次回はまたまた油圧ショベル形状の話を先送りにして、そこらへんを。

 特にMMDあたりをな〜。

 じゃまた。