スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Atlas化の弊害

NGUIとか普通の3Dの描画の部分でも、モバイル機におけるテクスチャのアトラス化は大きな利益を伴う。基本的に昨今の描画はレンダーステートの変更によるコストはかなり大きい。テクスチャの変更、シェーダの変更、マテリアルの変更などだ。コレは描画が途切れることを意味する。描画のコールは、

「押すなよ。押すなよ。絶対押すなよ!」
 ↓
ドボーン

という流れだ。この押すなよという前フリがないといけないわけだ。この前フリが基本長い。なので一人ずつやるよりは100人くらいでまとめて前フリしてドボーンしたほうが早い。

逆に分かりづらいな。

で、同じようなマテリアルだったらテクスチャをまとめてしまえば、まとめて描画できるから速くなるという寸法だ。普通に描画されている分には問題ない。基本的に問題になってくるのはミップマップが主だったところだろう。

ミップマップはテクスチャの実際のサイズよりも小さく描画されるようなときに、少しの差異でUVが一気に変わってしまうために色がじらつく。コレを抑制するために÷2、÷2、÷2、と大体2x2くらいのサイズになるまで(1x1でも良いかも知れないが、テクスチャ圧縮フォーマットの関連で最低のサイズが1x1じゃなかったりもする)のテクスチャを同時に持っておくような手法だ。これをスクリーン変換されたときに実際のテクスチャサイズと見比べて最適なテクスチャを選択するという手法だ。さて、コレにどんな問題があるのだろう。それは、アトラス化をすることにより元のテクスチャをミップマップしたときとアトラス化した後でミップマップしたときで持つミップマップのレベルが変わってしまうことによるものだ。分かりやすく例を出すと

8x8のテクスチャでミップマップを生成すると8,4,2と3段階。

これを16枚を組み合わせてひとつのテクスチャにしたとする。すると

32,16,8,4,2の5段階となる。つまり最低のサイズが8x8の場合の4分の1になる。

なのでアトラス白と黒一面のテクスチャをアトラス化した場合にアトラス化する前はミップマップを使用しても白は白、黒は黒になる。だがテクスチャをまとめた場合にはそうはならない。どっちに転ぶか分からなくなる。コレは2Dの部分のテクスチャの場合には顕著に現れることになるので注意が必要だ。

解決策としては、ミップマップを生成しないかミップマップバイアスである一定のレベルのテクスチャを選択されないようにする場合とがある。
関連記事

コメントの投稿

非公開コメント

プロフィール

masanotooru

Author:masanotooru
雪国で働くプログラマでしたが、会社を辞めて関西にいます。
プログラムの話もしますが漫画が好きなので漫画の話をします。
バイクを買ったので、そっちの話も増えました。
最近はUnityばかりなのでそっちメイン。

Google Adsense
検索フォーム
カテゴリ
最新コメント
メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。