2014年6月9日月曜日

今更ですが、OpenGL ESは1.1と2.0、どちらを選ぶべき?

スマホ・タブレット向けゲームアプリを本気で制作しようとすると、OpenGL ESでの描画は避けて通れませんね。
で、実際にサンプルでも動かそうとする場合に、1.1と2.0では処理の仕方/書き方が少々違っている。という所までは簡単にに調べが付きます。
では、どちらで開発すれば良いのでしょか?

結論から言えば、現状では未だOpenGL ES 1.1 を使うしかないと考えます。

ではどう違うのでしょうか?


●OpenGL ES 1.1
・GPUの負荷が軽いので、ごく一部の画面の更新速度が元から30fpsの端末を除けば、60fps以上を出せる。
Android2.2~2.3の頃の端末でも、比較的動作が安定している。
・シェーダーが使えないのは致し方ないが、レンダリング先をスクリーン以外に行うなどの便利機能が無くて痛い。
・仕様が枯れているので、ネットで情報を集めやすい。

●OpenGL ES 2.0
・シェーダを駆使すれば、PCゲー並みの描画が実現可能。でもGPUの負荷が重い。
・たとえアプリを軽く作っても、OpenGL側で30fpsが頭打ちになってしまっている。
・Android2.2~2.3の頃の端末では不安定な挙動が散見されているらしい。
(↑これは聞いた話なので未確認です)
・シェーダプログラミング自体が開発の負荷になるし、そもそも書籍でもネットでも良い情報が得られにくい。


GLES2.0はシェーダに触れなくても30fps以下しか出ません。これは動きのあるゲームでは致命的です。
ゲームの歴史的に30fps以下のハードでは、ソフトウェアが良い評価を得る事が非常に難しくなります。
まぁゲームの操作性は気にしない。フォトリアルまっしぐらな方はGLES2.0以降でも良いですし、今後ハード(GPU)の性能自体が数倍に跳ね上がれば、GLES1.1はレガシーになり消えていくのでしょう。

2014年の現在、ファミコン程度の操作性を実現する為にはOpenGL ES1.1しか選択の余地がない。という事でした。



2014/07/16 更新 OpenGL ES 2.0以降だと30fpsが頭打ちと書きましたが、最新のGPUではそうでもない様です。 僕の情報が半年~一年遅れだったかもしれません。 ただし多くのユーザーの機種には、未だ重たいのが現状のようです。 GPUのパワーが上がっているのは確かですが、画面解像度もFullHDが当たり前になりつつあるので、その分相殺されています。 もう1~2年待たないと60fpsは辛そうだな、と僕は予想しています。

黄色くなったファミコンを真っ白に漂白する方法。の新技を発見しましたよ

新発見!(゚∀゚)アヒャ
…とか言う程の事でも無いんですが、巷の情報より良い方法を見つけました。
元々の方法は各自ググって調べてみてください。

■新しい方法
何の事はありません。プラ漂白でよく使われている「酸素系」漂白剤ではなく「塩素系」漂白剤を使います。
スーパーや薬局で安く売っているのでOKです。洗濯用でも台所用でも大差ないので、洗濯用の大入りボトルを買うと良いでしょう。僕は業務スーパーで買いました。

後は今までのやり方と一緒で、黄ばんだプラスチックを漂白剤につけながら日光(紫外線)に1~2週間ほどさらすだけです。100均で買える大きいタッパがなんとか使えますが、完全に密封できていないので液漏れに注意が必要です。
気になる方はガッチリ密封する保存容器を使って下さい。



左が塩素系で2週間ほったらかし、右が酸素系(濃縮タイプ)に10日間ほど漬け込みました。


裏はこんな感じです。

塩素系の方はよく分からずにそのまま放り込んだので、貼り付けてある「ファミリーコンピューター」のエンブレムとかの表面が溶けて消えてしまいました。
という訳で、ファミコン本体の場合は予めラベル関連を剥がす必要がありますね。

酸素系の漬け込み期間が少し短いのは、確認した時には既に漂白成分が飛んでしまっていたためです。これ以上は無意味だったので取り出しました。
塩素系は酸素系に比べて漂白のスタートダッシュが遅い様なのですが、しばらく天日に晒してもあまり効果が落ちませんので、長期間または他のプラ漂白に続けて利用できる点も有利ですね。
そうそう、塩素系は裏側も結構漂白されてる所も優れていました。

まぁお洗濯の時の使い分けと同じで、色柄がある場合は酸素系。真っ白にしちゃっていいのなら塩素系でOKかと思われます。