PhysicalMaterial Bump / Normal - How to set WhitePoint?

Hi @nathanletwory and @johnc,

i have a problem using the PhysicallyBased material, in particular with the Bump / Normal Displacement. It seems that the white point by default is set to 50% gray, so darker areas are moved negative while lighter ones are moved positive. Is there a way to change it so that 100% black (0,0,0) does not displace and everything lighter up to 100% white does ?

I would like to vote for using this as default as it is the way it works with eg. bump textures too. Is there maybe a way i am missing to adjust the output ? So far i’ve tried to clamp / shift the range but the input fields do not allow to go below zero or beyond 1.0.

Attached is an example, distance is set to 1.0 but total distance is 2.0 (1.0 in and 1.0 out).

Example.3dm (181.3 KB)

Any help would be appreciated,

Edit: i see i can flip my geometry inward, change Multiply to 0.5 and invert the texture in the output settings but this is a rather ugly workaround…

Our displacement interpretation is the result of discussions with the Substance people. Displacement textures we handle so that 0% .. 50% .. 100% luminosity maps to displacement range -1 .. 0 .. +1.

In effect this means a displacement range of 2 between black and white when the displacement.

@andy anything you want to add to this?

Hi @nathanletwory, i didn’t know that the PhysicalMaterial is solely focused on Substance. If there would be an alternative way to use the same feature (displacement) but with mathematical logical color range it would be useful. With logical i mean that i can multiply color and get precise control over the distances and use b&w masking. Could you please add a way to control the color range ?

The current implementation is problematic because you cut the already small grayscale color range in half if you only displace one direction.


I had this thought too, when this was changed, but with 0 at the middle gray, you get displacement in both directions,

so you should have the same range overall. However, my understanding of Nathan’s comments still seems to be wrong - there is no inward displacement from a black and white texture. I expected black to be ‘inward’.

Obviously, I am confused…


If you check the example @clement attached you’ll notice that there is inward displacement. That from the midline you see that there is -1 unit inward on black and +1 outward on white. In total the range is 2.

I wouldn’t say Physically Based Material is solely focused on Substance. The change was made to get better results from PBR material textures from site. That said I do think that having the possibility to change to midpoint would be beneficial.

I’ll log a YT issue when I am at my desktop (or add this thread if there is already an existing one).

I think we’ll have to convince @andy on this one.

Hi @pascal and @nathanletwory,

There are definitely pros and cons here. A bi-directional displacement option is good to have.

I do think the same. Either inward or outward displacement requires to prepare the geometry in a way which makes the displacement accurate and controllable by (user entered) distances. For my use of displacement it is crucial to control that the displaced mesh is not moved in certain areas (using b&w masks). These masks are using smooth gradiation between black and white. With my comment about cropping that range to 50% of the grayscale range i asumed that it will stay as it is and i have to remap all colors so black becomes 50% gray and white stays white, this would cut the gradiation range in half.


Hi Nathan - OK - thanks, I’ll fool around some more - I tested a plane with a checker texture and got only ‘outward’ displacement, identical to V6.


Hmm, I don’t undestand what you said. If you are able to set ‘midpoint’ to black then you don’t have to fix your textures and you retain the entire range between 0.0 and 1.0… Or what am I missing?

Hi @pascal, i cannot confirm this using 2D checker. Is your plane srf in world xy and you have the groundplane on ? Here is what i get (it also shows a bug, the displacement does not adjust the clipping):

Example2.3dm (321.4 KB)

Here is one where i try to mask a dot pattern with a 2d checker:

Example3.3dm (378.1 KB)

I think it should all be in range 0 to 1 by default. Tweaking these ranges and values is maybe possible but it is potentially slow as the displaced geometry is heavy.

Yes, but i don’t have that yet :wink:

Right, so we are essentially on the same page. As said I need to log this - I think I already created an item for that but I can’t check that right now.

1 Like

You’re right, and I am getting more coffee now…


1 Like

Hi @pascal and @nathanletwory,

since it is related to this threads topic, please allow 2 more noob questions regarding the Physical Material in Rhino 7:

I’m currently only using the Physical Material in Rhino 7 because it offers the realtime displacement. Before in Rhino 6, i’ve been using custom meshes and have displaced the geometry manually using code, the results where shown fine in the RenderedViewport with the Custom type shader which gave me the option to also add a nice reflective touch and a matcap in the Environment slot. But in V7, everying look super flat. Below is an example image, on the left V7 Pyhsical Displacement, on the right custom material with 20% emap:

My problem with the Physical Material in RH7 is, i really like the Displacement Map feature as it allows to change the displacement distance in realtime without creating any new geometry. But i cannot get any Gloss unless i assign the same texture used for Displacement in the Bump / Normal Map slot. Without it, all reflections look flat, like if the displacement does not exist. Why is that ?

Is there a way to use eg. a spherical emap in the Physical Material and have the same appearance as in a Custom shader using the Environment slot as shown in above image on the right ?

If i displace a mesh using the Displacement Map, how can i extract the deformed geometry ? It seems that _ExtractRenderMesh does this if the object is a polysurface, but if i use a mesh, the result is always the undisplaced mesh geometry.

@nathanletwory, i’ve read your reply here and found a strange issue with the mesh density if the Physical Material Displacement is performed on a mesh object (not a polysurface). It seems that if my mesh uses a custom mapping (created by the _Unwrap command), the mapping mesh is deformed by the Displacement and not the actual mesh geometry. Is this possible ?

Below is a picture of this, it shows the mesh wireframe (black) of high density polygon mesh and in gray the deformed geometry of the Displacement.

My mesh seems to be fine enough, why does the displacment does not deform it ? Is it maybe using the normals of the mapping mesh ?


Can you please share the model for further investigation?

I take it you are talking about the Rendered mode?

Hi @nathanletwory, yes i’ll send you a link via pm.

Yes, RenderedMode using default Skylight only as lightsource.