What is the best method to create this kind of reflection and how to animate it?
-
8$\begingroup$ These are known as Caustics. Unfortunately these are very computationally expensive to simulate, and cycles isn't very good at it. See blender.stackexchange.com/q/8645/599 and blender.stackexchange.com/q/10434/599. You might want to try a renderer with bi-directional pathtracing and MLT, e.g. luxrender. $\endgroup$– gandalf3Commented Feb 7, 2015 at 20:10
-
$\begingroup$ A wave modifier can create the ripples in a surface. If it is glossy and lit by a lamp, perhaps they will cast onto another object. Never tried it. $\endgroup$– The BeachdancerCommented Feb 7, 2015 at 20:21
-
$\begingroup$ If it's just an effect, rather than physically accurate to the scene, is there a good way to do a procedural caustic texture? $\endgroup$– ajwoodCommented Feb 7, 2015 at 20:30
-
$\begingroup$ There is a great tutorial at blendernation.com/2015/04/27/cycles-water-uber-shader (linked to Cycles | Water Uber Shader). And there has been an approach with Metropolis sampling. $\endgroup$– SamothCommented Jan 22, 2016 at 15:35
-
1$\begingroup$ There is now Caustics support since Blender 3.1 $\endgroup$– SamothCommented Jun 1, 2022 at 14:40
4 Answers
As @gandalf3 mentioned, Cycles is not great at this, if you want to make your render physically accurate; My approach can give you photo realistic results, which are not, however, physically accurate.
Water Movement
You can use a Displace modifier, a Stucci procedural texture and an empty for Texture Coordinates
in order to simulate the water movement. Do keep in mind that you'll need a lot of samples in order to get a usable image and a build with the Metropolis patch.
To do this, first add a subdivided plane (Shift + A>Mesh>Plane); then, go to the Modifiers tab in the Properties editor and add a Displace
modifier and press the New
button to add a new texture. After that, go to the Texture tab and select Stucci
; you can later tweak this setting for better results.
Then add a Empty, go back to the Modifiers of the plane and select Object
in the drop down list for Texture Coordinates
; after that, set the object to be the empty you created earlier.
You can then animate the position and/or rotation of the empty, in order to "animate" the water movement.
Then you can simply add some glossyness to the plane point a lamp at it and render.
Caustics Simulation
A better way is to simulate Throw Patterns on a Spotlight.
Add a Spotlight (Shift + A>Lamp>Spotlight); then add another plane, in the location of the spotlight, and move it down. After that, parent the plane to the spotlight, by selecting the plane first and then the spotlight and pressing Ctrl + P>Offset (Keep Offset). Now, go to the node editor and add a material to the plane, wich looks like the following node tree:
In order to animate the caustics, you can use a Vector Mapping
node.
Here, you can animate the X and Y values, for the location, in order to move the caustic pattern around.
Now you can point the spotlight at your objects and git it a test render. Make sure the strength of the spotlight is rather high - I used 2000 - otherwise, you'll not see the light on your object. Also, you can control the softness of the throw pattern by adjusting the distance of the plane to the spotlight or the Size
field found in the Lamp tab, on the Properties editor, when the Lamp is selected:
This gives me this result:
-
$\begingroup$ The ocean modifier is also good for this. However this answer doesn't really explain the caustics part (which seems to be the focus of the OP's question) $\endgroup$– gandalf3Commented Feb 7, 2015 at 20:45
-
$\begingroup$ Thanks for the great solutions man! I've animated the rotation and contrast value of the Voronoi Texture (using Mapping Node and Color Ramp) and the reflections look amazing! $\endgroup$ Commented Feb 9, 2015 at 13:23
First:
There is now Caustics support since Blender 3.1
Second:
There is a great tutorial at blendernation.com (linked to Cycles | Water Uber Shader). The fake Caustics shader is explained in Part 1 starting from 18:03.
Third:
There has been an approach with Metropolis sampling.
Fourth:
There is a new Add-on by Eric Edelo, a "Fast & realistic glass shader for Cycles" called Prism.
One of its main features are:
Super-fast caustics with colors, dispersion & absorption
You have to pay $6.99 for it, but it should close this gap... This Post is not intended to be an advertisment and I'm not affiliated with Blender Market, I just found out about this news on blendernation.com and think, it might help you solve your question.
Fifth:
There is a new "fake" method for the effect you're looking for with Geometry Nodes: https://www.youtube.com/watch?v=C9iQKsShYIM
-
3$\begingroup$ I've been playing around with prism and from why I can tell it mainly does transmissive (refractive) caustics. Not reflective caustics like in the OP's picture. $\endgroup$– PGmathCommented Mar 18, 2016 at 15:00
-
$\begingroup$ At least they advertise it as that it "lets you build virtually any glass-like material, be it diamonds and gems, water bottles, fluids, lenses, ice and so on". To be honest, I didn't try it out on my own, but it should be possible. And it's probably possible to position a non-rendered (camera ray invisible) mirror below to achieve it... $\endgroup$– SamothCommented Mar 18, 2016 at 15:20
-
4$\begingroup$ See my comment on the cgcookie market page you linked, he did confirm that it only produces refractive caustics. $\endgroup$– PGmathCommented Apr 7, 2016 at 18:39
-
$\begingroup$ Yeah - so it might still be working by only using refractive caustics and a camera-invisible light source from below the water surface to fake this effect using Prism. Should be worth a try. $\endgroup$– SamothCommented Apr 8, 2016 at 9:08
-
$\begingroup$ As of today, November 2018, the second and the third ways don't work: Metropolis sampling addon became unmaintained in 2016 (as I understood, the creator had no time/desire to continue it), and the Prism realistic glass addon became unavailable too – the creator removed from Blender Market (it's very sad, I've seen it several months ago and wanted to try when I'll become more skilled with Blender – i.e, now). $\endgroup$– AivanF.Commented Nov 14, 2018 at 9:45
Is it has to be done in Cycles? If not, check Yafaray as an option for this kind of effects.
The trick in the scene below is the reflecting material which is 50/50 mix of Water and Mirror (shiny diffuse with 0% diffuse and 100% mirror reflection). You can adjust the proportion as per required brightness of the effect.. or should I say "realism"? :-)
It is also quite important to have fairly large caustical photon radius (1 or higher) and quite small number of mixes (50 or less) to produce sharp lines.
Also equally important to create not too sharp and not too soft edges on reflective surface, so carefully watch the number of subdivisions on the surface -- too many of them will blur the result.
To do caustics, I stepped to Luxcorerender and ended up with Appleseed-Render for Blender 2.8.
I did this with Blender 2.8 + Appleseed Render Add-on in a few minutes (just 200 Samples without denoising):
Blenderfile: https://drive.google.com/open?id=1dBlC4ulL06xoMoZKYBtfs4DaEb3G3oqF
Add-on (Appleseed beta for Blender 2.8 on Discord server under: #builds): https://forum.appleseedhq.net/t/how-to-download-latest-build/808
The Appleseed-Render is already included in the Add-on
-
4$\begingroup$ While it's correct that LuxCore is able to achieve correct caustics (which was mentioned in comments to the very question 4 years ago) you could include more information about how you did that, at least a screenshot of the scene layout with lights and render settings. This site is not a forum for posting pictures of results $\endgroup$– Mr ZakCommented Aug 19, 2019 at 18:46
-
3$\begingroup$ OP was using Appleseed for that image (as mentioned), most likely with the help of the following (IMO pretty bad) tutorial: youtube.com/watch?v=G-uV4NPlggo @MrZak $\endgroup$ Commented Aug 20, 2019 at 8:28
-
$\begingroup$ Is this a windows-only solution? $\endgroup$ Commented Feb 24, 2020 at 22:16
-
$\begingroup$ It's for Windows, Linux and Mac $\endgroup$ Commented Feb 26, 2020 at 7:39