目录
一、光源类型和模式
1. Light组件
1.1 General(通用设置)
1.1.1 LightLayer(光照层)
1.2 Emission(发光设置)
1.3 Shadows(阴影)
二、Light Layer(光源分层)
三、光照探针
1. Light Probe Group组件
2. 使用光照探针的基本步骤
3. Mesh Renderer组件LightProbes下Blend Probes VS Use Proxy Volume
3.1 Blend Probes
3.2 Use Proxy Volume
3.2.1 Light Probe Proxy Volume组件
Refresh Mode(更新模式)
Quality(质量)
Bounding Box Mode(包围盒模式)
Bounding Box Settings(包围盒设置)
Proxy Volume Resolution(Proxy Volume分辨率)
Probe Position Mode(探针位置模式)
4.Mesh Renderer组件的Anchor Override参数
5.Preferences界面中GI Cache
四、使用Reflection Probe为场景提供反射信息
1. HDRP生成反射信息的顺序
2.Screen Space Reflection(屏幕空间反射)
2.1 Volume重载之Screen Space Reflection
2.1.1 Screen Space Reflection参数介绍
2.1.2 SSR的限制
3.Reflection Probe(反射探针)
3.1 Reflection Probe(反射探针)
3.1.1 反射探针组件
3.1.2 Planar Reflection Probe(平面反射探针)
4.Sky reflection(天空反射)
五、HDRP阴影
1. HDRP中的阴影分类和光照模式
2.在混合(Mixed)模式下投射的混合阴影
2.1 Lighting设置窗口的Mixed Lighting选项
2.2 如何将场景中的光源设置为Mixed模式
2.3 光源的Shadowmask Mode
2.3.1 当将光源的Shadowmask Mode设置为Distance Shadowmask时:
2.3.2 将光源的Shadowmask Mode设置为Shadowmask时:
2.3.3 Distance Shadowmask和Shadowmask两种模式对性能的影响
2.4 阴影的最大投射距离设置
使用"Standard"或"Standard (Specular setup)"着色器时,可以使用材质中的Emission Inputs(自发光输入)参数把网格转变成由自发光材质控制的光源。
Light组件的参数分成5个部分:General(通用设置)、Shape(灯光形状)、Emission(发光设置)、Volumetrics(体积光)和Shadows(阴影)。
要使用光源分层功能,首先必须在HDRP配置文件中将Light Layer功能打开。
点击General右边的︙,选择“Show Additional Properties”,可显示此参数。用此参数可控制当前这盏灯对场景中的哪些物体投射光线。下文会详细介绍。
使用色温来控制灯光颜色的好处是我们不必通过猜测来设置灯光颜色,而是可以通过物理世界中的参考值来设置色温,从而获得正确的灯光颜色。
单击Emission右边的︙,选择“Show Additional Properties”,可以打开与当前光源形状相关的额外参数。
关于接触阴影的一个使用建议是,这属于锦上添花的细节阴影,如果因为打开Contact Shadows选项而导致游戏性能下降,或者出现明显的阴影瑕疵,则可以选择禁用该选项或者把Opacity(透明度)调低。这样可以让接触阴影产生的瑕疵变得不那么明显。
在HDRP中我们可以使用Light Layer(光源分层)功能做以下事情:
要使用光源分层功能,首先必须在HDRP配置文件中将Light Layer功能打开。在ProjectSetting->Graphics->HDRP Global Setting界面默认提供了8层,从Light Layer default、Light Layer 1一直到Light Layer7。
在使用Light Layer时,一旦在某个受光物体上应用了Light Layer,我们一定要注意物体周围的光源分布情况。因为只有将受光物体所在的Light Layer也指定给光源,才能让光源照亮相关的受光物体。
我们可以为场景中的静态物体烘焙间接光照信息,但是如何为场景中的动态物体提供间接光照信息呢?答案就是使用光照探针。当然,光照探针的作用并不仅仅是为动态物体提供间接光照信息。
光照探针的具体作用如下:
在未单击Edit Light Probes按钮时,下面的所有参数和按钮为禁用状态。单击该按钮可以启用这些参数和按钮。
可以显示或者隐藏上面示例图中用于连接黄色光照探针的紫色线框。
此选项默认为启用状态。“振铃”现象在明暗对比强烈的情况下可能出现。
当我们在场景中选中某个光照探针时,这里会显示它的当前世界坐标信息。
往现有光照探针组上添加一个新的光照探针。
选择组里的所有光照探针。
删除在组里选中的一个或多个光照探针。
复制在组里选中的一个或多个光照探针。
在使用Mesh Renderer组件的Blend Probes方式时,虽然物体会对周围4个光照探针进行采样,但是最终只会得到一种间接光颜色。当物体较小时,这是可以接受的。但是当受光照探针影响的物体体积较大时,将单一的间接光颜色应用到整个物体表面会产生不正确的间接光照效果。
当Mesh Renderer组件的Light Probes选择Use Proxy Volume时,我们需要给Proxy Volume Override设置带Light Probe Proxy Volume 组件的物体。
Light Probe Proxy Volume组件可以在指定的包围盒(Bounding Volume)内部生成一个三维空间网格,其中包含以内插值方式替换的光照探针。这些以内插值方式替换的光照探针会被上传到一张3D纹理中,然后系统会采样这张3D纹理,让物体表面最终获得的间接光具有渐变效果,从而使得物体表面获得正确的间接光照信息。
包括Automatic(自动更新)、Every Frame(每帧更新)和Via Scripting(通过脚本更新)模式。
Low(低质量)和Normal(正常质量)。
这些以内插值方式替换的光照探针被放在一个3D网格中。在这里我们可以选择这些插值探针在3D网格中的放置方式。在某些情况下,这些插值探针可能会穿透墙壁或者其他几何体,从而导致漏光现象的发生,这时我们可以尝试切换到Cell Corner或者Cell Center这两种模式来解决漏光问题。
使用Anchor Override(锚点重载)参数可以关联场景中的某个GameObject,并将其中心点作为当前物体对光照探针进行采样时的中心点。在默认情况下此参数为None,这时系统会使用当前物体网格的包围盒(Bounding Box)的中心点。
GI Cache(GI缓存)是Unity编辑器使用的内部数据缓存,用来保存进行光照贴图烘焙、光照探针烘焙以及反射探针烘焙时生成的中间文件。在第一次烘焙完成以后,使用生成的缓存文件可以加快之后烘焙的速度。当前机器上的所有Unity项目共用同一个GI Cache。可以在Preferences界面调整缓存的大小、自定义保存的路径和启用针对缓存文件的压缩,以及清理缓存。
在实时渲染应用中生成逼真的反射效果,同时又要保证渲染的帧率是一件很难的事情。在支持实时光线追踪的软件和硬件(足够强大且便宜到可以普及大众)出现之前,或者某种黑科技出现之前,我们都还需要依赖近似的方式来模拟反射效果。
HDRP提供了一个反射层级来为屏幕上的每个像素提供尽可能正确的反射信息。在这个反射层级中包含三种生成反射信息的方式。HDRP使用它们的先后顺序为:首先使用Screen Space Reflection(屏幕空间反射,简称SSR)方式。如果没有找到合适的反射信息,HDRP会接着使用Reflection Probe(反射探针)。如果还是没有得到合适的反射信息,最后会使用来自天空的反射信息(Sky reflection)。
那么HDRP是如何判断什么是“合适的反射信息”的呢?HDRP在使用上述三种反射信息的计算方式时,会根据权重是否达到1来判断是否获得了“合适的反射信息”。这三种方式的权重计算如下:
要使用SSR,需要先在HDRP配置文件中将该选项打开,然后使用Volume中的Screen Space Reflection来调整相关参数。
可以在指定相机的Custom Frame Settings中启用SSR,但是前提是在HDRP配置文件中已启用了SSR。
在HDRP配置文件中启用SSR选项以后,可以在Volume中调整SSR参数。
如果HDRP无法通过SSR获得合适的反射信息,就会尝试从反射探针中获取反射信息。在HDRP中,我们可以使用Reflection Probe和Planar Reflection Probe两种反射探针。
反射探针会对自身周围的环境,从6个方向(前、后、左、右、上、下)抓取6张纹理保存在一张Cubemap(立方体贴图)中。场景中带反射的材质可以采样这些反射探针中保存的纹理,并将其作为反射信息应用到物体表面上。
可以通过菜单GameObject→Light→Reflection Probe创建反射探针,然后把这些探针放到场景中需要抓取反射信息的位置。在场景中的不同位置要放置不同的反射探针,这样不同位置的物体才能获取正确的反射信息。至于数量则没有硬性规定,按需使用。
反射探针按照类型可以分为Baked(烘焙)、Custom(自定义)和Realtime(实时)三种。这三者的区别如下。
Type为烘焙类型时各参数作用:
反射探针在获取周围环境信息生成立方体贴图时,是以自身的位置为中心点来抓取反射信息的。因此当一个物体上的材质采样这些反射探针上的信息时,除非物体的坐标和反射探针的坐标完全一致,否则物体上的反射信息总会存在位置上的偏差。
为了解决这个问题,我们需要使用Reflection Proxy Volume(反射代理Volume)这个组件。HDRP会使用这个组件纠正由于上述位置偏差引起的视差问题。虽然该组件无法完全纠正视差问题,但是可以大大改善。
Reflection Proxy Volume组件:可以选择Box(长方体)、Sphere(圆球)或者Infinite(无限)作为Reflection Proxy Volume的形状。Box和Sphere形状一般用于室内场景。Infinite代表无限远,一般用于室外场景。
除了创建单独的Reflection Proxy Volume,我们也可以使用当前反射探针的Influence Volume(影响区域)作为Reflection Proxy Volume。因为反射探针自身有影响区域,所以大多数时候可以直接用反射探针的影响区域作为Reflection Proxy Volume。
(只适用于Deferred模式)用于定义当前反射探针与别的反射探针的混合距离。数值越大,内部的绿色盒子就越小。
数值越大,内部的紫色盒子就越小。
Influence Volume(影响区域):用于设置反射探针在生成反射纹理Cubemap信息时影响的区域。在混合法线距离内,但是在混合距离外,会产生混合的反射效果。在混合距离内,会受到反射探针100%的影响。
用于控制场景中哪些Volume会影响反射探针的反射信息捕捉操作。
如果将其设置为某个相机的Transform,那么影响此相机的Volume将会影响当前的反射探针。
如果在HDRP配置文件中启用了Light Layer功能,则可以在此指定当前反射探针影响的Light Layer。
用于控制当前反射探针捕捉到的RenderTexture的亮度。数值越大,亮度越高。
默认权重数值为1。数值越大,在对多个反射探针进行混合时,当前反射探针的反射效果在最终反射信息中的所占权重越大。
用于控制反射探针在捕捉反射信息时的淡出距离。
将某物体材质球的Metallic设为1、Smoothness设为1,此时这个物体就是一面完美的镜子。
如果HDRP无法从反射探针中获取合适的反射信息,就会使用天空反射。因此场景中总是会存在来自天空的反射信息。
HDRP中的阴影可以分为两类:
在三种光照模式中,混合模式提供的阴影最灵活,可以很好地平衡阴影质量和性能要求。因为实时阴影虽然质量高,但是也最消耗性能;烘焙阴影虽然性能最好,但是阴影质量比较差。
Lighting Mode:
前面的文章曾介绍过Shadowmask和Baked Indirect之间的区别是:前者除了烘焙间接光照信息,也会在Lightmap(光照贴图)中把阴影烘焙进去。Shadowmask模式可以提供最逼真的阴影效果,当然性能消耗和内存占用也是较高的。Shadowmask模式适用于远处存在可见物体的场景,比如在高端机器上运行的开放世界游戏。
确保下面四步设置后,我们就可以将场景中的光源设置为Mixed模式,然后在Shadowmask模式下完成烘焙操作。
经过上述四步骤后,我们就可以将场景中的光源设置为Mixed模式,然后在光源的Shadowmask Mode下有两个选项:
通过Shadowmask光照模式烘焙所得的光照贴图,除了包含间接光照信息,还包含针对静态物体预计算所得的阴影信息。
在Distance Shadowmask模式下,如果在阴影的最大投射距离之内,对动态物体和静态物体都会投射实时阴影;如果在阴影的最大投射距离之外(设置方式见下文),不会对动态物体投射阴影,而静态物体使用烘焙所得的阴影。
在最大阴影投射距离之内的动态物体能获得其他动态物体和静态物体的实时阴影。因此我们看到蓝色和绿色胶囊体都能获得自己的实时阴影。绿色胶囊体获得了蓝色胶囊体的实时阴影;而蓝色胶囊体也获得了第一根静态柱子的实时阴影。
所有的静态物体的阴影都来自烘焙阴影。因为烘焙阴影的质量偏低,所以看上去比之前的实时阴影要模糊。
动态物体还是能获得另一个动态物体的实时阴影。但是无法获得静态物体的烘焙阴影(因为阴影被烘焙到了光照贴图中,所以只能用于静态物体上)。
在最大阴影投射距离之外的动态物体没有阴影,静态物体则使用烘焙阴影。
Distance Shadowmask模式更消耗GPU性能,不过能产生更真实的阴影效果,因为实时阴影质量较高。在最大阴影投射距离之外的地方使用的则是烘焙阴影。这些烘焙阴影的质量较低,但是因为离相机较远,所以低质量阴影也是可以接受的。Shadowmask模式需要消耗更多内存,因为要让靠近镜头的阴影看上去更真实,就需要更高分辨率的阴影贴图。
最大阴影投射距离的设置,不同的光源类型有不同的设置方法: