頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Blenderでdaeファイル出力→SceneKitへ

Blenderで作成したオブジェクト(ボーン&アニメーション付き)をdaeで出力して、それをSceneKitで使う時のメモ。

まずBlenderでの注意事項。

オブジェクトとボーンの親子関係を作る時に、オブジェクトとボーンを選択してcontrol+pするとできるけど、オブジェクト→ボーンの順に選択する。逆だとできない。

ポーズモードで回転させたオブジェクトを元に戻すのは option + r

【Blender】ボーンを動かしてアニメーションを作成する | ユガラボ
↑すごく参考になったページ

daeファイルを出力する時には対象を選択しといて
Selection Only
Include Children
Include Armatures
にチェックを入れる。

Blenderでdae出力時の設定


次にXcode。

Xcodeにインポートしたdaeファイルを見るとやっぱりx軸周りに90度回転してる。なのでシーンへの追加はコードでやる方が精神的にはいい(俺の場合は、だけど)。

ともかくこの流れでアニメーション付きオブジェクトをインポートするとXcodeのScene Editorの右側にある”Animations”のところ(下図の赤い丸のとこね)に項目が表示されてる。多分Blenderで設定したアニメーションっぽい。

XcodeのScene Editor

上図の青矢印のところのボタンを押すとアニメーションが設定できる(コードならSCNActionに相当するんかな)けど、その場合は”Animations”のところには何も表示されないからどうなってんの?と思ってた。
ただここで表示される名前はBlenderで設定したアニメーション名とは違うけど(ボーンとオブジェクトの名前はBlenderで設定したまま来てる)。

なお、SCNNodeクラスのboneオブジェクトに対し、
for (NSString *key in bone.animationKeys) {
// [bone pauseAnimationForKey:key];//止める
[bone setSpeed:10.0 forAnimationKey:key];//speed変更
}
みたいにすればそのボーンに設定されたアニメーションを止めたり、speed(って何だ?リファレンスにも書いてねえ!)の変更なんかもできた。


↑SceneKitに持ってきた時の結果。

ある程度のアニメーションをBlenderで作っておいて、動かす・止めるタイミングや微調整はコード側でもできそうだな。


TensorFlowを1.0にアップデート

TensorFlorが1.0になったとは聞いてたのでアップデートしてみた時のメモ。やってる俺が何やってるのかわかってないのできっとあなたの参考にはならない。
ちなみにアップデートする前のバージョンは0.12.1。tf.__version__ で確認できる。

Installing TensorFlow  |  TensorFlow
↑本家サイト。

とりあえず、Mac用、Pythonは3系、CPU版のが欲しいってのはわかってる。いろいろと方法が書いてるけどさて俺の場合どうやってインストールしたらいいのかよく分からない。

ターミナルで
pip3 -V 
とすると
pip 9.0.1 from /Users/hogehoge/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages (python 3.5)
と出る。pyenv使ってanacondaでpython3をインストールしたんだよな、、、この場合にどうやってインストールすればいいんだ?ここでしばらく思考停止してたけど、仕方ないからpipでやることにした。

やったことは、、、
sudo pip3 uninstall tensorflow
でまずはアンインストール。

sudo pip3 install tensorflow
でインストール。とりあえずいけたっぽいので本家ページに Validate your installation ってのがあるのでその通りにチェック。
python起動してやっていく。

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
>>> print(sess.run(hello))
b'Hello, TensorFlow!'

うーむ、、、なんかごちゃごちゃ出てくる、、、やることやればもっと計算が早くなる?そんなのそっちでやっといてやと思うけどまあいいか。相変わらず最初にbって出てるけど、これなんなんだろ?

旧バージョンで動いてたサンプルコードのMNIST、畳み込みのあるDeep MNISTともに動いたわ。この二つに関しては特にコードを書き換える必要とかないみたい。


バージョン
macOS Sierra 10.12.3
Python 3.5.2 :: Anaconda 4.1.1 (x86_64)


iPhone実機だけSceneKitで背景をぼかせない

最近SceneKitをかじっているところでまだまだよくわからないところがいくつもあるんだけど、最大の謎について。誰かわかったら教えてください m(_ _)m

SceneKitではカメラのプロパティの Depth Of Field あたりを調整して一部分だけピントが合うような表現ができるはず。

Depth Of Fieldの設定

↑カメラのここを適当な値を設定すれば

XcodeのScene Editor

↑こんな感じで一部分(ここでは飛行機)にピントが合ってて他はぼける。この画像はXcodeの .scn ファイルで表示されるもの。

iOS シミュレータのスクショ

↑iOSシミュレータでもこのように一部分のみピントが合う(わかりにくい画像だけど)。

iPhone実機のスクショ

↑ところがiPhone 7+ 実機だとなぜか全体がぼけてしまう。

SCNNode *cameraNode = [scene.rootNode childNodeWithName:@"camera" recursively:YES];
cameraNode.camera.aperture = 0.1250;
cameraNode.camera.focalSize = 4.0;
cameraNode.camera.focalBlurRadius = 4.0;
cameraNode.camera.focalDistance = 36.0;

Xcodeの右側のペインではなくコードでやってもダメ。
allowsCameraControl プロパティをNOにしてもダメ。
SCNTransaction でアニメーション使ってもダメ。(positionは意図通り動くんだけど)

iOSシミュレータだとMetalではなくOpenGL ESだろうからそのあたりで違いが出てる?ってことはSceneKitフレームワークの不具合なのか?と思ってフォーラム見てもなんら関連する内容もない。うーん、謎だ。


バージョン
macOS Sierra 10.12.3
Xcode 8.2.1
iOS 10.2.1


MakeHumanのデータをSceneKitにdaeでインポートする

MakeHuman | Open source tool for making 3d characters
↑このMakeHumanで作ったデータをiOSのSceneKitで使おうとした時のメモ。

MakeHuman

↑MakeHumanでモデルや表情を適当に作る。歯や舌はデフォではオブジェクトとしてはないみたいで必要ならGeometriesのとこのTeethやTongueなどで指定しないとデータとして出力してくれないっぽい。

MakeHumanでdaeファイルをアウトプットする。
するとdaeファイルとtexturesってフォルダに入ったいくつかのテクスチャ画像ファイルが出力される。

daeファイルの中身を見ると画像ファイルの参照先があるのでそれを崩さないようにXcodeに持ってくる。

XcodeのScene Editor(っていうのかな)にdaeファイルを置いた後に各パーツごとにあるテクスチャ画像を設定していく。歯ならteeth.pngなんてのを歯のオブジェクトのdiffuseのとこにセットするという具合。



↑すると意図通りに表示された。

以上はうまくいった手順。以下はうまくいかなかった。

最初どのページを参考にしたのか、
MakeHumanでdaeファイル出力→Blenderでそれを使ってテクスチャを割り当ててdae出力→SceneKitで使用
という流れでやってたんだけど、試しにBlenderを使わずともいけることがわかった。

もう一つやってたのがBlenderで使える ManuelBastioniLAB ってライブラリ。

Blenderで作成

↑Blenderだとこんな感じでレンダリングしてくれるんだけど、、、
これをdae出力→SceneKitという流れもありそうなもんだけど、俺にはうまくできなかった。daeファイルの中身を見るとテクスチャは使ってないのか?マテリアルを細かく設定して表示させてる?謎だ。ともかくBlenderで見た質感を再現するのは挫折。

Scene Editor

↑さらにBlenderからXcodeに持ってくるとx軸周りに90度回転してScene Editorに表示されるという謎。でもアプリを実行すると意図通り回転せずに表示されてて、もうええわって感じ。



各バージョン
macOS Sierra 10.12.3
Xcode 8.2.1
iOS 10.2.1
MakeHuman 1.1.0
Blender 2.78a
ManuelBastioniLAB version 1.4.0a


音で操作するiPhone用VRアプリをリリース

久しぶりに新しいアプリを公開できた〜

VR CROSS ROAD
と言うVRゴーグルで楽しめるiOSアプリ。
iTunes Connectにアップしたスクショはこんなの↓

VR CROSS ROAD スクショ1

VR CROSS ROAD スクショ2

VR CROSS ROAD スクショ3

VR CROSS ROAD スクショ4

VR CROSS ROAD スクショ5

iPhoneでVRアプリを作るとどうしても操作できないので見るだけ、とかになってしまいがちなので音で操作するようにしてる。
手を叩くもよし、舌打ち(下品だけど一番ラク)でもよし。一定の音量以上を検知するとロボットが1レーン分歩く、という具合。


アプリは無料。アプリ内課金で「次のアプリの開発のためにコーヒーをおごってくれ!」って書いてみた。さすがにこれだけじゃまずかろうと思って「支払うとあるオブジェクトがアンロックされます」としてる。この辺りでリジェクトかもな?と思っていたけど無事審査を通過、いいのかAPPLE?




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad