UNITY光照系统简介

UNITY_光照系统

光照系统又称照明系统;

从字面意思理解,光照系统的作用就是给我们的场景带来光源,用于照亮场景。一个五彩缤纷的游戏场景肯定要比一个漆黑一片的游戏场景更具吸引力,想让游戏场景变的更漂亮,光照系统是必不可缺的。

在 Unity5.x 中光照系统主要组成部分有两个:

灯光组件(4 个灯光组件,2 个特殊功能组件)以及 Lighting 面板。

两种类型:

  • 实时光照:PC,主机端运行,照明效果好,但是消耗资源较大。
  • 烘焙光照:移动端运行,照明效果也不错,消耗资源较少。

光照系统之实时光照

实时光照全称为 Precomputed Realtime GI(预先计算的实时全局光照);

GI 全称是 Global illumination(全局光照);

Unity5.x 光照系统默认使用的就是实时光照类型。

光照结论:

  • 所有的灯光都真实的参与运算,可以动态的改变任何的灯光(位置,颜色,强度....),且随着改变,灯光对场景环境的影响也是实时的。
  • 所有的场景环境模型,也同样是真实的参与运算,这些场景模型也是真实的受到各种光源的影响。
  • 综合结论:光源真实的影响环境,环境真实的受光源影响。

Lighting面板相关设置:

  • Ambient GI:显示当前光照系统的模式(实时还是烘焙)。
  • Auto 复选框的作用:默认是勾选状态,也就意味着我们场景里面添加了新的模型,改变了原有模型的位置,场景灯光是会自动计算的。场景内资源模型较少时,可以勾选,但是如果场景很复杂了,就要取消这个 Auto 的勾选状态,否则你每次调整了场景中模型,都要重头Build 一次,是很消耗时间的。
  • Build 按钮的作用:场景实时光照,烘焙光照的相关光照数据的“构造生成”。前面的 Auto 选项就是控制这些相关数据,是自动还是手动生成。

光照系统之烘焙光照

烘焙光照全称为 Baked GI(烘焙全局光照);

烘焙光照的特点是将场景中的光源信息事先烘焙为“光照贴图”,用这些贴图存储光照,然后引擎会自动的将这些“光照贴图”与场景模型相匹配,烘焙完光照贴图后,在游戏运行过程中场景内的灯光是不会真正的参与实时运算的。烘焙光照相对于实时光照,对硬件的性能要求较低,这种光照方式比较适合手机等移动设备平台(灯光组件的实时运算,是特别消耗硬件性能的)。现在的手机端,特指 Android 设备。上面的 MMORPG 游戏场景的光照90%以上的都是使用的烘焙光照。

烘焙步骤:

  • Lighting 面板选择要使用的光照系统模式,并取消 Auto 选择状态。
  • 所有参与烘焙的光源,自身的灯光组件中的 Baking 选项要设置为 Baked。默认是 Realtime,这个 Baking 根据当前场景的要使用的光照系统的模式进行选择和设置。
  • 所有参与烘焙的场景模型物体,自身要设置为 Static,设置完毕后,这些物体就变成了静态物体,场景运行后,是无法改变它们的位置的。
  • 完成了前面的操作,就可以点击 Lighting 面板下方的“Build”按钮,进行光照贴图的烘焙生成。

光照贴图:存储了场景中的灯光信息,“Build”完毕后,会以资源的形式出现在项目工程目录中,和当前场景处于同一目录,且生成一个该场景同名的文件夹,存储相关光照贴图。

烘焙光照步骤细节

  • Lighting 面板选择模式为 Baked GI;
  • 相关灯光设置为 Baked;
  • 相关模型设置为 static;

场景模型为何要静态?

因为只有静态的模型,才能参与烘焙渲染,烘焙渲染是要生成光照贴图的。生成的光照贴图和场景模型是一一对应的。贴图是固定的,如果你的模型是非静态的,就表示模型可以移动,模型动了的话,光照贴图就偏了。为了避免这样的情况,Unity 引擎只允许静态的模型参与光照烘焙过程。

烘焙光照重点参数

  • Baked Resolution [重点调整参数]

烘焙分辨率:其实就是生成的光照贴图的分辨率。值越大,效果越好,体积也就越大,烘焙时间也就越长,反之亦然。这个参数是最最影响烘焙时间的。

一般在开发阶段,不要设置太高,否则需要很长的时间来渲染光照贴图。

阶段测试,最终发布的时候,设置高一点,渲染一个最佳的效果即可。

  • Baked Padding [默认即可]

烘焙间距:控制烘焙出来的光照贴图,贴图元素信息之间的间距。无实际意义,保持默认的 2 即可。

  • Compressed [默认即可]

压缩:对烘焙的贴图进行压缩,压缩比例大约是 3~5 倍。意义重大,保持默认的勾选状态。

  • Ambient Occlusion [根据实际情况选择是否开启]

AO 贴图效果:作用和标准着色器里面的 AO 贴图类似,都是用于优化模型的阴影和转角部分。

  • Atlas Size [默认即可]

图集尺寸:单张光照贴图的最大尺寸。

光照系统之灯光探头组

烘焙光照后的问题

在使用 Unity 开发移动平台的应用(游戏,VR,AR)时,为了保障应用的的运行帧率,我们一般将场景中最消耗资源的“实时光”烘焙成“光照贴图”。光照贴图保存了场景中所有的静态物体的光照效果,但是场景中的非静态物体,比如:游戏角色,NPC,这些能动的角色,它们身上就不会出现光照效果。那么如何解决这个问题那??

Unity 为了应对这种情况,推出了一个专门解决该问题的组件:“Light Probe Group”:灯光探头组。

灯光探头组

组件作用:

使用灯光探头组组件,我们可以在烘焙后的场景中,模拟实时光照状态下的效果。

组件使用步骤:

  • Light --> Light Probe Group 添加组件;
  • 点击组件上的 Edit 按钮,在正交视图下添加新的“探头”,并调整位置。

组件注意事项

摆放“探头”要让探头成为一个“体积”,我们的角色在整个空间内移动的时候,无论移动到任何地方,都处于一个“体积”内,也就是说触发 4 个探头。

组件的原理分析

在空间内摆放 N 个灯光探头,成一个体积状态。然后烘焙光照贴图,在烘焙光照贴图的同时,也会烘焙这些灯光探头,这些探头会记录下当前自己所在位置的灯光信息。然后当我们的非静态角色模型,进入到探头的范围内,角色模型会自动获取自己周围的探头上记录的光照信息,进行插值运算后,在角色模型身上模拟出真实光照的效果。

辅助烘焙光源

区域光组件

Area Light:区域光[组件]。

区域光在“实时光照”模式下是无效的,仅在“烘焙光照”模式下有 用。

模型自发光:

标准着色器上的自发光选项,也是可以让模型成为一个辅助烘焙光源。

注意事项:

  • 烘焙模式下的自发光物体也需要设置为静态。
  • Emission 后的值越大,自发光强度也就越大。

光照系统之烘焙反射探头

反射探头

Reflection Probe:反射探头 组件。

反射探头的作用是用于模拟场景中反射效果的。场景中的一些高反射的物体,比如:非常平滑高亮的金属,玻璃,塑料等,这些物体都是可以反射周围的环境的,比如我们之前课程里面的测试效果。这些物体能反射显示出哪些东西,则是由反射探头决定的;Unity 新建的场景里面默认是存在一个反射探头的。

反射探头的创建

Light-->Reflection Probe //创建一个新的反射探头

组件分析:

  • 反射探头这个组件由一个“立方体空间”和一个“反射探头”组成;
  • 反射探头配合 Lighting 面板,同样分实时模式和烘焙模式;
  • 立方体的大小我们是可以调整的,反射探头的位置同样是可以调整的;
  • 如果反射探头的类型设置为了 Baked 后,则该反射探头只会反射周围的静态物体。
  • 所有处于该立方体空间内的模型,只要它们的金属度平滑度比较高,就会出现反射效果,这个反射效果其实就是取的反射探头的数据;
  • 环境中默认存在的反射探头,是无限大的,和天空盒是完全重叠的;
  • 反射探头是可以单独烘焙的。

反射探头参数

  • Type[类型]:设置当前反射探头是烘焙类型还是实时类型。
  • Box Projection[盒模型投影]:很关键的一个参数,但是目前不方便测试,后续的案例中重点演示。
  • Box Size[空间大小]:设置立方体空间的尺寸。
  • Box Offset[空间偏移]:设置立方体空间的整体的偏移。
  • Resolution[分辨率]:烘焙后的反射探头其实会输出一张贴图到我们的项目中,这个分辨率就是设置这张贴图的分辨率的,分辨率越高,反射效果越清晰,反之亦然。
  • Clipping Planes[裁剪面(反射范围)]:反射探头会反射该范围内的物体。

光照系统之实时反射探头

使用步骤

  • 将 Lighting 面板中的 Baked GI 取消勾选状态;
  • 场景中创建一个 Reflection Probe,类型设置为 Realtime;
  • 创建参与反射的模型物体以及角色;
  • 对实时反射探头的组件属性进行调整;

Refresh Mode[刷新模式]

  • On Awake:只在唤醒的时候刷新一次;
  • Every frame:每一帧都刷新一次;
  • Via Scripting:通过脚本控制刷新频率;

    取消实时反射探头反射角色本身

  • 给当前的角色设置一个 Layer 层;
  • 然后设置反射探头上的 Culling Mask 属性将角色所在的层排除;

    控制反射探头与角色位置同步

代码实现位置同步,将角色的位置同步给实时反射探头。


本作品由繁星陨辰采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

时间: 2024-08-03 23:27:56

UNITY光照系统简介的相关文章

Unity光照系统

1.Unity引擎中提供的光照系统叫EnLighten,作为引擎渲染的一部分,负责构建场景中的灯光. (1)Light组件简介 Unity的灯光组件大致分为:光源组件和烘焙组件 光源:自己能发光,分为Directional Light,Point Lignt,Spot Light. (2)常见光源类型 a.Directional Light 平行光,模仿太阳光,没有真正的“源”,整个场景中任何一个角落的光照强度是相等的. b.Point Lignt 点光源,从中心呈球形向四周扩散,例如火把,室内

UNITY物理系统简介

UNITY_物理系统简单介绍 要有说服力的物理行为,游戏中的物体必须正确地加速,受到碰撞,引力和其他力量的影响. Unity中实际上有两个独立的物理引擎:一个用于3D物理,另一个用于2D物理.两个引擎的主要概念是相同的(除了3D中的额外维度),但是它们是使用不同的组件实现的.例如,Rigidbody和Rigidbody2D. 笔者推荐阅读UNITY官方手册 物理概述 Rigidbody(刚体) 概述 在使用Unity中如果想要GO拥有重力,可以发生碰撞反馈等,那就必不可少需要添加一个组件Rigi

Unity 5:光照系统

原文链接 Unity在一些有理想的游戏开发者当中变得越来越流行.这应该归功于Unity对多平台(像手机.台式机以及主机环境等)的直接支持.此外,对于低收入开发者和工作室来说,它还可以免费使用. Unity支持多种技术及组件,其中一些关键组件就是光照和照明技术.在Unity中,你可以通过模拟灯光的复杂行为或者使用一个简单的光照模型来照亮一个场景. 这篇教程将会着重解释Unity 5中光照系统的工作原理,光照类型和特性,以及如何使用它们来创造丰富的光照效果. 预备工作 首先,确保你使用的是最新一版的

实时计算,流数据处理系统简介与简单分析

转自:http://www.csdn.net/article/2014-06-12/2820196-Storm 摘要:实时计算一般都是针对海量数据进行的,一般要求为秒级.实时计算主要分为两块:数据的实时入库.数据的实时计算.今天这篇文章详细介绍了实时计算,流数据处理系统简介与简单分析. 编者按:互联网领域的实时计算一般都是针对海量数据进行的,除了像非实时计算的需求(如计算结果准确)以外,实时计算最重要的一个需求是能够实时响应计算结果,一般要求为秒级.实时计算的今天,业界都没有一个准确的定义,什么

全面理解 Unity UI 系统

[狗刨学习网] 随着 Unity 4.6 发布,新 UI 系统终于与大家见面了. RectTransform Unity UI 系统使用 RectTransform 实现基本的布局和层次控制.RectTransform 继承于 Transform,所以 Transform 的所有特征 RectTransform 同样拥有.在 Transform 基础上,RectTransform 增加了 轴心(pivot).锚点(实际上是用 anchorMin.anchorMax 两个点定义的矩形区域).和 尺

Unity光照

广义地说,Unity有2种光源.1.动态光源  2.Backed Lighting 1.动态光源 就是实时计算的.只要摆光源就可以了 2.Backed Lighting 提前处理好光照贴图.贴在物体上. Point: 角度无关紧要 Directional: 位置无关紧要 Spot: 角度和位置都有影响 Area (Baked Only): 区域光源..暂不知 Ambient Light 环境光(不是光源):在这里设置:Edit -> Rendering Settings (建议把环境光使用黑色,

Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程

上一篇文章主要讲述了Android的TouchEvent的分发过程,其中有两个重要的函数:onInterceptTouchEvent和onTouchEvent,这两个函数可被重装以完成特定的逻辑.onInterceptTouchEvent的定义为于ViewGroup中,默认返回值为false,表示不拦截TouchEvent.onTouchEvent的定义位于View中,当ViewGroup要调用onTouchEvent时,会利用super.onTouchEvent.ViewGroup调用onTo

【Unity编程】Unity动画系统(一)

Unity动画系统 Unity动画系统,也称为"Mecanim",提供了以下功能: 简单的工作流程,设置动画的所有元素,包括对象,角色和属性. 支持导入外部创建的动画片段和使用内置动画编辑器制作的动画片段. 人型动画重新定位,动画角色的运动控制可以被所有的角色模型共享,即角色的外观(SkinedMesh)和运动(Animator)是分离的,它们互相组合之后形成最终的动画. 用于编辑动画状态的的简化工作流程,即动画控制器. 方便预览动画片段,以及片段之间的插值过渡. 这使得动画师可以独立

Linux系统简介 、 安装Linux系统 、 RHEL6基本操作

Linux系统简介 安装Linux操作系统 RHEL6基本操作 ################################################# 一.Linux系统简介 1. Linux是一类操作系统 计算机系统=硬件+软件 |--> 软件包括:操作系统.各种应用 Linux操作系统=内核程序+外围程序 2. 常见的三大类操作系统 Unix系列      --> 1970年01月01日诞生,FreeBSD.贝尔实验室.IBM.惠普.Oracle等公司 Windows系列