Unity的“小弟”们

3.Global Illumination

2018-09-12  本文已影响228人  夜行水寒

说好的放弃呢,还是搞了几天搞了一个大概。为啥会继续这部分呢?思考哈:灯光-->灯光渲染-->灯光优化-->Draw Call & FPS & Shadow casters & Batches & Verts --> 游戏优化;按照这条路线思考下来;Unity的优化也是一个值得学习和研究的地方。所以还是打算把Unity(基于Unity 2018.2.5f1)的GI(Global Illumination)部分学习一个大概,不求特别了解,但是得掌握个7788哈。GI = 直接光照+间接光照+环境光+反射光。按照惯例来一个~~

“官方吐槽”

Lighting
概述:照明窗口(菜单: Window > Lighting > Settings)是Unity Global Illumination(GI)功能的主要控制面板。虽然Unity中的GI在默认设置下效果很好,但是光照窗口的属性允许你调整GI进程的很多方面来定制你的场景或者根据你的需要优化质量、速度和存储空间。
照明窗口的控件分为三个选项卡:

“Scene区域”

“Environment”
Environment
1.Skybox Material:天空盒材质;Skybox是一种材质,在场景中出现在一切事物背后的用来模拟天空或遥远天边的背景。
2.Sun Source:太阳源;在使用Skybox的过程中,使用一个带有directional Light组件的Gameobject来指定“太阳”的方向(或在场景中大型而远距离的光源)。如果设置为None(默认值),则假定场景中最亮的directional light代表太阳。
3.Environment Lighting(这些设置会影响来自远处环境的光线,可以理解为漫反射)

4.Environment Reflections(环境反射:这些设置控制涉及到反射探针烘烤的全局设置,以及影响全局反射的设置。)

“Realtime Lighting”
Realtime Lighting
1.Realtime Global Illumination:实时渲染模式;一旦勾选,Unity会实时计算和更新光照。
“Mixed Lighting”
Mixed Lighting
1.Baked Global Illumination:烘焙渲染模式;一旦勾选,Unity会预先计算灯光,在运行时烘焙场景中的灯光。
2.Lighting Mode:灯光模式决定了在场景中混合灯光和阴影与游戏对象的工作方式。
注意:当你改变灯光模式时,你也需要重新烘焙场景。
3.Realtime Shadow Color:定义用于实时渲染阴影的颜色。设置仅在灯光模式设置为Subtractive时可用。
“Lightmapping Settings”
Lightmapping Settings
Lightmapping设置特定于Lightmapper后端。与其他设置不同,它们不共享,并且有自己的参数。
1.Lightmapper:烘焙灯光的解决方案(烘焙主要依赖CPU)。
2.Indirect Resolution:间接光烘焙精度;
3.Lightmap Resolution:烘焙的精度;烘焙多少像素点到灯光贴图上。
4.Lightmap padding:UV间距(当烘焙后感觉光照效果不对,可以对此进行调节来确保烘焙的结果更加真实)
5.Lightmap Size:光照贴图的大小
6.Compress Lightmaps:是否压缩光照贴图
7.Ambient Occlusion:环境光遮蔽

8.Final Gather:最终聚集的信息(为了模拟一些物体的颜色反射到其他物体上,使得场景更加真实,细节更加细腻)(比较消耗性能)

Final Gather
勾选后两个相应的参数:

9.Directional Mode:灯光方向贴图;如果不选择,Global Maps这不会产生相关贴图

Global Maps
如图上的几个贴图分别是:

10.Indirect Intensity:间接光的强度
11.Albedo Boost:提高反射率(防止曝光过高)

“Other Settings”
Other Settings
关于fog, Halos,Flares和Cookies的设置
1.Fog:雾;启用或禁用场景中的雾。注意Deferred rendering path下Fog不可用。对于延迟渲染,后期处理雾效应效果可能比较合适。
当勾选了Fog,则会出现三个参数:

2.Halo Texture:光晕纹理;设置你想要使用的纹理来围绕灯光绘制光圈。
3.Halo Strength:光晕强度;定义灯光周围光环的可见性,范围从0到1。
4.Flare Fade Speed:“耀斑退却速度;定义镜头闪光的时间(以秒为单位),在最初出现后从视图中淡出。默认设置为3”。
5.Flare Strength:耀斑强度;从0到1的值定义从灯光发出的透镜闪光的可见性。
6.Spot Cookie:设置你想用于聚光灯的Cookie texture。

“Debug settings”

帮助你调试场景的设置

Debug settings
1.Light Probe Visualization:可视化光探针;使用这个过滤器来过滤场景视图中显示的光线探头。默认值仅供选择使用。
选项如下:

“Global maps tab区域”

使用Global maps选项卡查看照明系统使用的实际纹理。这些包括强度光地图,阴影遮罩和方向性地图。这只适用于烘焙照明或混合照明使用;预览是空白的实时照明。


Global maps tab

“Object maps tab区域”

使用Object maps选项卡查看当前选中的* *GameObject的烘焙纹理预览,包括阴影遮罩。


Object maps tab

属性大概就是这些,可能中间有些错误(到时候发现再改);痛苦并快乐的过程~~~~~~

“个人吐槽”

针对GI的各方面的东东,做了一个Demo测试哈!!!有8个Scene,每个场景讲述不同的知识点。
1.Scene 01-Skybox
常用的两种创建Skybox的方式(后面两个不知道是啥,实在是没精力去看了):

Create Skybox

2.Scene 02-Light Split
场景中的灯光分解;对于新建场景的光照效果并不是某一种灯光造成的,实际上是由多个光照效果互相影响形成的。


仔细看AB两块区域的光照效果;按理说,都是接受了Directional Light,为啥显示的效果不同呢?

依次去掉这三个参数,将其设置为None或者Other;就会发现场景中AB区域慢慢变成一样的了。
效果图
说明:场景中的灯光实际上由上面标记的三个参数以及场景中的Directional Light组合造成的灯光效果。
GI = 直接光照+间接光照+环境光+反射光

3.Scene 03-Light Type
主要讲解下灯光的几种基本的类型(这个在2.Light里面有记录介绍)
Directional Light:平行光,类似于太阳光(光照强度不会随着距离衰弱)
Spot:点光源(区域直射)
Point:点光源
Area:区域光
除开平行光的其他三种光源在场景中的渲染

效果图
关于在PlayerSettings下面光照渲染的两种模式Gamma和 Linear
PlayerSettings
一般情况下都选择Linear,因为其渲染比Gamma好(前提:显卡支持;)。Area Light只对勾选Static的GameObject起作用;
注意:在烘焙过程中报错或烘焙完以后明显感觉到灯光有差异;查看相关模型的Generate Lightmap UVs 属性,对其进行勾选。(这样才能保证Unity将烘焙后的贴图信息正确的贴到相关模型上面)。
Unity官方关于二者的对比(Linear相比Gamma还是渲染的更加贴近于现实。)
对比

知识点说明:当一个灯光照射一个游戏模型时,没有产生阴影,可以从几方面入手查看

4.Scene 04-Light Mixed
两个光照技术:实时光照&烘焙光照


上面两个效果一般只会开启一个,节约性能。
烘焙光照:为了节省性能开销提前将场景的灯光信息烘焙成一张贴图,在运行时只需要将贴图贴到场景中static物体上即可。
全局光照:直接光照+间接光照(一次以上的照射,两次以上的反射)


混合模式光照下的三种模式

Subtractive模式:将静态物体烘焙成贴图,相关光照贴图信息存储在Global maps里面(可以查看);场景中动态gameobject只能受到一个主光源的影响。(如果有其他Realtime光源,动态gameobject并不会产生实时阴影)该模式效率高,但是效果相当差,并且没有高光效果。

如图:添加的Point光源并没有使得右边的Cube产生新的阴影
效果图
Shadowmask模式:相比如Subtractive模式,可以存储多种光源,可以让动态gameobject接受多个光源,产生多个影子。
场景例子:如果在烘焙好的场景中,某一个物体A需要从一个静态gameobject B的影子下面通过,正常情况下,A的表面光照效果应该会受到B的影子的影响变黑,但是在Shadowmask模式下却不变;一般处理的方式有两种:

Scene 05-Light Probe Group
灯光探针是将周围的灯光信息记录下来后,在运行时实时的将信息渲染到周围的物体上。


Light Probe Group:灯光探针组
创建Light Probe Group会看到在Scene中有8个小球;每个小球就是一个灯光探针;实时监测小球所在点的灯光颜色信息。
可以对小球进行复制 ,在一个场景中设置多个小球,进行丰富的灯光阴影设置。
效果图

Scene 06-Reflection Probe


Reflection Probe:反射探针
可以理解为将一定范围的static物体反射到gameobject上

如下图:当Gameobject的属性Reflection Probes设置为Off时则不受反射探针的影响。

效果图

Scene 07-Light Material Self


自发光材质是将材质的Emission属性勾选,然后调节光照颜色和强度,赋予给相关的gameobject即可。
效果图

Scene 08-Post-Processing Profile
Post Processing Stack 屏幕后期处理


主要介绍一些属性:

这里还记录两个东西:
1.Camera下的几种渲染路径


Legacy Vertex Lit:顶点光照;模型细节无法渲染出来;不支持实时阴影。效率高,效果差,适合旧机器。
Forward:正向渲染,支持像素级别的渲染;只支持一个平行光的实时阴影;游戏物体受到的灯光渲染越多,渲染速度越慢。支持MSAA(抗锯齿)
Deferred:延迟渲染;效果最好;同时支持多个灯光的实时阴影。

2.批处理Batches
Draw Call是绘制图形的命令;由CPU传给GPU;
针对游戏的优化实际上是优化Draw Call的次数(减少其次数);
而Batches就是对Draw Call的一种优化方式





从上面批处理的概念引申出关于游戏优化的几个基本参数

4个重要的参数:
FPS:游戏帧率(游戏运行稳定在60以上)
Batches:批处理
Verts:Camera能够渲染到的顶点数(数量越少越好,这个值是实时渲染得到的)
Shadow casters:实时渲染的阴影数(数量越少越好,这个值是实时渲染得到的)
上一篇下一篇

猜你喜欢

热点阅读