16 bit normal maps - how to get them in?

Hello - may I please ask if there is a known way how to get a 16bit normal maps in without them dropping to 8bit? I need some detail on a car from them but 8bit ones are not enough and have crazy stepping. Thank you for any help.
(importing them as png and tried also tiff)

Hello once again? No one having any knowledge how to get higher than 8bit normalmaps in and working? Its really important for a project I have on the table now, and would be extremely limiting if I could not use them … please if anyone knows what to do … let me know. Thank you.

I think WebGL 1 can only support 8 bit per channel whereas WebGL 2.0 can support far more. @Mr_F might be able to help here.

Thank you yaustar - well my problem so far is, that once imported the texture is not in 16bit, so even if webgl2 can use it I see it in editor as being 8bit. And the banding on smooth surfaces is so bad its almost unusable.

Can you share a simple project as an example?

I would have to put something together to show this, as I am under NDA with the data I am using at the moment. But I would say any 16bit png normal map added to a project default to be loaded as an 8 bit map … this is simple to test with any 16bit png map

I was more looking at the banding issues as I don’t have any assets on hand to really look at how bad the issue is for you.

Edit: Is this the type of thing you are talking about? http://polycount.com/discussion/148303/of-bit-depths-banding-and-normal-maps

Here you can see how it looks …

Yes its exactly this kind of a problem as mentioned in the link. Have been contemplating the dithering solution, but its not clean, and because I will need to reduce the size the pixels might end up to bee too big to be dithered.

Browsers don’t load 16-bit precision data from PNGs at all. Nothing engine can do here. Suggestion: use geometry for large curved surfaces. Use normal maps for finer details.

Thank you Mr_F - well that is very sad news :frowning: sure I understand what you mean, but I can not have enough geometry to correctly describe the large curved surfaces (or - I can have it, but I dont think it would be good for mobile platforms, here its 10k poly half of car, It would go to more like 100k per hal when I would need to keep enough polycount to well describe the large curves. But … what could we do if its not supported right?
BUT - could you please look at the picture if the secondary problem with the banding (sort of lighter and more “rough” parts showing on some bands) could be solved? Because this is something that shows it much more - and makes it visible even more with dithered normal map. Tried to find if it does not come from some other part or map, but seems to come solely from normal.

Can you check if this helps? Put it in the initialize() function in any script:

pc.shaderChunks.specularAaToksvigPS = pc.shaderChunks.specularAaToksvigFloatPS = pc.shaderChunks.specularAaNonePS;

Hello @Mr_F … I tried, but I dont see any difference … I will show you how did I used it in the script as I am no coder so it might be done wrong way. What should it change or do if I may ask?

Below you can see how did I put it into a script …

// initialize code called once per entity
KeyboardInput.prototype.initialize = function() {
this.orbitCamera = this.entity.script.orbitCamera;
pc.shaderChunks.specularAaToksvigPS = pc.shaderChunks.specularAaToksvigFloatPS = pc.shaderChunks.specularAaNonePS;

Sorry that didn’t help… could you cut a part of the model/normal map that gives worst banding and put it a public project? I’d take a look and see if there’s some way to fix it.