"Principled v2" feedback/discussion thread

The sheen normal is a mix between the base normal, and the coat normals, depending on the coat weight.

1 Like

Ok, so with textiles there’s little or no need for coat and so it’s possible to use coat normals with sheen. Take a look at image I’ve added in the meantime in the previous post.

Just make sure you make the coat layer “invisible” by setting the coat IOR to 1.0


And that’s a nice result


Hve you tried using normals? because with other materials like car paint with flocks, it works really well

Why is that, reading it, it makes no sense. Whats the deal with the IOR if its set to “invisible”

How does this look with it plugged into normal and use sheen

It is not set to invisible. That’s the point ;-). You need the coat weight to something higher than 0 to make use of the coat normal for the sheen. To prevent the coat itself from showing up set the IOR to 1.0, which makes it invisible.

At least, that’s how I understand it.

What the Index of refraction, or IOR for short, does in the real world, and why it does it is a complex subject. So I’ll skip that and talk about IOR from a high level.

The IOR controls the refraction of rays entering a material, and when there’s refraction, there’s usually a reflection as well. How strong the refraction and reflection are depend on the difference in IOR between the two materials the ray is transition between. The larger the difference, the greater the refraction and reflection. The smaller the difference, the opposite, until there is no refection or reflection when the IORs are the same.

For example, if a ray is transitioning from a IOR of 1.0 material to a IOR 2.6 material, then refraction and reflections will be quite strong. But if the ray is transitioning from a IOR 2.5 material to a IOR 2.6 material, the refraction and reflections will be much weaker.

For the coat layer of the Principled BSDF, it is always assumed that the ray is going from a IOR 1.0 material to the coat with the coat IOR. So setting the coat IOR to 1.0 will mean there is no IOR difference, and thus no refelections will appear, making the coat mostly invisible (The coat tint still does something, and I believe the coat will still introduce some noise).

Disclaimer: This works now, but may not work in the future. There are a few things that could change that could ruin this:

  • Cycles always assumes you’re going from a IOR of 1.0 to the coat. This could change with the nested dieletrics feature in specific situations.
  • Cycles does not model the IOR interaction between the coat and the base layer. This could change in the future.
1 Like

I understand our and it’s values. I was just a bit sceptical about the term invisible and 1.0
1.0 means it’s acts as air and thus not show the so called bend law.

Wonder if the 1.0 actually will do something then. Probably should make a test with a strong hue and saturated color

You talk about bested dielectric feature. With that I guess you mean like a liquid inside a glass. I see many wrong setups with this. I came from a different engine, which used a an interference option on a mesh to state that it’s the in-between mesh. I
For cycles invelieve you take away the inner walls of the glass and set the normal direction in a certain way. Also the liquid top should be separated from the liquid body.

Wonder what this feature actually is your talking about

For nested dieletrics, I am talking about automatic systems to handle the IOR transitions in scenes like “water in a glass cup” or “air bubbles in water”. Development has started on this feature: #118478 - WIP: Cycles: Implement volume stack priority and nested IOR support - blender - Blender Projects

1 Like

Yes, that’s basically the same 8 was used to. Only difference was, that we still needed to do the difficult modeling steps and set mesh object to interference, so called intersection. This solution using it on material level seems much easier to work with.

Here is good example. It was modelled using blender, but used external render engine which is full spectrum

the index of refraction is a ratio of velocities (specifically the phase velocities) or, alternatively, what we might call resistance-factors (if you want the technical term, a material’s refractive index n is the square root of the product of the permeability and the permittivity of the material, basically “how easy does light get in here” where 1 means as easy as through vacuum) to getting through some medium.

By definition an IOR of 1 is equal to that of vacuum. And the reflection probabilities and refraction angles depend entirely on the ratio of the indices of refraction of both materials.

It’s always

[effective IOR] = [IOR of the material the light goes into] / [IOR of the material the light leaves from]

to shorten this, I’ll write “n” for “index of refraction”, “eff” for “effective”, “t” for “into”, “f” for “from”, then this looks like:

neff = nt / nf

and if the material the light leaves from is vacuum, that number will be nf = 1.
Now the IOR you set in your shader is for inside the object so that’s your nt. If you set that one to 1 as well you get

neff = nt / nf = 1/1 = 1

which means, for light, the material looks no different at all! It essentially doesn’t even notice there is a wall to bounce off of, so to speak.

Now, why is vacuum an IOR of n=1?

One way to see this is through the ratio of phase velocities idea I mentioned above.
Now as you know, the speed of light is constant, right? It’s just c, always.

However, that is specifically the group velocity of light. The phase velocity can be literally anything. It can be slower, faster, and even negative (relative to the group velocity)

In this particular example, the green dots mark the end points of what’s called a wave packet. All the packets move at the same speed so the distance between the green points is constant, moving slowly to the right.

The phase velocity looks at the phase of a single peak of the signal and travels much faster.

So, the group velocity of light is just c.
The phase velocity vphase depends on the medium. And in vacuum, it’s also c.
So for vacuum,

nvac = c / vphasevac = c / c = 1

In water, the phase velocity of visible light is about 3/4 of c. (the precise value depends on wavelength, temperature, salinity…)

So you get

nH2O = c / vphaseH2O = c / ( 3 /4 c) = 4/3

Water is not the only material with an index of refraction close to 4/3. You can closely match IORs to achieve almost invisible boundaries where the reflection chance is very low and the refraction angle is almost parallel to the incoming angle.

That’s not the main purpose of these two videos, but it’s an important part of the effect:

1 Like

That’s for that explana tuin, a bit to technical for me. But aren’t you explaining real world physics. I mean, cycles

But that’s how it works in Cycles too?
Cycles uses the same formula as used for predicting real world physics.

1 Like

Ow then I’m mistaken, I believe I read that cycles doesn’t use full or wavelength values at all. I don’t know the true in and outs about the technical side of cycles

This has nothing at all to do with wavelengths.
I mean, IOR is wavelength dependent, yes, but the math per wavelength is the exact same. Cycles as of now assumes constant (i.e. wavelength independent) IOR which is close enough for most materials.
None of the argument above depends on wavelength though.

1 Like

Is there a timeline for nested dialectrics to be finished? This is a really big deal and I for one am anxious to see it in a release.

I don’t know the timeline for nested dialectrics development to be finished. You’ll probably want to wait for a comment from @lukasstockner97

1 Like