分类:Unity、C#、VS2015

创建日期:2016-05-19

一、简介

在Unity 5中,Lighting是—种增强场景光照和阴影效果的技术,它可以通过较少的性能消耗使静态场景看上去更真实、丰富,以及更具有立体感,又可以对动态对象进行处理。

早期版本的Unity 4只能对“静态”对象和“动态”对象分别进行处理,称为Lightmapping(光照贴图),但是,Lightmapping不能被用来实时地处理“动态”光照;而在Unity 5中,与Lightmapping相关的功能被重新整合在Unity引擎中并通过【Window】->【Lighting】打开设置窗口,在Lighting窗口中,开发人员只需要简单的操作,就可以制作出平滑、真实且不生硬的光影效果。

Light Probes是一种在运行时将“动态对象”融入“静态场景”的技术,利用它可解决实时处理“动态”光照的问题。其基本原理是:先在场景空间中放置一些采样点来收集其周围的明暗信息,然后在运行时对动态对象邻近的采样点进行插值运算,并将插值结果作用于动态对象上。由于插值运算并不会耗费太多的性能,因此这种方式既能实现动态游戏对象和静态场景的实时融合效果,又不会导致内存资源的极大消耗。

二、全局光照(GI)

使用Unity 5提供的功能实现光照贴图和光影效果前,首先需要掌握两个基本概念:一个是GI,另一个是Realtime GI。

GI(Global Illumination,全局光照)是指世界坐标系(Global)中模型A被光照射后反射到其他模型表面的光(间接光),而不是光源直接照射到模型A的直接光。例如,阳光照在红色的沙发上会导致红光反弹到它背后的墙上,从而使墙看上去也有浅浅的红色光照效果。另一个例子是阳光照射在顶部只有一个小口的房间里,这会导致该房间内的其他部分也被物体反弹(反射)的光照亮了。

下图是一个应用了全局光照(GI)效果的场景,在这个图中,由于反弹光(间接光)的作用,导致整个场景看起来明亮、华丽、更具有立体真实感。

传统的电影技术一般只有直接光(如直射光、点光、……等光源)产生的效果,当实时地模拟间接光产生的效果时,由于模拟间接光需要进行大量的计算,会导致电影播放性能大大降低,因而在实际的电影制作时一般分两步来做这件事:前期拍摄和后期制作。

在Unity中,这种类似于电影前期拍摄的工作称为预处理。预处理是在Unity编辑器中进行的,主要针对静态的对象进行处理,该技术称为Baked GI(也叫Baked Lightmaps),即预先对间接光进行烘培(Bake)处理,烘培的目标是场景中事先被标记为Static的对象;而类似于电影后期制作的工作在Unity中称为Light Probes,即先通过在场景中添加一些采光点(采样点),再在运行时利用采光点的反弹(间接光)效果照亮其周围,从而使整个场景看起来明亮华丽、赏心悦目。

在Unity 5.0之前的版本中,这种将Baked GI和Light Probes组合起来的技术就是全局光照(GI),也叫光照贴图(lightmaps)。换言之,先在Unity编辑状态下对场景中的静态对象进行“预处理”,然后再在运行时利用Light Probes进行后期处理。这样一来,游戏运行的场面看起来就会明亮、华丽、气派。

三、实时GI(Realtime GI)

除了全局光照技术(GI)以外,Unity从5.0开始,又提供了一种新的称为“Precomputed Realtime GI”的技术,其原理类似于5.0以前的早期版本提供的Baked GI技术。不过,虽然该技术针对的仍然是静态的对象(即仅限于对被标识为static的对象进行处理),但是,它和Baked GI最主要的区别是:通过“Precomputed Realtime GI”预处理的结果还可以直接用于运行时(runtime)的动态对象照明。其实现原理是:Unity先把预先烘培(Bake)的信息(位置、方向、颜色、……等属性)保存下来,这样一来在运行时就可以直接通过这些预处理信息对动态对象进行照明处理了。换言之,在Unity 5中,只需要通过“Realtime GI”技术,就可以在运行时大大提高照明渲染处理的性能,而不需要再使用Baked GI+Light Probes进行组合处理了。

四、结论

总之,实现全局照明提供光阴效果时,要么采用方式1(Unity 5之前的早期版本提供的“Baked GI”+“Light Probes”组合起来的技术),要么采用方式2(从Unity 5.0开始提供的“Precomputed Realtime GI”技术)。但是,不能同时采用方式1和方式2,否则很快就会把内存吃光,从而导致非正常的自动关机(这应该是个新的bug,估计后续的版本会解决这个问题)。

再次提醒注意:“Baked GI”和“Precomputed Realtime GI”都是对“静态”的对象而言的,即都需要先将被烘培的对象标识为“Static”才能对其进行照明烘培预处理。而对于动态的对象来说,如果烘培静态对象时使用的是“Baked GI”技术而不是“Precomputed Realtime GI”技术,那么还可以利用预先放置的采光点在运行时通过“Light Probes”实现对动态对象照明;如果烘培静态对象时使用的是“Precomputed Realtime GI”技术,由于在运行时它可以直接对动态对象进行照明处理,因此这种情况下就不要再使用“Light Probes”了。

【Unity】第13章 光照贴图和光影效果的更多相关文章

  1. 【Unity】13.3 Realtime GI示例

    分类:Unity.C#.VS2015 创建日期:2016-04-19 一.简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图和光影效果相关的概念和基本设置办法,这样可避免实际复杂场景中 ...

  2. 【Unity】13.1 场景视图中的GI可视化

    分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 在场景视图中设计不同的场景内容时,可以根据需要勾选相关的渲染选项,以便让场景仅显示其中的一部分或者全部渲染效果. 在这些 ...

  3. unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题

    最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏 ...

  4. 第五章 Unity中的基础光照(3)

    目录 1. 在Unity Shader中实现高光反射光照模型 1.1 实践:逐顶点光照 1.2 逐像素光照 1.3 Blinn-Phong光照模型 2. 召唤神龙:使用Unity内置的函数 @ 1. ...

  5. ASM:《X86汇编语言-从实模式到保护模式》第13章:保护模式下内核的加载,程序的动态加载和执行

    ★PART1:32位保护模式下内核简易模型 1. 内核的结构,功能和加载 每个内核的主引导程序都会有所不同,因为内核都会有不同的结构.有时候主引导程序的一些段和内核段是可以共用的(事实上加载完内核以后 ...

  6. 【Unity】13.2 通过Lighting Window设置相关参数

    分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 Unity 5.3.4的Lighting Window有3个选项卡:Object.Scene.Lightmaps. 二. ...

  7. Linux就这个范儿 第13章 打通任督二脉

    Linux就这个范儿 第13章 打通任督二脉 0111010110……你有没有想过,数据从看得见或看不见的线缆上飞来飞去,是怎么实现的呢?数据传输业务的未来又在哪里?在前面两章中我们学习了Linux网 ...

  8. 【RL-TCPnet网络教程】第13章 RL-TCPnet之TCP服务器

    第13章      RL-TCPnet之TCP服务器 本章节为大家讲解RL-TCPnet的TCP服务器实现,学习本章节前,务必要优先学习第12章TCP传输控制协议基础知识.有了这些基础知识之后,再搞本 ...

  9. 第13章 GPIO—位带操作

    第13章     GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

随机推荐

  1. Android N 多窗口模式,你需要知道的一切

    Android N中最大.最引人注意的变化就是Mutil-window模式.对于一个开发者,我们最关心的就是:Mutil-window模式下怎么配置mutil-window模式.Activity的生命 ...

  2. mysql定义和调用存储过程

    /*定义delimiter为 // */ delimiter // CREATE procedure sp_add3(a int, b int,out c int) begin set c=a+ b; ...

  3. MySQL InnoDB存储引擎

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章是对Innodb存储引擎的概念进行一个整体的概括,innodb存储引擎的 ...

  4. 搭建域服务器和DNS

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/域控制器 概述 因为很多高性能高可用方案都会在域环境中组建,所以了解创建域的一些知识对搭建那些高可用方案很有必要. 环境:wind ...

  5. Module Zero之语言管理

    返回<Module Zero学习目录> 概览介绍 如何开启 管理语言 管理本地化文本 概览介绍 ABP定义了一个健壮的UI本地化系统,它可用于服务端和客户端.它允许在不同的资源中(Reso ...

  6. maven pom中的repository节点配置没有起作用

    问题描述 昨天晚上想用spring boot快速搭建一个web开发的项目,就打开spring boot的doc,按照说明开始尝试.没想到出师未捷身先死,第一步就挂了. 以下是spring boot的配 ...

  7. kindeditor 去掉网络图片上传功能

    kindeditor是一款开源的富文本编辑器,其内容设置均为可配置,使用比较灵活. 去掉网络图片的页面:allowImageRemote: false, 修改上传的图片的name:filePostNa ...

  8. 自定义 checkbox 新玩法 ?

    自定义 checkbox 新玩法 ? 第一步:selector 编写 drawable/selector_checkbox_voice.xml <?xml version="1.0&q ...

  9. junit测试,使用classpath和file 加载文件的区别

    用junit测试发现一个问题,怎么加载配置文件?一直都出现这样的错误 ERROR: org.springframework.test.context.TestContextManager - Caug ...

  10. 【最后的抒情】【离NOIP还有9个小时】

    学了NOIP 大概十一个月左右,中途的插班生.从2015年12月底开始学信息竞赛,在寒假的时候还笑着我还有九个月才考试呢,生竞就只有两个月了.没错我是从生物竞赛转过来的.记得当初写申请的时候,写的理由 ...