我的世界渲染距离多少?
渲染距离跟光矩(光照距离)有关,而光矩又受几个参数的影响—— 光源的类型(阳光、火把/火炬、熔岩球等); 光源的强度; 光源离物体的距离; 被照射物体的表面法线朝向; 是否开启光影效果及相关的设置(如高光、焦散)。 其中前四个是“固定参数”——即无论怎样设置,它们都是固定不变的。 最后一个属于“动态参数”,它会根据游戏内物体间距的大小而进行动态调整。 所以题主的问题其实应该是如何使我的世界中光源能照亮更远的距离。
首先,在同一个世界下,光线是遵循能量守恒定律的——“能量”在这里指的是照明度。当光照进一个物体时,总会有部分光照会被反射出去,从而影响其他物体对它的接收(吸收+反射=总传递)。所以如果A物体能反射的光线有多强,那么B物资吸收的光线就会有多少。因此我们可以通过增加光源的亮度来增强它对物体的照明,但这样问题就来了——光源越强,就越有可能被远处的事物所吸收,从而导致光线无法传到很远的区域。这就像你在黑暗中打开了手中的电筒,虽然你的眼睛立刻被强烈的光照刺瞎了,但你同时也照亮了你面前的小路。
要解决这个矛盾,我们需要做到两点:一是让光源能尽可能多地“释放”自己的光线,二是防止这些光线被近处的物体所吸收。
一、让光源能尽可能多地“释放”光线,这就需要加大光源的“辐射面积”,即使用更大的“体积光”。要知道,对于相同亮度的光源来说,其面积越大,能覆盖到的物体表面也就越多。当然,使用体积光也会存在一个问题:由于需要大量内存和CPU时间来渲染较大面积的灯光,这会导致在运行中消耗更多的系统资源,降低游戏的流畅程度。不过考虑到现在一个大型单机游戏的内存要求都已经达到了2GB左右,这个增加的体积光所带来的额外负担基本可以忽略不计了。
二、防止光线被近处的物体所吸收,这就需要增加光源与物体间的距离,同时减少光源周围物体的高度,也就是所谓的“阴影消除”。因为阴影的存在会迫使光线在经过近处的物体时发生两次(或多级)的漫反射,从而使大部分的光线都被反射回起点。如果能解决这两点问题,就可以大大地提高光的传播距离,实现我心中想象的那个“无限远”。