1. 程式人生 > >unity給自己的模型加上鏡面效果

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拉伸到跟模型差不多才能解決這個問題,這大概算是這個方法的弊端,所以如果知道怎麼完美的解決方案是最好不過,本文只是拋磚引玉之用。