[RELEASE] Shader Forge - A node-based shader editor for Unity

2456721

Replies

  • Acegikmo
    Fizzly wrote: »
    Relative snapping when they are in-line sound very nice. But if snapping them to a grid is faster / less of a hazzle for you to program that would do the trick too :D Thanks man!
    I'm looking forward to it. Any ideas on the price already?

    I'm guessing the price will be somewhere in the $40-$90 range, depending on how many features will actually be in the version at release. Hard to tell at the moment!
    seforin wrote: »
    to not push on this subject AT all, but any idea when we can alpha/prototype this ?

    Around two weeks until some form of Alpha is ready, I think. Depends on how many issues there will be along the way :)
    Jeka wrote: »
    Awesome ! Where I can sign to beta test ? :)

    PM me your mail address and name, and I'll add you!
  • NomadSoul2501
    Offline / Send Message
    NomadSoul2501 polycounter lvl 7
    Amazing work!
    This is what Unity has been missing the most.
    Well this and a NOT broken way to handle prefabs ;)

    Looks like you are absolutely on the right track.
    The user interface looks very artist oriented which is amazing imo.
    I'm loving all the features you are putting into this.

    Keep it up!
  • Ace-Angel
    Offline / Send Message
    Ace-Angel polycounter lvl 6
    Cheers for the answers Acegkimo!

    One more question if you don't mind, say I'm working on my end with a license of Unity Pro and a copy of your plugin, while on the other end of the line, I have a friend with Unity Free but NOT of you plugin.

    I take care of all the artwork and shader, and he does all the programming for the game (he does NOT touch any shader or such files related to your plugin).

    Would we be able to share the shader files in a native way so we visually have the same thing? For example, if I made a package that contained a skin shader and sent it to my friend so he codes in character programming, would there be any issues?

    Maybe I'm complicating the question more then needed, but I would like to know how compatible (and what kind of file directory setup we are looking at) between two people working on a project might experience for your plugins and the shaders it spits out.

    I have read about how some plugins FORCE you to buy 2 licenses to make things work, even if in theory it shouldn't be needed, so I was curious as to how that would work.

    Cheers!
  • Nosslak
    Offline / Send Message
    Nosslak polycounter lvl 10
    This looks awesome! Thanks for creating this! I do have a few small suggestions:
    1. Make every node moveable (this is a small nuisance in UDK where you can't seem to move the last/end node).
    2. Make it possible to enter constant values directly in the nodes without using new nodes every time. Here's an example from Blender, where you can either enter the values directly or attaching separate nodes.

    These might already be implemented, kind of hard to tell from the screenshots. Just thought I'd chime in anyway.
  • skankerzero
    I think it's pretty telling when I get more excited for something like this than most art posts in this subforum.
  • Acegikmo
    Amazing work!
    This is what Unity has been missing the most.
    Well this and a NOT broken way to handle prefabs ;)
    Looks like you are absolutely on the right track.
    The user interface looks very artist oriented which is amazing imo.
    I'm loving all the features you are putting into this.
    Keep it up!
    I think it's pretty telling when I get more excited for something like this than most art posts in this subforum.

    Thanks! :D
    Ace-Angel wrote: »
    Would we be able to share the shader files in a native way so we visually have the same thing? For example, if I made a package that contained a skin shader and sent it to my friend so he codes in character programming, would there be any issues?

    I have read about how some plugins FORCE you to buy 2 licenses to make things work, even if in theory it shouldn't be needed, so I was curious as to how that would work.

    There's no difference between what features Shader Forge will provide in Unity Free vs Unity Pro, apart from the fast that Render Textures are disabled in Unity Free. Shader Forge will generate *one* file for each shader, which is the actual shader file :)
    I've planned to store all the node data as comments in the actual shader code, to make management of them as streamlined as possible for the users.

    So no, the other people don't need the plugin to use the shader, but they would need it to modify them with Shader Forge.
    Nosslak wrote: »
    This looks awesome! Thanks for creating this! I do have a few small suggestions:
    1. Make every node moveable (this is a small nuisance in UDK where you can't seem to move the last/end node).
    2. Make it possible to enter constant values directly in the nodes without using new nodes every time. Here's an example from Blender, where you can either enter the values directly or attaching separate nodes.

    1. All nodes are movable at the moment! Which also gave me an idea. It would be nice if there was a checkbox or hotkey to enable hierarchical dragging. As in, all the child nodes move when you move their parent node.
    2. Constant values should have a smoother way of handling it, yes. For example, multiplying a texture with a constant of 2 looks a bit silly, because you connect this huge node with a large white preview that doesn't provide any additional information. I might make a special case just for single values like that :)
  • uncle
    Just wanting to say this is good and exciting effort. Unity needs this very bad.
  • Fizzly
    Offline / Send Message
    Fizzly polycounter lvl 6
    Acegikmo wrote: »
    1. All nodes are movable at the moment! Which also gave me an idea. It would be nice if there was a checkbox or hotkey to enable hierarchical dragging. As in, all the child nodes move when you move their parent node.

    Good idea! Sounds very usefull :)

    Could you maybe show us a little bit/sample of some shader code it produces? I'm wondering on how it looks / how optimized it is.

    Thanks!
  • Acegikmo
    Fizzly wrote: »
    Could you maybe show us a little bit/sample of some shader code it produces? I'm wondering on how it looks / how optimized it is.

    Thanks!

    The code it generates at the moment is not that pretty! I haven't spent time optimizing the code generator yet, but I do have a plan for it.
    I'm working on the core features first :)

    That said, it still runs through Unitys own shader optimizer, which has done an amazing job for the tests I've done. For example, if you multiply a constant with a vector 3 (color), and then use that on something else, Unitys optimizer will bake that down into just one instruction instead of two. It also removes redundant calculations. If you multiply a texture with 0 for example, it will remove the texture and multiply instruction entirely from the compiled shader code, since it won't ever be able to affect the output. If you multiply it with 1, it will remove the multiplier entirely, because it leaves the texture unchanged. Which is pretty cool.

    But like I said, I do have a plan for optimizing the code it spits out, as well as make sure it's using sensible variable names and such. Having the code readable is nice!
  • quickfingers
    This looks really promising! Keep going man.

    Just one small request if I may, don't forget about us deferred rendering lovers and do allow us to do custom lighting in the pre pass.

    Anyway, definitely the prettiest looking shader graph editor for Unity so far by the look of it!
  • cupsster
  • Fizzly
    Offline / Send Message
    Fizzly polycounter lvl 6
    Acegikmo wrote: »
    That said, it still runs through Unitys own shader optimizer, which has done an amazing job for the tests I've done. For example, if you multiply a constant with a vector 3 (color), and then use that on something else, Unitys optimizer will bake that down into just one instruction instead of two. It also removes redundant calculations. If you multiply a texture with 0 for example, it will remove the texture and multiply instruction entirely from the compiled shader code, since it won't ever be able to affect the output. If you multiply it with 1, it will remove the multiplier entirely, because it leaves the texture unchanged. Which is pretty cool.

    I didn't know about that :) Sounds very promising. Oh man.. can't wait!

    Did you encounter any big problems / unity restrictions maybe yet? It seems to go pretty flawless so far from what I'm reading :)

    Keep it up!
  • Acegikmo
    cupsster wrote: »
    Can I test for you?

    Yes, PM me your mail address :)
    Fizzly wrote: »
    Did you encounter any big problems / unity restrictions maybe yet? It seems to go pretty flawless so far from what I'm reading :)

    It's going quite smoothly so far! I have yet to do the more meta things though, such as saving/loading the node data etc.
    We'll see what happens!
  • BrendanGM
    Looking very good so far. Is there going to be something that will show/allow you to edit what render queue the shader will be in and a simple box to edit the priority from that queue?
  • Drew++
    Offline / Send Message
    Drew++ polycounter lvl 7
    This looks great! You should totally add a loop node, and an array node. :) 2D Array can have adjustable amount of boxes that you would fill out! Either float, float2, 3 or 4.

    Basically the loop makes a adjustable size box/rubber band and anything inside is in the loop. It has 1 output, which is the iteration and you can choose less than, greater than, less than or equal and greater than or equal? You would also need a 'declare' node, so you can declare/re-declare a variable outside of the scope of a loop.

    Also a node for exp2, length, step, clip, and discard. And potentially expose matrices? Would be nice for mul() function. Otherwise just to a transform node, and transform position node too.

    One other one is instead of "OneMinus" call it invert, with options to select Negate(x = -x), One Minus( x = 1-x ) and Multiply( x = x * -1 ).
  • Brendan
    Offline / Send Message
    Brendan polycounter lvl 6
    Do you have any plans for user-noded lighting models? Either a more comprehensive box-tickig system (cook-torrence, oren nyar, half-lambert etc), or enough nodes to re-create those would be good.

    Also, It'd be fantastic to have them in the same graph as the rest of the nodes. Bonus points if you run code that can tell if the lighting information is there and can determine if the shader code output will be written for deferred or just forward.

    One request I'd like to make is, in addition to matrix modes (customizable of course n by n matrices), I'd like shorthand texture rotation and normal map rotation nodes.

    A second request would be the ability to group and 'compress' node groups. Like, if I was making a worldspace triplanar shader, I'd use world position, multiply by a tiling factor, and sort out directions so it'd choose the right components and UVs for the triplanar bit (also normal mapping). That, on its own, it a handful of nodes, if I could put it in a box, and compress it into one 'utility node' that had some exposed variables (thing worldmachine's macros)....
  • TheCrazyDemoMan
    Offline / Send Message
    TheCrazyDemoMan polycounter lvl 3
    id love to have my hands on this, but the most important question is… Does it support mac?
  • Acegikmo
    Thanks for all the feedback and nice comments :)
    Development should speed up now over the weekend and the coming two weeks.
    I'll of course update in this thread continuously!
    BrendanGM wrote: »
    Is there going to be something that will show/allow you to edit what render queue the shader will be in and a simple box to edit the priority from that queue?

    Yes!
    Drew++ wrote: »
    This looks great! You should totally add a loop node, and an array node. :) 2D Array can have adjustable amount of boxes that you would fill out! Either float, float2, 3 or 4.

    Basically the loop makes a adjustable size box/rubber band and anything inside is in the loop. It has 1 output, which is the iteration and you can choose less than, greater than, less than or equal and greater than or equal? You would also need a 'declare' node, so you can declare/re-declare a variable outside of the scope of a loop.

    Also a node for exp2, length, step, clip, and discard. And potentially expose matrices? Would be nice for mul() function. Otherwise just to a transform node, and transform position node too.

    One other one is instead of "OneMinus" call it invert, with options to select Negate(x = -x), One Minus( x = 1-x ) and Multiply( x = x * -1 ).

    Looping and Arrays might possibly be beyond the scope of what Shader Forge will be able to do, apart from the node that will allow you to write plaintext code. I think that node will be quite a lot easier, than trying to design the system to have variables and flow control.

    Added exp2 and step to the todo anyhow :) Might do matrices as well, we'll see!

    Not sure if an invert node is needed, might as well have a OneMinus node and an Invert node. (Negate and Multiply are matematically the same in your example)

    Brendan wrote: »
    Do you have any plans for user-noded lighting models? Either a more comprehensive box-tickig system (cook-torrence, oren nyar, half-lambert etc), or enough nodes to re-create those would be good.

    Also, It'd be fantastic to have them in the same graph as the rest of the nodes. Bonus points if you run code that can tell if the lighting information is there and can determine if the shader code output will be written for deferred or just forward.

    One request I'd like to make is, in addition to matrix modes (customizable of course n by n matrices), I'd like shorthand texture rotation and normal map rotation nodes.

    A second request would be the ability to group and 'compress' node groups.

    Custom lighting is supported, so yes, you can make your own! Currently there is a box-ticking system, that currently supports Unlit, Lambert, Blinn-Phong and Phong. I'll see if I can add Oren-Nayar, Cook-Torrance and Half-Lambert as well.

    You should be able to get them working on both deferred and forward.
    As for matrices, that's another thing that might be out of the scope for this. You should be able to have all the vectors and transform nodes you need. Was there any particular you were thinking of?

    Shorthand rotation of normals/textures would be a rotation node for UV coordinates; or were you thinking of rotating the per pixel vectors?
    id love to have my hands on this, but the most important question is… Does it support mac?

    Yes!
  • RedShiny
    Offline / Send Message
    RedShiny null
    ooh, shiny!

    Would this be able to handle multiple passes? (i think that's the name. for when you want things like that cartoon outlines, overlays that show up over geometry that's obscuring it?)
  • RogelioD
    Offline / Send Message
    RogelioD Polycount Sponsor
    Just wanted to say I think this is amazing. Please keep pushing through, I think all of your hard word is really showing off. This is something Unity needed and you are providing it WITH STYLE. Good luck moving forward!!

    (just please make it affordable =X)
  • tharle
    Offline / Send Message
    tharle polycounter lvl 6
    awesome stuff - would it be possible to create material nodes that interface with the particle system, similar to udk's dynamic parameter node? or is that going to be beyond the scope of this project?
  • Acegikmo
    RedShiny wrote: »
    ooh, shiny!
    Would this be able to handle multiple passes? (i think that's the name. for when you want things like that cartoon outlines, overlays that show up over geometry that's obscuring it?)

    Maybe! We'll see. I'll design the system with it in mind - in case it will be needed later on. Currently there aren't that many use-cases for it from what I can see.

    RogelioD wrote: »
    Just wanted to say I think this is amazing. Please keep pushing through, I think all of your hard word is really showing off. This is something Unity needed and you are providing it WITH STYLE. Good luck moving forward!!
    (just please make it affordable =X)

    Thanks for the kind words RogelioD!
    We'll see how much it will cost once it's finished; still not sure how many features will actually make it in.

    tharle wrote: »
    awesome stuff - would it be possible to create material nodes that interface with the particle system, similar to udk's dynamic parameter node? or is that going to be beyond the scope of this project?

    Interface in what way? I've planned to add support for global variables, which you can tweak from code.
  • imb3nt
    Offline / Send Message
    imb3nt polycounter lvl 8
    This is looking great! I work in Unity at my job and currently have to put in requests for shader changes to the programmers. I've tried using Strumpy and even sat down to try and educate myself on shader coding but this would totally make my life easier.

    Add me to the list of testers if you need feedback and keep up the good work! :thumbup: :thumbup:
  • Fartuess
    gimme gimme gimme! PLS!
  • VictorSantos
    Online / Send Message
    VictorSantos polycounter lvl 6
    seforin wrote: »
    to not push on this subject AT all, but any idea when we can alpha/prototype this ?

    Im using strumpy and hand writing shaders for a project im currently doing and its making me cry slightly with results I can do easily in unreal.
    +1

    This project is truly remarkable, keep it up! Can't wait to try it out.
  • Skiffy
    Offline / Send Message
    Skiffy polycounter lvl 9
    This is great stuff! I think the entire unity artist community would be elated when this is released as a full product.
  • Acegikmo
    After a long week of being a bit too busy to work on Shader Forge, I'll now have a lot more time during the coming two weeks :)

    I just added support for Emission/Self-Illumination, a Power node and a One Minus node!
    So here's some lava-rock-thing:

    progress_day13_emission.jpg

    Huge thanks for all the nice comments, and for signing up for the beta! It's quite a list now.
  • sgtkoolaid
    Offline / Send Message
    sgtkoolaid polycounter lvl 5
    wow this incredibly impressive! shut up and take my money good sir! I can hardly wait for this to be released. this will help me with my work flow so much. Absolutely beautiful. Do you have an approximate release date in mind?
  • RedShiny
    Offline / Send Message
    RedShiny null
    Acegikmo wrote: »
    Maybe! We'll see. I'll design the system with it in mind - in case it will be needed later on. Currently there aren't that many use-cases for it from what I can see.

    Okay! Though i'd like to encourage you if that is a direction you wish to go. I've been seeing this kinda thing (the overlaid while object is obscured by other geometry) in a fair number of games and being able to offer players this added assist to prevent that "where the heck am I?" thing that happens would give game-devs a bit of an edge... and also give your package additional marketability.

    ... that and you'd be able to really give your pack a ton more useability than Strumpy (though decent it has it's limits.)

    That said... what kind of power would a plug in like this take? I know when i would use the strumpy editor, my CPU would go into overdrive on the fan so that made me think that it was really soaking up the CPU's power.
  • Acegikmo
    RedShiny wrote: »
    Okay! Though i'd like to encourage you if that is a direction you wish to go. I've been seeing this kinda thing (the overlaid while object is obscured by other geometry) in a fair number of games and being able to offer players this added assist to prevent that "where the heck am I?" thing that happens would give game-devs a bit of an edge... and also give your package additional marketability.

    ... that and you'd be able to really give your pack a ton more useability than Strumpy (though decent it has it's limits.)

    That said... what kind of power would a plug in like this take? I know when i would use the strumpy editor, my CPU would go into overdrive on the fan so that made me think that it was really soaking up the CPU's power.

    Supporting color for geometry behind objects is way different compared to having actual support for custom multi-pass shaders. I could add a checkbox and a color for the overlay, if that's what it'll primarily be used for.

    But you're right; multi-pass support is quite a big thing to have, especially when it comes to marketing. I want to have it, but I fear it will provide more design challenges than it's worth.

    We'll see what happens in the future :)
    If the tool is a success, and if it's economical to keep working on it after the first release, I will most likely add custom multi-pass support.

    The editor shouldn't be CPU heavy. If it is; there's probably a pretty straightforward way of fixing it :)
  • MrNinjutsu
    Offline / Send Message
    MrNinjutsu polycounter lvl 6
    Most excellent work on this. Anyway I could check this out also?
  • Acegikmo
    MrNinjutsu wrote: »
    Most excellent work on this. Anyway I could check this out also?

    Sure! PM me your mail address, the company you're working for (If any), and what your primary field of work is :)
  • almighty_gir
    Offline / Send Message
    almighty_gir interpolator
    Acegikmo wrote: »
    After a long week of being a bit too busy to work on Shader Forge, I'll now have a lot more time during the coming two weeks :)

    I just added support for Emission/Self-Illumination, a Power node and a One Minus node!
    So here's some lava-rock-thing:

    progress_day13_emission.jpg

    Huge thanks for all the nice comments, and for signing up for the beta! It's quite a list now.

    what i love about this, is the way it shows you it's outputting either a float, or a 3 vector etc. that's such a huge plus for when it comes to debugging.
  • sziada
    Offline / Send Message
    sziada polycounter lvl 5
    This is incredible, I can't wait to see what people can do with amazing tool
  • Anadin
    Offline / Send Message
    Anadin polycounter lvl 3
    Fantastic!, this looks very good already - PM'd if you don't mind - would love to help test, offer some help if I can. Very interested in custom lighting - perhaps lighting graphs or is it possible to add lighting modes?

    My three comments :)

    1. Shader Management. My no.1 hate of Strumpy is how hard it gets to manage many shaders with all of the separate graphs (which lose connections to their shaders), LOD settings, fallbacks, copying and pasting/instancing of similar functionality etc. Absolute number one thing to deal with.
    2. Support for shader keywords? allow us to tied nodes/groups to keywords for ubershaders
    3. Please, please can we have an option to go left to right rather than right to left?
  • Thousand
    Offline / Send Message
    Thousand polycounter lvl 5
  • ikblue
    Offline / Send Message
    ikblue polycounter lvl 6
    Hey this is amazing!
    It looks really good (the user interface is even better than UDK ^^)
    Would love to test it :)
  • Elith2
    Offline / Send Message
    Elith2 polycounter lvl 7
    Looks really promising man, I dunno if it has already been asked but will there be some way to have these shaders compatible with lightmapping? We had no end of bother with strumpy baking with directional maps or keeping spec and normal details when it baked.

    Also would be interested in trying this out.
  • Ehsan Gamer
    Offline / Send Message
    Ehsan Gamer polycounter lvl 6
    WOOOOOW.

    I'm using Strumpy and I have made some advanced shaders with it but this one looks a real ....

    I had problem with strumpy with not having light vector and some really crucial nodes that we have on UDK.

    also DX11 support would be awesome :D

    I can help you with the tests.
  • Acegikmo
    Elith2 wrote: »
    Looks really promising man, I dunno if it has already been asked but will there be some way to have these shaders compatible with lightmapping?

    It's planned to support lightmaps, but I haven't looked into it yet. It will come :)

    Today has been a bit slow - been messing with getting some of the input/background systems to work nicely, and some bugfixing, so there's not quite a visual update this time.

    That said, a Time node is now implemented and working, plus started work on the node browser :)
  • Thomas P.
    Offline / Send Message
    Thomas P. polycounter lvl 8
    Very awesome initiative here Acegikmo! I was never really a fan of Strumpy due to bugs. slow performance and ultimately he dropped the ball by joining the forces of Unity Tech. (good for him). Very excited to see this move forward. If you need a tester please feel free to contact me (I am also a Unity Beta tester if it matters).
  • Acegikmo
    A little update!

    There's now a filterable node browser, plus a Time node :)
    I've also been rewriting some background code to make it easier to work with the interface down the line.

    progress_day15_time_browser_filter.jpg
  • DInusty
    Offline / Send Message
    DInusty polycounter lvl 10
    sickness. really coming along! keep it up ace! you going to make it relatively easy to get IBL lighting working for us? or physical materials?
  • Acegikmo
    Frozan wrote: »
    sickness. really coming along! keep it up ace! you going to make it relatively easy to get IBL lighting working for us? or physical materials?

    Thanks! And yes, I've planned to add some example shaders, including IBL and physically-based shading :)
  • DInusty
    Offline / Send Message
    DInusty polycounter lvl 10
    Why cant i have a like button for that post! :)
  • iGoogle
    wow amazing work, good luck man.
    suggest: use an input for SSS shader(subsurface scatering, in new DX11's feature)
    it's useful for ocean or realistic skin or ....
    http://en.wikipedia.org/wiki/Subsurface_scattering
    http://udn.epicgames.com/Three/rsrc/Three/MaterialsOverview/material_node.jpg
  • mospheric
  • gsokol
    Offline / Send Message
    gsokol Polycount Sponsor
    f25c58c5_fry_shut_up_and_take_my_money.jpeg

    For serious, super stoked for this. Most excited for the ability to work with physically based shading.

    I would love to test this out for you as well! Sent you a PM :)
  • Acegikmo
    I'm glad you guys are excited about Shader Forge; gets me motivated to finish it faster! :)

    Which kind of SSS would you guys prefer?
    Was considering simply using wrap lighting to do it, which works just fine on smooth/rounded objects (And is super cheap compared to other approaches).
    Might end up having multiple types you can switch between.
  • Acegikmo
    Acegikmo wrote: »
    I'm glad you guys are excited about Shader Forge; gets me motivated to finish it faster! :)

    Which kind of SSS would you guys prefer?
    Was considering simply using wrap lighting to do it, which works just fine on smooth/rounded objects (And is super cheap compared to other approaches).
    Might end up having multiple types you can switch between.

    Here's an example of wrap lighting:

    WrapSSS.jpg
2456721
Sign In or Register to comment.