光线追踪中的菲涅尔效应与立方体相交算法
菲涅尔效应
菲涅尔效应描述了光在透明表面上的行为。当你站在湖边时,直视水下能看到岩石和鱼,而望向远处岸边时,水变得更不透明,反射出更多风景。这是因为当眼睛与表面的夹角大时(如直视水下),反射光量相对透过表面的光量较少;夹角小时(如望向远处岸边),反射光量较大。
菲涅尔效应解决了全内反射导致的“黑屏”问题,反射和折射光线相互补充,使画面更平衡。不过,菲涅尔方程涉及的内容超出了模拟所需,如光的偏振,软件模拟会较慢。幸运的是,Christophe Schlick 提出了一个近似公式,速度更快且足够准确。
为实现这一效果,需要实现一个新函数 schlick(comps) ,它返回一个 0 到 1 之间的数,即反射率,表示在碰撞点处反射光的比例。实现该函数需要进行四个测试:
1. 全内反射时的反射率 :当满足全内反射条件时, schlick() 应返回 1。
- 测试代码如下:
Scenario: The Schlick approximation under total internal reflection
Given shape ←glass_sphere()
And r ←ray(point(0, 0, √2/2), vector(0, 1, 0))
And xs ←intersections(-√2/2:shape, √2/2:shape)
When comps ←prepare_computations(xs[1], r, xs)
An
光线追踪中的菲涅尔与立方体相交
超级会员免费看
订阅专栏 解锁全文
2142

被折叠的 条评论
为什么被折叠?



