I am working with 16bit (Tiff) greyscale Heightmaps, images that displace geometry to create terrains.
When I want to adjust the images I do it in one of several applications that return the Heightmaps with an altogether different range of levels (value of blacks and whites). However I have no way of matching the levels of the updated image to the original except to eyeball it using Levels. This is time consuming and hard to get right.
I tried changing the images to RGB and color matching them, which is kind of what I want to do, but it leaves me with stepping (similar to an 8bit image) because the range it is trying to match is so subtle I think.
Does anyone know how to better use Levels to perfectly match (greyscale) images, or have another approach that might work?that might work?
Well, if you create them in different apps, you might wanna check the Gamma settings there and their output ranges. That's probably the biggest issue here. And personally I wouldn't bother with adjusting any such stuff in PS. Pretty much any 3D program has a "filter" or "gradient (map)" shader that would allow to control this much more intuitively inside the program while previewing the displacement. If you still must, you probably should use multiple eyedropper marks and the info palette. Seems simple enough to place them in your reference image and then use the eyedroppers in the Levels or Curve effects and a little manual tweaking to match. Beyond that there's not much you can do - any trickery e.g. by transposing the image to Lab mode would fail because obviously your luminance is already different across images and the most clever math can't figure out what is right or what is wrong...
Mylenium
Thanks for the reply.
These Heightmaps end up in a real time game engine where the height range is already set, and for various reasons can't be changed. Typically I do all my sculpting in the engine's editor, but sometimes I want to make adjustments in Zbrush or WorldMachine for example, where I have more tools to work with. I can control the value range with some success in WorldMachine but with Zbrush that's all out the window.
I've tried using the eyedropper tool in Levels but that doesn't do what I want.
If there was a way to take a snapshot of the level output range of one image and apply it to another, that might do the trick
If there was a way to take a snapshot of the level output range of one image and apply it to another, that might do the trick
If you use adjustment layers rather than the persistent adjustment tools, it's as simple as dragging the layer over to the new document. In fact using two such layers and calculating the difference with belnding modes might just give you a reliable reference. Didn't think of that before... And to my knowledge Z-Brush data is linear, so applying a standard Gamma curve on top of it should skew it the right way no matter what otehr stuff is going on.
Mylenium
Thanks for your help.. I think I have it now. Seems so simple ><
I Auto Level the original file with an Adjustment layer, then take those new figures that represent the shift in values at black and white, then copy those into the output levels of the adjusted image I want to match to it.
At least this works when going from a higher range to a lower range..
I'm not sure how I would apply a Gamma Curve as you're suggesting though.
Realize that Levels Auto defaults to clipping the input range by 0.1% at bottom and top. Access the clipping controls of a Levels Adjustment Layer by pressing Alt/Opt while clicking the Auto button. Access the clipping controls of a Levels adjustment via the dialogue's Options button.
A gamma adjustment to the input values can be made with the middle control of the three input controls under the histogram in a Levels Adjustment Layer or Levels adjustment.
Be aware that Photoshop 16-bit mode operates on values in the range 0-32768 (often called 15+ bit because it is one greater than the range of 15 bits). The implication is that the 0-65535 range of a 16-bit input file is mapped to 0-32768 (a loss of precision), processing is performed then the 0-32768 range is mapped to 0-65535 on output of a 16-bit file.
North America
Europe, Middle East and Africa
Asia Pacific