Improve Cycles/EEVEE For Procedural Content Creation

Thanks for your inputs everybody. But to be honest, this is not how I wanted the discussion to go. Our point of discussion should be limited in scope to actually get something out of it. Currently, I would like our discussion to be limited to procedural textures, the topics and questions I described in the discussion document, we will get to other areas later.

@ogierm A base texture for creating scratches is something we are missing indeed. I am not sure yet how we should handle this, so I will definitely look into it. Something that should help us solve this is a sampler-evaluator system, I will come back to this later. Regarding the geometrical patterns, those should be easy to create using math nodes and can be bundled in a node group, do you think it is worth adding as dedicated node? Also, if we are to add that, then it should probably have its own node.

@wo262 This should also be handled using a sampler-evaluator system. Again, will come back to this later.

@AlanNoble Alright, that’s why we are discussing this. Let us know more precisely what kind of textures you want.

@Thatimster I don’t think blurring/sharpening and kernel operations are feasible. Random dots and line noise are though, and they will be considered.

@irfan Isn’t this what pointiness is?

@Hadriscus Also related to the sampler-evaluator system. Will come back to this later.

@SimonStorl-Schulke I think Brecht said we won’t be doing this.

@aryeramaty I get what you mean. I also think something like this would be very helpful, especially since color management destroy any idea we have of values.

Also, please excuse me right now as I have my final exams to worry about. I will be more active as soon as I finish.

6 Likes

Theoretically, but how well pointiness works is dependant on polygon density and is therefore kinda pointless.

Ok then :zipper_mouth_face: Good luck with your exams :slight_smile:

I apologise if my comment wasn’t helpful. The last thing anyone wants to do is to waste your time.

The specific kind of noises I’d find useful are:

A noise that emulates moisture
A dirt noise for high-frequency, small-scale details
Grunge map noise - preferably a range of different ones to choose from
A directional noise that could be used for wood and fabric

Obviously I can’t refer to how these have been implemented in other apps without getting into a grey area copyright-wise. But I know they are possible, and they can be done very convincingly.

Ideally these would produce a convincing effect without needing a complex node setup for them to start looking realistic.

What about tiler/pattern generators? You combine that with a polygon node or something to get primitive shapes and you can go a pretty long way.

The idea would be to have something to facilitate some basic transform and tiling operations that could really speed up the workflow and the creative process. I’m not sure if it’d fall within the scope of this project though.

(I’m thinking of substance designer, I might make a proper proposal when I have some time)

Alright, hopefully this is more on topic. I would like nodes to help scatter and distribute textures. I’m sure stuff like that is already possible but I can never quite figure the math, particularly independent of texture shape. Like, if I have a pebble texture, I might want to distribute copies of that pebble scattered in a quasy random way, maybe with random rotations too, or other regular distributions, etc. The only way I know how to do this is manually copying, masking and transforming each copy of the vector. This would help with scratches too

Thanks @OmarEmaraDev for keeping things on topic. From the requests in this thread that I understand, here’s my opinion on feasibility.

Doable (of course not all of them, but individually).

  • 4D noise
  • Additional noise types
  • Triangle, hexagon and similar patterns
  • Vertex color node
  • Improve ambient occlusion node
  • Curvature node
  • Vertex groups in attribute node
  • Normal map node green invert

Possible, but design is not obvious and needs some work:

  • Scatter texture node
  • Numerical view (OSL has a trick for rendering text in shaders)

Would take too much time for GSoC:

  • Adding color input sockets to the color ramp node
  • Math expressions
  • Multi-image node

Outside of scope of this GSoC:

  • Asset management
  • Compositor caching
  • Re-rendering optimizations
  • Texture unification
  • Viewport modes
  • Baking

Unlikely to be added to Cycles regardless of GSoC:

  • General blur or sharpen filters (not possible to do efficiently at shading time)
  • Access to previous / next pixels
  • ReMap Node for remapping textures
22 Likes

I might have something of help here. Last year I made a (flawed) node based approach that does exactly this.

Afterwards Łukasz Kwoska @Szaq took a chunk of his free time and converted it to OSL as well as a branch prototype. I’m not sure my approach is the best way of implementing such feature, but it got at least 4x more efficient since my initial node based implementation, which is pretty awesome :slight_smile:
He does not have time to finish it up though, so we thought this might be the perfect opportunity to make good use of it. It should at least be a good starting point for you, @OmarEmaraDev

I will get back with more specifics and also with some more of my input to this thread, when I have time to collect my thoughts :slight_smile:

15 Likes

Is a node like with a script input to boolean value possible ? a simple line of contidion to True/fasle value, white if the script is respected, black if its not.

Annotation%202019-05-13%20173643

2 Likes
  1. From what you already mention “4D textures”, and ways to animated seed/phase values of a texture would be quite useful.

  2. Spline info into shaders would be a very very welcome addition indeed, especially better mapping along bezier curve objects, that would allow for example easily mapping procedural textures along a spline

  3. Additionally perhaps better radial generated texture coordinates that would allow easy twist effects.

  4. In the textures department, an improved bricks or tiles texture comes to mind. One that would automatically map an all axis, as if it were “volumetric”, as opposed to the current implementation which is essentially a 2D projection and requires workarounds to simultaneous map on a all axis correctly for non bidimensional objects.

  5. More options to customize a single material on a per object basis. Ideally stuff like support reading Object Color inside the shader tree, accessing other per-object properties.

3 Likes

I supposed that both things were out of the scope, but without both things will be hard work with blender, game developers, architects,… will be out of the feature and the viewports modes are actually implemented, at least in first 2.8 versions we had the possibilty to see components.

But this won’t translate well to an integrated node, will it? To me, it seems a texture replicator will require an architectural change to Cycles, and would require more than just a node.

This should be easily done using the mapping node after it becomes dynamic.

I don’t think a complete omnidirectional version of this texture is possible. Or do you mean something else?

This is also planned.

Good to see you here Duarte!

2 Likes

3DS max has a “volumetric” Tiles texture equivalent to Cycles Bricks that natively maps on all axis. It probably works by generating a “3D cells” grid rather than a 2D projection. I managed to mimic it by cobbling up a Cycles Nodegroup that does something similar based on masking by normals, so it is not entirely impossible.

I can post it here if it is helpful, but a more math based approach would probably be preferable like Cycles Rounded Tiles - Blender Market. Let me know if any of those help, but I’m sure you’ll come up with something cleverer.

Thanks! This is a really interesting GSOC project and you are certainly a promising applicant. I’ll follow this closely, best of luck. :slight_smile:

2 Likes

Maybe I am missing something here, but we do have a working OSL version and afaik @Szaq made an integrated node prototype in his branch.
The approach is pretty simple actually and completely based on coordinates, so I would be surprised if there was no way of implementing this.
The main flaw is clipping, but I solved that with layering multiple iterations.

I also think the bricks texture should get some love. Especially the outputs are pretty limited at the moment.
Here I am showing a nodegroup for a more advanced bricks texture:

5 Likes

This is my point. I also implemented something like this in Cycles using the Shader Node Extra addon, and it was quit easy, you can see it here. However, it is currently impossible to create a node that does clipping/layering automatically. In order to do that, we will need a system of sampler-evaluator nodes which will probably be outside of the scope of this GSoC.

Oh okay, gotcha
I still think a randomised grid placement with just a coordinate output for one iteration would be a great addition as a node though.

Hey thanks for your feedback on all proposals. You seem to know what you’re talking about ! Do you have something for us to read on those sampler/evaluator nodes ? I’m not sure what those are.

Ok, I will look into it.

I am planning to write about it. It is a proposal I wanted to formalize for sometime, this is outside of GSoC completely though. Will get back to you.

3 Likes

Before I start wording my unrealistic expectations let me ask first about most ridiculous one.
Note that I’m artist artist not math artist and those examples are from this point of view.

Poly/Shape node.

We have most of the tools, like painting area, vectors with different types so the front-end is mostly ready (RGB Curves for example). But. What about most important thing. Would Blender handle something like this?

I’ve asked once on BSE about shape creation with blur and also linked here before by @OmarEmaraDev about scattering created shape. The heart shape in this question is my top node/math achievement so far.

This is why I’m asking about something like this, as creating different shapes are really painful for me and probably not only me. Most of the time to create something I just do it like I’ve tried to make square in first linked BSE question - by masking vectors.

Why would we need something like this?

Alone this node is not much of a help but in tandem with something like scattering/tiling node it would be amazingly powerful workflow for creating basically anything - from floors to pebbles, dirt, scratches and whatnot. Ability to add/subtract/multiply different shapes could create another world for procedural textures creations.

23 Likes

I’m so happy for this proposal!
As a production user of Animation Nodes I’m many times frustrated by the lack of flexibility of the shading nodes.
Like that there is no way to connect a random number to offset an image sequence texture, or to control numbers that limited only through changing the Index ID number of the object within AN…
It’s really hard currently to create motion graphics like that.
And for the wish list corner - Because we create lot’s of HUD elements, will the wire node ever support quads and not just tris?
Here is a project we made that would benefit a lot from this:


We rendered an OpenGL in wire mode as a separate layer, but this method is very limiting…
Anyways - good luck with your exams!! And thank you for participating in this GSOC!
3 Likes

You can do that from the image editor, with vector masks.