iPhoneアプリ開発:AR 目次

 

 Blenderのオブジェクトモードでは、オブジェクトの大きさをプロパティパネル(前回、回転で使ったやつね)の寸法で見たり指定できたりもするんですよ。

 と言っても、オブジェクトの3D形状は多種多様(MMDのキャラクタとか)で、その寸法と言われても困るわけでして、しょうがないので、形状を覆うローカル軸に沿った最小サイズの箱(Box:ボックス)を想定し、その大きさを表示するようにしてます。

 このボックスはローカル軸に沿うという決まりを設けることで、オブジェクトモードでオブジェクトを回転させても、値は変わらないってのがミソですね。調整しやすい。

 

 

 ちなみに、このオブジェクトを覆う最小サイズのボックスは、オブジェクト同士の衝突判定でよく利用されるんで今後もちょくちょく出ます。というかすでに「光あれ」でboundingBoxプロパティとして出てきてるけどな。

 ミニマム・バウンディング・ボックス(minimum bounding box:最小境界ボックス)と呼んで、そのうち軸に沿ったものをAxis Aligned (アクシス・アラインド:座標軸に沿った)minimum Bounding Boxと呼ぶんだけど、長いんで以後はAABBと書きます。みんなそうしてるねん。なのでAABBが出たら、心の中でアクシス・アラインド・ミニマム・バウンディング・ボークスと呼びましょう。

AABB

 アクシス・アラインド・ミニマム・バウンディング・ボークス!

 もうちょっと厳密に言うとローカル空間でのAABBです。

 

 で、Blenderの組み込み形状である円柱は、円柱の円部分がローカル空間のx、y平面になり、深度がzとなります。

 

 


 たまたま、円柱の特徴的な寸法がAABBの寸法に綺麗に一致してるわけやね。

 

AABBにぴったり一致

 

 オブジェクトモードでしかオブジェクト形状を傾けない限り、この値を円柱の長さや半径変更に利用できるわけっすよ。

 編集モードで傾けたらダメよん。そっちで傾けるとAABBと形状がずれるからね。興味がある人は、これからやる寸法設定を、編集モードで傾けた円柱に対して試してみるといいです。

 


 

 とにかく、当初の目的である油圧ショベルのarm>bucket power部の円柱を作るなら、円柱がローカル空間で傾いていないのを確認しつつ、プロパティパネルでarm>bucket power部の円柱の寸法を値として入れちゃえばいいわけですよ。

プロパティパネルでの寸法入力

 bucket power部の円柱の大きさも、油圧ショベルのarm>bucket powerを選んでプロパティパネルの寸法を見るとわかります。調べてみると約0.08 x 0.08 x 0.8でした。

注意)Blenderでは単位はないみたいっす。ARKitだとメートル単位の扱いになるんで、この場合、直径8cm、長さ80cmの円柱っすね

  注意)別にレイヤーを表示させなくても、アウトライナービューでarm>bucket powerを選べば出るけどね

 

 

 ぶっちゃけ、オブジェクトモードで、今作ってる円柱選んでプロパティパネルの寸法で0.08 x 0.08 x 0.8を入力しちゃえば、いきなり完成なわけです。

 

 

 ただし、こうすると「現在のAABBをこの寸法にする」じゃなく「スケーリングされてこの寸法になるよう、現在のAABBへのスケーリング値を変える」って解釈されるんすよ。

 なので拡大縮小の項目見ると、さっきまでx、y、z、全て等倍の1.0だったのが、寸法設定直前の状態から逆算されたスケーリング値が設定されてるわけです。

プロパティパネルの拡大縮小

 つまり、このプロパティパネルの拡大縮小ってのは、前回で言うところのローカル軸に沿ったスケーリングってわけで、今の寸法にするために、ローカル軸に沿ったスケーリングをやったってことになるわけです。

 

 

 ま、これでもいいーんすけどね。

 現に油圧ショベルのarm>bucket power部の小さい方(arm>bucket power>bucket power poll)は拡大縮小の値が0.08 x 0.08 x 0.6ってなってました。なんでこっちだけそうしちゃったか、ちょっと思い出せないけど。かなり適当。

 

適当に作ってるのが丸わかりというね

 

 ただ、初志貫徹、理想は追求してこそ意味があーる、で、どうしてもスケールを等倍にとどめておきたいなら、今、見えてる形状こそがローカル側での形状なんだって、Blenderに伝えてやる必要があるんす。

 この作業をBlenderでは適用って呼んでます。

適用

 スケールだけを適用する(回転はローカル側の形状に適用したくない)時は、作成中の円柱をオブジェクトモードで選んだ状態で、3Dビューのボトムバーからオブジェクト>適用>拡大縮小を選びます。

 

 

 見ての通り、移動だけ適用、回転だけ適用、回転とスケール(拡大縮小)両方適用なんてのもあるんで、目的にあった適用を選択するといいでしょう。

 今回はスケールのみで。

 これで、現在値がローカル側の形状寸法に反映されて、スケールは元の等倍(1.0)に戻る。

 

 

 こんな感じで、円柱作り1つとっても、いろんなやり方があります。

 

 円柱追加直後にワンチャン!てのもある。

 というのも、ツールシェルフパネルの下半分のエリアは、絶えず直前にやった作業の数値を表示するようになってて、その値をいじると、直前にやった作業を数値で修正できるんすよ。

直前作業の制御にワンチャン!

 例えばオブジェクトを回転させると、ツールシェルフパネルの下半分のエリアには、その回転した値が表示されるって具合です。

 オブジェクトモードのままでいいんで、今選んでる円柱をグローバルz軸を使って適当に回転させて確定してみてください。

 

 rキー打ちzキー打ち、適当に回転、左クリックで確定ね

 

 ツールシェルフパネルの下半分のエリア見ると、その回転の詳細が数値で表示されてます。

 

 で、この表示されてる内容を変更すると、さっきの回転作業はその数値でやったってことになるんですな。

 例えば角度に180って入れると、さっきの回転作業は37.3度じゃなく180度回転だよってことになる。

 

 別の作業をするまで、この状態が続きます。

 そして別の作業、例えば移動とかさせたら、パネルは移動の詳細に変わり、スケーリングしたらスケーリングの詳細にと、作業のたびに画面が変わります。

 別の作業するまで、最後に行った作業を修正するワンチャンスがあるわけですな。

オブジェクト追加時数値制御

 そういうわけで、円柱を追加という作業を行うと、ツールシェルフパネル下部には、円柱作成時の数値が羅列されるんですよ。

 試しに、今作成中の円柱選んでxキー打ちで削除して、改めてshift+aキー打ち円柱選択で、円柱追加してみてください。パネルに頂点(円を何角形で表現する)とか、半径、深度(高さ)、色々な数値情報が表示されます。

 

 

 繰り返すけどBlenderの組み込み形状である円柱は、円柱の円部分がx、y平面になり、深度がzとなります。

 

 

 なので、あらかじめ寸法が0.08 x 0.08 x 0.8ってわかってるなら、ここで、半径に0.04、深さに0.8を指定してやれば、苦もなく求めている円柱が完成するわけですよ。

 

 

 以後、円柱はこの最後に設定した値がデフォルトとなり、その値で作成され追加されることになります。

 ちな、半径の上にある頂点てのは、円柱を何角形の円で近似するかの指定ね。32頂点なら、32角形。数が多い方が滑らかにはなるが、分割された分、平面が増え描画処理に負担がかかります。

 逆に、六角形のボルトとか作りたい場合は、わざと6とか入れてカクカクにしたりもするわけだ。

注意)実は、それだけじゃ見た目に六角形のボルトにならない。他に設定をいじる必要があるけど、これはいずれ。

 

 小さい方の円柱を作る時も、この作成時寸法指定のやり方が一番簡単なんですが、それじゃ勉強にならないんで、ここはあえて別のやり方、今の円柱を複製して、スケーリングでx、yだけ0.8倍にして、その後オブジェクト>適用>拡大縮小でローカル側の形状として適用させちゃいましょう。

オブジェクトの複製

 まず、オブジェクトモードの状態で作成した円柱選んで、オブジェクト>オブジェクトの複製を選びます。

 複製された円柱オブジェクトは、複製元と完全に重なってるので、一瞬、複製されたかどうか分からないんだけど、マウス動かしたら追随するので適当な位置に移動させて左クリックで確定させてください。

 

移動するときにzキー打ちで制約すると、中心揃えたまま上下に移動できるよ

ま、位置は後で直せばいい話で気にしなくてもいいけど

 

 複製時、複製先が複製元と完全に重なるって仕様は、複製されたか見た目にわかりずらいんだけど、3Dモデリングでは、それ以上のメリットがあると思うので、OK牧場。

 もし、完全に重ねたまま確定したい場合で、マウスクリックに不安がある人(クリックで一緒にマウスが動いちゃう人ね)はenterキー打ち使う手もあります。こっちも左クリック同様、作業確定の意味がある。

 大きさの調整は上で言ったとおり。2番目の円柱の太さを、最初の円柱の0.8倍の太さにします。スケールのxとy値を0.8で、そのあと適用ね。

 あとは太い方を親、細い方を子供として親子関係結んで完成。

親子関係の設定

 引き続きオブジェクトモードのまま、3Dビューで細い方、太い方と順にshift+右クリックで選択。最後に選んだやつが親側になるんで選ぶ順序は気をつけましょう。

 

 

 ボトムバーからオブジェクト>親>オブジェクトを選びます。

 そうすっと、もう一発「ペアレント対象」ってのを聞かれるんで、もう一回オブジェクト項目を選びます。

 

 

 なんかよく分からん。

 この最後に出てくるオブジェクト/オブジェクト(トランスフォーム維持)/頂点/頂点(三角形)て項目群は、子供側が、親側のどこに従うかを決める項目みたいで、頂点なんかを選ぶと、親側の特定の頂点にのみ追随するようになるんだけど…

 謎。

 とりあえず、円柱オブジェクトそのものに従えってことでオブジェクトを選びます。これで最後に選んでたオブジェクト(オレンジ枠)が、残りのオブジェクト(赤枠)の親に設定される。

 もしくは、アウトライナービューで細い方の項目を太い方にドラッグ&ドロップでもいいです。

 

 

 これでarm>bucket powerと同じモデルが完成。

 オブジェクトに名前をつけたい人は、適当に。

 つけ方が分からん人は「お気楽極楽Blender[2]親子関係を確認」を読みましょう。

 

 arm>joint部もこんな感じで作ります。

 ただし、ちょっと工夫してミラーモデファイアなんかを使ったりなんかして。

 そこらへんは次回。