In Blender 2.78, there are two very cool features called Adaptive Subdivision surface and Microdisplacements. BlenderGuru has a great video on it.

If you don't have time to watch the video, here is a summary in lamens terms (written by me; just wanted the quote format to emphasize it):

Both of these features are Experimental features for Cycles render.

Adaptive Subdivision surface is an extension of the Subdivision surface modifier that calculates decreasing levels of subsurf the farther away the object is. It can even change the level across an object.

enter image description here
Image by BlenderGuru.

Microdisplacements uses the Displacement input of the Material Output node. It generates extra geometry at the time of the render. It's like a Displace modifier that only displaces during the render and uses any combination of Cycles material nodes.

However, when I try to use these features on a plane and use a Separate XYZ > Z node in my node setup, it doesn't work. I am theorizing that this is because the plane does not have any Z depth before the render. Is there a way around this?

enter image description here

enter image description here

  • $\begingroup$ Havent actually used any of the new features myself yet, but my guess is that micro-displacement is preformed at render time only, and processed after, or at least along with other shader calculations, and as such there are no different Z values to display at the time the generated texture coordinates are calculated, since they seem to comes directly from the object mesh data. $\endgroup$ Oct 30, 2016 at 2:22

1 Answer 1


As Duarte mentioned, generated coordinates do not factor in the displaced mesh. So you need to get a Z coordinate from something that does. You can use either "object" coordinates (available from the texture coordinate node or the geometry node, their "object" outputs are the same) or "global" (aka world space) coordinates from the geometry node's "position" output. These do not rely on precalculated geometry, instead they simply use the shading point's location.

using texture coordinate > object

The difference between the two is that object coordinates are in "object space", meaning they account for the transformation of the object. That means they won't move when you move the object, which is good for animated objects (otherwise they might appear to "swim through" the texture). It also means that multiple copies of an object will always have the same texture, although that one may or may not be desireable. Global/world space coordinates are absolute and do not account for object transformations and locations at all. They're nice when you need to keep consistent texture locations across multiple objects (such as adding a waterline to objects below the level of your water mesh) or if you want different textures across multiple static copies of an object


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .