运算引擎的选择

大家好,我是逆水,今天我们来讨论一下引擎的选择,那么到底首次引擎该选择哪一个比较好?二次反弹引擎选择哪一个比较好呢?

我们从这个简单的场景出发,它只有一盏简单的灯,是一个微弱的灯光,球型并且调了一下亮度,其他的值都是默认的。

通过这个场景来看一下,首先,理论上来说,最好的组合当然是BF算法加BF算法。

我们可以看到BF算法的特点,在这我们再回忆一下之前讲的,如果你首次引擎使用BF算法,那它会为你生成这个图像的每个像素点都进行采样,也就是到处都是采样点。如果我们渲染是800乘600,我们使用BF算法就会采48万个采样点。所以,它叫做每像素点采样。

当前二级反弹,这个反弹次数不可用了,这是因为只有当BF算法用于二级反弹时,这个值才有意义就能来回反弹预算多少次,这种组合首先首次引擎你可以选择一个你喜欢的,二次引擎你可以选择无,二次引擎一般除了一些非常特殊的场景,我们很少选择无,这是因为如果不记上二次反弹引擎每个采样点的亮度没法精确地算出来,那我们把二次引擎也是用BF的话,这个组合理论上是非常不错的,但是如我们刚才所说它需要踩48万个采样点,很显然速度是非常慢的。同时,当前的效果也不会获得一个非常好的效果,这是因为我们的细分值为8。

如果我们回忆一下BF原理的话,这是每个像素点最开始的首次反弹寻找到的每个像素点,也就是每个采样点都向外分裂64个网线。也就是它算这个点的量是多少的时候,在运算它的直接照明之外还要运算间接照明,那么预算间接照明时,它会判断这个点会从何处投射过来光线或者说反弹过来光线,

那么它从多少个地方投射过来呢?64条光线有可能说屋顶或者是对面的墙等投射过来。总共运算是64条光线,分裂为64条,也就是这个值的平方,这个值默认很显然是不够。通过我经常作图的经验来看,这个值是远远不够,要提高一些,那这样的话速度就会更慢。这个值到底是不是64,默认的话肯定是64是它的平方。但是在微弱的全局性,全局确定性蒙特卡洛里面有一个全局细分倍增,这个值也会对它产生影响。

当前默认的值是一就是一倍。如果这个值是默认的没有改的话,那它分裂出的光线就是64条,回到我们刚才话题上,这种组合很显然不实用,而且这个组合还有除了慢之外,它的一个最大缺点就是BF算法无法保存光子贴图,这也是它的一个致命的缺点。

那么首次引擎我们到底选择什么比较好呢?毫无疑问发光图是最好的选择。这是为什么呢?我们来分析一下虽然光子图(注意不是光子贴图,不要弄混了,光子图是一个引擎的名和光子贴图是两个概念)

光子图引擎和灯光缓存引擎虽然我们没说过,但是我在这可以简单的说一下,光子图引擎是一个全局光照引擎,是最古老的的引擎。现在基本上没人用了,以后我讲到它的时候你会了解它的特点,而且它还有很多致命的缺点。所以首次引擎选择光子图,绝不是一个明智的选择。灯光缓存引擎由于它特定的块结构方式,所以非常不适合做首次引擎运算。

可是这里面要论算法灯光缓存是唯一的一个逼近式算法。可以说这是一个非常高级的计算方法,或者说是一个非常好的运算方法。可是在V-Ray里的表现是最终要形成块结构,由于要形成块结构所以灯光缓存引擎非常不适合做首次引擎。所以我们的选择只有发光图和BF算法。很明显首次引擎的选择一般来说我们在实际应用中肯定是以发光图这个引擎为主,这是因为它的优势就是自身细分。

如果使用BF算法我们要采48万的采样点,但是我们使用发光图引擎呢,然后我们选择非常低。

甚至我们选择“中”,也就是最小速率是-3,最大速录是-1,那么我们看看它会采多少个点呢?可以看到即使我们选择正常我们出图使用的标准就是中能质量,那么也只采了18000多个点。

和BF算法的48万差的非常多,所以发光图引擎一般来说都是我们的首次引擎的首选,就是因为它有自身的细分。当然跟我之前所说的事实上一般的图而言,如果要求不是特别高的,最小速率为-5,最大速率为-2,基本就够了。

所以首次引擎非常好的选择的发光图,但是我们这次选择-5,-2还是0.4,0.3,0.1这个值渲染一下,我们把二次引擎去掉选择无,进行一下渲染。渲染完成后保存一下可以看到,它耗时是15.9秒。

当然这个时间是相对于我当前这个计算机而言的。如果是非常好的计算机肯定时间比这个短。此时它的采样点只有5382个。现在我们把二次引擎打开,光子图毫无疑问应该不作为一个首选。那就剩下BF算法和灯光缓存了。这是为什么我们经常看到渲图都是首次引擎是发光图,二次引擎用BF算法或者是灯光缓存。我们使用BF算法,这次渲染完会有何不同呢?在这儿我们回想一下发光图引擎的特点首先它向所有像素点投射搜寻光线,

然后进行自身细分决定哪个地方采点哪个地方不踩点,如果没有二级反弹运算的话,比如它运算这个点(最上面蓝色箭头和红色箭头焦点)亮度是多少时,除了直接照明它会判断它的间接照明在哪里,也就是何处会向它在投射光线。当它在运算了这个点的时候,

为了运算这个点向它投射多少光线,它必须运算这个点的亮度。

那这个点的亮度是多少了?就只运算这个点的直接照明,它的间接照明就不运算了,因为我们没有打开二次引擎。如果我们打开了二次引擎,比如使用BF算法那么在算这个点的时候,除了运算这个点的直接照明还会运算它的间接照明,那如何运算呢?比如我们的二次引擎用的是BF算法,这是其中的一条光线,

在图解上看有三条,那么总共是多少条?是由什么决定的呢?由这个细分值决定的,这个值就比较接近BF算法的分裂数,绝对细分值。我们只看其中的一条光线。你们到这的时候,它不仅仅会运算这个点的直接照明,也会运算它的间接照明。如何运算间接照明?通过一条光线来运算就可以,它只会算这一个点从何处会向它反射出光线。

我们算这个点亮度是多少的时候呢?除了直接照明我们就说这个间接照明,生活中这个点左边墙可能会向这个点投射光线,地面也可能或者这里面某个物体都可能。但它只算一条,就是因为我们用的是BF算法,因为BF算法一旦用于二级反弹引擎的话,它的细分值别看可以调整,已经变得没有意义了。这个细分值只有当BF算法用于一级反弹引擎的时候才有意义,用于二级反弹引擎细分值便没有意义了,有意义的仅仅是下边的反弹值是多少。

这个值决定了反弹次数是多少,也就是说这个点是多少呢?会发出一条光线到这儿,再算这个点的亮度是多少呢?它又会再算一次。

比如说这可能会反射到这来, 然后再上这个点可能再反射过来因为要算三次来回的反弹要运算三次。如何能证明这种组合?会使二次反弹引擎的BF算法只有一条光线了,我们可以这样来试一下,比如我们使用BF算法然后使它细分值改为一,

然后进行渲染,渲染完成保存一下,它用了27.1秒。那么首先我们在这儿对比一下,刚才这个没有使用二级反弹的, 和使用这个二级反弹有什么不同呢?

我们可以看到用了二级反弹之后整个场景变亮了。这个是不是很好理解呢。为什么呢?因为原来运算就只计算他的直接照明不计算这个点间接证明了因为没有二级反弹。现在计算了所以肯定场景要变亮了。另外也算的更加准确了。所以加了二级反弹引擎会变亮,这点是毫无疑问的。回到我们刚才的话题上,现在的细分值是1,我们现在把它改成35。把细分值改成35然后再次进行渲染,渲染完成我们进行保存。你可以看到仍然用的是27秒,当然这个0.1可以忽略不计。

它的效果的对比,没有任何的不同。这充分证明了当BF算法用于二次反弹引擎的时候,它的唯一的两个值中的第一个细分是没有意义的,所以这个值无论是多少都可以,因为它用于的是二次引擎,也就是二次反弹引擎。

再讨论一下打开二次引擎和没有打开二次引擎对于首次引擎发光图的这个光子贴图有什么不同吗?其实很简单,那么看一下这张图是没有打开二是反弹引擎的,

那么它上面记载的光子,每个光子的亮度是不是相对的要暗一些? 我们先将图改成640×480,把二次引擎关掉重新渲染一次,渲染完毕,当前在内存里放的就是当前渲染时这个光子贴图,我把它保存起来,因为我默认的模式是单帧的,单帧的流程相信大家都已经很明白了。

现在把内存里的光子贴图保存起来,比如保存123,接下来我们打开二次反弹引擎选择BF算法,反弹次数为3次,然后再次进行渲染这个,在渲染时看到是4195采样点,

渲染完是5125采样点,

采样点更多了,一会儿解释一下为什么采样点会变多,那么首先我们打开二次引擎的光子贴图保存起来,然后再点一下保存,我们选择456和123发光贴图有什么不同吗?

不同的在于,456这个光子贴图,它每个采样点的信息会更加准确,除此之外没有什么不同。现在我们选择从文件,

就是从文件调入123,然后渲染。可以看到123渲染的效果就是暗的,调出456,456的渲染非常明显就是亮的。很多同学都有一个错误的想法就是:首先引擎我理解它可以把光子贴图保存下来,那么二次引擎,它渲染效果是保存在哪儿了?

事实上如果有了二次引擎能让首次引擎每个采样点运算的更准确,其实就是保存在首次引擎的发光图里面,也就是说当你选择从文件就表示光子图是从文件调入,因为不管你是否打开二次反弹,都会生成光路贴图。这个光子贴图最终目的就是确定哪个点有多亮,所以你可以发现当前的效果,比如我们保存一下,就是调456这个发光贴图的效果。我们先保存一下然后我们把首次引擎选择发光图,二次引擎选择无,并且这里的值可以看一下我选择非常高。

可以想象这个渲染是不是很慢呢?不会的,因为这些都没有意义了。为什么呢?你是否选择二次引擎没有意义了,它不会再进行运算了。首次引擎也就是发光图引擎也不会进行自身细分和进行判断。这些值都变得没有意义了。除了一个值,插值采样,它还有意义。其他值都变得没有意义了,可以看一下效果,

你会发现直接渲染了。然后保存可以看到,时间几乎没有差距,所以如果你理解了它的一个反向运算的原理就该明白,最终生成的光子贴图,你是否打开二次引擎无非是来决定了最终光子贴图运算是否准确而已。

这次主要是给大家讲解一下引擎究竟该如何进行选择,以及为什么大多数人都使用了发光图加BF或者是发光图加发光缓存,就是这个道理。

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

0
封面图

评论0

社交账号快速登录