识别不同种类的光源
在游戏或实时应用程序中,我们可能会创建多种不同种类的场景,比如室内场景、室外场景、真实的场景或完全想象的场景。即便项目是一个完全的想象的或是科幻的故事,灯光也是非常重要的一环,它能极大提升沉浸感。
在光照设计和实现中,识别出一个场景所需要的光照是关键的初始步骤:
自然光(Natrual lighting):通常是日光或月光
模拟光(Motivated lighting):场景中模拟特定种类的真实光源,比如路灯或车灯
色调光(Key lighting):场景中照明焦点物体的灯光
环境光(Ambient lighting):在Uinty中也叫漫反射环境光(diffuse enviromental light),环境光是存在于场景中但没有特定来源的光。
注意:还有更多种类的灯光,不在此展开
配置平行光
对于室外场景,常见的自然光源是太阳或月亮。在Unity中,当我们创建了一个场景后,默认会有一个Direcitonal Light的游戏物体,这个游戏物体的功能就是太阳或月亮。
平行光源会朝着设定好的方向(在gizmo中可以打开或关闭方向显示)发出平行光:
对于平行光来说,我们可以认为它离场景非常远。因此它发出的平行光可以认为不是发散的,它发出的光不受到光源的大小和位置影响,而只和其方向有关。
在场景中测试一下平行光:
首先,确保天空盒会起效果,在下图红框处记得勾选Skybox选项
然后找到场景中的Directional Light,尝试调整其大小和位置,我们会发现场景没有发生变化
通过调整平行光的方向,可以看到场景发生了明显变化
在Direcitonal Light的Inspector中,尝试调整一下灯光的颜色
天空盒基础知识
了解了平行光之后,我们来看另一个重要的东西:天空盒。
在Unity中,天空背景是通过使用一种称为skybox的特殊材质来创建的。天空盒是立方体,每一面上有不同的纹理。当我们使用天空盒来渲染天空的时候,Unity会将场景放到天空盒立方体内,Unity会先渲染这个立方体。
天空盒也能够包含远距离的环境信息。这些信息会对场景的空间和深度感造成影响,包括:
景观特性 - 例如场景远处有高山背景
建筑物 - 例如只能在地平线上可见的宏伟的城市
用于天空盒的材质需要使用Skybox shader,有两类Skybox shader:
Textured(纹理化的):使用材质纹理来生成天空盒的shader
Procedural(程序化的):使用材质属性来生成天空盒的shader
创建一个程序化的(Procedural)天空盒
接下来我们创建一个自定义的程序化天空盒:
1. 新建材质,取名为MySkyBox
2. 选择MySkyBox,在Inspector面板中,将Shader选择为Skybox -> Procedural
3. 在配置天空盒之前,我们最好能够能让场景使用这个自定义的材质来渲染天空,以便修改参数的时候能够直观地看到效果。我们在Window -> Rendering -> Lighting选项窗口中,选择Enviroment,将Skybox Material选择为我们刚刚创建的材质(也可以直接拖拽)
4. 回到MySkyBox的Inspector面板,我们来看看它都有些属性:
Sun: 表示太阳的样子,选择High Quality的话,太阳会带光晕效果
选择Simple的话,太阳只是简单显示一个圆盘
Sun Size: 太阳的大小,这个没有太多必要细说,值越大场景中太阳看起来就越大
Atomsphere Thickness:大气层厚度,大气层厚度越厚,它吸收的光线就越多
Sky Tint:天空的色调,比如我们调整它为蓝色
Ground:地平线下的区域颜色(地面),比如我们调整它为红色
Exposure:曝光度,调整天空的曝光度。我们可以简单地用亮度来理解就行了。