Unreal GI
全局光照介绍实时渲染的烘焙和动态GI
所有非定向光照信息,比如 接触阴影、颜色扩散、光平衡...缺失,对提升真实感很重要
加入全局光照后
加入纹理、材质、反射后的效果
介绍
GI in a Real-Time(Baked vs. Dynamic)
实时渲染中的全局光照方式:Unreal中的两种方式
烘焙GI(main 常用于室内场景 多数为静态物体 画面效果更优)动态GI
模拟GI需要消耗大量计算,涉及到光线追踪,有时需要数分钟/小时才能计算出最终的GI效果。在实时渲染中,渲染GI效果在内的单帧画面只需要几毫秒的时间,传统的物理模拟手段在实时渲染引擎中并不适用。实时渲染中的两种常见手法可用来计算全局光照:
预计算,即预处理GI。将计算结果储存在光照贴图(本质即纹理)中,它们会和材质及其他纹理相互融合,形成最终效果。局限:只有静态对象才能烘焙光照;好处:性能开销低光线传播体积。完全实时计算,没有任何事先处理环节,所以GI效果不是很精确(细节上),主要是为了补偿额外的性能损失
理解Lightmass - 烘焙核对表
烘焙全局光照的核对表(5个步骤)
场景中的网格体Mobility设置成Static后可被烘焙,不会在运行时移动,且可接收光照贴图设置成Movable后不会被烘焙,实时计算光照,包含动画,且阴影明暗都是动态的Stationary,部分光照(定向光照/阴影)实时计算、部分(非定向/GI)会被烘焙为所有对象设置UV通道,才能将纹理映射到网格体上,以便用于烘焙光照贴图
左上角 橘色-可移动;黄色-固定;空-静态
Channel0主要用于常规纹理(漫反射、法线、粗糙度贴图);Channel1专门用于烘焙光照贴图
烘焙光照贴图的UV上禁止出现重叠 否则光照贴图会被过度烘焙 导致一些光照异常和瑕疵;尽量减少UV周围的空白区域
可用DCC软件创建这两个UV通道,也可用Unreal自动生成光照贴图的UV通道(在Build Settings中勾选Generate Lightmap UVs 并 Apply Changes 引擎就会计算UV)可自定义光照贴图在哪个UV通道中生成,还有resolution等信息,调整数值来确保UV间距正常
Lightmass介绍
在unreal中烘焙光照、计算全局光照、将贴图融合进材质等都由Lightmass完成
Lightmass本质是一个独立应用,支持光线追踪,与其他光线追踪器(如V-Ray或Mental Ray)一样,它拥有大部分光照功能,还支持网络分布式渲染或多处理器渲染,以便加快烘焙速度
在unreal中主要通过build菜单使用Lightmass。build Light Only后,场景就会被发送给Lightmass,然后它开始计算光照和GI,计算完成后会生成纹理,再将纹理导入场景,使纹理与材质融合。一旦Lightmass烘焙完场景的光照贴图,就能在视口中直接看到效果。
可视化Lightmass
如何通过关闭纹理并调整设置方法在视口中分离并查看GI效果
为了快速改善光照贴图的烘焙质量,应过滤掉多余的光照信息,在没有纹理、材质、其他后处理特效干扰的情况下查看烘焙效果。通常做法:
切换到 Lighting Only 模式(可滤过所有纹理和反射效果)禁用某些后处理特效,如 SSAO屏幕空间环境光遮蔽。Lightmass已经计算了部分环境光遮蔽效果,并将其烘焙进了光照贴图,如果引擎继续加上其他环境光遮蔽效果,很难判断出哪种SSAO质量出了问题需要调整(禁用后只显示Lightmass计算出的环境光遮蔽,而不是引擎计算出的效果)调整曝光设置,不建议使用自动模式,可设置成常量。亮处或暗处切换引擎会自动调整曝光禁用泛光效果。Bloom会在光照中增添高亮效果,导致烘焙信息受到干扰
Show下拉框中 禁用SSAO
Lit下拉框中 取消勾选Game Settings 调整曝光值
Show下拉框中 禁用Bloom
提高lightmass质量
如何提升烘焙质量、缩短烘焙时间
Importance Volume 重要体积
编辑器提供的一种特殊的Actor,作用是告诉Lightmass应该聚焦在哪里/集中计算哪些区域。有的大型场景会设置远景,Lightmass并不需要计算这些区域的GI/生成全局光照效果,只需关心实际能看到的场景,该体积会告诉Lightmass应该计算哪些区域。
- 有助于提升质量,所有反射、光线追踪都只会发生在该区域,而不是遍历整个场景
- 有助于减少烘焙时间
Lightmass Portals 门户
也是一种特殊的Actor,对室内场景很有用。一般室内场景的所有开口位置都要添加该门户,作用是告诉Lightmass场景开口在哪里。这样Lightmass能更好地汇集光线以提升光照质量,烘焙时间也会缩短,因为计算更集中了。
烘焙光照贴图时 阳光会更加集中地从开口照进来
Lighting Quality 光照质量
build下可调整光照质量级别 会影响烘焙时间
理解世界场景设置(World Settings)
光照质量级别有限,World Settings - Lightmass中有更多设置,主要介绍与质量相关的选项
Static Lighting Level Scale 静态光照级别比例:默认1,降低该数值可增加捕获的细节,如接触阴影的细节;但降低该数值时噪点可能会变多,尤其光照质量较低时,故应增大光照质量以便消除计算GI产生的噪点,烘焙时间也会变长Num Indirect Lighting Bounces 间接光照反射次数:控制默认情况下的反射次数,光照较暗场景中缺少足够反射时,可增大反射次数。同理Num Sky Lighting Bounces(增加光线反射次数对烘焙时间的影响有限,最初几次反射会增加时间,后面几次就影响较少了)Indirect Lighting Qualify 间接光质量:对光照质量有直接影响,默认1
网格体作为光源
Lightmass允许将纹理对象作为光源,例子:电视播放画面并照亮屋内环境
放置一个Plane 添加自发光材质 周围的间接光照会受到影响
Plane - Details - Lighting
Use Emissive for Static Lighting 将自发光用于静态光照,告诉Lightmass这是一个发光对象,勾选后Lightmass就会把它看作光源,颜色由材质中连到自发光引脚的部分来确定Emissive Boost 自发光影响系数,数值越高自发光对间接光照影响越多,可营造色调氛围
动态GI
当场景中包含移动对象时,LPV实时光照的效果优于烘焙,但前者计算量更大。动态GI基于light propagation volume 光线传播体积技术
优点:实时计算,无需烘焙或预处理,所有对象都可用同一套系统处理,无需其它系统来处理特殊情况。对于工作流而言,模型无需额外准备工作(如准备UV)直接将对象加入场景即可,引擎会自动处理它们缺点:不利于性能,渲染开销会变大,因为每一帧都要实时计算GI。为了保证画面的可交互性,计算会大量采用近似算法实现近似效果,不可能在高帧率下实现精确的GI效果。相比烘焙GI,动态GI质量更低细节更少
在编辑器中使用动态GI:
在 ConsoleVariables.ini (Engine-Config文件夹下) 中开启这项特性在Startup下添加一行自定义命令:r.LightPropagationVolume = 1关闭编辑器,清除光照烘焙信息(删除xxx_BuildData.uasset),启动编辑器即可
ConsoleVariables.ini (Engine-Config文件夹下)
例子:如果要在编辑器中开启动态GI,需要一个Movable的定向光源;对该光源勾选上Dynamic Indirect Lighting 动态间接光照,就能直接在场景中观察光线如何反射。动态GI与烘焙GI相比更偏向近似效果,没有小细节和接触阴影,最好同时开启SSAO来补偿丢失的细节;好处是完全动态,光照会实时更新
动态GI效果(缺少小细节和接触阴影)
动态GI的设置/光线传播体积LPV设置:需借助后处理体积 Post Process Volume - Rendering Feature - Light Propagation Volume
Intensity:增加/减少动态GI的强度Size:同理重要体积中的Size表示区域大小,但只与LPV有关,用于指定动态GI需要集中计算哪些区域。如果降低该数值,缩小后的区域内会有更多细节和更好的质量Light Injection Bias 光线注入偏移:用于控制漏光,动态GI采用近似效果故墙壁后可能会有漏光,可调整偏移参数来解决该问题
页:
[1]