Last week I was searching for a good alternative for Radeon cards to use instead of vertex texturing for our terrain engine's DX9 renderer. I knew already about the Radeon R2VB functionality, but I never tried to use it before, so I thought it was just a dirty hack usable only for limited scenarios and limited amount of cards. When I found it was usable on all DX9 Radeons starting from the old R300 (9500+) and I figured out in my own testing that I was able to do many of the same algorithms planned for our DX10 renderer with similar efficiency on DX9 using R2VB, I really wondered why this feature has not been discussed, marketed and used more.
Many of the games sold currently and especially during the next years are ported to DX9 from DX10 or XBox 360. Using a algorithm suitable for R2VB is the most optimal way to implement many new rendering techniques seen on these platforms. This makes R2VB more useful now than it ever was (and this is the reason I also started to use it now).
It's notable that vertex texturing capability is very limited in DX9 class cards. All DX9 Geforces support only R32F and ARGB32F texture formats, and DX9 Radeons do not support vertex texturing at all. Also DX9 cards have filtering and performance issues with vertex texturing. Saving large structures (such as height map) in 32 bit floating point formats consumes huge amount of graphics memory. With R2VB the developer can use any texture format supported by the pixel shader (including compressed formats). In our terrain renderer we can also quickly calculate normal vectors for the heightmap on fly and this allows us to only save the height data (I use fetch4 to get all the data needed for normal vector calculation with just one tex instruction). My results for porting our terrain rendering system from vertex texturing to R2VB has been very positive. It runs faster and uses considerably amount less memory than the vertex texturing based alternative. I now also plan to port our DX10 particle system to DX9 using R2VB (all animation in shaders, particle mesh creation in shaders, etc).
I know at least that Valve's Source engine uses R2VB, but are there any other major engines using it for their DX9 renderer?
Many of the games sold currently and especially during the next years are ported to DX9 from DX10 or XBox 360. Using a algorithm suitable for R2VB is the most optimal way to implement many new rendering techniques seen on these platforms. This makes R2VB more useful now than it ever was (and this is the reason I also started to use it now).
It's notable that vertex texturing capability is very limited in DX9 class cards. All DX9 Geforces support only R32F and ARGB32F texture formats, and DX9 Radeons do not support vertex texturing at all. Also DX9 cards have filtering and performance issues with vertex texturing. Saving large structures (such as height map) in 32 bit floating point formats consumes huge amount of graphics memory. With R2VB the developer can use any texture format supported by the pixel shader (including compressed formats). In our terrain renderer we can also quickly calculate normal vectors for the heightmap on fly and this allows us to only save the height data (I use fetch4 to get all the data needed for normal vector calculation with just one tex instruction). My results for porting our terrain rendering system from vertex texturing to R2VB has been very positive. It runs faster and uses considerably amount less memory than the vertex texturing based alternative. I now also plan to port our DX10 particle system to DX9 using R2VB (all animation in shaders, particle mesh creation in shaders, etc).
I know at least that Valve's Source engine uses R2VB, but are there any other major engines using it for their DX9 renderer?