★☆★ 今回の作業 ★☆★
前回、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つの立方体の情報量をもっと少なくできないか検討する。