頭と尻尾はくれてやる!

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


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面白いねえ〜

<< 複数のiOSデバイスでデータを共有する方法  TopPage  Metalで遅延ライティング >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/980-6d5bc2ff




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

FC2Ad