Improve Cycles/EEVEE For Procedural Content Creation

I suppose that it doesnt enter in the project. But for my the main things that I need to think in blender like a material generator is mainly.

  • viewports modes to see roughness, metallic, base,… inside lookdev
  • improves in the interface and UX to bake maps, actually nobody knows to use it properly, overwrite maps, don’t export or save automatically.
  • new bake maps, like roughess, metallic… i can not do a lot of maps with blender if I cannot export to my project.
  • allow to bake curvature, also in realtime in cycles like bretch told time ago.
  • could see in viewport a particular point inside the node tree.
  • normal map with option to invert green color.

Of course, noises and transform textures and specially WARP node.

8 Likes

The bake workflow really needs an overhaul… Great points but i think thats not really his focus…

I don’t know, improves in cycles and eevee is improves in viewport and bake interface.

But taht thinks are the base to make a material creator.

What would be valuable is the ability to create your own expressions. This could be a node that allows text input and the creation of your own in- and outputs. You could then input for example:
outputA = inputA * pow(inputB, 2) + 1
This would of course be restricted to the existing Math operations. This way instead of creating huge networks of Math Nodes, a single Node with an expression would be enough.

Adding in and Outputs could work like it currently works with NodeGroups - in the Sidebar (with your additional functionality to controll the type).

An Example would be Rendermans PxrSeExpr

28 Likes

Thumb up for 4D noise :+1: This is also very useful for creating tiling 2D textures, I did some initially tests, see: texturing - How to make tileable procedural noise texture? - Blender Stack Exchange

Also note that even 6D would be useful if you want something that tiles in both x/y and time, e.g. looping animated 2D tiling water texture.

Btw. maybe you already saw this: https://youtu.be/6sqZghF48ig

3 Likes

I have some suggestions, let me know what you think about them. (English isn’t my native language thank for the consideration & your hard time reading it :slight_smile: )

  1. “ReMap Node” I don’t mean the one or similar to the one that already exists, I want to be able to use vector manipulation in the middle of the node tree and not just at his start. For this need I suggest a node that will contain two sockets, color and vector, this node will take the texture that has been generated and kind of change it to be a new texture with a default “generated” mapping. Until now the way to accomplish that effect is making a node group, but in my opinion, my way will create a more efficient and flexible node tree.
  2. “Numerical View Node”, We already have the View Node that converts any kind of information to a readable one by using the emission node. What I suggest is a View Node that will take the round of the input texture and write its Value upon the mesh in the viewport. The problem is that it’s not so informative about the exact Value, so I suggest the Node will have a pixelated option in which you can control how small each pixel is and for each of them the viewport will write its value. I have been posted this In RCS but due to my poor English, I think nobody gets what I suggest (I know, Kind of sour loser, anyway I still have the mock-up)

5 Likes

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.