Unity3D自带功能:灯光及光照烘焙
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Unity3D自带功能:灯光及光照烘焙
这一篇比较偏重于功能介绍,具体的实例操作请参考其他文章:未完成
游戏场景中灯光照明的构成
现实生活中的光线是有反射、折射、衍射等特性的。对这些基本特性的模拟一直以来都是计算机图形图像学的重要研究方向。
在CG中,默认的照明方式都是不考虑这些光线特性的,因此出来的效果与现实生活区别很大。最早期的时候,人们利用各种方式来模拟真实光照的效果,比如手动在贴图上画上柔和阴影,或者用一盏微弱的面积光源去照明物体的暗部以模拟漫反射现象等等。
然后出现了所谓的高级渲染器,用计算机的计算来代替我们的手工劳动来进行这个“模拟”的工作。在漫长的发展过程中,出现过很多很多计算方案,总体上分为这样几类:
直接模拟光线从被光源发出到最终被物体完全吸收的正向过程,也就是常说的GI(Global Illumination);
不直接模拟光线,而是反向搜集物体表面特定点的受光照强
度来模拟现实照明效果,也就是常说的FG(Final Gathering);
完全不考虑光线的行为,单纯基于“物体上与其他物体越接近的区域,受到反射光线的照明越弱”这一现象来模拟模拟现实照明(的一部分)效果,也就是常说的AO(Ambient Occlusion);
将场景光照结果完全烘焙到模型贴图上,从而完完全全的假冒现实光照效果,也就是我们所说的Lightmap。
不论是GI还是FG,计算量都是非常大的,一帧图片需要几十分钟甚至几十小时来渲染,所以很难被应用在游戏设计领域。
因此在游戏设计领域,光照贴图技术依然是目前的主流方式。
由于光照贴图需要事先烘焙(baking)出来,且仅支持静态物体(Static Object),而我们的游戏场景中几乎不可能全都是静态物体,所以通常游戏场景中的灯光照明是多种照明方式的混合作用。
对于静态物体来说,大多使用光照贴图来模拟间接光的照明效果,然后加上直接光源的动态照明效果;
对于运动物体来说,则仅用直接光源的动态照明效果,或者
使用光照探针来模拟间接光的照明效果。
随着技术的发展以及计算机计算能力的提高,也许在未来,我们能够直接在游戏场景中进行动态的全局光照模拟也说
不定呢。新版Unity3D中就已经出现了Realtime Global Illumination,虽然这个技术还处于雏形阶段,所需要的计算量依然庞大,但确实为我们展示了一个令人激动的前景。
当然,技术是技术,产品是产品。技术是为产品服务的,再先进的实时全局光照系统,对于像素风格的游戏场景的提升也是几近于0。
“选择合适的技术来完善我们的产品和制作流程”,以及“根据现有技术来设计产品和制作流程”,说的其实是同一个意思。
1. 直接照明(Direct Lighting)
Unity3D中的直接照明主要来源于各种灯光物体,而灯光物体本质上是空物体加上灯光组件。直接照明可以产生阴影,但光线不会反射、也不会折射,但可以穿透半透明材质物体。
1.1 灯光类型(Lights)
Unity3D中默认可以创建这么几种灯光:聚光灯、点光源、
平行光、面积光,另外还可以创建两种探针(Probe):反射探针(Reflection Probe)和光照探针组(Light Probe Group)。Unity中可以创建的灯光类型物体
平行光
平行光通常用来做阳光,Unity3D新建场景后会默认在场景中放置一盏平行光。平行光不会衰减。
unity_lighting04.pngType:灯光类型,所有类型的灯光都其实共用一个组件,本质上是一样的。
Color:灯光颜色
Mode:灯光照明模式,每种模式对应Lighting面板中一组设定
Realtime:对应Realtime Lighting
Mixed:对应Mixed Lighting
Baked:对应Lightmapping SettingRealtime Lighting是新出现的一种烘焙光照技术,它并不像传统的烘焙技术一样
直接烘焙间接光照颜色和亮度信息到光照贴图上,而是烘焙物体和物体之间的关系信息,比如A面对B面有漫反射效果,B面对C面有漫反射效果等等。这样一来,只要物体之间的关系不变(也就是所有的静态物体都不移动位置),就不需要重新烘焙,从而使得我们可以在场景中随意运用动态光源(dynamic lights)。而传统的Lightmapping光照贴图方式则不支持动态光源效果(改变光源不会改变场景光照)。Realtime Lighting比Lightmapping要更耗费系统资源,所以手游上就不要考虑了。Intensity:灯光强度
Indirect Multiplier:在计算该灯光所产生的间接光照时的强度倍乘
Shadow Type:阴影贴图的类型
No Shadows:无阴影贴图
Hard Shadows:硬阴影贴图
Soft Shadows:光滑阴影边缘(也就是阴影模糊效果)Baked Shadow Angle:烘焙阴影的角度
Realtime Shadows Strength:实时阴影强度
Resolution:阴影贴图分辨率
Bias:阴影偏移,通常适当增加这个值来修正一些阴影的artifact
Normal Bias:法线偏移,通常适当减少这个值来修正一些阴影的artifact(不同于Bias的使用场合)
Near Plane:阴影剪切平面,对于与摄影机距离小于这个距离的场景物体不产生阴影
Cookie:Cookie相当于在灯光上贴黑白图,用来模拟一些阴影效果,比如贴上网格图模拟窗户栅格效果
Cookie Size:调整Cookie贴图大小
Draw Halo:灯光是否显示辉光,不显示辉光的灯本身是看不见的