怒涛のMMD移植から一転、油圧ショベルのモデリングっす。

 

 

色気はないな

 

 我慢しろやああああ

 ほんとはワシもショベルとかほっぽり出して、髪とか揺らしたいんじゃああ。

 

 までも、基礎は大事ですよね。

 MMDモデルいじるにしても、メッシュの加工・変形の知識は持っといた方がいいからね。知ってると知ってないで効率だいぶ違うから。

 とりま、私がBlenderで作った油圧ショベル3Dデータも置いときます。

 

↓油圧ショベル3Dデータ(こいつからCOLLADAファイルを出力した)

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


 で、これから語る私のショベル作成作業では、次のサイトが大変参考になりました。

 

↓ここね

https://blender-cg.net

 

 「お気楽極楽Blender[1]インツーザ3D後編」の最後でも紹介したサイトっす。

 GIFアニメーションで操作方法を紹介してくれてたりとか、かなり親切な作りでありがたい。感謝。ここにリストされてる入門記事を読んでいけば、それなりにBlenderを使えるようになると思われ。

 全部読んでから作り始めるのもいいし、先に作りたいモデルを決めて、それを作るにはどういった方法があるのか探りながら、その都度読んでいくのでもいいんじゃないかと。

 私は後者派。

 このブログは、そのためのもんで、油圧ショベルをネタにしてBlenderのモデリング機能の一部を紹介します。あくまで一部ね。

 どのみち終わりはない。

 Blenderというか3Dモデラー、レンダラー全般に言えるんだけど、やることがありすぎて、深く追求し始めるときりがないのよ。その間に新しい機能追加されるとかね。

 参考にしたサイトは、その都度紹介する予定。

 本では以下の2冊を読みますた。

 ちょい古いです。今はもっと色々な本出てるし、YouTubeも充実してんで、そっちから攻めるのがいいかと思う。

 

 

 アプリでキャラを動かしたい者にとっては、下のずん子ちゃん本より、こっちの本の情報の方がより役立ちます。アーマチュアやインバースキネマティックス、布シミュレーションあたりのやり方まで解説しててアニメーションも作成する。それとノードエディタの説明もあり。
注意)インバースキネマティックスは逆運動学と訳される。例えば現実の世界で人形にボクシングのファイティングポーズ取らせようとした時、大概の人は人形の手首持って胸に近づけたり離したりして調整すると思うけど、その時、人形のヒジ関節が手首の位置によって勝手に曲がってるでしょ。コンピュータの場合、このヒジの曲がり具合を逆算しないとダメなんだけど、これが結構むずいのよ。そこらへんで使うのが逆運動学。布シミュレーションは、文字通り布の振る舞いをシミュレートする。スカートのひらひらを再現するためなんかに使います。ノードエディタはレンダリングの際の処理工程を編集する機能で、Blenderで画像を生成する際の仕上がりを調整するのに使う。

 

 

 

 こっちはSubdivision surfaceの取り扱いに力点置いてる。アーマチュアでポージングまでさせるけどアニメーションは無し。

注意)Subdivision surfaceは、大雑把な平面で構成される3D立体形状から、その平面を細分化してより詳細な形状を計算する仕組み。ずん子ちゃん本は初版本を買ったせいで誤植に悩まされたんだよね〜、懐かしい。[頂点の経路を連結]を使わないとできないところに[辺/面作成]を使うって書かれてるとこが結構あって、全然書いてるとーりにならねーじゃんってなった。先に正誤表を確認するべきだったわー。

 ↓正誤表確認は技術本の基本やね

 https://www.borndigital.co.jp/book/5815.html#book_support

 

 2冊のモデリングの仕方、それぞれやり方が違ってて興味深かった。いろいろなやり方があるんだね〜。ネットでは、そのどちらでもないモデリングの仕方があったし〜、奥深いわ。
 と前置きはこれくらいにして、まずは、アームからいってみましょう。

 上に置いといたyumbo.blendファイルを開いてみてください。

アーム

 アウトライナービュー見たらわかるように、アーム(arm)は単独のオブジェクトじゃありません。arm本体に複数の子オブジェクトが追加される形で構成されてます。そのほとんどは、Blender組み込みの形状を使ってて、それを縦に伸ばしたり横に縮めたりして、それぞれをくっつけたりしてるだけなんすよ。

 

注意)arm line 1、arm line 2、arm line 3のチューブも、組み込み形状なんだけど、カーブってのを使っててちょっと特殊っす。使い方はいずれ。

 

 例えば、arm>bucket power部なんてのは、2本の引き延ばした円柱オブジェクトを親子関係にしてるだけ。

 

 

 なんだけど、「お気楽極楽Blender[1]インツーザ3D前編」で紹介した拡大縮小のやり方じゃ、縦や横、幅の比率(プロポーション:proportions)を保持したまま拡大縮小するので、円柱を縦に伸ばしたり横に縮めたりはできないんすよ。

 

プロポーションを維持して大きくなったり、小さくなったりする

 

 こういう場合は制約を使います。

 とりあえず、実際作ってみるということで、今のモデルは作業に邪魔なんで消しましょう。まるっきり新規に、情報ビューでファイル>新規でもいいんだけど、今回はレイヤ使ってみます。

レイヤ

 オブジェクトを隠す方法はこれまで散々やってきたけど、今回は層(レイヤ:layer)単位での表示・非表示。Blenderは作業空間を20層のレイヤーで共有してまして、層ごとに表示・非表示を切り替えることができるんですな。

 層といっても、オブジェクト同士の階層関係には全く影響しません。

 あくまでBlenderでの作業中に、見せるグループ、見せないグループを、より分けるのが目的なだけの層っす。

 表示・非表示の状態は3Dビューのボトムバーにある可視レイヤで確認・コントロールできるようになってます。

 

 

 例えば、今見てるyumbo.blendファイルの全オブジェクトは、1つのレイヤに集中して割り付けられてて、その層だけが表示状態なわけですよ。

 

 

 んで、この可視レイヤは、クリックで切り替えでき、shift+クリックで追加や解除ができるようになってます。

 なので、オブジェクトを複数のレイヤにより分けておくと、いちいち選択して表示・非表示なんてしなくても、必要な時に必要なオブジェクトだけまとめて表示・非表示することができるんですな。

 

 今回は、勉強の意味でこいつ使います。

 まず、左上2番目の可視レイヤをクリックしましょう。

 1番目が非選択状態になるので、油圧ショベル、カメラ、光源全て見えなくなる。

 

 

 これで、以後の追加オブジェクトは、この選んだ2番目のレイヤに所属することになる。

注意)shiftクリックで複数選んでる場合は、追加オブジェクトが所属するのは最後に選んだレイヤね

 

 てことで、まずはオブジェクトモードにしておいてから円柱追加しましょう。

 間違って編集モードの時に追加しちゃうと、その編集中のオブジェクトの形状に円柱を追加することになるんでね。

 あくまで円柱の形状を持つ、単独のオブジェクトとして追加します。

 何言ってるのかわからん人は「お気楽極楽Blender[1]インツーザ3D前編」から読み返すように。

 

 1、オブジェクトモードにしておく

 2、shift+aキー打ちでメッシュ>円柱を選んで追加

 注意)もちろんボトムバーから追加>メッシュ>円柱でもいい

 

 こんな感じなりよ。

 

 

 これで円柱形状の単独のオブジェクトを1つ追加したことになる。

 ちなみに、追加された円柱は3Dカーソルのある場所に出現するので、3Dカーソルの場所によっては画面外に出現する場合があります。

 あれ、円柱出ねーなと思ったら3Dビューのボトムバーから、以下のいずれかを選びましょう。

 

 ビュー>選択部分を表示

 ビュー>視線を揃える>3Dカーソルを視点の中心に

 ビュー>視線を揃える>選択部分を表示

 注意)視線を揃える系と、そうでない系の違いは知りません。いつかわかると思われ

 

 今更だけど、3Dカーソルを原点に移動させてから、オブジェクトを追加するとよくってよ。

 もう変な位置に作っちゃたyoooな人も、円柱選んだ状態で3Dビューのボトムバーから以下の2ステップで円柱は原点に移動してくれます。

 

  1)オブジェクト>スナップ>カーソル→原点

  2)オブジェクト>スナップ>選択物→3Dカーソル

 

 ちなみに、1)の代わりにshift+cキー打ちでもいい。これはビュー>視線を揃える>3Dカーソルのリセットと全表示のショートカット。1)と違い原点が中心に来るように見てる範囲も調整されるんで目的によって使い分けるといいす。

 

 で、円柱を選んだ状態で編集モードに切り替える。

 

編集状態だ!


 こんな感じで、形状をいじるのは基本的に編集モードでやって、オブジェクトモードでは、編集モードで完成させた形状を移動したり回転させて配置するだけって風に役割分担させるのが正統派なんじゃないかと思われ。

 油圧ショベルはかなり適当に作ったけど…

注意)一つのオブジェクトの形状を、複数のオブジェクトで共有させて、それぞれを不均等なプロポーションで拡大縮小することで、変化をつけるって手法もあるけど、それはまたいずれ。

 

 編集モードになったところで、不均等スケーリング行ってみよー。

 ここから先は、円柱全体の変形なので、頂点が全選択状態になってる必要がある。

 なんか変な操作して、全選択になってなさそうならaキー打ちで全選択状態にしといてね。

 

 まずsキー打ちでスケーリング状態にするのは同じ。

 違いは、スケーリング状態でzキー打ちすること。

制約(x、y、z軸だけ動けるようにする)

 これでz軸に沿った拡大しかできなくなる。

 スケーリングの中心点を通るz軸に平行な薄青の線が出てるの気づいた?

 

 

 スケーリング状態時は、xキーyキーとキーを打つたびにスケーリングできる方向が限定されるのがわかるはず。それに合わせてスケーリング制約軸の表示も変わります。

 

 

 右クリックでキャンセルになるので、x、y、z軸切り替えながら、いろいろな軸で制約されたスケーリングを試してみるといいです。

 で、気づいた人もいると思うけど、例えばzキー打ちでz軸制約状態にして、もう1度zキー打ってもz軸制約解除とはならない。解除するにはzキーを2回打たないと解除にならないのよ。

 何でかというと、軸制約にはグローバルとローカルの2種類あって、同じキーを打つ場合、次のようにローテションしてるから。

 

 

 3Dビューのボトムバーにも出てるんで、z、z、z、z、…てキーを打って変化を観察してみるといいでしょう。

 

 

 で、このグローバル・ローカルなんだけど、「光あれ」でSCNNodeのワールド座標とモデル座標ってやった、あれのことです。でもって、今は、ワールド座標とローカル座標の軸が、一致してるんで全然変化がわかりません。

 基本、形状モデリング中はそれでいいんだけど、それじゃ違いがわからんので、わざとワールド座標とローカル座標の軸をずらしてみます。

 スケーリングをキャンセルか確定して、編集モードからオブジェクトモードに戻しましょう。

 でもってオブジェクトモードで円柱に、移動と回転を加えます。

 ちなみに今回は数値で制御してみる。

数値での移動や回転

 まずは、オブジェクトモードに戻す。

 で、3Dビューのボトムバーからビュー>プロパティを選んでプロパティパネルを出す。

プロパティパネル

 

 円柱が選ばれてるのを確認して、位置、回転に以下の値を入力。

 

 

 これで、ワールド座標とローカル座標の軸がかなりずれた状態になったわけだ。

 XYZオイラー角ってのは、「ムーブムーブムーブ」で説明したオイラー角の適用順序ね。X軸で30度回転させてから、Y軸で30度回転させる。順序が変わると回転結果も変わります。今回はどう傾いてもいいんだけど、上の画面と一致させたいならXYZオイラー角にしてx=30度、y=30度を指定しましょう。

注意)「ムーブムーブムーブ」で言った回転軸の順序で回転結果が異なるてのを、実際に確認したい人は、ここでYZXオイラー角とか、色々変えて違いを見るのもいいんじゃないかと思われ

 

 これでプロパティパネルの仕事はおしまい。

 画面が狭い場合、もう一回ビュー>プロパティを選んで引っ込めます。

 パネルの左端を右にドラッグしてもいい。右側まで持っていくと「+」になります。こいつをドラッグ(クリックでも可)して引っ張り出すことも可能。

 

閉じてもよし

 

引っ張り出してもよし

 

 ショートカットはnキー打ちね。

 ちなみにMMDでもお世話になった左のパネルはツールシェルフって言います。

ツールシェルフ

 

 こっちも3Dビューのボトムバーからビュー>ツールシェルフを選んで出したり引っ込めたりできます。画面上での操作も同じ感じ。ショートカットはtキー打ちね。

 

 ということで、円柱が選ばれてるの確認して、編集モードに戻りましょう。

 さっきと同じようにスケーリング中にzキー打ちすると、今度はスケーリング軸が変わってるのがわかるはず。

 

 

 

 ここらへんを理解すると、この傾いた状態でも、以下のステップで自由な長さの円柱がモデリングできるわけっす。

  1.  s:スケーリング開始
  2.  z:z軸制約設定(グローバル)
  3.  z:z軸制約設定(ローカル)
  4.  円柱を上下に伸ばす
  5.  左クリックで確定、制約でのスケーリング終了
  6.  s:スケーリング開始
  7.  好きな大きさに均等スケーリング
  8.  左クリックで確定、スケーリング終了

 

 

 ま、普通はグローバル・ローカル軸を一致させていじるけどね。

 

 制約機能はスケーリング中に限らず移動中や、回転中でも有効。

 移動は例えばyキー打ちならy軸に沿ってしかうごかせなくなる。

 回転の場合は、yキー打ちならy軸を回転軸にする。

 それと、これとは逆に、例えばz軸ならz軸だけを動けなくする制約もあります。

 こっちはshift+zキー打ち

制約(x、y、z軸だけ動けないようにする)

 x、yに関しても同じ。shiftキー押しながらのx/yっす。

 実際スケーリングでやってみればわかると思いますが、shift+zキー打ち(ローカルの方なんでshift+zを2回ね)やると、円柱の上下の長さは固定で、円だけが、形を保ったまま大きさだけ変化するはず。

 移動や回転でも同じ。

 回転に関しては軸を固定って表示されるけど、それって軸で回転するって意味じゃ…、同じなんじゃ…、実際shfit有りも無しも同じっぽい。

 

 後、こういった制約使う他に、画面上に出てるマニピュレータを使う方法もある。

マニピュレータ

 ボトムバーのトランスフォームマニピュレータてのがそれで、非表示、移動、回転、スケーリング用が選べます。

注意)望むならshift+クリックで複数のマニピュレータを同時に表示させることも可能

 

非表示

 

移動

 

回転

 

スケーリング

 

 デフォルトは移動用になってって、xの矢印ドラッグすれば、x軸に沿って移動するし、yの矢印ドラッグすれば、y軸に沿って移動するわけですよ。

 

各矢印をドラッグして軸に沿った移動を行う

 

 右にあるトランスフォーム方向をクリックしてメニューを選べば、グローバルとローカルの切り替えもできます。

 

 注意)ノーマルとかジンバル、ビューについては機会があれば

 

ローカル軸がよくわかる

 

 まー、でもさっきのx、y、zキーを使っての制約を覚えたらあんま使いません。

 

 円柱の形状変更は、他にもやり方があって、例えば選択ツールを面選択にして、円柱の上の面だけ選択しておいて、ローカルz軸制約の移動で上に引き伸ばしたり、下に縮めたりって方法でもできる。

 

 

  1.  面選択ツールに変更
  2.  aキー打ちで、一旦選択を全解除して、上の面だけ右クリック
  3.  gキー打ちで移動開始
  4.  zキー打ち2回でローカルz軸の制約設定

で、好きに伸び縮みさせる。

 


 その他、オブジェクトモードに切り替えて、プロパティパネルの寸法で、大きさを直接入力って手もあります。

 次回に続く。

 

 

 

iPhoneアプリ開発:AR 目次

 

 前編からの続き。

 モーション書き出したはいいが、全然動いてくれねーんすよ状態。

 う〜ん、前回からCOLLADAの解釈からして怪しかったもんねえ。

 今回もドイヒ。

 

なんじゃこの変形状態はというね

 

 どうも変なんで、試しにCOLLADAファイルをSceneKitのネイティブファイルであるSceneファイル(拡張子.scn)に変換してみます。

 ナビゲーションエリアでaoi.dae項目を選んでおいて、Editor>Convert to SceneKit scene file format(.scn)メニューを選択。

 


 複製(デュプリケート:Duplicate)するか、そのまま変換(コンバート:Convert)か聞かれるんで、とりあえず元ファイルを残す複製の方で。

 

 

 うりゃ!

 うーん、複製されたsceneファイル開いてAOI_arm選んだら真っ黒になってしまった。

 やっぱ、なんかおかしい。

 

 

 こんな時はscntoolだ!

scntool

 scntoolはXcodeのバンドルの中に入ってる、COLLADAやSceneファイル間の変換用コマンドラインツールっす。バンドルわからん人は「見た目が大事」ね。

 

↓scntoolの解説

https://gist.github.com/matux/4a30c4b4b29d636fe6847b6a3234bc4f

 

 こいつはターミナルから使います。

ターミナル

 ターミナルはアイコンをダブルクリックで起動する通常のMacアプリ。アプリケーションフォルダのユーティリティフォルダに入ってます。

 

 Launchpadだと「その他」の中ね。

 

 

 起動するとこんなウィンドウが開きます。

 

ゆーても、私は環境設定でHomebrewプロファイルを

カスタマイズしてるんでそのまんまじゃないけど

 

 ただ文字を打ち込み、それに対応して文字が表示されるだけのウィンドウ。

 ま、一応マウスでの文字セレクトやコピー、ペーストには対応してくれてますが、基本キーボードからの入力のみを受け付けて、文字のみを表示する。

 40年ほど前、マウスのない時代は、みんなこんな感じでキーボードから色々文字を使ってコンピュータに命令してたわけだ。マウスがないならトラックパッドを使えばよくってよ。

 scntoolは、ここからでないと使えない。

 そういうのをコマンドラインツールって言います。

コマンドラインツール

 利用するにあたっては、コマンドラインツール(今回ならscntool)自身のファイルの場所を、ファイルパスで指定する必要があったりして結構面倒っす。

ファイルパス

 ファイルパスはこの前紹介したURLの祖先みたいなもんで、Macだと先頭のスキーム部file:が省かれて、その次の // が / になるだけでそれほど違いはありません。

 今回のscntoolはXcodeバンドル内にあるんで、例えばXcodeがアプリケーションフォルダに置かれてる場合、scntoolのファイルパスは

 

/Applications/Xcode.app/Contents/Developer/usr/bin/scntool

 

 となります。

 とても長い。

 よく使うコマンドラインツール群は、決まったフォルダに集められてて、そのフォルダを、ツールの名前だけ書かれた場合に検索する場所としてあらかじめ指定してるので、コマンド(ラインツール)名だけ書けば実行できるようになってんだけど、scntoolの置かれてる場所は、そこには含まれてないで、フルに書かないとダメなんですな。

 ただし、もうちょっとお手軽な方法として

 

 xcrun scntool

 

と打ち込むやり方があります。

 xcrunもコマンドラインツールで、これ自体はよく使うツール群が置かれてる場所にあって名前書くだけでOK。で、スペースを挟んで、その後に続くコマンドラインツール(今回ならscntoolね)をXcodeのバンドルから探して実行してくれる。

 私はこれを使ってる。

 チューことで、scntoolを実際にターミナルで使ってみましょう。

scntoolによるCOLLADAファイルの変換

 まず、aoi.daeファイルのあるaoiフォルダをカレントディレクトリにするためにcdコマンド使います。

カレントディレクトリ

 こいつは、ツールを検索するフォルダと同じで、ファイル名だけ書かれた時に、検索するフォルダのことっす。

 昔はフォルダと言わずディレクトリって言ってた。

 ツールを検索するフォルダとは別に1つだけ、cdコマンドで指定できる。

cd

 カレントディレクトリを設定するには、ターミナルで

 

cd /Users/kunii/Desktop/mmd/mmd/art.scnassets/aoi/

 

 てな風に、cdの後にスペース入れてからカレントにしたいフォルダのファイルパスを書きます。今書いたのは、私のマシンでのaoiフォルダのファイルパス。

 こうしてaoiフォルダをカレントディレクトリにしておくと、aoi.daeって書くだけで、aoiフォルダの中にあるaoi.daeというファイルを指定したことになって、長いファイルパスを書かなくて済む。

 と言っても、自分のaoiフォルダのファイルパスなんてパッと思いつかんよね。

 ということで、簡単な指定方法教えます。

 まずターミナルで「c」キー、「d」キー、スペースキーと打ち込んでcdとカーソルの間があいてる状態にしましょう。

 

 

 この状態でaoiフォルダをターミナルのウィンドウにドロップ。

 

 

 これでaoiフォルダのパスが表示されるので、そのままenterキーを打ち込んで実行。これでaoiフォルダがカレントディレクトリに指定されるので、この長ったらしい文字列を打ち込む必要がなくなる。

 

 

 もちろん、ドラッグ&ドロップなんかせずに全部キーボードから入力してもOK。

 ここら辺興味のある人は「mac ターミナル」で検索だ。

 あとは

 

xcrun scntool --convert aoi.dae --format scn --output x.scn --asset-catalog-path /Users/kunii/Desktop/mmd/mmd/art.scnassets/aoi/ --force-y-up --verbose

 

と入力してenterキーで実行。

 

 --convert aoi.dae

 

はカレントディレクトリのaoi.daeってファイルを変換(コンバート:convert)希望って意味。ここでaoi.daeのフルパス書けば、上のcd処理は必要ないけど長くなるしね。

 

 --format scn

 

はsceneファイル形式(フォーマット:format)に変換してねという意味。

 

 --output x.scn

 

は変換した出力(アウトプット:output)ファイルはx.scnて名前にするよって意味。

 

 --asset-catalog-path /Users/kunii/Desktop/mmd/mmd/art.scnassets/aoi/

 

は、テクスチャファイルといった資産群(アセットカタログ:asset catalog)のあるフォルダのパス(path)の指定。今回ならaoi.daeと同じ階層なんで . でもいいかと思ったんだけど /(スラッシュ)からのフル記述のパスが必要でした。

注意)「.」はカレントディレクトリて意味になるが、今回は通じなかった。

 

 aoi.daeで使う資産、つまりテクスチャファイルは、aoi.daeと同階層にあるんで、これは、カレントディレクトリのことになります。なので--asset-catalog-pathの後ろに指定するファイルパスは

 

pwd

 

と入力してenterキー打つことで調べることができます。

pwd

 現在のカレントディレクトを表示せよという命令。

 つまり表示されるのは、さっきのcd で指定したパスなんですけどね。

 

 --force-y-up

 

は例の「見た目が大事」で話したBlenderはz軸を上にする問題への対応。必ずy軸を上下軸にせよという指定。SceneファイルはSecneKit Catalogフォルダに入ってても、補正の対象外なので。

 

 --verbose

 

は、冗長(バボース:verbose)なメッセージを依頼。

 とにかく、事細かに今なにやってるか伝えろって指示です。これを指定することで、何のトラブルがわかるかもしれないわけっす。

 で、うりゃっと実行。

 冗長なメッセージを依頼したんで、ブワーとメッセージが流れてく。終わったところで上にスクロールしていくと…

 

 

 あ〜、もうねえ、これっぽい。

 ボーン名が文字化けしてる。

 で、ターゲットが見つからないと…

 やっちゃたねと。

 

でも一応の変換はしてくれてた。アニメーションしないけど

 

 MMDは日本生まれなんで、日本語使うのになんの遠慮もないんですが、アメリカ生まれのXcodeやscntoolは日本語読めないんすよ。本来UTF-8なんで、読めないにせよ問題なく作業できそうなんだけど、やっぱ理想と現実は違うっすな。

 これが原因かなっと…

 どうしよこれ、ねえ、どうしたらいい?

 Blender戻ってアウトライナーで手動でボーン名を英語に直す?

 頭抱えつつBlenderのMMDタブ画面よくみたら、Translationってボタンがあるじゃなーい。

MMDタブ画面

 MMDタブはmmd_toolsアドオンによって提供されるコントロール画面っす。3Dビューの左にあります。

 

 

 ビンゴでした。

 指定したパートのオブジェクト名を日本語から英語に変換してくれるっぽい。

 とりあえず変換辞書は内部版(Internal Dictionary)を指定して、Types、Modesの項目はshiftキー押しながらのマウスクリックで全選択、下の3つの項目も全部チェック入れてOKボタンクリック。

 

注意)この内部版の変換辞書はmmd_toolsフォルダ内のtranslations.pyというpythonファイルに直接書き込まれてました。Blenderのアドオンはpythonで書けるんですな。で、pythonファイルなんでプログラムが読めるんですが、どうもtranslations.pyと同じ階層にtranslations.csvて名前のファイルを置けば、外部提供辞書として利用してくれるらしい。で、そこらへん踏まえて検索して以下のリポジトリ見つけますた。

 

https://github.com/Hogarth-MMD/mmd_tools_translation

 

ここで提供されるtranslations.csvをtranslations.pyと同じ階層に置くと、より多くの日本語を英語に変換してくれます。もし変換しきれない日本語のボーン名なんかがつけられてた場合は、このtranslations.csvに「対象の日本語, その日本語に対応する英語」の順で行を追加してやればいいみたい。

 

 

 

 何個か変換できなかったよーとエラーレポートされたけど、大半はできたっぽい。

 

 とりあえず、これで再度COLLADAを再出力してXcodeでRunだ!

 うりゃ!

 

 

 動きましたー。

注意)とにかく極力日本語は避ける方向が正解っぽい。これ以外に、MMDのファイルによってはメッシュ名やアーマチュア名に日本語使ってて、それが悪さして動かない場合もあった。ハッカドールなんかのMMDがこれ。

 

 で、前回から見えてた半透明のカプセル、物理計算用の剛体(リジッドボディ:rigidbody)。

 こいつは、物体同士の衝突による反発などを計算して動作させるためのもんで、MMDでは髪なんかを揺らすのに使ってます。なんだけど、今のところ役に立たないので見えないようにしときます。

 

 

 アウトライナービューでAOIの下にいるrigidbodiesってのがそれなんで、SCNNodeとして読み込んだAOIノードをwithName:"rigidbodies"で検索すれば見つかるはず。

 見つかったら、removeFromParentNodeメッセージで親離れしてもらいます。

removeFromParentNodeメッセージ

 登録の場合、親となるSCNNodeにaddChildNodeメッセージを送るんですが、その登録された親から離れる場合は、子供側のSCNNodeにこのメッセージを送ります。

 

class ViewController: UIViewController {
	・・・
    override func viewDidLoad() {
		・・・
        guard let mmd = mmdscene.rootNode.childNode(
        	withName: "AOI", recursively: true) else {
            return
        }
        if let rigidbodies = mmd.childNode(
        	withName: "rigidbodies", recursively: true)  {
            rigidbodies.removeFromParentNode()
        }

 

 これでパーペキ。

 

 

サンプル:

 http://tetera.jp/xcc/book-sample/mmd-motion.zip

 

 ところで、さっきのMMDタブにある運動をインポートするボタンは、アウトライナービューでAOI項目を選んでるとクリックできるんだが、こいつは世に出回ってるミックミックダンスのモーションデータファイル(拡張子.vmd)を読み込むためのもんです。

 

 

MMDモーションデータファイル

 例えば「WebGLでいきますぜい」で紹介したthree.jsサイトからダウンロードできるthree.js-masterのexamples/models/mmd/vmdsに入ってるモーションデータファイルのうち、MMDモデル用のモーションファイルwavefile_v2.vmdを読みこまして、こいつをCOLLADAで出力してARで使うと〜

 

↓three.jsサイト

http://threejs.org

 

 こうなります。

 

左側は、同じモーションを初音ミクモデルに埋め込んだもの

このモデルもthree.js-masterに入ってる

 

サンプル:

 http://tetera.jp/xcc/book-sample/mmd-dance.zip

 

 イエェエェェスッ!

 総統!歩けます!!

 物理演算できてないから髪が体に食い込むとか、揺れないとかはあるし、モーフィングっていう機能もサポートできてないんで、まばたき一つしないけど、まずはめでたい。Blender、COLLADA、SceneKitで剛体運動やモーフィングをどう扱うかとか、そういうのはもうちょっと単純なサンプル作って調べてかないとね。

 とりあえずはダンスダンスダンス!

 

 ということで、次回は油圧ショベルに戻ります。