当前位置:   article > 正文

实时渲染入门:静态光照和动态光照_静态光和动态光的区别

静态光和动态光的区别

光照也是实时渲染的最重要的部分之一,和反射一样,光照和阴影在实时渲染中的开销也很大,因此一部分计算被分流到预先计算/预算渲染中,而静态光照是指所有预先计算而非实时渲染的光照。

静态光照和静态阴影

从流程来看:
1,静态光照是预先计算的,并将大部分结果存储在光照贴图中。
2,性能方面很迅速,但是占用内存
3,在预先计算光照时要花费较长的时间
4,每当模型发生了变化,就要重新渲染
5,模型需要光照贴图UV,这额外的准备步骤也需要消耗时间

从质量来看:
1,静态光照可以处理辐射和全局光照
2,可以获得真实的阴影效果,包括真实而高质量的软阴影,效果比动态光照更好
3,但是质量实际害取决于光照贴图分辨率和UV布局(纹理大小和UV布局质量决定光照质量)
4,由于UV布局的关系,光照中还可能出现接缝
5,光照贴图有一个上限,所以巨型模型可能会有不足的情况
6,一旦被计算完成,光照和阴影就不能在运行时被移动了
光照贴图本质上就是一张纹理,是一张烘焙有光照和阴影信息的图片,然后纹理会和底色相乘,因此它看起来就像是被光照亮了一样

ILC(Indirect Lighting Cache)

现在静态光照已经完成,纹理被烘焙到了光照贴图中。假如一个角色正在游戏世界中行走,它是一个动态模型,而这个是在前期烘焙的过程中不曾存在的,而这时它要对周围的光照做出反应,这种情况下会用到ILC——间接光照缓存,ILC在一个场景中存储了很多点。
在这里插入图片描述

在这里插入图片描述
这些点都储存了光照信息,每一个点都存储了间接光照,当动态模型在游戏中移动时,UE4会找到最近的点,查询它的亮度,然后将它和自身混合。
在光栅化之前,这些静态的信息就已经被确定了,因此这个过程发生在实时渲染之前的precalculate的过程。

下面是静态渲染的性质:
1,静态光照的渲染速度永远相同,无论是一盏光源,没有光源,还是几万个光源,速度都是相同的。
2,光照贴图分辨率会影响内存和文件大小,而不是帧率。这一点和纹理一样
3,烘焙时间会随着光照贴图分辨率,模型和光源数量以及质量设施的提升而增加。

动态光照

从流程上来说:
1,动态光照借助Gbuffer缓冲实现实时渲染
2,光源可以被随意改变,移动,添加或者删除
3,不需要准备任何特殊的模型
4,阴影对于性能的开销很大
5,使用动态光照更复杂:使用静态光照时,只需要放置光源,设置渲染选项,点击构建就可以了,UE4就会帮助渲染。
从质量上来说
1,阴影的开销很大,所以通常需要降低阴影渲染质量或者降低其他画面的渲染质量,或者禁用一些功能来补偿。
2,动态光照不会对大部分内容产生辐射或者全局光照。
3,动态光照通常看起来更锐利。
4,动态光照不会产生软阴影,往往不会达到正确的渲染效果。
5,动态光照看起来更清晰更鲜活。
6,动态光照能很好的使用动态阴影,并不关心目标有多大

四种主要的动态阴影类型

1,常规动态阴影RDS
是指那些被设置成可移动,并正在投射的动态阴影。
在这里插入图片描述

2,逐个对象阴影
固定阴影会混合使用完全依赖光照贴图的静态光照以及完全动态光照。
3,级联阴影地图(Cascaded Shadow Maps)
根据距离渲染动态阴影,并切换不同分辨率的贴图。可以在细节面板里设置。
在这里插入图片描述
4,距离场阴影(Distance Field Shadows)
CSM更倾向于处理距离较近的阴影,而DFS就更善于处理长距离和大场景的阴影。它并不是很准确,但是开销很小。

阴影的计算
1,首先要知道点与点之间的距离
2,要知道光源在哪里,以及光线经过时离几何体有多近
3,几何体距离下一个击中的点有多远,阴影要覆盖多长的距离
如果有某种方法能够存储模型之间的距离信息,实时计算所有这些数据,花费的时间就会更少。所以就会考虑用距离场阴影,这是目前唯一在UE4中真正实用的方法。

渲染
阴影被像素着色器计算和使用
动态光照是以一个球体被渲染的
渲染方式类似于遮罩
球体内的任何像素都会进行着色运算来混合光照

因此在使用动态光照时要注意
1,动态光照在延时渲染中开销很低,但是在前向渲染中开销很高
2,开销取决于像素着色器的操作,因此像素越多,渲染越慢
3,光源离摄像机越近,影响到的像素越多,渲染也就越慢
4,需要尽可能的缩小光圆半径
5,尽量避免光照重叠

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/91503
推荐阅读
相关标签
  

闽ICP备14008679号