Page 1 of 10

New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 2:45 am
by radiance
Hi all,

We have only a few more major features/changes to implement and we will publish v1.0 final. (new render kernel, etc...)

Next week we also have a new developer starting and one of his first tasks will be adding several new nodes to complete the node collection for our first final release.

I would like to use this thread to discuss them and get feedback / ideas from the user community on what the best / most useful nodes would be to add.

Note that any possible nodes presented here or discussed are not guaranteed to appear in v1.0 final, we might cancel some or move some to the roadmap for subsequent releases after the first final version, based on complexity and requirements.

Here is an overview of the nodes that we have assembled:


DYNAMIC OPERATORS & FUNCTIONS

Dynamic nodes are nodes that have no default type. They have grey input and output pins for the actual data type they manipulate (eg float, int, texture, material), and they automatically change to a type when they are first connected to another typed node (currently all nodes in 2.44 are typed)
This makes them generic, eg the same multiply operator can be used for int, float and texture values for example.
Since most of these are simple functions, they are very easy and quick to implement so we can add heaps.

Math Operators:

* add (+) [int, float, texture]
* subtract (-) [int, float, texture]
* multiply (*) [int, float, texture]
* divide (/) [int, float, texture]

* invert [float, bool, texture]

* power (pow) [int, float, texture]
* square root (sqrt) [int, float, texture]
* modulo (mod) [int, float, texture]
* exponent (exp) [float, texture]
* logarithm (log) [float, texture]

* sine (sin) [float, texture]
* cosine (cos) [float, texture]
* tangent (tan) [float, texture]
* arc sine (asin) [float, texture]
* arc cosine (acos) [float, texture]
* arc tangent (atan2) [float, texture]
* arc tangent w 2 params (atan2) [float, texture]


CONTROL FLOW SWITCHES (can switch connection between nodes based on an input value)

* switch (simple switch between two dynamic inputs, controlled by bool or int) [accepts any type for switching]
* multiswitch (switch with dynamic number of inputs, minimum 2, inputs can be added and removed, controlled by int, eg 0, 1, 2, etc...) [accepts ant type for switching]


TESTS (test value of inputs, and returns bool true or false, can be combined with switch above for elaborate testing)

* equals (==) [bool, int, float, texture]
* not equal (!=) [bool, int, float, texture]
* greater (>) [bool, int, float, texture]
* smaller (<) [bool, int, float, texture]
* greater or equal (>=) [int, float, texture]
* smaller or equal (<=) [int, float, texture]



STATIC OPERATORS AND FUNCTIONS

These are remaining node, which have a statically defined type, eg they are not dynamic and must be used with the right types.

Math Functions:

* ceiling [float]
* floor [float]
* absolute [float]


Boolean Logic & Operators:

* AND
* OR
* NOT
* XOR


List And translation of Values:

* listint (Combobox, strings can be added to list, outputs selected string as int index value, can drive a switch or multiswitch for presets. Being able to drag these combo boxes and dock them into menu bars should create very useful UI customisation for presets by users.) [int]
* unitsystem (a float value textfield input with small combo box at the right to select unit type, eg, cm, m, km, foot, mile, outputs converted float value in octane meter format) [float]
* lumensystem (node with watt and efficiency inputs for determining correct area light power) [float]
* floattotexture (converts float node value into texture) [texture]
* inttotexture (converted int node value to texture, uses extra scale parameter to define integer range) [texture]

Procedurals and Noises:

* rand (returns random float value in range [0-1], always same seed/sequence) [float]
* perlin3D (3d low level perlin noise texture) [texture]
* noise3D (3d low level noise with no interpolation, eg cell based noise) [texture]


Colours and spectra:

* hsvspectrum (HSV control colour spectrum, similar to current RGBSpectrum) [texture]
* dataspectrum (spectral distribution that can be edited / loaded from file, enables use of measured spectra) [texture]



That is it, it's a large list, and for me the ultimate node collection for low level development.

The point would be to supply a large amount of low level nodes, which then can be used by power users to develop more complex high level macros as prototypes. If those prototypes turn out to be useful, we can add them hardcoded as native nodes in subsequent releases, to make them faster.

This list is not definitive, we would appreciate your feedback about the list, and your ideas and suggestions.

PLEASE, before you post your requests, don't start suggesting any high level nodes if they can be built with the low level nodes above. We will definitely add more high level nodes, if they are essential and will be used often, and if they cannot be built with the above nodes in macros, or would be too complex and slow to use for practical purposes.

We will be adding / removing and merging some of these on the list during the weeks to come as we go along.
We are also not making any promises regarding when and how much of the above nodes will be I plemented, as it's a big list. :)

Note that this list is not definitive, it does not reflect all new nodes to come, we will be adding other nodes to support the features we will implement for v1.0 final, for example transforms and scene/mesh groups.

Looking forward to your feedback,

Yours,
Radiance

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 3:49 am
by grimm
That's a great starting list! I don't know if these would be considered high level or not, but the ones I would like most to see are:

1) Linear Algebra nodes, for cross and dot products, etc.
2) Access to the geometry, at the very least access to the surface normal and the x, y, z coordinates of the ray/object intersection.
3) Vector node/object.

With these and the others you have listed, we could do some very amazing procedural textures. Thanks. :)


oops edited: I forgot to add that it would be nice to have a vector object as well.

Grimm

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 4:06 am
by radiance
Hey Grimm,

We currently have float, float2 and float3, and the last one is a 3 component vector.
Dot, cross and other stuff would be handy too, just need to figure out how to integrate them in the shading system of the renderer. I will have a think about it.

Radiance

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 4:25 am
by grimm
Excellent, that's perfect, I forgot about the float objects. :oops: Thanks Radiance. :)

Grimm

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 6:20 am
by yoyoz
I suggest adding a Voronoï procedural node.

Cheers,
Yoyoz

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 7:49 am
by tungerz
Object mesh node to bring in different obj's into the scene? ex:add in extrs props to a scene

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 8:06 am
by matej
Wow, that's a great list of features - more than I have hoped for :)
* listint (Combobox, strings can be added to list, outputs selected string as int index value, can drive a switch or multiswitch for presets. Being able to drag these combo boxes and dock them into menu bars should create very useful UI customisation for presets by users.) [int]
Will this be useful to create material pre-sets = sets of input parameters for some macro?

I give my vote for Voronoi noise (great for organic, cellular stuff) and of course a tiling procedural (for square or rectangular grids, with grid width control) is a must.

Additional stuff:

* more texture blending modes
Apart from mix & multiply, other blending modes should be added: subtract, add, overlay, divide, difference... These could probably be constructed with all that low-level controls, but for flexibility should be hardcoded

* Transform UV
A transform node that would work on UV coordinates per texture, with the following operations: ScaleX, ScaleY, TranslateX, TranslateY, MirrorX, MirrorY

So, with all that controls, I take it that we'll have also some generic node container, that would allow arbitrary (type and number of) inputs, as well as arbitrary output?

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 8:35 am
by Elvissuperstar007
make a normal rotation of the texture

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 8:59 am
by Ice_Juice
And what about the promise of a new engine?
It is expected in version 2?

Re: New nodes feature discussion towards v1.0 final

Posted: Sat Mar 05, 2011 9:01 am
by face
It would be nice if we have new commandline options, maybe i1-i10, f1-f10 and b1-b10 for int,float and bool.
And a node that can read it. So we can change some things from extern.
One possible use is to switch lights on/off and change the power...
Or blend between two textures...

Maybe it´s better to have an -f option that reads a xml-like file with the variables, that the node can use.

face