定向光:定向光参数详解,模拟太阳光与月光,阴影设置与级联阴影贴图
定向光,说白了就是那种没有具体位置、只有方向的光源。你想想看,太阳离我们那么远,它照到地球上的光线几乎是平行的。UE5里的定向光就是模拟这个效果——不管你的场景有多大,光照方向始终一致。
我个人习惯把定向光叫做「场景的骨架」。没有它,你的场景再漂亮也像一张白纸。今天我们就来彻底拆解这个光源。
定向光的基础参数
先看最常用的几个参数。打开定向光的细节面板,你会看到这些核心选项:
| 参数 | 作用 | 我的建议 |
|---|---|---|
| Intensity(强度) | 控制光照亮度 | 太阳光一般10-20 lux,月光0.01-0.05 lux |
| Light Color(颜色) | 光源颜色 | 太阳用暖色(255,240,220),月光用冷色(180,200,255) |
| Source Angle(源角度) | 控制阴影边缘软硬 | 太阳0.5-1.0度,月光0.1-0.3度 |
| Attenuation(衰减) | 定向光不支持衰减 | 因为它是平行光,距离不影响强度 |
嗯,这里要注意一个坑。很多新手会把定向光的强度拉得特别高,结果场景一片惨白。我在项目中遇到过类似情况——美术同学把强度调到50,然后跑来问我为什么场景过曝。其实太阳光在UE5里用10-15就足够了,配合后期处理里的曝光补偿,效果会自然很多。
模拟太阳光
模拟太阳光,核心是三个要素:方向、颜色、阴影软硬。
方向决定了场景的基调。清晨的阳光低角度,拉出长长的影子。正午的阳光从头顶照下来,影子短而硬。我个人习惯用BP_Sky_Sphere配合定向光,让天空球自动计算太阳位置。这样你旋转定向光时,天空的颜色也会跟着变,非常方便。
颜色方面,我建议用色温来思考。日出日落时偏暖(色温2000-3500K),正午偏白(5500-6500K)。在UE5里,你可以直接用色温模式,或者手动调RGB。我一般用(255, 235, 210)作为正午太阳,稍微带点暖意。
阴影软硬由Source Angle控制。角度越大,阴影边缘越模糊。为什么?因为太阳不是点光源,它有一定的大小。角度0.5度时阴影很锐利,适合表现晴天的硬阴影。角度1.5度时阴影柔和,适合有雾或者多云天气。
模拟月光
月光和太阳光最大的区别是什么?强度低、颜色冷、阴影更柔和。
我做过一个夜景项目,刚开始怎么调都不对劲。后来发现是强度太高了。月光的强度其实只有太阳的千分之一左右。在UE5里,我一般用0.02-0.05的强度,配合冷蓝色(180, 200, 255)。
还有一个容易被忽略的点——月光的Source Angle。月亮在天空中的视角和太阳差不多,但因为月光是反射光,本身比较散射,所以阴影边缘会更模糊。我建议用0.8-1.2度,让阴影有那种朦胧感。
另外,月光场景里一定要配合环境光。纯定向光会让暗部死黑。我会在场景里加一个Sky Light,强度调到0.1-0.3,颜色偏蓝紫,这样暗部会有细节,又不会破坏月光的主光氛围。
阴影设置与级联阴影贴图
阴影是定向光的灵魂。没有阴影,你的场景就是漂浮的。UE5使用级联阴影贴图(CSM)来处理定向光的阴影,说白了就是把场景按距离分成几层,每层用不同分辨率的阴影贴图。
先看核心参数:
| 参数 | 位置 | 作用 |
|---|---|---|
| Dynamic Shadow Distance | 定向光 > Cascaded Shadow Maps | 阴影可见的最大距离 |
| Num Shadow Maps | 同上 | 级联层数,默认4 |
| Distribution Exponent | 同上 | 级联分布权重,控制近处和远处的分辨率分配 |
| Shadow Map Resolution | 项目设置 > 渲染 | 每张阴影贴图的分辨率 |
Dynamic Shadow Distance 决定了多远能看到阴影。我建议室外场景设到5000-10000单位。太远了浪费性能,太近了远处物体没有阴影,穿帮。
Num Shadow Maps 默认4层就够了。层数越多,近处阴影越精细,但性能开销也越大。我做过一个开放世界项目,用了6层,结果帧率掉了10帧。后来改回4层,配合Distribution Exponent调整,效果差不多。
Distribution Exponent 这个参数很有意思。它控制级联的分布。值越小,级联越均匀分布;值越大,近处的级联越密集,远处的越稀疏。我一般用1.0-2.0。为什么?因为近处的阴影需要高精度,远处的可以模糊一些。
还有一个参数叫Shadow Bias,用来防止阴影偏移(Shadow Acne)。说白了就是阴影贴图精度不够时,会出现条纹或者斑点。我建议用默认值0.5,如果出现阴影闪烁,可以稍微调大一点。但不要超过2.0,否则阴影会偏移太多,出现「悬空」效果。
我曾经在项目中遇到一个棘手的问题——远处的阴影突然消失,出现明显的「级联边界」。后来发现是Dynamic Shadow Distance设得太小,而场景又太大。解决办法是把距离调大,同时把Distribution Exponent调到1.5,让级联过渡更平滑。
性能优化建议
定向光的阴影是性能大户。这里分享几个我在项目中用过的优化技巧:
- 降低Shadow Map Resolution:默认2048,室外场景用1024就够了。除非你的场景特别大,或者需要特写镜头。
- 使用Contact Shadows:在项目设置里开启Contact Shadows,可以补充小物体的阴影细节,同时不用提高CSM分辨率。
- 调整级联层数:室内场景用2层,室外用4层。不要盲目追求层数。
- 动态阴影距离:根据场景大小动态调整。我一般用蓝图在运行时根据玩家位置调整这个值。
知识体系结构图
下面这张图总结了定向光的核心知识体系,你可以把它当作快速参考:
定向光看似简单,但真正用好它需要理解背后的原理。从基础参数到阴影设置,每一步都影响最终效果。我个人建议你多尝试不同的参数组合,尤其是Source Angle和级联阴影的配合。你会发现,同样的场景,换一组参数,氛围完全不同。
好了,定向光的内容就到这里。记住,灯光不是技术活,是感觉活。参数只是工具,真正决定画面的是你对光影的理解。
公众号:蓝海资料掘金营,微信deep3321