关于unity 描边与被遮挡效果

在mmo项目开发过程中,不可避免的要实现描边与遮挡效果。

把这2个放在一起说,是因为实现的方式相同(不是shader相同)。

在一开始实现的过程中,描边就是直接写一个描边的shader来做。人物被选中的时候,就把人物的材质换掉,换成描边shader,鼠标移开时候,在还原之前的shader。这样是可以实现描边。unity中,表现各种渲染效果都是通过换材质来实现的。但是项目中难免出现各种材质,精英怪与普通怪的表现不一样,难道就要为了一个描边写出每个材质对应的描边材质?这样对项目日后的管理增加了难度,以后每写一个新的人物shader,都要对应的写一个描边效果。有没有一劳永逸的方法呢。把描边和换材质分开?

再看被遮挡效果。策划那边是想实现火炬之光那样的遮挡效果,怎么实现呢。人物mesh绘制两遍,第一遍ZTest 为 Greater, ZWrite off,第二遍正常绘制即可。如果人物是一个mesh就还好说,2个shader中2 个 pass就能实现。但是如果是多个mesh拼接的人物,2个pass就出出现问题。

最后使用多个camera来绘制,解决了这个问题。

实现如下:

每个camera实际上都和场景中的main camera一样(位置,旋转,各个参数)。只是他们各自的cullmask不一样。也就是绘制的东西不一样。

最开始,我先使用第一个camera 渲染场景(建筑),第二个相机渲染需要被遮挡效果的人物,第三个相机渲染人物描边效果,第四个相机正常渲染人物。是可以正常实现想要的结果,但是人物和场景分开相机渲染会造成场景中看不到人物的阴影。

所以最后只能把人物和场景放在一起渲染。

首先,maincamera绘制全部场景,人物。然后第二个camera绘制描边的人物,第三个camera清空场景的深度信息,然后使用Camera.RenderwithShader()绘制遮挡物的深度信息(遮挡物可以让美术在场景中标记,使用layer来标记),第四个camera绘制需要实现被遮挡效果的人物,一样使用Camera.RenderwithShader()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值