(本記事はUE4.22を用いて検証及び調査しております)
Texture Streaming Pool Over Budgetの誤解
Textureが大量にあるシーンなどで、"Texture Streaming Pool Over XXX MiB Budget"という警告が画面左上に出たのを見たことがある人も多いと思います。この警告とその値は、「テクスチャがPool Sizeを越えてメモリを確保していて、そのメモリ量を表示している」という意味ではありません。 この警告は、「ストリーマが本来ほしいと思っているメモリ量がストリーミング用のPool Sizeをオーバーしているよ。」という警告です。 実際にテクスチャストリーマは、足りないという警告を出しながらも実際はPool Sizeに収まる様にメモリを取っていることがほとんどです。
Required Pool と Wanted Mips
実際にストリーマがどれだけのメモリを使っているか確認する場合、stat streaming のWanted Mipsを見ると良いと思います。
上記の場合、Streaming Poolは300に設定されていますが、テクスチャストリーマが本来は必要とするMipであるRequired Poolは 438です。しかし、実際にストリーマが使用するテクスチャのメモリ量Wanted Mipsは300ギリギリまでしか取っていません。
そして、警告ではこの超過した、438-300 = 138 (貼った画像だと若干ずれてますが)表示されています。
ですので、この警告の意味するところは、メモリを越えて確保しているのではなく、メモリに収まる様に確保したらそれだけのMiB足りないからどこかのテクスチャボケてるよというものになると考えられます。
#まとめ
- Texture Streaming Pool Over Budgetという警告は、「プールサイズを越えたメモリを確保している」という警告ではない
-「ストリーマが必要とするテクスチャを読み込もうとするとこれだけメモリを越えちゃうよ」という警告 - 結果、どこかのテクスチャがボケている状態となっているはず
- ストリーマがほしいメモリは「Required Pool」、実際に読み込んでいるメモリは「Wanted Mips」をみよう (stat streamingより)
簡単にですがまとめさせていただきました。