iPhoneアプリ開発:AR 目次

 

 今回作るのはarm>joint部。

 

 

 基本となるのは以下の円柱2つを直方体でつなげてる形状。以後アイドラリンクって呼びます。

 

↓油圧ショベルの各パーツの名称を解説してくれてるページ見つけた

https://www.kenki-parts.com/hpgen/HPB/entries/22.html

 

 

おっす、おらアイドラリンク

 

 私の油圧ショベルモデルのjoint部ってのは、このアイドラリンクが4つ組み合わさってるわけです。

 

 

 アイドラリンクをモデリングすること自体は、これまでの学習で可能。

 サイズは測るとこんな感じでした。

 

 

 なので、だいたい以下のステップで作れるわけですよ。

 

 0、3Dカーソルを原点に置く

   注意)shift+sキー打ちで出たメニューで「カーソル→原点」ね

 1、オブジェクトモードにする

 2、円柱追加

 3、作成時のワンチャンで半径を0.075、深さを0.07にする

 4、編集モードにする

   注意)切り替えた時点で円柱の全ての頂点が選択状態のはず。なってなければaキー打ち

 5、円柱を回転(x軸で90度回転)

   注意)ワンチャンで数値指定が正解

 6、複製

  注意)編集モードでの複製は、3Dビューのボトムバーのメッシュ>複製の追加メニューです

     編集モードだと選択してる頂点、辺、面のみが対象になるので、その点を注意ね

 7、複製物を移動(z軸に沿って0.55上昇)

   注意)複製時点で、複製側の円柱のみ、全ての頂点が選択状態のはず

 8、立方体追加

 9、立方体だけ選ばれた状態にして直方体になるようスケーリング

   2つの円柱の間に収まるように適当に調整し確定する

   注意)追加時点で、立方体のみ、全ての頂点が選択状態のはず。y軸を薄くして、z軸を長くするとか

     適当に見た目で調整すればいい

 10、立方体を移動して2つの円柱の間に配置し確定する

 

 何言ってるかわからん人は「AR 目次」開いて、第9回あたりから読み返してね。

 

 こんな風に1つのオブジェクトの形状として用意するんじゃなく、2つの円柱、直方体、全て別々のオブジェクトとして親子関係でアイドラリンクを作ってもいい。

 けど、構造物として考えた場合、2つの円柱と間をつなぐ直方体は完全に固定されてる状態なので、これをオブジェクトで個別に管理する理由もないんでね。私は1つのオブジェクトの形状として作りました。

 そういう理由で、今回は上のようにオブジェクトモードで、1つ目の円柱を追加した後は、編集モードで形状を複製したり、立方体を追加して形状そのものを変更してるわけです。

 

 ただ、編集モードで変形を行うときは、1つでも変形対象にしたい頂点を選び忘れるだけで、とんでもない形状になっちゃうんで気を使うし、aキー打ちだと、全頂点選択なんで、円柱や直方体といった2つ以上の形状を別個に選びたいときは、選びたい形状側の頂点や辺、面いずれか1つ以上を選んだ状態でlキー打ちが必要だったりとか、色々面倒なんで、まずは1つ1つをオブジェクトで用意して、それぞれのオブジェクトを、オブジェクトモードで配置や回転をした後に、1つのオブジェクトに統合するのも有りかと思います。

統合

 この場合、オブジェクトモードで、統合したいオブジェクトを全て選択しておいて、3Dビューのボトムバーからオブジェクト>統合を選ぶ。

 これで、最後に選択したオブジェクトの形状に、それ以外のオブジェクトの形状が組み込まれることになる。

 組み込まれる先のオブジェクトのスケーリングや回転、移動は変更されず、組み込まれる側のオブジェクトの形状が調整される。この調整は組み込み先のスケーリングや回転、移動が適用されたら、今見えてる形になるというもの。

 

 色々やり方あるんで、好みのやり方追求してみてください。

 

 で、こんな感じで用意したアイドラリンクなんですが、動くときは2つがペアで動く仕組みなんですよ。

 

 

 まー、こういう場合も、アイドラリンクを2つ、別々のオブジェクトとして用意してどちらかを親にするとか、全く別の空のオブジェクトを用意して、2つのアイドラリンクオブジェクトを子供として関係を結ぶとか、色々方法はあるんですが…

注意)ここでいう空のオブジェクトてのは、ローカル空間になんの形状もないオブジェクトっす。例えばオブジェクトモードで立方体追加して、編集モードで頂点を全選択して削除したりして作る

 

 私は素直に、ローカル空間にアイドラリンクを2つ配置した単独のオブジェクトを用意することにしました。

 

 

 編集モードで今用意したアイドラリンク形状を全選択にして複製し、原点を中心にx軸を挟むように対象に間を開ければいいわけですが…

 なんですが…

 こういう左右対象(シンメトリック:symmetric)系の形状を作る時に、非常に役に立つ機能がBlenderにあるんですな。ミラーモディファイアという機能。

ミラーモディファイア

 モディファイア(modifier:変更する者)です。その中のミラー(mirror:鏡)てのを使います。

 こいつはオブジェクトごとに指定できるようになってて、指定されたオブジェクトのローカル空間に存在する形状全てを特定の規則で変更するんですな。

 今回なら鏡。

 まずはアイドラリンクオブジェクトを選んで、編集モードにしてプロパティビューでモディファイアタブ選びましょう。

 

 

注意)編集モードじゃなくオブジェクトモードでもモディファイを追加できるけど、その場合も設定できるのは1つのオブジェクトのみ。複数選んでた場合は最後の選択物(オレンジ枠のオブジェクトね)にだけ追加されます。

 

 追加てのを押すとモディファイアの一覧が表示されるんでミラー選んでください。

 

 いっぱいあるんですが、この中でもミラーはかなり使います。世の中シンメトリックな形状って多いからね。

 追加されるとプロパティビュー内にミラーの詳細が表示される。私のところでは初期値はこんな感じ。とりあえず、これと同じ状態にしてちょ。

 

 

 そこまでできたら、3Dビューでアイドラリンク形状を全選択状態(aキー打ち、それで全解除になった場合は、もう一度aキー打ち)にしてからgキー打ちして選択してる形状を適当に動かしてみてください。鏡に映したような形状が現れ連動して動くはず。

 

 

 こいつはモディファイアされる前の形状の各頂点のx座標成分だけが反転した複製っす。

 こんな感じで、ミラーモディファイアのかかったローカル空間では、全ての形状がミラー複製されます。プロパティビューの軸って項目でチェックされてる分だけ複製される。今回はxにチェック入れてたのでx座標成分だけが反転した複製が出た。

 

 

 ちなみに、動かさない時に1つに見えてたのはたまたまで、たまたまアイドラリンク形状が、x軸に対して対象形だったから。

 雑なモデリングで、ミラー元のアイドラリンク形状の位置がx軸からずれてたりすれば、ミラーモディファイアを追加した時点で複製が見えてるはず。

 

 でもって、x、yをチェックすれば、x座標成分反転の複製、y座標成分反転の複製、x+y座標成分反転の複製の3つが表示されアイドラリンク4人衆になります。

 

ウヒョ〜

 

 x、y、zをチェックなら7つ複製で8人衆ね。 

 

ウヒョヒョヒョ〜

 

 今回はy軸に対してミラーします。

 gキー打ち、yキー打ちで移動しましょう。3Dビューの左下に移動距離が出るんで、0.2くらいで確定。

 

 ま、こんな感じでアイドラリンクをペアにした形状のオブジェクト完成っす。

 キャラクタ作る時なんかも、基本このミラーモディファイアを使う。

 人間、左右対称なんで、片側だけ作れば、残りを勝手に作ってくれるミラーモディファイアはマストと言っていいんすよ。

 

半分作れば

 

ミラーで完成!

 

 これはまたいずれ。

 とにかく、作成したアイドラリンクペアオブジェクトを、オブジェクトモードで複製して、複製側を編集モードで、もうちょっと左右のアイドラリンクの間隔を広げて外側とします。

 で、適当に親子関係結んで、それぞれをy軸で回転させて完成。

 

 ここらへん、見た目以外あまり考えてません。

 アイドラリンクをアームとブームの動きに合わせて動かすようにする時に改めて考えます。多分、その時はローカル空間の原点側をどこにするかとか、色々考えることが出てくる。

 

今は、こっちの簡単なやつでやってる

 

運動学的にはこうするべきか?

 

 ちなみに、回転では回転の中心をどこにするかで、だいぶ結果が変わるわけですが、私は基本「それぞれの原点」てのを使ってます。この原点てのは多分、ローカル空間の原点のこと。

回転の中心をどこにするか

 3Dビューのボトムバーから選べるようになってて、目的に合わせて使い分けると便利っすよ。

 

 

 ちなみにちなみに、もう気づいてる人もいると思うけど、rキー打ちによる回転モードは、もう一回rキー打ちするとトラックボール回転モードに切り替わります。

 

 

トラックボール回転モード

 トラックボールはゲーセンでミサイルコマンド遊んだ人や、X-68000、1990年代前後のPowerBookユーザーには馴染みの装置のはず。あんな感じで形状をくるくる回せるようになります。知らん人はとりあえずマウスを動かして試してみましょう。いつでも左クリックでキャンセルできるんでね。

注意)あとマクロスのピンポイントバリアとかなー。わかる人50歳超えてるわ〜。書いてて時の流れにむせび泣いたわ〜

 

 ちなみにちなみにちなみに、プログラムでトラックボール回転を実現するにはクォータニオン使います。興味ある人は「WebGLでいきますぜい」で紹介したthree.jsのサンプルを読むといいでしょう。

 three.js-master/examples/js/controls/TrackballControls.jsがソース本体っす。

 

こっちはトラックボール回転の動作サンプル(javaだがな)↓

https://threejs.org/examples/misc_controls_trackball.html

 

 次回はチューブ部分と、アーム本体の製作。