Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)

这篇具有很好参考价值的文章主要介绍了Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

本文将会通过一个简单的场景搭建,介绍如何使用烘焙光照以及相关的注意事项。另外还介绍了Unity内全局光照(GI)的知识和GI实际在游戏内的表现效果。

Unity关于光照相关的参考文档地址:https://docs.unity.cn/cn/current/Manual/LightingOverview.html

下面是一些基本的概念

直接光照和间接光照

直接光照指的是,光源照射到物体表面后仅经过一次反射后进入到相机中的光照信息。大多数情况下,相机内接收到的光都是来自于直接光。

间接光照则是光源经过多次的反射后进入到相机中的光照信息,一般需要借助全局光照(GI)或者反射探针来实现。

三种光照模式

实时(Realtime)光照:默认创建的光照类型都是该类型,实时光照会在运行时的每一帧进行光照计算。并且可以自由地修改物体和光源的位置和属性。

烘焙(Baked)光照:烘焙光照,是Editor提前在场景中进行光照计算,生成对应的光照数据,这个过程就叫烘焙,后续在游戏运行时,不会再对该类型的光照进行计算,而是直接从光照贴图中获取数据。该光照适用于场景中静态的光照和物体。

混合(Mixed)光照:可以在烘焙的过程中生成对应的光照信息。在运行时会将烘焙的光照信息和实时的光照信息叠加在一起。并且可以在运行时修改光源信息,不过这些修改仅会影响实时光照部分计算的结果。不影响原先的烘焙结果。同时混合光照记录的信息,会受到光照设置中Mixed Lighting的Lighting Mode选项影响

关于烘焙光照的实践

1.测试场景搭建

首先创建一个测试场景,为了避免天空盒和背景对最终光照结果的影响,将相机的BackgroundType改成SolidColor,设置Background颜色设为纯黑色

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后打开Window->Rendering->Lighting 设置界面

选择Environment将Environment Lighting的Source设置为Color,Ambient Color设置为全黑色

Environment Reflections 的Intensity Multiplier设置为0

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后在场景内放置一个平面和两个胶囊体。其中StaicPlaneStaticCapsule(静态胶囊体)均勾选右上角的Static选项

场景内默认的平行光命名为TestLight,然后复制一个TestLigth改名为RealTimeLight,并且将RealTimeLight的Active设置为False。这时可以看到以下的一个画面

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

如果将TestLight的Active也设置为false可以看到整个画面变成了全黑的。说明此时游戏内的物体已经不受环境光的影响

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后恢复TestLight的Active为true。这时候可以做一个小实验,将TestLight的Mode由RealTime改为Baked和Mixed

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

修改完后可以尝试运行该场景。可以发现一个神奇的现象,不同光照模式下Game视图下看到的画面均是相同的,画面如下。原因是此时并没有进行光照的烘焙,在没有任何烘焙信息的情况下,无论选什么模式,场景内的光源都是实时光

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

2.烘焙光照

将TestLight的Mode选择为Baked。然后打开Lighting设置界面,在Scene选项下,点击New Lighting Settings

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

创建一个光照配置,这里命名为LightSceneSetting

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

然后切换到BakedLightMaps选项下,此时LightingDataAsset为空,点击底部的GenerateLighting

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

可以看到Editor底部出现一个蓝色的进度条,代表正在进行光照的烘焙

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

等待蓝色进度条结束后,可以看到在Scenes目录下,会自动创建一个跟当前进行烘焙的场景同名的文件夹,并且文件夹内生成了LightingData,两个LightMap和一个ReflectionPro

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后查看Game界面,发现画面中DynamicCapsule(动态胶囊体)消失了

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

原因是烘焙光照只会烘焙设置为Static的物体。所以只有StaticPlane和StaticCapsule受到了BakedLight的光照影响。

之后进行以下的几个测试,查看画面中的变化

  • 将TestLight的Active设置为fasle,发现画面没有产生任何改变。原因是,经过烘焙之后,受到烘焙影响的物体,会直接从LightMap中获取自己的光照信息,并且不关心原来的光源TestLight的active是否是true

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

  • 将原先RealTimeLight的Active设置为True,可以看到DynamicCapsule出现了,并且他的颜色明显要比左边的StaticCapsule要暗一些。因为DynamicCapsule仅受到了实时光的影响,而StaticCapsule则是叠加了烘焙光和实时光

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

  • 将TestLight的Active重新设置为true之后,修改TestLight的Mode,将其改成RealTime或者Mixed。画面同样没有任何改变。原因是烘焙信息会记录哪些光参与了烘焙,在之后的渲染中,该光照就不再参与实时光照的计算

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

关闭RealTimeLight,将Static Capsule的位置为(0,1.5,0)修改为(-2,1.5,0),角度由(0,0,0)修改为(0,180,90)

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

可以看到一个有趣的现象,StaticCapsule显示的位置改变了,但是原先的背光面旋转到正面之后还是特别的暗,包括底部的阴影位置和大小都没有产生改变,还是跟未移动之前相同

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后在Lighting界面重新点击GenerateLighting

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

等待蓝色进度条完成后可以看到光照和阴影全部都恢复正常了。所以如果静态物体位置产生改变之后需要重新进行烘焙,才会获得正确的烘焙纹理

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

关于全局光照的实践

1.测试场景搭建

在之前创建的测试场景上进行修改,先新建一个URP/Lit材质,将颜色改成为红色,金属度改成0,光滑度改成1

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

为了效果更加明显,将场景内的光照的Intensity设置为2(Intensity代表光线的强度),Indirect Multiplier设置为3(Indirect Multiplier间接反射系数代表每次间接光反射之后的强度变化,该值小于1,则每次反射之后光照强度就会减小,大于1则是反射之后变强)

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

然后创建一个立方体(LeftCube),将刚刚的红色材质赋值给立方体,然后将其设置为Static,再按照下图进行摆放。

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

画面中的胶囊体,上面是静态胶囊体,下面是动态胶囊体。

2.烘焙全局光照

先确保Lighting设置Scene选项卡的Baked Global Illumination处于勾选状态

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

场景只打开一个Baked光源TestLight。

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后点击Lighting设置中Baked Lighitingmap的Generate Lighting按钮。等待烘焙进度条结束。结束之后可以看到上面的静态胶囊体靠近墙面的部分有些许红色。这个红色就是由左侧的立方体反射出来的间接光,下方的动态胶囊体没有参与烘焙的过程所以现在整个是黑色

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后打开另外一个实时光RealTimeLight

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

下方的动态胶囊出现在画面中,但是胶囊体左侧依旧是黑色的。

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

3.实时全局光照

将Lighting设置Scene选项卡中的Realtime Global Illumination勾选框打开

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

关闭烘焙光源TestLight开打实时光源RealTimeLight

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后点击BakedLightmaps的Generate Lighting按钮。由于此时没有处于激活状态的烘焙光源,所以BakedLightmap是一个全黑的图片

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

静态胶囊体左侧也变成了黑色,没有受到左侧红色立方体的影响

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

之后点击Realtime Lightingmaps选项卡的Generate Lighting按钮,等待进度条结束。可以看到上面的静态胶囊体左侧出现了红色,动态胶囊体的左侧依旧是黑色的。说明实时全局光照同样是只对静态物体有效

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

这时候可以尝试修改实时光照的角度,Intensity和Indirect Multiplier。在不重新生成Realtime lightmaps的情况下,可以看到场景内的静态物体的直接光照和间接光照均会实时受到影响。

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

但是如果修改静态物体的旋转角度,将静态胶囊体绕Z轴旋转180度,原先左侧靠近红色立方的的半边旋转到右侧。

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

环境光设置

环境光的设置在Lighting-Environment选项卡内

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照),Unity开发方案和知识,unity,光照贴图

下表是Unity关于Environment各个属性的说明

属性: 功能:
Skybox Material 天空盒是一种材质,它出现在场景中的所有其他对象后方,用于模拟天空或其他遥远的背景。使用此属性可选择要用于场景的天空盒。默认值是内置的默认天空盒 (Default Skybox)。
Sun Source 当天空盒材质是Procedural 天空盒时,使用此设置指定具有定向光源组件的游戏对象,用来指示太阳的方向(或任何大型、遥远的照亮当前场景的光源)。如果将其设置为“None”,则假定场景中最亮的定向光代表太阳。渲染模式属性设置为“Not Important ”的光源不会影响天空盒。默认值为无。
有关渲染模式设置的更多信息,请参阅Lights的其他设置部分。
Realtime Shadow Color 定义 Unity 用于在 Subtractive 光照模式下渲染实时阴影的颜色。

此设置仅在__Lighting Mode__ 设置为 Subtractive 时可见。
Environment Lighting 此部分包含可影响当前场景中的环境光的设置。
Source 使用此属性可定义场景中环境光的光源颜色。默认值为 Skybox。
Skybox 使用 Skybox Material 中设置的天空盒颜色来确定来自不同角度的环境光。这可以实现比 Gradient 更精细的效果。
Gradient 可为来自天空、地平线和地面的环境光选择单独的颜色,并在它们之间平滑混合。
Color 对所有环境光使用单调颜色。
Intensity Multiplier 使用此属性可设置场景中环境光的亮度,定义为 0 到 8 之间的值。默认值为 1。
Environment Reflections 此部分包含反射探针烘焙的全局设置,以及影响全局反射的设置。
Source Use this setting to specify whether you want to use the Skybox for reflection effects, or a Cubemap of your choice. The default value is Skybox.
Skybox 选择此选项可使用天空盒作为反射源。
Custom 选择该选项后,可以选择Cubemap,或者Dimmension设置为Cube的RenderTexture,用于进行反射。
Resolution 使用此属性可设置用于反射的天空盒的分辨率。仅当 Source 设置为 Skybox 时,此属性才可见。
Cubemap 用于进行反射的Cubemap,该属性只在反射的Source设置为Custom是有效
Compression 使用此属性可定义是否压缩反射纹理。默认设置是 Auto。
Auto 如果压缩格式合适,则压缩反射纹理。
Uncompressed 反射纹理以非压缩状态存储在内存中。
Compressed 压缩纹理。
Intensity Multiplier 反射源在反射对象中可见的程度。
Bounces 当来自一个对象的反射随后被另一个对象反射时,便发生反射反弹。使用此属性可设置反射探针评估对象之间来回反弹的次数。如果设置为 1,则 Unity 只会考虑初始反射(来自 Reflection Source 属性中指定的天空盒和立方体贴图)。

创作不易,如果觉得这篇文章对你有所帮助,可以动动小手,点个赞哈,ღ( ´・ᴗ・` )比心文章来源地址https://www.toymoban.com/news/detail-608598.html

到了这里,关于Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity填坑-灯光烘焙相关

    项目组对灯光烘焙那块参数以及工作流程有一定疑问,单独抽时间把整个机制做了一次单独的调研,错漏之处恳请指点。 Unity中的Light模式分为三种: 实时,混合,烘焙。 这三种要结合在Lighting设置一起工作来看。 一种是直接光照,即光直接照到物体上,反射到相机里。 二

    2024年01月16日
    浏览(29)
  • 烘焙光照贴图,模型小部分发黑

    1.首先确定创建了光照贴图UV,其次确定不是溢色,这个最简单,所有模型材质设置为双面就可以,URP材质球的话这里就是设置双面 在scence界面Texel Validity模式里查看溢色,红色表示有溢色,绿色表示正常   2. 光照贴图UV (UV2) 是否有重叠 在scence窗口的 UV Overlap 模式里查看光

    2024年02月13日
    浏览(36)
  • Unity光照相关

    Unity支持多种类型的光源,包括: 1. 点光源(Point Light):从一个点向四周发射光线,适用于需要突出物体的光源。 2. 平行光(Directional Light):从无限远处的一个方向照射,适用于需要模拟太阳或月亮等光源。 3. 聚光灯(Spot Light):从一个点向一个方向发射光线,适用于需

    2024年02月10日
    浏览(26)
  • Unity(二) 光照相关

    Unity支持多种类型的光源,包括: 1. 点光源(Point Light):从一个点向四周发射光线,适用于需要突出物体的光源。 2. 平行光(Directional Light):从无限远处的一个方向照射,适用于需要模拟太阳或月亮等光源。 3. 聚光灯(Spot Light):从一个点向一个方向发射光线,适用于需

    2024年02月09日
    浏览(24)
  • 【Cocos Creator 3.x】如何进行光照烘焙(使用光照贴图)

    前言 这是一篇基础教程篇,在于帮助使用者快速理解并使用 Cocos Creator 3.x 引擎提供的 光照贴图 功能。 光照贴图 Cocos Creator 引擎的官方文档是这么描述的: 当我们进行开发 3D 游戏时,场景中会有很多的静态物体,如果使用动态光源进行计算,那么可能会相当耗费性能的。那

    2024年02月08日
    浏览(30)
  • 【Unity】材质设置1双面材质2HDRP材质转换3烘焙渲染

    一 双面材质问题 在Unity使用中,我们发现材质在物体上是单面的,换一个方向就看不到了,针对这个问题做个备注: 普通三维场景 首先将选中物体,找到对应的材质,然后将Shader组件的渲染模式改成【Particles】-【Standard Surface】,接着勾选上【Two Sided】属性就OK了 HDRP场景 在HDRP场景

    2024年02月12日
    浏览(32)
  • Unity光照渲染设置

    先看效果图   下面是设置 1、将【Edit - Player -Other Settings】Color Space这个调成Linear模式,有更好的阴影效果  2、光照Lighting的设置【Window-Rendering-Lighting Settings】 标注说明: Baked Global IIIumir 这个是GI 就是是否会有反射光线 Final Gather 这个是最后光照的计算,勾选之后光线根据贴图

    2024年02月15日
    浏览(30)
  • 球谐函数实现环境光照漫反射实践

    该文章以及代码主要来自 图形学论文解析与复现:【论文复现】An Efficient Representation for Irradiance Environment Maps 作者:Monica的小甜甜 与原文的不同 : 对一些有问题的地方进行了修改 添加了注释 对有疑问的地方添加了疑问点 引入了其他一些Blog填充了原文中忽略的信息 首先根

    2024年02月09日
    浏览(28)
  • 【Unity】光照烘培-基础参数-基础设置

    Unity 2020.3.25 打开灯光面板 Wingdow -》 Rendering - Lighting Lighting Settings 灯光设置文件 Realtime Lighting Realtime Global lllumin Realtime Environme Mixed Lighting Baked Global lllumin Lighting Mode Baked Indirect Subtractive Shadowmask Lightmapping Settings Lightmapper Progressive CPU Ambient Occlusion 还需要勾选环境遮蔽(Ambient O

    2024年01月23日
    浏览(34)
  • unity全局音量管理/全局音量设置与音量设置界面(含静音功能)

    本文将会介绍如何使用 audiomixer 实现全局音量控制,并且会介绍如何实现游戏内的含静音功能的音量设置界面。 本人也是个初学者,在看过一些关于音量管理的教程后,发现使用audiomixer实现全局音量控制可能是最方便、功能最完备、强大的,因此在这里分享一下自己的实现

    2024年02月08日
    浏览(116)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包