分类:Unity、C#、VS2015

创建日期:2016-04-11

一、简介

灯光(Light,也叫光源)是每一个场景的重要组成部分,用于照亮场景和对象,从而让游戏具有自己的个性和风格,比如利用灯光可模拟太阳、燃烧的火柴光、手电筒、炮火或爆炸等。

网格模型和材质纹理决定了场景的形状和质感。灯光则决定了场景环境的明暗、色彩和氛围。每个场景中可以使用—个以上的灯光,合理地使用灯光可以创造完美的视觉效果。

在 Unity 专业版中,所有灯光都可以有选择地投射立方体贴图纹理。立方体贴图 (Cubemap) 在所有方向都会被投射出阴影。

二、灯光类型

Unity 5.3.4中有 4 种灯光。创建灯光的方式同创建其他游戏对象的方式相似:

由于不同类型的光源属性相似,因此这里将其放在一起来介绍。

1、Type

光源类型。

(1)Directional

方向光源。这种类型的灯光可以被放置在无穷远处,可以影响场景中的一切游戏对象,类似于自然界中太阳光的照明效果。

方向光源是最不耗费图形处理器资源的光源类型。

方向灯主要用于模拟室外场景中的太阳光与月光。其会影响场景中所有对象的表面。它们的图形处理器成本最低。方向灯(对支持阴影的平台而言)投射的阴影在下图中得到了深入地解释。

在方向灯具有 Cookie 时,Cookie 会被投影到灯的 Z 轴的中心位置。Cookie 的大小是由Coikie 大小 (Cookie Size) 属性控制的。在检视器 (Inspector) 中将 Cookie 纹理的循环模式设置为重复 (Repeat)。

下图是投影云状 Cookie 纹理的方向灯:

Cookie 是在大型户外场景中快速添加细节的好方法。你甚至可以在场景中慢慢移动灯,制造出云在动的效果。

注意,当使用正向渲染时,会对具有 Cookie 的方向灯禁用阴影。然而,可以通过使用 fullforwardshadows编写自定义着色器 (custom shader) 来启用阴影。

(2)Point

点光源从一个位置向四面八方发出光线,影响其范围(Range)内的所有对象,类似灯泡的照明效果。点光源的阴影是较耗费图像处理器资源的光源类型。

(3)Spot

聚光灯。这种灯光从一点发出,在一个方向按照—个锥形的范围照射,该锥形是由聚光灯角度 (Spot Angle) 和范围 (Range) 界定的。

聚光灯是较耗费图形处理器资源的光源类型。

这种灯只影响它照射区域内的对象,适用于模拟汽车的前灯、手电筒、舞台场景中的射灯、……等照明效果。下图是聚光灯效果:

聚光灯也可以有 Cookie - 锥形光照投射下来的纹理。这很适合用于制作光照穿过窗户的效果。纹理的边缘是黑色非常重要,也就是要启用边框多层贴图 (Border Mipmaps) 选项,而且其循环模式 (wrapping mode) 要设置为拉伸 (Clamp)。

下图是具有一个 Cookie 的聚光灯:

(4)Area

区域光/面光源。该类型的光源无法应用于实时光照,仅适用于光照贴图烘焙 (lightmap baking)),这种光能从各方向照射一个平面的矩形截面的一侧。

区域灯。能从各方向照射一个平面的矩形截面的一侧的灯。矩形是由宽度 (Width) 和高度 (Height) 属性定义的。区域灯仅可于光照贴图烘焙 (lightmap baking) 期间使用,且在运行时对对象没有影响。

区域灯从一个平面的矩形截面的一侧投射灯光。

灯光被投射在灯光范围内的所有对象上。矩形的大小是由“宽度”(Width) 和“高度”(Height) 属性决定的,且平面的法线(例如灯光投射到的一侧)与灯光的正 Z 方向相同。灯光从矩形的整个表面发出,因此受其影响的对象的阴影比受点灯或方向性灯影响的对象的阴影更柔和。

由于光照计算需密集使用处理器,所以区域灯在运行时无法使用,且只能烘焙到光照贴图 (lightmap) 中。

2、Range

范围。用于控制光线从光源对象的中心发射的距离。该属性仅适用于点光源(Point Light)或者聚光灯(Spot Light)。

3、Spot Angle

聚光灯角度。决定锥形的角度。仅适用于聚光灯 (Spot)。

4、Color

颜色。所发射的光的颜色。

5、Intensity

强度。光的亮度。点灯 (Point)/聚光灯 (Spot)/区域灯 (Area) 的默认值为 1。方向灯 (Directional) 的默认值为 0.5。

6、Cookie

该项用于为光源指定拥有alpha通道的纹理,使光线在不同的地方有不同的亮度。如果果光源是聚光灯或方向光,只能指定—个2D纹理。如果光源是一个点光源,该项必须指定—个Cubemap(立方体贴图)。

您可以创建一个含有 alpha 通道的纹理,并将其分配给灯光的 Cookie变量。Cookie 会被灯光投影。Cookie 的 alpha 遮蔽图调节光量,在表面生成亮点和黑点。这种方法非常适合用于大大增加场景的复杂性和氛围。

Unity 中的所有内置着色器都可与每一类型灯光无缝配合。然而,顶点光照 (VertexLit) 着色器无法显示 Cookie 或阴影 (Shadows)。

7、Cookie Size

缩放 Cookie 的投影。仅方向灯 (Directional) 才有此参数。

8、Shadow Type

阴影类型(仅限专业版)。为光源选择阴影类型。可以选择No Shadows(关闭阴影)、Hard Shadows(硬阴影)以及Soft Shadows(软阴影)。

注意软阴影会消耗更多的系统资源。

默认设置下,只有方向光源才可以开启阴影。

如果希望开启点光源或者聚光灯光源的阴影(只有发布为Web版或单机版才支持),可通过菜单栏中的【Edit】→【Project Settings】→【P!ayer】选项,然后在检视器视图中通过Rendering Path(渲染路径)进一步设置Deferred Light类型。

Rendering Path的选项有:

(1)VertexLit

顶点光照。这种光照效果最差,不支持阴影。一般用于配置交叉的机器或受限的移动平台。

(2)Forward

正向着色。能很好地支持光的照射效果,但不支持点光源、聚光灯。

(3)Deferred Lighting

延迟光照(仅Pro版才支持)。支持最佳的光照效果及所有类型光源投射的阴影,但需要一定程度的硬件支持。

9、Strength

阴影强度。阴影的暗度。其值介于 0 和 1 之间。

10、Resolution

分辨率。控制阴影分辨率的质量。有5项可供选择:使用质量没置、低质量、中等质量、高质量、更高质量。

11、Bias

偏移。该项用于设置灯光空间的像素位置与阴影贴图的值相比较时使用的偏移量。取值范围是0~0.5。如果该值过小,游戏对象表面会产生sele-shadow,即物体的表面会有来自于自身阴影的错误显示;如果该值过大,阴影就会较大程度地偏离投影的游戏对象。

12、Softness

柔化。控制阴影模糊采样区的偏移量。仅适用于方向灯 (Directional)。

13、Softness Fade

柔化淡出。控制阴影与摄像机的距离淡出的程度。仅适用于方向灯 (Directional)。

14、Draw Halo

绘制光晕。如果勾选此项,光线的球形光晕将被绘制,该光晕的半径与范围 (Range) 相等。有关更多详细信息,另请参阅光晕文档和渲染设置文档。

15、Flare

耀斑/眩光。可选择指代为将在光的位置被渲染的光斑。

16、Render Mode

渲染模式。此种光的重要性。这会影响光照保真度和性能,请参阅下面的性能注意事项。选项包括:

Auto:自动。在运行时根据附近灯光的亮度和当前的质量设置确定渲染方法。

Important:重要。灯光总是逐个像素被渲染。请仅将此功能用于非常重要的效果(例如,玩家汽车的前灯)。

Not Important:不重要。灯光总是在更快的顶点/对象光模式下被渲染。

17、Culling Mask

剔除遮蔽图。用于有选择地使某些对象组不受灯光影响;请参阅双光照贴图。

18、Lightmapping

光照贴图。该项用于控制光源对光照贴图影晌的模式。

RealtimeOnly:仅实时灯光计算,不参与光照贴图的烘焙计算。

Auto:自动。

Bakedonly:仅作用于光照贴图的烘焙,不进行实时灯光计算。

19、Width、Height

宽度 (Width) (仅适用于区域灯)矩形光照区域的宽度。

高度 (Height) (仅适用于区域灯)矩形光照区域的高度。

三、性能注意事项

灯光有两种渲染方式:顶点光照和像素光照。

顶点光照仅计算游戏模型顶点处的光照,且将光照插入到模型的表面上。

像素光照在屏幕的每个像素处被计算,因此更消耗资源。

一些较旧的显卡只支持顶点光照

尽管像素光照渲染得更慢,但它能够实现一些顶点光照不能实现的效果。法线贴图 (normal mapping)、灯光Cookie (light Cookie) 和实时阴影(realtime shadow) 都是仅能在像素模式下渲染。在像素模式下,聚光灯的形状和点灯高光效果也更好。

在顶点灯光模式下渲染时,以上三种灯的光的效果如下。

下图是顶点光照模式下点光源(Point)的照射效果:

下图是顶点光照模式下聚光灯(Spot)的照射效果:

下图是顶点光照模式下方向灯(Directional)的照射效果:

灯光对渲染速度有非常大的影响 - 因此必须在光照质量和游戏速度之间加以权衡。由于像素灯光比顶点灯光耗费的资源要多得多,因此Unity仅仅逐像素渲染需要“最亮的光”时的效果。可在质量设置中为网络播放器和单机版编译目标设置像素灯光的实际数量。

您可以使用渲染模式 (Render Mode) 属性来明确地控制光是否应渲染为顶点或像素灯光。默认情况下,Unity将基于对象受光影响的程度自动将光分类。哪些灯光实际上被渲染为像素灯光是由具体的对象决定的。

【Unity】4.6 灯光的更多相关文章

  1. Unity实现刺客信条灯光的思路探究

    灯光需求 类似刺客信条的开场CG动画,场景中打着酷炫的灯光,玩家在场景中行走可以感受到灯光很真实. 参考视频:http://www.iqiyi.com/w_19rqytbmvt.html 运行环境 安 ...

  2. Unity塔防游戏开发

    Unity3D塔防开发流程 配置环境及场景搭建编程语言:C#,略懂些许设计模式,如果不了解设计模式,BUG More开发工具:Unity3D编辑器.Visual Studio编译器开发建议:了解Uni ...

  3. Unity光照与渲染设置学习笔记

    学习了一下unity中有关光照和渲染的一些设置,现在才明白之前遇到的一些问题只是没有正确设置而已. unity不同版本的光照设置会有一些差异,而且可以调节的参数非常多,这里只记录一些重要的参数和使用方 ...

  4. Unity优化方向——优化Unity游戏中的图形渲染(译)

    CPU bound:CPU性能边界,是指CPU计算时一直处于占用率很高的情况. GPU bound:GPU性能边界,同样的是指GPU计算时一直处于占用率很高的情况. 原文:https://unity3 ...

  5. Unity Lighting - Choosing a Lighting Technique 选择照明技术(一)

      Choosing a Lighting Technique 选择照明技术 https://unity3d.com/cn/learn/tutorials/topics/graphics/choosi ...

  6. Unity Lighting - Lighting overview 照明概述

    Lighting overview 照明概述     In order to calculate the shading of a 3D object, Unity needs to know the ...

  7. Unity3D ShaderLab 静态贴图光照模型

    Unity3D ShaderLab 静态贴图光照模型 其实在unity的光照模型中,我们可以把光照讯息烘培进入一个2D贴图,来实现着色器的光照效果. 下面是在unity中关闭灯光和打开灯光的对比效果. ...

  8. Unity3D学习笔记(二):个体层次、绝对和局部坐标、V3平移旋转

    Directional Light:平行光源/方向性光源,用来模拟太阳光(角度只与旋转角度有关,与位置无关) Point Light:点光源,用来模拟灯泡,向四周发散光源 Spotlight:锥光源/ ...

  9. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights 既上一篇分享了中文字幕的摄像机介绍Cameras后,本篇分享一下第2个已完工的 ...

  10. 从Unity学UE(一)之蓝图类的使用----制作一个可控灯光

    转自:http://blog.csdn.net/u011707076/article/details/44171829 首先申明,本文章内容适合有Unity引擎基础的童鞋享用,如果不了解Unity引擎 ...

随机推荐

  1. Yii2框架bootstrap样式理解

    Yii2框架默认採用了bootstrap作为CSS风格,各种视图类组件都如此.之前一直採用默认风格,并在必要的时候加入或者改动一下class来达到目的.但在改版Yii1.1的orange项目时.发现之 ...

  2. php Socket表单提交学习一下

    <?php //发送请求指定的页面 $file = "1.php"; $filename = "gitignore.txt"; //文件名 $path = ...

  3. 转:Ogre的SceneManager分析

    SceneManager分析 场景管理主要工作包括以下几点: 1.可移动.不可移动和可渲染物体的创建删除. 2.场景查询. 3.渲染队列. 4.动态阴影. 一. 场景对象创建 场景中的所有对象,包括可 ...

  4. ELK 实现 Java 分布式系统日志分析架构

    日志是分析线上问题的重要手段,通常我们会把日志输出到控制台或者本地文件中,排查问题时通过根据关键字搜索本地日志,但越来越多的公司,项目开发中采用分布式的架构,日志会记录到多个服务器或者文件中,分析问题 ...

  5. 利用组策略API 编辑GPO(Group Policy Object)

    用windows自带的GPO Editor编辑修改,然后利用注册表监控器regFromApp监视注册表的改动,就知道某个策略修改了注册表的哪个字段了. 下面是禁止U盘访问的例子:   #include ...

  6. easyui的日期控件

    1.日期控件只能点击控件进行选择, 不可手动编辑input框中的日期内容 editable="false" 2.日期控件既不可点击, 也不可手动编辑input框中的日期内容 dis ...

  7. socket 995 错误 boost

    这个错误的中文解释是:由于线程退出或应用程序请求,已中止 I/O 操作. 最近几天学习boost asio 在抄官方的一个实例代码时遇到 了,这个错误搞了我三天才解决,就是在一行代码中少了一个 s 所 ...

  8. 要成为linux网站运维工程师必须要掌握的技能

    要成为linux网站运维工程师必须要掌握的技能 2015-07-27 发表 老男孩点评:感谢此文的作者,写的非常到位,值得入门的初学者认真看看 我是一名linux运维工程师,确切的说是网站运维工程师, ...

  9. linux达人养成计划学习笔记(三)—— 帮助命令

    一.帮助命令man 1.基本使用方法: man 命令 #获取指定命令的帮助选项: -f 查看命令拥有的帮助级别 相当于whatis,也可以使用whereis来查询 -num 调用对应等级的帮助文件 - ...

  10. CheckStyle检查规则中文翻译

    本文主要介绍CheckStyle 的各个规则配置项目,这个版本的CheckStyle将样式规则分为了以下十六种类型共138条规则: 官方文档地址:http://checkstyle.sourcefor ...