頭と尻尾はくれてやる!

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


3Dデータを123D Catchで取得→Blenderで編集→iOSで使いたい

Autodeskの123D CatchというiOSアプリで3D用データの作成の失敗手順。


データ取得対象のぬいぐるみ
↑とりあえずこのパンダのぬいぐるみを取り込んでみる。


123D Catchアプリで画像をたくさん撮影して数十分待つ、、、

Macで123Dのサイトにログイン、objファイルをダウンロード。

Blenderでobjファイルをインポート。

Blenderでインポート
↑頂点数がべらぼうに多くて(73万ちょいある)Blenderがまともに動かないのでModifierのDecimateで頂点数を削減する(この作業ではテクスチャ座標はよきにはからってくれてるみたい)。

さらに不要な頂点を手作業で消していく。

Blenderで編集
↑頂点数がだいぶ減った(562個)のはいいんだけど、この時点でテクスチャは4枚の画像を参考にしている。BlenderがおりこうなのでBlender上では意図通り表示されてるけど、これをobj形式で出力すると具合が悪くなる。objファイルにどの画像を参考にするか、なんて情報ないから。

iOSでの実行結果

だからiOSアプリで使うと、一部しかテクスチャが正しく表示されない。

テクスチャを自作するなら、つまり3D形状の取得までなら上記手順でOKなんだけど、テクスチャ欲しいんだよな。何かいい方法ないものか?


複数のiOSデバイスでデータを共有する方法

自分用の備忘録。

tvOS SDK: An iOS Developer’s Initial Impressions - Ray Wenderlich

Apple TV(第四世代)じゃデータの保存ができない
データが1MB以下なら iCloud key-value store でOK(本人専用)
データを他のユーザと共有する場合は CloudKit


Metalでグネグネと柔らかい表現


↑Metalフレームワークを使って柔らかそうなモノを表現してみた。周囲をぐるぐる回ってる星みたいなのは以前(遅延ライティング)の名残りで今回のお話とは全く関係ないです、はいすいません。

Metalが登場した時にそのメリットとしてCPU/GPUのメモリ共有ってのがあってさ。

DSAS開発者の部屋:Metalの「shared CPU/GPU memory buffer」について
↑ここが詳しい。
OpenGL ES 2.0をいじってた時に布のような物を表現しようとすると、毎フレームCPU側で計算したのをGPUへ送る必要があったんだよな。なんせメッシュの形が毎フレーム変化するので。剛体ならメッシュの形状は変わらないから毎フレームGPUに教えるのはその位置や姿勢を示すマトリックスだけでよかったんだけどね。

Metalの場合だと、物理エンジン(Bullet)で計算した結果を直接GPUの頂点バッファに書き込んでる。

ちなみに今回のは物理エンジンからすると剛体(btRigidBody)ばかり使ってる。単に多角形を並べて各多角形をbtGeneric6DofConstraint でつないでるだけ。

多角形とメッシュの解説図
↑こんな感じ。多角形同士は継手で繋がってるようなもので相対的に動くので二つの多角形の頂点を使うメッシュ形状(図の色付き部分ね)自体が毎フレーム変化する。
これをOpenGL ES 2.0で実装するとちょっと罪悪感(すんごいバッテリー使ってるんじゃないだろうか?みたいな)を感じるけど、Metalならそんなの気にならない。Metal面白いねえ〜


  TopPage  



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