前言
本文仅讨论内置渲染管线,高清渲染管线和通用渲染管线不在讨论范围之内
内置渲染管线就是最普通的工程自带的渲染管线
本文使用的Unity版本为2019.4 ,。如果你的版本不同,参数和参数的功能可能不同。
由于作者并非专业技美,只是一个苦逼的码农,难免有错误,请大佬不吝斧正。
一 Unity的光照 与 烘焙光照
1 unity完整的光照组成
Unity的完整光照由直接光+间接光+光照贴图+环境光+反射+后处理组成
并非所有的组成部分都一定会用到,一个场景里可能只有直接光,可能只有光照贴图,一切根据实际需求决定
直接光:即光源直接发射出来,打到物体表面的光,不需要烘焙
间接光:光线打到物体表面后,经过反射,反射到其他表面上的光,需要烘焙
环境光:模拟现实中大气、天空、周围环境对物体颜色的影响,需要烘焙
反射:物体表面反射的天空和周围环境的颜色,游戏中不存在真正的反射,需要用到反射探针模拟反射效果,需要烘焙
后处理:使用后处理组件对画面进行的额外调整
2 光的亮度与颜色
一个很常见的误区是,光是用来照明提供亮度的,但这并不完全正确,光除了有亮度,还有颜色。
亮度
亮度也就是灰度,最暗为纯黑,最亮为纯白,中间过渡区域会各种灰,我们认为默认情况下太阳光是纯白的。
颜色
除了亮度,光线还会携带颜色信息,例如一盏红色的灯照到白色的墙上,墙看起来是红色的。特别需要注意的是,反色的光同样会携带颜色,携带的颜色为反色表面的颜色。
3 全局光照=直接光+间接光
上帝说要有光,就有了直接光和间接光。
全局光照
在现实世界的白天时,我们总能看清阳光下的一个物体的向阳面和背阴面,这是因为现实世界中的光线在各种物体表面进行了折射,这些光线最后进入了我们的眼睛里。
在渲染领域中,这种模拟光线运动的技术被称为全局光照技术(GI)
实现全局光照有两种方式:
1是光线追踪
2 直接光+间接光(光照贴图)。
光线追踪并不是什么新技术,在离线渲染领域(电影,动画)已经使用了很多年,但是其渲染计算量太大,渲染一帧的时间要以分钟甚至小时计算,但是以游戏为代表的实时渲染要求速度要快,一秒钟要输出几十张图像,很显然光线追踪目前尚不适合大规模应用。
直接光和间接光
unity的光照由直接光和间接光组成
直接光即光源直接打在物体表面上的光
间接光即打在物体表面上又反射到其他物体表面上的光,在unity中,所有的间接光都必须经过烘焙才能得到,一个完全未烘焙的场景,只有直接光,不存在任何间接光(但有环境光,所以背光面不一定是纯黑色)
5 间接光≠光照贴图
另一个常见的误区是将间接光和光照贴图等同起来,但实际上间接光和光照贴图是不同的,在烘焙完成后,间接光是光,受到光源的影响,通过灯光的indirectMultiplier参数控制(必须烘焙了实时GI且光源是realtime模式),而光照贴图是一个静态的贴图,不会再发生改变,而光照贴图上保存了间接光的信息,请务必区分清除这两个概念。
当然了,Untiy的动态间接光本质上也是一个实时修改的光照贴图,但我们抛开实现方式,分清间接光是光,而光照贴图是图这个区别,不要简单的等同起来。
二 色彩空间与自动烘焙
1 unity的色彩空间
Unity中有伽马色彩空间和线性色彩空间,默认的是伽马空间。
伽马空间性能更好,受支持的平台更多,如果我们需要发布在手机、web等性能较弱的平台上,首选伽马空间。
线性空间下色彩更丰富,明暗过渡更自然,效果更好,如果发布在PC、主机等平台上,建议使用线性空间,注意不是所有的硬件都支持线性空间。
推荐在项目启动后首先更改色彩空间,因为转换色彩空间后会重新导入材质,非常耗时。
我们可以在Editor/ProjectSettings/Player/OtherSettings/Color Space里设置社彩空间。
2 自动烘焙光照
建议关闭自动烘焙
优美缔默认是开启光照的,这非常不友好,因为每当我对光源做出一点改变的时候,编辑器就会自动开始烘焙,而烘焙是非常消耗性能的,所以我们应该关闭自动烘焙
点击右下角的AutoGenerate Lighting On 字样(2022版本点击右下角的灯泡图标),就可以打开光照面板,取消勾选最下方的AutoGenerate,这样当我们调整好光照后,手动点击一次 Generate Lighting按钮就可以生成光照贴图了。
三 烘焙
1 什么是烘焙,烘焙的是什么
什么是烘焙
在Untiy中,烘焙是进行光照预计算,将光照信息存到一张贴图上,运行时直接读取贴图的信息,而不是实时计算。
在烘焙中会产生多种信息,根据设置的不同,我们可以产生 静态光照贴图、动态光照贴图,反射信息等。
我们的光照处理就是围绕烘焙光照贴图和处理实时光进行的。
烘焙的是什么
首先只有静态物体会参与烘焙,烘焙会将以下
1 mixed光源的间接光照,
2 baked光源的直接光照和间接光照,
3 环境光,
烘焙到光照贴图里。
此外还会准备反射探针、光照探针、实时全局光信息。
2 如何进行烘焙
首先,将需要烘焙的物体设置为静态
实际上只要勾选ContributeIGI就行了(早期版本的unity是LightingMap Static),如果需要烘焙反射球,再勾上最后一项即可,当然最简单的还是直接勾选static前的对钩。
如果特别需要注意的是,静态物体烘焙的影子只能被另一个静态物体接收,所以如果你烘焙后地面上的影子不是烘焙的,看一下地面是不是静态的。
然后将希望烘焙的光源的模式改为Mixed或Baked
光照模式为realtime的光源永远不会参与烘焙
AreaLight只支持烘焙模式
然后点击烘焙按钮
点击右下角的AutoGenerateLighting Off打开烘焙面板,然后点击右下的GenerateLighting按钮。
如果使用了自动烘焙,将会自动烘焙,但不会真的有人用自动烘焙吧。
3 烘焙的优点和缺点
优点
1光源的光照信息被保存到一张光照贴图上,untiy通过读取光照贴图的信息来决定这里的光照颜色,节省实时计算的性能
2由于烘焙时离线计算,烘焙后的光照效果要远好于实时计算的光照
缺点
1只能烘焙静态物体,动态物体无法被烘焙(可以用实时间接光和光照探针改善)
2 静态物体不能移动,移动后影子会留在原地,因为烘焙后的光影信息是一张贴图
4 查看光照贴图
可以在光照面板最下方查看光照贴图的尺寸等信息
在光照面板的BakedLightmaps里查看光照贴图
5 清除光照贴图
光照面板,右下角,展开,Clear Baked Data,即可清理已有的光照贴图
6 烘焙时的注意点
1 绝对不要勾选光源本身为静态,会导致顶点数暴涨
2 当目前没有光照贴图时(没有烘焙过或删除了已有的光照贴图),移动baked模式的光源,其光照效果和影子也是会跟着变的(但运行时没有光照效果),第一次烘焙后,再移动baked光源,光照效果和影子就不再变化了。
3 对光照系统进行任何修改(修改了参数,修改了灯光的模式)后,都应该重新进行烘焙,否则可能光照效果不会发生预期的变化。
四 灯光
我们看一下灯光的参数 以直接光为例,其余灯光会稍有不同,但都很简单,不在赘述
type
灯光的类型,一共有四种 聚光灯,直接光(太阳光),点光源,和区域光,其中区域光只支持烘焙,其他三种灯光可以是实时的
color
灯光的颜色
mode
可选项为 realtime实时、mixed混合、baked烘焙
- realtime: 实时光会随灯光位置改变而改变光照效果
- baked: 烘焙光只能通过烘焙来照亮物体,且烘焙后改变灯光,光照效果不会变化,有趣的是,如果没有烘焙好的光照贴图,烘焙光的行为模式和realtime的灯光一致
- mixed:同时具有realtime和baked的特点,既可以参与烘焙,也可以提供实时光照,但不是所有的灯光设成mixed就行了,为了节省性能,我们通常只将主光源设为mixed。
混合光源无法对实时间接光产生影响。
对于动态物体,混合光源将提供实时直接光,和实时阴影
对于静态物体,混合光源同样将提供实时直接光和实时阴影,同时将烘焙间接光信息
intensity
光源的强度
indirectMultiplier
间接光的强度,有两个作用
1对于Mixed和Baked类型的灯,影响烘焙的间接光的强度。
2 对于Realtime类型的灯,如果开启了实时全局光,且完成了烘焙,会影响实时全局光的亮度,调高会让画面出现不正常的过曝和漏光,建议直接光的这个值调为0
shadowType
影子类型 没有影子 硬阴影 软阴影
Baked ShadowAngle
仅在烘焙模式下出现,不知道什么用
realtime shadows 仅在realtime模式下出现
Stength:影子的强度
Resolution:影子分辨率
Bias:阴影偏移,阴影绘制起点的距离,值越大,起点越远,不要设置为零,容易出现自阴影问题
可以看到一道道的自阴影
NormalBias: 法线偏移,不要设到0,否则当Bias较小时,远处看会出现明显以下问题
这是一个没有任何影子的纯色平面,但是明显中间有个更亮的圆形
NeraPlane: 影子的近平面,同样用于缓解自阴影问题
插句题外话,如果物体距离世界原点非常远,由于浮点数精度丢失,阴影会出现错误,使用上边三个参数可以缓解问题
Cookie:灯光的cookie,可以为灯光设置假阴影,例如一个灯罩里的灯,被灯罩遮住的地方会有阴影,但是直接用untiy模拟是得不到正确的效果的,正确的做法是为灯罩模型添加一个layer,让灯光忽略这个Layer,然后为灯光添加一个cookie,这里比较麻烦,且这一部分文章很多,自己搜吧。
DrawHalo
渲染光晕,同时叫醒士官长
需要为摄像机添加 FlareLayer组件才能看到效果
Flare
一个耀斑,需要提供一个耀斑贴图,可以实现镜头在强光下产生的耀斑效果,也可以做类似《质量效应》的收割者眼睛的效果
模拟镜头耀斑
收割者眼前的横线也是耀斑
需要为摄像机添加 FlareLayer组件才能看到效果
RenderMode
设置光源是否是主光源,如果设置为Auto,DirectionalLight会是主光源。
在某些烘焙模式下,如MixedLighting的LightingMode设置为Subtractive,对于所有mixed类型的灯光,将只有主光源可以在动态物体上透射阴影
Cullingmask
可以设置这个光照到哪那一层,忽略哪那一层
五 光照面板LightingSettings
1 打开光照面板
方法1:
方法2:
点击右下角的 AutoGenerateLighting Off/On 字样
2 光照面板区域介绍
3 Scene选项卡
3.1Environment 环境光
用于指定天空盒、环境光、环境反射
3.1.1skyboxMaterial
天空盒的材质,我们可以在这里替换天空盒
3.1.2SunSource
太阳光的光源,当我们使用了untiy的程序化天空盒(也就是默认的蓝天灰地),通过这个属性可以指定一个DirectionalLight作为阳光,此时程序模拟的太阳将会出现在直接光的方向。如果不指定,则场景中最亮的DirectionalLight会被当做SunSource。
3.1.3EnvironmentLighting 环境光设置
环境光用于模拟天空、大气、周围环境对物体产生的光照效果,如下,物体本事是白色,但是被天空映成了红色
Source
环境光的来源,通常设置为天空盒或者固定颜色
Intensity Multiplier
环境光的强度,烘焙后改变值,对于动态物体,可以立刻看到效果,静态物体需要重新烘焙。
Ambient Mode
环境光的模式,只有同时打开了Realtime Global Illumination和Baked Global Illumination,才能使用RealTime模式,否则只能用Baked模式,注意更改模式后需要再次烘焙
Realtime:动态物体和静态物体都能实时接受环境光
Baked:动态物体可以实时改变环境光,静态物体改变光照效果需要重新烘焙
3.1.4EnvironmentReflections 环境光反射
用于为光滑物体提供反射信息,注意只能反射天空盒或我们指定的反射贴图,不能反射周围的物体,反射周围的物体用反射探针,且当物体处于反射探针内时,会使用反射探针的反射信息,而不是环境反射的信息
Source
反射源,通常就是天空盒
Resolution
反射贴图的分辨率,分辨率越高反射效果越好
Compression
反射贴图的压缩方式
Intensity Multiplier
反射的强度,推荐为1,如果值太低,对于一个全反射的物体,会变成黑色
Bounces
这个值控制的是反射的反弹次数,决定了当我们烘焙了一个反射探针时,物体的环境反射效果是否会被反射探针捕捉,值为1时,物体的环境反射效果不会被捕捉,物体将会是黑色的,设置为2时,将会进行1次采样,反射探针将可以捕捉到物体表面的颜色,但是如果物体表面上还能反射到第二个具有反射效果的物体,则在反射球中,第二个物体在第一个物体表面上看上起来是黑色的,因为采样的层数不够多。当场景中有大量反射物体时,建议至少设置为2,值越大,相互反射层数越多。
如下,值为1,静态cube在反射探针里看起来是黑色的,设置为2后恢复正常
3.2Realtime Lighting 实时全局光
3.2.1Realtime Global Illumination 实时全局光照
勾选后打开实时全局光,需要重新烘焙才能生效。
实时全局光也是一张光照贴图,只不过这个光照贴图是实时改变的。他有以下贴点
1 通过改变realtime模式光源的indirectMultiplier参数,可以控制实时全局光的强弱,但不建议太高,否则会出现过曝的地板、墙壁漏光等问题。如下为过高的实时间接光带来的过曝错误
2 只有静态物体可以参与烘焙实时全局光信息,所以实时间接光效果只会在静态物体周围出现,动态物体永远不会参与烘焙实时全局光,因为实时全局光也是光照的预计算,动态物体的位置无法预计算。
3 计算实时全局光不需要任何光源参与,因为只是预计算光的反射路径。
4 只有realtime模式的光源可以对烘焙后的实时全局光产生影响,mixed光源不会影响实时全局光效果。
5 实时全局光的效果变化不是立刻的,而是在多帧之间插值,如果你突然关闭一个实时光,会看到实时全局光的消失有一个过程。如果你的场景里有需要快速变化的灯光,不建议使用实时全局光。
6 烘焙完成后,可以修改本属性的值,动态的开关实时全局光,不必再次烘焙,除非静态物体发生了变化。
3.3Mixed Lighting 烘焙全局光
3.3.1Baked Global Illumination
是否启用烘焙全局光
3.3.2LightingMode
烘焙全局光的模式,一共有三大类,四种模式
Subtractive:
这是效果最差的一种模式,同理这也是速度最快,性能消耗最小的一种模式
对于mixed和baked模式的光源,烘焙后移动禁用光源,光照效果都不会有变化
这种模式下,完成烘焙后,对于mixed类型的灯光,动态物体将只接收场景中的主光源的阴影,其余mixed类型光源的阴影将被忽略。两个注意点 1 realtime模式灯光的阴影不会受限 2 主光源是灯光的 RenderMode类型为Imporent类型的灯光,如果是Auto,通常是DirectonalLight是主光源(也就说我们可以通过修改RenderMode属性将非DirectionalLight设置为主光源)
Shadowmask:
shadowmask是效果最好的一种模式,具体来说分为shadowmask和distanceShadowmask两种模式,两种模式可以在Editor/ProjectSettings/Quality/ShowmaskMode里切换
对于baked模式的灯光,烘焙后移动禁用光源光照效果和光照效果都不会有变化
对于mixed模式的灯光,烘焙后移动光源,包括静态物体的光照效果会改变(因为mixed模式的灯光依然会为静态物体提供实时直接光),静态物体的影子不会移动。禁用光源后,静态物体的烘焙影子也会消失(两种shadowmask都是),只保留间接光
两种模式的区别是
- shadowmask:动态物体物体展示所有实时阴影,静态物体只有烘焙阴影,且阴影无法在动态物体上产生遮盖效果。阴影被保存在一张阴影贴图里,最多支持四个光源的贴图,分别被保存在RGBA通道里,贴图可以在BakedLightingmaps里点击LightingData找到
- distanceShadowmask:和shadowmask的区别在于,在相机到物体的一定距离内,静态物体也将使用动态阴影,可以遮盖住动态物体。距离可以在Editor/ProjectSettings/Quality/ShadowDistance里设置,注意个距离也是动态阴影的最大渲染距离
BakedIndirect:
不烘焙阴影,阴影将实时渲染
3.4 LightingmappingSetting 烘焙设置
注意这个面板只有勾选了MixedLighting/Backed Global Illumination才会出现,且各个版本的unity之间参数差异比较大
3.4.1 Lightmapper
烘焙方式
- Enlighten Unity早期版本使用的第三方烘焙引擎,目前已经不再更新,unity最终在2021版本中彻底剔除了这个烘焙引擎。由于个引擎趋于淘汰,我们不讨论这个引擎的参数
- Progressive untiy自己开发的渐进式烘焙引擎,有CPU和GPU两个版本。本文的烘焙参数以这个引擎为准
PrioritizeView
勾选后将优先烘焙scene摄像机能看到的部分
Multiple Importance Sampling
多重重点采样。可以加快烘焙速度,但有可能产生更多噪点。
Direct Samples
直接光采样数,值越大,直接光贴图越精细,烘焙时间越长,建议取2的整数次幂
Indirect Samples
间接光采样数,值越大,间接光贴图越精细,烘焙时间越长,建议取2的整数次幂
Environment Samples
环境光采样数,值越大,环境光贴图越精细,烘焙时间越长,建议取2的整数次幂
Light Probe Sample multiplier
光照探针采样乘数,值越大,对光照探针的采样越精细。要启用此功能,请选择 Project Settings > Editor,然后禁用 Use legacy Light Probe sample counts。
Bounces
光线的反弹次数,增加这个值可以让让光线多次反弹,会使间接光更亮,更容易照亮一些角落。建议保持默认值,如果是复杂的室内场景,可以提高次数。
Filtering
过滤光照贴图,以减少噪点。将对直接光、间接光、环境光遮罩分别进行过滤。
如果设置为Auto,将根据机器选择过滤策略,如果开发计算机满足运行 OptiX (NVIDIA OptiX AI-Accelerated Denoiser) 的要求,渐进光照贴图程序将此降噪器与 Gaussian 过滤器结合使用。对于所有目标,该过滤器的半径均为 1 纹素。
如果开发计算机无法运行 OptiX,渐进光照贴图程序将使用 Gaussian 过滤器。对于 Direct、Indirect 和 Ambient Occlusion 目标,该过滤器的半径分别为 1 纹素、5 纹素和 2 纹素。
如果设置为高级,则可以手动控制三种光的过滤策略。
3.4.2 IndirectRsolution
间接光的分辨率,参考下一个LightmapResolution属性
3.4.3 LightmapResolution
光照贴图的分辨率,对应untiy中的一米会在光照贴图上烘焙几个像素点,默认一米烘焙40个像素低点,通过调整这个值,我们可以显著的提高或降低光照贴图的质量(包括烘焙的阴影),影响烘焙时间。
注意分辨率和烘焙贴图大小的变化不是线性相关的,而是近似于指数变化,例如分辨率40时贴图是8兆,20时会变成2兆,这个不绝对,还跟场景的复杂度有关,但肯定不是线性关系。
3.4.4 LightmapPadding
光照贴图的间隙,因为光照贴图是基于物体UV的平面图,所有物体的光照信息都在一张图上,如果各个物体的光照图之间没有间隙,有可能会导致渗色,使一个物体有了另一个物体的光照颜色,如果发生了不正常的渗色,可以尝试提高这个值。通常保持默认值即可。
3.4.5 LightmapSize
光照贴图的尺寸,如果光照贴图很小,会烘焙出多张光照贴图。
3.4.6 CompressLightmaps
压缩光照贴图,启用后可以提高烘焙速度。
3.4.7 AmbientOcclusion
是否使用环境光遮蔽效果,只有静态物体(勾选了Contribute GI)才会产生AO效果,建议使用后处理的AO,而不是烘焙AO
Max Distance
决定可以产生遮蔽效果的两个物体之间的最大距离,值越大,越远的物体之间可以相互遮蔽,值为0,表示距离无限。
增大这个值会显著的增加烘焙的预计算时间。
Indirect Contribution
范围0-5,间接光(和环境光)在AO中的贡献程度,值越大由间接光引起的环境光遮罩效果就越强烈(原本应该更亮的地方现在更黑)
Direct Contribution
值0-10,由直接光贡献的环境光遮罩效果,注意直接光的遮罩会和间接光的亮度混在一起,非常不真实,建议为0。
这里很明显的黑色遮罩和间接光进行了混合,效果很不理想。
3.4.8 DirectionalMode
是否烘焙方向贴图,烘焙光照贴图时,会额外烘焙一张存储了光源方向信息的贴图,这张贴图将为法线贴图和漫反射提供方向信息,如果没有这个贴图,Unity将会把物体表面当做平面处理,这将丢失部分光照细节(光照探针和环境光遮蔽会为其提供阴影细节,但来自光源的直接光和间接光信息会丢失),对于一个颜色丰富的物体,这种细节的丢失通常是难以分辨的。
3.4.9 Indirect Intensity
整体上调节间接光的强度,场景里所有光源都会受到影响,查看效果需要重新烘焙。
3.4.10 Albedo Boost
提高这个值可以让物体的本色在烘焙时更明显一些。
3.4.11 LightmapParameters
提供一些预制的参数设置,也可以手动创建自己的预制参数。
3.5 OtherSettings
注意这里的值是可以实时看到效果的,不需要重新烘焙
3.5.1 Fog 雾效
启用后几个参数很简单,不啰嗦
3.5.2 HaloTexture
为场景里的光晕指定一个贴图,所有开启光晕效果的灯光(参考本文灯光部分)都会使用同一个光晕贴图,且贴图的颜色会随着灯光改变。
注意不建议为DirectionalLight开启光晕,因为光晕会直接绘制在灯物体身上。
3.5.3 HaloStrength
光晕的强度
3.5.4 FlareFadeSpeed
耀斑和光晕在进入和离开镜头时,淡入淡出的时间,单位是秒,但是貌似如果时间过长或者小于1,会变成瞬间出现和消失。
3.5.5 FlareStrength
耀斑和光晕的强度
3.5.6 Spot Cookie
决定了聚光灯的光斑的样子,会对所有的聚光灯生效。同时会影响影子的效果,不建议修改。
将默认的聚光灯图案换成一张其他图片
3.6 DebugSetting
调试相关设置
3.6.1 Light Probe Visualization
光照探针相关设置,注意这些设置必须烘焙后才能看到效果。这些效果都是在scene里显示的,且想要显示这些效果,不能选中任何一个光照探针。
三种模式
-
Only Probes Used By Selection:只显示影响当前选中物体的探针。烘焙后,选中一个物体,影响它的探针将显示在scene上。
-
All Probes No Cells: 显示所有的探针,不带插值四面体
-
All Probes With Cells:显示所有探针,带插值四面体,也就是下图里的黄色线
-
None :不显示探针
Display Weight
文档里这么写的:启用此复选框时,Unity 将从用于有效选择的光照探针到用于插值的四面体上的位置绘制一条线。这是一种调试探针插值和放置问题的方法。
但我没试出来怎么用,也没有自带的解释,应该不重要。
Display Occlusion
文档里这么写的:启用此复选框时,如果 Lighting Mode 设置为 Shadowmask,则 Unity 将显示光照探针的遮挡数据。
实际使用中没感觉出来有多大变化。
3.7 统计面板
也就是Light面板最下的文字区域
- Unity 已创建的光照贴图数量
- 内存使用量 (Memory Usage):当前光照贴图所需的内存量。
- 占用的纹理像素 (Occupied Texels):在光照贴图 UV 空间中占用的纹理像素数量。
- 视图中的光照贴图 (Lightmaps in view):Scene 视图中的光照贴图数量。
- 不在视图中的光照贴图 (Lightmaps not in view):不在视图中的光照贴图数量。
- 融合 (Converged):这些光照贴图的所有计算都已完成。
- 未融合 (Not Converged):这些光照贴图的烘焙仍在进行中。
- 烘焙性能 (Bake Performance):每秒的光线数量。如果此值很低(即小于 2),则应调整设置或硬件以便一次处理更多光线。
- 烘焙时间(Total Bake Time):烘焙耗时。
- 烘焙用的设备(Daking Device)。
4 RealtimeLightmaps选项卡
这里展示的是实时间接光照贴图,只有在Scene选项卡里启用了实时间接光照贴图,并烘焙后,才能在这里看到看到贴图。
5 Baked Lightmaps选项卡
烘焙光照贴图,这里可以看到烘焙后的光照贴图,点击光照贴图可以进入光照贴图所在的文件夹,在文件夹里可以看到其他的光照贴图,如shadowmask,direction贴图等等
六 物体的MeshRenderer
网格渲染器上也有一些影响光照效果的选项
1Lighting
1.1Cast Shadows
是否投射阴影
- Off 没有影子。
- On 可以产生影子,对于一个单面的模型(例如一个自带的plane)只有可以看到那一面可以产生影子。
- Two Sided 对于一个单面的模型,看不见的那面也可以透射影子。
- ShadowsOnly 看不见物体,只能看见影子。只有可见的一面可以产生影子。
1.2 Receive Shadows
其他物体的影子是否可以投射到这个物体上
1.3 Contribute Global Illumination
是否参与烘焙静态光照,完全等同于static选项里的Contribute GI,且是同步的,改一个值,另一个也会变。
1.4 Receive Global Illumation
从光照贴图还是光照探针接收全局光照。
要求这个物体必须勾选了Contribute Global Illumination(也就是成为静态光照物体) ,且必须要烘焙了全局实时光或静态光,才能调整这个属性。
如果调整为光照探针模式,如果场景里有光照探针,那么这个静态物体将会从光照探针处获取光照信息,而不是固定的光照贴图的颜色。这样当我们移动一个静态物体时(我为什么要移动静态物体),他的全局光照(光照探针不烘焙直接光)效果会发生变化。
2Lightingmapping
必须勾选为静态光照物体,且上方1.4里选择为Lightmaps时这个选项才可见
2.1 Scale in Lightmap
缩放这个物体在光照贴图上的尺寸,为0时不再烘焙光照贴图,但仍然可以影响其余物体的光照贴图,0-1时缩小光照贴图尺寸,这将降低这个物体的光照贴图的质量,可以对远处的非主要物体使用来节约内存。大于1 时会增加光照贴图尺寸。
2.2 Stitch Seams
建议启用,Untiy会尝试平滑物体边缘接口处的光照。
2.3 Lightmap Parameters
选择一组光照参数,这些光照参数只会作用于当前使用他们的物体,可以在Lighting面板外,更细颗粒的控制具体一个物体的光照效果。
关于光照参数请参阅:
光照参数
2.4 Optimize Realtime UVs
此选项只在物体为静态时出现。
网格是否对实时全局光进行优化。计算实时全局光时,模型的网格将会被打包成“图表”,如果不勾选,每一个UV面都会被单独制成一个图表,勾选后,符合规则的UV将会被合并成连续的图表,以节省空间提性能。但是注意,这可能会破坏一些锐利边缘的光照效果(因为被合并了)。
Max Distance
可以合并的UV的最大世界空间距离
Max Distance
可以合并的UV的最大角度
2.5 Ignore Normals
配合2.4的功能,勾选后可以防止untiy拆分UV
2.6 Min Chart Size
指定用于 UV 图表的最小纹理像素大小。如果需要拼接,则值 4 将创建一个 4x4 纹理像素的图表来存储光照和方向性。如果不需要拼接,则值 2 将降低纹理像素密度并提供更好的光照构建时间和游戏性能。
如果启用了2.4 Optimize Realtime UVs,则应该设为4,如果不需要拼接图标,可以设为2,这会降低效果,但会提高速度。
3 Probes
光照探针和反射探针
3.1 Light Probes
光照探针,只有动态物体才能设置,静态物体即使设置了从光照探针接收光照也不能调整这个选项。
这个只建议用默认的BlendProbes,在临近的光照探针之间进行插值,
如果物体太大,同时跨过了多个探针组的范围,可以使用 "user Proxy Volume"光照探针代理体,具体用法参考官方手册
3.2 Reflection Probes
反射探针
- Blend Probes:在反射探针之间进行插值,适用于室内环境
- Blend Probes and Skybox:在反射探针和天空盒之间插值,适合室外
- Simple:不插值
3.3 Anchor Override
重新指定光照和反射探针的插值位置,默认是物体包围盒的几何中心。
七 Quality面板
严格来说,这个面板控制的并非只有光照质量,但许多参数会影响光照效果。
注意,任何好的游戏质量必定是以牺牲 性能/内存 为代价换来的 。
1 Levels
这里展示了几个预设的质量等级,我们也可以自己创建自己的质量等级,我们对Quality面板的任何操作都是针对当前选中的质量等级来的,修改一个质量等级的参数不会影响其他质量等级。
2 Rendering
2.1 Render Pipeline Asset
我们可以将参数保存在这个文件里,方便在其他地方快速复用
2.2 PixedLightCount
向前渲染中,最大的逐像素实时(RealTime+Mixed)光照数量,当值为N,如果场景中(不是摄像机视角内)实时光源(RealTime+Mixed)数量超过上限,Untiy将会只保留“主要”的N个光源为逐像素光照,其余的光照会被降级为球谐函数近似处理。通常保留的灯光为距离物体最近的光源。
2.3 Anisotropic Textures
纹理的各项异性。
2.4 AntiAliasing
多重采样抗锯齿的级别。
2.5 Soft Particles
混合粒子,获得更柔和的效果。用于缓解粒子和物体交界处的硬边缘,如下为非常明显的硬边缘:
2.6 Realtime Reflection Probes
是否允许实时更新反射探针,以便对动态物体做出反应。
2.7 Billboards Face Camera Position
强制广告牌面面向摄像机。
2.8 Resolution Scaling Fixed DPI Factor
将设备的屏幕分辨率降到原始分辨率以下。
2.9 Texture Streaming
纹理串流,如果不使用纹理串流,建议关闭,因为会增加内存消耗。
3 Shadows
3.1shadowmask Mdoe
当烘焙模式为shadowmask时
shadow Distance:对于静态物体,Shadow Distance范围内使用实时影,远处使用烘焙阴影。
shadow Mask:对于静态物体,永远使用烘焙阴影。
3.2 Shadows
阴影的软硬。
3.3 Shadow Resolution
阴影的分辨率。
3.4 Shadow Projection
产生阴影的方法
ClsoeFit 质量更高,但相机移动时,阴影会抖动。
Stable Fit 质量更低,但当相机移动时,不会抖动。
3.5 Shadow Distance
阴影渲染的最大距离
3.6Shadow Near Plane Offset
输入阴影近平面偏移(用于解决大三角形由于阴影平坠而扭曲的问题)。不太明白
3.7 Shadow Cascades
级联阴影
官方描述
简单来说,级联阴影可以提高近处阴影的质量,减少阴影锯齿。级联越多,效果越好。
七 光照探针
1 光照探针的作用是为动态物体提供间接,他并不能像静态物体一样获取准确的间接光照,只能通过收集探针附近的光照信息,然后为动态物体叠加上临近探针之间的插值颜色,这个效果只能是近似的,但是仍然比完全没有间接光照要好的多。
2 需要注意的是,一旦使用光照探针,就必须铺满整个玩家可到达区域,如果有玩家可到达区域里没有光照探针,那么动态物体会从最近的光照探针获取间接光照,无论他离这个“最近”的光照探针多远。
3 必须烘焙才能让光照探针获取光照信息,光源必须是baked模式才能将光照烘焙到光照探针上。
4 当我们选中一个动态物体时,物体上会显示一个小圆球,指示当前物体受到的光照探针的影响,当前左侧偏蓝,右侧偏黄。
5 完成烘焙后,即使删除光照探针组物体,物体仍然会受到光照探针影响,除非再次烘焙。
创建与编辑光照探针
创建
实际上创建的是光照探针组,光照探针组的一个小黄球才是一个探针。
编辑
选中光照探针,在Inspector面板上选择EditLightProbes,选中场景里的小黄球,即可移动光照探针,选中光照探针ctrl+D即可复制。
放置光照探针
1 不要均匀的布置光照探针,这不仅会造成性能浪费,还会导致光照效果不准确,在光照区域变化小的区域,可以只布置少量的探针,而在光照(颜色)变化大的区域,应该沿颜色的分界线布置较多探针。需要额外注意的是,除了静态物体本身的颜色,烘焙阴影的边界处同样需要布置大量探针,因为这也属于“颜色”的变化区域,如下一个简单的例子,在颜色交界处使用了更多的光照探针。
2 不要让所有的光照探针处于同一个平面,光照探针必须有体积。
3 不要让光照探针穿过游戏物体,不能直接接触物体。
八 反射探针
反射探针的原理就是一个cubeTexure,物体将从这个cubeTexure上获取颜色贴到自己的纹理表面,从而获得反射效果。
反射探针通常有两种使用方法,烘焙反射探针和实时反射探针。
反射探针的范围是指这个范围内的物体可以有反射效果,而不是将范围内的物体烘焙到自己的反射纹理上。
任何物体只要包围盒有一部分接触了反射探针就可以有反射效果,不需要完整的进入反射探针内。
使用反射探针
1 新建一个材质,将金属度和光滑度拉满,为一个物体赋予这个材质,这样他就是一个全反射的物体了,当然不是全反射的物体同样可以使用反射探针。
2 新建一个反射探针,默认为烘焙模式,我们需要烘焙一次光照
3 然后当物体与反射探针的范围有接触时,即可看到反射效果
静态反射探针的效果是有局限的,首先静态反射探针必须先烘焙光照,其次物体的反射效果并不是以物体为中心展现的,而是以反射探针为中心展现的,且当物体移动,反射效果不会有任何改变。
右侧是反射探针
动态反射探针
很显然静态反射探针有很多限制,且无法实时反应游戏内容的变化,当我们需要一面镜子,或则游戏物体表面有较强的反射效果时,我们会需要一个动态反射探针。
将反射探针的模式改为实时,且刷新模式改为每帧,这样我们就可以使用一个不需要烘焙的实时探针。
对于一些移动的物体,例如汽车,可以将反射探针绑定在物体上,然后缩小反射探针的范围,让探针只能为物体提供反射效果,这么做是为了节省性能。需要注意的是,此时我们需要让反射探针忽略物体所在的层,否则探针上可能有不正确的黑色区域,这部分区域就是我们绑定的物体。
反射探针会微弱的提高受影响物体的亮度,因为在物体的表面上叠加了反射的颜色。文章来源:https://www.toymoban.com/news/detail-582876.html
九 后处理
后处理参考
链接
文章写的很好,我就不狗尾续貂了。文章来源地址https://www.toymoban.com/news/detail-582876.html
到了这里,关于unity 2019 内置渲染管线 光照与Lighting面板 参数详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!