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!


(JettG_G) #82

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

(JettG_G) #84

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

(JettG_G) #86

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.