cancel
Showing results for 
Search instead for 
Did you mean: 

Bump mapping

Beta84
Honored Guest
I heared in a video from Michael Abrash that Bump mapping dosen't work anymore for VR. Is that right? (Can't tested by myself don't have DK1, I'm waiting for my DK2)
19 REPLIES 19

geekmaster
Protege
"Beta84" wrote:
I heard in a video from Michael Abrash that Bump mapping doesn't work anymore for VR. Is that right? (Can't test by myself, don't have DK1, and I'm waiting for my DK2)

It depends on how it is used. Extending the virtual screen to wrap around you should not affect how you generate the VR content any more than putting a larger monitor on your desktop would negate the usefulness of bump mapping (i.e. not at all).

Please supply a link to where Michael Abrash said that -- I would like to see the context he was referring to if and when he made such a statement...

EDIT: Okay, google found a reference:
"Here are his slides. (The normal mapping statement is on page 40)
Just wanted to let you know. But I guess in this early stage of development it doesn't really matter that much.
I don't yet understand how the gameplay would be like but visually it already looks amazing. You have my Greenlight. 🙂
[–]ccsander 9 points 3 months ago
I have to disagree on the normal mapping comment by Abrash, or at least agree with faith303 that there are exceptions. If you have a high-polygon model and use normal mapping to add even more details, it can look stunning in VR. You just can't get away with super low-poly models and expect normal mapping will make it look ok because it won't. It will look terrible. If you use normal maps for fine details like pores or wrinkles on skin, however, it is very effective because your eyes still perceive that as real geometry in VR at that scale.
[–]subcide 3 points 3 months ago
And as bad as normal mapping may look, no normal mapping isn't exactly better.
permalinkparent
[–]faith303 4 points 3 months ago
Thanks a lot for sharing the slides. We are aware of these facts. There are some exceptions. It can look good under specific circumstances. ...

This discussion makes it seem like you cannot substitute bump mapping for high resolution polygons, but you CAN use it to enhance the appearance of high resolution polygons. In the Rift, a stereoscopic view may make bump mapping appear to be painted onto flat polygon surfaces -- an effect that I noticed in some 3D animated movies which was rather annoying... Easier to get away with if you are not using a stereoscopic display device.

Here is the Michael Abrash quote that seems to be having unintended meaning attached to it:
Then there’s content. For example, no one knows yet which art styles work in VR. Detailed scenes
that look great on a screen can look like cheesy stage sets in VR – and simple scenes can seem
startlingly real. Normal maps don’t look good, and textures sometimes do and sometimes don’t. So
we’re going to have to come up with a whole new visual vocabulary for VR too.

All he is really implying is that you cannot trust methods that worked good on desktop displays to also look good in VR, so we really have to try things and figure out what works best, IMHO...

cybereality
Grand Champion
Normal mapping looks fake in VR (or even just 3D). It's obvious you're looking at a flat quad.

You can use parallax maps, which do adjust for the camera angle (but are somewhat expensive compared to normal maps).

You can also look into tessellation using height maps, which is probably the best solution visually since it actually creates the geometric detail.
AMD Ryzen 7 1800X | MSI X370 Titanium | G.Skill 16GB DDR4 3200 | EVGA SuperNOVA 1000 | Corsair Hydro H110i Gigabyte RX Vega 64 x2 | Samsung 960 Evo M.2 500GB | Seagate FireCuda SSHD 2TB | Phanteks ENTHOO EVOLV

geekmaster
Protege
"cybereality" wrote:
Normal mapping looks fake in VR (or even just 3D). It's obvious you're looking at a flat quad.
...

If the quads are too large, as I mentioned. This is even a problem in some earlier 3D animated movies (which look fine in 2D). However, if you have sufficiently small polygons, they look much better with some bump mapping added on, even in 3D VR... The key is for the bump mapping to not occupy too much of your FoV.

Of course, that is assuming that you do not get too close. Here are some examples:
http://www.fabiensanglard.net/bumpMapping/index.php

Good quality bump mapping can fool the eye even in VR, especially in the background where stereoscopic parallax has less effect. Up close, more polygons are better. But in typical VR environments, you can save on polys by using lost of bump mapping on distant objects.

cybereality
Grand Champion
I don't think it has anything to do with how big or small the polygon is. The problem is that there is no stereo parallax between the eyes. So you see the proper lighting for a higher-res mesh, but none of the stereopsis. It destroys the illusion.
AMD Ryzen 7 1800X | MSI X370 Titanium | G.Skill 16GB DDR4 3200 | EVGA SuperNOVA 1000 | Corsair Hydro H110i Gigabyte RX Vega 64 x2 | Samsung 960 Evo M.2 500GB | Seagate FireCuda SSHD 2TB | Phanteks ENTHOO EVOLV

geekmaster
Protege
"cybereality" wrote:
I don't think it has anything to do with how big or small the polygon is. The problem is that there is no stereo parallax between the eyes. So you see the proper lighting for a higher-res mesh, but none of the stereopsis. It destroys the illusion.

That part in bold orange above treads dangerously close to speaking in absolutes, which is logically fraught with linguisic danger.

Contrarily, the appropriate use of bump mapping has EVERYTHING to do with how small the polygon is and how far it is from the eyes (i.e. arc minutes):
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.211.7514&rep=rep1&type=pdf

Stereo parallax is less critical for distant objects, where bump mapping can be used in place of extra polygon detail. It is normal to decrease polys for distant objects anyway, and you can improve the perceived detail and reduce polys even more with some appropriate bump mapping. I could keep trying to persuade you, but I am busy and I will let you discover these things for yourself if you are really interested.

There is no need for a gazillion polys when bump mapping can reduce that burden for small details in small polys (or large polys very far away). Just be careful to keep bump mapping within the stereoacuity threshold of two to 10 arcseconds, where parallax has little perceptual effect (i.e. insufficient to stimulate stereopsis) while perception of bump mapped detail still adds to perceived realism.

Vision Science III - Binocular Vision Module, Lecture 13 – Stereopsis:
http://arapaho.nsuok.edu/~salmonto/vs3_materials/Lecture14.pdf

Like I said, it depends on how you use it. Bump maps and textures are commonly used in 3D movies, and can look very good if used judiciously. I have seen movies that were startlingly overdone, though, and we need to avoid that problem in VR. It is all a matter of subjective perceptual perspective anyway, and different people will have different preferences. Just use what looks best within the hardware budget of your target audience.

I suspect that Michael Abrash was just oversimplifying a bit for people who like to follow a simple unconditional set of rules. I sometimes do the same thing to minimize TL;DR posts. Bump mapping still has its uses in VR. Just be careful in when and where you apply it.

I am not going to argue with you or with Michael Abrash (my hero from the DDJ and Zen book days). I am just supplying evidence to support my experience on how this stuff works. We are all free to believe whatever we want, until the law says otherwise. I just like to keep it real, and forbidding a useful tool under all conditions, by speaking in absolutes, is highly illogical.

cybereality
Grand Champion
It seems you are misunderstanding what I am saying, and the point of this thread.

Take, for example, a simple normal mapping shader (in HLSL):

float4 BumpMapPixelShader(PixelInputType input) : SV_Target
{
float4 textureColor;
float4 bumpMap;
float3 bumpNormal;
float3 lightDir;
float lightIntensity;
float4 color;


// Sample the texture pixel at this location.
textureColor = shaderTextures[0].Sample(SampleType, input.tex);

// Sample the pixel in the bump map.
bumpMap = shaderTextures[1].Sample(SampleType, input.tex);

// Expand the range of the normal value from (0, +1) to (-1, +1).
bumpMap = (bumpMap * 2.0f) - 1.0f;

// Calculate the normal from the data in the bump map.
bumpNormal = (bumpMap.x * input.tangent) + (bumpMap.y * input.binormal) + (bumpMap.z * input.normal);

// Normalize the resulting bump normal.
bumpNormal = normalize(bumpNormal);

// Invert the light direction for calculations.
lightDir = -lightDirection;

// Calculate the amount of light on this pixel based on the bump map normal value.
lightIntensity = saturate(dot(bumpNormal, lightDir));

// Determine the final diffuse color based on the diffuse color and the amount of light intensity.
color = saturate(diffuseColor * lightIntensity);

// Combine the final bump light color with the texture color.
color = color * textureColor;

return color;
}

Notice that the eye/camera position is not part of the calculation at all. This means as you change the camera position (or switch between the eyes) there is no change to the lighting effect. It will appear in stereo 3D as a painted-on, or tattooed, shadowing on a flat surface. Whether the polygon is big or small does not, in fact, have any bearing on this calculation. Though, you are correct that at large distances this illusion will remain convincing since there is not much (if any) stereopsis after a certain point.
AMD Ryzen 7 1800X | MSI X370 Titanium | G.Skill 16GB DDR4 3200 | EVGA SuperNOVA 1000 | Corsair Hydro H110i Gigabyte RX Vega 64 x2 | Samsung 960 Evo M.2 500GB | Seagate FireCuda SSHD 2TB | Phanteks ENTHOO EVOLV

geekmaster
Protege
"cybereality" wrote:
It seems you are misunderstanding what I am saying, and the point of this thread. ... Though, you are correct that at large distances this illusion will remain convincing since there is not much (if any) stereopsis after a certain point.

I take things quite literally, including speaking in absolutes. All I was saying is there are cases where bump mapping works fine in VR. It is really stereoacuity that matters -- really small polygons nearby, or large ones far away, where bump mapping will not look flat and painted on. Like I said, some 3D movies (like "Monster House 3D") did a horrible job at this, and if it looks bad on the giant screen, it will also look bad in VR.

If I did not understand something, it must have contained implicit assumptions that I literally cannot see. That is why I like to define just about everything with lots of extra adjectives and such, leaving nothing to be guessed or assumed. But then others insert their own interpretation between the lines and claim I said stuff which I did not say. If not written, then not there, plan and literal and logical. I cannot interpret things other than their literal meaning, and sarcasm or satire often look like simple disrespect. My language skills were tested as "unprecedented", so that must account for some of our communications differences (or a failure in the classified military testing methodology).

tomf
Explorer
All of rendering is a hack. But normal maps work significantly worse in VR than on a monitor because the combination of stereo and fine positional motion mean it is very obvious when something is a flat plane with "odd" lighting, and not actual geometry. Yes, if it's distant geometry and/or tiny perturbations it will probably still work. But it's something like a factor of 10x between "looks good on a monitor" and "looks good in VR" - it really is quite a startling difference.

On the same note, anything that relies too much on interpolated normals smoothing a polygonal mesh has the same problem. It becomes very obvious that the mesh is a bunch of discrete flat triangles and not a smooth surface, even when the shading is faking a smooth surface. In fact the disparity between the two can be quite jarring. This is most obvious when looking at specular highlights or environment-map reflections. One hack for these is to not use the vector to each actual eye in he lighting equations, but to instead use the vector to the "middle eye" for rendering both views. This at least avoids glaring stereo disparity, even if it doesn't look "correct". It doesn't solve the problem entirely though.

This is a tricky subject, and no doubt we'll discover other accepted techniques that don't work that well in VR.
Tom Forsyth - OculusVR coder