4、光照系统入门:光源类型、光照设置与阴影、光照贴图基础
光照,说白了就是游戏的灵魂。没有光,再精美的模型也只是一堆灰扑扑的多边形。我刚开始做游戏那会儿,总觉得光照嘛,随便打几个灯就行了。结果项目一跑,场景要么亮得像医院手术室,要么暗得连路都看不清。嗯,后来我才明白——光照不是「照亮」,而是「塑造」。
今天咱们就来聊聊光照系统的三个核心:光源类型、阴影与光照设置、以及光照贴图。这些都是我每天在项目里打交道的东西,希望能帮你少走点弯路。
4.1 光源类型:三种基本光源
在Unity或Unreal里,光源类型其实就三种:方向光、点光源、聚光灯。每种都有它的脾气。
4.1.1 方向光(Directional Light)
方向光模拟的是太阳。它没有具体位置,只有方向。你想想看,太阳离我们那么远,光线几乎是平行的,所以方向光照射到场景里,所有物体的受光角度都一样。
特点:
- 没有衰减,距离不影响亮度
- 覆盖整个场景,适合做主光源
- 阴影计算开销相对较小
我在项目中遇到过一个问题:方向光的旋转角度稍微偏一点,整个场景的氛围就变了。比如你想做黄昏效果,把方向光压低到接近地平线,阴影会拉得很长,很有电影感。但如果你不小心把光朝上打,场景就会变得阴间——嗯,真的,我试过。
4.1.2 点光源(Point Light)
点光源像灯泡,从一个点向四面八方发光。它有位置,有范围,有衰减。
关键参数:
- Range(范围):光能照多远
- Intensity(强度):亮度
- Color(颜色):光的颜色
- Falloff(衰减):光随距离变暗的速度
我个人习惯把点光源的衰减曲线调成「平方反比」,这样更接近真实物理。但如果你追求性能,可以用线性衰减,计算量小一些。
4.1.3 聚光灯(Spot Light)
聚光灯像手电筒,光从一点发出,呈锥形照射。它有方向、有角度、有衰减。
参数:
- Spot Angle(聚光角度):锥形的大小,通常0-180度
- Inner/Outer Angle(内外角):内角是强光区域,外角是过渡区域
- Range(范围):照射距离
聚光灯很适合做舞台效果、手电筒、或者建筑里的射灯。我记得有一次做恐怖游戏,主角拿着手电筒在黑暗里探索,聚光灯的锥形边缘稍微加了一点模糊,效果特别真实。玩家反馈说「手电筒的光像真的一样」。
4.2 光照设置与阴影
光照设置不只是调亮度。阴影才是让场景「立起来」的关键。
4.2.1 阴影类型
主流引擎支持三种阴影:
| 阴影类型 | 性能开销 | 质量 | 适用场景 |
|---|---|---|---|
| 硬阴影(Hard Shadow) | 低 | 边缘锐利 | 卡通风格、低配设备 |
| 软阴影(Soft Shadow) | 中 | 边缘模糊 | 写实风格、PC/主机 |
| 接触硬化阴影(Contact Hardening) | 高 | 近处硬、远处软 | AAA级画质 |
我个人建议:移动端用硬阴影,PC端用软阴影。接触硬化阴影虽然好看,但开销太大,除非你项目不差性能。
4.2.2 阴影设置的关键参数
- Shadow Resolution(阴影分辨率):越高越清晰,但越耗显存。我一般用1024或2048,512太糊,4096太贵。
- Shadow Distance(阴影距离):超过这个距离的物体不投射阴影。我习惯设成30-50米,远了你也看不清。
- Shadow Cascades(阴影级联):把阴影分成近中远三层,近处精细远处粗糙。这个技术很实用,能大幅提升近处阴影质量。
4.3 光照贴图基础
光照贴图(Lightmap)是预烘焙的光照信息。说白了,就是把光照「画」到模型上,运行时不用实时计算。
4.3.1 什么时候用光照贴图?
- 静态物体(墙壁、地面、建筑)
- 不需要动态阴影的场景
- 移动端或低配设备
- 需要高质量间接光照
我做过一个室内场景,全是静态物体。如果用实时光照,每个点光源都要计算阴影,性能根本扛不住。后来我全部烘焙成光照贴图,帧率从30帧直接飙到60帧。嗯,这就是光照贴图的威力。
4.3.2 光照贴图的工作流程
- 标记物体为静态:在Inspector里勾选「Static」或「Lightmap Static」
- 设置光照参数:调整光源强度、颜色、阴影类型
- 调整UV:光照贴图需要第二套UV,不能和纹理UV重叠
- 烘焙:点击Bake,等待引擎计算
- 检查结果:看有没有漏光、接缝、噪点
4.3.3 光照贴图的参数
| 参数 | 作用 | 建议值 |
|---|---|---|
| Texel Size(纹素大小) | 每个像素对应多少世界单位 | 0.1-0.5(根据场景大小) |
| Max Lightmap Size | 单张贴图最大分辨率 | 1024或2048 |
| Padding(间距) | 不同物体之间的间隔 | 2-4像素 |
| Bounces(反弹次数) | 间接光照的反弹次数 | 2-3次(多了效果提升不大) |
我个人习惯把Texel Size设成0.2,这样近处细节够用,远处也不浪费。Bounces设成2次就够了,3次以上效果提升微乎其微,但烘焙时间翻倍。
4.4 总结与建议
好了,咱们来捋一捋今天的内容:
- 方向光:做太阳,调角度就行
- 点光源:做灯泡,注意数量和衰减
- 聚光灯:做手电筒,阴影开销大
- 阴影:硬阴影省性能,软阴影好看,级联是神器
- 光照贴图:静态物体的救星,性能翻倍的关键
最后说一句:光照这东西,理论再多也不如动手调。你打开引擎,放一个方向光,调调角度,看看阴影的变化。再放一个点光源,调调衰减。嗯,亲手试过,你才能真正理解。
下一章咱们聊材质系统,到时候我会讲讲怎么用材质让光照「活」起来。敬请期待。