BF算法引擎原理及参数详解

大家好,我是逆水,今天我们来详细的学习一下BF算法引擎具体是什么原理。运算上我们在上一遍文章里已经了解过了,所以这里就不再多说了。首先我们要知道BF算法。

根据我们所说的:它会从摄像机投射出搜寻光线,那么他到底投射出了多少条搜寻光线呢?图中假设在生活中有一面墙和一盏灯。事实上这个灯会投射无数条光线到这面墙上;也会反射无数条光线到摄像机里面.同时墙面上有无数个点,每个点都有它不同的亮度,所以最终才构成了这面墙整体给我们看到的光照感觉。

我们先看一下需要渲染的图像,生活中与计算机里有什么不同呢?在计算机中我们所看到的只是图像而已,那这个图像又是如何构成的呢?

我们来看一张例图,文中图像是由一个一个的像素点构成的,这一点只要是学过平面知识的应该都很清楚。计算机中的图像它都是由一个一个像素点组成的。每个像素点都是一种颜色,不可能有第二种颜色变化。

 

BF算法会向每个像素点都投射一条搜寻光线,所以它不可能是一种无限的运算。因为生活中的一面墙的点数可以说是无数个,你甚至可以细分到原子。但是在图像里面最小的就是一个像素。

那么这个图像到底是多大呢?在这里可以看到它是640乘以480这么大。也就是说横向有640个像素点,纵向有480个像素点。所以用BF算法总共投射了多少条射线呢?结果就是640乘以480条射线。所以它的搜寻光线很容易从分辨率表现出来。

 

那么如果我选择的分辨率比如是800600,那么从摄像机发出的搜寻光线就是480000个搜寻光线,我们把这种预测方法称之为每点采样(就是每个像素点它都会发射一条网线)。很显然这种方法渲染效果会非常好,但是运用这种方法渲染的时间肯定会特别长。这是为什么BF算法用的并不是很多,只在某些特定条件下使用的原因。就在于它是每一点采样。也就是说BF会对当前摄像机所能看到的所有物体形成的图像的每个像素点,都发射一条搜寻光线。

然后我们再看第二个问题,看下文的图解。假设从摄像机发出一条搜寻光线,搜到了红框中的这个像素点。那么运算这个点的亮度是多少?(在这里只说它的间接照明,不说直接照明)要知道这个点的亮度是多少时,要综合考虑它可能会从哪里地方获得光线。可能从屋顶、地面、左墙壁获得。

 

所以如果想把这个点的间接照明算的准确,那么是不是从更多的途径获得光线才能算的更加准确呢?所以就会出现这样一个问题:这条搜寻光线到达红框点的时候可能会分成好几条,以便运算它这个效果。这种效果感觉像分裂,从更多的地方获得光线才会运行得更准确。那么到底分裂出多少条呢?事实上他分裂的是64条。

 

为什么是64条呢?大家看我使用BF引擎的时候,这个细分值是8,8的平方正好是64. 这就是这个值的意义。它代表搜寻光线分裂成多少条。如果这个值是10,那就分裂成为100条。所以算红框点的间接照明时会从64个地方获得它的间接照明信息。这就是细分值的意义,下面的反弹先不用管。

在这个图解里,它只表现得出了三条红色的光线。假设图中的搜寻光线设定为8,肯定会分裂成64条。如果我们的二次引擎仍然使用BF算法,反弹次数为3.那么搜寻光线在1号框点位分出64条,其中一条它会运算2号框点位的间接照明。那它运算2号框点位的时候会不会再分裂成64条呢?就不会了。

图解旁边说的很清楚,红色线代表主反弹运算,是很多光线在被运算;蓝色的这个是二级反弹,可以看到二级反弹显示的是一个单一的光线将被集中。也就是说它的分裂仅发生在第一次,之后分裂出的光线再进行运算时只是一条单一的光线。这就是BF算法的一个原理。

 

所以说BF算法首先只会对它所能看到这个部分进行搜寻光线的发射,同时对看到的每部分进行精确的运算。但这会使很多人产生误解,这样的话是不是一个全场的运算呢?什么叫全场运算:就是把场景中的所有物体(不管看的见还是看不见)的各处的受光效果都运算出来,这叫全场景运算。那么BF算法不算是一种全场景运算。

 

  为什么这样说呢?全场景运算就等同于把整个场景中的每个像素点都算一遍,但是BF算法不需要,它只会对当前摄像机能看到的区域投射搜寻光线。

可是你可能会问:当它搜寻到1号点的时候那2号点难道不运算吗?对,这个2号点肯定是会运算的。但是会有这样一种可能不会:所有的搜寻光线都没有反射到2号红色区域这一块,也就是说无论怎么反弹都没有反弹到这一块儿,他就不会运算这一块的受光效果。

所以事实上它这个速度还是比较快的。也就是说BF算法会把它看到的地方进行一个精确的运算。它所看到的某些地方可能也会运算,否则的话没法算出它所看到区域的亮度。但并不代表它会把场景中所有物体都运算。所以从这一点来说BF算法并不是一个全场运算的算法,这个要注意。

这些引擎除了光子图,其他的都不是全程运算。这是为什么有些时候使用的方法运算会很快,有的很慢。那么以上所说的就是BF算法它的原理,包括图中两个参数的用途。

 

在这里一定要把引擎的反向运算掌握好,然后搭配它这些参数,就能很好地理解V Ray到底是如何计算的照明效果的。这样的话当我们再学习一些复杂的引擎时,很多参数就会变得非常的简单了。

那么今天就给大家分享到这里,如果你觉得文章对你有帮助,希望将网站分享给你的朋友。感谢大家支持!

 

1
封面图

评论0

请先

社交账号快速登录