Jawed said:
It's arguable, for example, that Xenos's two-pass tessellation functionality is a bit of a hack (since it requires data be written to memory and then re-read shortly afterwards). A one-pass Cell-implemented tessellation algorithm could work more efficiently. Who knows, eh?
I wouldn't consider that one-pass either, because you'd have to take the HOS geometry, load it into the SPE, generate tesselated meshes, write that out to memory, then load into RSX and process it like any other bit of geometry. Even if you could send it from the SPE directly to RSX, it'd just as well defeat the main purpose of displacement mapping, which is to 'compress' geometry. Unless you'd also do the skinning on the SPE as well, but that'd be complicated, and you'd still have to transform a lot of the geometry on the RSX.
Ideally, displacement should work like this:
- apply deformations like skinning, morphing etc.
- transform geometry into screen space
- occlusion and backface culling, hidden surface removal whatever etc.
(these might be in a different order, I'm no coder... and PRMan also performs shading before hidden surface removal because displacement could move unseen vertices as well)
- perform view-dependent tesselation and then displacement
- perform shading and rasterization
So the GPU should do as much as possible with the pre-tesselation low-res geometry, including moving it around on its external buses. This is what would allow rendering a few orders of magnitude more detail. Once you tesselate in the CPU, you'll be limited by the external bus of the GPU, which will be the case on both the X360 and PS3 as it seems. Then again this whole approach would require a radically different hardware pipeline that could deal with a sudden increase of vertex data through the rendering process... It'd probably have to resort to bucket (tile) rendering for example.
edit: I also have to add that the quality of the displacement is heavily dependent on the number of vertices; it could look very ugly on meshes under ~50000 triangles.
Still, even the foreseeable implementations of displacement could add a lot of silhouette detail to nextgen game geometry. It should also be used with paralax mapping on all the surface that don't have visible edges to keep an efficient geometry load, which means even more work for developers and artists; so don't expect a wide use of it before second or even third generation games...