[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights
既上一篇分享了中文字幕的摄像机介绍Cameras后,本篇分享一下第2个已完工的视频,即《beginner Graphics – Lessons系列之灯光介绍Lights》。听译、时间轴、压制者均为本人。请勿将视频用于非法目的。
类似现实世界,Unity中用灯光照亮场景
没有灯光,场景中的物体在摄像机中是不可见的
宽泛的说,Unity中有两种灯光
动态(Dynimic)光和烘焙(Bake)光
动态光在游戏运行中是实时计算的
你只需在场景中添加灯光对象就可以了
烘培光是在线下(Off-line)计算并保存成纹理(Texture)的
这些灯光纹理被贴到烘培的物体上以提升性能
为了照亮场景,要使用灯光组件(light component)
和其它组件一样,灯光组件也要附加到游戏对象(Game Object)上
我们可以用这个游戏对象的Transform属性来移动灯光
灯光组件提供了4种灯光类型
点光(Point Light)
平行光(Directional Light)
聚光灯(Spot Light)
和只用于烘培的面光(Area Light)
不同类型的灯光对游戏的照明效果差异很大
点光就像一个小光球
点光根据其所在位置照射场景中的物体
对点光进行旋转是没有意义的
因为点光照射到各个方向的光是相同的
平行光就像太阳
平行光能够照射到场景中所有的物体
根据旋转角度进行照射
位置属性对平行光是没有意义的
聚光灯就像是手电筒
或者汽车的头灯
它根据其位置和旋转角度对一个圆锥体范围内的物体进行照射
所以聚光灯的位置和旋转角度属性都是有意义的
面光只用在烘培时
面光从平面的一侧向一个矩形范围内发射任意方向的光
除了这4种灯光外,还有另外两种光源
环境光(Ambient Light)和发光材质(Emissive Material)
环境光控制场景中的无方向全局光
环境光在动态光和烘培光中都发挥作用
如果想去掉环境光的影响
就把环境光的颜色设置为黑色(在RenderSettings里)
然后在场景中添加上文介绍的4种灯光
想用发光材质的话
只需给物体设置合适的自发光着色器(shader)
自发光材质只在烘培光中发挥作用
灯光有一些属性供你设置
灯光组件的"Range"属性决定了光线照射的距离远近
"Range"只对点光或聚光灯类型的灯光有意义
在聚光灯下还可以设置"Spot Angle"属性
"Spot Angle"属性决定了聚光灯的圆锥体照射范围的角度大小(单位为度)
"Color"控制灯光的颜色
场景会根据灯光颜色的变化而改变颜色
"Intensity"控制灯光的强弱
这个属性和"Range"是相互独立的
在场景中使用灯光时,需要配合使用各项属性才能做出令人动容的效果
无论是增大"Intensity"还是增大"Range"属性
灯光看上去的确会显得更亮
但是他们照亮场景的方式是不同的
除了基本的渲染外
我们还可以使用一些高级设置
阴影(Shadows)、光晕(Halos)、耀斑(Flare)和Cookie
Cookie是一个虚拟遮罩或者标记
它挡在光源前面来产生某种阴影
Cookie使用贴图的Alpha通道来给光源产生阴影
聚光灯和平行光使用Cookie时,Cookie必须使用2D贴图
点光使用Cookie时,Cookie必须使用立方体贴图(Cube map)
这很符合常识
因为聚光灯和平行光只沿着一个方向照射
点光却向所有方向照射
使用平行光时,有一个改变Cookie大小的选项
让你可以缩放Cookie阴影
面光不能使用Cookie
在烘培时,只有聚光灯能使用Cookie
Cookie对点光和平行光则无效
光照有2种阴影类型
硬阴影(Hard)和软阴影(Soft)
硬阴影能满足大部分情况
软阴影看起来更舒服,但渲染更耗时
渲染阴影有一些调节选项
"Strength"控制阴影的黑色程度
调整这个属性直到阴影在场景中看起来很和谐
"Strength"调整到1的时候往往太强
"Resolution"(分辨率)是渲染质量选项
其默认选项是"Use Quality Settings"
你可以在此修改
"Bias"(乖离率)控制某一光照产生的阴影外围强度
"Bias"影响影子起始点到物体的距离
"Bias"太小会使物体的影子太假(artifact)
太大则会使物体看起来漂浮着(hovering)
使用平行光+软阴影时,会有2个额外配置项
柔和度(Softness)和柔化淡出(Softness Fade)
柔和度是指阴影边界清晰程度
柔化淡出是指从多远开始给物体绘制软阴影
"Draw Halo"(绘制光晕)会在灯光周围绘制场景默认的光晕
光晕和"Range"、"Intensity"属性都相关
光晕的详细设置可以在场景的"Render Settings"中找到
想重写(Override)默认光晕的话
必须关闭灯光的"Draw Halo"选项
然后给灯光添加一个"Halo"组件
眩光(Flare)和光晕很像
但是它是模仿透过玻璃照射的亮光源的效果
当"Flare"属性被赋予一个光晕材质后
灯光会被渲染成具有镜头光晕(Lens Flare)的样子
"Flare"只受"Intensity"属性控制
你可以直接给灯光物体添加一个镜头光晕(Lens Flare)组件
不过灯光的"Flare"属性就应当清空了
否则这个灯光会有2个光晕
必须给摄像机添加一个"Flare Layer"组件
摄像机才能渲染光晕
渲染动态灯光的方式有2种
顶点光照(vertex lighting)和像素光照(per-pixel lighting)
顶点光照一般是最快的渲染方式
它通过计算物体的网格顶点的颜色来渲染场景
然后通过插值(interpolate)渲染网格的表面
像素光照是逐个像素渲染的,所以更耗时
虽然像素光照渲染时慢
但是它能实现一些顶点光照无法实现的效果
法线贴图(normal mapping)、灯光cookies和实时阴影(Realtime shadow)
只在像素光照下才能使用
聚光灯形状、某些特殊高光(high light)在像素光照下的效果也更好
光照对渲染速度有很大的影响
像素光照的数量可以在"Render Settings"中设置
只要设置"Pixel Light Count"属性即可
当你使用正向渲染路径(forward rendering path)时
灯光组件提供给你一个选项"Render Mode"来指定其渲染模式
"important"会强制此灯光逐个像素地渲染
"not important"会强制此灯光使用更快的方式渲染
例如逐个顶点的方式或球面调和(Spherical?Harmonics)的方式