GPU Compatible Thin-Film Interference v2.1: Glass Within Glass + Absorption

Thanks for the help! I’m still trying to work through how I need to set things up. I’ve used the following node setup to try to generate the desired output:

However, this doesn’t quite give me the expected result. I should mention that the silicon nk plugged into the first thin film input has the n,k values for SiO2, and I 've varied D1 from 0-1000 with basically no change

For reference, I’m trying to recreate a wafer that I made:

The variation in color at the edges is from actual thickness variation, and the blue color is from the patterning step. The field oxide (green) should be ~550nm, and corresponds well with this chart. The blue portions should be ~120nm or so. If I wanted to model something like this physically according to my understanding of your node group, I would plug in a single SiO2 n,k group into the thin film input, and use the silicon n,k for my substrate, and by varying D1, I should be able to vary the observed color, in rough correspondence with the film thickness chart. I realize that it probably won’t correlate exactly, but as long as it’s close that’s good enough.

I’m clearly doing something wrong, but I can’t figure out what it is, I think largely due to my noobishness with the blender node setup.

Once again, thanks for working all of this out and being willing to help!

Ah, I think this is where you went wrong. By using the same node group, you are using the same values input for both the film and the substrate. This happens because Blender updates all node groups of the same type if any changes happens in any of its copies. You can confirm this yourself by checking the values inside both nodes. Try adding a new ‘Combine RGB’ node. Alternatively, you can make one of the copies independent from the other by clicking on the ‘7’ next to the ‘F’ for either of the nodes. Note that you will need to restore the original values for the ‘silicon_nk’ node.

It looks like you have everything correct, but you might want the roughness on the glossy shader to match the roughness on the thin film node.

Hope this solves your problem!

Yeah, the thicker the films are, the less the colors might match because more samples across the spectrum are required.

I am currently working on something that could do the spectral calculations for the films, but generalizing (or finding a way to generalize) the formulas to lossy films and multiple layers has been quite difficult. If any are curious, here’s what I am referencing: Click!

1 Like

Man, this is one helluva piece of code you’ve implemented. I fixed the nodes as you described and the examples track almost perfectly with experiment. I rendered the first few in the color series. The very thinnest oxide doesn’t quite work (Edit: After looking at the thinnest one again, I think it actually works quite well. It just needs to be mapped onto a more realistic flat substrate), and things get a little squirrelly when you go to very thick oxides, but in the main processing regimes, this thing works basically flawlessly. Note, the colors being referenced are in the center of the wafer, given a viewing angle which is normal to the wafer plane.

Really, fantastic work on this!

Edit: Experimenting a little further with the thicker oxides, it looks like there’s about a 20nm shift once you get above 500nm, but things still track pretty well once you account for that offset.

1 Like

After a spending week attempting to generalize the integration method in the paper, I simply stuck with the single, non-absorbing layer (for now). Here’s a linear thickness gradient–50 to 1000 nm–of a SiO2 layer on Si:

Top: Interference calculated with 3 samples (current nodes)
Middle: Colors from the chart @BesselFunct linked (thanks for providing the nice chart!)
Bottom: Spectral calculations

You can see that the spectral calculations match very nicely at most points, but it’s actually a little better than that. The colors in the chart are listed with uneven intervals, and I simply didn’t proportion it evenly.

There are two mostly unavoidable problems with the spectral thin-films, not as a result of any calculation mistakes, but as a result of a calculation limitation. Although, it shouldn’t really matter in most cases.

For now, I’ll be testing if using better fit functions will significantly change the results… and then I’ll probably try my hand at generalizing, again.

Hey JettG_G,

I ´ve downloaded your last version(2.2), great work by the way, and I´ve noticed that your scale isn´t right on most objects. It´s like 0.106 mostly and should be 1.
This could lead to interferences when rendering.

Just wanna let you know…

Here is a render with all your materials, love it.

1 Like

Woah! I think the odd scales were from the testing file itself because I don’t remember changing anything except the materials. I just tested it, and the speedup is amazing! For the car paints I quickly tested, I had a speed up of about 320%. Thanks for telling me! I’ll be sure to include this change in the upcoming update.

I love the render of all the materials! It’s so satisfying to look at.

On older files the scale is off,too.
You can boost your render times by 30% using GPU+CPU settings,
I assume you are rendering on GPU.
Just go to Preferences–> System and check both your GPU+CPU
and change the Tiles to 16x16 or 32x32.

Ha that’s pretty cool to see. Happy they got ported from osl :smile:

1 Like

Hey, thanks prutser,
you both did a great job.

They are really beautiful.
Some are pure magic:

Here is the same file above with Eevee

Eevee Viewport

Edit:Link deleted

1 Like

Some more in groups:

1 Like

This download location has a virus attached to the file. Just saying.

What the heck, it is a .blend file, not a .exe
The name must be: Thin-Film_v2.2_all.blend
I would upload it to another site, but for e.g. the file size must be under 30mb.

Go to your link and see - it’s an .exe

I’m not sure what I did differently, but the file I downloaded is a .blend, and a scan showed nothing malicious.


I downloaded it shortly after it was posted, so I wonder if it took time for the virus to load onto it or something.

No, it is a .blend for me.

1 Like

That’s really weird, I tried it again and it’s a blend file now. Not sure what happened, but I’m not some internet no0b so I thought it was pretty strange it was an .exe file too.

It’s because you ar… :smiley:

You have clicked one of the ‘ads download’ which takes download html data and prepares virus with the same name.

So, is v2.2 prepared with presets? I wanted to try it but without presets it was hard.
And by presets I mean something clear and easy to see, because a list of 40 materials does not say a lot of how something is looking.

Not mentioning render times were awful xP

It’s not, but it seems like something that could be very useful. It might take a while, as I’m working on updating the node group to 2.3 right now, but I’ll see what I can do.

Unfortunately, unless I find some way to optimize the calculations more, there’s no way to speed up the nodes without sacrificing accuracy. I do have an idea for another possible optimization, but I haven’t gotten around to testing it, yet.

Because of this, I will delete the link, it is not safe for all users, sorry guys.

1 Like