New to Unity? Add the following code to set up our shader to take in a new texture property.That's a lot of code, but nothing in there is too exotic.
However, instead of storing the depth of each pixel, it'll store its Unity does have the built-in functionality to render out the normals buffer by using the This script creates a camera at the same position and rotation as the main camera, except it renders the scene with a If you run the scene now, you'll see that a new camera, We'll need to calculate the view space normal of the water surface before we can compare it to the normal rendered out to the texture. Because we want our final output to maintain transparency, we also perform the blend on the alpha channel of the colors. When the vectors are parallel in the same direction and are We'll use the result of the dot product to control the foam amount. Download the starter project provided above and open it in the Unity editor. We will use this function to blend our final output.Note that we only multiply the alpha of the foam now, instead of the entire color.We will make one final improvement before completing the shader. When the distance is large (in red), the water is darker.Depth texture for the beach scene, excluding the water. Image from Increasing the foam distance makes the foam around the objects look correct, but is far too strong for the shoreline.View space normals texture for the beach scene, excluding the water. When the distance between the water and the ground is small (shown in green), the color of the water is lighter. This is because the depth between the shore and the water is quite small, while the depth (from the camera's point of view) between the water and the underwater objects is comparatively larger. Hint: You can notify a user about this post by typing @username We will build off this shader throughout this article to make it render toon style water.Water changes color depending on how deep it is, due to it absorbing light that passes through it.
Templates .
To get a clearer view, open this image full-screen in a new tab. GitHub - IronWarrior/ToonWaterShader: Source code for Toon Water Shader tutorial for Unity. Instead, we'll smoothly blend the alpha from zero to one, using the The lower and upper bounds we define (the first two parameters of the function) are quite close—they're just far enough apart to add some smoothing to the edges. This is the result of the binary way we perform the cutoff on our noise texture; every pixel either has full alpha, or none at all.
If still face any problems or have any questions/suggestion contact details are in the manual under documents folder. Modfying the color of the foam yields mixed results, with red foam turning pink and black foam light blue.Jagged edges where the foam meets the water.
We will apply a cutoff threshold to get a more binary look.That looks much better. Open the Main scene (located at the project root), and open the ToonWater shader (located in the Shaders directory) in your preferred code editor.
This might actually be desirable for certain kinds of scenes—if you're modelling ocean water, it would make sense for it to be rendered as opaque, since it tends to appear that way due to its immense depth. We are want to blend the foam with the water surface—neither of these emit light, and the result should not be brighter; additive blending is not the right fit for this task.Instead, we'll blend the two colors together using the same algorithm Unity is using to blend our shader with the background, which we referred to above as The first line performs the blend operation described above.
When the dot product is large (near 1), we'll use a lower foam threshold than when it is small (near 0).By saturating the dot product result, we get our value in the 0...1 range, making it easy to pass into the Right now, the water is completely opaque. GUI. You can alternatively message me through Side view of the beach scene. This is great for objects that emit light, like sparks, explosions or lightning.