Page 2 of 2

Re: Material pipeline feature requests

Posted: Tue Oct 19, 2010 8:30 pm
by tungee
Would be also nice, when there would exist a slider, where you can set the resolution of an texture.
For example: 1/2, 1/4 resolutionof an texture=> you can save Vram.
Especially for objects which are fare away doesnt need HQ textures.
I dont know if its technical realizeble. :?:

Re: Material pipeline feature requests

Posted: Wed Oct 20, 2010 12:35 pm
by matej
These are additional inputs that would apply to the point 2.) in the first post - and which could be more generally called; request for more node operations

2.) a) A color ramp (band / gradient) node

Procedurals are just a grayscale texture, we would need a node to colorize that texture (procedural or grayscale image texture). Of course you can mix two colors with a procedural, which can be further mixed with another color... but that's too limiting an cumbersome. The ideal solution is a color ramp (or colorband, or color gradient, it's all the same thing...), that colorizes the noise according to it's shade of gray. The colorband node should allow to add (and remove) an arbitrary number of breakpoints for each color we want to introduce, should allow setting an alpha value for the breakpoint that mixes the breakpoint color with grayscale original and possibly should have different interpolation types to choose from. The color band node can be also used to control contrast of an texture.

This feature has already been asked for, in this and this thread.

The picture below is taken from Blender. In it, the colorband feature is used to create a texture of metal rust points or similar phenomena, that can then be (mixed with the original metal texture and) applied to the specular parameter of a glossy material.
(note: I'm using Blender to present visuals just because this is the only 3D package I own and use, not because I would like to force it's way of implementation)
color_ramp.jpg
2.) b) A Hue-Saturation-Value node

A HSV node would be very useful to control coloring tone of procedurals or imported images, without the need to create and import them from outside - say you import a diffuse texture for a metal material from outside, but create a specular texture (change tone, to have different reflections) from it inside Octane. You save importing one RGB image, which can be a lot.

A HSV node is also useful to desaturate a texture for use in single channel (grayscale) material parameters (eg. bump). This is automatically done in Octane if you connect a RGB tex to the input, but the transformation is out of your control. With a HSV node you could also tweak contrast of this desaturated texture. The below example takes the previous one further and desaturates the rusty flecks tex. for use in bump or roughness parameter of glossy metal material. It also changes the contrast.
hsv.jpg
2.) c) A gamma node de-coupled from image texture node..

And a way to separately control gamma(s) of a multitude of textures, by a single input value (pin). A material macro can be arbitrary complex. A user can be presented with the option to input an image texture pattern (for a wood or textile, for example), that is used in multiple operations throughout the macro internals - the image is the same but the gamma of the image (possibly and usually) needs to be different for every operation.

The same goes for every texture parameter (scale, power, etc...) - see the 5.) Basic math nodes request in the first post.

Basically this falls in the problem of "being able to keep constant the ratio between a multitude of same-category parameters inside the macro, based on just one user-inputed value from outside". Users will not like to work with separate scale or gamma parameters for every texture in the macro.

2.) d) Logical operators

This one is a little more advanced and just an idea, but bear with me :mrgreen:

With material abstraction on a higher level (see the end of the post for explanation), there is the need for more control and different ways to interpret user data. You could offer even more flexibility with one material macro, if you could be able to exclude or include parts of the macro internal pipeline from the calculation, based on boolean user input (or any other input evaluation - float, int, arbitrary input pin set / not set by user, etc...).

Say you created a carpaint material, and want to allow the user to choose if the paint has specks or not. Or if a textile material has sheen (mix diffuse with glossy in the final result) or not (don't mix glossy in the final result). Or being able to choose between adding hammering effect to copper material or not... You would need an if-then-else node to bypass or include certain calculations in the macro internals, based on boolean user input (a complicated way to say checkbox :) ). Logical operators could also work on numbers (check if a certain input value is in a range, less than, greater of -> steer the pipeline accordingly) or on presence of user inputs (a user didn't input a pattern image texture -> use a procedural default). A myriad of options...

With more powerful macros the LiveDB will be smaller (no need for billions of generic carpaint materials), easier to find way around, and more manageable (of course this comes at a price of macros that are more difficult to create and manage - but that's not a problem of artists).


***** Explanation for the necessity of all this stuff (or at least my interpretation): *****

Of course users who create (or buy) image textures and import them for all standard shader parameters (diffuse, spec, bump..), will hardly see the point in all this. But I'm mainly thinking about the LiveDB here. For the LiveDB to not be just another grouping of pre-made image textures with a multitude of generic shaders, the creators of material macros (and texture / emission macros) will need all this tools to present users with a powerful and flexible material abstraction.

For example; in other material repositories the user downloads a leather-like shader and tweaks it's shader level parameters (bumpiness, specularity...), but (I sincerely hope) LiveDB could be different - the user downloads a leather material and it's parameters are of a higher abstraction level; eg. the user inputs density of cracks of leather, directionality of cracks, how worn out the leather is (that's controllable not just by spec, but also roughness and bump), etc... Basically users will work with real-life material characteristics, not low-level shader parameters. Of course you can open a material macro and see what's inside, maybe tweak something, but you shouldn't need to. A properly constructed material macro will offer the user all (in a practical limit) tweak-able options of a real-world material. For this to happen, we need a lot of pixel-manipulating features and other components that will allow powerful manipulation of data inside a macro.

This may sound complicated to some of you, but in the end all this technical features will bring the most to those artists who don't like all this technical stuff - you'll be able to completely ignore them and work with materials on a higher abstraction level ;)


This is just my "little" rant. :D

Feel free to add everything you would like to say (in regard of material pipeline) - we need to state our opinions and wishes to the devs now, while Octane is still beta.

Cheers!

Re: Material pipeline feature requests

Posted: Fri Nov 26, 2010 3:43 pm
by matej
I would like to add some 'little' things:

9.) Distinction between image file and image texture

The image texture is created from an image file and has to be 'loaded' (ie: opened from a file browser) each time you need the said image. This seems not a big deal, just a little confusing because it obscures the fact that the image is not loaded each time (there's no duplication), but just referenced. It becomes annoying when you link the said image multiple times in your node system, and then you would like to replace the image with another one - you must manually re-link all the texture nodes that use the old image. When macro node duplication will be implemented, changing your mind will become even more tedious.

Other 3D packages use a different system: there's distinction between 'image file' and 'texture image'. You load an image once, and then create multiple textures from it. When you want to change the image you change it only in one place and all textures are updated.

This could be implemented with an image list node in G.E. or image list tab in the N.I. where to upload image files. When you'll be creating textures you would select the image from this list, instead from file browser. Updates to the list, would reflect throughout the whole system.

10.) Ability to invert normalmaps

IIRC Proupin filed a feature request for this (can't find it). Elvissuperstar007 was also asking for it in this thread. I hope you guys don't mind me adding this here.

This is self-explanatory. Invert should be able to work also on normal maps.

Re: Material pipeline feature requests

Posted: Sun Nov 28, 2010 3:48 pm
by Proupin
We hear you matej :) ... nothing to say about the right material panel? because imho that is the single most improvable ("to improve") section of Octane's UI...

PS: I seppuku'ed the normal flip post

Re: Material pipeline feature requests

Posted: Sun Nov 28, 2010 5:24 pm
by matej
Proupin wrote:nothing to say about the right material panel? because imho that is the single most improvable ("to improve") section of Octane's UI...
A whole lot :)
But I think that talk about this would fit more into a thread about GUI ergonomics in general, rather in 'material pipeline'. Granted, I made some requests here that could fall in both, but while the Node Inspector is bloated it doesn't impair the workflow much - improving the Graph Editor is really crucial, IMO.

There was some talk about GUI like here and here. (I'm sure there were more posts in the thread on the first link, including a sample of controls compactness from Blender I posted... the posts seems to have dissapeared??)

Since I don't want to look like a despot, I'll let someone else create a GUI usability improvements thread... 8-)
Proupin wrote:PS: I seppuku'ed the normal flip post
And there I was, cursing once again the search function... :lol:

Re: Material pipeline feature requests

Posted: Sun Nov 28, 2010 10:22 pm
by teecee2107
tungee wrote:I agree to 100% of the suggestions.. :P
So do I. Thanks for 'sumarizing' all my needs, Matej ;)

Re: Material pipeline feature requests

Posted: Tue Jan 25, 2011 12:00 pm
by matej
Recently I had another small idea.

11.) Mix material that would take bump / normal data for the purpose of better defining the border between two mixed materials

When mixing two materials you have the option to define the amount of mixing across the object. In many cases two materials need a visual border between them, like;

* rust on metal (rust is raised)
* paint over wood (paint is slightly raised)
* scratches that reveal bare metal underneath paint (scratches are lowered)
* thick coatings, liquid spills, wallpaper peelings, etc, etc...

For things to look right & neat (a clear distinction border between them) you have to add the mixing texture to one or both materials involved in the process as additional bump intensity (multiply or mix it with the bump that is already there). This effectively ties up the basis materials to one object (because usually the mix amount texture is painted specifically for one object). If you want to use the basis materials for another (different) object, you have to duplicate them and repeat the process. It also forces to introduce node parts into the basis material, that really apply only to the mix material (see the blue outline in node system below) - possibly creating problems if the basis materials have to be used as standalone.

My question is; would it be possible (feasible) to introduce this additional bump (or normal) information in the mixing stage; like having a mix node with a bump pin, that would add the bump texture intended to show the border between materials (which is usually the same texture as amount mix texture) to the bump data that is already present in the basis materials?

Examples of renders; the render on the left uses no additional bump when mixing rust & iron, the render on the right uses a tad of additional bump in mix regions to emphasize the rust accumulating. A slight difference, but essential in some cases.
mix-bump.jpg
This is the node system, where it's clear how the mix texture is used. On the left side there are basis materials which are mixed to produce different combinations for different objects. The mix texture is piped to the iron material node and added to it's bump (piping it to the rust material would also work) - the outline on the right picture shows this addition. Unfortunately this way the iron material is usable only for the bucket and nothing else. It would be great to have a system where you could reuse the same basis materials for different objects / phenomena, without much hassle with duplicating your material nodes. A mix node that would take also bump info, would help such work-flow.
mix-bump_nodes.jpg
Basically what I (and others, probably :) ) would like to be able to do is create basis material and apply them to different objects, through different mix stages, without much complications.