Unity3D地面云层投影实时绘制

本文介绍了在Unity3D中实现地面云层投影的实时绘制技术,包括使用深度纹理图、调整UV坐标来模拟云层移动,并通过Shader实现淡入淡出效果。通过在OnWillRenderObject函数中处理,确保高效渲染。文章提供了详细的Shader代码示例和实现步骤。
摘要由CSDN通过智能技术生成

现实生活中,地面上经常会有云彩的影子在移动,它其实就是通过太阳光将其投射到地面上的,这个应用在游戏中跟人的感觉场景比较真实,在FoxHole散兵坑游戏中就实现了这个效果,如下图所示:
这里写图片描述

实现类似的效果方法有两种:一种是常用的方法,就是使用一个天空盒,再实现一个飘动的云层,然后通过平行光将其投射到地面上,虽然比较好理解,这种方法不推荐,运行效率也会受影响。另一种方法就是我们本篇博客需要实现的,通过改变纹理的UV,实现移动效果。下面具体介绍如何实现
首先我们要整一个平面将阴影渲染到上面去,这里不是指RenderTexture,这个平面设置的时候需要一点小技巧就是它的位置和大小跟摄像机的远裁剪面是一样的,效果如下所示:
这里写图片描述
上图是我们需要将云层绘制的平面区域,下面是摄像机的远裁剪面,如下所示:
这里写图片描述
下面是通过代码实现二者的一致性,先实现四边形与摄像机远裁剪面位置一致:

        Camera cam = Camera.main;
        float dist = cam.farClipPlane - 0.1f; // 0.1 is some magic value to avoid culling
        Vector3 campos = cam.transform.position;
        Vector3 camray = cam.transform.forward * dist;
        Vector3 quadpos = campos + camray;
        transform.position = quadpos;

还有四边形平面与摄像机远裁减面的大小要一致:

Vector3 scale = transform.parent ? transform.parent.localScale : Vector3.one;
        float h = cam.orthographic ? cam.orthographicSize * 2f : Mathf.Tan(cam.fieldOfView * Mathf
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值