Specular Refraction

之前说反射,现在说折射

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/17671ea7-60e1-4452-be7e-65d7a24efde8/Untitled.png

左下角平行光经过棱镜之后,会因为不同波长有不同折射率,被分解成不同光线。

右下角水中的现象是因为聚焦,光线打到海水凹凸不平的表面,会往不同方向折射。对于海底某个点而言,有几率接收不同方向的打过来的光,就像放大镜把光聚在一起,形成条状的样子。但这对渲染是个灾难,Path Tracing 不适合做。

<aside> 💡 给定入射方向和发现,如何算折射?

</aside>

Snell’s Law

斯涅尔定律,又叫折射定律。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ee8e722a-d3d7-4ffb-bf2e-4f5ca2ac614e/Untitled.png

折射和反射一样,都会发生在入射方向和发现形成的平面内。如果定义两个夹角,入射角和折射角,则满足折射率相乘相等的关系:

$$ \eta_{i} \sin \theta_{i}=\eta_{t} \sin \theta_{t} $$

不同的材质可以规定不同的折射率,例如真空是 1。有了折射率和入射角 θi 就可以算出折射方向 θt。φ 和反射一样。

<aside> 💡 钻石折射率是 2.42,折射率高就说明光线进来之后会被折射得非常厉害。折射率非常高,折射的不同程度就会体现出各种各样不同的波长的光,这也是钻石闪闪发光、五颜六色的原因。

</aside>

这样可以直接算出式子来:

$$ \begin{aligned} \eta_{i} \sin \theta_{i} &=\eta_{t} \sin \theta_{t} \\ \cos \theta_{t} &=\sqrt{1-\sin ^{2} \theta_{t}} \\ &=\sqrt{1-\left(\frac{\eta_{i}}{\eta_{t}}\right)^{2} \sin ^{2} \theta_{i}} \\ &=\sqrt{1-\left(\frac{\eta_{i}}{\eta_{t}}\right)^{2}\left(1-\cos ^{2} \theta_{i}\right)} \end{aligned} $$

<aside> 💡 为什么要算折射角的余弦? 只要算余弦,就肯定会算出来一个有意义的实数,如果这个公式得不到有意义的实数,说明折射不可能发生。

</aside>

式子在某些情况下确实没什么意义:

$$ 1-\left(\frac{\eta_{i}}{\eta_{t}}\right)^{2}\left(1-\cos ^{2} \theta_{i}\right)<0 $$

$$ \frac{\eta_{i}}{\eta_{t}}>1 $$

也就是说,当入射的介质折射率大于折射介质的折射率,就可能会发生没有折射的现象,也就是全内反射现象(Total Internal Reflection)。