请选择 进入手机版 | 继续访问电脑版

查看: 11210|回复: 176

[原创] Unity 2017.1中的混合光照:在运行时切换Distance Shadowmask...

  [复制链接]

957

主题

1633

帖子

2万

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
21070
QQ
发表于 2017-5-26 09:31:58 | 显示全部楼层 |阅读模式
在本教程中,我们将通过一个实际案例来说明如何在一个简单的游戏场景中使用Shadowmask功能。场景设置包括室内和室外两部分。室内部分的阴影将使用Shadowmask模式,而室外的阴影将使用Distance Shadowmask。场景非常简单,以便能更好的解释这些功能的实现原理。在介绍细节前,让我们先看下大致内容:

  • 场景设置与光照参数
  • 通过API切换Shadowmask和Distance Shadowmask
  • 修改光照贴图参数避免带状阴影瑕疵(针对软阴影)
  • 快速了解其他可加强效果的后处理特效


我们的教程将从调整光照参数开始。考虑到要进行数次迭代,我们要先将默认参数调低。否则即便是默认的设置也会对性能造成显著影响。完成后我们可以将参数重新调整为高质量。

下载本文示例工程(请回复本帖哦~):
游客,如果您要查看本帖隐藏内容请回复


0.jpg


场景设置与光照参数

首先,我们要先禁用Realtime Global Illumination,因为本教程不涉及此功能。但是,我们要使用Baked Global Illumination,并保持光照模式为Shadowmask。其次,将Indirect Resolution调低至0.2,Lightmap Resolution调整为15。最后,将Lightmap Parameters从Default-Medium改为Default-Low Resolution。这些设置会产生一些阴影瑕疵以及低分辨率效果,但这会使我们场景的光照迭代速度更快。否则,哪怕是极小的参数调整也会使我们处于漫长的等待之中。

1.png


根据你计算机的设置,下一步是可选的。默认情况下,Lighting窗口中的Auto模式是启用的,这通常很适合小场景。但对于大型场景,每个小改变都会触发光照生成,使编辑器变慢,有时还会使你无法对场景进行编辑。因此,我通常会禁用它,在评估过上次的结果并完成更改后再生成光照。你可以任选一种方式去做。

至于色彩空间,使用Linear,以获得更精确的色彩效果,渲染路径选择延迟。这些设置都用于高端游戏,实际上,如果你想使用反射探测器和SSR获得正确的反射效果,你必须使用延迟路径。目前,前向模式不支持SSR,该模式下反射探测器的显示也有问题。随着Unity弃用Directional Specular,目前推荐的解决方案就是使用反射探测器和SSR。所以,在我们的场景设置中,反射将扮演一个非常重要的角色,因此,我们将切换到延迟渲染路径。

接下来,我们检查下场景中所有的对象,一个可以操作的角色,室外环境,室内环境,碰撞器,遮阳板以及光照相关对象。

我为每一个类型的对象创建了一个新的图层,使用碰撞器为关卡设定可玩区域,使用遮阳板操纵阴影(它们对主摄像机不可见)。使用遮阳板是因为我们用于构建室内环境的几何体背面缺失,无法作为遮光物,挡住光线。而且因为它们不会在屏幕上进行渲染,我们可以将这些对象的质量设为低质量。相信我,这个技术也在真实生产环境中使用(呃,可能没有我们这里做的那么简单)。

对于光照,我们使用四种不同的对象类型:一个定向光,环境光,反射探测器以及光线探测器。为了简单,我们仅使用一个定向光,因为美术光照不在本文探讨范围之内,我们仅专注讨论shadowmask功能的技术细节。正确设置光照探测器和反射探测器很繁琐,而这通常又是新手容易出问题的地方。因此我们将分析布置光线探测器以及反射探测器的正确方式。在进行设置时,最新的light explorer将会为我们提供很大帮助。

还有一个重要的部分是环境光照。我们只是简单的将天空盒着色器指定为环境光的一部分(可以在项目中找到这个asset)。如果你仔细研究这个天空盒材质,你会发现它是一个sIBL HDR。HDR图像对室外场景特别有用,它可以提供原本需要花很大成本重建的详细的BRDF信息。

最后,有来自Unity Standard Assets中的一个角色,一个附加有自定义后期处理与动画组件的自定义摄像机脚本。

通过API切换Shadowmask和Distance Shadowmask

上一节说过,当角色走出去后,我们会将light mode从Shadowmask切换为Distance Shadowmask,反之亦然。这样,我们可以在室内环境保持烘焙软阴影,并在室外时切换到轮廓清晰的实时阴影。而且你可能想不到,做法也相当简单。只需将下面的代码复制到一个触发器即可:

2.png


很简单吧!

修改光照贴图参数避免带状阴影瑕疵

Unity中的默认设置与一个高质量项目的要求非常相近。正如本文开头所说的那样,这会使大场景的渲染时间显著增加,因此我们需要对参数进行一些调整。

为了进行迭代,我们调低了参数,但如果连默认设置都没法正常工作该怎么办?以shadowmask为例,软阴影就是一个典型的问题。下面你将会看到这样一个案例:

3.jpg


我们该如何解决这个问题?增加光照贴图分辨率,或者光照贴图大小?

除了光照窗口,我们还可以针对特定对象进行参数调整。还记得我们在开始时将Lightmap Parameters 调整为Default-LowResolution吗?你实际上可以以实例为单位指定自定义光照贴图参数,覆盖场景设置。

首先,我禁用了Lighting 窗口中的“Compress Lightmaps”,然后我为金属板创建了一个自定义光照贴图参数,并将Blur Radius设为8, Direct Light Quality设为128。现在,让我们看看结果如何:

4.jpg


好多了,对吗?而且,我调整了Enlighten中关于集群优化的Precomputed Realtime GI值,然后将自定义光照贴图参数指定给了场景中不同的对象。下面是金属板的相关设置。但这些参数的细节不在本文介绍的范围之内。你可以查看Unity3D网站上有关Precomputed Realtime GI的教程以了解更多信息。

5.png


快速了解其他可加强效果的后处理特效

除了Screen Space Reflections之外,我们还使用TAA(Temporal Anti-aliasing)Ambient Occlusion、Color Grading、Chromatic Aberration、Grain 和Vignette。对于当前的场景,这些效果的默认值就足够好了(有可能Ambient Occlusion的半径值可以再缩小一些)。不过,我们将会对TAA和颜色分级再做些微调。

我使用色彩分级来营造一种魔法时刻的意境,Temperature稍高,其他的参数相应进行微调,使之与阴影产生对比。

6.png


而TAA是目前业内最快的抗锯齿解决方案。但有一个缺点:它与透明度相容性不佳,而且有时与环境遮蔽一起混合时会出现问题。除此之外,它仍是一个相当不错的效果,应用之后可以带来显著的变化。

要使用它,必须实现禁用Quality Settings中的MSAA。转到Edit > Project Settings > Quality,在Rendering部分找到Anti aliasing。将其改为“Disabled”。然后,我们还必须在摄像机上禁用它。选择层级窗口中的主摄像机,在探查器的Camera组件中找到“Allow MSAA”选项,取消勾选。我们现在可以启用TAA了。选择后期处理探查器,启用Anti-aliasing。切换到Temporal Anti-aliasing。你可以增加spread的值,不惜代价避免抖动,但给你个专业建议,绝对不要将其设置为1.0。我们的测试表明,最佳的区间为0.9到0.97,具体根据你的场景设置而定。

在下一篇文章中,我们将介绍如何正确放置光线探测器,反射探测器以及SSR的使用。




0

主题

8

帖子

75

贡献

初级UU族—2级

Rank: 2

积分
75
发表于 2017-5-26 13:26:36 | 显示全部楼层
好棒喔~~~~~

0

主题

5

帖子

1285

贡献

中级UU族—2级

Rank: 5Rank: 5

积分
1285
发表于 2017-5-27 00:52:35 | 显示全部楼层
谢谢 分享!!!!!!!!!!!!!!!!!!!!!

0

主题

1

帖子

25

贡献

初级UU族—1级

Rank: 1

积分
25
发表于 2017-5-27 01:21:00 | 显示全部楼层

非常好的文件

2

主题

6

帖子

140

贡献

初级UU族—2级

Rank: 2

积分
140
发表于 2017-5-27 02:10:37 | 显示全部楼层
学习一下~~~~

0

主题

5

帖子

190

贡献

初级UU族—2级

Rank: 2

积分
190
发表于 2017-5-27 02:48:50 | 显示全部楼层
好东西 看看

0

主题

8

帖子

120

贡献

初级UU族—2级

Rank: 2

积分
120
发表于 2017-5-27 02:59:45 | 显示全部楼层
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

0

主题

6

帖子

130

贡献

初级UU族—2级

Rank: 2

积分
130
发表于 2017-5-27 05:50:49 | 显示全部楼层
一起来学习学习,谢谢。

0

主题

2

帖子

105

贡献

初级UU族—2级

Rank: 2

积分
105
发表于 2017-5-27 07:41:35 | 显示全部楼层
感觉很厉害的样子

1

主题

26

帖子

310

贡献

初级UU族—3级

Rank: 3Rank: 3

积分
310
发表于 2017-5-27 07:52:25 | 显示全部楼层
支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表