RAGE virtual textures can be used to store and render both high detail and unique textures. However, due to storage space limitations of DVDs and for improved rendering performance, RAGE stores average detail - unique textures, as opposed to storing higher detail - repeating or tiling textures. While higher detail textures are obviously nice, it is unique textures that allow RAGE to achieve the look and rendering performance that could not be achieved before.
Even though the average texel density is not lower than in many other games, there are areas that are perceived as blurrier. Other games may use additional techniques to enhance the perceived texture detail. Games that are rendered from the third person perspective simply make sure the view point can never get too close to textured surfaces such that no additional texture detail is needed. Other games may use detail textures. A detail texture is a small texture with high frequency data that can be easily tiled many times over many surfaces. Detail textures are blended over regular textures to fake more detail than is actually there. Not only are detail textures a form of manual / artist driven texture compression, detail textures also have several limitations and disadvantages such as limited variety, and run-time costs.
Instead of using manually created and applied detail textures, the texture detail on rendered surfaces can also be programmatically enhanced. Normally the texture hardware uses bilinear filtering for texture magnification during rendering. This filter is implemented in graphics hardware and is very fast. However, bilinear filtering tends to produce interpolation artifacts such as blurring and edge halos. More advanced upsampling filters and texture enhancement algorithms can be implemented in a fragment program. However, programmatic upsampling and enhancement of texture data in a fragment program can significantly reduce the rendering performance when an advanced upsampling algorithm is used.
Virtual textures make it possible to upsample and enhance existing texture data on the CPU without an increase in the per fragment rendering cost. The texture upsampling can be implemented as a natural extension of the virtual texture transcode pipeline where a non-existing texture page from a finer mip level can be generated from a coarser parent page. As opposed to upsampling the texture data for every rendered fragment, the cost is amortized by only upsampling and enhancing texture data once, as the view approaches a surface. Enhancing virtual texture data on the CPU does require a slight increase in video memory usage to store a larger virtual texture page table that allows the fragment program to perform the addressing necessary to find the upsampled texture data. A larger page table texture could affect the rendering performance but this has not been observed in practice because page table lookups tend to have good locality.
It is important to note that the programmatically upsampled and enhanced texture data will only become visible when a surface is close enough to where the texture data needs to be magnified. Textures that are displayed with a 1:1 mapping to onscreen pixels, or smaller, are left unchanged. In other words, the original source art is left untouched and the original art will not be undesirably transformed or mangled.
To upsample and enhance texture data, RAGE uses bicubic upsampling with adaptive sharpening and luma grain. Bicubic upsampling is used because it produces noticeably better quality than bilinear upsampling. Ideally a "sinc" filter is used for upsampling texture data. However, even with an appropriate windowing function and a limited footprint the "sinc" filters are performance prohibitive while the quality improvement is marginal.
The crispness of textures can be significantly improved by applying a reasonable amount of luma sharpening when upsampling the texture data. An adaptive sharpening algorithm is used for this purpose. In combination with the bicubic upsampling the sharpening can recover fine texture detail and even make otherwise blurry text legible.
The perception of distance to a magnified texture can be significantly improved by adding grain noise. By adding a fixed amount of grain noise across the texture, the noise will be relatively more significant in dark texture areas. This helps to cover up compression artifacts and blurring in dark areas where such artifacts are usually most noticeable.
On http://www.rage.com/detailedtextures/ you will find various examples of scenes with and without programmatically enhanced texture data. By moving the mouse cursor over an image you can see the same scene with the programmatically upsampled and enhanced textures. By moving the mouse outside an image you can see the original textures again.