Unity灯光渲染之Shadow

本文介绍了Unity中场景烘焙的不同模式,包括Static、Bake及Mix等,并探讨了如何通过调整光照模式和阴影设置来实现更真实的阴影效果。还讨论了不同光照模式的特点及其对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般我们在烘焙场景的时候,对于那些不动的物体,我们会勾选上Static,然后灯光模式改为Bake,进行场景烘焙,这样Unity就会把光照信息自动计算到光照贴图中,贴到物体上去,可以减少实时计算的效率,节省性能。但是对于一些移动的物体,就没法显示出阴影效果了。

移动静态物体,阴影还是在原地,但是动态物体却没有阴影。

这个时候我们可以将灯光模式修改为mix 模式,场景内的静态对象会被烘焙GI拿去计算,将光照信息计算到贴图上,同时对于非静态物体,混合模式光照仍会运算实时光到非静态物体上。一般在烘焙的时候都会选择该模式

全局光照模式选择

一般会选择BakedGlobal

LightMode:有三个参数

1.Subtractive:低配版烘焙,效果比较差,只支一盏光源,如果一个物体同时受多盏灯光影响,就不行了该模式。

2.Shadowmask:烘焙效果好,支持多盏光源。

3.BakedIndirect:高配版烘焙,效果更好,但耗费性能,只烘焙间接光,在ShadowDistance内显示阴影,出了这个范围,则不显示阴影。

当移动物体进入其他物体的阴影中,按照自然现象,该移动物体会受到阴影效果影响。但是如果我们的ShadowMode 选择

该选项在Edit-->ProjectSetting-->Quality

shadowMask模式,移动物体则不会受到其他物体阴影影响,这会看起来不真实

当把模式选择为

我们可以看到移动物体就会收到阴影影响

我们可以通过修改ShadowDistance的值,让阴影在一定距离内显示。超过该距离,则显示光照贴图计算出来的。但是这种方式显示出来的效果,则是实时计算出来的,比较耗费性能,还有另外一种方法,采用灯光探针,来达到该效果。我们下一篇再来介绍灯光探针Light Probe Group。

### 使用 ShadowMask 组件 在 Unity 中,`ShadowMask` 是一种混合光照模式下的特性,允许高质量的阴影效果应用于特定的对象。当场景中的对象数量较多时,使用 `Distance Shadowmask` 可以有效地平衡性能与视觉质量[^1]。 为了实现这一功能,在设置灯光时需确保其投射阴影,并选择合适的阴影类型(如硬阴影或软阴影),这有助于增强最终渲染的真实感[^3]。对于想要应用 `ShadowMask` 的游戏物体而言,除了配置好光源外,还需要满足以下几个条件: - 渲染器上的材质应支持阴影贴图。 - 对象所在的层必须被包含于摄像机的 culling mask 中。 - 场景内存在至少一个启用了实时全局光照计算的 Light Probes。 下面是一个简单的脚本例子来帮助理解如何通过编程方式调整带有 `ShadowMask` 属性的游戏对象的行为: ```csharp using UnityEngine; public class AdjustShadowSettings : MonoBehaviour { public enum ShadowType { Hard, Soft } private Renderer _renderer; private MaterialPropertyBlock _mpb; void Start() { _renderer = GetComponent<Renderer>(); _mpb = new MaterialPropertyBlock(); // 假设我们有一个方法可以根据需求更改阴影类型 SetShadowType(ShadowType.Soft); } public void SetShadowType(ShadowType type) { switch (type) { case ShadowType.Hard: _mpb.SetFloat("_ShadowStrength", 1f); // 更改阴影强度参数 break; case ShadowType.Soft: _mpb.SetFloat("_ShadowStrength", 0.75f); break; } if (_renderer != null) _renderer.SetPropertyBlock(_mpb); } } ``` 此代码片段展示了如何动态改变指定材料上 `_ShadowStrength` 参数值的方法,从而间接影响到由该材料所控制模型接收来自具有 `ShadowMask` 设置光线所产生的阴影外观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值