「Unity」タグアーカイブ

パクリアプリ開発日記 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つの立方体の情報量をもっと少なくできないか検討する。

パクリアプリ開発日記 13日目 Unityで12万5千個の立方体を描画する際のFPS計測

★☆★ 今回の作業 ★☆★

Unity上でCubeを”Duplicate”(複製)し、ひたすらコピーしていきます。重くはなりましたが、なんとか12万5千個の立方体を並べる事が出来ました。

この段階で動かなくなれば、”バーカバーカ役たたーず”とか言ってUnityを馬鹿にするつもりでしたが大丈夫でした。惜しいな。

次に、UnityからiOSのプロジェクトを作成しましたが、ここは馬鹿にしていいと思います。iOSのプロジェクト生成するのになんと5時間かかりました。

バーカバーカ役たたーず。

でもちゃんと生成できました。そしてiOS上で実行してみました。iPhone6sで動かします。自力でOpenGLES3.0使って
描画した時は、21FPSでました。Unityでは何FPS出るんでしょか?やはり最適化されて、無駄な描画とか極力省くようになっているから21FPSより良い結果になるんでしょうか?

・・・

・・

・・・あれ?実行されないな。

Xcodeを見ると、

“Finished running”(実行が終了した)

と出ています。あれ?おかしいな。まだ実行されてないんですけど。で、よくよく見ると、Xcodeでメッセージが出ています。

Message from debugger: Terminated due to memory issue

翻訳:12万5千個も立方体作ればメモリ不足になるのがわからないのか?iPhone6sの2GBでも足りねーわ。お前の頭がメモリ不足です。

・・・その通りです。

こうしてFPS計測不能という事がわかりました。

★☆★ 次回の作業 ★☆★

Xcodeに馬鹿にされたことから立ち直る。

パクリアプリ開発日記 12日目

今日はUnityについて、その利便性と引き換えに不幸になっている人がいるのではないかということを考えていました。Unityのような汎用的な3Dゲーム開発環境が登場することによって、確かに開発効率は上がったのかもしれません。しかしその裏で、プログラマーの方々のコーディングにおける創意工夫というか、ものづくりというかそういう点でつまらなくなっている面があるのは確かです。Unityなどのツールを使うことを強制され、ゲーム開発のプログラミングという仕事が誰でもできるレベルでコモディティ化されてしまい、創意工夫が極端に制限された中で作業させられてしまう人が出ているという現実に思いを馳せていました。

(翻訳:今日は作業していません)

パクリアプリ開発日記 11日目 UnityアプリをiPhoneにインストール

★☆★ 今回の作業 ★☆★

完成した玉転しゲームをとりあえず実機に入れました。

Unityから設定をするだけで、簡単にiPhone向けのプロジェクトを自動生成してくれました。
操作方法は特に難しいことはありませんでした。

問題は、その変換時間です。

まず、iPhone向けのxcodeプロジェクトをUnityから出力するのですが、言っちゃ悪いですが私はそこそこ良いMAC使っていますよ。MACBOOK PRO 2015年モデル使ってても3分くらい掛かったんですよ。

カップラーメンが出来てしまいます。

その後、xcodeプロジェクトを開いてビルドするんですが、3分を超えてしまいました。

カップラーメンが伸びてしまいます。

iPhoneにインストールした後、もっと作業を予定していたのですが、ビルドの間に私は寝てしまい、起きたら朝の8時でした。

★☆★ 次回の作業 ★☆★

Unityで12万5千の立方体を描画(Unityのプロジェクト上で追加出来る?)して同様にiPhone実機にインストールし、自分でOpenGLESのコードを書いた場合のFPSとどのくらい差が出るか計測します。

でもなんかUnity使うの辛くなってきた・・・

パクリアプリ開発日記 10日目 Unityで玉転しゲーム後半

★☆★ 今回の作業 ★☆★

https://github.com/unity3d-jp/FirstTutorial/wiki

今回は4〜7ページを実施して玉転しゲームが完成しました。

前回の作業と合わせて1時間くらいでできたと思います。

iPhoneが出たばかりの2008年頃のアプリ市場を知っていますが、当時はろくなアプリが揃っていませんでした。2008年頃に戻れるとしたら、この玉転しゲームレベルでも有料である程度売れたかもしれないですね。

誰か私を過去にワープさせてください。

★☆★ 次回の作業 ★☆★

とりあえず玉転しゲームをiPhone実機にインストール予定です。

簡単にインストール出来たならば、Unityで12万5千の立方体を描画(Unityのプロジェクト上で追加出来る?)して同様にiPhone実機にインストールし、自分でOpenGLESのコードを書いた場合のFPSとどのくらい差が出るか計測します。

パクリアプリ開発日記 9日目 Unityで玉転しゲーム前半

★☆★ 今回の作業 ★☆★

立方体を12万5千ほど描画するのに、以下パターン1と2でどのくらいFPSに差が出るのか検証したいと思っています。

パターン1.自分でOpenGLESのコードをバリバリ書いた場合
パターン2.Unityで描画した場合

パターン1はすでに実装しましたが、パターン2を実現するために、まずはUnityの操作方法を学ばなければならないため、Unityの玉転しのチュートリアルを行いました。

https://github.com/unity3d-jp/FirstTutorial/wiki

0〜7の全8ページで、そのうち0〜3の4ページを消化しました。

得てしてこういうツールは定型のことを行うのが素早く出来る代わりに自由度/柔軟性を失うものと思っていましたが、スクリプトを要所要所で書けば何でも出来そうで良い感じですね。

これでアプリ起動速度が遅くならず、かつFPSが出れば良いのですが・・・

★☆★ 次回の作業 ★☆★

玉転しのチュートリアルを完成する。