PVRTC: Difference between revisions
Simon Fenney (talk | contribs) →Naming confusion: missing definite article |
Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5) (Pancho507 - 22019 |
||
(15 intermediate revisions by 11 users not shown) | |||
Line 1: | Line 1: | ||
'''PVRTC''' and PVRTC2 are a family of lossy, fixed-rate [[texture compression]] formats used in [[PowerVR]]'s MBX (PVRTC only), SGX and Rogue technologies. The PVRTC algorithm is documented in Simon Fenney's paper "[http://web.onetel.net.uk/~simonnihal/assorted3d/fenney03texcomp.pdf Texture Compression using Low-Frequency Signal Modulation]" that was presented at [http://www.graphicshardware.org/previous/www_2003/ Graphics Hardware 2003]. |
'''PVRTC''' (PowerVR Texture Compression) and PVRTC2 are a family of lossy, fixed-rate [[texture compression]] formats used in [[PowerVR]]'s MBX (PVRTC only), SGX and Rogue technologies. The PVRTC algorithm is documented in Simon Fenney's paper "[http://web.onetel.net.uk/~simonnihal/assorted3d/fenney03texcomp.pdf Texture Compression using Low-Frequency Signal Modulation]" that was presented at [http://www.graphicshardware.org/previous/www_2003/ Graphics Hardware 2003]. |
||
These differ from block-based texture formats such as [[S3TC]] and [[Ericsson Texture Compression]] (ETC) in that the compressed image is represented by two lower resolution images which are bilinearly upscaled and then blended according to low precision, per-pixel weights. They also differ in that they support [[ARGB]] data in both 4-bpp and 2-bpp modes. |
These differ from block-based texture formats such as [[S3TC]] and [[Ericsson Texture Compression]] (ETC) in that the compressed image is represented by two lower resolution images which are bilinearly upscaled and then blended according to low precision, per-pixel weights. They also differ in that they support [[ARGB]] data in both 4-bpp and 2-bpp modes. |
||
PVRTC is the compressed texture format used in all generations of the [[iPhone]], [[iPod Touch]], and [[iPad]]. It is also supported<ref>http://withimagination.imgtec.com/wp-content/uploads/2013/03/Why_use_PVRTC |
PVRTC is the compressed texture format used in the [[Nokia N9]] and all generations of the [[iPhone]], [[iPod Touch]], and [[iPad]]. It is also supported<ref>http://withimagination.imgtec.com/wp-content/uploads/2013/03/Why_use_PVRTC.png {{Bare URL image|date=March 2022}}</ref> in certain Android devices, that use PowerVR GPUs. |
||
==Data structure== |
==Data structure== |
||
In both PVRTC and PVRTC2, texture data is stored in blocks (but note that the decoding of any 2x2 set of texels requires access to 4 of these blocks.) A data block always occupies 64 bits (8 bytes) of storage/memory space and thus, in 4 |
In both PVRTC and PVRTC2, texture data is stored in blocks (but note that the decoding of any 2x2 set of texels requires access to 4 of these blocks.) A data block always occupies 64 bits (8 bytes) of storage/memory space and thus, in 4-bit mode (4bpp), there will be one block for each 4×4 pixels. In 2-bit mode (2-bpp), there will be one block for every 8×4 pixels. |
||
For example, a 1024×1024 4-bpp PVRTC texture would have |
For example, a 1024×1024 4-bpp PVRTC texture would have 65,536 blocks and take 524,288 bytes of storage/memory space. In some hardware implementations, the blocks are arranged in a variant of [[Morton order]]. |
||
With PVRTC there are six different variables<ref>http://withimagination.imgtec.com/wp-content/uploads/2013/02/03_PVRTC_data_word.png</ref> stored |
With PVRTC there are six different variables<ref>http://withimagination.imgtec.com/wp-content/uploads/2013/02/03_PVRTC_data_word.png {{Bare URL image|date=March 2022}}</ref> stored in each block: Modulation data (32 bits), punch-through alpha flag (1 bit), color A (15 bits), color A opaque flag (1 bit), color B (14 bits) and color B opaque flag (1 bit). |
||
With PVRTC2 there are six different variables<ref>http://withimagination.imgtec.com/wp-content/uploads/2013/01/A-PVRTC2-data-word.jpg</ref> stored to one block: Modulation data (32 bits), modulation flag (1 bit), color B (14 bits), hard transition flag (1 bit), color A (15 bits) and opacity flag (1 bit). |
With PVRTC2 there are six different variables<ref>http://withimagination.imgtec.com/wp-content/uploads/2013/01/A-PVRTC2-data-word.jpg {{Bare URL image|date=March 2022}}</ref> stored to one block: Modulation data (32 bits), modulation flag (1 bit), color B (14 bits), hard transition flag (1 bit), color A (15 bits) and opacity flag (1 bit). |
||
Although in PVRTC the opacity flags can be set independently for the A & B colours, in PVRTC2, Color A and Color B must both be in same format (i.e. either RGB or RGBA). |
Although in PVRTC the opacity flags can be set independently for the A & B colours, in PVRTC2, Color A and Color B must both be in same format (i.e. either both RGB or both RGBA). |
||
== |
==See also== |
||
*[[Texture compression]] |
|||
There isn't any max size limit via format itself, but GPU's max texture size limit does apply to PVRTC textures. For this reason, on a mobile device, a single PVRTC texture may be capped to 4096x4096 resolution. |
|||
*[[Adaptive Scalable Texture Compression|Adaptive Scalable Texture Compression (ASTC)]] |
|||
Since most PVRTC and PVRTC2 texture creation tools are targeting iPhones, iPads and iPod touches, additional limitations<ref>https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TextureTool/TextureTool.html</ref> set by Apple apply: |
|||
* Height and width must be a power of 2. |
|||
* Height and width must be at least 8. |
|||
* Must be square (height==width) |
|||
==Naming confusion== |
|||
Some texture tools (e.g. '''TexturePacker''') use the abbreviation PVRTC2 for PVRTC 2-bpp.<ref>https://www.codeandweb.com/texturepacker/documentation#texture</ref> This naturally causes confusion since people cannot know for sure if term PVRTC2 means PVRTC2 texture or PVRTC 2-bpp texture. |
|||
==References== |
==References== |
||
{{Reflist}} |
{{Reflist}} |
||
*[http://web.onetel.net.uk/~simonnihal/3d.html Simon Fenney's 3D Graphics Pages] |
*[http://web.onetel.net.uk/~simonnihal/3d.html Simon Fenney's 3D Graphics Pages] |
||
*[http://blog.imgtec.com/powervr/pvrtc2-taking-texture-compression-to-a-new-dimension Taking texture compression to a new dimension with PVRTC2] |
*[http://blog.imgtec.com/powervr/pvrtc2-taking-texture-compression-to-a-new-dimension Taking texture compression to a new dimension with PVRTC2] {{Webarchive|url=https://web.archive.org/web/20140429184351/http://blog.imgtec.com/powervr/pvrtc2-taking-texture-compression-to-a-new-dimension |date=2014-04-29 }} |
||
*[http://blog.imgtec.com/powervr/pvrtc-the-most-efficient-texture-compression-standard-for-the-mobile-graphics-world PVRTC: the most efficient texture compression standard for the mobile graphics world] |
*[http://blog.imgtec.com/powervr/pvrtc-the-most-efficient-texture-compression-standard-for-the-mobile-graphics-world PVRTC: the most efficient texture compression standard for the mobile graphics world] {{Webarchive|url=https://web.archive.org/web/20140703154255/http://blog.imgtec.com/powervr/pvrtc-the-most-efficient-texture-compression-standard-for-the-mobile-graphics-world |date=2014-07-03 }} |
||
[[Category:Texture compression]] |
[[Category:Texture compression]] |
||
{{compu-graphics-stub}} |
Latest revision as of 03:07, 10 December 2024
PVRTC (PowerVR Texture Compression) and PVRTC2 are a family of lossy, fixed-rate texture compression formats used in PowerVR's MBX (PVRTC only), SGX and Rogue technologies. The PVRTC algorithm is documented in Simon Fenney's paper "Texture Compression using Low-Frequency Signal Modulation" that was presented at Graphics Hardware 2003.
These differ from block-based texture formats such as S3TC and Ericsson Texture Compression (ETC) in that the compressed image is represented by two lower resolution images which are bilinearly upscaled and then blended according to low precision, per-pixel weights. They also differ in that they support ARGB data in both 4-bpp and 2-bpp modes.
PVRTC is the compressed texture format used in the Nokia N9 and all generations of the iPhone, iPod Touch, and iPad. It is also supported[1] in certain Android devices, that use PowerVR GPUs.
Data structure
[edit]In both PVRTC and PVRTC2, texture data is stored in blocks (but note that the decoding of any 2x2 set of texels requires access to 4 of these blocks.) A data block always occupies 64 bits (8 bytes) of storage/memory space and thus, in 4-bit mode (4bpp), there will be one block for each 4×4 pixels. In 2-bit mode (2-bpp), there will be one block for every 8×4 pixels.
For example, a 1024×1024 4-bpp PVRTC texture would have 65,536 blocks and take 524,288 bytes of storage/memory space. In some hardware implementations, the blocks are arranged in a variant of Morton order.
With PVRTC there are six different variables[2] stored in each block: Modulation data (32 bits), punch-through alpha flag (1 bit), color A (15 bits), color A opaque flag (1 bit), color B (14 bits) and color B opaque flag (1 bit).
With PVRTC2 there are six different variables[3] stored to one block: Modulation data (32 bits), modulation flag (1 bit), color B (14 bits), hard transition flag (1 bit), color A (15 bits) and opacity flag (1 bit).
Although in PVRTC the opacity flags can be set independently for the A & B colours, in PVRTC2, Color A and Color B must both be in same format (i.e. either both RGB or both RGBA).
See also
[edit]References
[edit]- ^ http://withimagination.imgtec.com/wp-content/uploads/2013/03/Why_use_PVRTC.png [bare URL image file]
- ^ http://withimagination.imgtec.com/wp-content/uploads/2013/02/03_PVRTC_data_word.png [bare URL image file]
- ^ http://withimagination.imgtec.com/wp-content/uploads/2013/01/A-PVRTC2-data-word.jpg [bare URL image file]