天天看点

unity给自己的模型加上镜面效果

首先着色器来自这里:http://game.ceeger.com/forum/read.php?tid=3162

没有账号的童鞋可以到这里下载这个着色器和脚本:http://pan.baidu.com/share/link?shareid=149713&uk=3087344852

具体使用方法看上面的发的地址。

如果你已经开始使用了这个着色器,就会发现一个严重的问题,那就是在用自己的模型上就会出现各种奇怪的问题,而且蛋疼的是在编辑模式下没问题,运行游戏就有问题!原帖的回帖中也有不少人提到这个问题。

具体我这里的表现是:1、材质变成了蓝色。2、镜面反射完全不正确。

我在大概两周的时间里我都没有找到解决办法,后来还到国外翻到了一个叫MirrorReflection2的着色器,后来发现也是一样,而且这个着色器根本就是有问题的,想知道有什么问题的童鞋就自己去研究吧。

搞技术的就是要解决问题。首先想到的办法是学习着色器自己修改,后来发现这是个坑,看了一些教程后发现都不知道从何开始。后来还是打算慢慢研究为什么在自己的模型上会出错,说实在,我到最后都没搞清楚为什么,可能是顶点法线什么的计算不对吧,不过没关系,最后还是找到了解决办法,倒不如说是偶然发现。

1、材质变成了蓝色。这个是在一个单独的场景里研究发现的,变成蓝色是因为摄像机的背景颜色就是蓝色的!把摄像机背景颜色改成黑色就没问题。

2、反射不正确。具体发现过程略过,其实只是一个很简单的道理。如果说内置Plane能正常反射,那么用内置Plane来反射不就好了。等等,我们之所以使用自己的模型就是因为镜面不是矩形的,用Plane该怎么弄?其实之前想过类型Mask之类的东西不过明显不现实,而其实简单的办法是共享材质。所谓镜面归根到底不过是对材质的修改,那么让Plane接收正确的反射,然后使用了相同材质的模型就得到了正确的反射,不过这个Plane该放哪?我们不希望在场景中看到它。放到镜子后面去不就好了,这里谁都看不到,而且还不会影响镜面效果。

需要注意的是,如果镜面模型很大,而场景进入的时候摄像机看到了模型而看不到Plane,那么模型的材质就是白色的,所以尽量把Plane拉伸到跟模型差不多才能解决这个问题,这大概算是这个方法的弊端,所以如果知道怎么完美的解决方案是最好不过,本文只是抛砖引玉之用。

继续阅读