パクリアプリ開発日記 14日目 OpenGLで12万5千個の立方体を描画するためのメモリ量を考える

★☆★ 今回の作業 ★☆★

前回、12万5千個の立方体をUnityで作ったプロジェクトからiPhone6sで描画しようとしたら、Xcodeからメモリ足りねーよ馬鹿がと言われて落ち込んだため、使用メモリ量の計算をちゃんとしようと思います。

立方体は6つの四角形で形成されます。3次元座標 xyz の3軸の位置情報が4つあれば1つの四角形を、そしてそれが6個あれば立方体を定義出来ます。ただし、OpenGL ESでは四角形がサポートされません。ですので四角形は2つの三角形を組み合わせます。

(OpenGL知ってる方は分かると思いますが、GL_TRIANGLESを使います。GL_TRIANGLE_STRIPは先ずは置いておきます。)

xyzの位置情報の精度はfloatの4バイトが一般的だと思います。

4バイト x 3軸(位置) = 12バイト

ただし、各頂点の向きを決めなければいけません。向きがないと表や裏の区別が付きません。また、テキスチャで絵を表示したいため、その情報も必要です。向き情報は各頂点毎にxyzの3軸それぞれに対してfloatの4バイトで定義します。テクスチャは各頂点毎にxとyの2次元でやはりfloat値により位置を指定します。

よって、1つの頂点の情報は、

4バイト x 3軸(位置) + 4バイト x 3軸(向き) + 4バイト x 2軸(テクスチャ) = 32バイト

になりました。

この32バイトに3を掛けると三角形が、さらに2を掛けると四角形が、さらに6を掛けると立方体になるので1つの立方体の情報量は

32バイト x 3 x 2 x 6 = 1,152バイト

です。

12万5千個の立方体を描画するには

1,152バイト x 125,000 = 144,000,000

で、144メガバイトとなりました。

あれ?iPhone6sの2ギガバイトに収まりますね?

何してるんですかUnity君?

何も言わないと標準で付いてくる、オプション盛り盛りな携帯電話の契約を思い出します。多分物理演算用の情報とかいっぱい付いてるんだろうな。

わたしはオプションの内容を細かく調べて、不要なものを全部解約出来る自信はないです。

ちなみに、iPhoneのマイクラって100ブロック先位まで見えてますよね?なので、本当は 200 x 200 x 200 で 800万個 くらいの立方体を1度に描画したいです。工夫すればここまでの数は必要ないと思いますが、何れにしても25ブロック先も見えないマイクラやりたくないです。(50*50*50=12万5千)

Unityは使わない事にしました。

★☆★ 次回の作業 ★☆★

1つの立方体の情報量をもっと少なくできないか検討する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です