您当前的位置: 首页 >  unity

Clank的游戏栈

暂无认证

  • 5浏览

    0关注

    186博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity使用RenderTexture实现实时阴影绘制

Clank的游戏栈 发布时间:2020-07-30 16:39:56 ,浏览量:5

##前言

一般实时阴影主要还在出现在角色、怪物的脚底为了然场景表现的更加逼真,实现起来主要会用到这三种方式:脚底放个阴影图片跟着主角动,通过摄像机的RenderRexture绘制显示,直接使用Unity的Projector组件。在2D场景中,为了方便,游戏中通常会直截了当的放一快灰色背景,实现的效果虽然少了几分逼真性,但也足够用。

但是如果想要在3D场景绘制脚底阴影,直接放阴影图就不合适了,为了让阴影效果更加逼真,下面就给大家介绍下使用RenderTexture的方式实现实时阴影绘制的效果吧。

基本思路其实就是多用了一个摄像机,将照相机把你需要照到的主角的内容呈现到一张单独的面片上,这个面片就摆在人较低作为它的阴影。看起来像简单版的一个小地图:只有主角的小地图。

场景中所需要的对象如图,对于map节点显示RenderTexteure的地方只要空的材质球就行了,要呈现摄像机照射的内容。直接用Plane对象或Quad对象都可以的。

此外,为了让阴影真实点,显示阴影的面片一般是灰色透明的,我们还要单独设置下,不然默认摄像机照出来的角色就是我们真实看到的世界:

紧接着还需要一个脚本告诉摄像机把内容写到我们的map面片上。

在场景中的display节点身上绑定脚本ShadowScript:

public class ShadowScript : MonoBehaviour {
public GameObject display; //角色形象
private GameObject ShadowCamera;
private GameObject map;
private RenderTexture mTex = null; //即为显示阴影的RenderTexutre
public int AntiAliasing = 4;
Transform child;
// Use this for initialization
void Start () {
child = this.transform.FindChild(“qiangu1”);
map = child.FindChild(“child/map”).gameObject;
ShadowCamera = child.FindChild(“child/camera”).gameObject;
if (!display)
display = this.transform.parent.gameObject;
mTex = new RenderTexture(2000, 2000, 0);
mTex.name = “Shadow” + GetInstanceID();
Camera mCamera = ShadowCamera.GetComponent();
mCamera.cullingMask = GetLayerMask(display.gameObject.layer);
mCamera.targetTexture = mTex;
}
public LayerMask GetLayerMask(int layer)
{
LayerMask mask = 0;
mask |= 1             
关注
打赏
1661738913
查看更多评论
0.3042s