Unity3D开发实例:穿越魔法门的Shader效果实现
1、前言
最近项目要做一个怪兽出现的魔法门效果,大概就是类似于多啦A梦里面那个任意门或者贞子电影里面的荧屏爬出的效果,这样出现的怪兽就不会显得突兀以及奇怪,配上一个特效的话,还是会比突然出现这样的效果好很多的。
2、效果展示
下面我们先来看看最终实现的大概效果:
可以看到动图里面的怪兽,在镜子的另外一边是被切割了的,这样看上去就好像是怪兽从镜子里面走出来一样,达到我们想要的效果。
3、分析
原理上其实比较简单的,就是利用Cg/HLSL语言的 clip()函数实现“切割”效果。以下是官方函数定义的解析:
大概的意思就是如果传进来的X参数小于零的话,就舍弃掉,所以我们就可以利用这个方法来把我们不需要的像素区域“切割”掉了。
我们先来做个简单的实现,舍弃掉Y轴上小于某个数的所有像素区域:
然后就可以得到下面简单的效果了:
但我们想要自己去控制角度跟位置的话,就不能这么简单的方法了,我们是要计算一个3D模型上面的像素到某个平面的位置距离,然后根据这个距离信息再剔除。那我们来重温一下高中的点到平面距离公式:
而用向量法来计算的话,就是:
根据公式,我们就可以计算了:
调用:
同时,我们还需要获取平面的位置跟平面法线:
大概就是这样就可以得到最开始的效果了,总的来说原理还是比较简单的,只要懂得怎么获取像素点到某个平面距离就好了,如果还是不明白的话,大家可以结合代码来琢磨琢磨一下吧。
对了,为了效率着想,最好在Shader上加多个开关,当怪兽完全出来之后,就把计算给关掉。
下面附件是Shader跟获取法线的代码。
看了上面的文章 热爱游戏创作的你是不是已经开始热血沸腾了呢?是不是迫不及待的想加入游戏团队成为里面的一员呢?
福利来啦~赶快加入腾讯GAD交流群,人满封群!每天分享游戏开发内部干货、教学视频、福利活动、和有相同梦想的人在一起,更有腾讯游戏专家手把手教你做游戏!