分类: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. 查询后n条记录

    查询后n条记录 SELECT * FROM tb_stu ORDER BY id ASC LIMIT n

  2. win10更新后无法远程,报 credssp加密oracle修正

    答案都在图里,看不清就浏览器放大观看 打开开始菜单,搜索“编辑组策略”  进入

  3. mysql workbench图形化mysql管理工具

    MYSQL官网也推出了针对Linux的图形化的连接工具-MySQL Workbench.MySQL Workbench不仅仅是一个简单的MySQL客户端.简而言之,Workbench是一个跨平台的 ( ...

  4. Echart示例

    echart.html:  需要注意js文件加载的顺序 <!DOCTYPE html> <html lang="en"> <head> < ...

  5. ios中网络请求缓存

    #import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" @protocol NetWorkde ...

  6. php.ini 中文版

    作者:金步国 版权声明 本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布. 无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失. 自由使用: ...

  7. 彻底解决asp.net mvc5.2.2:vs2013 cshtml视图文件报错(当前上下文中不存在名称“model”,ViewBag,Url)

    最近遇到一个奇葩的问题,在vs2013下cshtml视图文件报错,出现当前上下文中不存在名称“model”,ViewBag,Url等等),在视图中也没有智能提示了,用@model声明视图的model类 ...

  8. 【IL】IL入门

    1.IL基本介绍 1.1 CLR介绍 在介绍IL之前,先说一说CLR.CLR的全称Commen Language Runtime 公共语言运行时.因为CLR的存在,使得多语言开发成为可能.下面给出一张 ...

  9. 在Linux上rpm安装运行Redis 3.0.4

    http://www.rpmfind.net搜索redis,找到redis3.0.4的rpm源选做 wget ftp://fr2.rpmfind.net/linux/remi/enterprise/6 ...

  10. android studio Gradle Build速度加快方法

    设置离线编译就可以解决这个问题了.如下图所示: