实时反射很难实现,这也许是除了光照以外最难实现的技术。反射总共有三种。
反射捕获
首先执行的就是反射捕获,同时也是优先级最低的。它就是在一个特定的位置捕获一张静态立方体贴图 。
它具有以下特点:
1,非常快速
2,预先计算
3,不太准确
4,作用于局部
所谓的预先计算,就是打开关卡的一刻重新捕获。效果等同于Play->Update Reflection Captures。
如果运行游戏或者应用,它也会在加载时更新。如果打包游戏或者应用,它会将纹理烘焙进游戏,而不再在加载时捕获了。它实际会将捕获的图片保存,作为游戏或者应用的一部分,并在需要时读取。
它作用于局部,会随着范围扩大而逐渐消退,并不是突然消失。
基本上,这个范围内的所有像素,都会检查附近是否有反射捕获的Actor,如果有,它就向反射捕获Actor查询立方体贴图,读取立方体贴图,然后融合到场景当中去。
平面反射
类似于反射捕获,从给定位置获取捕获内容,但是平面反射只作用于平面,应用场景主要在需要精确的反射。反射捕获的Actor也是预先计算的。
SSR(屏幕空间反射)
是UE4唯一的默认的反射系统,它的优点是:
1,能反射所有对象,
2,实时
3,精确
它的缺点是:
1,噪点很大
2,开销很大
3,渲染只能在屏幕上出现的内容
实时这一点跟以上两点不同,在UE4中移动对象时,反射也会跟着变化。
而只能渲染在屏幕上出现的内容的意思就是:只有在屏幕中出现的内容,它的反射才会被渲染出来。如果想通过反射来观察屏幕以外的物体,就做不到。
反射性能:
1,SSR拥有最高的优先级,如果不能用的话,就使用平面反射,如果还不行,就使用反射捕获。在关卡中加入过多反射捕获,可能会导致加载变慢。
2,当许多反射捕获重叠时,由于像素着色器会一遍一遍的运算,因此开销会非常大。
3,反射捕获可以在“项目设置”中设置。
4,天空光照能够给整个游戏世界提供低成本的备用反射捕获
5,平面反射只有在绝对需要的时候才确定开启
6,如果硬件性能有限,就关闭SSR
7,如果硬件允许,同时SSR也可以提升性能