3.Global Illumination

说好的放弃呢,还是搞了几天搞了一个大概。为啥会继续这部分呢?思考哈:灯光-->灯光渲染-->灯光优化-->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:设置适用于整个场景,而不是单个的游戏对象。这些设置控制灯光效果和优化选项。
  • Global Maps:显示GI lighting过程生成的所有lightmap资产文件。
  • Object Maps:显示了当前选中游戏对象的GI lightmap纹理(包括阴影遮罩)预览。
    注意:在窗口显示最下面有一个Auto Generate(自动渲染)的框,如果勾选,Unity将在编辑场景时更新lightmap数据。如果您想在不清除GI缓存的情况下清除场景中烤好的数据,请使用Generate Lighting按钮。

“Scene区域”

“Environment”

Environment

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

  • Source:漫射环境光(也称为环境光)是存在于场景周围的光并且不来自于特定的光源(也就是说没有特定的发光源)。使用这个参数定义漫反射光颜色,默认是Skybox(也就是反射Skybox的颜色)。
    Color:为场景中的所有环境光使用平面颜色。
    Gradient:渐变;为来自天空、地平线和地面的环境光选择单独的颜色,并在它们之间平滑地混合。
    Skybox :此选项使用skybox的颜色(如果skybox材质指定的话)来确定来自不同角度的环境光。
  • Intensity Multiplier:增强强度;设置场景中漫反射环境光的亮度,定义为0到8之间的值。默认值是1。
  • Ambient Mode:设置应用于场景中环境光的全局照明模式。只有当现场的实时照明和烘烤照明都启用时,这个属性才可用。
    Realtime:实时计算和更新场景中的环境光。
    Baked:预先计算和设置场景中的环境光,然后在运行。

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

  • Source :指定使用skybox或cube map(立方体映射)进行反射效果。默认值是Skybox。
    Skybox:选择此选项以使用skybox进行反射。如果选择Skybox,则会出现一个名为Resolution的附加选项。设置skybox的分辨率以进行反射。
    Custom:选择cube map来进行反射。选择此选项可使用多维数据集映射进行反射。如果选择Custom,则会出现一个名为Cube map的附加选项。设置skybox的cube map以进行反射。
  • Compression:用这个定义反射纹理是否被压缩。默认设置是Auto。
    Auto:如果压缩格式合适,则对反射纹理进行压缩。
    Uncompressed:反射纹理存储在未压缩的内存中。
    Compressed:纹理压缩。
  • Intensity Multiplier:反射源(在反射源属性中指定的天空盒或立方体图)在反射物中可见的程度。
  • Bounces:当一个对象的反射被另一个对象反射时,反射“反弹”发生。反射是通过反射探头在场景中捕捉到的。使用此属性设置反射探测在对象之间来回反射的次数。如果设置为1,那么Unity只考虑初始反射(来自反射源属性中指定的skybox或多维数据集映射)。
“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:环境光遮蔽

  • Max Distance:设置值的大小来确定阴影的范围
  • Indirect Contribution:
  • Direct Contribution:

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

Final Gather

勾选后两个相应的参数:

  • Ray Count:数值越大场景越细腻。

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

Global Maps

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

  • Intensity:存储灯光颜色信息(RGBA)
  • Directionality:灯光方向贴图信息
    一个灯光颜色贴图不足以渲染显示场景中各个物体应该显示的情况(凹凸情况等);还需要方向信息,但是将全部的信息放入到一个贴图,实在是太大了;所以选择使用两张贴图存放不同的信息。
  • Shadowmask:当选择Distance Shadowmask模式时,会产生这样一张贴图;主要记录相关阴影信息。


    Shadowmask

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

“Other Settings”

Other Settings

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

  • Color:给场景中的雾 选择颜色。
  • Mode:定义雾化密度随相机距离的不同变化方式。
  • Linear:雾密度随距离线性增加。
    -- Start:设置距离相机的距离,在那里雾开始。
    -- End:设置与摄像机的距离,使雾 完全遮蔽场景游戏对象。
    Exponential:雾密度随距离成指数增长
    -- Density:用这个来控制雾的密度。随着密度的增加,雾 显得更浓。
    Exponential Squared:雾密度随距离(指数和平方)增加得更快。
    -- Density:用这个来控制雾的密度。随着密度的增加,雾 显得更浓。

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:可视化光探针;使用这个过滤器来过滤场景视图中显示的光线探头。默认值仅供选择使用。
选项如下:

  • Only Probes Used By Selection:选择只使用探测;只有影响当前选择的光探针才能在场景视图中显示出来。
    All Probes No Cells:所有的光探测都在场景视图中显示出来。
    All Probes With Cells:在场景视图中显示所有的光探针,并显示用于插值光探针数据的四面体。
    None:在场景视图中不显示光探测。
  • Display Weights:显示重量;当勾选时,Unity从用于主动选择的光探针到用于插值的四面体上的位置画一条线。这是一种调试探测插值和位置问题的方法。
  • Display Occlusion :当被勾选时,如果混合模式是距离阴影遮罩或阴影遮罩,Unity会显示光探测的遮挡数据。

“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

  • 使用6 Sided渲染方式,分别添加6张不同方向的Texture。
  • 使用Cubemap渲染方式,仅仅只需要一张cubemap的Texture。
    注意:skybox的切换实际上就更换skybox的材质(Lighting-Skybox Material);在前面的Environment中看到过。
    Skybox Material

    注意:GameObject的Material上的两个属性与Skybox的反射联系
    Material
  • Metallic:金属性,当调节到1时,gameobject表面具有金属感。
  • Smoothness:光滑度,当调节到1时,gameobject表面比较光滑。
    这里为什么突然说到关于material的两个属性呢?因为当Lighting Setting设置好以后,如果相关gameobject的这两个属性设置为1,则该gameobject就会反射周围的场景。


    效果图

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还是渲染的更加贴近于现实。)
对比

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

  • 灯光是否支持阴影:


  • Quality设置下阴影是否开启


  • 模型是否执行阴影


  • 材质问题:有些shader具有透明效果,不会产生阴影

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


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


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

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

如图:添加的Point光源并没有使得右边的Cube产生新的阴影
效果图

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

  • 灯光探照灯技术
  • 选择Shadowmask的另外一个模式
    在Quality中切换当前Shadowmask的另外一个模式:
    Distance Shadowmask(相比Shadowmask更加消耗性能,效率更低)
    Quality

    Shadow distance:表示距离摄像机40的范围内(场景中),灯光将是实时渲染的;超出这个范围,将使用烘焙好的贴图效果。
    在这种模式下,可以实现上述案例效果。


    对比切换模式前后 Shadow casters的值可以看到:当切换Distance Shadowmask模式,动态A闯过静态B的影子时相当于进行了实时灯光渲染。
    效果图

    一般情况会做一个触发检测,在一定范围内选择Distance Shadowmask模式,出这个范围切换到Shadowmask模式:
    Code

    Baked Indirect模式
    只烘焙间接光,其他都是实时渲染;更加真实,也更加消耗性能。

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 屏幕后期处理


主要介绍一些属性:

  • Fog:雾
  • Antialiasing:抗锯齿;为了消除远处物体具有锯齿边的情况对其进行模糊效果。
  • Ambient Occlusion:环境光遮蔽;(这里是实时的;在lightmapping里面是烘焙好的)
  • Screen Space Reflection:屏幕的空间反射;需要反射材质,会实时反射场景中的一些东西。
  • Depth Of Field:景深(类似于相机调焦)
  • Motion Blur:运动模糊效果
  • Eye Adaptation:眼部适应
  • Bloom:游戏环境高光的地方会更加亮,产生泛光的效果(理解为增强版本光晕效果)。
  • Color Grading:颜色修正(校准);游戏环境整体颜色改变。
  • User Lut:(Look Up Texture)使用贴图
  • Chromatic Aberration:色差变换;一般配合Vignette使用
  • Grain:噪点
  • Vignette:镜头光晕效果
    这个场景主要是介绍Post-Processing插件的一些效果;以前这是Unity的一个特效包;每一个特效一个脚本,现在内嵌到Unity里面去了,这个后处理对于游戏的画风比较重要。

这里还记录两个东西:
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:实时渲染的阴影数(数量越少越好,这个值是实时渲染得到的)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容