テクスチャの重さの正体|解像度とGPUの都合

Blender

ゲームやVRC向けなどのモデルの場合、テクスチャの容量もかなり気になりますよね。

なるべく低解像度のテクスチャで、うまくテクスチャリングできればいいのですが、なかなか難しいのも事実です。

でも、なんで高解像度のテクスチャを使うと重たくなるのかというのは、あまり詳しく語られることがないかもしれません。

今回の記事では、テクスチャはなぜ重たくなるのかに焦点を当てたいと思います。

テクスチャはなぜ正方形なのか?

テクスチャって大抵の場合、正方形になっていますよね?

もちろん正方形以外のテクスチャも使用はできますが、ゲーム用途などの場合は確実に正方形テクスチャが使われることになります。

また、解像度も中途半端と言うか、1024とか2048とか、ちょっと端数がある変な解像度ですよね?

ちょっきり1000とか2000じゃダメなの?と疑問に思ったことのある人も多いかもしれません。

正方形と端数のある解像度である理由は、

  • GPUでテクスチャを扱うのに都合がいいから 

というのが理由になります。

GPUは画面を描画するために膨大な計算を高速で行っています。

そのため、データ側(この場合はテクスチャの形式等)で効率よく扱える形になっている方が、GPUの負担を減らすことができ、結果的に描画を高速にできます。

GPUはコンピューターの一部なので、2進数を解釈するのが上手です。そのため、テクスチャの解像度も2の乗数で表せるほうがGPUにとっては扱いやすいのです。

ですので、

2,4,8,16,32,64,128,256,512,1024,2048,4096,8192

という端数のある解像度になっています。これらはすべて2の乗数です。

2の乗数になっているなら、1024×2048などのテクスチャサイズも扱うことはできます。

ただ、ゲーム用途では、ミップマップが必要になります。

ミップマップとは距離などに応じて、テクスチャの解像度を変えるために使われる自動生成の低解像テクスチャですが、これを生成するにはテクスチャが正方形の方が効率が良いです。

長方形テクスチャの場合、ミップマップを自動生成することが難しい場合もあるため、手動で作成したりするなど手間が発生します。

また互換性などの問題からも、長方形テクスチャを積極的に扱う理由があまりなく、特殊な場合をのぞいて使われることは少ないです。

画像枚数も負荷になる

また画像数が多いとオーバヘッドと呼ばれる負荷が発生します。

画像にはヘッダーという情報部分があり、そこには画像形式などが書き込まれています。ゲームエンジンなどはヘッダーを読み込むことでどのような画像なのかを把握します。

ヘッダーは画像ごとに存在するため、

  • 画像枚数が多いとヘッダーを大量に読み込む必要

が出てきます。一つ一つはデータとして小さいですが、数百数千のテクスチャを扱うとなると無視できない量になってきます。

そのため、できるだけ画像枚数を減らして、オーバヘッドを減らす工夫がされます。

ゲーム用のテクスチャでRGBチャンネルそれぞれに、PBRマップを格納するのはそういった事情のためです。

テクスチャの容量は4倍になる

上記のような事情から、テクスチャサイズはあまり自由にならないのです。

つまり、1024の上は2048にならざるを得ないんですね。

テクスチャに限りませんが、

  • 辺の長さが2倍になると面積は4倍

になります。

つまり1024のテクスチャを2048にするだけで、4倍容量が増えます。

実際には圧縮処理等の理由から単純計算で4倍になるわけではありませんが、大きさが変わると容量が非常に大きくなってしまうことにはかわりありません。

もし1024を4096にしたら…

  • なんと16倍!

になります。

テクスチャサイズを小刻みにできないので、1024でクオリティを保てないなら、4倍の容量になることを覚悟して2048にするしかないというのが現状なのです。

ですので、より低解像度のテクスチャでクオリティを確保できることは、ゲームやVRCなどの場合、負荷と品質に直結することになるので、非常に重要な技術といえます。

昨今だと、オフラインゲームは4096や8192サイズのテクスチャが使われることも珍しくありませんが、マルチオンラインゲームでは依然、比較的低解像度ぎみのテクスチャが使われるのは、負荷に対するテクスチャサイズ理由の比重が高いからなのです。 

テクスチャサイズ

今では、環境によってかなり高解像度のテクスチャを使うこともあれば、512サイズなど低解像度のテクスチャを使わざるを得ない環境もあったりします。

そういう意味では、古の技術もまだまだ健在で、UVレイアウトとの連携で1ピクセルで塗りつぶしを行えるようにアイランドを配置するテクニックや、グラデーションを掛けるテクニックなども現役で使われていたりします。

もちろんUVアイランドの重ねや、左右対称にすることでテクスチャ領域を確保したり等もマルチオンラインゲームなどでは使われています。

クオリティと負荷の兼ね合いからテクスチャサイズは決定されていくことになりますが、どちらも対応できるようにテクスチャを作れるとよいですよね。

まとめ

意外にもテクスチャは、互換性、コンピュータの仕組み、ゲームの仕組みなどの理由から、あまり自由な解像度を使えないのが実情なのです。

小刻みに解像度を選べないからこそ、テクスチャデータはコントロールしないと、容量が非常に膨れ上がってしまうデータでもあるのです。

ゲームなどではダウンロードの多くがテクスチャデータで占められているのが実情です。

モデルにもポリゴン数の制限などはありますが、テクスチャも多くの制約の中で作らなければならないデータの一つです。

タイトルとURLをコピーしました