Search Unity

[Best Tool Asset Store Award] Amplify Shader Editor - Node-based Shader Creation Tool

Discussion in 'Assets and Asset Store' started by Amplify_Ricardo, Sep 13, 2016.

  1. kebrus

    kebrus

    Joined:
    Oct 10, 2011
    Posts:
    415
    How is it a mess? it's just two extra nodes and some settings in the texture. I did have a long explanation though, I just wanted to be complete since it's something that was asked before multiple times.
     
    KRGraphics likes this.
  2. renardmf

    renardmf

    Joined:
    Jun 29, 2012
    Posts:
    47
    After deleting my library and re-importing the plugin it seems like I just needed to delete the old material that was tied to the shader and it started working again.

    Thanks for your help!
     
  3. KRGraphics

    KRGraphics

    Joined:
    Jan 5, 2010
    Posts:
    4,467

    I like how through it was... and it will be easy to detail models that I can't easy add in Substance Painter.
     
  4. x4000

    x4000

    Joined:
    Mar 17, 2010
    Posts:
    353
    I haven't tried the very latest version yet, but there's a bug in the custom expression nodes in the version prior to that, at least. Those things are glorious, by the way. :) And the fix is easy:

    CustomExpressionNode.cs:
    line 354:
    functionCall += m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );
    should be:
    functionCall += m_inputPorts[ i ].GeneratePortInstructions( ref dataCollector );

    Cheers!
     
  5. Amplify_RnD_Rick

    Amplify_RnD_Rick

    Joined:
    Feb 15, 2016
    Posts:
    528
    Nicely caught!
    We just uploaded a new build into our webpage with your fix!
    Thank you so much for reporting it!
     
  6. x4000

    x4000

    Joined:
    Mar 17, 2010
    Posts:
    353
    No problem!
     
  7. Image3d

    Image3d

    Joined:
    Jun 20, 2008
    Posts:
    155
    How can I load a normal Unity shader into Amplfy Shader Editor ?
    I have an ocean shader I want to expand with other features ( shore line, beach waves, etc ).
     
  8. Amplify_Ricardo

    Amplify_Ricardo

    Joined:
    Jul 19, 2013
    Posts:
    2,389
    Thank you for your interest, we really appreciate it. Unfortunately, that's not currently possible, ASE can only be used to edit shaders made by it.

    Thanks!
     
  9. MP-ul

    MP-ul

    Joined:
    Jan 25, 2014
    Posts:
    230
    @Amplify_Ricardo can The ASE be used for mobile shaders ? I am looking to make a toon shader that can use the light probe system and no one on the unity forums helps me :| ! and atm I am thinking to try the ASE but I need to ask before I buy :) (btw my knowledge in shader programing is-0 but i know how to make 3d animations and 3d models AAA quality xD it will be a big help for me to do that shader)
     
  10. deab

    deab

    Joined:
    Aug 11, 2013
    Posts:
    93
    Loving ASE.

    How do I find the camera facing vector? I'm trying to build an effect centred on the world position, but moved towards the camera.
     
  11. x4000

    x4000

    Joined:
    Mar 17, 2010
    Posts:
    353
    I've been pondering something. Combining groups of matrices to get the final transform for an object is bloody expensive on the CPU, in part because of all the interop that winds up happening with the native unity stuff. For things that are being continuously animated at a high framerate, but that aren't actually part of the simulation (no colliders, etc), all I need is a visual offset.

    Obviously there is vertexoffset, which lets us do various transforms. Most examples of that sort are either for billboarding, or doing deformations, though. Are there any examples of something like "take this mesh and multiply it by this TRS matrix in world space?" There's a Transpose matrix operation in ASE I notice, but not a rotation one (possibly because an anchor point would be needed?)

    Passing in whatever data in order to make this work isn't a problem for me, but even something as stupid-simple as "transpose this mesh by vector a against the forward of this object's position" would be useful.

    Documentation on the vertex offset seems really sparse, and as far as I can tell this is all either based on the normals direction or maybe the tangent for the individual vertex. Any clues on how to get to object or world space? Some of this math I'd just frankly like to offload to the GPU if I can.

    Cheers!
     
  12. kebrus

    kebrus

    Joined:
    Oct 10, 2011
    Posts:
    415
    You can't just yet, but I think it's a safe bet to expect it soon. ;)


    Maybe I misunderstood but isn't that just the normal "View Dir" vector?

    There's definitely something useful about being able to rotate a mesh inside the shader. I saw a destiny talk about shaders where they were implementing new crazy weapons with individual animations where they could no longer change the skeleton of the mesh and decided to do some simple animation stuff inside the shader instead. About your last question does the "Object to World" and vice versa helps in your situation?
     
  13. KRGraphics

    KRGraphics

    Joined:
    Jan 5, 2010
    Posts:
    4,467
    Hey, guys... K.C. here and I am ready to finalise my KRG_Standard shader, which now has Detail Normal and Detail AO. Perfect for things like clothes. Also eyes are added to my shader kit. The skin is Alloy temporarily until there are Skin and Hair shading models in ASE... Enjoy

    Details Disabled
    Screenshot 2017-05-29 13.53.11.png

    Detail AO (Hard to see but you can see it in the blue part of the shirt. I will add a control to make the AO effect stronger)
    Screenshot 2017-05-29 13.53.05.png

    Full Details

    Screenshot 2017-05-29 13.57.46.png


    And EYES!!!! Which I am ALWAYS tweaking...

    Screenshot 2017-05-29 13.59.55.png
     
  14. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
    I've heard of people doing that for particles
    upload_2017-5-29_12-24-19.png

    I haven't done much vertex stuff with ASE, but it sounds like maybe you want this set to absolute?
     
  15. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
    I just ran into a warning that Switch By Face doesn't work properly with vertex ports. (Actually, the error says "Propery", which I suppose is itself worth mentioning.)

    I'm trying to flip the vertex normal of the back faces so that a double-sided material looks the same from the front and back. Is there any way to do that?
     
  16. Amplify_Ricardo

    Amplify_Ricardo

    Joined:
    Jul 19, 2013
    Posts:
    2,389
    Great work, this looks really cool. ;)

    We are actually in the process of updating that portion of the wiki. Feel free to point out any section that you find lacking, that would give us a better sense of what we need to complete first.
     
  17. kebrus

    kebrus

    Joined:
    Oct 10, 2011
    Posts:
    415
    Aside from the first part that needs to be checked for sure, why are you trying to flip the "actual" normal? When you are rendering from both sides you are only telling the shader that even if the face is facing against the camera you still want to render it, that doesn't mean the face doesn't have the proper face normal values, it does mean it will respect its facing side and render accordingly. They are correct. What you want to do is to tricky your fragment shader so that when it needs that normal if "fetches" the value and inverts it but only when it's facing against the camera. When you "fetch" it facing towards the camera you don't want to touch it. So with this trick you are not overwriting the normal, you are changing it's result when needed. Both "Face" nodes use an internal value that tells you which side your surface is facing.

    A couple of pages ago I shared a screenshot with how to use them:
    https://forum.unity3d.com/threads/a...der-creation-tool.430959/page-25#post-3050303

    Notice how I'm not using the vertex normal output at all. That output is useful when you want to override whatever value it has at all times. For instance, procedural meshes or dynamically changing meshes (like dynamic terrains or waving flags).
     
  18. KRGraphics

    KRGraphics

    Joined:
    Jan 5, 2010
    Posts:
    4,467
    If you saw the video from Paragon using Substance Painter, this is EXACTLY what I did with ASE... and I am loving the level of detail I am able to achieve...
     
  19. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
    Thanks so much. Pretty sure that solved it for me.

    Unfortunately, I've got a new, weirder issue.

    This is a big grid of double-sided quads. This particular one is 32 by 32 by 32 cells. Their alpha test is based on a noise function which probably isn't incredibly cheap but which shouldn't be too expensive (It's just fractal sum noise, I call the built-in simplex 4 times at different scales and add them together.)

    upload_2017-5-29_15-42-39.png

    It says it's running at 1000 FPS. I've seen that number drop as low as 90 briefly, but in general it remains very high in both the profiler and the statistics panel.

    My actual FPS when I look at this thing is maybe 10, but I can't get any kind of readout to show that.

    I don't expect something like this to run at 1000 FPS, even on good hardware. But 10 feels low, and it's a mystery to me why the profiler's broken.

    I'll post my scene in a little while if that would help.
    EDIT: https://drive.google.com/file/d/0B2L9OwqI24DiMTRpNk51VnlBX1E/view?usp=sharing
     
    Last edited: May 30, 2017
  20. kebrus

    kebrus

    Joined:
    Oct 10, 2011
    Posts:
    415
    I'll check that tomorrow, meanwhile try to do a build an attach the profiler to it. That inconsistency could be related to the editor and it should be easier to check what's so expensive.
     
    brisingre likes this.
  21. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
    Figured it out. I'm GPU-bound, unsurprisingly. Still don't know why the GPU display in the statistics panel's wrong, but I got the GPU profiler to show my real FPS. 75% of the cost's coming from shadows on the directional light. If I disable those, it runs at 60FPS. Inconvenient, given this is meant to be foliage, but at least now I know what I need to optimize.

    I guess it's not surprising that math on the alpha test output's very expensive. I think of Fractal Sum being pretty reasonable in terms of performance, but I guess it has to run on every overdraw layer, and of course because it modifies depth information it has to run during every shadow pass.

    Fortunately, everything that should work to make this faster does. A faster alpha test function helps, less ridiculous overdraw helps (36 layers!), lower resolution shadow maps help. And because it's all multiplicative, all these things help quite a lot -- just reducing the overdraw on the shadow map gets my FPS back to 60ish.
     
    Last edited: May 30, 2017
  22. Yokoneko

    Yokoneko

    Joined:
    May 23, 2017
    Posts:
    3
    I having fun using the Amplify Shader Editor,
    Does ASE have no For-Loop?
     
  23. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
    It does not. You can do loops in custom expressions though.

    It'd be nice if it had one, though. I'd use it.
     
  24. Yokoneko

    Yokoneko

    Joined:
    May 23, 2017
    Posts:
    3
    thanks.
    I will try a custom expression.
     
  25. D-N

    D-N

    Joined:
    May 20, 2017
    Posts:
    2
    Hi! ASE is very useful.:)

    When using "Vertex TexCoord(Coord Size : Float3 or Float4)" node
    with "Vertex Normal" or "World Reflection" or "Fresnel node",
    the following error occur.
    "cannot implicitly convert from 'float2' to 'float3' at line 109 (on d3d11)"

    I want to use Vertex TexCoord(size Float3) node with Vertex Normal node.
    Is this impossible?
     

    Attached Files:

  26. xxPillsxx

    xxPillsxx

    Joined:
    Oct 10, 2012
    Posts:
    31
    Hi guys, I'm trying to make kind of a force field shader, and I want there to be an effect when something collides with the shield at the impact point. I figure I would need to feed a vector3 to the shader ( collisionpoint.normal ) and scale a texture's (impact) alpha right where the impact was, but how do I do that? Thanks in advance!
     
  27. Amplify_RnD_Rick

    Amplify_RnD_Rick

    Joined:
    Feb 15, 2016
    Posts:
    528
    This is an issue with our Custom Shadow Caster which is incorrectly attempting to pack float3 data into only two channels.
    We just uploaded a new build that circumvents this issue but it still is not completely fixed. On our Shadow Cast Pass we are now forcing the packing to be always from a float2 to these two channels.
    Again please note that this issue is only in regards to our Custom Shadow Cast Pass and doesn't affect the main pass shader code generation.

    Our community member @benderete already submitted a cool Force Shield example which does something similar to what you need. It is located on our Examples folder at Examples > Community > ForceShield.
     
  28. Pecek

    Pecek

    Joined:
    May 27, 2013
    Posts:
    187
    What can we expect from ASE in the future? Since it silently went from 0.7.2 to 1.0 with little improvements(at least based on the release notes) I would love to see a public roadmap.
     
  29. Amplify_Ricardo

    Amplify_Ricardo

    Joined:
    Jul 19, 2013
    Posts:
    2,389
    Hello,

    We were going to post information regarding the version and price update today but, since you beat us to it, i'll take this opportunity to elaborate.

    If you have been following our development builds available from our website, it will definitely seem like a small update but, Asset Store wise, the new version introduces quite a few fixes and new features since version 0.7.0. Be it the new Shader Function assets, multi-tab support, and many additional nodes, this is a major milestone for ASE in terms of development.

    This also serves as our final price update for version 1.0.

    What can you expect from ASE in the future? The same responsive support, regular updates via our website and innovative features driven by the community. In other words, we have quite a lot content in development and we are open to requests.

    The roadmap will be made available soon but you can expect more upcoming features.

    Thanks!
     
  30. D-N

    D-N

    Joined:
    May 20, 2017
    Posts:
    2
    Thanks! I will try new version.
     
  31. x4000

    x4000

    Joined:
    Mar 17, 2010
    Posts:
    353
    I will have to experiment with the vertex offsets being absolute -- thanks for the suggestion, all. If anyone has any examples of this sort of thing, that would be even more welcome, since it's fumbling around in the dark for me at the moment right now. :)

    Two requests for new features:

    Edit: #1 is already in there and I just missed it! Thanks benderete. :)

    1. Easy: The ability for us to specify an alternative ShaderGUI material inspector, on a per-shader basis. For some of my shaders, I want to use something different from the usual, and have buttons to do specific actions. Particularly helpful for skyboxes, etc. For now I can easily update the shader code directly to do that, but being able to have that string written automatically would be nice.

    In other words, letting a specific shader NOT say:
    CustomEditor "ASEMaterialInspector"
    But instead say:
    CustomEditor "WhateverITypedInATextboxInTheShaderEditorWindow"


    2. Probably hard: The ability to have if toggles that exclude entire blocks from running. In this case, presumably the output is either a float, float3, or float4. So it would need to declare a float4 myOutput = float4(0,0,0,0); if black was the default, for instance.

    Then it would actually execute the code in the block and fill myOutput only if the condition is met. Otherwise that entire block doesn't get executed. Right now _functionally_ you can do the same thing with toggle switches, but you can't get any performance gain out of it. For instance, I run into a line like this being generated in my shader:

    float3 hsvTorgb58 = RGBToHSV( ( lerp(Black,( _Neb1Power * ( saturate( ( temp_cast_2 * _Neb1Tint ) )) ),_Neb1Enabled) + ( lerp(Black,( _Neb2Power * ( saturate( ( _Neb2Tint > 0.5 ? ( 1.0 - ( 1.0 - 2.0 * ( _Neb2Tint - 0.5 ) ) * ( 1.0 - temp_cast_4 ) ) : ( 2.0 * _Neb2Tint * temp_cast_4 ) ) )) ),_Neb2Enabled) + ( lerp(Black,( _ClusterMultPower * ( saturate( ( ( saturate( ( tex2D( _ClusterMultPattern,uv_ClusterMultPattern) * tex2D( _ClusterMultMask,uv_ClusterMultMask) ) )) * _ClusterMultTint ) )) ),_ClusterMultEnabled) + lerp(Black,( _ClusterPinLightPower * ( saturate( ( ( saturate( ( tex2D( _ClusterPinLightPattern,uv_ClusterPinLightPattern) * tex2D( _ClusterPinLightMask,uv_ClusterPinLightMask) ) )) > 0.5 ? max( _ClusterPinLightTint, 2.0 * ( ( saturate( ( tex2D( _ClusterPinLightPattern,uv_ClusterPinLightPattern) * tex2D( _ClusterPinLightMask,uv_ClusterPinLightMask) ) )) - 0.5 ) ) : min( _ClusterPinLightTint, 2.0 * ( saturate( ( tex2D( _ClusterPinLightPattern,uv_ClusterPinLightPattern) * tex2D( _ClusterPinLightMask,uv_ClusterPinLightMask) ) )) ) ) )) ),_ClusterPinLightEnabled) ) ) ).rgb );

    With that, it's going through just as much work as ever, which I'd love to be able to segment off instead of having it run if a toggle like _Neb1Enabled is 0. And actually, it looks like the toggle is really just generating a lerp in the first place, which... hrmmm. ;)


    Anyhow, congrats on 1.0!

    Another note: all over the place it's noting that the precision can be half, float, or fixed. It's worth pointing out in the wiki, I think, that internally unity will only use float precision if it's compiling for windows, osx, or linux. I can't recall about shaders. So people can set those precisions as much as they want, but it does nothing until you hit mobile and possibly some consoles.
     
    Last edited: May 31, 2017
    Amplify_Ricardo likes this.
  32. benderete

    benderete

    Joined:
    Aug 31, 2014
    Posts:
    129
    Hi, about first request, I'm wrong or it's the last option of General section on master node properties pane?
     

    Attached Files:

  33. Lijianjian

    Lijianjian

    Joined:
    Feb 26, 2017
    Posts:
    16
    I need some help ! When i update amplify shader editor to 1.0 I have this problem! jp02.jpg
     
  34. Lijianjian

    Lijianjian

    Joined:
    Feb 26, 2017
    Posts:
    16
    I am using Unity 5.6.1f1 !But it looks i still have this problem in5.5 ! But amplify shader editor 0.7 is ok
     
  35. x4000

    x4000

    Joined:
    Mar 17, 2010
    Posts:
    353
    What??? That is amazing! I remember seeing that before, now that you mention it, but then I completely forgot about it. These guys really thought of so many things. It works just like I was hoping. :D
     
  36. Amplify_Ricardo

    Amplify_Ricardo

    Joined:
    Jul 19, 2013
    Posts:
    2,389

    Greetings everyone!

    If you missed our latest posts, or if you don't use our own download system, you can now pick up the latest version directly from the Unity Asset Store. Among many improvements and additions such as Shader Functions and Multi-Tab support, we also took this opportunity to set the final price for version 1.

    Be sure to check the release notes for a complete list of changes.

    Amplify Shader Editor - Asset Store Page


     
    benderete likes this.
  37. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
    Congrats on 1.0!
     
    Amplify_Ricardo likes this.
  38. Pecek

    Pecek

    Joined:
    May 27, 2013
    Posts:
    187
    @Lijianjian You should contact the developer of Megasplats about this, Amplify isn't responsible for any third party addons.

    @Amplify_Ricardo Thanks for your answer, sounds good. For the rercord, I didn't wanted to imply that the progress is slow, I picked it up in a little more than a month and we already got like 4 updates with meaningful fixes, features, improvements and examples, I'm absolutely happy with my purchase. It was just weird to see the difference between 0.7.2 and 1.0. Looking forward to the roadmap.

    Edit: I just realized I was asking for more features while I didn't specified what I need lol. I would love to see better support for texture arrays, right now they are fairly limited compared to the texture sampler, for example it's impossible to pass it properly(~not as color) to a shader function, POM is expecting a sampler2d as well so it's impossible to use it with texture arrays. Ideally I would like to be able to do everything with a texture array which can be done with the texture sampler. I would like to modify the tangents and specify the base shader(built in terrain..), and I guess this won't happen anytime soon, but a code node would do great as well.
     
    Last edited: Jun 1, 2017
  39. KRGraphics

    KRGraphics

    Joined:
    Jan 5, 2010
    Posts:
    4,467
    Congrats on 1.0... and I left you guys an awesome review on the asset store... I am THAT impressed with this tool set
     
    Amplify_Ricardo likes this.
  40. SengiG

    SengiG

    Joined:
    Oct 31, 2012
    Posts:
    6
    Hi, thanks for you support, and gratz with realese.

    Can someone explain how Depth Fade node works in ASE? In Unreal I always get clean result of intersection between two meshes, but here I don`t have any result. Some basic workflow to have result of visible intersection line between two models would be really helpfulll.

    Still not concidered to take whole team to ASE, but I`m pretty close to it, you did amazing job so far!
     
  41. x4000

    x4000

    Joined:
    Mar 17, 2010
    Posts:
    353
    Just put my own review up there on the asset store -- can't believe I hadn't done that until now!
     
  42. davysw

    davysw

    Joined:
    Jul 15, 2014
    Posts:
    17
    I'd like to make a shader that uses transparency like the unity Fade shader. I've seen mentions in this thread of the "fade" option but I'm just missing it in the software, could someone please point me to what node or property I'm missing? Also what output I need to plug my alpha's into.

    thank you
     
  43. barcode802

    barcode802

    Joined:
    Apr 6, 2014
    Posts:
    36
    @Amplify - are shaders created with ASE portable so that they can be added to other projects without the full asset / editor
     
  44. x4000

    x4000

    Joined:
    Mar 17, 2010
    Posts:
    353
    Yes. It will give a warning in the editor that the custom shader editor is missing, but you can just ignore that, or you can remove that one line of the shader, or even take it out in the definition of your shader in the project with ASE.

    I am doing exactly what you describe.
     
  45. barcode802

    barcode802

    Joined:
    Apr 6, 2014
    Posts:
    36
    Awesome - thank x4000! BTW - your reviews on the Asset Store are super helpful!
     
  46. x4000

    x4000

    Joined:
    Mar 17, 2010
    Posts:
    353
    Glad to be of service! :)
     
  47. Misciagno

    Misciagno

    Joined:
    Jul 27, 2013
    Posts:
    88


    I'm pretty amateur when it comes to making shaders so I was pretty happy to get this far when trying to make an ocean shader. This uses POM instead of tessellation which I think is pretty cool. I ended up running out of interpolators though so I'm looking forward to adding more features to this once I can do multiple passes.

    EDIT : I tried to upload a GIF but couldn't get it to work so I'm just posing a still image now.
     
    Rowlan, antoripa, MEGA64 and 2 others like this.
  48. MS80

    MS80

    Joined:
    Mar 7, 2014
    Posts:
    346
    Congratulations to version 1.0! ;)

    After some experiments with a blur shader I recognized a problem...
    It seems "Screen Grab" has a issue with objects that use Scene Grab as well?! Objects with shaders which use "Screen Grab" does not grab other objects with the same or similar shader! Example: create 2 cube objects in front of each other, assign 2 x "SimpleBlur" material (or a material with simple shader including "Screen Grab") to the objects. You will recognize that one cube will not grab the other.

    Is there a workaround or special setting for this siutation? This does work quite well with other shaders using grab scene color (f.e. shaderforge).

    Also it seems impossible to use "Screen Grab" in shader function => error message appears : "Shader function loop detected, new node was removed to prevent errors". I would like to create something like a blur pass in a shader function and then repeat it 4 or 8 times for example. Copy/paste Screen Grab node into a function is possible, but it does not work correctly, it only calculates the last screen grab...

    And a small request: multiple inputs for nodes like add, subtract, multiply, divide would be handy ;)
     
    Last edited: Jun 5, 2017
  49. StaggartCreations

    StaggartCreations

    Joined:
    Feb 18, 2015
    Posts:
    2,266
    I've just updated to version 1.0 (because fudge yes, shader functions!) in Unity 5.4. After recompiling a shader and some debugging, I found out that the values put into the Multiply (and Lerp) nodes were reset to 0. Where I left the input empty and inserted a value into the node properties window.

    I can view the changes in source control, so I can insert these values again. But I figured it was worth mentioning the issue ;)

    Code (CSharp):
    1.          
    2. //Old
    3. float2 appendResult218 = float2( _WindDirection.x , _WindDirection.z );
    4.             float3 WindVector = UnpackNormal( tex2Dlod( _WindVectors, float4( ( ( _WindAmplitudeMultiplier * ( (ase_worldPos).xz * float2( 0.01,0.01 ) ) ) + ( ( ( _WindSpeed * 0.05 ) * _Time.w ) * appendResult218 ) ), 0.0 , 0.0 ) ) );
    5.          
    6. //New
    7. float2 appendResult218 = float2( WindDirection.x , WindDirection.z );
    8.             float3 WindVector = UnpackNormal( tex2Dlod( WindVectors, float4( ( ( _WindAmplitudeMultiplier * ( (ase_worldPos).xz * float2( 0,0 ) ) ) + ( ( ( WindSpeed * 0.0 ) * _Time.w ) * appendResult218 ) ), 0.0 , 0.0 ) ) );
    9.  
    Edit: Only seemed to occur for one of my shaders
     
    Last edited: Jun 4, 2017
  50. Pecek

    Pecek

    Joined:
    May 27, 2013
    Posts:
    187
    The value reset happens to me every now and then, I don't even use the feature anymore, it's easier to create temp variables - more readable as well.