zoukankan      html  css  js  c++  java
  • Unity3D场景搭建4:灯光

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

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

    Unity3D场景搭建4:灯光(Lights)
    简单的两个灯光

    · 在灯光的检视面板中有许多不同的选项

    Unity3D场景搭建4:灯光(Lights)
    检视面板中灯光的属性

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

    Unity3D场景搭建4:灯光(Lights)
    明亮,太阳光

    Unity3D场景搭建4:灯光(Lights)
    黄昏,中度光

    Unity3D场景搭建4:灯光(Lights)
    诡异的夜光

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

    Unity3D场景搭建4:灯光(Lights)
    灯光的检视面板

    在 Unity中有三种不同类型的灯光:

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

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

    • 投射光(Spot 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):可选的用于在光照位置上渲染的闪光

    • 渲染模式(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来完成它。参考阴影部分。

    点光源

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

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

    Unity3D场景搭建4:灯光(Lights)
    点光源

    Unity3D场景搭建4:灯光(Lights)
    带有 Cookie的点光源

    投射光

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

    Unity3D场景搭建4:灯光(Lights)
    投射光

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

    Unity3D场景搭建4:灯光(Lights)
    带有 Cookie的投射光

    方向光

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

    Unity3D场景搭建4:灯光(Lights)
    方向光

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

    Unity3D场景搭建4:灯光(Lights)
    方向光投影一个云状的 cookie

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

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

    虽然像素渲染比较慢,但是它允许实现顶点光照不能实现的效果。凹凸贴图, cookie和实时阴影只能用像素光。透射光形状和顶点光高亮昀好使用像素模式。上诉三种类型的光使用顶点光模式时看起来如下:

    Unity3D场景搭建4:灯光(Lights)
    顶点光照模式的点光源

    Unity3D场景搭建4:灯光(Lights)
    顶点光照模式的透射光

    Unity3D场景搭建4:灯光(Lights)
    顶点光照模式的方向光

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

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

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

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

    提示

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

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

  • 相关阅读:
    转几篇关于反射的文章
    几篇并发的文章
    线程池的使用(转)
    深入理解java不可变对象(转)
    收集的书
    BeanPostProcessor(转)
    JDK的动态代理深入解析(Proxy,InvocationHandler)(转)
    Java中InputStream和String之间的转换方法
    linux的一些常用命令
    Linux下查看文件内容的命令
  • 原文地址:https://www.cnblogs.com/muyouking/p/6430718.html
Copyright © 2011-2022 走看看