在U3D用water4里的水模型做海面,怎樣做能看起來無限大,而且不卡?

用在PC上

unity3d里提供的water4是一個水模預製體,第一次看到的時候我腦抽了一下……直接平鋪了2500個在場景里……那叫一個提神啊,就差死機了……

後來,我想到海天一線,差不多就是盡頭所在(沒有盡頭的話,就是永遠只能看到那一線),而且本身攝像機的最大視距是1000,所以我就在可視範圍內鋪好水面,然後保持水面一直位於攝像機前方……可是還是卡……最低的時候只有19幀每秒,倒是避免死機了……

我對不起各位答主,我沒想問那麼複雜的問題,我根本就看不懂那些計算機圖形學之類的知識,希望這些優質答案能夠幫助到其他人……


厚顏無恥的貼一個自己blog里的未完成版 FFT Ocean Part 1 現在我自己還處在公式整理階段,估計等春節的時候才有空繼續改改;準備參考shader toy里的一些shader再修改下渲染部分

如果想做伸手黨就去Ocean waves using phillips Spectrum in Unity 這個人的博客里找,好幾篇相關的東西,都有源代碼可以下載


你得用這個方法:http://www-evasion.imag.fr/Membres/Fabrice.Neyret/NaturalScenes/fluids/water/waves/fluids/waves/Jonathan/articlesCG/NV_OceanCS_Slides.pdf

這可以完成無限大海面,而且不慢。


關於realistic ocean simulation? - 計算機圖形學

看 @文刀秋二 的回答後面部分提到了無限大。

@叛逆者 提到的Ocean Surface Simulation那個NV官方有demo源代碼。


請問你用那一年的pc,water4在pc上會卡,如果發布的是mobile平台,無論你用什麼模型做無限大海水,water4都會卡,還要不卡還早,等吧。如果想不卡,我的建議是渲染到低分辮率target, 做deferred。


做水的時候可以不用鋪滿水面,遠處靠全局霧,天空盒,背景遮蔽,控制渲染範圍,基於距離動態的顯示隱藏遠處水面,LOD處理等取巧方式

END

當然真的要鋪滿也可以用根據視差動態處理水面網格密度的方式或者基於屏幕空間計算等。但是我覺得一般第一條用好工程上更有用點。


推薦閱讀:

如果說程序設計是對現實生活的抽象,那麼如何培養這種能力?
如何高效深入的閱讀Redis的源碼?
主板上為什麼同時存在北橋晶元和南橋晶元?
calloc/malloc/realloc有什麼不同?
所有遞歸都可以改寫成循環嗎?

TAG:編程 | 計算機 | Unity遊戲引擎 |