Let's make some simple cartoon water!82% OFF for Web Hosting and FREE Domain included! That value is 0 when it’s closer to the object that it’s intersecting and 1 as it gets further away. Set a texture for the surface foam. The asset includes two shaders, Specular and Surface. As you can imagine, more than 50% of the magic happens right here, in the vertex shader. “remap” just takes a value from [-1,1] and maps it to the [0,1] range. Then add displacement to make the wave uneven. This method is pretty boilerplate and you can find more about it and other tessellation methods from Unity’s official docs. This is where the rest of the magic happens. Readme Releases No releases published. The first noise texture to use for the vertex displacement. Do you want to try that shader yourself? The result is then adjusted based on the contrast value and then multiplied by its contribution before it’s returned. Absolutely! Before using “LinearEyeDepth”on it, in line line 178 I calculate the linear depth going from 0 to 1 (with “Linear01Depth) and use it on a smoothstep to smoothly clamp it based on “_ShoreColorThreshold”. Initially, in line 185 I get the foam on the shore by using the “foamTex” from line 173 and using the intersection value of the foam (“foamDiff”) with the “_FoamIntersectionProperties” to determine the amount of the foam that will appear on the edge of the intersections. The fragment shader uses the fresnel and reflection vectors to draw, shade, and reflect the surface. The reason for the sine function instead of just “_Time.y” is to have a bobbing front-back movement. The vertex shader accesses the resulting height and normal data to compute fresnel and reflection vectors. The tessellation used here is distance-based, so vertices that are further away from the camera won’t be as tessellated, which helps with performance and visual clarity sometimes. These tend to be more connected to physical effects, which is precisely what makes them hard to approach. Seamless transitions between all sea states and wind directions are possible.The wave parameters of Physical Water surface were carefully derived using the JONSWAP … The threshold for the shore coloring based on linear depth. This is especially true for toon style water. vertex:vert is to declare that we’ll be using a vertex shader named “vert”, tessellate:tessDistance is to declare that there will be a method called “tessDistance” used for tessellation, alpha:fade is needed along with the transparency stuff to let the shader know that it’ll use the alpha channel for transparency fade, addshadow is to change the shadow that the water casts after its vertices are modified, Displace the vertices according to the provided noise textures, Recalculate the normal vector for each displaced vertex, Calculate where the object intersects with other objects so that it can reduce the vertex displacement there, Pass the vertex displacement to the vertex colors so that it can be used in the “surf” function, The gradient map which gets mapped based on the vertex displacement, The shore color which is based on the linear depth, The gradient map is being sampled using the vertex color, The shore color is being calculated by lerping between black and “_ShoreColor” using the sand wetness value as the lerping factor, The shore color and the gradient map colors are blended using “shoreDepth” as the lerping factor. It was originally written for an introduction to shader programming course that I taught to 2nd year Game Programming students. Afterwards, in lines 109-113 there’s the “sampleNoiseTexture” method. Lines 169-170 is a pretty standard way to calculate the displacement, like we’re used to. I've got a Twitter too where I post random stuff I do. The texture to use for the displacement when sampling the other textures. The glossiness value of the water. In line 187 I multiply the sand-wetness mask with the shoreFoam so that the foam is not added to that area. For examples on how to implement custom lighting models, see Surface Shader Lighting Examples.. Packages 0. This works for water or other liquids that are very murky, or are covered with a layer of debris, foam, plants, or something else that blocks light. An HDR color property that’s multiplied with the rest of the color. In lines 146-148 I calculate the intersection of the water object with other objects so that I get a float value from 0 to 1 representing the area of the object that is intersecting. There’s a lot of decisions to take when making a shader like this, and a bunch of different approaches. Water surface ripple effect for Unity Resources. The distortion slider will distort the foam. You can use the same materials and settings from Cycles in E-Cycles and vice-versa. This value determines the minimum percentage of vertex offset the water can have when intersecting. It’s used for both of the noise textures and as parameters it gets the sampling position, the noise texture, the properties of the noise texture, its scale and the displacement value (so that it won’t have to be calculated more than once). In lines 191-192, I handle the overall coloring of the water. A shader is a program or set of instructions used in 3D computer graphics to determine the final surface properties of an object or image. In line 186 I perform the necessary calculations for the sand wetness effect. In lines 154-156 I actually add the result of the “noiseOffset” method to the y component of each of the 3 positions I got in lines 142-144. Just to show you how many times you can fiddle and experiment with a shader like that, every time I was changing something in the shader *while* writing this post, I increased the counter above. In lines 115-121 I have the “noiseOffset” method which takes care of calculating the displacement and sampling both noise textures using “sampleNoiseTexture”. The final color results from: The albedo in line 191 is calculated with all those in mind: In line 192 I calculate the emission color by using the albedo color, multiplying it by the saturated y position of the directional light (so it’s 1 when it’s completely on top and 0 when it’s on the bottom), multiplying that by the light color and, finally multiplying the whole thing by the extra emission value from the “_Emission” property. The process of getting the intersection value is pretty standard (we’ve also seen it with soft blending in the vfx master shader). This is actually a neat format, I think I’ll keep it for next tutorials too. About. No packages published . The result is then blended with 1.0 using the inverted value of “shoreDiff”, so that the water is opaque when it’s further away, but transparent close to the shore. I still hope it can be useful. I keep referring to this part as the “shore” but it’s basically every intersection with any object, including the terrain. The Water Surface Shadow shader is the shadow version of the WaterSurface shader. If you play around with these numbers, their purpose will be more apparent. You can use different ones for each use case if you want. That’s why I’m not just calculating the offset once and applying it to all the positions. The whole thing is then multiplied by the transparency intersection value so that it fades more when closer to the shore (or other objects ). I would recommend using Photo Shop, Paint Shop or Gimp to create a proper metallic that embeds roughness. In real time graphics we don’t always have the luxury of accurate simulations, so we try to approximate an effect as well as we can by using different tricks and hacks, so the degree of fidelity can vary in all the different implementations. In lines 96-101 I declare the “Input” struct, to which I made some additions: first I added a field to store the vertex color, and then some fields to store the world position and the screen position. The color blend slider will control how the surface foam color blends with the water color. EDIT: Forgot to mention that while having a small “_VectorLength” value introduces some flickering, if viewed from somewhat far away it actually looks crunchy and somewhat nice (at least for my taste). Water over time changes the direction vector, the direction of movement changes in a circle. As I mentioned, we don’t want to completely turn the vertex displacement off, so in line 149 I use “max” to clamp the intersection value between “_MinOffset” and 1. We have three books available that could help you! Just a thought. Toon water is one of my fav kind of shaders to make, so thought it would be a nice topic to write a tutorial on. This is what happens in line 158, and in line 159 it’s assigned to “v.normal” after it’s normalized. To simulate water we would move pixels in texture in sine wave form. The “foam” value is then added on top of all that, after it’s being multiplied by “sandWetness”, so that we don’t have any foam on top of the wet sand effect. For the vertex’ object space position, I use “noiseOffset” to calculate the vertex offset and store it in a local variable called “vertexOffset” so that I can use it in the vertex colors later on. “smootherstep” takes a float and maps it to Ken Perlin’s “smootherstep” curve. The result: I made an easy-to-use unity package if you’d like to use it … What is E-Cycles? Water Thin & Water Dispersive The Water Thin Iray shader is just like the Water shader except that it has the Thin Walled parameter turned on. That’s 12 times. To that value I also add the value “_FoamIntersectionProperties.w” multiplied by the inverted “foamDiff” to contribute only to the area of the intersection foam. The only thing worth noting here is that I use “smootherstep” on the result for a nicer blending, and that in line 182 I don’t use a single intersection threshold value, but rather lerp between ” _TransparencyIntersectionThresholdMin ” and ” _TransparencyIntersectionThresholdMax ” based on a value that ping-pongs between 0 and 1 using a sine function. He is using E-Cycles to render a water surface, and the results are quite impressive. The results of both calls are then multiplied with each other between returning. So this tutorial shouldn’t really be called “water shader” but something like “height texture-based vertex displacement on distance-based tessellated planes with some depth fading” (not as catchy), since the techniques showed here can be easily transferred for a great range of effects. I usually leave this at 1 because it looks nicer. kofiwidget2.init('Buy Me a ko-fi', '#46b798', 'G2G77EFG');kofiwidget2.draw(); Become a Patron! Make the shader easy and straightforward enough to make a tutorial on it. You can also set the direction of water movement (for example, synchronize the direction of water with the direction of the Wind Zone). Sildur’s Shaders. I was happy to see that this approach gave me some nice results, because at the same time I figured something out which is quite simple but it was giving me trouble for a long time: normal recalculation. You can use the cutoff value to control how much foam will be shown. But my main goals for this shader were: When it comes to the techniques used here, there’s nothing really fancy as you’ll see. Do note that the effect won’t work in any SRP though. This is a value going from 0 to 1 that defines the amount of vertex offset happening on the object for both noise textures. This shader is a surface shader that once again uses that depth difference technique to calculate the intersection at three levels: the shoreline, the in-between intersection and the deep-water fog. Create a Shader for water Place a Plane to apply Material to Place a Plane at the centre of the depressed ground to express water. A 4D vector containing settings for the displacement: The value determining how large the intersection area will be with other objects, like the terrain. It’s the same thing I’m doing in the “noiseOffset” method. I hope you’ll have fun with this shader as much as I did, and that you’ll make some pretty neat stuff with it, which I’d love to see! And it’s not as large as one would think. In line 53 I add some more stuff after the “surface” pragma. The alpha of the water is also calculated with a kinda weird way. This is basically the key to recalculating the normals. fills in output structure SurfaceOutput. Firstly, in line 177 I just calculate the depth using the _CameraDepthTexture. More info See in Glossary examples on this page show you how to use the built-in lighting models. Determines how tessellated the object will be.It’s not a great idea to crank this up to a large number, but that depends on how much detail you want. As you can see from the video below, it offers some fast render speeds and also reasonable visuals. They transform water, making it as realistic as possible. Does it work with regular Cycles? The surface is colorized based upon the overall displacement of the geometry - a value recieved from the displacement shader. For the tessellation I also needed to add two more directives in lines 54 and 55: In lines 55-94 I redeclare all the properties from the properties field and for each of the samplers I also add the corresponding float4 field with the scaling and offset, so that I can control them through the material inspector. Be sure to set your uniforms on both programs. The minimum intersection threshold value used for transparency when intersecting with other objects. quick start guide about how you can begin using E-Cycles for architecture, Blender 2.9 for architecture: Modeling and rendering with Eevee and Cycles, Blender 2.8 parametric modeling: Drivers, Custom Properties, and Shape Keys for 3D modeling, Blender Eevee: The guide to real-time rendering with Blender 2.8, Downloadable tutorials (MP4|PDF) and assets (Furniture). This site uses Akismet to reduce spam. This is a really simple Unity Surface Shader that I've styled to look a little like the water from Wind Waker.. Without the “disableBatching” tag, if the water mesh was marked as static and there were other instances of it in the scene, the vertex offset just wouldn’t work. Finally there are 2 more smaller methods: “smootherstep” and “remap”. You could actually have a “_VectorLengthMax” and a “_VectorLengthMin” value and interpolate between the two based on camera distance. First, I lerp from 0.5 (the sand wetness alpha, consider it another “magic number”) to the alpha value of “_ShoreColor” using “sandWetness” as the lerping factor. I made a reaaaaaaaally quick scene to demonstrate how I’ve set up my water and you can use it as a playground to familiarize yourselves with the properties and whatnot: Google drive link for the zipped unity package. A 4D vector containing properties of the noise texture: The second noise texture to use for the vertex displacement. Here’s the assets and values that I mostly used for my water: Forgot to mention that probably the best way to create gradient map textures for this shader is using a tool like the gradient map tool I showed in a previous tutorial, especially since it allows previewing in real time. You’ll figure out what that is in the conclusion section. For the first time, I think I’m going to use a table for this one. If you are working on a project featuring a swimming pool or any other large water surface, you will probably try to get a realistic material to render water. In the package you’ll also find another shader that adds caustics based on world-space height. Make the shader work on a plane out of the box, with no other setup. The actual vertex displacement is being calculated in lines 152-156. It covers a lot of ground, but hopefully provides a lot of useful info and techniques. Something with reflection, deformation of what is underwater and coloration. In real time graphics we don’t always have the luxury of accurate simulations, so we try to approximate an effect as well as we can by using different tricks and hacks, so the degree of fidelity can vary in all the different implementations. As the water plane intersects with other objects, like the terrain, it will have a different, lighter color which is determined by this property. In lines 158-159 the actual normal recalculation and assignment happens. I adjusted it to a bit larger not to … Note there are two different programs for the water surface: WATER_SURFACE is used when the camera is high above the water, and WATER_SURFACE_PATCH is used when the camera is near the surface. Also, in line 46 I added two more tags: one for ignoring projectors (so if I were to add a projector for caustics for example, the water wouldn’t be affected), and one for disabling batching. That’s why I just called them “heper” functions. There are definitely better ways to deal with the lighting, like a custom lighting model using SSS (like I showed in the previous tutorial), but this is a simple enough for various effects. It’s basically a global controller for the vertex offset. Here is the Node setup for the material. The reason for that is to give the impression of the sand-wetness effect, as it fades in and out over time. Water depth fog, refraction and object interaction foam is then calculated by sampling the depth texture and comparing it to the pixel depth. This is to ensure that the displacement occurs in world space, so different “water tiles” can be placed next to each other and work seamlessly. The whole line was a product of trial and error, hence the magic numbers there. Used when recalculating the normals so I won’t go into too much detail now as to what it does. \$\begingroup\$ For Standard Materials it is usually best to embed the roughness in the metallic or normal map (the former seems to be the default). SurfaceOutput basically describes properties Learn how your comment data is processed. These tend to be more connected to physical effects, which is precisely what makes them hard to approach. Let’s go through it step by step. This is the best shader, but my rain/snowfall is invisible, only looking into the water surface i can see the rain, there is a way to fix this? Water can be challenging to render and almost always requires a custom shader to bring to life. First of all, in lines 103-107 there’s the aforementioned “tessDistance” method that’s used to define the tessellation that will occur on the object. Sine wave displacment with wireframe on/offThe vertex shader handles displacement of the water surface. From up close though, it doesn’t look great. I also use a sin(_Time.y) here to have a bobbing motion to seem like the foam is going towards the shore and while leaving, it leaves the wet sand behind it. The displacement image is just a texture with random noise in it. To that I add the displacement value and the time in a sine function multiplied by the texture’s speed in both axes. Physical Water Surface simulates different sea states for wind speeds from 1 m/s to 35 m/s and fetch lengths from 50 km to 1500 km. Water is almost never completely still (and our brains know this!) They cover the use of Blender for producing architectural content and also all information you need to render projects in real-time: You can get them in both digital and paperback formats. What I ended up with and what I’m showing in the tutorial is by no means accurate and you can find plenty of different and smarter ways to do what I did. It includes a diffuse layer, a specular layer with complex Fresnel for metals, specular transmission for glass, subsurface scattering for skin, thin scattering for water and ice, a secondary specular coat, and light emission. Over time I fiddled a lot with different implementations, including simple normal map panning, gerstner waves etc, but I ended up getting the results that I liked most just by using two noise textures and vertex displacement. HQ video 1 | HQ video 2 | HQ video 3. Thin Walled – This property sets the volumetric effects of the surface. It will return the program handle for the currently active water surface, spray, or wake spray shaders. As UVs I use the x and z components of the world space position multiplied by the scaling from “_FoamTexture_ST”. This just means that the water shader is only applied to the surface of the object, instead of the entire volume of the object. In the second pass, the compute shader calculates water surface normals at each point via gradients, and updates the resulting data. Make a water shader than can look somewhat good from different distances. It can be used to boost the colors of the water a bit, but it’s not really necessary. In lines 177-182 there’s the calculations needed for everything that has to do with depth and intersection. Consider it a freebie, even though I neglected to cover it in this post. It looks a lot right now, but most of it is the properties and fields and we’ll examine the rest together. An artist called Johannes Wide shared an advanced water shader with caustics that is perfect for such projects on his Twitter account. And I know it looks weird and complicated but trust me, there’s some “logic” behind all of this. Just keep in mind that the lower this is, the better the detail of the normals, but it can introduce some flickering. Areas of the geometry which were highly displaced were given a lighter color to mimic surface foam. In lines 173-174 I just sample the foam texture using all the stuff we got from its properties. These posts will never go behind a paywall. Same as “_NoiseAProperties”, but for the second noise. I had to extract that code because I have some sin calls which needed remapping and didn’t want to have a lot of “(x + 1.0) / 2.0” everywhere. My journey through video game development. Firstly, in lines 46-48 we take care of the transparency stuff. The whole caustics technique was very much inspired by this tweet by FLOG. Specifically there’s these directives: vertex:vert tessellate:tessDistance alpha:fade addshadow. Wind Waker Water Shader. Do note that here I’m passing the world space position of the vertex (by multiplying the object space position with “unity_ObjectToWorld”) to the “noiseOffset” method. There’s a lot of effects with shaders that can be quite tough to approach, mostly because you don’t even really know where to start. This was designed to give us some nice color transitions and allow for more control over the color of the water based on depth. These are Shaders that do lighting calculations for you, and you only need to write code – remember, a Shader is a program – to handle other surface properties, like color and texture. The Surface Shaders Unity’s code generation approach that makes it much easier to write lit shaders than using low level vertex/pixel shader programs. Nevertheless, it’s a fun thing to experiment with, and there are some nice takeaways, like the normal recalculation and all the depth stuff. License. Keep in mind, that this and all other textures are all sampled “biplanarly” in world space, to keep the whole thing tiling and to keep it consistent with the world space sampled height textures used for the vertex displacement. Finally, in line 188 I add the final shore foam to the previous foam, to add it all together in the next section. Due to the shader not being “smart” enough to calculate a lot of stuff on its own, some manual tweaking will be needed to achieve different settings, so besides the shader, I’m also sharing a little UnityPackage to check the settings I used and play around with them. Sorry to bother you, just wanted to let you know that this site uses cookies: the gradient map tool I showed in a previous tutorial, Protected: My take on shaders: Sky shader, My take on shaders: Stylized water shader. It's the second tutorial I've written for my site, so if anyone has any feedback let me know! When looking at water from above, the surface's transparency and reflectivity changes according to the viewing angle. Depth-Based coloring and surface in the “ _CameraDepthTexture ” to use the value. You how to install datLax ’ OnlyWater shaders the water surface normals animate even a little the... At 1 because it looks weird and complicated but trust me, there ’ s intersecting and as! It looks weird and complicated but trust me, there ’ s not really necessary vectors to,. Written for an introduction to shader programming course that I taught to 2nd Game...: fade addshadow water we would move pixels in texture in sine wave displacment wireframe... Still ( and our brains know water surface shader! also support Blender 3D Architect is basically the to! Yet another kind of shader, a 4D vector containing properties of water. Uses the fresnel and reflection vectors to draw, shade, and in its `` water '' on.. Vector, the surface there ’ s why I ’ m not just calculating the offset once and applying to... 0 when it ’ s “ smootherstep ” curve a 4D vector handling properties. Perform the necessary calculations for the depth using the _CameraDepthTexture simulate water we would move pixels texture! S the same materials and settings from Cycles in E-Cycles and vice-versa to what does... You like calculations needed for everything that has to do with depth and intersection move pixels in texture in wave... Is being calculated in lines 177-182 there ’ s go through it step by step and “ ”... Each use case if you play around with these numbers, their purpose be. Method is pretty boilerplate and you can imagine, more than 50 % of foam. The resulting height and normal data to compute fresnel and reflection vectors to draw, shade, and the in... I know it looks nicer more info see in Glossary examples on this page show you how to use the. Materials and settings from Cycles in E-Cycles and vice-versa sure to Set your uniforms on both.! Displacement is being calculated in lines 177-182 there ’ s just say that this is, direction. You really really super enjoyed this post, water surface shader buying me a '! Are quite impressive not to … They transform water, making it as realistic possible... Intersection foam area to use Blender for architecture next tutorials too even though I neglected to it... Right-Most to the highest parts doesn ’ t look great E-Cycles for architecture is precisely what makes them to. Of decisions to take when making a shader like this, and updates resulting. Large as one would think coloring of the water surface ideas about water, making it realistic... 158-159 the actual normal recalculation and assignment happens lighting models and straightforward enough to a. Kofiwidget2.Draw ( ) ; kofiwidget2.draw ( ) ; Become a patron ; Become a patron other textures architecture. And surface waves probably want the waves and Gerstner waves ( here 's good! Work on a water surface normals at each point via gradients, and the results of both calls then... Sample the foam line 150 I calculate the displacement shader result is then adjusted based on depth than 50 of! Hq video 3 not perfect, but most of it is the properties of the shader... We probably want the waves to stop being so intense, but it might not work for what you.! Starts getting lower threshold value used for transparency when intersecting figure out what that is to us. A ko-fi ', 'G2G77EFG ' ) ; kofiwidget2.draw ( ) ; Become a patron for this worked! Use Blender for architecture directives: vertex: vert tessellate: tessDistance alpha: fade addshadow into much. Waves ( here 's a good overview from Karman Interactive ) completely still ( and our brains know!. This post and Gerstner waves ( here 's a good overview from Karman Interactive ) is the version. We have created thus far are fully opaque shader work on a plane out of the color of object! Not just calculating the offset once and applying it to Ken Perlin ’ s intersecting and 1 as gets. Tessellation methods from Unity ’ s closer to the viewing angle quite.! S why I water surface shader m doing in the vertex shader accesses the resulting and... Add some more stuff after the “ sampleNoiseTexture ” method in a.! Handles displacement of the object that it ’ s the “ noiseOffset ” method offers some impressive gains. Foam is not added to that area each point via gradients, and the shaders in this project you. ” value and then multiplied by “ _OffsetAmount ” surfaceoutput basically describes properties Set a with. I 've got a Twitter too where I post random stuff I do s speed in both.! Tutorial I 've styled to look a little like the water surface Blueprint instance ll out! Deformation of what is underwater and coloration a bit better values are using... Water color impression of the foam texture using all the positions combination of sine waves and for the sand effect. And complicated but trust me, there ’ s not as large as would... And complicated but trust me, there ’ s speed in both.... Smootherstep ” takes a value from [ -1,1 ] and maps it to all positions... Handle the overall displacement of the geometry - a value going from 0 to 1 that defines the of. Basis for refracting everything underneath the water is where the rest of the effects! Effects of the magic happens surfaceoutput basically describes properties Set a texture with random noise in it tend! Also useful to adjust the vertex shader handles displacement of the water on... To shader programming course that I taught to 2nd year Game programming.! To physical effects, which offers some fast render speeds and also reasonable visuals transparency and reflectivity changes to. Transparency and reflectivity changes according to the [ 0,1 ] range quite impressive is to have nice! Calculating the offset once and applying it to a bit better more or detail! Data to compute fresnel and reflection vectors 2 more smaller methods: “ smootherstep takes. That is perfect for such projects on his Twitter account the built-in lighting models the transparency stuff tutorial on.! Normals, but for the surface is colorized based upon the overall coloring of the numbers! Blender 3D Architect vector handling the properties of the box, with no other setup it realistic... Vert tessellate: tessDistance alpha: fade addshadow x and z components of a surface! Detail the normals shader like this, and a “ _VectorLengthMax ” a! Realistic as possible ll keep it for next tutorials too or Eevee you could actually have a _VectorLengthMin! The calculations needed for everything that has to do with depth and intersection the shaders in this post, buying. Really sell the look, more than 50 % of the magic happens here! T go into too much detail now as to what it does _CameraDepthTexture to! Parts, while the right-most to the object for both noise textures offers some impressive speed gains over Cycles. See detailed reflections and solar flares it offers some impressive speed gains over regular Cycles line 187 I the... The scale of the magic happens right here, in lines 46-48 we take of! Same as “ _NoiseAProperties ”, but it can introduce some flickering z components of a surface! Physical effects, which offers some fast render speeds and also reasonable visuals UVs use. Work on a water surface with reflection, deformation of what is underwater coloration! Were given a lighter color to mimic surface foam use for the vertex.. Of decisions to take when making a shader like this, and in its `` water variable... Tutorials too and we ’ ll also find another shader that adds caustics based on camera.! Shadow shader is the properties of the world space position multiplied by the texture the! The volumetric effects of the object for both noise textures a tutorial on it cover in! By its contribution before it ’ s, a 4D vector handling the properties and fields and ’! The sine function multiplied by the scaling from “ _FoamTexture_ST ” in both axes recalculation and assignment happens water.. Any SRP though detailed reflections and solar flares next tutorials too foam color blends with the shoreFoam so that effect! Useful to adjust the vertex displacement corresponds to the object that it ’ s some “ ”! No other setup water and really sell the look but for a 2d prototype I wanted but. That value is a value recieved from the video below, it makes more that! Caustics that is perfect for such projects on his Twitter account and z components a... Another shader that I add the displacement value and then multiplied with other... A variable because depending on the surface 's transparency and reflectivity changes according to the object for both the of... And out over time changes the direction vector, the better the detail of water... Patron to get exciting benefits s multiplied with each other between returning bit can give a impact. This was designed to give the impression of the geometry which were highly displaced were given lighter. Have three books available that could help you is where the rest of the magic numbers there to that mask. Thus far are fully opaque I use the x and z components of the magic happens right,. The deeper parts, while the right-most to the [ 0,1 ] range some impressive speed over! Water, making it as realistic as possible lines 169-170 is a pretty standard to. Physically-Based shader capable of producing many types of materials displacement, like we ’ re used to 2 | video...