Hi,
I am part of a group of students developing their final end of the course project. I am sitting on the art side of the fence but have a hinge to the technical and want to get into shader programming. I decided to look into parallax mapping and found out about something called "relaxed cone step mapping" (RCSM)(
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch18.html)
Now, I am just curious whether there there any games currently using relaxed cone step mapping and what the reasoning for and against it were? I wonder what impact this method could have on performance and visual quality and how to weigh these factors up against each other.
The reason I am asking this on the boards is because it (RCSM) seems like a reasonable fast approach and can look pretty nice (a demo of cone step mapping (not relaxed) can be attained here:
http://www.gamedev.net/topic/372739-cone-step-mapping-paper--demo-bummer-8/), however, the paper is now 6 years old (the paper was released in 2006) and yet I never heard about it until I was looking up on parallax mapping. This of course means nothing since I am still starting out in game development, so I would like to know what you guys think about it?
Replies
Lets look at a few things shall we?
-Fake depth
-Fake silhouette clipping
-Raycast directional shadows
-Show of your skills on making things look nice
So whats the problem?
-Depth breaks at certain angles
-Silhouette and internal depth aren't affected by most types of AA/FA
-Shadow stacks up in run-time pretty badly
-Needs alot of 'layers' to look good
-Even a simplified version is pretty heavy, and looks terrible
-Adds extra work for artists to make sure the player 'avoids' noticing all of these issue
If you plan on adding faked depth, do it with Tesselation, not hardcore shaders, since they eat up performance, without a proper LOD system, nor setup to manage in a way that easy to manage right off the bat.
Sure, it's DX11 limited, but considering how strained some engines become under DX9 alone with heavy shaders with minimum visual feedback, using PP-Mapping isn't the best idea anyway.
Not mention, as said, artist's will need to compensate for the issues of the shader, or certain things will need to be changed, such as not allowing the user to come to ground level so they don't see the pancake effect of the shader.
You might as well save yourself a slew of headaches and go with a simple Bump-Offset build with very small values, or hell, even camera based values with distance to have more control of a simple setup.
Add in an AO setup for indirect lighting, and call it a day without extra overhead.
I think part of my problem is that tessellation is being thrown into the current gen when it really is a fundamentally different approach and mentality. If you are using tessellation in a significant way for lod why stop at silhouettes and parallax, why even bother with normal maps, what's the point of going halfway, you're just muddying approaches and being redundant. The day an engine is designed around using tessellation as a standard approach on all assets, perhaps dynamically based off of a high-poly, and the day that that approach can be experienced by more than a minority of people, that is when I'll support tessellation as a legitimate approach to make content around.
Until then it's a shiny bonus feature for the minority that's being tagged on top of old techniques, and isn't representative of what most people will actually see.
/opinion
To replace normal maps with realtime displacement you need:
A. Insane levels of subdivision to get to the pixel-level, to replicate the same detail as a 1Kx1K normal map you need 1048576 quads.
B. To recompute normals at every subdivision level, which makes it harder to use any optimization on the sub-division and will cause the shading on the model to "swim".
Most subd/displacement models will "lock" the normals of the mesh and only displace to effect silhouette. So you still need a normal map to get the correct shading.
The % of assets that would benefit from full on displacement with sub-pixel detail is far to low to build your engine/lod system around that premise, you would be much better simply modeling the appropriate amount of detail and using an automated LOD system, and using parallax or whatever(simple low res displacement+nms) for the few cases(tiling terrain or whatnot that is difficult to model by hand).
They talk about anti-aliasing issues in Section 18.1 of the Gpu Gems article and show some comparison pictures which look quite promising, however it's a rather small image so it is hard to judge and I have not yet seen an actual implementation of RCSM to look at it in real time.
That threw me off a bit, too. However, there were solutions suggested, e.g. creating the mip maps by hand using a nearest neighbor resampling method. Maybe I misread, see for yourself in section 18.5 of the Gpu Gems article).
Isn't that what being a 3D artist is all about I mean we are painting to hide UV seams which are also a technical limitation and so on. But yes, it does add another redundant workflow consideration on the artist's plate which is never good.
Your post makes it (RCSM and other relief mapping approaches) look like a gimmick and this is how I come to perceive it now, too. I will stay away from it for this project and possibly look at it again for the learning value of it.
I cannot comment on DX11 dynamic tessellation since I have never played with it. I simply do not have the required hardware for that kinda stuff at the moment.
This is what I'm referring to and it is part of why I think tessellation is premature.
In the most extreme situation where there is no type of interpolation sure you could probably imagine it like that, but high screen resolution is 1080p every point on a normal map doesn't necessarily represent a vert, represents values between verts.
I definitely think that dynamically interpreting meshes in some form is the future, but imo it's premature to say that tessellation as it is currently used is the way to go (as of now). Tessellation just for silhouettes and parallax on select, capable systems (as an option to switch on) seems excessive and trivial when there are so many ways to fake the effect in the shader so that there is consistency across a variety of systems (some cheaply, some requiring some extra artist attention, but that's the name of the game).
The bigger point I want to make is that displacement is a poor option for high frequency detail, that is much better done with normals. You can do some really efficient stuff with really simple meshes and a couple levels of subd+displacement for your mid/low level forms.
You sort of run into the same problem with parallax mapping, its poor for really fine details as you tend to "tearing" with too much sharpness/contrast in your hieghtmap. Sure you can use really complex high quality shaders to help, but you're better off tailoring your art content so that it works well.
I think that is one of the big reasons you don't see really advanced parallax shaders in games, for the instances where they really show big benefits, you're better off just modeling the detail out if the asset is important enough, and everything else you can just tweak the content so it works well.
I think a mix of very simple lowpoly, with a few levels of displacement to do nice silhouettes with easy LODing and standard D/N/S on top of that is a good way to go for certain things, especially terrain, organics, rocks/cliffs, etc.
I'm not really convinced that it is viable for precise hard surface work, though I would like to do some tests to really see that for myself sometime.
Well put, this thought was the tie breaker for me