Search Unity

[RELEASED] Super Fast Soft Shadows

Discussion in 'Works In Progress' started by Andy-Korth, Jun 5, 2015.

  1. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    I tried to get this working a couple months ago, but it's significantly more difficult than I first thought it might be at first.

    1) The culling is done in 2D to keep it fast.
    2) Calculating the screen space bounds for a light's clipping/clearing rects becomes significantly more complicated and expensive.
    3) Batching would need to be significantly rewritten, become more expensive, and would create more garbage arrays.
    4) The shadow projection shader would become *much* more complicated. I believe it to be possible to do it correctly, but at the moment I have no idea how.
    5) The shadowed material shader would need to be modified too.

    I originally thought I could tweak a couple of the matrices to make some magic happen, but unfortunately almost every stage of the rendering needs fairly complicated modifications to make it work. Additionally, since it's a strictly screen space 2D effect, any objects not on the 2D plane where the shadows are calculated would have to be projected onto the plane first. That's going to give you very flat looking lighting on 3D objects, and If you aren't careful with object/light placement, the projected position could be clamped to the edge of the screen. I'm not convinced that anybody that wants not-quite-2D-but-not-quite-3D shadows is going to be happy with the result either. :-\
     
  2. Manny Calavera

    Manny Calavera

    Joined:
    Oct 19, 2011
    Posts:
    205
    @slembcke2, thanks for letting me know. I'll work around it.
     
  3. ILoveBoobsMoreThanFreeWifi

    ILoveBoobsMoreThanFreeWifi

    Joined:
    Oct 25, 2014
    Posts:
    13
    Would it be possible to add shadow to Trail Renderer?
     
  4. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    Not directly, although you can copy the vertexes from the trail renderer to the shadow polygon when the trail renderer changes.
     
  5. Badalyan

    Badalyan

    Joined:
    Jan 20, 2016
    Posts:
    3
    Hi,

    I have a weird problem with SFPolygon and SpriteRenderer layers sorting. On one mac it works fine but on another mac I open the same project and it seems that the black bounds of the SFPolygon is above the SpriteRenderer which means that I see black polygon shapes instead of my sprite. What can be the reason and how to solve it? If you need I can attach a screenshot.
     
  6. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    The shadows aren't rendered like sprites. They are all rendered together into a lightmap that is applied to the sprites using a shader. If you have shadows rendering onto an object that shouldn't have them, it must be a material issue.

    Unity makes it really easy to edit a shared material without realizing it, is that possibly the issue? Another possibility is that because object initialization order can change from one machine to another, you might be setting material properties in code in a different order without realizing it?

    A good way to debug it might be to stop the game in the editor and inspect the material settings of the broken sprite.
     
  7. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
  8. Galaks

    Galaks

    Joined:
    Feb 8, 2016
    Posts:
    12
    Hi ! Can you say me if sprites just block the light that creates shadow effect or if shadows are really calculate?
    Thanks.
     
  9. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    They work like colliders. You draw a polygon around your sprite so it knows what shape it is. If you have a collider on your sprite, it can copy that and save you some work.
     
  10. Maedes

    Maedes

    Joined:
    Aug 6, 2013
    Posts:
    1
    Hi,

    Just bought your asset and it works great so far!

    I have just one little bug that I hope you can help me with :


    As you see, when I move the cursor, the border of the shadow move in an unusual way. I'm using Unity 5.3 and the light is using the WaterDepthFallOff cookie. I see the same problem in the cave demo scene that comes with the asset.

    If I put the light map scale to 1, the problem goes away but the light effect isn't as nice.

    Hope you can help!

    Thanks!
     
  11. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    The effect is rendered in screenspace, and to keep it fast it's rendered at a lower resolution. It's the same reason that the bloom can shimmer a little in games. When you say the effect isn't as nice, do you mean the softer edges?

    Usually the aliasing of the shadow edges are hidden by objects overlapping them. In your case, I guess I can see a few options for you. The easiest would be to snap the foreground scrolling to a multiple of the shadow resolution. I'm guessing you won't like the chunkier scrolling, though it might add to the pixel art feel? It would also be possible to add some blurring to the lightmap after it's rendered, though that might be a little difficult since it's not rendered with a regular camera you can attach a pre-made image effect to.

    If it's the softer edge you like with the lower resolution we have a feature coming in the next version that might help. It softens the edge of the shadow closest to the light. Send us a PM if you want to try that out. It's sort of hard to tell which edges I'm seeing in your gif though.
     
  12. feoktistov

    feoktistov

    Joined:
    Feb 12, 2015
    Posts:
    5
    Hi! Awsome asset!
    But I have a small bug.
    If light not intersect SFPolygon, all looks Ok:
    normal.png
    But If light intersect SFPolygon it renders like a shadow:
    bug.png

    Can I make something for fix this problem?
     
  13. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    Unfortunately no. There isn't really a practical way to handle lights moving through shadow polygons. I'm not even sure what the expected result would be since it's not possible to do in the real world. The best answer is that you must keep your lights from intersecting with your shadow polygons.

    This isn't a problem that is limited to SFSS either, Unity's 3D lights (or any other 3D engine really) is also going to give you really unexpected results if you move a light through a solid object.
     
  14. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    @feoktistov Actually, looking at your screenshots again, I'm still not 100% sure what I'm looking at, but is the problem the weird, green tinted flashlight beam?

    The SFRenderer has a checkbox for "Linear Light Blending". If you aren't using HDR rendering, lights can't be brighter than 1.0, and it using linear blending it's easy to make them look flat and oversaturated. Disabling that checkbox gives a fast, but fairly sloppy approximation of HDR lighting. A side effect is that colored lights can get oddly tinted shadows. Is that what we are seeing in your screenshot maybe?

    Enabling linear light blending will fix the tinting, but can be hard to prevent over-saturating the light. If you are targeting mobile or WebGL, you only have those two options. The next version of SFSS has improved support for HDR rendering. Unfortunately Unity only supports the necessary features on desktop though. PM us if you are interested in trying that.
     
  15. feoktistov

    feoktistov

    Joined:
    Feb 12, 2015
    Posts:
    5
    @slembcke2 Thank you for reply!
    Problem is about unexpected shadows (not about light colors).
    Actually light point (center) is outside of solid object and only cookie texture intersect solid object. In this case Unity's 3d lights works fine.

    My situation is following: I have houses and player can walk inside house with flashlight. But when player located near wall we have shadow artefacts of flashlight outide house on street (like in previuos image).
    I try to find way to avoid such artifacts, but have no idea how to fix it(((
     
  16. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    1,416
    Hi.

    I have finally got around buying your light solution and I am eager to try it out.

    It's been sometime since I had looked at this asset, so I just want to know if there has been any progress in regarding to the making the system to work with the XZ plane at all.

    I am going to have to dig really deep into your asset and try and make it work with :

    1. XZ plane
    2. More generic collider setup using normal 3D polygon collider or provide shadow casting data so that it works with XZ plane.
    3. Make it work with 2dToolkit.

    Now, I am not even sure how the system actually work other than it generates lightmap somehow and then the sprites uses custom shader that fetches shader global to get the lightmap and color them. Any other useful info that you can share with me to help in this sega?
     
  17. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    1,416
    I have my own rendering pipeline so I don'r really care about editor features at all..

    Also if the 2d shadow polygon collider data is just vertices info, I can supply these with my current shadow drawing mesh vertex data (which is also 2d)...

    But then I will have to modify the shader to make it work with XZ plane..

    These are some vague ideas but if you can just point me out to the right step / direction I will try and dig.

    Thanks.
     
  18. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    1,416
    At first I had this idea of making the whole lighting system to work on XZ plane, but I wanted to experiment with method that I don't need to make a lot of changes to your existing system. Instead, I have this idea of separating the actual game camera view and lighting view and generate necessary lighting geometry information in the lighting view so that I can generate correct lightmap. Which is all I actually need.

    So far, I have managed to supply my own shadow casting poly data but I have this problem. The structure of the SFPolygon expects the points to be kind like a convex points in order. But the vertices information that I have is not necessary in that order so it sort of messes up the vertex order when the system tries to recreate mesh on the fly.

    I still need to take a look more,.. but it looks like as if I need to skip the batching process of the render system and insert the mesh data info directly.. Phew...

    So... my second idea about this was : ok.. ok.. so .. I will not use the vertices infomation. I will recreate that using actual editor of SFPolygon... however! the editing function of the SFPolygon doesn't have any vertex snapping functions so when I try to match up the collider points to the mesh vertex in the scene, I just can't get that accurately enough. I mean they really need to be accurate. Cause I would draw a lot of tiled walls with its own SFPolygon components. (not like one huge terrain with a single SFPolygon. The game world is made up with many wall tiles so the collider polygon points needs to match perfectly.

    Ok, so ... I am stuck at this stage and I will need to think about this a bit more. Any ideas would really help.

    Thanks.
     
  19. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    1,416
    I took look at _GetShadowMesh code..

    There is one thing that I can't understand. It seems that the code always try and create a quad (2 tri ) mesh per vertex supplied.. Humm.. I am not sure why it is trying to do that. Also it seems like you are only about interested with the UV data.. I have not looked deep into the shader code, but yeah, strange stuff.. All because I don't understand enough about how the system works.. :p

    It looks like I would have to manually supply the mesh data instead of points and then transform into the light space.. and then batch them manually similar to how _GetShadowMesh does it with the points... Only if I can understand some of the reasons that you went through... phew.. not easy.. hehe.. as I expected..
     
    Last edited: Apr 14, 2016
  20. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    Is linear light blending enabled?
     
  21. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    @castor76 !! A lot to read through.

    XZ plane:
    It's not impossible, but there are a number of things to change. The SFRenderer._TransformRect(), and SFLight.Transform() methods are a good place to start since they handle matrix transforms, but I'm sure there are a dozen other places that make assumptions about using x/y without multiply by a matrix first. :-\ The editor bits make that even a little harder, though you said you didn't really care about those.

    Coordinate Translation:
    This might work. The polygons in SFLight._GetShadowMesh() need to be simple polygons with a particular winding (CCW I think?). So they can be concave, but can't self-intersect. Your assessment of creating a quad per vertex is close. It makes a quad per segment. Each segment gets a left and right vertex that corresponds to the segment, and a second pair that are the endpoints of the segment projected off to infinity. The info for the segment is duplicated to all 4 vertexes, and only differentiated by the 0 - 1 values passed in one of the properties. The vertex format is weird since I need to pass so many values to the vertex shader, but there are platform specific Unity bugs with certain vertex attributes. :-\ You probably don't want to skip the batching. Instead of 2-3 draw calls per light, you'll get lights times polygons draw calls. Desktop might handle it Ok. It's similar to how Unity's forward renderer works, but it can get expensive very fast.
     
  22. tyomklz

    tyomklz

    Joined:
    Jul 31, 2015
    Posts:
    48
    Doesn't work in the latest Unity beta, it's all bugged (disabling anti-aliasing didn't help). Going to downgrade to 5.3.4p3 now. Will Unity 5.4.0 get any attention later?
     
  23. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    @tyomklz Bah! Really? We've already had to find workarounds for two other Unity releases that broke rendering. It's getting more than a little frustrating. What platform and renderer are you using so we can try and reproduce it?

    Edit: Never mind. Confirmed that there are problems with the shadow projection on all platforms and renderers with the 5.4 beta. I'll have to dig into it and make them a bug report. Maybe it will actually get fixed before they ship 5.4. : (

    Edit2: It looks like Graphics.DrawMeshNow() is broken in 5.4, and it is a known issue. We use that to draw the shadow masks.
     
    Last edited: Apr 14, 2016
  24. wesleyb8881

    wesleyb8881

    Joined:
    Aug 1, 2015
    Posts:
    2
    Hello,
    Just bought this asset, to replace Unity Light which are too slow on mobile.
    I replaced unity lights by SFSS lights in my scenes and the rendering result is identical (made some adjustment of course) for much better performance. So thank you !

    But I have a side effect: all my static object with a Sprite Render component are not batched anymore.

    You can reproduce this bug by opening the "ForestScene", you can see :
    Batch: 41
    Should be: 6

    If I replace the shader "SFUnshadowed" by "Sprites-default" for all tree of the forest I have: Batch 6.

    Can you help me ? (Unity 5.3.2)
    Thank you!
     
  25. feoktistov

    feoktistov

    Joined:
    Feb 12, 2015
    Posts:
    5
    I've enabled LinearLightBlending and artefacts dessapeared. Thank you!
     
  26. tyomklz

    tyomklz

    Joined:
    Jul 31, 2015
    Posts:
    48
    I see. Thank you for the attention and for the quick reply. No worries, I'll just use an older Unity version until it's fixed.
     
  27. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    1,416
    Thanks for your some explanation. Well, then it seems like my best bet comes down to the possibility of creating _GetShadowMesh() using the normal mesh info instead of series of points. And as I have feared, it doesn't seem like supplying some mesh data and then do a simple batching job. It seems like it requires some specific vertex data encoding...

    It would be really helpful if you guys can create one, but if not then I have some other ideas... I am not ready to give up on this yet!

    Thanks and let me know if you guys can think of / come up with any helpful stuff for my ultimate take on this task!
     
  28. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    @wesleyb8881 Ooops. :-\ We merged a couple of our shaders to simplify it. The SFSample script version needs batching disabled to work correctly, but if you aren't using that it is batchable. Look for the "DisableBatching" line in the SFSoftShadow shader and comment it out for a temporary fix.

    @feoktistov Great! Sorry about the initial confusion.

    @tyomklz I'm putting together a more detailed bug report for it too. Hopefully they get it fixed before release. It would be really nice to have a minor Unity release that didn't require new rendering workarounds for once. :-\

    @castor76 "using the normal mesh info instead of series of points" You mean like a regular 3D mesh? Maybe I misunderstood earlier? That's unfortunately not going to work. SFSS needs to know the outlines of your objects. The meshes it uses are an extruded outline like a fence. It's possible to calculate one from an arbitrary 3D mesh, but it's unfortunately not trivial. :-\
     
  29. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    Looking into the 5.4 beta issues, we have a shaky workaround that we hope we don't have to use. Unity isn't passing the camera matrix to the shader, or if you have multiple cameras, it usually passes the wrong camera's matrix to the shader. The workaround is to just pass our own matrices, but it requires creating a lot of garbage and redundant calculations.

    We've also found that the DX11 renderer on Unity 5.3 doesn't work on one of our two development machines. We've had had others test it on DX11 and it works for them, though we've had one bug report that sounds like it's probably the same issue. We still have no idea what the issue is, though switching to the DX9 renderer seems to fix the issue. If people could chime in whether on not the DX11 renderer works for them and any information about your system, that would be very helpful!
     
  30. Andy-Korth

    Andy-Korth

    Joined:
    Jun 7, 2013
    Posts:
    140
    We filed a bug for the 5.4.0b14 issue. We created a replication project for it. It's Case 788944. We'll keep you up to date on the beta.
     
  31. wesleyb8881

    wesleyb8881

    Joined:
    Aug 1, 2015
    Posts:
    2
  32. Andy-Korth

    Andy-Korth

    Joined:
    Jun 7, 2013
    Posts:
    140
    SFSS version 3.0 has been submitted to the store!

    We've got some cool new features like:
    * Light penetration: Light can now softly bleed into a surface.
    * Can be used to make the lit edges of an object glow, or for a self shadowing effect.
    * Helps hide resolution shadow resolution artifacts.
    * HDR support:
    * Lightmap rendering is automatically performed in HDR when attached to an HDR camera.
    * Lights now have an additional intensity property when using linear light blending.
    * Editor scene preview of lighting effects.

    And a few important fixes and other improvements, especially for the latest versions of Unity:
    * Now works with Metal rendering on iOS with the latest Unity versions. (Earlier versions had shader compiler bugs)
    * Disable DirectX workarounds on Windows when using the OpenGL renderer.
    * Better support for batching of lit sprites.
    * Improved tooltips.

    Additionally, we improved the documentation- we've got a separate pdf for performance tips. We've also added to the examples. Including this new HDR linear color space demo:


    You can also see the light penetration on the surfaces of the asteroids in that scene.
     
  33. BakerTony

    BakerTony

    Joined:
    Apr 22, 2016
    Posts:
    3
    Hi, Andy. Can I get a trial version?
     
  34. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
  35. stulleman

    stulleman

    Joined:
    Jun 5, 2013
    Posts:
    43
    Hello!

    It's nice to find a 2D Light solution that is still actively developed! I am considering to buy this asset, but I have to make sure it fits my needs first :p

    I would appreciate if you could answer my questions:

    1. I use meshes only with a vertex color shader. Do you support this? (I don't use sprites at all)
    2. Is there a way to make/fake sunlight? (Sidescrolling, so not just ambientlight)
    3. My world is endless, do you see any problems with that?

    I'm looking for effects similar to http://playstarbound.com/media/

    Greetings
    Max
     
  36. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    1a) Meshes, sprites, and particles are all fine.
    1b) 3D meshes will work too, though the effect is a strictly 2D effect and is applied based on x/y alone. Perpective cameras make for a lot of problems.
    1c) Do you mean Unity's built in vertex color shader? You should be able to swap in the SFSS shader with no changes.
    1d) If you mean a custom vertex shader that uses vertex color, the SFSS shader to apply the lighting is fairly straightforward to modify.

    Whew!

    2) Yes. There is an example of this. (shown below) It works well to simply put a light fairly far offscreen. It doesn't support truly directional lights though.

    3) Not specifically. There is some simple hierarchical culling for shadow casters. Having thousands of lights in a scene is probably not a good idea. We don't have performance numbers for that at all. Presumably you'll have something in place to disable objects far offscreen anyway though.

    Starbound-esque) That should be pretty doable, though the effect that StarBound does where light bleeds into the ground a little isn't really going to work. SFSS 3.0 has a feature to let light bleed into a surface, though it's implemented as an extrusion, and not a filter like in SB. It won't look great with a lot of concave corners and a large light penetration distance. There are a lot of options to mix the lighting and shadowing features. See the side scroller cave demo in the video for example. I'm sure you could make something you like, just not something identical to StarBound.


     
  37. stulleman

    stulleman

    Joined:
    Jun 5, 2013
    Posts:
    43
    What I forgot to ask:
    I have procedural generated terrain. It seems like I would have to put a SFPolygon to my terrain.
    Is there a way to generate the SFPolygon from script?

    One of your competitors has a effect very similar to what I want to do.
    But it doesn't seem to be actively developed or supported anymore.

    So do you think the effect is doable like this:
    ?

    Another question (sorry :D)
    Let's say my map is 256 Units high. I want sunlight to be able to go from 256 down to 0. (if there is no terrain in the way of course)
    Would I get any performance hit trying to do this?

    Thank you for your response!
     
  38. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    Scriptable: The polygon script has a property where you can set an array of Vector2's. Not a problem.

    The easy way is to apply lights with shadows to the background, and just the lights to the foreground. If your lights are small, then it works pretty well and looks good:


    Another option is more like SB. There is a property to let the light penetrate into the surface of a polygon. Since it's based on a mesh instead of an image filter or cellular automata with lots of blurring and whatnot, it's not going to look the same. The strength of the shadows is a slider, so you can pick something in between these two options as well.


    With either option, our method should be faster, scale to higher resolutions, and higher complexity scenes. We also support HDR now. ;)
     
  39. akerusoft

    akerusoft

    Joined:
    Dec 18, 2015
    Posts:
    5
    Hi, Andy.Korth.
    I bought this asset.

    I use procedural gradient background.(Not texture)
    For that reason I can not use a texture to the shader(SFSoftShadow).

    But I want to use shadow only.
    You would not be able to blend by additive a shadow only?



    Thanks.
     

    Attached Files:

  40. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    @akerusoft Try the fog scatter color property on your SFRenderer. It's for simulating light that hits particles in the air, making the air glow where there is light. That is exactly what you want.

    If you are familiar with how shaders work, you should find the SFShadow.shader pretty easy to modify. Applying the light map is just a couple texture reads and blending.
     
  41. stulleman

    stulleman

    Joined:
    Jun 5, 2013
    Posts:
    43
    Okay so unfortunately it's not possible to do this effect exactly like he did?
    Can you imagine how he did it? Will it be possible some other time?

    And you didn't respond to my "sun-question". Because I'm a student I really have to look where I invest my money :p
     
  42. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    Starbound looks like it uses a cellular automata to compute the lighting in world space on a very low resolution grid. Somewhat similar to minecraft perhaps, but with some additions to do directional lighting and not just scattering. It's entirely different from how SFSS works.

    The sunlight is possible. (I answered that in the previous post. #2 and the purple-ish image)
     
  43. stulleman

    stulleman

    Joined:
    Jun 5, 2013
    Posts:
    43
    Yes, I implemented this method myself some time ago. I used a floodfill algorithm.
    The thing is, that it seems to be possible without it. (see the video I posted)
    So I have to think if I really need this, or perhaps implement the floodfill + your solution.
    I'll have to think about it.
    Thank you for your help.
     
  44. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
  45. noanoa

    noanoa

    Joined:
    Apr 17, 2014
    Posts:
    220
    Hi, my scene has 2 cameras, one for UI and one for everything else. The non-UI camera currently has SFRenderer attached but occasionally UI camera also has to render SFShadow sprites(such as when you want to display your character on a character sheet). Should I have SFRenderer attached to both cameras? Is it better to AddComponent/RemoveComponent SFRenderer only when needed?
     
  46. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    You can have a separate SFRenderer on each camera. It's supposed to work, though I don't know if we've tested multiple cameras much lately. (Hopefully there are no bugs lurking) Just make sure that your two cameras don't overlap, as there isn't any other way to control which camera certain lights and shadow polygons end up on.
     
    noanoa likes this.
  47. noanoa

    noanoa

    Joined:
    Apr 17, 2014
    Posts:
    220
    Thanks!
     
  48. wjone52

    wjone52

    Joined:
    May 4, 2016
    Posts:
    4
    Really gorgeous asset!

    I was wondering if it is at all possible to set up a trigger to test whether an object is within a shadow (such that an enemy wouldn't detect a player if he was hidden or somesuch).

    Thanks!
     
  49. slembcke2

    slembcke2

    Joined:
    Jun 26, 2013
    Posts:
    263
    @wjone52 You'll still want to do that using traditional raycasts.

    The SFSS lighting effect is rendered in screen space, which means that offscreen objects have no lighting information available at all. Even for onscreen locations, reading the data back from the GPU is always quite slow.
     
  50. ShadowrunnerEmin

    ShadowrunnerEmin

    Joined:
    Dec 29, 2013
    Posts:
    9
    Wow, this asset looks amazing!

    It certailnly looks like it could improve quite a lot the mood/atmosphere of my game. However, before buying it I would like to ask a question:
    After reading the documentation, it looks like it uses a custom sprite shader. I'm already using a slightly modified version of this one: "http://kencho-dev-blog.blogspot.com.es/2014/01/cel-shaded-sprites-in-unity3d-43-and.html".

    Would it be possible to keep the "normal mapping" or other surface shader stuff (like specular/gloss maps) on my sprites and still use this?