1、为什么要用Lightmapping?

简单来说就是实时灯光计算十分耗时,随着光源越多,计算耗时会倍增。使用Lightmap模拟灯光带来的效果,便不用去计算灯光,会带来性能上的大大提升。

当然一个复杂的游戏场景不可能只用一个光源。如果要得到一个逼真的光照环境需要很多不同的灯光相互配合。我们知道灯光会消耗很大的资源。如果一个游戏我们打了很多盏灯。游戏就会运行缓慢。Unity3d给我们提供一种很好的方式来解决这个问题。就是讲灯光信息烘焙到物体表面。以贴图的形式进行存储,这样既保证了场景的效果,又节约了资源。

那么在游戏制作中这种灯光贴图是怎么得到的呢。现在一般用到两种方式

1:在3dmax等模型制作软件中对场景进行烘焙。将烘焙好的模型以及贴图导入到unity3d。

2:用unity3d自身的烘焙系统对场景进行烘焙。两者方式选择一个即可!都差不多!

既然两者都能达到差不多的效果,那么究竟他们之间有什么差别呢?

3dmax烘焙:

1、可以使用各种高级渲染器对模型进行烘焙,比如Vray。

2、可以烘焙像反射这样的效果。

3、因为光影是固定了,所以在引擎里面只能按照在3DMax里面的摆放,不然就会穿帮。所以模型贴图不能在各个不同场景通用。

unity的LightMapping烘焙:

1、设置的参数相对没有3DMax里面高级渲染器丰富。

2、只能烘焙光影的追踪效果,不能烘焙反射。

                      3、可以一个模型放在不同场景单独烘焙,模型可以通用。 
                      4、由于每个场景需要烘焙一组贴图,所以如果场景多了,也会增加贴图数量。
 
Unity内置的光照贴图烘培工具是Illuminate Labs 的Beast。烘培光照贴图流程被完美的整合到Unity中。这就意味着使用Beast可以根据你的网格物体,材质贴图和灯光属性的设置来烘培你的场景,从而得到完美的光照贴图。同时也意味着光照图将作为渲染引擎的一部分。只要你烘培一次光照贴图你就不需要其他任何操作。光照图将自动指定到物体上。

2、为什么要使用LightProbes?

因为场景中都是假光,只是把光影烘焙到贴图上面,所以并不会对周围的动态物体产生真正的光照效果。动态的物体或角色没有受光会很突兀,显得格格不入。若觉得没关系便不需要管了,想要角色也有这样的效果就需要用到LightProbes。

3、烘焙前展UV

无论哪种烘焙,你都需要对模型进行展UV操作,假如UV没有展,或者UV的范围超出了0-1的框,烘焙都是会出错的。

选中要烘培的模型,在Inspector面板勾选“Generate Lightmap UVs”,应用-Apply。读条完成后UV成功展开,模型面数越多展UV时间越长。

4、调整好灯光

聚光灯和点光源阴影是最昂贵的---最耗费资源的!

在这之前先对灯光几个参数进行说明

Cookie:这个纹理的阿尔法(alpha)通道作为一个遮罩,使光线在不同的地方有不同的亮度。(摄像机的渲染模式顶点模式Vertex Lit是不支持的!)

如果灯光是聚光灯或方向光,这必须是一个2D纹理。如果灯光是一个点光源,它必须是一个立方图(Cubemap)。

我们来设置一下平行光的Cookie,2D纹理图片为一张背景透明的星星图片如左图,设置好Cookie之后,场景如右所示

  

也就是说纹理透明的部分会显示为亮度暗的地方,其他颜色则为亮的地方!

有alpha通道的图片表示形式有两种:

一种就是向这个星星一样的,背景为透明的图片

另一种就是有alpha通道的,如下

他设为Cookie的表现效果如下:

要想知道一个图片,是否带aphla通道,最简单的方法就是把此纹理的Texture Type设为Sprite,如果有透明区域,即带alphla通道

 

在这分享一个photoshop制作带alpha通道的图片的方法

我们先看看带透明通道纹理的通道是什么样的

 

不带透明通道纹理的通道

选择 魔棒工具 → 点击图片 → 按住shitf键选择选取 如下:

然后 菜单栏下: 选择 → 存储区域  → 填写名称 → 确定

选择 → 取消选择

图片通道就会生成对应的alpha通道

 

应用于平行光的Cookie效果为

Cookie Size:缩放Cookie投影。只用于方向光。

size为1时                           size为10时

 

在场景内设置好灯光位置和光亮,并选择一种阴影模式。默认情况下只有平行光才能实时显示阴影,其它类型光照没有实时阴影。

其中软阴影(Soft Shadows)更为昂贵。(耗资源)不建议使用

其中分辨率Resolution有如下设置:

Use Quality Settings表示使用Edit → Project Settings → Quality 下对阴影的设置,如下面箭头所指的地方

也就是说不同的灯光可以使用不同的分辨率,分辨率越高,渲染出来的图片越精细,如下,第一张是原图,第二张是Low Resolution,第三张是Very High Resolution

当然了,根据项目需求,我们得自己根据效果和效率来权衡使用哪一个!

虽然平行光是可以实时显示阴影,但是这也是和摄像机Camera的渲染路径Rendering Path有关的

渲染路径请参考http://www.cnblogs.com/MrZivChu/p/RenderingPath.html

摄像机的渲染路径有四个选项,Use Player Settings表示渲染路径依照Edit → Project Settings → Player 下面的设置来渲染

也就是说不同的摄像机可以使用不同的渲染模式

当使用Vertex Lit顶点光照的时候,平行光是无法渲染出实时阴影的,只有设置为其他两项(Deferred Lighting延迟光照  Forward正向渲染)才可以显示出来!

如果不在乎实时阴影效果,为了获得最佳性能,使用VertexLit 着色。这个着色器(shader)只进行顶点光照,在低端卡提供高得多的吞吐量。

点光源、聚光源也想要实时阴影怎么办?

我们先为点光源和聚光源的Shadow Type设为Hard Shadows,他会提示你“Only directional lights have shadows inforward rendering”,此时我们只需把对应摄像机的渲染路径改为延迟光照 Deferred Lighting模式即可!只有延迟光照Deferred Lighting模式才能实时显示阴影,其他两种模式对于不是平行光的光源来说是不行的!

如果我们的摄像机的渲染模式应用的是Use Player Settings的话

那么我们打开PlayerSettings面板(Edit > Project Settings >  Player)。将Rendering Path 设置为延迟光照 Deferred Lighting,这时点光源的阴影也被显示出来了

或者也可以直接设置摄像机应用哪一个渲染模式

5、烘焙

http://game.ceeger.com/Manual/LightmappingInDepth.html

http://blog.sina.com.cn/s/blog_471132920101etyp.html#cmt_2435395

相关参数说明:

Mode:
(1)Dual Lightmap mode:近景烘焙图(near lightmaps)和远景烘焙图(far lightmaps)都会被烘焙,只有deferred rendering path支持该模式

选择这项,会多出这一项的设置:Use in forward rendering:一般可以忽略这个。针对Dual lightmaps的设定,只在Mode选的是Dual时才会出现。在forward rendering模式下是否激活      dual lightmaps,需要自己写对应的Shader。
(2)Single Lightmap mode:只有远景烘焙图(far lightmaps)会被烘焙
(3)Directional Lightmap mode:

Quality:
          High low 2个选项。决定采集射线的数量,对比界限,以及反锯齿等设置。

Bounces:
Global Illumination模拟中 light bounces的数量。0表示只有直接光照会被计算,如果要加入柔软的,真实的间接光照的话,则至少填1。

双通道后配出后不带影子,灯光需要保留。

单通道烘培后附带影子,可以不保留灯光。单通道烘培省资源。(适当的调节参数效果更好)

参考:http://unity.jb51.net/meigongsheji/shanweisheji/35.html

6、AreaLight

Area Light,俗称面灯。没有任何实时光照的效果,仅用于Light baking即烘焙。

Color:颜色
Intensity:强度,
Width:宽
Height:高
Scale缩放对光没有任何影响。主要是宽高调整面的区域大小。选中Arealight后,Arealight的区域会在Scene窗口中以黄线框显示,AreaLight的Z轴指向的方向即光照的方向。

用AreaLight烘焙室内灯光效果
(1)创建一个空场景
(2)创建Cube并缩放成扁平面后。复制Cube并旋转拼接搭建成一个敞口的盒子。
(3)再创建一个Cube拉伸成下图中的简易灯模型,并把Shader改为Self-Illumin/Diffuse。
(4)创建Arealight,并旋转使z轴朝下。之后调整Arealight的宽高,使AreaLight的框与灯符合。最后光的颜色选择黄色。
(5)点击烘焙

unity灯光Lightmapping、LightProbes的更多相关文章

  1. Unity 灯光探针用法教程

    Unity 灯光探针用详解 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  2. unity灯光烘焙设置详解

    游戏场景中灯光照明的构成 现实生活中的光线是有反射.折射.衍射等特性的.对这些基本特性的模拟一直以来都是计算机图形图像学的重要研究方向. 在CG中,默认的照明方式都是不考虑这些光线特性的,因此出来的效 ...

  3. Unity灯光详解

    Lights will bring personality and flavor to your game. You use lights to illuminate the scenes and o ...

  4. Unity灯光烘焙

    Unity3D烘焙技术 一.Light灯光场景烘焙1.理论理解:(1)烘焙背景:在一个场景中,由于灯光组件起到实时渲染的效果,并直接与计算机硬件GPU渲染器进行交互作用,因此对计算机显卡性能不良,以至 ...

  5. Unity 3D 游戏上线之后的流水总结

    原地址:http://tieba.baidu.com/p/2817057297?pn=1 首先.unity 灯光烘焙 :Unity 3D FBX模型导入.选项Model 不导入资源球.Rig 不导入骨 ...

  6. Unity3D插件分享

    网上看到一个讲unity3D插件的,看着不错,转载过来. 本文汇总了近百个Unity3D插件,供大家参考下载. 2D_Toolkit_1.51 动画开发插件包 FingerGestures 触摸插件 ...

  7. Unity3D 插件大全

    2D_Toolkit 2d动画开发插件包 FingerGestures 触摸插件 ORK_Okashi_RPG_Kit Unity3D角色扮演游戏开发工具包 uScript-Visual-Script ...

  8. Unity3D 200个插件免费分享

    插件清单: 2D_Toolkit_1.51     动画开发插件包 FingerGestures           触摸插件 ORK_Okashi_RPG_Kit       Unity3D角色扮演 ...

  9. Unity3d插件推荐

    2D_Toolkit_1.51 动画开发插件包 FingerGestures 触摸插件 ORK_Okashi_RPG_Kit Unity3D角色扮演游戏开发工具包 uScript-Visual-Scr ...

随机推荐

  1. Breaking Biscuits(模板题-求凸边形的宽)

    Breaking Biscuits 时间限制: 1 Sec  内存限制: 128 MB  Special Judge提交: 70  解决: 26[提交] [状态] [讨论版] [命题人:admin] ...

  2. node.js 练习1

    1.利用editplus 创建 n1.js 文件 2.输入代码 3.打开cmd 输入 node n1.js 4.打开浏览器 输入 localhost:8000 5.再次回看 cmd

  3. OpenACC例子

    timeinfo1.c代码 #include<stdio.h> #define N 100 int main() { int A[N]; #pragma acc kernels { ; i ...

  4. Python爬虫,看看我最近博客都写了啥,带你制作高逼格的数据聚合云图

    转载请标明出处: http://blog.csdn.net/forezp/article/details/70198541 本文出自方志朋的博客 今天一时兴起,想用python爬爬自己的博客,通过数据 ...

  5. 深入浅出:了解JavaScript中的call,apply,bind的差别

     在 javascript之 this 关键字详解文章中,谈及了如下内容,做一个简单的回顾:         1.this对象的涵义就是指向当前对象中的属性和方法.       2.this指向的可变 ...

  6. springMVC-数据绑定

    定义: 将http请求中参数绑定到Handler业务方法 常用数据绑定类型 1.  基本数据类型 不能为其它类型和null值 2.  包装类 可以为其它对象,全部转成null值 3.  数组 多个对象 ...

  7. js字节转换、字节格式化函数

    有时候在上传附件后需要显示大小,可以选择在后台处理,也可以在前台用js处理. 比如我们想1024MB转换成1GB,那就需要进行转换,这里只是介绍用js进行转换. function bytesToSiz ...

  8. JAVA实现RSA加密,非对称加密算法

    RSA.java package org.icesnow.jeasywx.util.security; import java.security.Key; import java.security.K ...

  9. Apache Maven(二):构建生命周期

    Maven 约定的目录结构 我要遵循Maven已经约定好的目录结构,才能让maven在自动构建过程中找到对应的资源进行构建处理.以下是maven约定的目录结构: 项目名称 |-- pom.xml :M ...

  10. 千锋教育Vue组件--vue基础的方法

    课程地址: https://ke.qq.com/course/251029#term_id=100295989 <!DOCTYPE html> <html> <head& ...