本系列主要参考Unity灯光与渲染技术教程Unity Lighting And Rendering,同时会加上一点个人实践过程和理解。
========================================== 分割线 ==========================================
这篇文章主要讲全局光照,在看教程的时候就有一个点不是很理解,就是作者开启物体的static这个选项。在网上查找一些资料,有的说”static表示物体时静态的,多用于静止不动的物体,此外static有多种,有的用于烘焙,有的用于遮挡剔除“;还有的指出”所谓静态就是静止的,你如果要改变它位置,就不是静态了,静态物体在脚本加载的时候就开始渲染,不随着update
每侦更新,你如果要移动物体,就必然要重新刷新,就是动态了 “
总结来看,就是说unity3d中物体组件上的static选项是包括很多种static含义的,而本文中主要研究的是Lightmap Static。也就是在游戏中如何实现全局光照的方式。
而为什么要选择这种方式主要是由游戏的需求决定的,在游戏运行中,速度是最重要的,所以在跟渲染质量进行比较的时候,就要做出取舍,然而我们仍然在追求着更真实的视觉效果,全局光照即是实现虚拟物体真实性的一个很重要的因素,因为它可以模拟真实世界中各个物体反射光线的相互作用。这种交互是非常消耗性能的,因此选择了游戏中的光线通常会用lightmap这种静态的光照技术来代替动态的光照,从而在保证游戏运行帧数的同时提高渲染效果。
一般而言,在场景中完全静止的物体标记成static是比较好的。这个静止是指在游戏运行过程中没有发生移动或者缩放或者旋转等。因为每当物体进行运动,都需要重新进行模拟运算。这不仅仅是在光照方面,在其他的方向上也可以提高效率,比如静态物体的碰撞检测要更快,同时多个使用同一材质的静态物体在绘制的时候只使用一个drawcall,进而节省了CPU。在光照计算上,static的物体也更快一些。
在进行操作之前还要说明,个人免费版基本上无法实时渲染,大部分情况下只能静态渲染。这篇文章的内容我用免费版的时候开启static就直接挂掉了,换成专业版就没问题,猜想如果要是出现故障,可以考虑是这个原因。
步骤如下:
点击物体Cornell Box-点击static-选择yes,change children,即可实现全局光照的效果。
这篇文章的步骤很简单,到这里就结束了,然而这只是后续讲解的一个引子,因为现在每移动小球或者改变光照方向都需要重新逐帧烘焙light map,后续将通过多种方式来实现。当然,改变光照的时候,光照贴图自动烘焙的前提是需要开启连续的烘焙选项,在lighting面板系统中默认开启。
遗留问题:
在实现小球的static效果的时候,并没有得到作者那种光滑的光照贴图。设置完全相同结果不同不知道为什么。
我得到的是下图这种很硬的效果,而且小球上似乎反射了一些不平整的阴影。
就在这篇文章快写完的时候去论坛看到一篇关于Unity4和Unity5灯光烘焙差别的文章,其中提到由于版本采用的光照烘焙技术不同,所以有很大的出入。官网介绍在这里。
这个面板的区别似乎解决了我最开始的疑惑,因为必须把烘焙的物体设置为静态。
再有就是之前操作的时候没有把灯光的烘焙模式调为Baked,只有在这个设置好,同时自动烘焙关闭才能看到烘焙后的效果。
最后Scale In Lightmap 、Realtime
Resolution、Baked Resolution三个参数都试过仍然没有解决我球体为什么上面有奇怪阴影的问题。