Search Unity

光照是游戏中最重要的视觉元素之一。来自 Arm 的合作伙伴提供了一些实用技巧,可帮助您优化手机游戏的光照效果。

在渲染一款手机游戏时,光照可能是要考虑的最大性能因素之一。这也是实现视觉风格的最重要组成部分之一。然而,艺术目标与性能常常彼此矛盾。

好在有许多方法可以在照顾手机硬件限制的同时,消除二者之间的隔阂。本文中,来自全球最大的移动芯片设计公司 Arm 的合作伙伴分享了其最佳实践指南中的一些光照技巧

渲染管线

在 Unity 的内置渲染管线中,有两种渲染方法可供选择,即正向渲染和延迟着色。在正向渲染中,实时光照非常昂贵,但是您可以选择每像素应渲染多少光照,从而限制成本。延迟着色需要 GPU 支持,但一旦在硬件上实现,该技术就可以渲染大量的实时光照并提供高水平的光照保真度。

尽管延迟着色非常适合 PC 或游戏机上的光照密集型游戏,但在手机 GPU 上却表现不佳。这是由于大众市场设备带宽较低。制作手机游戏时,要确保其在尽可能多的设备上流畅运行,这一点非常重要。为了优化手机上的光照项目,我们建议您使用通用渲染管线。

Unity 的通用渲染管线是一种预先构建的脚本渲染管线,已进行了性能优化。通用渲染管线默认情况下采用正向渲染,具备一系列功能,可帮助您的应用程序达到最佳性能(您可以点击此处了解更多信息)。

光照烘焙

无论使用哪种平台,渲染技术的最大性能升级之一都是将光照烘焙到光照贴图和光照探针中。使用实时光照时,需要为渲染的每一帧单独地计算诸如直接照明和阴影之类的特性。根据屏幕上的光照数量,计算成本可能会很高。性能预算将极大地限制您可以在屏幕上显示的内容。为了克服这些限制,许多计算工作在以下进程中以离线状态预先进行:
lightmap baking

光照贴图烘焙将光照和阴影信息存储在纹理或“光照贴图”中。该技术可以捕获计算密集型的照明特性,例如反射光和柔和阴影,从而增强真实感。但是,光照贴图也存在一些限制,这一点我们必须要有所了解。完全烘焙的光照无法根据场景的动态元素进行更新。因此,任何动态对象都不会被添加到光照贴图。但不必担心:动态对象也可以通过以下预先计算的解决方案添加:
Light Probes

光源探针与光照贴图具有很多相同的优点,因为它们都能存储可以离线计算的光照数据。许多计算成本是在编辑时而不是运行时产生的。光照贴图对场景中的表面在给定纹素处接收到的光照进行编码时,光照探针会存储穿过场景中空白空间的光。然后,该数据可用于照亮移动(动态)的对象,这有助于在视觉上将它们与整个场景中的光照贴图对象集成在一起。

纹素

纹素,即纹理元素,是纹理贴图中的单个像素。因此,这些纹素是组成光照贴图和编码光照信息的单位。对纹素的控制可能会影响光照的质量、烘焙的计算时间、磁盘存储成本以及光照贴图的视频 RAM (VRAM) 成本。

设置光照烘焙时,需要定义光照贴图的分辨率并规定每单位的纹素数量。在这种情况下,单位是指以 Unity 的默认单位(最常见的是米)定义的面积。您可以在 Unity 的“光照”窗口中找到“光照贴图分辨率”属性。要查看场景中纹素的布局,可以在“场景”视图中单击第一个下拉菜单,设置为“绘制模式”,然后选中“显示光照贴图分辨率”,也可以在同一菜单中单击“光照贴图指标”。

已烘焙的对象将被置于棋盘格中。这就是您烘焙光照时纹素的分布情况。下图中,您可以看到相同立方体上两种不同设置的效果。左侧立方体的设置为 5,右侧的为 2.5。变量越大,需要的计算量越大。分辨率越低,所需的光照贴图空间就越小,所需的光照贴图就越少。但是请记住,分辨率越低,质量也会越低。请多尝试,找出最适合您的项目的设置。

当您无法烘焙时,则执行虚设操作

即使大多数元素都进行了离线烘焙,您仍可能希望在游戏中采用一些实时效果,例如角色阴影。实时阴影通常通过“阴影贴图”技术生成。渲染到阴影贴图的场景几何图形的成本与绘制到其上的顶点数量成正比。因此,限制投影的几何图形以及实时投影光照的数量非常重要。

要获得实时效果,您可以在角色下放置一个小的 3D 网格,并对其应用模糊纹理。这是一种简单而有效的阴影获得方法,无需支付真实阴影贴图的过高成本。

无论您是从业者,需要设置光照并进行烘焙,从而优化项目,还是只是对游戏照明感到好奇的爱好者,每个人都能掌握这些技能,让游戏呈现更绚丽的视觉效果。游戏以其独特的方式融汇了各个学科的专业知识。分享这篇文章给您的团队,让学到的光照知识助力他们的工作。

7 replies on “手机游戏开发的光照技巧”

Well, that wasn’t helpful at all. URP is part of the already buggy/broken Unity 2019 version and this article didn’t explain much either. We could use some info on the more intermediate and advanced stuff like cascades and quality settings, setting up light probes. It’s a good thing YouTube covers most of this.

Chris,
My name is Joe Rozek, i helped work on the attached guide from Arm. Unfortunately there is only so much we can cover in a quick blog. But we do cover the elements you mentioned in the guide. But if there is anything you feel is lacking I would love if you let me know at @Rev_JoeRozek over on twitter. Would love to hear your feedback about the guide.

As Joe said, there’s only so much you can cover in one blog post. But I have good news, Chris, as also have a talk coming up as part of Unite Now which will cover many of these things you mentioned. Should be up in a couple of weeks, on my name, and it will focus a lot on light baking.

This is not really informative. Q:”hey how to make lighting performant” A:”Don’t use lights”. That’s not really helpful. What about shadow quality settings, what about cascades, what about custom shadow casting geometry, what about vertex count affecting shadowmap generation cost, what about projectors etc etc etc.

John,

My name is Joe Rozek, i helped work on the attached guide from Arm. We go more in depth into these topics in the guide. Sadly we couldn’t hit each topic in the blog to keep things brief. But thanks so much for the feedback! We keeping the best practice guides updated is very important for us.

Comments are closed.