【Unity学习】Unity的阴影基础实现(Shadow Map)

Shadow Map的实现原理

在实时渲染中,我们最常使用的是一种名为Shadow Map的技术。即将摄像机位置与光源位置重合,那么场景中的阴影区域就是摄像机看不到的地方,在Unity中就是使用的这种技术。
再前向渲染路径中:
其实我们只需要得到在以上这种情况下的深度信息就行了,所以没必要再像计算光照那样,使用BassPass 和 Additonal Pass来更新深度信息来得到阴影映射纹理。而是使用一个专门的Pass来做,再这个Pass中,标签被设定为“LightMode” = “ShadowCaster”
当开启了光源的阴影效果之后,底层渲染引擎首先会再Shader中寻找该LightMode,如果没有,就会在指定的Fallback中继续寻找。

Shadow Map的实现过程

其实这是两个过程:
过程一:物体向其它物体投射阴影。这需要把该物体加入到光源的阴影映射纹理的计算之中。在Unity中就是在ShadowCaster的Pass中实现的。
过程二:物体接收来自其他物体的阴影。这需要在Shader中对阴影映射纹理进行采样,把采样结果和光照结果相乘。

备注

在不声明ShadowCaster的Pass的时候,我们会发现物体依然产生了阴影,这是因为在Fallback中有一个已经写好的ShadowCaster的Pass存在,可以直接打开对照代码
对于接收其他物体的阴影部分在后续更新中补上,不要是运用了宏指令三剑客,也不难

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中可以使用ShadowMap实现阴影效果,并且可以通过阴影的颜色、透明度等参数来实现阴影的分析和变化。以下是一个简单的实现步骤: 1.在Unity中创建一个场景,并将需要投射阴影的物体放置在场景中。 2.在场景中创建一个光源,并将其设置为投影模式。在光源的参数设置中,选择Shadow Type为Hard Shadows或Soft Shadows,并将Resolution设置为需要的大小。 3.在被投射阴影的物体上,将其接收阴影的属性设置为true。这可以通过在物体的Renderer组件中设置Cast Shadows为On,或者通过代码设置。 4.在阴影的Material中,可以设置颜色、透明度等参数来实现阴影的分析和变化。例如,可以根据时间、位置等因素来改变阴影的颜色或透明度。 以下是一个示例代码,可以在Update函数中实现根据时间变化阴影颜色的效果: ```csharp public class ShadowColor : MonoBehaviour { public Material shadowMaterial; //阴影的材质 public Color startColor; //开始颜色 public Color endColor; //结束颜色 public float duration = 2.0f; //变化时长 private float startTime; //开始时间 void Start() { startTime = Time.time; } void Update() { float t = (Time.time - startTime) / duration; shadowMaterial.color = Color.Lerp(startColor, endColor, t); } } ``` 在该代码中,首先定义了阴影的材质和起始、结束颜色。然后,在Start函数中记录了开始时间,每帧根据时间变化计算阴影颜色,最终将其赋值给阴影的材质。可以根据需要修改该代码来实现不同的阴影分析和变化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值