LIGHT11スマートフォン用の表示で見るLIGHT112018-05-25モバイルにおけるテクスチャ圧縮の概要とサイズが2のべき乗じゃないとダメな理由Rendering意外とまとまっていないテクスチャ圧縮の概要です。いろんな職種の人がちゃんと知ってるべきだけど意外と伝わらなかったりするのでまとめてみます。テクスチャの圧縮とはテクスチャはピクセルの集まりで、1ピクセルは1色です。1ピクセルには1つの色の情報が格納されています。1つの色の情報は「RGBAの値がそれぞれどの程度か」で表されます。RとAが最大値でGとBがゼロだったら赤いピクセルになります。無圧縮のテクスチャの場合、この色情報をピクセルの個数分持つことになります。これはたとえば100×100ピクセルのテクスチャであれば10000個の色情報を持つことになるので、サイズが大きくなることは容易に想像できます。この情報量を少なくするための仕組みが圧縮です。テクスチャの圧縮形式には様々な種類がありますが、一般的によく使われるものにgifとかjpegといったものがあります。具体的な圧縮のアルゴリズムは圧縮形式により異なりますが、わかりやすい例があったので紹介します。画像には数ピクセル同じ色が並んだ領域がよくみられる。そこでピクセル単位に色情報を並べて表現する代わりに、「n個の赤のピクセル」という形で符号化できる。いう情報よりも「赤×5・緑」という情報を持ったほうがデータ量が少なくなるということですね。GPUとテクスチャフォーマットそれなら自由に圧縮フォーマットを選んでいいのかというと、そういうわけにはいきません。前節で書いたように、圧縮というのは決まった法則に基づいて行われます。いうことは、圧縮されたテクスチャを使う側がこの法則を知らなければ使えません。テクスチャを扱うのはGPUであるため、GPUが解読できるフォーマットでないといけません。ES3.0以降のみ)というわけです。techblog.kayac.comもし対応していないフォーマットのテクスチャを使おうとすると、RGBA32という無圧縮の状態に変換され、メモリ負荷が高くなり圧縮している意味が全くなくなってしまいます。slack-redir.netサイズが2のべき乗でなければならない理由テクスチャサイズは2のべき乗でないといけないというのは常識的なところですが、これは単純にDirectXやOpenGLがそのサイズしか扱えないためです。内部的には結局2のべき乗で扱うので最初からそのように作ったほうが無駄がないということのようです。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。Blur(渦巻ブラー)のポストエフェクトを実装する月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。