ZBrushCentral

Exporting 16 bit per channel normal maps

I’m creating normal maps in ZBrush using the normal shader. When I export it gives me two options PSD/TIFF. Exporting both gives me 8 bit per channel.

Any way to get ZBrush to export at 16 bit per channel?

Thanks,
-= Dave

No, ZBrush doesn’t support RGB maps of 16 bit per channel (other than displacement maps).

Is there any way to write a plug-in or any good way around it?

8-bit normal maps can significantly reduce the quality of surfaces with more complicated BRDF’s.

Not that I know of, though perhaps it would be possible to write a converter for a displacement map.

Are 16 bits per channel normal maps used much? I’ve not heard of it.

I could certainly write a converter for a displacement map but calculating a gradient from a height field will produce different results from directly outputting a normal from a surface. I’m not sure how bad it would be though and if it’s our only option then I may have to do it.

Are 16 bits per channel normal maps used much? I’ve not heard of it.

It’s not too common and it depends on the studio and how much they care about their renderer. I know a few game studios and film studios that work with it. We’ve been converting over our texture authoring pipeline to be completely 16-bit depth for colors and normals.

I suspect it will start to be more common in the near future. At siggraph this year Crytek was showing off the errors and popularizing the idea of 16-bit bit normal maps.

-= Dave

Your first message suggests you are using the canvas for normal maps. If so, you might try zscripting a solution. It’s possible to get the normals for each pixol using the PixolPick command. The values returned are floats though I don’t know if there’s actually the precision to benefit from 16 bit channels. The method is a little slow but may be useful.


[Loop,document:width,
   [Loop,document:height,
	[VarSet,xNormal,[PixolPick,6,xPos,yPos]]
	[VarSet,yNormal,[PixolPick,7,xPos,yPos]]
	[VarSet,zNormal,[PixolPick,8,xPos,yPos]]
	//write values to image block

   ,yPos]
,xPos]