首页 理论教育虚拟现实开发实践中的光照应用-结果展示

虚拟现实开发实践中的光照应用-结果展示

【摘要】:如果禁用,物体的亮度将在进入或离开它的光照范围时突变。这是最普通的一种光照类型,典型的用于爆炸,灯泡,等等。不带Cookie与带有Cookie点光源的比较,如图7-46和图7-47所示:图7-46不带Cookie点光源图7-47带有Cookie点光源探照灯模型图,如图7-48所示:投影光只能在一个方向上照亮一个圆锥范围内。参考纹理部分.方向光模型图,如图7-50所示:图7-48探照灯模型图方向光通常用于室外场景的阳光和月光

对于每一个场景光照是非常重要的部分。网格和纹理定义了场景的形状和外观,而光照定义了场景的颜色和氛围。你很可能需要在每个场景中设置多个光源。让他们一起工作需要一点练习但是结果是非常惊人的。

简单的两个光源,如图7-39所示:

图7-39 简单的两个光源效果

可以通过从菜单中选择GameObject→Create Light并将其添加到你的场景中。有四种类型的光源。一旦添加了一个光源你就可以像操作其他物体一样操作它。此外你还可以通过选择Component→Rendering→Light为选中的物体添加一个光源组件。

在光源的检视面板中有许多不同的选项。检视面板中光源的属性,如图7-40所示:

通过简单地改变光源的颜色(Color),你可为场景添加完全不同的气氛。

明亮的效果,如图7-41所示:

暗淡的效果,如图7-42所示:

阴冷的效果,如图7-43所示:

光照将使你的游戏具有个性和情趣。使用光源来照亮场景和物体以便创建一个完美的可视氛围。光源可以用来模拟太阳,燃烧的火光,闪光,炮火或者爆炸,下面给出几个例子。光源的检视面板,如图7-44所示:

在Unity中有四种不同类型的光源:

图7-40 检视面板中光源的属性

图7-41 明亮的效果

图7-42 暗淡的效果

图7-43 阴冷的效果

图7-44 光源的检视面板

●点光源(Point lights)从一个位置向所有方向发射相同强度的光,就像灯泡一样。

●方向光(Directional lights)放置于无穷远处并影响场景中所有的物体,就像太阳一样。

●探照灯(Spot lights)从一个点向一个方向发光,像一个车灯一样照亮一个锥形的范围。

●面积光(Area lights)有一块的面板产生的光照,比如发光的广告牌。

属性

●类型(Type):当前光照物体的类型

●方向(Directional):一个放置在无穷远的光源。它将影响场景中的所有物体并不会衰减。

●点(Point):一个从它的位置向所有方向发光的光源,将影响位于它的范围内的所有物体。

●投射(Spot):照亮一个锥形(Spot Angle)的范围(Range),只有在这个区域中的物体才会受到它的影响。

●颜色(Color):光线的颜色。

●衰减(Attenuate):光照是否随着距离而减弱?如果禁用,物体的亮度将在进入或离开它的光照范围时突变。可以用来制作一些特殊的效果。如果是方向光这个参数将被忽略。

●范围(Range):光线将从光源的中心发射多远

●投射角(Spot Angle):如果是探照灯,这个参数将决定圆锥的角度。

●阴影(Shadows)(Pro only):将被该光源投射的阴影选项

●类型(Type):Hard或Soft阴影,Soft阴影更加的费时。

分辨率(Resolution):阴影的细节

●强度(Strength):阴影的浓度。取值在0到1之间

●投影(Projectio):方向光阴影的投影类型

●恒定偏移(Constane Bias):世界单元的阴影偏移

●物体大小偏移(Object Size Bias):依赖于投影大小的偏移。缺省的值为投影者大小的1%

●Cookie:你可以为光源附加一个纹理。该纹理的alpha通道将被作为蒙版,以决定光照在不同位置的亮度。如果光源是一个投射或方向光,这个必须是2D纹理。如果光源是点光源,就需要一个Cubemap。

●绘制光晕(Draw Halo):如果选择了该选项,一个球形的光晕将被绘制光晕的半径等于范围(Range).

●闪光(Flare):可选的用于在光照位置上渲染的闪光(www.chuimin.cn)

●渲染模式(Render Mode):选择光源是作为顶点光,像素光还是自动的渲染方式。详细信息参考性能考虑部分。参数包括:

●自动(Auto):渲染方法将在运行时确定,依据附近光照的亮度和当前的品质设置(Quality Settings)来确定

●强制像素(Force Pixel):光照总是以每像素的品质来渲染。只将其用于非常重要的效果(例如,玩家汽车的前灯)。

●强制顶点(Force Vertex):光照总是以顶点光来渲染。

●裁剪蒙版(Culling Mask):用于将一组物体从光照的影响中排除;参考层部分。

细节在Unity中有四种类型的光照,每一种都可以调整以适应你的要求。

你可以创建一个包含alhpa通道的纹理并将它赋给光照的Cookie变量。这个Cookie将从光源处投影。Cookie的alhpa蒙版乘以光照强度,在表面上创建亮的和暗的斑点。这是一种非常好的添加大量复杂效果的方法。

Unity中所有内置的shader都可以与任何光照类型无缝融合。然而顶点光(VertexLit)shader不能显示Cookie或阴影。

在Unity所有的光照都可以随意的投射阴影。通过从阴影(Shadows)属性中选择Hard Shadows或者Soft Shadows来完成它。参考阴影部分。

点光源点光源从一个点向所有方向发光。这是最普通的一种光照类型,典型的用于爆炸,灯泡,等等。它们在图形处理器上花费平均成本(尽管点光源阴影是最花费成本的)

点光源,如图7-45所示:

图7-45 点光源

点光源可以具有cookie-带有alpha通道的Cubemap纹理。这个Cubemap将在所有方向上投影。并且带有Cookie的点光源将不会随着距离而衰减。

不带Cookie与带有Cookie点光源的比较,如图7-46和图7-47所示:

图7-46 不带Cookie点光源

图7-47 带有Cookie点光源

探照灯模型图,如图7-48所示:

投影光只能在一个方向上照亮一个圆锥范围内。者可以完美的模拟手电筒,车前灯或者是光柱,在大多数显卡上这是最费时的。

探照灯也可以有一个cookie,一个纹理投影到光的圆锥上,如图7-49所示。这可以用来创建透过窗口的光照。非常重要的是纹理的边缘必须是黑色的,需要打开Border Mipmaps选项并且环绕模式(wrapping mode)被设置为Clamp。参考纹理部分.

方向光模型图,如图7-50所示:

图7-48 探照灯模型图

方向光通常用于室外场景的阳光和月光。光照将影响场景中物体的所有表面。在大多数显卡上这是最快的。

如果一个方向光具有一个cookie,它将投影到光源Z轴的中心,如图7-51所示。Cookie的大小由Spot Angle属性控制。在检视面板中设置cookie纹理的缠绕模式(wrapping mode)为重复(Repeat)。

图7-49 探照灯效果图

图7-50 方向光模型图

图7-51 方向光效果图

Cookie是一个非常好的方法为室外场景添加一些细节。你甚至可以在场景的上方慢慢移动光源以模拟移动的云。

性能考虑光照可以使用两种方式来渲染:顶点(vertex)光和像素(pixel)光。顶点光仅仅在游戏模型的顶点上计算光照,并在模型的表面进行插值。像素光将计算屏幕中每个像素,因此非常费时。一些老的显卡只支持顶点光。

虽然像素渲染比较慢,但是它允许实现顶点光照不能实现的效果。凹凸贴图,cookie和实时阴影只能用像素光。透射光形状和顶点光高亮最好使用像素模式。

光照对于场景的渲染速度具有很大的影响,因此必须在光照质量和游戏速度之间进行折中。因为像素光比顶点光更加费时,Unity只以像素质量来渲染最亮的光。实际的像素光数量可以在质量设置(Quality Settings)中设置。

你可以使用渲染模式(Render Mode)属性显示的控制使用顶点光照(Vertex)或是像素(pixel)光照。缺省情况下Unity将基于有多少个物体被光照影响来自动使用光照模式。

实际上使用像素光照是由不同场合确定的。具有高光的大物体将全部使用像素光(根据品质设置)。如果玩家距离它们很远,附近的光将使用顶点光。因此,最好将大物体从小物体中分离出来。

创建Cookie参考教程部分的如何创建投影光照Cookie部分

提示:

●带有cookie的投影光在制作从窗口投射的光线是非常有用的。这种情况下,禁用衰减,并设置范围为正好到达地面。

●低强度的顶点光可以非常好的提供景深效果。

●为了达到最大性能,使用VertexLit shader。这个shader只能用于顶点光照,并在低端的显卡上提供高吞吐量处理。