Unity3D开发实例:穿越魔法门的Shader效果实现

发表于2016-06-22
评论3 3.8k浏览

1、前言

      最近项目要做一个怪兽出现的魔法门效果,大概就是类似于多啦A梦里面那个任意门或者贞子电影里面的荧屏爬出的效果,这样出现的怪兽就不会显得突兀以及奇怪,配上一个特效的话,还是会比突然出现这样的效果好很多的。

2、效果展示

      下面我们先来看看最终实现的大概效果:


  


      可以看到动图里面的怪兽,在镜子的另外一边是被切割了的,这样看上去就好像是怪兽从镜子里面走出来一样,达到我们想要的效果。

 3、分析

      原理上其实比较简单的,就是利用Cg/HLSL语言的 clip()函数实现“切割”效果。以下是官方函数定义的解析:



大概的意思就是如果传进来的X参数小于零的话,就舍弃掉,所以我们就可以利用这个方法来把我们不需要的像素区域“切割”掉了。

      我们先来做个简单的实现,舍弃掉Y轴上小于某个数的所有像素区域:



然后就可以得到下面简单的效果了:


 


      但我们想要自己去控制角度跟位置的话,就不能这么简单的方法了,我们是要计算一个3D模型上面的像素到某个平面的位置距离,然后根据这个距离信息再剔除。那我们来重温一下高中的点到平面距离公式:



      而用向量法来计算的话,就是:


  

    根据公式,我们就可以计算了:



调用:


     

同时,我们还需要获取平面的位置跟平面法线:


 

大概就是这样就可以得到最开始的效果了,总的来说原理还是比较简单的,只要懂得怎么获取像素点到某个平面距离就好了,如果还是不明白的话,大家可以结合代码来琢磨琢磨一下吧。

      对了,为了效率着想,最好在Shader上加多个开关,当怪兽完全出来之后,就把计算给关掉。

下面附件是Shader跟获取法线的代码。

     看了上面的文章 热爱游戏创作的你是不是已经开始热血沸腾了呢?是不是迫不及待的想加入游戏团队成为里面的一员呢?

     福利来啦~赶快加入腾讯GAD交流群,人满封群!每天分享游戏开发内部干货、教学视频、福利活动、和有相同梦想的人在一起,更有腾讯游戏专家手把手教你做游戏!

腾讯GAD游戏策划交流群486822377
腾讯GAD游戏美术交流1群 :342981373
腾讯GAD-VR交流群:476511561 
腾讯GAD游戏程序交流群:484290331

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引