Whenever I see these specific node tutorial videos, it just blows my mind imagining how people even discover the node combinations that lead to these results. Hats off to you, haha.
A couple things: - Because of how IOR is calculated in Cycles, your plane doesn't have the same IOR on both sides. The back side (which ever one the normal is facing away from) actually gets values smaller than 1. To fix this, you have to use the backfacing property and, conditional on that, invert the IOR with a math node (1/IOR). That's then the "thin film" version of the same effect. - On a similar note, it might actually be a good idea to also apply a subtle normal map to the plane, because irl, we're dealing with what's effectively smoke-like (similar poofy / cloudy structure) and you aren't always looking on that straight onto the "surface" of that cloud from all angles - "in a perfect world", you'd use a volume with varying IOR for this. In exchange the IOR variation would be far subtler than for this thin film approximation. But I don't think Cycles can do that yet. - Maybe that idea could be approximated by using a particle system and billboards? Might just look like a mess though. Would come down to trying it out.
@@DjTasteless adding a normal map is super helpful actually. It turns out doing so means you can get away with far lower (and effectively more realistic) IOR values. The IOR is technically supposed to be absolutely tiny.
@@JRHainsworth you don't. You can't. Cycles doesn't support this. you can, however, approximate it using the techniques offered in this video. My comment is merely suggesting improvements to that video's process: - use normal maps and smaller IOR instead of smooth but enormous IOR - make sure to use a thin film-style IOR (so backfacing needs the same IOR) - to approximate a volume, use a ton (thousands to millions) of tiny planes each with relatively small (very nearly =1) IOR values If Cycles *did* support volumetrically varying IOR, it'd amount to applying a volumetric texture or a voxel field or something, just like you'd do clouds and what not.
At 7:00 when you’re using the Vector Math to center the gradient, you can use a Vector > Mapping node to do the same thing. You can also simply use the Object output from the Texture Coordinate node; that will be centered on the object’s origin so the gradient will be centered. Great tutorial, I’ve been looking for an effect like this for a while! Keep up the good work!
Also, the object coordinates use the object's scaling, I think. Which means if you start with the standard plane and then just scale and position it as needed *in object mode,* the circular gradient is going to look exactly right (like the tightest fitting ellipse) and *precisely* end at the edge of the plane.
Ty for amazing tuto & effect =) 10:56 might as well add a noise modifier to Y location to get a more random effect (unless irl heat constant) 12:30 add a damped track to camera constraint to get the heat always face the cam.
Impressive result. i had the nutty idea to use this Heat distortion material in a fluid sim on my channel and it turned out great. keep up the great content!
Another way I've seen this done (a longer but perhaps more accurate way) is to do a render of smoke (openGL maybe?) in the applicable area, where the smoke is white with a low density. And then you add that in the composite and plug it into the displace node. It's definitely not as quick, but the use of smoke may make it a little more accurate, and it'd hold up to multiple layers in compositing.
select the plane [object context menu - visibility - ray visibility - shadow (untick)] There is likely a way to do it with nodes but couldn't tell you. If anyone knows reply!
@@para8D To stop an object from rendering shadows using cycles nodes, use the Light Path node 'Is Shadow Ray' output into the factor input of a Mix Shader, with a Transparent BSDF as the second shader input.
Actually air has the index of refraction 1.0003, it is not exactly 1. 1 is only for vacuum. Hot air has a slightly smaller IOR than air in normal conditions because it is less dense, so it is closer to vacuum. Usually in blender we approximate air with IOR exactly equal to 1, actually there is no air in empty spaces in blender, it is a vacuum. If we doing so, maybe it will be more accurate to use IOR less then 1 for hot air.
Hello, great tutorial. Thank you. I am trying to use this for the heat of the engines of an airplane during takeoff. However, even though the refraction plane color is pure white (1,1,1) and even though the Roughness is 0.00 and the IOR=1, the refraction plane is not transparent but is seen very clearly. I am working with the recent 2.8 version. Can you please assist me solving this issue? Thank you, Nissan
Bizarre... While this video was loading up, a WIX (create your own website) ad came up with an almost identical table/desk and laptop as the room you recorded this video in. When I skipped the ad, it literally looked like some dude from the WIX commercial transformed into you to talk about blender. lol It was funny. Made my day. Make your own website - by Creating Realistic Heat Distortions in Blender!
You can actually use these to create Son Gouku Aura, then add some rotoscoping on the character to make the edges glow. You can also add some multifractal to add some color to your distortion.. Hollywood VFX...
Do not duplicate the material for different distortions, Performance tip so you WON'T end up with 1000 materials for each distortion effect; that will eat your resources and pollute your workspace. In version 2.8 and above, each object got : object index pass and material index pass. You can use "object info" node and plug it into "math node" multiplier so each object that you give a different index number that will provide different distortion, while using the same material and save perfomance, let alone clean workspace enviornment. * the method described above works with : keyframes, drivers, library overrides and collection instances.
More controllable would be a layered render and handle that with a animated displacement map and traking to object, so you do not tie yourself with the background
I followed this but it seems my refraction is only being affected by the world HDRI and not taking into account the other objects and lights in the scene.. is this a blender limitation or could I be doing something wrong? Any help much appreciated! Thanks
The black stuff is visible because camera watches back of plane, i think render consider it exit of ray from object instead of entering, or something like that. I've noticed it when i tried this in different rendering system and there was no black stuff, but then i rotate view to back of plane, and yea there it is. Actually it even better when came see back of plane, its better distort object right behind plane. I bet it because ray considered distorted for all distance between camera and point when he "exit" through back of plane.
wow thats so much over the top .. do it in compositing.. same texture.. easier masking.. no coplicated nodehustling inside of the materialshade and safe rendertime cause the effect will done in the compositer^^
How can I have the heat distortion turn on and off like real heat disortion example being a mirage. You'll sometimes see it, it'll disappear then reappear almost in layers. How can I achieve that effect?
Add a mix shader right before the final output, and connect a transparent node to the second slot. Adjust the mix factor and keyframe it so you can have the plane be invisible (transparent) or with the heat distortion.
You are totally wrong. This is actually one of the few cases that you do want an IOR less than 1. You only get an IOR less than one when you go from more dense to less dense, which, guess what, is exactly what is happening.
Although I am pretty sure that is not physically accurate to assume that the distortion happens along a plane. It still looks very convincing. I recently read that heated air is a example of a medium with a continuously varying index of refraction. That is the IOR changes not abruptly along a surface but continously. So I believe the light rays will travel along a curve instead of being refracted at a clearly defined surface (where there would be an edge in the path of the light ray instead of a curve). I don't think any render engine supports physically accurate rendering of media with continously varying IOR. Anyway who cares if we need to fake it as long as the result looks still cool.
I recall another tutorial on this on CG Cookie that used particles with rgb colours that were then mapped in the compositor to create a lens distortion effect based on the RGB values for XYZ. Quite some work, but very accurate and convincing results. This way introduced is a lot cheaper in terms of effort and for a quick way makes a lot of sense to me, too. What I would do is distort the plane (or a cylinder?) rather than use a texture. Would need to check if that changes the looks to be even more realistic. Animation probably needs to be a bit faster for a head exhaust? Nice tutorial - as always! :-)
Yeah, I tried adding a normal map to "fake" distortions not along a plane, and it actually is rather advantageous: Smaller IORs can cause larger distortions that way. No way to do the continuous IOR in Blender though. That'd require a volume-level IOR.
@@Kram1032 I know I'm late, but I think you can simulate the changing IOR, by keyframing it and then adding a subtle noise modifier in the graph editor. I haven't tried it, but it should be even more realistic IMO.
That's IOR changing in time, not in space. You want volumetric IOR. Potentially a different, continuously varying value for every single point in space.
IOR can’t get lower than 1 because it’s the divider of the speed of light. And as you know, nothing can get faster than c. So if the IOR were lower than 1, the speed of light would get over c which is impossible. Great video btw!
I've found 2 entries on this page where the IOR is lower than 1. Not sure if thats accurate though: pixelandpoly.com/ior.html It's Gold and Silver. Edit: Just skimmed through the Wikipedia page for the refractive Index. IOR values below 1 are possible, there are even materials with a negative IOR. Quiet hard to understand nevertheless.
hey that would be a cool idea. Someone should make a tutorial about how to render a portal. Or such a door like in the movie monsters, inc. But probably that is not really possible without first implementing this functionality in cycles.
well, it is possible if I understood you right: you want a door that shows a different world behind it am I right? Maybe you could use the camera rays factor in the light path node in a way how this would work
Sadly, it wouldn't work. Smokes are volumetric, not geometric, and we currently do not have a volume refraction shader. The reason being that refraction requires normal data, which voxels do not have.
Why do we have a glass node when the refraction node looks so much better? Just add noise and you have an old window glass. I wish someone could explain clearly the precise manipulation of the gradient texture. I've been adding a mapping node and use trial and error to position it. Its not very intuitive. Thanks for all the great tutorials
Your tutorials taste good like cookies 🤤🤤🤤. So, subbed and checked the bell 🛎 😊 - What is that for a notebook you are using? GPU working fine with 2.79, 2.80? Would appreciate any recommendation 🙏🙌
This is a really good tutorial but I’ve come across a problem where by my edges don’t fade into the background, it would be really helpful if someone could help me with that. Cheers :)
There's a solution above: para8D para8D 1 year ago I needed to turn on [render settings - screen space reflections - refraction] and with the plane selected [material context menu - settings - screen space refraction on] these are off by default as Eevee is setup for fast performance initially. 5
Hi! I am using Eevee on Blender 2.8 and this distortion effect only applies to my HDRI and acts like there is nothing else in the scene. Any idea why it is distorting only HDRI?
I needed to turn on [render settings - screen space reflections - refraction] and with the plane selected [material context menu - settings - screen space refraction on] these are off by default as Eevee is setup for fast performance initially.
Nice Video, but nothing for beginners to follow. I mean, when you make a tutorial, then please explain also, what the nodes are doing. You put some (for not profis) crazy nodes in the editor but you dont't explain in detail why you use this nodes. When you dont't do this, then name such videos as breakdown, but not as tutorial. But thats just my opinion
I appreciate the feedback! This tutorial was guaged toward more advanced users, but I'll still try my best to make content understandable for all parties!
Please never change the style of your tuts! Its so annoying getting the info about object and edit mode in every tutorial. You spend your life in doing tuts for Blender, including all this noob stuff, so please, people, check out the appropriate tuts!
Whenever I see these specific node tutorial videos, it just blows my mind imagining how people even discover the node combinations that lead to these results. Hats off to you, haha.
A couple things:
- Because of how IOR is calculated in Cycles, your plane doesn't have the same IOR on both sides. The back side (which ever one the normal is facing away from) actually gets values smaller than 1. To fix this, you have to use the backfacing property and, conditional on that, invert the IOR with a math node (1/IOR). That's then the "thin film" version of the same effect.
- On a similar note, it might actually be a good idea to also apply a subtle normal map to the plane, because irl, we're dealing with what's effectively smoke-like (similar poofy / cloudy structure) and you aren't always looking on that straight onto the "surface" of that cloud from all angles
- "in a perfect world", you'd use a volume with varying IOR for this. In exchange the IOR variation would be far subtler than for this thin film approximation. But I don't think Cycles can do that yet.
- Maybe that idea could be approximated by using a particle system and billboards? Might just look like a mess though. Would come down to trying it out.
great inspirations, but when is it worth that effort? maybe in a 2 minute exhaust- clip...
@@DjTasteless volumetric IOR enables accurate rendering of stuff that's capable of bending light (e.g. rendering neutron star collisions)
@@DjTasteless adding a normal map is super helpful actually. It turns out doing so means you can get away with far lower (and effectively more realistic) IOR values. The IOR is technically supposed to be absolutely tiny.
How would I change IOR in a volume?
@@JRHainsworth you don't. You can't. Cycles doesn't support this.
you can, however, approximate it using the techniques offered in this video.
My comment is merely suggesting improvements to that video's process:
- use normal maps and smaller IOR instead of smooth but enormous IOR
- make sure to use a thin film-style IOR (so backfacing needs the same IOR)
- to approximate a volume, use a ton (thousands to millions) of tiny planes each with relatively small (very nearly =1) IOR values
If Cycles *did* support volumetrically varying IOR, it'd amount to applying a volumetric texture or a voxel field or something, just like you'd do clouds and what not.
At 7:00 when you’re using the Vector Math to center the gradient, you can use a Vector > Mapping node to do the same thing. You can also simply use the Object output from the Texture Coordinate node; that will be centered on the object’s origin so the gradient will be centered.
Great tutorial, I’ve been looking for an effect like this for a while! Keep up the good work!
I was wondering if that was a possibility.
Also, the object coordinates use the object's scaling, I think. Which means if you start with the standard plane and then just scale and position it as needed *in object mode,* the circular gradient is going to look exactly right (like the tightest fitting ellipse) and *precisely* end at the edge of the plane.
Mate, you're a genius. I've been trying to achieve this effect for ages. Thumbs up.
Still does the trick in blender 4.0 in 2024!
"...Anyway...it's cool stuff, trust me!" LOL.Grant you always mange to make me smile! Great job
Ty for amazing tuto & effect =) 10:56 might as well add a noise modifier to Y location to get a more random effect (unless irl heat constant) 12:30 add a damped track to camera constraint to get the heat always face the cam.
Impressive result. i had the nutty idea to use this Heat distortion material in a fluid sim on my channel and it turned out great. keep up the great content!
Another way I've seen this done (a longer but perhaps more accurate way) is to do a render of smoke (openGL maybe?) in the applicable area, where the smoke is white with a low density. And then you add that in the composite and plug it into the displace node. It's definitely not as quick, but the use of smoke may make it a little more accurate, and it'd hold up to multiple layers in compositing.
Well no - with this method you are actually displacing the directions the rays go.
The heat distortion planes still casting shadows
select the plane [object context menu - visibility - ray visibility - shadow (untick)] There is likely a way to do it with nodes but couldn't tell you. If anyone knows reply!
@@para8D To stop an object from rendering shadows using cycles nodes, use the Light Path node 'Is Shadow Ray' output into the factor input of a Mix Shader, with a Transparent BSDF as the second shader input.
@@0x8080FF perfect, thanks!
it's actually correct.
heat distortions do make shadows.
the problem is when you have caustics off and then it's not accurate.
Actually air has the index of refraction 1.0003, it is not exactly 1. 1 is only for vacuum. Hot air has a slightly smaller IOR than air in normal conditions because it is less dense, so it is closer to vacuum. Usually in blender we approximate air with IOR exactly equal to 1, actually there is no air in empty spaces in blender, it is a vacuum. If we doing so, maybe it will be more accurate to use IOR less then 1 for hot air.
Shiny metals can have an Index of Refraction less than 1, but they are solid materials and this affects how the light colors the metal.
THAT is just too friggin COOL. Well done - thank you
Amazing and clear tut!!!!!!!!
Could you please make a tutorial on iridescence?
Hello, great tutorial. Thank you. I am trying to use this for the heat of the engines of an airplane during takeoff. However, even though the refraction plane color is pure white (1,1,1) and even though the Roughness is 0.00 and the IOR=1, the refraction plane is not transparent but is seen very clearly. I am working with the recent 2.8 version. Can you please assist me solving this issue? Thank you, Nissan
Bizarre... While this video was loading up, a WIX (create your own website) ad came up with an almost identical table/desk and laptop as the room you recorded this video in. When I skipped the ad, it literally looked like some dude from the WIX commercial transformed into you to talk about blender. lol It was funny. Made my day.
Make your own website - by Creating Realistic Heat Distortions in Blender!
god bless this channel
You can actually use these to create Son Gouku Aura, then add some rotoscoping on the character to make the edges glow. You can also add some multifractal to add some color to your distortion.. Hollywood VFX...
Do not duplicate the material for different distortions,
Performance tip so you WON'T end up with 1000 materials for each distortion effect; that will eat your resources and pollute your workspace.
In version 2.8 and above, each object got : object index pass and material index pass.
You can use "object info" node and plug it into "math node" multiplier so each object that you give a different index number that will provide different distortion, while using the same material and save perfomance, let alone clean workspace enviornment.
* the method described above works with : keyframes, drivers, library overrides and collection instances.
More controllable would be a layered render and handle that with a animated displacement map and traking to object, so you do not tie yourself with the background
I want to know how to make the shock wave distortion effect, thank you for sharing.
That really looks great :).
great tutorial. thank you.
Noice! At least now, during the winter freezing weather I can remind myself how much I miss summer times.
I followed this but it seems my refraction is only being affected by the world HDRI and not taking into account the other objects and lights in the scene.. is this a blender limitation or could I be doing something wrong? Any help much appreciated! Thanks
little late but, if you're using eevee be sure to enable screen space reflections in both the material settings and render settings
@@leanderbrough8517 I had the same issue but even with those setting enabled it shows some objects but after some distance it still only shows the HDR
The black stuff is visible because camera watches back of plane, i think render consider it exit of ray from object instead of entering, or something like that.
I've noticed it when i tried this in different rendering system and there was no black stuff, but then i rotate view to back of plane, and yea there it is.
Actually it even better when came see back of plane, its better distort object right behind plane.
I bet it because ray considered distorted for all distance between camera and point when he "exit" through back of plane.
Clever thinking bro!
wow thats so much over the top .. do it in compositing.. same texture.. easier masking.. no coplicated nodehustling inside of the materialshade and safe rendertime cause the effect will done in the compositer^^
Very interesting your tutorial
Hi, great. Hod did u make the Rivests?
whoa sweet!
Thanks for the video mate. Looks great :)
Great, that was very informative!
Really cool effect :)
Clever, thank you, this was fun :)
How can I have the heat distortion turn on and off like real heat disortion example being a mirage. You'll sometimes see it, it'll disappear then reappear almost in layers. How can I achieve that effect?
Add a mix shader right before the final output, and connect a transparent node to the second slot. Adjust the mix factor and keyframe it so you can have the plane be invisible (transparent) or with the heat distortion.
You are totally wrong. This is actually one of the few cases that you do want an IOR less than 1. You only get an IOR less than one when you go from more dense to less dense, which, guess what, is exactly what is happening.
wow it was nice of you to point this out in such a polite and nice way
Although I am pretty sure that is not physically accurate to assume that the distortion happens along a plane. It still looks very convincing.
I recently read that heated air is a example of a medium with a continuously varying index of refraction. That is the IOR changes not abruptly along a surface but continously. So I believe the light rays will travel along a curve instead of being refracted at a clearly defined surface (where there would be an edge in the path of the light ray instead of a curve).
I don't think any render engine supports physically accurate rendering of media with continously varying IOR.
Anyway who cares if we need to fake it as long as the result looks still cool.
I recall another tutorial on this on CG Cookie that used particles with rgb colours that were then mapped in the compositor to create a lens distortion effect based on the RGB values for XYZ. Quite some work, but very accurate and convincing results. This way introduced is a lot cheaper in terms of effort and for a quick way makes a lot of sense to me, too. What I would do is distort the plane (or a cylinder?) rather than use a texture. Would need to check if that changes the looks to be even more realistic. Animation probably needs to be a bit faster for a head exhaust? Nice tutorial - as always! :-)
Yeah, I tried adding a normal map to "fake" distortions not along a plane, and it actually is rather advantageous: Smaller IORs can cause larger distortions that way.
No way to do the continuous IOR in Blender though. That'd require a volume-level IOR.
@@Kram1032 I know I'm late, but I think you can simulate the changing IOR, by keyframing it and then adding a subtle noise modifier in the graph editor. I haven't tried it, but it should be even more realistic IMO.
That's IOR changing in time, not in space. You want volumetric IOR. Potentially a different, continuously varying value for every single point in space.
@@Kram1032 Thanks, I get it now...
My laptop can't handle cycles. Can it be done using evee?
I need some help... The plane causes shadow to my aircraft, and i don't know how to change it. Please help.
Hey, the one from the channel ' Remington Graphics ' looks just like you
what is that other camera doing?
I know i'm 5 years late, but dude the Texture Coordinate "Object" output exists... Awesome stuff tho!
IOR can’t get lower than 1 because it’s the divider of the speed of light. And as you know, nothing can get faster than c. So if the IOR were lower than 1, the speed of light would get over c which is impossible.
Great video btw!
I've found 2 entries on this page where the IOR is lower than 1. Not sure if thats accurate though: pixelandpoly.com/ior.html
It's Gold and Silver.
Edit: Just skimmed through the Wikipedia page for the refractive Index. IOR values below 1 are possible, there are even materials with a negative IOR. Quiet hard to understand nevertheless.
From what I know, IOR can be negative, which is technically less than one, but it can never physically be between -1 and 1.
You can use this at 8:28 to create a portal in scene :)
hey that would be a cool idea. Someone should make a tutorial about how to render a portal. Or such a door like in the movie monsters, inc. But probably that is not really possible without first implementing this functionality in cycles.
well, it is possible if I understood you right: you want a door that shows a different world behind it am I right? Maybe you could use the camera rays factor in the light path node in a way how this would work
Awesome. How long did that take to figure out?
what would happen if you assign this material to uprising smoke?
i dont think that adding to smoke works cause smoke isnt a actual mesh its a lot of voxels but it would be insane tho
why dont you try it? :D
Minze i don't know xD
Sadly, it wouldn't work. Smokes are volumetric, not geometric, and we currently do not have a volume refraction shader. The reason being that refraction requires normal data, which voxels do not have.
This work in 2.81? 2.82?
Called it
Why do we have a glass node when the refraction node looks so much better? Just add noise and you have an old window glass.
I wish someone could explain clearly the precise manipulation of the gradient texture. I've been adding a mapping node and use trial and error to position it. Its not very intuitive.
Thanks for all the great tutorials
Because glass isn't pure refraction but also reflection and color. Also you should use the principled shader for glass
Your tutorials taste good like cookies 🤤🤤🤤. So, subbed and checked the bell 🛎 😊 - What is that for a notebook you are using? GPU working fine with 2.79, 2.80? Would appreciate any recommendation 🙏🙌
Can you make a tutorial on making tutorials?
This is a really good tutorial but I’ve come across a problem where by my edges don’t fade into the background, it would be really helpful if someone could help me with that. Cheers :)
Same, I have small gun shot with bright light for 1 frame and I see square edges.
I know I’m doing something wrong, but can’t find the root.
I’m fairly sure you could do this with a smoke simulator or a particle system
i cant do it...
uhhh i still have the black holes
haven't you uploaded this a couple days ago?
We upload episodes on CGCookie.com a week in advance, so you probably saw it there first :)
Not working on EEVEE. It's only refracting the World not the objects. But its still working on Cycles but i need it on EEVEE.
There's a solution above: para8D
para8D
1 year ago
I needed to turn on [render settings - screen space reflections - refraction] and with the plane selected [material context menu - settings - screen space refraction on] these are off by default as Eevee is setup for fast performance initially.
5
What's EVT_TWEAK_L
2023 thank you
A bit of an unrelated question but how do you make you nodes snap to a grid like his?
Hi! I am using Eevee on Blender 2.8 and this distortion effect only applies to my HDRI and acts like there is nothing else in the scene. Any idea why it is distorting only HDRI?
I needed to turn on [render settings - screen space reflections - refraction] and with the plane selected [material context menu - settings - screen space refraction on] these are off by default as Eevee is setup for fast performance initially.
@@para8D Thank you!!
@@para8D thank you bro
you just made a blackhole out of air, what next?
at least Russian subtitles added ...
Nice Video, but nothing for beginners to follow. I mean, when you make a tutorial, then please explain also, what the nodes are doing. You put some (for not profis) crazy nodes in the editor but you dont't explain in detail why you use this nodes. When you dont't do this, then name such videos as breakdown, but not as tutorial. But thats just my opinion
I appreciate the feedback! This tutorial was guaged toward more advanced users, but I'll still try my best to make content understandable for all parties!
Bro flip the normal, im ithcing
a bit complicated
FIRST
I know this man in real life
I wouldn't call it realistic though🐹
Please never change the style of your tuts! Its so annoying getting the info about object and edit mode in every tutorial. You spend your life in doing tuts for Blender, including all this noob stuff, so please, people, check out the appropriate tuts!
Too much node for a noob. Please make videos with simpler methods . Thanks
stop doing realism!
Not sure who this dude is, I miss training from Jonathan Williamson. This guy seems nice, but he generally talks down to viewers as if we are idiots.
Well these are fast beginner-friendlyish tutorials :p it can get a bit frustrating for advanced users of course ;)
I appreciate the feedback, I'll try and keep stuff like this in mind for future episodes! :)
I have absolutelt no idea what You did with these vector and math part and saperate xyz. No idea. I learned nothing. But thats a good instruction