The 2 missing nodes for Blender Cycles materials


I wanted to talk about some problems with procedural textures in Blender that really limit the complexity and variation of the textures that can be created inside Blender. I’m talking about Cycles material editing workflow, that frequently incorporates using different generated sources, mapping them and getting the final textures we need to make the materials work for our project.
I was recently looking for a tool to efficiently do procedural texture synthesis, because a graphic I wanted to create would take ages to pull of using GIMP or Inkscape in the resolution I needed. The best I found in the Libre World is NeoTextureEdit. And it did the job.
It’s a node-based tool for creating seamless textures. But blender does this! - you’ll say. Not all of it, sadly. Not yet!

So I think there are a few things that can make Blender make much better textures - so we can abandon bitmap textures for good.

1. Blur
Cycles materials need a way to blur the textures. I guess you don’t need an explanation of the importance of blur in computer graphics. It can turn a bunch of spots into a smooth bloom, or it can be used to extract high-frequency content from an image. If the X and Y axis are independent - you get a whole bunch of other effects available too. Not to mention extra crazy stuff like Vector Blur - why couldn’t it work in Material Node Editor too?

2. Distortion
This is something very much needed for procedural texture generation. It’s sometimes called a “Warp” effect - it’s a way to nonlinearly alter the texture mapping, distorting one image with another. Just like blurring - we can do this, but just like Blur - it’s only available in the Compositor and it’s not tileable. [SUP][SUB]Well. Procedural textures don’t need to be tileable unless you want to export a sample of them to use externally.
What do you think? What are your problems with Blender procedural textures?
Am I stupid, or this really can make a huge difference?

Hi unfa,

Unfortunately, procedural textures in Blender are pretty weak in general and the party line on this seems to be ‘do it with OSL’ (Open Shading Language.) OSL is definitely powerful but has a cost: it requires you either to find an existing OSL script that does the job or write your own and currently can only be rendered on the CPU.

Another option might be see if there are any other addons that could help you out. But my guess is that in the end you might have to write some code to address this need right now.

I’m with you in wanting more procedural texture related nodes/capabilities, but this doesn’t seem to be an area of focus for development by the Blender team currently. My guess is that it’s just a case of limited resources and other priorities rather than the development team not seeing the value…


As for distortion, afaics it should be possible to use e.g. add the first image to the texture coordinates that are used for the second one?

As for blur, that’s not possible - the compositor blur works by looking at the surrounding pixels as well. Also, it only blurs each pixel once.
However, in Cycles, especially with procedural textures, we don’t have all surrounding pixels - in fact, for procedurals, there aren’t even any pixels. Also, the same location might be needed thousands of times because you render with multiple samples.
So, if you wanted something like a blur, you’d have to evaluate the texture dozens of times - which would be ridiculously slow.

I agree that it would be great to have, but sadly it’s just like an Ambient Occlusion Value node - sounds great and easy, but if you look at the implementation, it’s just not possible.

I had not thought before about blurring textures directly in cycles nodes. Doing a search I found this I’ll try later:

Please don’t say something isn’t there in free software when you just haven’t found it yet.

You can see Barteks full explanation here

Thanks for pointing this out… clever hack. I love Bartek’s determination: when one level of hack wasn’t enough, he found a 2nd level. (I use the term hack here as a sincere compliment: given the nodes that didn’t exist to help with this, he arrives at a usable solution that doesn’t require writing code)

The noised up coordinates has limited use since it doesn’t really affect pixels. You may get away with it “blurring” visual color on screen, but it won’t work on i.e. brick texture fac output for bumps.

Thanks for the posting: I’ll sure check that out, phil14!

I have done some experiments with nodes above. New true displacement generates noise, you can not use it there. I also tried blur one HDRi image to soften a very hard light source which generated Terminator effect, but it also generates noise in the objects. After all this technique uses Noise texture :stuck_out_tongue:

In my technical ignorance, I was wondering if for Blur nodes could be used similar technique as used in DoF.

Not sure what you mean here. Why would you not use real dof or composite dof? This noise thing is already noisy :slight_smile: Long time ago I tried this to “blur” text.coord/reflection vector for a fake reflection and I could control “glossiness” (very vague similarity to the real thing :D) individually per object to save reflection map memory. Not 100% sure, but I know I had a revelation doing it. I think I came to the conclusion that real reflections, even blurry ones (mixed scene test), were actually faster.