A compressão de texturas é uma situação que merece a atenção uma vez que estas são das situações mais pesadas a nível de conteúdo. E nesse sentido uma boa compressão não só permite melhores leituras, como menor espaço em disco.
Quando a Sony anunciou o Kraken, um engenheiro da Microsoft veio referir que, apesar de a Microsoft utilizar o Zlib, usava o seu compressor proprietário, o BCpack, para compressão de texturas, e que, quando o Kraken alcançava uma média de 20 a 30% de compressão, o BCpack poderia chegar aos 50% ou mais.
E desta forma, sendo as texturas o conteúdo maioritário, a Xbox série X teria vantagens na compressão.
Esta situação, que não era confirmada uma vez que nunca tinha sido revelado oficialmente o que o Kraken da PS5 suportava, ou que alterações teria tido, mas era certamente um ponto a favor da Xbox, que se agravava pelo facto de a PS5 já ter menor espaço em disco que a consola da Microsoft.
Mas agora a RAD Game Tools veio anunciar o seu novo Oddle Textures. Um compressor especializado e basicamente sem perdas, que trabalha exactamente no mesmo tipo de texturas BCn que o compressor da Microsoft (este tipo de texturas é optimizado para GPUs).
Vamos ver o que a RAD refere sobre ele:
O Oodle Texture é uma nova tecnologia que desenvolvemos na RAD Game Tools e que promete dramaticamente reduzir o tamanho dos jogos, reduzir o tamanho do que tem de ser descarregado, do que é guardado no disco, aumentando as velocidades de leitura e muito mais..
O Oodle Texture cria texturas optimizadas para o GPU do tipo BC1-7 que são muito mais compressíveis, de forma que quando preparadas para armazenamento e distribuição elas são muito menores. Até 2x mais pequenas. Muitos jogos tem o seu conteúdo neste formato, o que leva a um grande impacto no tamanho do jogo comprimido, que pode ir desde os 10 aos 50% a menos dependendo do conteúdo e de como o Oodle Textures é usado.
Um conteúdo mais pequeno tambem carrega mais rápido, pelo que ao melhorarmos o racio de compressão em 2x podemos efectivamente melhorar as velocidades de E/S (I/O) tambem em 2x. Isto é possível quando não há gargalos na descompressão, como quando se usa o super rápido descompressor Oodle Kraken, ou um descompressor hardware.
Na RAD já tinhamos desenvolvido o Oold Kraken, parte da familia de compressores de data Oodle, que fornece rácios de descompressão ultra rápidos, o que torna o Kraken optimo para cargas de dados quando se precisa de elevada velocidade. Mas o Kraken é genérico, funciona com todo o tipo de dados, e não tenta encontrar optimizações específicas para determinados tipos de dados. O Oodle Texture é capaz de diminuir enormemente o tamanho de um ficheiro comprimido pelo Kraken ao preparar as texturas de uma forma que as torna mais compressíveis.
Basicamente o Oodle Textures não precisa de existir nas consolas. Basta o suporte a um membro da família Oodle, como o Zlib ou o Kraken, para que ele funcione, uma vez que o que ele faz é preparar as texturas para que elas se mantenham optimizadas para o GPU, mas ao mesmo tempo mais compressível. E tudo com perdas de qualidade basicamente insignificantes.
Whee, Oodle Texture is (finally) out! It’s good.
— Fabian Giesen (@rygorous) June 16, 2020
Como exemplo, a RAD cita o seguinte caso que podem confirmar aqui:
Bloco de texturas comprimidas com um misto de formatos desde o BC1 ao BC7 – Tamanho: 127 MB
O mesmo pacote com compressão com o Zip/Zlib/deflate – 78 MB – Compressão de 38, 58%
O mesmo pacote com compressão Kraken – 70 MB – Compressão de 44,8%
Compressão com texturas preparadas pelo Oodle Textures pelo Kraken – 40 MB – Compressão de 68,5%
Compressão adicional no Kraken – 23,7%
Eis aqui uma textura BC7 comprimida com lambda 0, o normal do Kraken (onde se conseguiu 3,42% de compressão), e com Lambda 40, o máximo do Kraken após o Oodle Textures executado (onde se conseguiu 44.52% de compressão).
Lambda 0
Lambda 40
Como se vê, há uma enorme compressão, mas a perda de qualidade não é perceptível.
Agora a questão: Será que, tendo esta ferramenta sido anunciada apenas ontem, Mark Cerny quando referiu que a PS5 alcançava 8 a 9 GB de média em dados comprimidos, já tomou estes valores em conta?
A situação é aqui claramente bem diferente do caso da Microsoft, uma vez que o BCpack existe desde o DirectX 10, passando pelo DirectX 11 e DirectX 12, tendo agora sido implementada a sua descompressão por hardware na Xbox série X.
E sendo essa uma ferramenta Microsoft, com o hardware pensado para ela, torna-se coerente pensar que os valores anunciados de compressão já a tomam em conta.
Já na PS5, como referido a ferramenta só foi tornada pública ontem, pelo que a questão é coerente. E alguém a colocou!
E a realidade é que os rácios de compressão do Kraken, de acordo com os números oficiais, podem agora passar o 2:1 (50%+), quando antes eram de apenas cerca de 1.056 (1%).
non-RDO BC7 :
Kraken : 1,048,724 -> 990,347 = 7.555 bpb = 1.059 to 1
RDO lambda=40 BC7 :
Kraken : 1,048,724 -> 509,639 = 3.888 bpb = 2.058 to 1
E se tal fosse verdade, a PS5 teria um aumento incrível na performance do seu SSD, que passaria agora a ler algo entre os 11.5 e os 13 GB/s.
Mas será que isso é assim?
Não sabemos, mas há mais quem acredite que sim:
The Sony test sets I know of (that were used to eval the Kraken HW during development) were all assets from (now several year old) PS4 games. So that figure is probably on non-Oodle Texture data.
— Fabian Giesen (@rygorous) June 17, 2020