テクスチャアトラス | Androidアプリ屋を目指して

Androidアプリ屋を目指して

Androidアプリ屋を目指して、日々精進ための開発記、兼、日記です
開発に関わることだけでなく、色々なことを記事にしたいと思います
アンドロイドアプリのカテゴリとしては、特にゲームに興味があり

そろそろ、梅雨の時期がくるんかなー

はやく夏こないかなー、という思いが日に日に強くなっているトシたんです。


本日は、ゲーム開発に関する知識でなるほどなーと思った技術的な内容を少しアウトプットしてみたいと思います。

ただし、具体的なコードは書かないので、抽象的な話になると思います。

テクスチャアトラスについてです。



ゲームプログラミングをするときは、UIをはじめあらゆるものを画像で表示します。

画像はテクスチャといったものに読み込んで管理します。


1つ1つの部品ごとに1つの画像を用意する方法が1番最初に思いつきます。

しかし、OpenGLさんにとってはこの方法は少し効率が悪い方法です。


1つ1つの部品ごとに1つの画像を用意するのではなく、すべての部品を1つの画像にまとめて切り貼り方法が効率的です。

すべての部品を1つの画像にまとめたものをテクスチャアトラスといいます。

アトラス(Atlas)には「地図帳」といった意味があるようです。

具体的には次のようなものです。




OpenGLを使用している場合に上記のような画像が有利な点は次のようになります。
・画像を切替える必要がない
・行列演算の回数が少なくて済む

OpenGLさんがテクスチャを描画する際には、描画する画像を教えておく必要があります。
1つ1つ画像が分割されている場合には、毎回毎回、どの画像を描画するか教えなくてはなりません。

また、画像を管理するテクスチャにはテクスチャ座標なるものがあります。
1つ1つの画像に分割された部品たちを描画する場合、画像を教えるだけでなく、テクスチャ座標もそろたりすることが必要になってきます。

しかし、テクスチャアトラスの場合は、画像の指定は1度で住みますし、テキスチャ座標を整えるなんてことも1度で済みます。
ただし、テクスチャアトラスのどこを描画するかといったことが必要になります。


あまり、納得できる説明になっているかどうかわかりませんが、とにかく、小さな備品をたくさん描画する必要がある場合には、性能的にはテクスチャアトラスのほうが有利です。


さて、ここで問題になるのはテクスチャアトラスを作るのが面倒というのと、いちいち、どこを描画するか教えるのが面倒といったことです。

実はこの問題を解消するためのツールや、フレームワークの機能があったりします。
テクスチャアトラスを作るためのツールは「Texture Packer」というものです。
複数の画像をまとめて、テクスチャアトラスを作ってくれるツールになります。

そして、画像をまとめた際には、もともとの個別のファイルに分割するための定義ファイルを出力してくれます。
自分が現在使用しているフレームワークの「libGDX」には、この定義ファイルを読み込んで、テクスチャアトラスをあたかも、個別の画像の集合のように扱うことのできるクラス「TextureAtlas」クラスがあります(まんまですね)。
また、AndroidやiPhone関連のゲームフレームワークはほとんど「Texture Packer」をサポートしているみたいですね。

上記のツールと、それに連携が可能なフレームワークを使用することで、作業を楽にできるというわけです。
第1作目はテクスチャアトラスを自作しようと思っているため、まだ手に入れていませんがそのうち使用してみようと考えています。

ゲームプログラムには、普段プログラムに関連する仕事をしていても、あまり目にしない独特の知識、技術、ツールが多い気がします。
その中で、自分が学んだものをこれからも少しずつ紹介していけたらと思います。