分类: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. HTML和CSS经典布局5

    如下图: 需求: 1. 如图 2. 可以从body标签开始. 3. 页面内容高度设置高点,把窗口的滚动条显示出来,但是busy indicator不滚动. <!DOCTYPE html> ...

  2. Maven和Gradle对比

    Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天.笔者有幸见证了Maven的没落和Gradl ...

  3. 【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片

    本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp ...

  4. [视频],花一分钟来看看Worktile是如何为团队协作而生的

    团队协作,我们想的更深.更远.更多,花一分钟来看看我们特别奉献的故事,然后去注册一个账号,邀请小伙伴一起来工作,你会体会Worktile才是真正懂你的协作方式. 我们想做的百年公司还有很多的路,这一站 ...

  5. Objective-C 工厂模式(下) -- 抽象工厂模式

    相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...

  6. Java异常内容总结

    在程序开发中,可能存在各种错误,有些错误是可以避免的,而有些错误却是意想不到的,在Java中把这些可能发生的错误称为异常. Throwable类是所有异常类的超类,该类的两个直接子类是Error和Ex ...

  7. Js replace() 学习笔记

    最近捣鼓着学习Js,发现replace()真的很有用,替换功能杠杠的棒. 接下来看看我遇到的问题: 有两个随机给出的字符串,字符串1'xxxxxx',字符串2'====T'(这两个用作示例,其他为随机 ...

  8. Uiautomator 2.0之BySelector类学习小记

    1. BySelector与By静态类 1.1 BySelector类为指定搜索条件进行匹配UI元素, 通过UiDevice.findObject(BySelector)方式进行使用. 1.2 By类 ...

  9. jarsigner签名报错Invalid keystore format

    由于之前在魅族市场的APK包都不是自己上传的,而是魅族从其他安卓市场帮拉去过来了. 所以需要我们自己去认领APK包. 这个时候就需要按照魅族给的未签名测试包给重新签名然后提交审核了. 1:看完以下说明 ...

  10. XE1:使用SSMS创建Extended Events

    Extended Events 用于取代SQL trace,是SQL Server 追踪系统运行的神器,其创建过程十分简单. 一,创建Extended Events的Session step1,打开N ...