Cycles best practices, shaders and bumps.

Hi

I’m pretty inexperienced with Blender, but I’ve noticed others using shader nodes even if the only difference in them is the color input. I’m used to slower raytracing with access to shader pipeline, where this approach would be considered a very bad idea.
So my Cycles shader question is this:
If the only change is color, is it better performance wise to do blending modification to color prior to being used by a single shader, or are shader calculations so fast it doesn’t really matter? So i.e. a facing/frenell (deliberate typo :)) node connected to a color mixer going into a single shader instead of a mix shader with two (i.e. glossy) shaders with different colors.

What is the purpose of the material displacement output? Almost always I see bump effects being plugged directly into this instead of modifying normals directly in shaders which offers (to me) a significant advantage in the sense that this is the only way to produce shellac materials (i.e. bumpy diffuse, with a less bumpy or fully smooth coating). Now normals are being modified multiple places though, which may be slower but it’s the only way.
So my Cycles bump question is this:
For a non shellac, does it have an advantage to controlling bumps in a shaders normal input compared to plugging it into the material output displacement connector? Will displacement always be about adjusting normals, or is it planned to become true geometric displacement (or microdisplacement) in future versions?

No, you’re technically correct. The performance hit isn’t that big (barely even significant), but it is slower than a single shader with a modified color. People mixing two shaders just for a color mix usually don’t know any better (ex, they don’t know about the MixRGB node, or don’t realize it’s slower). Plus, if you want to change another shader parameter like roughness, you have to do it to every shader node, and that is annoying.

The displacement output is technically for actual displacement. But Cycles’ displacement function has a couple of different modes. One of them is “bump” where you don’t get any actual displacement and it just uses bump mapping. Bump is actually the default and the only one most people know about, since the true-displacement and auto-bump (“both”) modes are locked behind the experimental features switch. (they mostly work fine, but they’re accompanied by a render-time subdiv function which is completely worthless).

And back in the day, Cycles didn’t support per-shader normals. Back then, you couldn’t use normal maps and the only way to use bump maps was to attach them to the displacement output. So any tutorials from back then show this method. Lot’s of people pick it up that way and never learn about the bump node and the per-shader normal inputs.

For the most part, you can just forget the displacement output is even there and just use the shader normals. You can use it for actual displacement by enabling experimental features, just use the subsurf modifier to tesselate your mesh instead of the render-time function (which ignores your UVs).

tl;dr: you’ve got it right, it’s the other people that are wrong. :eyebrowlift2: