Experimental SDK build: new Node-Based Material Editor (with sample contents)


Recommended Posts

We have released an experimental SDK build to demonstrate work in progress on the new node-based Material Editor that enables you to create your own materials visually without writing a single line of code. 

graph.jpg

The experimental build includes a pack of material graph samples created using the new Material Editor to give you a quick overview and demonstrate its features and capabilities.

We appreciate any feedback regarding the functionality, feature-completeness, ease of use of the new tool - together we can make the future production version better!

The production version of the node-based Material Editor is expected in one of the upcoming SDK releases, but not in 2.14. The UI may change, but the workflow shall remain the same. 

If you want to try out the new Material Editor (Community edition):

  1. Click the SDK download link below. Downloading of the experimental SDK build will start automatically. 

    Download link: https://l.unigine.com/sK_PJghek

  2. Once the SDK ZIP-archive is downloaded, unpack its contents to any location on your computer.
  3. Open the SDK Browser. Go to the Products tab, click Add Installed, then browse to the location of the unpacked SDK and click Select Folder. The SDK will be added.
  4. Make this SDK default by clicking the Make Default button.
  5. Follow the link below to download the materials samples pack (as a ZIP-archive):

    Download link: https://l.unigine.com/shadergraph_samples

  6. Once the samples pack is downloaded, create a new project and unpack the contents of the ZIP-archive to the data folder of your new project.
  7. Open your project in the UnigineEditor and use the Asset Browser to locate the material_editor_samples folder in your project's data folder.

Now you're ready to start exploring the new Material Editor, open worlds and check out all the samples. For your convenience, we have also prepared a special section in the documentation explaining key aspects and giving a brief description for each of the samples.  

Here is a quick video guide through all the steps listed above:

If you have a Community Pro, Engineering, or SIM edition, to try out the new Material Editor please submit a request (containing your UNIGINE account name) in one of the following ways:

  • via a private message to s1lent (Discord)
  • via a private message to silent (Unigine forum)

Once your request is processed you’ll get a reply with all necessary instructions on downloading and installing the build.

Graph Samples

graph.jpg

graph.jpg

graph.jpg

custom_code.jpg

portals.jpg

  • Like 1
Link to post

Known Issues

  • Material Editor is available only for RELEASE binaries.
  • Crash on connecting an edge from any node to the Destruct node.
  • Crash on an attempt to set a new value to a swizzle via the Selection window.
  • Crash on an attempt to save a currently opened material graph, after deleting the corresponding *.mgraph asset in the Asset Browser.
  • Crash on generating material from an *.mgraph asset stored in a read-only mount.
  • Crash on saving a graph containing more than one Final Material node.
  • Names assigned via the Material Editor (for nodes, ports, etc.) cannot contain spaces, this may lead to shader compilation errors, and the material won’t be rendered.
  • Incorrect mouse positioning when connecting an edge to a port adapter may lead to building up a chain of adapters (swizzles).
  • Modifications made to subgraphs are not reflected in material graphs that use them, you’ll have to close the Material Editor and reopen it again.
  • Cloning nodes creates copies having the same names, to ensure proper graph functioning you have to change names manually.
  • Quick double-click on an *.mgraph asset opens the Material Editor and triggers a rename operation.
  • Issues with the Delete key when editing port adapters (swizzles), use Backspace instead.
  • Division by zero does not raise an error when a value is passed to the divisor port via an adapter (swizzle) containing a variable. 
  • Object’s wireframe is not rendered on materials generated from graphs.
  • LOD fading does not work properly for materials generated from graphs.
  • Shadows for materials generated from graphs ignore alpha test.
  • Zooming out does not take the mouse cursor’s position into account.
  • All disabled scriptable materials added to the global list via the Settings window in the UnigineEditor become enabled on opening the Material Node Editor.
  • Like 1
Link to post
  • binstream changed the title to Experimental SDK build: new Node-Based Material Editor (with sample contents)

Hi,

This looks really great!

I quickly browsed the samples, but couldn't find a way to simulate these:

  • a multi-layered material, such as a car paint or an oiled surface
  • the "wire" geometry inflation
  • a way to move vertices (not tessellation+displacement, just moving vertices)

Thanks!

Link to post

Hi Stephane, That's the beauty of Node-based shader editor graph, you can implement you own materials easily and don't wait until the next SDK release :)

 

Quote

a way to move vertices (not tessellation+displacement, just moving vertices)

Right now vertices movement via texture isn't working. You can get the identical results via displacement.

Car-paint should be easy to add, but it may have some noise artifacts in motion. Will see how it goes.

Wires can be done via vertex positions I guess

Thanks!

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to post

As a first immediate use case, I'm trying to recreate my "long cable" shader. This one uses the wire modifier to ensure the cable has always a minimum screen thickness, and its opacity is a function of the distance to the camera (like fully opaque from 0-100, then some fct to fully transparent at 4km).

At the moment, I can't find a way to access the fragment position. There is a "Position" and "ScreenPosition" but I don't quite get how to use them.

Also, the "wire" thing is a but obscure to me, how to use a displacement to do that without creating a gazillion of tiny-tiny polygons over 4km...

Link to post

I will try to make a graph for this material and give you screenshot of it. Mb vertex position is broken now.

Link to post
  • 1 month later...

Hello, quick suggestions:

  • you use "trinary" for operators with 3 parameters. While the word exists, I think it's much more common to use "ternary" for this usage.
  • Could we have access to LOD parameters of a surface (min/max visibility and fade)
  • Also the intersection/collision enabled and mask value
  • I couldn't find a way to use the output value of the Material Mask node
  • Hovering over a connection point should display a tooltip with its type (int, float, etc)
  • I would be great if, when you click and drag the output handle of a node, when you release in an empty spot, a "Create Node" list would appear pre-filtered with only connectable nodes. This would super-ease the graph creation.
  • Dropping a node on a connection line should put the node as a middle-man in the connection. (ie If A----B and we drop C on the line, then we should hend up with A--C--B). Again, this would be a very efficient to quickly create graph.
  • In addition to the Material Mixer, a Material Adder would be great (not limited to 2 inputs). The final result would simply be the simple addition of the result of each input. This could be easily used to simulate multi-layered material, without needing an additional transparent mesh layer.

Thanks!

Link to post

Thanks for the feedback!

  1. Sure, that's a misprint :)
  2. That's should be doable, however I can't say if it would be with a first stable release or will be added later.
  3. Highly unlikely, only material mask may be used
  4. That's because current material mask node is not working as expected. Will be fixed in the future versions.
  5. Yep, nice addition - will be added in the future.
  6. Sure thing, will be added in the future as well.
  7. That's sounds great for a very simple graphs, but I'm afraid with more complex things it would lead to unwanted random connections that would decrease productivity. Maybe we'll add some setting that defines desired behavior.
  8. That's also not how the materials work. Material adder as you described will simply sum all the materials parameters (not the materials on the screen). It will not allow you to do the multi-layered materials.

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to post
  • 3 weeks later...

I would like to add my 2 cents.

What's a point of unification of all shaders into one material? Sure, Unreal Engine went that way.

But why not keep each shader separated? Preferably by making in/out data clearly visible.

By uniting all shaders in material editor, you make passing calculation made on vertex shader to pixel shader virtually impossible. And what about geometry+hull shader for custom tesselation?

Link to post

tower120

The main purpose of material graph is to let artists an ability for easy materials creation and customization. Adding another layer (vertex / pixel shader) into the graph will make it harder in understanding and may be very disturbing. Maybe we will initially find a proper solution for this, but not in the initial release.

Quote

And what about geometry+hull shader for custom tesselation?

Do you need to write a custom tessellation logic in nodes? Right now we don't have any plans to add custom geometry/tessellation nodes (but you still can do this in a regular shaders by writing a code).

Thanks!

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to post
8 hours ago, silent said:

Adding another layer (vertex / pixel shader) into the graph will make it harder in understanding and may be very disturbing. Maybe we will initially find a proper solution for this, but not in the initial release.

Just want to point, that vertex / pixel shader logic is kinda mixed with this approach. You have vertex displacement slot in your final node. It maybe tempting for artist to link nodes from ps to vs logic. They're visually indistinguishable. You need to trace where that node comes from - that's not always that easy.

Most of the time artist work with pixel shader part. And if he/she touches vertex displacement - that is clearly work independent from ps part. I think splitting vertex and pixel shader logic in separate tabs of material graph would make sense... (I imagine that vertex part in most cases remains empty)

And if whenever we decide to calculate something on vertex part - we're all code now. Tech artists sometimes do understand that it is better to move part of work to vertex shader.

I see that most of the work is already done in the way Unreal does, so I don't expect any changes... But IMHO that's not the best possible approach.

 

8 hours ago, silent said:

Do you need to write a custom tessellation logic in nodes? Right now we don't have any plans to add custom geometry/tessellation nodes (but you still can do this in a regular shaders by writing a code).

That's more a question of interop between UUSL geometry/tesselation shader code and artists material graph. Each time artist change something in material graph that would need to be copy-pasted in code-based material. If you could address interop issue somehow, there would be no need in geometry/tessellation nodes, I guess.

Edited by tower120
Link to post