Terragen Normal Maps

Started by WAS, February 22, 2021, 02:50:13 PM

Previous topic - Next topic

Hannes

So now that we have a solution for this, wouldn't it be a good idea for the creators to make an extra slot (with an inbuilt vector displacement shader) in the default shader or the surface layer? Just for convenience and maybe for beginners who want to know, where to put the normal map.

Dune

I guess so, but Matt would know if this vdisping really works like it should, and not only looks as if it works ;)

sjefen

Quote from: Hannes on January 01, 2023, 05:49:32 AMSo now that we have a solution for this, wouldn't it be a good idea for the creators to make an extra slot (with an inbuilt vector displacement shader) in the default shader or the surface layer? Just for convenience and maybe for beginners who want to know, where to put the normal map.

I'm not against this, but if we'll get real support for normal maps, I promise I'll give something back to this community that is using normal maps  ;)
ArtStation: https://www.artstation.com/royalt

AMD Ryzen Threadripper 1950X
128 GB RAM
GeForce RTX 3060 12GB

WAS

#33
Quote from: Hannes on December 23, 2022, 06:01:42 PMHard to tell what was intended. I don't think, it's inverted, because the rest looks correct. However, of course it depends on the quality of the normal maps. All in all Ulco's method looks best I'd say.
It's pretty easy to tell, though, all this roughness breaking lighting is the mesh breaking because it's pinching.

Screenshot_6.png

If things look like they are super sharpened and creating had grain with bright lighting and super dark lighting, it's safe to assume it's not working correctly.

I still find the converting normal to a grayscale displacement, and using that as VDISP is 100x better. Pay attention to grout, and mesh angles

VDISP Normal Map - Notice all the rough noise, creating bad lighting: that's mesh errors from bad disp
PavingStones_VDisp_Normal.jpg

Converted VDISP Normal Map - NO rough noise and bad lighting (besides the base displacement issues with the mossy areas)
PavingStones_Converted_Normal_as_VDISP.jpg

No, Terragen still needs proper support, and there is no good alternative that doesn't require some manual work if you care about the fidelity of your work.

Not only is converted map less noisy and choppy, but it produces stronger amplitude *without* those effects. All while still being vdisp, allowing your to target each direction independently.One of the biggest issues with just using a normal map into vdisp is it breaks the lighting model heavily. For example, here the Fresnel is already 0.01, with vdisp normal map, it starts creating hard lighting points where the noise is, creating almost a specular spot like look that we do for sand. Additionally, angles of the mesh aren't rounded, and retain their angles.

WAS

#34
Also if you take any average normal map, and convert it to greyscale, you get all the overlaying which should be different axis, unified into similar gray, so you get a simulated banding effects and around small details, noise from pixels representing different angles in different tones of grey, not properly interpreted for grayscale.

Using something like Materialize which will create 3D bump and fire off shadows from all angles is going to be more accurate then just using a normal map, inherently. Granted, you do have to spend some time understanding displacement maps and how a micro displacement like normal map would need to look (for example no heavy whites for super tall peaks)

PS, I'd have done larger resolution, but my key doesn't appear to be in my email anymore (probably deleted it for security being in my main email). So only key is on my other computer I don't have access to currently.

Dune

It's hard to see the actual differences in the examples, though I do see differences. But if you would have shown me the first only, I would have been satisfied with the looks. Perhaps a more defined (no-DOF) example would be more 'definitive' to rule out this method. Or proof its merit.
So what if you slighly blur the normal map (0,5 or so) for the time being? Perhaps that would mix the overlaps so it wouldn't breakup the lighting in those edges.

WAS

#36
I figured a "final scene" would actually be best, so you can see how it ruins a artistic inspection, actually.

Here is some zooms without DOF.

Notice the classic lean because it's not interpreted right to begin with. Inversion doesn't help.

Additionally, I'd say converting normal maps has a lot more control to actually match any reference you may have, which leads to better "detail". Furthermore, because it's not doing stuff erroneously on X/Z, you can probably default low resolution limitations of maps by adding some fractal warping/noise in the displacement without extraneous tearing.

Edit, I did notice VDisp mode without Y displacement does look a bit better though, I think the added Y displacement on top of base displacement map messes up the look. I didn't do that in this example.

These all are no real substitute for proper normal maps in appearance or workflow.

PS If you also aren't computing your object after it's initial displacement map, with a low scale compute normal, you won't really be benefiting from normal maps through displacement anyway, even if they did work (because the displacement map through default shader isn't computed), as it will just lean entire displacement and not really apply anything to X/Z as far as detail, only Y + lean shift offset.

Dune

Interesting. Still, I find the differences quite small. Hard to fathom how it would really work. You say you need a compute normal in the object. I thought so too at first, but wouldn't it just use the normals provided with the object?

I did a little experiment on a polysphere (not generating UV's seems necessary). Found a comparison normal/bump image on the web. I don't really know how to interpret the findings, but it seems vdisping doesn't really do any good here.

Dune

And here are some renders. Again, vdisp doesn't really look good after all. But this may not be the right way to check.

By the way, this is showing the backside of the polysphere, so normal map is on left.

WAS

Quote from: Dune on January 02, 2023, 03:54:22 AMI thought so too at first, but wouldn't it just use the normals provided with the object?
Yeah, from the base mesh, not with the displacement map you have added in the default shader, which would be necessary to not destroy the mesh oddly, as you have two displacements, occupying the same general space, using the same normals, but applying on top of each other in chain.

Since VDISP requires computed normals to apply to displacement that isn't computed, you'd need it. It's no different then needing one for lateral displacement, which this would need to apply to your added displacement map at all angles which is altering the mesh (as it isn't fake bump/normal mapping)

Dune

#40
If you use a displacement shader (as bump) and a vdisp. If it's only a normal map used for bumpmapping, it would have enough from the normals in the object, I'd say.

Edit: 2 more tests.

Hannes

This is really a very interesting thread. If only one of the staff would chime in to tell us their opinions and future plans.

Doug

This is a great thread, keep it going.
I learn a lot out here.

One thing i do as an Artist is to mix PBR's.
I use the displacement from one PBR in another PBR.
I know they don't match up, but i can get something i like that way sometimes.

sboerner

Well, I just had to see this for myself. Here is a comparison using an imported uv-mapped cylinder. The maps are nice quality. Source: https://www.textures.com/download/PBR0071/133106.

There is no comparison between the vdisp and a good-quality height map. Using the height map with a low-amplitude vdisp on top adds a little more detail, but it's not really worth the trouble.


WAS

Quote from: Dune on January 02, 2023, 04:18:54 AMIf you use a displacement shader (as bump) and a vdisp. If it's only a normal map used for bumpmapping, it would have enough from the normals in the object, I'd say.

Edit: 2 more tests.

If you aren't using a compute normal after regular displacement (displacement function/image of default shader), that isn't really possible programmatically with what's going on. As you've added displacement, and are adding more displacement based on the underlying mesh UV/Normals. So you got two displacements sharing the same space, trying to do two different displacements. But the second is applied over the original, confusing it's space.

Quote from: sboerner on January 02, 2023, 01:13:44 PMWell, I just had to see this for myself. Here is a comparison using an imported uv-mapped cylinder. The maps are nice quality. Source: https://www.textures.com/download/PBR0071/133106.

There is no comparison between the vdisp and a good-quality height map. Using the height map with a low-amplitude vdisp on top adds a little more detail, but it's not really worth the trouble.



Now actually convert that VDISP to regular displacement using a good converter, create a edge map, and overlay it at 10%, and you have a muuuch higher quality displacement then vdisp for microdisp. Additionally, because it isn't pushing on X/Z pinching the mesh, you could even add fractal warping or w/e to give it more fidelity than a image map would ever allow without being absolutely ridiculously huge.

Try using a compute normal with 0.001 scale, or 0.01 scale and very light VDISP or regular disp. You'll get much better X/Z displacement for a VDISP inherently anyway, even before trying to simulate normal mapping.