Universal poly water

So I’ve rebuilt my low poly water shader from scratch! The reason for the rebuild is that the shader I had, and have shared on here was quite limited platform wise, only worked in forward rendering and on DX11 capable hardware, which felt veeery limiting.. So fast forward to today, and I’ve got my New Universal Shader running on everything! With reflections working on supported platforms, and also I now detect where water is shallow to get the foamy look along the shore..

Edit: This is what it can look like in action:

Screenshots from iPhone: 


It looks awesome on the iPhone, but no reflections on my iPhone 5 (Edit: Reflections are working!)..  Which only supports Open GL ES2.0 i think.. Will test on 6S soon. On tvOS it does not look that nice,  but I think that has something to do with the way lighting is done on that platform, not sure! (Edit: It now looks really good! Quality settings was wrong!)

20 thoughts on “Universal poly water”

          1. If you disable shadows I guess you won’t see the flickering.. Otherwise the shader needs a rewrite..

  1. Amazing work with the shader and the tutorials, they have been very useful in learning how a shader works. Will you make a commercial version of this one and release it on Assets Store?

  2. Hi Ronnie,

    thanks for posting so much information. I saw that your initial poly water leverages a geometry shader which is not available on iOS. I have been attempting to port your prior work to IOS, and I saw your examples you have it running on iOS. Are you leveraging a fragment shader to achieve the safe effect? I have basically broken down my mesh into a set of triangles and apply a fragment shader to each of the triangles individually, is this a similar approach you have taken on your latest release? Any help would be greatly appreciated.

    Thanks and keep up the great work!

    1. Thank you! I am creating a mesh that stores the “position” of the 2 vertices that is missing from the triangle in the uvs of the vertice.. That way you don’t need a geometry function.. And can process the triangle in the vertex function..

  3. Hey Ronnie, very impressive low poly design / coding. I found this site looking for low poly water shaders and yours looks great, I’d love to get my hands on it 😉 I may be studying your original 2.0 version of the shader.
    Looking forward to seeing more of Battlemaze!
    I too have been independently working on a top-down low poly multiplayer action game for a few years now (playsubscapes.com). I would love to connect with you and chat Unity.


    1. Thank you! I’m currently not sharing my latest polywater shader, but I’m working on getting it on the asset store! Just takes time, I don’t have enough hours in my days, little time for this, sadly! My work on Battlemaze actually has been somewhere near zero for a year! But I’m working on other singleplayer projects! That I share on here.. 🙂 I check out your game when I have time! 😉

  4. Hey Ronnie.

    Do you have estimated time, when this shader will be available in asset store?
    I really want to buy it. If you don’t plan to sell it… could you share info how you made it?

    best regards….

    1. Hi! I’m a only a hobbyist, with not very much time to spend on this, that is why it’s taking so long! I want to put it on the asset store, but I’ve never put anything on the store before, so I need to spend some time figuring out what is the best way to do it.. And actually making games and new things is more fun, so that is distracting the process.. I don’t want to hand this out for free because I’ve spent alot of time on getting it “right” and multiplatform.. But maybe I’ve got it on the store within a month, but I can in no way guarantee it..

  5. Hi Ronnie,

    Would you be interested in implementing this shader into a project we have? We were originally using your lowpoly water with interactive ripples, but it seems like it won’t work on the new version of unity. If so, shoot me an email.

    Kindest Regards,

    1. Hi, John! I know the reason why it’s not working in 5.4-5.5. It’s due to the new way Unity handles arrays in shaders!

Leave a Reply

Your email address will not be published. Required fields are marked *