Unity3D 中的灯光与渲染

Posted xiaoyulong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D 中的灯光与渲染相关的知识,希望对你有一定的参考价值。

最近仔细研究了Unity3D中的灯光以及渲染,有了全新的认识,在这里整理记录下来。博主所使用的是Unity3D 2017.3.1f1这个版本。

一、Unity3D中的灯光

  1. Directional Light:平行光,用来模拟太阳发射的光。

  2. Point Light:点光源,用于模拟场景中的灯和其他本地光源。

  3. Spot Light:聚光灯,通常用于人造光源,如手电筒,汽车前灯和探照灯。

  4. Area Light:区域光,只能用于烘焙中。

  5. Reflection Group:反射探针,用于准确反射周围环境。

  6. Light Probe Group:灯光探针组,用于记录场景中光照信息,实时影响物体。

  7. Environment Lighting:环境光。场景的整体外观和亮度的主要依靠于环境光,环境光是从各个方面来影响对象的。

  8. Emissive Materials:自发光材质,类似于区域光,只能使用在静态物体中,并且只能照明静态物。

二、Unity3D中虚拟环境的组成

Unity3D中虚拟环境由天空盒、环境光、环境反射以及场景中的光源共同构成。我们按照下面的步骤,可以将场景还原到最原始的状态:

  1、关闭场景中的所有灯光。

  2、进入Window->Lighting->Setting->Scene窗口。

  3、设置Environment->Skybox Material参数为None,取消天空盒。

  4、设置Environment->Environment Lighting->Ambient Color为黑色,将环境光设置为黑色。这里需要注意的是,当我们将天空盒取消后,环境光的来源将会变为颜色,如果我们设置了天空盒,并将环境光的来源设置为天空盒(Environment -> Environment Lighting -> Source -> Skybox),Ambient Color参数将会变为Intensity Multiplier(环境光强度),如果我们将强度调为0,会发现场景明显变暗。

  5、设置Environment->Environment Reflections->Intensity Multiplier0,将环境反射强度设置为0。环境反射也受来源的影响,当天空盒为空时,反射来源也为空,这时我们调这个参数其实是看不到效果的。如果我们设置一个天空盒,将环境光关闭,打开场景中的光源,我们在调节这个参数,会发现场景中的模型,接受不到光照的地方将会显示纯黑色。

 

按照上面的步骤做完,我们将会得到一个纯黑的场景,什么也看不到,如果我们反向操作,场景又会慢慢亮起来,这也就证明了Unity3D中虚拟环境由天空盒、环境光、环境反射以及场景中的光源共同构成这一结论。

三、Unity3D中打光与渲染必备知识

  1、Unity3D中的光分为直接光照和间接光照,间接光照就是反射光。 

  2、Unity3D中光的渲染模式有三种:

    ① Realtime:实时渲染。每帧都会计算光照,实时光照是不会反射的,所以它的光影显得单调。

    ② Mixed:混合渲染。提供烘焙和实时功能的混合模式,例如对灯光的间接照明进行烘焙,同时对直接照明进行实时计算。

    ③ Baked:烘焙渲染。过烘培光照贴图的方式获得很好的光照效果,无法实时的改变光照

  3、Unity3D中的阴影类型:

    ① No Shadows:没有阴影。无性能损耗。

    ② Hard Shadows:硬阴影。阴影边缘清晰,效果一般,性能损耗一般。

    ③ Soft Shadow:软阴影。阴影边缘柔和,有过渡效果,效果最好,性能损耗最严重。

  4、Unity3D中分全局设置和局部设置。例如我们对场景中某一盏灯光的参数进行修改,只会影响这一盏灯,如果对全局参数进行修改,将会影响所有的灯光效果。

  5、Unity3D中的物体分为动态物体和静态物体。烘焙技术、自发光材质、预先全局光照技术等只对静态物体生效。

四、效果优化常用全局参数介绍

1、颜色空间(Color Space

参数设置位置:Edit -> Project Setting -> Player -> Player Settings -> Other Settings -> Rendering -> Color Space

两种模式:GammaLinearLinear效果更好,同时也对性能消耗比较大。下面是两种模式在不同光照强度下效果对比图:

 技术图片

2、最终聚集(Final Gather)

参数设置位置:Window -> Lighting -> Setting -> Scene -> Lightmapping Settings -> Final Gather

作用:一种模拟全局照明的计算技术。反向搜集物体表面特定点的受光照强度来模拟现实照明效果,来使场景更贴近于自然。由于该计算技术计算量很大,建议在场景最后出效果时勾选,并进行烘焙,平时不要开启。

五、没有阴影的原因

1、光源没有开阴影。

技术图片

2、全局设置中关闭了阴影。(Edit -> Project Setting -> Quality -> QualitySettings -> Shadows -> Shadows

技术图片

 

3、模型。Mesh Renderer组件中的Cast Shadows属性为关。

技术图片

 

4、Shader问题,Shader本身不接受阴影。

六、灯光常用参数介绍

Type:灯光类型

Color:灯光颜色

Mode:渲染模式

  Realtime:实时

  Mixed:混合

  Baked:烘焙

Intensity:灯光强度

Indirect Multiplier:间接照明强度

Shadow Type:阴影类型。No Shadows(无阴影)、Hard Shadows(硬阴影)、Soft Shadows(软阴影)

  Baked Shadow Angle:这个设置用来改变间接光的亮度。间接光是指从一个物体反射到另一个物体的光线。Indirect Multiplier定义了GI系统计算的反射光亮度。Indirect Multiplier小于1时,光线每次反射后会变暗。大于1时光线每次反射后会变 亮。 这个功能可以用来调亮阴影中的表面(比如洞穴内部)以清晰地观察细节。或者在使用Realtime Global Illumination时,想让某个real-time光源只有直接光时,可以将Indirect Multiplier设置为0。

  Realtime Shadows:实时阴影

    Strength:阴影浓度,即阴影的黑暗程度。

    Resolution:阴影分辨率,即质量。

    Bias:通过滚动条控制阴影被推离光线的距离,范围为0到2,默认值为0.5。用来避免人工物体自阴影的错误。

    Normal Bias:通过滚动条控制投射阴影的表面相对于周围正常表面的下沉效果,范围为0到3,默认值为0.4。用来避免人工物体自阴影的错误。

    Near Plane:通过滚动条控制渲染阴影时的最近裁切面。范围为0.1到10,默认值时0.2。这个值会从0.1 units和光线的Range的1%中取最小值。

Cookie:为投射的阴影指定一个纹理(替换真实的灰色阴影)。比如制造剪影,或者照明图案。

Cookie Size:阴影纹理尺寸

Draw Halo:绘制光晕

Flare:光斑

Render Mode:渲染优先级。这会影响光照的保真度和渲染性能。

  Auto:渲染方式在运行时根据周围光照的亮度和当前Quality Settings来决定。

  Important:光照总是按照逐像素的质量渲染。一般只对最醒目的视觉效果使用Important模式,比如玩家车辆的车灯。

  Not Important:光照总是以更快的顶点/角色光照模式渲染。

Culling Mask:光照剔除

 

各种灯光的参数都大致一致,我这里就不一一介绍了,就以平行光为例介绍。

 

 

七、Lighting窗口参数介绍

Unity3D 中渲染效果肯定是离不开 Lighting 窗口的参数设置的。Lighting 窗口的参数看着很多,其实只要理解了,也没多少。而且Realtime、Mixed、Baked这三种渲染模式是分别与 Lighting 窗口中的 Realtime Lighting、Mixed Lighting、Lightmapping Settings 三大块一一对应的,只要理解了这个,整个 Lighting 窗口的参数就好理解很多了。

1、Environment(环境设置)

  Skybox Material:天空盒

  Sun Source:当使用程序天空盒时,使用它来指定带有方向光的游戏对象,如果设置为none,场景中最亮的方向光则被指定为太阳光。

  Environment Lighting:环境光

    Source:来源

      Skybox:天空盒

      Gradient:梯度

      Color:颜色

    Intensity Multipl:环境光强度

    Ambient Mode:环境渲染模式

      Realtime:实时渲染

      Baked:烘焙

  Environment Reflections:环境反射

    Source:来源

    Resolution:反射成像的分辨率

    Compression:压缩

    Intensity Multipl:反射强度

    Bounces:弹跳;反射

2、Realtime Lighting(实时灯光)

  Realtime Global Illumination:实时全局光照

3、Mixed Lighting(混合灯光)

  Baked Global Illumination:烘焙全局光照

  Lighting Mode:只在光源模式为 Mixed 时生效。

    Baked Indirect:只烘焙间接光。使用此模式,光影效果最好,并且静态物体和动态物体的光影可以混合,但是很消耗性能。该模式受Shadow DistanceQualitySettings -> Shadows -> Shadowmask Mode ->Shadow Distance)参数的影响,当视野距离超过这个值时,不显示影 子。

    Shadowmask:效果比Subtractive效果要好,缺点就是动态物体无法接受静态物体已经烘焙好的阴影。如果我们想动态物体能够和烘焙好的光影 信息进行混合,我们可以将模式改为Distance Shadowmask,这样就可以实现在一定视野范围内进行混合,但是相对来说会损耗性能。Distance Shadowmask模式受Shadow DistanceQualitySettings -> Shadows -> Shadowmask Mode ->Shadow Distance)参数的影响,这个距离 指的是视野距离,即物体距离相机的距离。Distance Shadowmask模式是在质量设置里面进行设置的(QualitySettings -> Shadows -> Shadowmask Mode -> Distance Shadowmask)。

    Subtractive:效果最差,性能最好。只允许有一个主光源,当动态物体,被两个光源照射时,只会产生一个阴影,静态物体依然会有两个阴影。

4.Lightmapping Settings

  Lightmapper:光线映射器。

  Indirect Resolution:间接光质量。

  Lightmap Resolution:光照贴图质量。

  Lightmap Padding:光照贴图间距。防止光照信息贴错位置。

  Lightmap Size:光照贴图尺寸。

  Compress Lightmaps:是否压缩。

  Ambient Occlusion:环境剔除。可以优化墙角等地方光影效果。环境光遮蔽是一种光照模型,它会计算像素亮度与场景中附近物体之间的关 系。它将确定何时阻止特定像素接收附近的几何光的环境光,这样使其亮度便会降低。当两个均匀明亮的物体相互靠近时,它会产生基本的 变光效果。

    MaxDistance:设置一个值控制射线的射程,以确定对象是否被遮挡。

    Indirect Contribution:控制间接光在lightmap的强度。

    DirectContribution:控制直接光在lightmap的强度。

  Final Gather:最终聚焦。

    RayCount每个最终聚焦的点发出的射线的数目。默认是256。

    Denoising:是否在最后的聚焦输出应用去噪过滤。

  Directional Mode:是否生成光照方向贴图来辅助计算。

  IndirectIntensity:间接光强度。

  Albedo Boost:反照率增强。可以用来处理曝光现象。将模型材质的Albedo贴图颜色调暗,将反照率加大。

  Lightmap Parameters:光照贴图参数。质量设置。

 

以上是关于Unity3D 中的灯光与渲染的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D图形渲染优化渲染管线优化图形性能优化

Unity3d办公场景灯光布设与光影烘焙及后处理【2021】

游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)

Unity3D:画布上的 Sprite 渲染器与图像渲染器问题

Unity3D项目之《坦克大战》

Unity3D项目之《坦克大战》