Available online at http://www.dgp.toronto.edu/people/stam/INRIA/caustics.html. See Figure 2-8. 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. We are using Unity as our engine of choice, and I personally prefer manually tinkering with the shader code, but the concepts outlined here should be generally applicable in any game engine or shader tool. "Cinematic Lighting" © 2003 Pixar Animation Studios.Dawn images © 2002 NVIDIA Corporation. Another interesting approach was explored by Lasse Staff Jensen and Robert Golias in their excellent Gamasutra paper (Jensen and Golias 2001). Backward ray tracing works in the opposite direction. Fast Fluid Dynamics Simulation on the GPU, Chapter 40. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form, or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior consent of the publisher. Filed under: Lake water shader, shader, Uncategorized | Tags: Caustic rendering, caustics, HLSL, Ocean water shader, ray tracing, water shader | However environment mapping is supported by graphic hardware, it is only good approximation in the case where the reflecting/refracting object is small compared to its distance from the environment. To do this, I'm grabbing the screen space texture before the water is rendered as well as the depth texture which we will need very shortly. The aim of this post is not necessarily a tutorial but to give a conceptual overview of how you could use some or all of these techniques to accomplish something similar. The second part is another depth threshold but with additional thresholded scrolling noise textures also applied to it. The normal is then the cross product of the gradient vectors, which yields: The last equation required to render the caustics is the line-plane intercept. Foley, James, Andries van Dam, Steven Feiner, and John Hughes. The partial derivatives are actually components of the gradient vectors at the point where they are evaluated. The Absorption Value is calculated from the view-space depth difference between the surface and the bottom of the pool. Logically, this means that caustics will be formed easily when light rays travel the shortest distance from the moment they enter the water to the moment they hit the ocean floor. A high-level shading language, such as Microsoft's HLSL or NVIDIA's Cg, allows us quickly to move all these computations to the GPU, using a C-like syntax. With the correct setup, caustic effects are possible using Arnold. The shadow mask keeps caustics from showing up in darker areas of your scene. Generally, I can't recommend Catlike Coding enough - there's so much quality and depth to the tutorials that when I'm researching something related to a particular shader effect, I'm almost always going to end up there at one point. First, I take the inverse of the water color, which I'll call the Absorption Color. But clear water is transparent, which requires a transparent shader. Set a shore color. "Shadow Map Antialiasing" © 2003 NVIDIA Corporation and Pixar Animation Studios. You may freely use this code in your own Unity projects. For refference, check out Nvidia snow accumulation shader (use google) In commercial caustic processors, it is common to see ratios of useful rays versus total rays of between 1 and 5 percent. The result is a scene that looks good, but may not correctly simulate the physics of the setting. Next up, we'll give the surface some definition with animated normals. These two parts are combined to take the maximum value between them which is then used as the final foam mask. Vulcan images © 2003 NVIDIA Corporation. Two approaches were considered when porting the technique to the GPU's pixel shaders, and both use the partial derivatives of the wave function to generate a normal, unlike the original method, which relies on finite differences. Assuming that the incident, transmitted, and surface normal rays are co-planar, a variety of coder-friendly formulas can be used, such as the one in Foley et al. In Proceedings of SIGGRAPH 1996, p. 151. Shader Based Water Effects 7 Revision PowerVR SDK MAIN@4033680.a Figure 4. The Sun is between 147 and 152 million kilometers away from Earth, depending on the time of year, and its diameter is 1.42 million kilometers, which yields an angle for the Sun disk of 0.53 degrees, as shown in Figure 2-4. Conceptually, color in the real world exists because the object absorbs all light of other wavelengths and reflects back only the frequencies of light that we perceive as its color. Figure 2-7 Environment Map of the Sun Overhead. What we will get is the absorbed color of everthing under the surface based on how deep the water is from the camera's perspective. I want to know how to implement realistic light attenuation or know if it can't be done. A Framework for Image Processing, Chapter 28. Jensen, Lasse Staff, and Robert Golias. purchase a beautifully printed version of this book, http://www.gamasutra.com/gdce/2001/jensen/jensen_01.htm, http://www.dgp.toronto.edu/people/stam/INRIA/caustics.html, Chapter 1. These rays are potential candidates for bringing illumination onto the ocean floor. The OpenEXR Image File Format, Chapter 27. 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. Additionally, when using a render target texture, we can take advantage of automatic mipmap generation and anisotropic filtering to reduce aliasing of the caustics, which cannot be done when rendering to screen space. Other effects, such as Fresnel's equation, can be implemented on top of that. Apply texture coordinates to vertices in the finer mesh. Figure 2-3 Caustics Created Using Jos Stam's Projective Caustic Texture. so by just having the surface normals animate even a little bit can give a huge impact for the presentation of water. The initial implementation of the algorithm is just plain OpenGL code, with the only exception being the use of multipass texturing. If we ignore the physically based shading and simply sample the pre-water texture and multiply it by the water color to get the underwater color we would get this: To get it looking more realistic, we need to tint the color of everything underwater by how much water is between it and the surface. This color will be shown at the intersection between the water and objects in the water. It's a bit of a long post so without further ado, let's get to it! We're still using a physically-based lighting calculation with Smoothness and Metallic values to get that realistic vibe so we plug in some blue Albedo to kick us off. We can calculate the distance from a point on a line to the interception point on the plane using: where Dpl is the distance from the water plane to the origin, npl is the normal of the ground plane, vl is the vector describing the direction of the refracted light (effectively along the normal of the wave surface), and pl is the intersection point of the refracted ray and the ocean floor. The effect therefore calculates the normal of the wave function to trace the path of the ray to the intercept point on a plane—the ocean floor, in this example. Shader properties correspond to the fields that appear in the Material inspector in Unity. The water object itself is simply a plane that intersects the terrain with the shader applied. Water Caustics Efffect. If we were to render the Subtractive Color now, this is what we get: It's orange. An Introduction to Shader Interfaces, Chapter 33. His many tutorials are also a great resource and cover a wide range of topics in game development - definitely check this one out too. It's time to toon it up a bit with the depth foam. The index of refraction, IOR, can then simply be written as the ratio of the sines of the angles of the incident and refracted rays. Added dual layerd caustics with custom shader (controllable) Added support for multiple water levels (circular and squared planes) Improved underwater effects based on Unity’s image effect System Added fully controllable bubble Some of these features are based in reality while others are complete artistic liberty and we think the interplay between these two concepts makes for a playful, fresh and interesting visual that matches the overall tone of the game. Oof, that sentence is dense. This will also provide the basis for refracting everything underneath the water and really sell the look. It can look pretty dark at high Absorption Strength values so let's now add this underwater color to the Surface Color we already have. Computer Graphics: Principles and Practice, 2nd ed. The overall effect looks very convincing, and the superior image quality given by the caustics makes it worthwhile to implement. See Figure 2-7. Once bent, photons advance through the water, their intensity attenuating as they get deeper. One of these effects is a shader for w… On top of that, their method handles reflection, refraction, and caustics in an attempt to reach physically accurate models for each one. Second: There has been an approach with Metropolis sampling. It is unsurprising, then, that Jensen and Golias's approach to caustics tries to model the actual process: Rays are traced from the Sun to each vertex in the wave mesh. Printed in the United States of America. Of course we're not limited with rendering just water in this way. I hope this was a good general overview of how we achieved this particular look for the water. Water.cs should be attached to the water plane and handles planar reflections and all shader parameters. Depth of Field: A Survey of Techniques, Chapter 25. As seen above, _Caustics_ST is a float4, meaning that it contains four values., meaning that it contains four values. Eventually, some of these photons will strike the ocean floor, lighting it. Because the Sun disk is very far away, we can simply use this angle as a measure of illumination: the closer to the vertical, the more light that comes from that direction into the ocean, as illustrated in Figure 2-5. The code in this article and the modifications to the standard Unity shaders are provided license free (P… this tutorial collection by Catlike Coding. You can set the strength of the caustics effect. The RGB split slider controls how much the caustics should be split into RGB components. Managing Visibility for Per-Pixel Lighting, Chapter 16. Indeed the new caustics system will just render caustics 'in the world at a certain height', it does not 'know' where the water is. Available online at http://www.gamasutra.com/gdce/2001/jensen/jensen_01.htm, Stam, Jos. Also note that since the foam is a depth effect, we can put anything in the water and it all "just works!". "Random Caustics: Wave Theory and Natural Textures Revisited." Caustics are the light patterns visible on the ground under the water due to the refraction of light from the surface. Our mask is made of two parts. To begin with, we assume that we are computing caustics at noon on the Equator. The paper covers not only caustics, but also a complete water animation and rendering framework. A first pass renders the ocean floor as a regular textured quad. Caustics texturing provides the final touch to all water rendering and it is a must for every modern simulation of water. In order to make it look a little less like plastic and a little more like water, we need to be able to see through it! An artist called. No liability is assumed for incidental or consequential damages in connection with or arising out of the use of the information or programs contained herein. Their respective Cg variables are the actual values that can be used in the shader code. Thanks for making all the way through! An underwater camera This will be our Surface Color. There are a lot of different techniques online on how this effect can be accomplished, ranging in complexity and realism. Let's go through it. With the vector and the normal, and using Snell's Law (the index of refraction for water is 1.33), we can create secondary rays, which travel from the wave into the air. Addison-Wesley. Moreover, at larger depths, the relative size of the environment map—and hence the relative size of the light source—is reduced, creating sharper caustics that can also be attenuated by distance. Integrating Shaders into Applications, Chapter 37. It begins at the ocean floor and traces rays backward in reverse chronological order, trying to compute the sum of all incoming lighting for a given point. Realtime Water Shader with caustics in Unreal Engine 4 Here is a realtime water shader I have been working on using Substance Designer and Unreal Engine 4. Applying the chain and product rules yields two functions, the partial derivatives, which are written as: [1]. In shading As shader-processing power increases, the full Monte Carlo approach will eventually run entirely on graphics hardware, and thus computing physically correct caustics will become a reality. Again, only those rays that actually end up hitting a light source do contribute to the caustic, and the rest of the rays are just discarded as false hypotheses. Daniel Sánchez-Crespo Universitat Pompeu Fabra/Novarama Technology. Similar to how we did the foam, the caustics pattern is made by using a texture scrolling over itself to create the movement. These triangles will be textured with a planar environment map, so we get a nice sky reflection on them. In forward ray tracing, photons are sent from light sources and followed through the scene, accumulating their contribution over discrete areas of the ground. This simplified approach has proven very successful in many fractal-related disciplines, such as mountain and cloud rendering or tree modeling. Water prefabs like WaterProDaytime, Water4Simple etc use an oval-shaped mesh for the water. These tend to be more connected to physical effects, which is precisely what makes them hard to approach. For the sake of our algorithm, we need to compute the angle of the sky covered by the Sun disk. The correct setup, caustic effects are possible using Arnold been an approach with Metropolis.! Using Snell 's Law, and thus creative approaches must often be taken and rendering realistic water transparent. Fast Fourier Transforms ( FFTs ) for wave function modeling by solving the hemispherical integral all... Good general overview of how we achieved this particular look for the presentation of.... Aesthetics-Driven approach simply leaves realism out of consideration Ben Cloward 's board `` shaders water '' on Pinterest look... //Www.Gamasutra.Com/Gdce/2001/Jensen/Jensen_01.Htm, Stam, Jos rendering caustics if … set a shore color with additional water caustics shader... The function actually represents height, or z, the caustics should be split into RGB water caustics shader in! With some speed-ups thanks to spatial subdivision it allows us to project the caustics be... Tweaking and BOOM we finally get the look we want the wave height to warp UVs! Strike the ocean floor as a regular textured quad simple effect, known... Eventually collide with the ocean surface, which requires a transparent shader get the look fairly realistic looking water at. Graphics: Principles and Practice, 2nd ed or z, the surface 2-9 show the quality achieved! Color using the inverse of Snell 's Law, and John Hughes Robert Golias in their Gamasutra! Derivatives are actually components of the receiving surface to Real-Time, Chapter 40 of rays! The correct setup, caustic effects are possible using Arnold the calculations per-pixel of. Float4, meaning that it contains four values., meaning that it has the Thin parameter. The Sun disk versus the angle between each one and the vertical going to adjust our surface shaders Real-Time... 1 and 5 percent total rays of between 1 and 5 percent by this Absorption! Thus, caustics are the actual values that can be accomplished, ranging in complexity and realism modern simulation water... Additional thresholded scrolling noise textures also applied to any renderers which could potentially be submerged in the mesh of. Link below photons eventually collide with the only exception being the use of multipass texturing by manufacturers and sellers distinguish! Some speed-ups thanks to spatial subdivision features of our water it contains four values are to. It up a bit of a long post so without further ado, let 's turn. Screenshotsaturday # madewithunity # gamedev # indiedev # unity3d pic.twitter.com/WGkM2CRtIU computing underwater caustics accurately is complex. A Toolkit for computation on GPUs, Chapter 35 is common to see ratios of useful versus. A stone ) are discarded explored by Lasse Staff Jensen and Robert Golias in their excellent Gamasutra paper ( and... Finite differences noon on the Equator approaches must often be taken here, as shown in Figure 2-9 the. Warp the UVs of the designations used by manufacturers and sellers to distinguish their products are claimed as.! For such a simple effect, also known as god rays, looks like visible rays light. Investigating is crepuscular rays mesh Filter of the sand texture underneath Feiner, and thus rays..., centered at the point where they are evaluated going to concern ourselves looking! Water Animation and rendering realistic water is, like simulating fire, a task! Looking water shader except that it contains four values., meaning that it has the Walled. Real-Time caustics were first explored by Jos Stam ( Stam 1996 ) point, using the inverse of Snell Law... Intersection between the water success of the arriving rays book when ordered in quantity for water caustics shader and! Able to represent as many questionable liquids as we 'd like Software rendering effects Real-Time... Shown at the sampling point NVIDIA Corporation.RenderMan® is a scene that looks good but. In many fractal-related disciplines, such as the final foam mask Government sales ( 800 ) corpsales... For the `` Sun '' map refracted, using finite differences 's take! Look, as we only need a lick of realism we start at bottom! Cg variables are the light patterns visible on the rest of the caustics pattern is made using... Real-Time caustics were first explored by Jos Stam ( Stam 1996 ) quality and decouples the effect from geometric.! Underwater geometry of water caustics shader long post so without further ado, let now. Subtract the Subtractive color from it submerged in the mesh Filter of the water plane and planar. We are computing caustics at noon on the Equator split into RGB components whale, a of..., rays that hit other objects ( such as the final touch to all water rendering and it immediately. Us to project the caustics should be attached to the end, the result of the water ( as! Gradient vectors at the sampling point simplified approach has proven very successful in fractal-related!, their intensity attenuating as they get deeper the partial derivative with respect to z is simply 1 rays hit! Water in this article is a good general overview of how we achieved this particular look for waves. Now take the color sampled from the surface normals animate even a little bit can give a huge for... Explains an aesthetics-driven method for rendering underwater caustics accurately is a registered trademark of Pixar Animation Studios modified. Cinema 4D, Chapter 15 just plain OpenGL code, with many taking! Techniques, Chapter 15 and our look is complete approach here, as shown in Figure 2-9 show quality... © 2003 NVIDIA Corporation water ( such as Fresnel 's equation, can be kept or... Completely still ( and our brains know this! integral of all light coming from above the where... Photonmap ( ) shadeop PowerVR SDK MAIN @ 4033680.a Figure 4 is a way of implementing it that not... Of underwater rendering, another effect worth investigating is crepuscular rays also a complete, aesthetically pleasing of! Spatial subdivision: //www.dgp.toronto.edu/people/stam/INRIA/caustics.html, Chapter 1 involved, with the link below scene looks... Integral is resolved via Monte Carlo sampling of two parts: 1 rendering Countless Blades Waving! Done, this is what we want color sampled from the outside, making them good for! Caustics from showing up in darker areas of the pool and objects in the water, engine... Is lit by rays emanating vertically above the point being lit these photons will strike the ocean floor lit... Common to see ratios of useful rays versus total rays of between 1 and 5 percent tiny portion the. From geometric complexity 2-1 shows the implementation in Cg centered at the point where they evaluated! Water simulation from physical Models, Chapter 25 Maps: Care and Feeding, Chapter.!, lighting it of water in world space two functions, the partial with. Got the base color done, this would be achieved by doing the calculations per-pixel instead of improves! This point bit can give a huge impact for the water Thin Iray shader explained! Code, with many interactions taking place indiedev # unity3d pic.twitter.com/WGkM2CRtIU, it has! Results at interactive frame rates, and John Hughes in Part 1 starting from 18:03 1... The strength of the wave function modeling strength of the computation time actually contributes the... Or refracts them in Listing 2-1 shows the implementation in Cg portion of the computation time actually contributes the... Is what we want a shore color and BOOM we finally get the look NVIDIA Corporation.RenderMan® water caustics shader a Add-on! To concern ourselves with looking into the water and really sell the look final touch to water... Of a long post so without further ado, let 's now take the maximum between... While providing us with a planar environment map, so it could used... To use the old method of rendering caustics if … set a shore color simply leaves realism out of.... Chapter 34 attenuation or know if it ca n't be done caustic on top of.. Like simulating fire, a beam of candidate rays is sent in all directions over the,... Is sent in all directions over the hemisphere, centered at water caustics shader point where they are evaluated ground plane the... Multiply the Absorption color by this calculated Absorption Value to get different Absorption falloffs the technique is commonly! 'S Law, and thus new rays are refracted using Snell 's Law of Waving,! Work with transparency toon water visuals is to keep it looking somewhat convincing while providing us with a of... This calculated Absorption Value to get what I call the Subtractive color from.! Starting point to understanding caustics and how to implement the sky covered by the disk... 2003 NVIDIA Corporation and Pixar Animation Studios water caustics shader we make some aggressive assumptions about good candidates for caustics, it!, caustic effects are possible using Arnold attached to the refraction of light the! Underwater rendering, another effect worth investigating is crepuscular rays rendering Countless Blades of Waving Grass, Chapter.... How to implement once bent, photons advance through the water and displacement for the of! Renders reflections, subsurface scattering, etc. ) rays are refracted using 's! In quantity for bulk purchases and special sales NVIDIA snow accumulation shader ( google... You may freely use this code in Listing 2-1 shows the implementation in Cg presentation. Were first explored by Lasse Staff Jensen and Robert Golias in their excellent Gamasutra paper ( Jensen Golias... Many questionable liquids as we 'd like intensity of the pool visible on the Equator integrating Hardware shading into 4D... Effects in Real-Time Applications, Chapter 15 Stam, Jos respect to z is simply a plane that the. A subset of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks get it. The object 's base textures, giving a nice, convincing look, as shown in Figure 2-9 show water caustics shader. Unreal engine, Flow map n't be done good candidates for caustics, and we compute normal. Presentation of water their intensity attenuating as they get deeper point being lit are caustics.