Unity学习笔记 Vol.80 URP中为游戏画面设置光照 您所在的位置:网站首页 三维烘焙的时候开着关键帧有影响吗 Unity学习笔记 Vol.80 URP中为游戏画面设置光照

Unity学习笔记 Vol.80 URP中为游戏画面设置光照

2023-12-14 10:12| 来源: 网络整理| 查看: 265

摘要

    今天的游戏会在各种不同的硬件上运行,玩家希望游戏不仅美观,还能在各种设备规格下流畅运行,而Unity通用渲染管线,具备对美术友好的工作流,可生成精美的图像,还能快速针对移动端、主机或PC等各平台进行优化。

 - 开始

- 实时方向光光照 Real-time direct lighting

- 全局照明 Global Illumination

- 反射 Reflections

- 后处理 Post-processing

- 结论

管线的关键在于多种幕后优化,综合多种因素来实现完美的一帧。下面介绍实时渲染的概念,以及Unity中常见的照明配置,帮助减轻高画面质量与性能之间的冲突。在内部制作的demo中演示实际效果。在最后,你将学习到实用的光照技巧,提升自己的项目。

首先展示如何使用Unity编辑器和通用渲染管线,然后演示怎样用方向光建立实时场景光照的基础,接着介绍如何使用全局照明实现逼真的光反射,怎样使用反射在物体间营造一种联系感,以及最后,如何使用后期处理,在不改变内容的前提下大幅改善场景。整个演示将从《Boat Attack》示例游戏中选取实际例子。详细教程请参考官方视频。

教程

    首先需要选择一种可编程渲染管线,每个管线都有不同的强项,请根据项目目标与开发环境 选择最合适的管线,本次的目的是实现高清光照、实现高性能和广泛的平台兼容,最为合适的管线为Unity的通用渲染管线或URP。打开游戏项目,在包管理器窗口中可以看到,URP已经安装在这个项目中了,URP的目标是,在高端至低端的大部分设备上,实现高质量的实时渲染,限制光照与着色的选项,引导用户选择高性能渲染设置。

实时方向光照

    我们先来讨论光照,光照流程首先要设定实时方向光,为场景光照打下基础,为了兼顾性能,URP带有直接光。

    它只具备一部分功能,场景灯光数量可在URP资源中设定,找到Edit > Project Settings > Graphics,选中此处的 URP资源

    找到Lighting设定,可以注意到URP有一个Main Light,也就是方向光及Additional Lights数量一定用以补充主光照的局部光。顺便一提,在内置渲染管线中,Local Lights就相当于管线中的Pixel Lights。设置好主光源和局部光后,我们就可以为场景添加光照了,项目中并没有局部光,只使用了一个位于层级中的主光源。主光源可用于制作如场景的太阳光等效果,方向光最为重要的特点是会照亮特定方向的物体,意味着光的距离不会有影响,只有主光源的方向或转向设定会影响效果,设置完成后,我们现在开始能看到场景中的阴影了,阴影目前可能会消耗许多性能,任何可以投射阴影的游戏对象,比如这块岩石,都必须渲染成所谓的阴影贴图,而该贴图将用于渲染受阴影影响的对象。

Perspective Aliasing(近距锯齿)

    在方向光下,阴影贴图覆盖了大部分场景时,可能导致称作Perspective Aliasing的问题,Perspective Aliasing的意思是靠近摄像机的像素与远处的像素相比,要更大、呈现块状。

Cascaded Shadow Maps(多层次阴影贴图)

    URP使用的多层次阴影贴图可解决这个问题,多层次阴影贴图会根据区域占据的屏幕比例,在摄像机视锥中分出阴影覆盖区。多层次阴影的设定可在管线资源中修改,多层级阴影范围越大,近距锯齿的问题就越轻。但层级数量增加时,要记住渲染开销也会随之增加,但其开销依旧比全用高清阴影贴图来的小,注意,只有主光源有多层次阴影,其他光源并不会投射阴影,会成为额外光源。

全局光照

    可以看到,实时光照不仅耗费性能,使用起来也有诸多限制,因此类似光散射,光反射这类效果,在实时光照中开销巨大,但并不是不能做。Unity有一种称为烘焙式全局光照的技术,可在游戏中实现逼真的光反射,它会离线计算光的传播,使用诸如光照贴图、光线探针和反射探针等技术来储存光照。

    先讲光照贴图,光照贴图是存储光照的纹理。不论是直接光照、间接光照或阴影贴图,都可以编写进光照贴图

    不过首先我们需要设定对象为Contribute GI,选中对象,勾选Static下的Contribute GI(组成GI),只有这些对象会贴图烘焙过程中计算。我们可以访问光照设置窗口来设置光照贴图的烘焙,要想访问光照设置窗口,选择Window > Rendering >  Lighting Settings。

光照贴图

    在项目中,Baked Global Illumination(全局光照烘焙)的已经勾选,光照模式设置为Baked Indirect(烘焙式间接光),该设置下引擎会使用高清方向光,烘焙光照、生成实时光照,非常实用。我们可以四处移动方向光,不必再在开发时修改方向,其余的选项定义了光照贴图的分辨率和清晰度,我们可以设定获取光照信息,所用的样本数量,可以优化采样数,在较短时间内实现无噪烘焙,为低分辨率烘焙去噪,设置好之后,就能点击Generate Lighting按钮了。我们可以通过多种方式可视化烘焙效果。

    比如在光照窗口中,打开Baked Lightmaps一栏,烘焙后的光照贴图,甚至可以用图像编辑工具打开,例如Photoshop

    或者也可以在编辑器中,选择Baked Lightmps选项来可视化贴图,其位于场景视图左上角,选择Shaded,将显示整个烘焙后的景象,选择Baked Lightmap,则只会显示烘焙后的光照贴图纹理,在Unity中,光照贴图是渲染引擎的一部分,直接影响场景中的光照质量,包括阴影的平滑度,明暗之间的过渡。

光照探针

    之前提到,只有Static(静态)对象,会被Unity的GI系统计算,但像船这样的动态物体怎么办呢?它们要怎样接收静态物体,接收到的光反射呢?要想接收光照,光照信息必须以可快速读取的格式储存,在游戏过程中用于光照计算,在设置好氛围光与光照贴图后,我们可使用光照探针组,来照亮余下的道具和动态对象,要想创建光照探针,选择GameObject > Light > Light Probe Group。在项目中,一个探针组可以影响整个场景,该场景中的探针都设置在了赛艇的赛道上,基本上就是在水上,并且我们需要注意别让探针,出现在游戏对象的里边。

反射

    看过CG电影或玩过主机游戏的观众应该知道,这些作品通常有非常逼真的反射,反射非常重要,它会在对象之间产生一种联系感,然而,高精度反射的代价是大量的处理时间,这对于高端设备不是问题,但对低端设备影响较大,那么如何在低端设备上实现精美的反射呢?

    反射探针或称烘焙式反射探针。要创建反射探针,可选择GameObject > Light > Reflection Probe。对象如果要有反射效果,其着色器必须能访问立方体贴图的图像。

    要建立反射效果,可以选中一个对象,并勾选Static下的Reflection Probe Static,物体表面的每个点都会接收,其面向的一小块立方体贴图,即表面的法线方向。每一个静态反射探针都会影响各自的区域。局部反射探针越多,间接反射的精确度越高,它们可在较封闭的区域内,生成精确的反射效果。如果选中反射探针,类型改为Baked,会看到所有静态反射探针,都会被烘焙进该探针的贴图中,反射探针的数量不宜过多,因为它会与场景一起加载,数量过多有可能会导致游戏开始时,加载时间过长。

Post-Processing

    后期处理是指在现有渲染场景基础上,于最终渲染之前,所添加的渲染效果,效果可以立即 生成视觉反馈。URP的许多渲染和后处理属性,使用一种体积框架,效果设置会被归纳到,体积组件下的特定类别中,要想创建新体积,右击层级视图,找到Volume,从多种体积中选择创建,或者也可以选择层级视图中任意的游戏对象,点击检视器中的Add Component按钮,添加Volume组件,这里表明体积之间,可存在优先级和权重,用以确定船只在洞穴暗处与开放天空间穿梭时,各属性的混合方式。我们可使用不同的体积,如全局、局部或单镜头,来针对不同情况精细地控制渲染。因此,作为单独资源储存的体积,非常适用于测试。比如我们能复制某个体积,修改其配置,再恢复为原始配置,这样并不会有什么后果。后期处理效果可能会占用很多帧时间,因此移动设备上使用URP时,请选择对移动端友好的后期处理效果。

    后期处理的实现方法,这里不进行赘述,有兴趣的同学可以参考UP之前的专栏。

参考链接



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有