UDK光照教程

来源:互联网 发布:真两性畸形 知乎 编辑:程序博客网 时间:2024/05/21 15:41

今天我们教大家UDK完成光照教程,这里讲的很详细,分章节描述的。希望有更多的会员来学习。

Unreal Engine 3.0之所以能够制作出令人眼花缭乱的效果,其中一个重要的因素便是它的光照系统。自过去的版本以来,光照系统一直在变化,变得越来越灵活强大。在本章中,你将了解UnrealEd的光照系统,以及如何通过创建和控制光源,来制作各式各样的效果。

光源放置

在关卡中放置光源非常简单,只需要按住L键,同时在视口中单击某个表面即可。然而,要在场景中获得逼真的光照效 果绝不是简单的单击鼠标就可以完成的。你还需要大量思考这些问题:在关卡中哪些地方需要放置光源,在gameplay中这 些光源要如何表现。还要想想光线从何而来,是阳光,还是附近的灯光?尽量避免在关卡中随意摆放光源。

同时,也不要认为正确的做法就是仅仅将光源放置在现实世界中应该放置的地方。Unreal Engine不会计算反射光线或 环境光线,所以,你需要使用工具来模拟这些效果。在本章中,你将在一个小关卡中制作光照效果。通过这些练习,你可 以了解如何通过各种使用光源的方法,来获得各式各样的效果。



图8.1——关卡中放置了若干灯源,每一个都发挥了各自的作用。

创建光源简述

简单地放置光源还不能使你的游戏真正地“亮”起来。要照亮你的关卡,最重要的任务之一就是制作光照效果。无论你 是移动一个光源,还是简单地改变它的一些属性,只要你对关卡的光照效果稍做改动,你就得重新制作关卡的光照效果。 实际上,只需要单击界面中工具栏里的Build Lighting(构建光照)按钮就可以了。不过,场景中的光照效果越复杂,这 个过程就越长。还好,Unreal Engine 3.0可以在需要重新制作光照效果时提醒你,甚至在你启动In-Editor Game(编辑器 中运行游戏)时直接告诉你。



图8.2——In Editor Game(编辑器中运行游戏)给出需要重新制作光照效果的警告。

在我们正式开始了解光源及其工作原理之前,我们先来看看一个简单的关卡中的光照。在下一指南中,你将为一个房间 制作光照。这个任务开始看起来是非常 简单的。不过,我们会深入一些,尽量获得比较自然的效果。请注意,我们的结果 关注质量甚于游戏的性能。如果在更大的关卡中,我们会使用占用系统资源更少的 方法。在下一个系列制作地牢关卡的指 南中,我们会更加注重游戏的性能。如果你已经使用过Unreal的光照系统,想要了解一些理论,请跳过前五个指南。

指南8.1——光照初级教程一: 放置

1. 运行UnrealEd,打开配套DVD本章文件夹中的LampTest关卡。它是一个空房间,房间中央放置了 一个电灯静态网格物体。当前,透视视口设置为Lit(点亮),所以你只能看到黑色背景中的灯罩。

2. 选中透视视口,按G键进入游戏模式。这时,视口中显示的关卡就是游戏中呈现的模样。请注意 灯罩看上去似乎在发光,但实际上它并没有。

再次按G,退出游戏模式。



图8.3——在游戏模式中,您只能看到灯罩。

注意: 在游戏模式中,看不见任何actor!如果在关卡中丢失了actor,按G键查看是否处于游戏模式 中。

3. 首先,创建一个简单的光源,以熟悉创建方法。在透视视口中的任意位置单击右键,选择Add Actor > Add Light (Point)。于是,在单击右键的位置,创建了一个光源。这时,您可以注意到关卡中有了一些基本 的光照效果。



图8.4——光源一离开地面,就会照亮关卡。

注意: 您可能需要使用Translation(平移)控件将光源移开地面,才能看到效果。

4. 使用Translation(平移)控件上下左右移动光源actor,您将看到在移动光源的同时,灯罩和底 座在房间里投下的阴影的位置也会随之改变。它们称为体积阴影,是动态(移动)阴影的一种,可以清楚地显示阴影在关 卡中的位置。

5. 如果现在测试关卡,您会被警告需要重建光照效果。移动光源actor,使它在墙上投下一个有趣 的影子,单击工具栏中的Build Lighting(构建光照)图标按钮。



图8.5——重建的光照效果使阴影变得难看了。

您可以看到现在阴影变得不好看了。这是因为它们转换成了预计算阴影(precomputed shadow),或者说是阴影贴图。 这是另外一种阴影,可能不像刚才的体积阴影那么精确,但它们有良好的性能。因为它们实际上是存储的纹理,在 gameplay的过程中,不需要进行计算。

6. 使用Translation(平移)控件,在前视口和俯视口中调整光源actor的位置,使它们处于灯泡网 格的中央。通过actor中央的红色十字准线,可以测量它的位置。



图8.6——如图将电灯actor放置在灯泡中央。

您可以看到,一旦您移动了光源actor,阴影就会迅速变回阴影体积,以便您观察阴影是如何放置的。一旦您将光源 actor移到灯泡网格中,关卡又会回到黑暗状态。这是因为如果您将光源放在一个盒子里,它会在灯泡内产生阴影!现在也 不必担心,在下一指南中,我们会进行处理。

7. 保存关卡。

<<<< 指南结束

指南8.2——光照初级教程二: 设置属性

继续上一指南。如果您没有学完指南8.1,请在继续之前完成学习。在上个指南中,我们创建了光源;现在,我们将调 整它的一些属性。

1. 在一个正交视口中,选中您前面放置好的点光源actor。按F4键打开属性窗口,展开Light标签下 的LightComponent(光源分量)目录,您将看到光源的属性列表。



图8.7——点光源actor的属性窗口。

2. 去掉CastShadows(投射阴影)属性的勾选。因为房间中没有其它可以投下阴影的物体,所以要 使光源的光透射出灯泡网格,最简单的方法就是关闭该属性。

您会发现一旦关闭了该属性,房间马上就被照亮了。



图8.8——房间马上就被照亮了。

3. 我们需要改变灯光的颜色,使它更加真实地反映出灯罩的颜色。单击LightColor(光源色)属性 旁边的白色横条,您将看到它的右边出现了两个按钮:通过第一个按钮您可以打开颜色选择器(颜色选择色),通过第二 个按钮您可以在视口中选择一种颜色。

单击带有箭头的小按钮,以便在视口中选择一种颜色。在透视视口中,单击灯罩中央的泛白的横带。根据您的喜好,您 也可以打开颜色选择色将颜色调浅一些,这样显得更为真实。我们将R、G、B值分别赋为243、218和186。

4. 将FalloffExponent(衰减指数)值设置为3。这样,灯光产生的阴影会变得更加生动。



图8.9——FalloffExponent(衰减指数)值设置为3后,阴影更为生动。

5. 现在,我们已经完成了灯源的属性设置。不过,最好将光源actor的图标缩小,才能更方便地将 其它光源放入灯罩中。在光源的属性窗口中,展开Display标签,将DrawScale(绘制缩放)设置为0.2或其它您想要的值。 这样可以将光源actor的图标缩小到一个便于控制的大小。



图8.10——通过调整DrawScale(绘制缩放),图标的大小更加易于管理了。

6. 单击Build Lighting(构建光照)按钮,重建光照效果。您会看到落在房间角落的阴影变得矮小 模糊了。我们过会儿再进行处理。

7. 保存关卡。

<<<< 指南结束

跟着指南我们继续学习,以下是光源的一些效果。

指南8.3——光照初级教程三: 效果光源

继续上一指南。如果您没有学完指南8.1和指南8.2,请在继续之前完成学习。现在,我们要制作从灯罩顶部和底部透出 的锥形灯光。

1. 并不是您创建的所有光源都是点光源。您还可以选择很多其它的光源类型,要获得其它类型的光 源,您需要使用Actor Classes Browser(Actor类浏览器)。

在主菜单中,选择View > Browsers > Actor Classes Browser。

2. 在Actor Classes Browser(Actor类浏览器)中,找到Light actor(光源actor),单击左边的 “+”扩展按钮打开它。然后,您将看到列出了各种类型灯源供您选择。本章后面将介绍每一种灯源类型。现在,单击 SpotLight actor(聚光光源actor)(不要展开它),然后关闭Actor Classes Browser(Actor类浏览器)。



图8.11——在Actor Classes Browser(Actor类浏览器)中,显示了SpotLight actor(聚光光源actor)。

3. 在透视视口中,右键单击关卡中的地板,在右键菜单中选择Add SpotLight Here(在此添加聚光 光源)。地板上将出现一个新的SpotLight actor(聚光光源actor)。



图8.12——新的SpotLight actor(聚光光源actor)将出现在您单击的位置上。

4. 选中新建的聚光光源,按F4打开它的属性窗口。将它的OuterConeAngle(外锥角)属性设置为40 ,InnerConeAngle(内锥角)设置为22,后一个设置将使光源的光亮点变大。最后,将它的DrawScale(绘制缩放)属性设 置为0.2,缩小图标的尺寸,以方便放置。

5. 在俯视口和侧视口中,使用Translation(平移)控件,将光源直接放置在灯静态网格物体的中 央。然后,将光源向上移动,使其形成的外圆锥光线刚好穿过灯罩底部,如图所示。这样,光源放在了靠近灯罩顶部、灯 泡上方的位置,这对形成阴影非常重要。



图8.13——在侧视口中,将聚光光源如图进行放置。

6. 将聚光光源的LightColor(光源色)属性设置为乳白色,与前面PointLight(点光源)设置的颜 色近似,可以将R、G、B的值分别设置为243、219和188。将FalloffExponent(衰减指数)的值设置为3。

7. 在侧视口中,使聚光光源处于选中状态。按住Alt键不放,拖动聚光光源产生一个副本,并将副 本向下拖至灯泡网格表面上方的位置。

8. 使聚光光源仍处于选中状态,按F4打开属性窗口。展开Movement(移动)标签,展开下面的 Rotation(旋转)目录。将Pitch(斜度)的值从-90度改为90度,这样,光线将直射到天花板。然后,使用Translation( 平移)控件将新建的光源沿Z轴垂直移动,使它形成的外圆锥光线刚好穿过灯罩顶部。



图8.14——新的聚光光源将指向正上方。

9. 使用您已经学过的技巧,如下设置新建聚光光源的属性:

  • CastShadows(投射阴影): 否(不勾选)
  • FalloffExponent(衰减指数): 5
  • InnerConeAngle(内锥角): 10

重建光照效果,保存关卡。

<<<< 指南结束

指南8.4——光照初级教程四: 环境光照

继续上一指南。如果您没有学完指南8.1至指南8.3,请在继续之前完成学习。现在,我们要添加一些环境光线,使阴影 不致显得全黑。同时,也使人产生了幻觉:正如在现实世界中一样,关卡中的光线也会在周围环境中产生漫射。

1. 打开Actor Classes Browser(Actor类浏览器),展开Light actor(光源actor)。单击 SkyLight(天空光源)。然后,在透视视口中,在关卡地板上单击右键,选择Place SkyLight Here(在此放置天空光源) 。



图8.15——天空光源的初始效果看上去差强人意。

您的场景立刻就面目全非了。不用担心,这是正常的。请注意SkyLight actor(天空光源actor)的位置无关紧要。

2. 双击SkyLight actor(天空光源actor),打开属性窗口。设置以下属性:

  • Brightness(亮度): 0.15
  • LightColor(光源色):
    • R: 255
    • G: 249
    • B: 206

3. 这样,可以修复一些变得面目全非的场面。不过,请注意电灯网格看上去还是很黑的。要解决这 个问题,我们要通过另一个光照通道来使用另一个环境光源。本章后面将更加深入地介绍光照通道。



图8.16——通过新的设置,房间看上去自然多了。

选中SkyLight(天空光源),在它的属性窗口,展开LightingChannels(光照通道)目录。取消Static(静态)通道的 勾选。如果您凑近了观察灯网格,您将看到它变得更黑一点了,因为SkyLight(天空光源)不再对它造成影响。

4. SkyLight(天空光源)仍处于选中状态,按住Alt键不放,使用Translation(平移)控件创建一 个副本。SkyLight actor(天空光源actor)的位置无关紧要。打开SkyLight(天空光源)副本的属性窗口,这一次将它的 Static(静态)通道设置为是(勾选),将BSP通道设置为否(不勾选)。这将使得SkyLight(天空光源)副本仅仅对灯网 格造成影响。



图8.17——第二个SkyLight(天空光源)将只会影响灯网格。

最后,将亮度值设置为1.2,灯座变亮多了。

5. 现在,我们要制作一些从灯座漫射到底座上的光线。制作出的效果非常精妙,不过在制作过程中 ,可以向您展示一些创建光源的新技巧。

将透视视口拖动至靠近灯的位置。然后,按住Ctrl-L键不放,单击灯体的亮红色区域,将在同一位置创建一个新的 PointLight(点光源)。该光源的颜色自动设置为单击区域的颜色,亮度值和辐射值都较低,为制作漫射光线开了一个好 头。

6. 选中新建的PointLight(点光源),设置其属性如下:

  • DrawScale(绘制缩放): 0.2
  • Radius(半径): 64
  • Static(静态) (光照通道(LightingChannel)): 否(不勾选)

7. 将新的光源放置于底座表面的一个边角上,稍微靠近灯座,如图所示。然后,按住Alt键不放, 使用Translation(平移)控件,在底座另外三个边角的相同位置上创建新的光源。请记住在两次复制之间,要放开Alt键 。



图8.18——漫射光源应放在底座的边角上。

8. 重建光照效果,保存关卡。

<<<< 指南结束

接下来要讲的是清楚阴影部分,注意观察。

指南8.5——光照初级教程五: 清除静态阴影

继续上一指南。如果您没有学完指南8.1至指南8.4,请在继续之前完成学习。最后一步是整理房间中的杂乱阴影。

1. 在透视视口中,单击房间地板,选中其表面。请记住如果看不出表面被选中,您可能处于游戏模 式,可以按G键退出该模式。选中地板后,按Shift-B选中房间中的所有表面。

2. 按F5打开Surface Properties(表面属性)窗口。在Lighting(光照)区域框中,您可以看到 Lightmap Resolution(光源贴图分辨率)默认设置为32。您可能回想起在《第四章:画刷的世界》中讲过,将该属性设置 为更小的值可以使阴影变得清晰,但是会增加创建的时间,并占用更高的内存。



图8.19——Surface Properties(表面属性)窗口。

3. 将Lightmap Resolution(光源贴图分辨率)值设置为4,然后重建光照效果。您可以注意到,建 造时间变长了,但是房间里的阴影变清晰了。如果您有兴趣,可以尝试将值设为1,不过结束后放过您的系统吧;您可能再 也不会做这样的事了。建造时间真是出奇地漫长!

4. 对Lightmap Resolution(光源贴图分辨率)的试验结束了,将它的值设置回4,重建光照效果, 保存关卡。



图8.20——当Lightmap Resolution(光源贴图分辨率)设置为4时,创建阴影的时间变长了,但效果好多了。

<<<< 指南结束

光照概念

现在您已经初步认识了光照世界。您还需要知道一些概念,以助于更深刻地理解Unreal光照系统背后的运行原理。这些 原理包括顶点光照(per-vertex lighting)和光照细分(lighting subdivision),光照贴图(light map)和阴影贴图 (shadow map),以及静态光照(static lighting)和动态光照(dynamic lighting)。

光照贴图与阴影贴图

在gameplay过程中,如果时常计算关卡中的所有光照和阴影,使会性能到达崩溃的边缘。为了解决这个问题,对于所有 在gameplay中静止的物体和光源,Unreal都为会它们产生光照贴图和阴影贴图。因为这些物体是静止的,只需要计算一次 光照,并将光照贴图和阴影贴图(分别为两种纹理)应用在物体上就可以了,无需更多计算。

光照贴图是一种纹理,生成它的数据来自于对所有照射在某个表面或某个静态网格物体上的光源的计算。这样做的好处 是,因为多个光源照射在一个表面上,如果提前进行了计算并“烘焙”成了光照贴图,性能只会略有下降。请注意,即使 在表面应用了光照贴图,在gameplay中仍需要计算法线贴图信息和高光信息。



图8.21——关卡BSP的光照贴图。

阴影贴图和光照贴图非常相似,不过它存储的不是照明数据,而是阴影数据。阴影贴图和光照贴图有一个明显的区别: 一张光照贴图可以定义多个不同光源的光照情况,但是对于一个特定的表面,每个光源都有它自己的阴影贴图。如果多个 光源照射到一个表面,由它们各自的阴影贴图组合成最后的结果。

在Unreal Engine 3.0中,可以与世界几何体一样对静态网格物体应用阴影贴图。对静态网格物体的阴影处理使用的是 光照细分数据,后者在后面会介绍。不过,使用阴影贴图是在静态网格物体上处理阴影更加精确的一种方法。要注意的是 ,阴影贴图占用更多内存,因而导致性能下降。再加上每个照射在静态网格物体上的光源都需要产生一张阴影贴图,这就 是为什么大量使用这种方法会致使游戏性能下降的原因。



图8.22——左边的关卡中只有一张光照贴图。右边相同的关卡既有光照贴图,又有阴影贴图。

静态和动态光照

使用UnrealEd时,您会发现“动态”和“静态”两个词有很多不同的含义。不过,在本章中,所谓的静态光源是指在 gameplay中静止的光源,也就是说,这它们的bMovable(可移动)属性设置为false;动态光源是指可以移动的光源,即它 们的bMovable(可移动)属性设置为ture。

当静态光源照射在一个静止表面上时,光照是静态的,可以事先计算并存储在光照贴图和阴影贴图中。静态光照提供关 卡中的照明的主要环境。您可以用很多静态光源制作出逼真的效果,而不用考虑开销。

与静态光照相反,在光照关系中,无论光源还是被照物体是动态(移动的)的,光照都认为是动态的。动态光照不能预 先计算,只能在运行时进行实时计算,需要相当的处理能力。正如您所预料的,必须非常谨慎地使用动态光照场景,避免 带来严重的性能问题。

不过,这并不是说动态光照是有害的。有时,必须要使用动态光照才能达到需要的效果。另外,Unreal也提供了一些特 殊的条件,如光源环境和光源功能(本章后面会进行介绍),以便使用动态光照时提高效率和灵活性。



图8.23——动态光照(左)比静态光照(右)清晰多了,但是需要更强的处理能力。

顶点光照和光照细分

这个概念只适用于静态网格物体的光照。在Unreal Engine 3.0之前的版本,静态网格物体上的光照只能使用顶点光照 实现。简单地说,顶点光照是指如果一个三角形的一个或多个顶点处于光照之中,则该三角形表现光照。在只有一个顶点 处于阴影中的情况下,通常会导致阴影不规则。顶点光照产生的阴影看上去很一般,并且对于边数较少的多边形网格物体 这种阴影效果不好。

在Unreal Engine 3.0中,静态网格物体上面的阴影使用了光照细分。也就是说,将每个多边形分为多个小多边形,对 照射在每个小多边形上的光线进行计算。最终的光照效果综合了对所有小多边形的计算。当然,这种计算复杂多了。不过 ,它对关卡建造时间的影响远远大于对gameplay性能的影响。

光照细分的真正好处在于可以改变小多边形的数量,这些小多边形是用于计算每个多边形上的光照的。小多边形数量越 多,阴影会越清晰,创建阴影所需的计算也越多。



图8.24——顶点光照只关注顶点是否受照射,光照细分则考虑了每个小多边形上的取样点,以求更精确的结果。

光源类型

在UnrealEd中,可以使用很多种光源。如果您使用过3D动画软件(如3ds Max或Maya)中的光照场景,您会觉得使用这 些光源简直是轻车熟路。就算对于完完全全的新手,凭直觉也能对光源进行选择,并辨别出在特定情景下应该使用哪种光 源。光源主要有四种类型:点光源、聚光光源、定向光源和天空光源。后面我们会分别介绍每一种光源。

前三种光源(点光源、聚光光源和定向光源)都各有两种子类型:开关光源和移动光源。也就是说,您可以创建一个普 通的点光源,一个开关点光源或一个移动点光源。我们首先介绍这些子类型的主要区别,然后介绍光源的每个大类。

可触发光源

可开关是指光源在gameplay中可以打开,也可以关闭。这是通过Kismet中的Toggle(触发)序列对象制作的。关于如何 使用Kismet打开或关闭光源的更多信息,请参见Kismet一章。开关光源发射出的光线不能用在光照贴图中。

应该提醒的是,开关光源的性质是由光源的属性窗口中的bStatic(静态)属性定义的。可开关光源的该属性设置为否 。不过,这并不是说您可以任意创建一个标准光源,通过改变它的bStatic(静态)属性使它成为一个开关光源。这样做会 引入不稳定因素。

可移动光源

顾名思义,移动光源是指在关卡中可以移动的光源。它包括沿一条路线运动的点光源,以及绕某一点转动的聚光光源, 等等。这些运动是由Matinee控制的。关于Matinee的更多信息,请参见Matinee一章。和开关光源一样,移动光源发射出的 光线也不能用在光照贴图中。

光源能否移动是由它的bMovable(可移动)属性决定的。不过,不能任意创建一个标准光源,通过改变它的bMovable( 可移动)属性使它成为一个移动光源。这样做会引入不稳定因素。

注意: 在写本章时,要使一个移动光源能够在Matinee中动画化,光源的物理属性必须设置为 PHYS_Interpolating,该属性在光源的运动目录下进行设置。

点光源

点光源从一个点向四周发射光线,就像灯泡一样。这是一种最常用的光源,特别是在室内关卡中。光源的半径属性定义 了光线从actor的位置开始的传播距离。点光源可用于标准静态模式(PointLight)、可触发模式(PointLightToggleable)和 可移动模式(PointLightMovable)。



图8.25——点光源、可触发点光源和可移动点光源的图标。



图8.26——由点光源actor发射的光线示例。请注意所有的墙壁都被照亮了。

聚光光源

聚光光源是指一个点光源通过一个圆锥发射出光线,就像现实生活中的聚光灯或手电筒一样。可以通过InnerConeAngle (内锥角)和OuterConeAngle(外锥角)属性控制圆锥的打开或收拢。

当需要使光线向同一个方向聚拢时,可以使用聚光光源,例如探照灯、手电筒或其它的光源。SpotLight actor(聚光 光源actor)也通过半径属性定义其发射的光线的距离。和点光源相同,SpotLight actor(聚光光源actor)可用于标准静 态模式(SpotLight)、可触发模式(SpotLightToggleable)和可移动模式(SpotLightMovable)。



图8.27——聚光光源、可触发聚光光源和可移动聚光光源的图标。



图8.28——聚光光源actor发射的光线示例。

定向光源

定向光源用于模拟非常遥远的光源,如太阳,通常只用于室外场景。计算定向光源时,不是认为光线从一个点发射出来 ,而是认为从一个理论上无穷大且无穷远的平面发射出来。这意味着所有从光源发出的光线都是平行的,形成的阴影也是 对等的,而不像点光源造成发散的阴影。

DirectionalLight actor(定向光源actor)只能用于标准静态模式(DirectonalLight)和可触发模式 (DirectionalLight_Togglable)。由于发光面无穷大且无穷远,所以它的位置无关紧要,只有照射角度是需要关注的。



图8.29——定向光源和可触发定向光源的图标。



图8.30——左图中的阴影是由点光源产生的,右图中的阴影是由定向光源产生的。请注意定向光源产生的阴影的对等性。

天空光源

SkyLight actor(天空光源actor)从理论上的一上一下的两个半球面发射出光线。计算时将这两个半球面当作无穷大 ,也就是说,不能将某个actor“移出”半球。球体光源用于向关卡提供环境光线,防止阴影变成完全漆黑。每个半球都有 其颜色值和亮度值,您可以将上半球面的亮度调亮而将下半球面的亮度调暗,以模仿同时从多个表面散射的光线。球体光 源不存在开关模式和移动模式。



图8.31——该图表模拟了SkyLight(天空光源)的照射方式



图8.32——Actor Classes Browser(Actor类浏览器)中列出的所有可用光源。

我们将开始第二系列的指南。在这些指南中,我们将对更类似于游戏中的场景----一个小地牢进行光照处理。如果您没 有使用过光源,强烈建议您学习完本章开头的指南。

指南8.6——照亮地牢,第一部分:光源放置

1. 运行UnrealEd,打开配套DVD本章文件夹中的Light_Demo地图。开始,我们将在场景中放置最初 的光源。透视视口看上去几乎是全黑的,这是因为目前处于Lit(点亮)模式。在继续之前转换到UnLit(未点亮)模式。

2. 打开Actor Classes Browser(Actor类浏览器),展开Light > PointLight,选中 PointLight Movable(可移动点光源)。然后,在透视视口中,右键单击地面,在右键菜单中选择Place PointLight Movable Here(在此放置可移动点光源)。



图8.33——右击后PointLight Movable(可移动点光源)出现了。

完成后,将透视视口设置为Lit(点亮)模式。

3. 使用Translation(平移)控件将PointLight Movable(可移动点光源)移动至火把上方的粒子 发射器处。以后,该光源就是火把光源了。



图8.34——火把光源应该放置于火把静态网格物体的上方。

4. 回到Actor Classes Browser(Actor类浏览器),展开Light,选中SpotLight actor(聚光光源 actor)。单击右键并在地板上放置一个SpotLight actor(聚光光源actor),然后使用Translation(平移)控件将它移 动到洞顶的网格下方。以后,该光源即头顶光源。



图8.35——将头顶光源移动到洞顶的网格下方。

5. 现在我们创建第三个光源。按住L键不放,单击牢房地面,新建一个PointLight actor(点光源 actor)。使用Translation(平移)控件将光源移动至牢房墙壁上的白色光源前面。以后,该光源即墙壁光源。



图8.36——墙壁光源应该放置于牢房中的灯前面。

6. 重建光照效果,保存关卡。

<<<< 指南结束

光源的基本属性

随着您在UnrealEd中越来越多地使用光照,您会很快发现有很多种属性都可以编辑光源的外观和表现。本节将向您介绍 最常用的属性,而不是用各个参数间的细微差别对您进行狂轰滥炸----这些您可以通过自学来掌握。光源的所有属性和定 义列表包括在附录中。

我们首先介绍关卡的所有光源都具有的常规属性,然后再介绍特殊光源类型所具备的专用属性。

常规属性

bEnabled(启用)

bEnabled属性定义了光源是打开或关闭。您可以将它看成光源的开关。除了开关光源,其它光源该属性一般都设置为是 。对于开关光源,该属性的激活与停用控制了光源的开与关。

Brightness(亮度)

顾名思义,该属性控制光源的强度。要注意使用过高的值会使关卡“褪色”。该值可以在Matinee中进行动画处理,使 光源淡入淡出或闪烁。

LightColor(光源色)

该属性的含义也非常明显,它使您可以改变光源的色调、饱和度和其它值。通过一个标准的Windows颜色选取器窗口可 以对该属性进行设置,如下图所示。该值也可以在Matinee中进行动画处理。



图8.37——颜色选取器用于改变光源的颜色。

Radius(半径)

半径属性控制光源射出的光线强度减弱至0的距离。或者说,它可以改变控制光源范围的理论球体的半径。半径范围内 的物体会受到光源不同程度的影响,而半径之外的物体则接收不到来自该光源的光线。定向光源和天空光源不使用该属性 。



图8.38——点光源和聚光光源的半径

FalloffExponent(衰减指数)

FalloffExponent(衰减指数)属性控制光源发出光线接近半径的过程中,其强度减弱至0的速度。该属性默认值为2, 呈平方的衰减;若设置为3,则为立方衰减,等等。若值为0,则没有衰减,光线在半径以内都将保持其全部强度。定向光 源和球体光源不使用该属性。

聚光灯光源独特属性

InnerConeAngle(内锥角)和 OuterConeAngle(外锥角)

在点光源中,有两个锥体用于控制光源发射的角度。内锥体以内的区域的光线强度为100%,在靠近外圆锥的过程中光线 强度逐渐减弱,而在外圆锥之外强度为0。



图8.39——外圆锥角度和内圆锥角度。

InnerConeAngle(内锥角)属性默认设置为0,意即不存在光线强度为100%的“热点区域”。

定向光源独特属性

TraceDistance(追踪距离)

TraceDistance(追踪距离)属性控制一个物体可以在另一个物体上投下阴影的最远距离。它的默认值为100,000。例如 ,如果有一个距离地面150,000单位高的物体,它将不会在地面上投下阴影。但是,如果将它放在90,000单位高的高度,它 将在地面上投下阴影。

天空光源独特属性

LowerBrightness 和 LowerColor(亮 度下限和颜色值下限)

前面提到过,一个球体光源有两个半球面。每个半球面可以单独受控制以获得期望的效果。通过LowerBrightness(亮 度)和LowerColor属性,可以调整下半球面光源的强度和颜色。

Lighting Channels(光照通道)

在现实世界中,在一个黑暗的房间中开灯会照亮房间中光源范围内和光线瞄准线所至处的所有表面。不过,在Unreal中 , 您可以控制某一光源能否影响某一物体。这是通过使用Lighting Channels(光照通道)实现的。您可以将它们看作电 视频道。光源在某一个或某一些特定频道中进行传播,只要物体能够接收到其中的一个频道,它就会被照亮。这样,您可 以使某些物体不被某些光源照亮,或者说,某些光源只照亮某些物体。有很多种光照通道可供使用,以下介绍一些最常用 的光照通道。

BSP

BSP通道用于所有的BSP画刷。如果在光源中激活该通道,光源将照亮画刷。

CompositeDynamic(复合动态)

CompositeDynamic通道与光源环境一起使用,在本章后面的光源环境一节中,我们将深入介绍该通道。

Dynamic(动态)

动态光照通道用于所有在游戏中移动或改变的物体。如果没有勾选该通道,光源将不会照亮玩家、运动中的人物及其它 的动态表面。

Static(静态)

静态光照通道用于所有在游戏中静止或没有改变的物体,例如静态网格物体。

Unnamed(未命名)

在一个光源中有若干个没有名字的通道。它们供用户进行控制和使用。例如,您可以关掉所有Unnamed_1通道以外的通 道,只有Unnamed_1通道中的物体才受光照影响。



图8.40——在本图中,光源使用了BSP和Unnamed_1通道。左边的网格物体打开了Unnamed_1通道,而右边的则没有。

指南8.7——照亮地牢,第二部分:光源属性

继续指南8.6,或者打开配套DVD本章文件夹中的Light_Demo_II地图。

1. 选中墙壁光源,按F4(或双击墙壁光源actor),打开其属性窗口。设置以下属性:

  • FalloffExponent(衰减指数): 8.0
  • Radius(半径): 960.0
  • LightColor(光源色):
    • R: 255
    • G: 255
    • B: 185



图8.41——属性窗口应如图设置。

2. 展开光照通道部分,检查以下通道是否激活:

  • BSP
  • CompositeDyanmic(复合动态)
  • Dyanmic(动态)
  • Static(静态)

3. 选中火把光源,在其属性窗口进行以下设置:

  • FalloffExponent(衰减指数): 8.0
  • Radius(半径): 860.0

注意: 不要改变火把光源的颜色!我们将通过光源的一个功能来控制其颜色。

4. 展开火把电源的光照通道,检查以下通道是否激活:

  • BSP
  • CompositeDynamic(复合动态)
  • Dynamic(动态)
  • Static(静态)

5. 选中头顶光源,在其属性窗口进行以下设置:

  • Brightness(亮度): 6.0
  • FalloffExponent(衰减指数): 12.0
  • OuterConeAngle(外锥角): 85.0
  • Radius(半径): 960.0

6. 检查头顶光源的以下通道是否激活:

  • BSP
  • CompositeDynamic(复合动态)
  • Dynamic(动态)
  • Static(静态)

7. 重建光照效果,保存关卡。



图8.42——关卡的最终效果如图所示。

<<<< 指南结束

体积光照

除了光照通道,体积照明是决定一个光源是否对某些物体产生影响的另一种方法。您可以通过指定体积列表使它起作用 :包含体积列表和排除体积列表。简单地说,列在InclusionVolumes(包含体积)列表中的体积将会被照亮,而列在 ExclusionVolumes(排除体积)列表中的体积不会被照亮。



图8.43——图示的体积列在InclusionVolumes(内含体积)列表中。请注意体积范围以外的物体没有被照亮。

通过bUseVolumes(使用体积)属性可以激活体积照明。通常,您可以向InclusionVolumes(内含体积)列表和 ExclusionVolumes(外含体积)列表中的一个列表增加体积。您也可以向两个列表中都添加体积。不过,请记住在这种情 况下,同时属于内体积范围和外体积范围的物体,以及不在任何一个体积内的物体不会被照亮。

阴影

阴影对于关卡的光照效果至关重要。在Unreal Engine 3.0中,可以使用三种不同类型的阴影:预计算阴影,阴影体积 阴影和阴影缓冲阴影。这些类型不是手工选择的,而取决于你的光照情况,光源与(或)物体是静态的还是动态的。

光照系统将这三种阴影紧密地结合在一起。对于玩家来说,它们最显著的区别就是阴影边缘的模糊度。由于分辨率低, 预计算阴影边缘非常模糊;阴影体积阴影边缘则非常清晰。

不管使用哪一种技巧,阴影效果不会影响所有其它的光照效果,例如凹凸贴图和高光效果。不同类型的阴影不会改变这 些效果。

预计算阴影(阴影贴图)

预计算阴影用于静态光源照射在静态几何体上时产生的阴影。

预计算阴影在创建光照时创建,并储存在阴影贴图中。阴影是基于光线的,也就是说,光源的每束光线是从发光源到被 照物体计算的。在写作本章时,预计算阴影不考虑材质的alpha,如图所示。



图8.44——看这个有alpha遮照的静态网格物体表面。请注意该物体的阴影还是实的。

要在创建预计算阴影时考虑某个光源,该光源的UseDirectLightMap(使用定向光源贴图)属性应该设置为是。 UseDirectLightMap(使用定向光源贴图)属性位于光源LightComponent(光源组件)目录下,静态光源的该属性值默认为 是。

关于使用基于BSP几何体的贴图阴影,请参见《第四章:画刷的世界》。关于静态网格物体的贴图阴影,请参见《第五 章:静态网格物体》。

阴影缓冲阴影

阴影缓冲阴影用于当静态光源照射在动态几何体(如人物,运动中的物体等)上时产生的阴影。

阴影缓冲阴影边缘较柔和。在ShadowFilteringTechnique(阴影滤镜技术)属性中有多种控制柔和效果的运算。在该属 性中,您可以找到一张列表,上面罗列了过滤阴影缓冲阴影的不同方法。您可以基于质量或性能的考虑选择使用其中的方 法。例如,《战争机器》游戏的阴影缓冲过滤采用了BCF_Low设置,即质量最低,但性能最好。

阴影缓冲阴影在进行阴影计算时,会考虑alpha遮照的材质。不过,只作用于动态物体,并且当材质的混合模式(blend mode)设置为BLEND_Masked时。



图8.45——左边的栅栏的阴影考虑了alpha,而右边的静态网格物体则没有。

要正常创建缓冲阴影,动态物体必须要附在碰撞体积中。也就是说,运动物体网格还需要一个碰撞物体,而人物的 SkeletalMeshComponent(骨架网格物体组件)中需设置一个PhAT资源。关于静态网格物体的碰撞物体的更多信息,请参见 静态网格物体一章。关于人物PhAT资源的创建,请参见动态反应物体一章。

出于性能的考虑,可以在使用点光源时使用阴影缓冲。如果一个物体不是正好处于光源的90度视域之内,引擎会切换至 一个更慢的cubemap缓冲过滤系统。简单地说,您通常会希望玩家或其它的动态物体远离会投下阴影的点光源。

注意: 在写作本章时,当一个动态物体距离一个静态点光源过近时,其动态阴影会消失。

阴影体积

当动态光源照射在动态几何体或静态几何体上时,使用阴影体积。

阴影体积最常见于在UnrealEd中移动光源时。阴影体积边缘非常清晰,一点都不柔和。而且无论被照物体距离光源是远 是近,它们都非常精确。阴影体积不考虑材质的alpha通道,也就是说,它会忽视所有的alpha遮照。

如上所述,当您在编辑器中移动光源时,您都可以看到阴影体积。阴影体积会一直存在,直到创建了光照效果,才会用 合适的类型的阴影以替换。当光源处于运动中时,使用阴影体积。



图8.46——在编辑器中移动光源,阴影体积就会出现,以辅助放置光源和阴影。

当物体边线未闭合时,阴影体积会导致性能大幅度下降(例如,网格中的洞)。在这种情况下,引擎使用一个速度更慢 的双面(double-sided)阴影体积来计算阴影,故引起性能下降。为了避免这种情况,请确保网格物体的边线闭合,有时 也称为网格“不漏水”。在3ds Max中,您可以使Borders(在Max中与‘未闭合边’同意)在多个编辑的物体上可选,并框 选所有的网格以检查有多少未闭合的边缘。

在创建阴影体积时,您可以总是将光源的bForceDynamicLight(强制动态光源)属性设置为是。

阴影调制

实际上,调制阴影并不是阴影的一个类型,而是在计算动态阴影时可以使用的一个模式。简单地说,调制阴影允许您直 接修改阴影的颜色。当多个光源要消融阴影时,可以使用该模式。将LightShadowMode(光源阴影模式)属性设置为 LightShadow_Modulate,然后使用ModShadowColor属性来改变阴影的颜色。

注意:除非bForceDynamicLight(强制动态光源)属性设置为是,调制阴影对于静态光源对静态物体投下的阴影没有效 果。在这种情况下,您可以使用能够用于调制的体积阴影。



图8.47——左图中为普通阴影,右图中为调制阴影。

指南8.8——照亮地牢,第三部分:阴影属性

继续指南8.7,或者打开配套DVD本章文件夹中的Light_Demo_III地图。

1. 选中墙壁光源,在其属性窗口中激活CastDynamicShadows(投射动态阴影)属性。这将使牢房门 打开或关闭时,或者pawn或玩家经过时,光源都会投下阴影。



图8.48——墙壁光源透过牢房的栅门,投下阴影。

2. 选中火把光源,在其属性窗口中找到LightShadowMode(光源阴影模式)属性,并设置为 LightShadow_Modulate。这将使阴影看上去更暗一些,如果需要还可以改变阴影的颜色。不过,在写作本章时,调制阴影 的光源功能不可与光照函数一起使用,所以我们后面会将该属性改回。

3. 选中头顶光源,将其属性窗口中的CastShadows(投射阴影)设置为无效。因为该光源对关卡中 的阴影没什么影响。



图8.49——头顶光源无需投下阴影。

4. 重建光照效果,测试关卡。现在您可以看到由门、囚犯和您自己的角色产生的动态阴影了。

<<<< 指南结束

指南8.9——照亮地牢,第四部分:动画光源

继续指南8.8,或者打开配套DVD本章文件夹中的Light_Demo_IV地图。本节中将使用Kismet和Matinee。关于它们的更多 信息,请分别参见第十章和第十一章。

1. 首先确定光源可以被动画化。选中火把光源,在其属性窗口中展开运动标签,将物理属性设置为 PHYS_Interpolating。



图8.50——设置物理属性是在Matinee中移动光源的必要前提。

2. 单击Open Kismet button(打开Kismet按钮)图标,打开Kismet编辑器。您将看到一个与Level Startup(关卡启动)事件相连接的Matinee序列,标记为播放动画。



图8.51——关卡的Kismet序列。

3. 当前的Matinee序列对象使得火把火焰的粒子发射器摇摆不定。我们将复制对象,并在它的基础 上使光源随之晃动。按照以下步骤进行:

a. 选中Matinee序列对象与之相连的Matinee数据对象。使用Ctrl-C和Ctrl-V复制粘贴它们。



图8.52——复制Matinee序列对象和数据对象。

b. 在Kismet窗口底部的属性区域,将ObjComment(对象注释)属性设置为动画光源。

c. 按住Alt,单击位于副本Matinee序列对象底部的标注为InterpGroup的小方形,断开与发射器对 象变量的连接。

d. 从副本Matinee序列对象的Play(播放)输入拉出一根线,连接至Level Startup(关卡启动)事 件的输出端口。



图8.53——将复制的序列连接至Level Startup(关卡启动)事件。

e. 在透视视口中,选中火把光源。然后,回到Kismet编辑器中,右键单击Matinee序列对象底部的 InterpGroup输入,选择New Object Variable(新建对象类别)使用PointLight Movable_0。



图8.54——现在Matinee序列也会影响火把光源了。

4. 如果现在测试关卡,光源看上去轻微晃动。不过,我们还要继续运算处理光源的亮度。

a. 在Kismet编辑器中,右键单击复制的Matinee序列,在右键菜单中选择Open Matinee。



图8.55——通过关联菜单打开Matinee。

b. 在InterpGroup轨道上单击右键,选择New Float Property Track(新建浮点属性轨迹),弹出 一个对话框。从下拉菜单中选择PointLightComponent0.Brightness,单击OK。



图8.56——选择PointLightComponent0.Brightness属性。

c. 选中Brightness轨迹,单击Stop按钮两次,以确定时间轴滑块位于0.00时刻。然后,单击Add Key(添加关键帧)图标,添加第一个键。

d. 在Matinee窗口底部的灰色刻度条上,时间轴滑块是一条黑色的细线。将它拖动至1.00,然后再 次单击Add Key(添加关键帧)按钮。



图8.57——在0.00和1.00时刻添加了关键帧。

e. 将时间轴滑动条移动至0.00和1.00之间3个任意位置,在每个位置上单击Add Key(添加关键帧) 按钮。

f. 依次对每个键进行以下操作:右键单击每一个键,从右键菜单中选择Set Value(设置值)。输 入一个0.5至1.2之间的任意值。不要改变0.00和1.00的键。这样,可以制作出亮度的变化,起始值为1.0,结束值也为1.0 ,也就是说,它可以不断的循环。



图8.58——完成后,从0.00到1.00之间,有五个值起伏的键。

5. 重建光照效果,保存进度。您可以测试关卡,您将看到光源不仅左右晃动,而且因为您刚才创建 的动画,它的亮度也闪烁不定。

<<<< 指南结束

光源环境

您可能意识到了在处理动态光照时,性能是一个主要的考虑因素。制作动态阴影时,出于性能考虑,您总是要确定在一 个区域中,不存在过多的动态阴影。但是,您希望当玩家进入一个使用了很多光源的区域时所有的灯投射动态阴影,会发 生什么呢?您可以建立另一组光源来产生阴影,但是您可能摧毁当前所有的光照,更不用说对性能造成冲击了。

进入光源环境。光源环境为关卡设计师提供了一组光源通过使用一些非常聪明的技巧来影响静态物体和动态物体,而不 必担心有很多不同的动态阴影的光源带来的性能下降。不过,它唯一的显著缺点是光源环境只允许一次一个物体一个动态 阴影的使用。但是,出于它在性能方面的巨大优势,这个缺点也不值一提了。

光源环境是在关卡内创建一个球体光源和一个定向光源。请注意它们在关卡中并不存在,您也不需要创建它们。球体光 源用于控制动态物体的环境光线的颜色,定向光源用于投射动态阴影。

引擎计算影响物体的所有光源的颜色的加权平均值。“权重”基于每个光源的亮度,就是说更亮的光源对平均颜色的影 响更大。阴影的方向是由相关的光源的接近程度计算出的。“相关”的光源在计算时,会作为光源环境的一部分。我们马 上会介绍如何进行操作。



图8.59——该场景中的actor受到四个光源的照射,每个光源都投下动态阴影。



图8.60——该场景中的actor只受光源环境的影响。

激活光源环境实际上只需要两个步骤。第一步,激活光源属性中的bCastCompositeShadow(投射复合阴影),证实光源 的CompositeDynamic(复合动态)通道处于激活状态。对于要加入光源环境计算的所有光源,您都需要进行这些操作。

第二步,激活被照射物体上的光源环境。在每一个动态物体的属性中,您可以找到LightEnvironmentComponent(光源 环境组件)分类里面有一个bEnabled(启用)属性。一旦您将它设置为是(默认设置为否),该物体就不再处于动态通道 ,而是处于CompositeDynamic(复合动态)通道中了。现在,它接收来自于光源环境的照射了。

光源环境是处理多个光源的动态光照,而耗费较少资源的一种方法。实际上,在游戏《战争机器》中,所有的士兵都是 用光源环境照亮的!

现在,我们暂时停止地牢场景,而是进入一个使用光源环境进行特殊设计的关卡中,看看光源环境是多么有用。

指南8.10——您的第一个光源环境

1. 运行UnrealEd,打开配套DVD本章文件夹中的LightEnvironmentTest地图。在地图中,您可以找 到一个由四个彩色光源照射的房间,房间中央放了一个动态物理actor。现在,没有一个光源在动态通道中发光,所以该物 理actor看上去没有被照亮。



图8.61——因为未被照亮,场景中央的球看上去是黑色的。

2. 选中四个光源,打开属性窗口。勾选CastDynamicShadows(投射动态阴影)属性,展开 LightingChannels(光照通道),激活动态通道。瞬间动态球体actor被照亮了。

3. 还是在属性窗口,将LightShadowMode(光源阴影模式)属性设置为LightShadow_Modulate。

4. 重建光照效果,测试关卡。在关卡中点选并随意拖动动态actor。注意光照的质量非常高,并且 四个光源都投下了单独的阴影,在球体上产生了高光点。但同时,性能也下降了。

在In Editor Game(编辑器中运行游戏)窗口中,按住Tilde (~)键打开控制界面。在控制界面中输入stat fps命令, 以显示游戏中每秒钟的帧数。回车,按住Tilde键隐藏控制界面。注意您现在每秒的帧数。通常,该数值在40到80之间。



图8.62——注意每秒钟的帧数。

完成后退出In Editor Game(编辑器中运行游戏)。

5. 现在,选中四个光源,再次打开属性窗口。去勾选CastDynamicShadows(投射动态阴影)。在 LightingChannels(光照通道)下,取消Dynamic勾选。

6. 选中关卡中央的球形刚体,打开其它属性窗口。展开DynamicSMActor(动态SMActor),展开 LightEnvironment(光源环境)。在LightEnvironmentComponent(光源环境组件)下勾选 bEnabled(启用)。这将使actor 被光源环境照亮。



图8.63——bEnabled(启用)属性位于LightEnvironmentComponent(光源环境组件)目录之下。

7. 重建光照效果,再次测试关卡。注意现在您看到球体上只有一个高光区,该高光区的颜色主要基 于离它最近的光源。同样地,球体只有一个阴影。

现在再看看每秒钟的帧数。现在高多了,大概平均值为170.您可以注意到阴影并不总是很精确的,但是我们的性能提高 了四倍多。对于可玩性,这是个好得多的选择!



图8.64——使用光源环境时,关卡的效率大大提高。

8. 保存关卡。

<<<< 指南结束

光源函数

光源函数提供了一种通过材质来控制光源的颜色和强度的方法,甚至可以使光源在物体表面投射出纹理。该功能用途非 常广泛,可以模仿从电影放映机到彩色玻璃窗投下的光流。

光源函数读取指定材质的自发光通道,并用它来驱动光源的亮度和颜色。发射方向取决于光源类型:点光源将从各个方 向进行发射,聚光光源通过一个圆锥体进行发射,而定向光源从一个平面进行发射。

请记住光源函数关键的一点,它们一旦被激活,UseDirectLightMap(使用定向光照贴图)属性自动失效。也就是说, 应用了光源函数的光源没有预计算阴影(贴图阴影)。



图8.65——应用了光源函数的聚光光源。

光源函数有两个主要属性:

SourceMaterial(源材质) – 该属性包含用于光源函数中的材质,是在Generic Browser中进行选择的。

Scale(比例) – 该属性控制源材质纹理的大小,使您可以直接改变投射光的纹理,而不必改变材质的贴图。

指南8.11——照亮地牢,第五部分:添加 光源函数

继续指南8.10,或者打开配套DVD本章文件夹中的Light_Demo_V地图。现在,我们要在火把光源上应用光源功能,以控 制火把光源的颜色。

1. 打开Generic Browser,找到位于关卡包中的mat_TorchLight材质。双击它打开材质编辑器。

2. 在材质编辑器的属性区域,勾选bUsedAsLightFunction(用作光源功能)属性。



图8.66——确保勾选了bUsedAsLightFunction(用作光源功能)属性.

3. 选中火把光源,将它的LightShadowMode(光源阴影模式)设置为LightShadow_Normal(光源阴 影_法线)。

4. 找到函数属性,单击其旁边的None项,出现两个按钮:Clear All Text(清除所有文本)和New Item(新建项目)。右键单击New Item(新建项目),从右键菜单中选择LightFunction(光源功能)。

5. 新的光照函数将展开。找到SourceMaterial(材质资源)属性,使用Generic Browser将它设置 为mat_TorchLight纹理。



图8.67——一旦添加了mat_TorchLight纹理,光照颜色就改变了。

6. 重建光照效果。您将注意到光源的颜色是由材质控制的。

7. 保存关卡。

<<<< 指南结束

指南8.12——制作地牢的光照效果 VI: 照亮火把网格

继续指南8.11,或者打开配套DVD本章文件夹中的Light_Demo_V贴图。最后一步是创建一些光源,用于照亮火把静态网 格物体。

1. 在透视视口中,单击Real Time按钮以显示粒子。一些粒子可见后,再次单击Real Time按钮,停 止播放。



图8.68——在关卡中使一些粒子可见。

2. 按住Ctrl-L,单击火焰中颜色最深的橙色区域。这将创建一个和单击处颜色相同的光源,但是您 看不到它。

3. 按Home键将视口对齐至光源位置。使用Translation(平移)控件将光源移动到火把静态网格物 体的另一端靠近其表面的地方。



图8.69——将复制的光源移动到火把网格的旁边。

光源被放置在房间中央的原因是:因为您没有单击BSP brush,UnrealEd无法确定您想要放置光源的具体位置。

4. 您可以将光源的颜色调得更深,设置属性如下:

  • Brightness(亮度): 3
  • FalloffExponent(衰减指数): 20
  • CastShadows(投射阴影): 否 (未勾选)
  • Radius(半径): 64

5. 展开LightingChannels(光照通道)目录,去激活所有通道。然后,勾选Unnamed_1通道。



图8.70——只有Unnamed_1被激活。

6. 选中火把静态网格物体。在属性窗口中,展开Static(静态)MeshActor按钮,展开Static(静 态)MeshComponent目录。找到Lighting按钮,展开LightingChannels(光照通道)目录。

去勾选Unnamed_1通道,使光源可以影响网格。

7. 将光源复制两次,并将副本环绕网格放置,形成一个三角形。



图8.71——三个光源只照亮网格物体。

8. 重建光照效果,保存关卡。

<<<< 指南结束

工作流小技巧

在对关卡进行光照处理时,请记住以下提升性能的简单指导:

  • 控制动态阴影(无论是动态光源,还是静态光源照射在动态几何体上形成的阴影)的数目至最小。
  • 尽可能使用光源环境来替代动态光照和动态投影。
  • 如果光源不会投下阴影,关掉该光源的投影属性,即将它的CastShadows(投射阴影)属性设置为否。
  • 如果物体不会留下阴影,关掉该物体的投影属性,即将它的CastShadows(投射阴影)属性设置为否。
  • 使用微弱的环境光线或漫射光线(使用球体光源或多个点光源)和/或调制阴影,以避免全黑的阴影。
  • 所有的光源(除了环境光线或漫射光线),从全局来看都应该有一个可见的源头,如静态网格物体等。请经常问自己 ,“光线来自哪里?”
  • 必要时给自发光表面也加上光源。因为它们只有看起来像在发光,而实际上并没有发光。
  • 记住阴影贴图要求对于每个光源影响的每一个物体,都需要存储一张阴影贴图。也就是说,许多光源向许多静态物体 投射阴影时,可能会引起内存问题。
  • 使用阴影贴图时,确保分辨率足够高,才能给出必要的细节。
  • 尽可能激活UseLightMap(使用光源贴图),如当静态光源影响静态物体时,将光照“烘焙”至光源贴图中。
  • 尽可能少使用光源功能,因为即使它们是静态的,它们也不能存储在光源贴图中。在编写本章时,据我所知,可能在 引擎的后续版本中引入计算包含静态光源功能的光源的功能。
  • 尽量避免阴影缓存投射的网格过于接近点光源。
  • 使用尽可能少的光照细分来创建需要的光照,以减少创建时间。

这节课就到这里,不知道大家学的怎么样,回去自己再试着练习一下。欢迎学习我们社区的其他教程。

原创粉丝点击