紅色警戒3的水面特效是怎麼做出來的?
01-21
08年的遊戲dx9時期的產物做出了可能許多dx11都做不出的東西
給你看看我在05、06年間給Halo 3做的水面渲染,也是dx9。



從技術的角度而言,是用shader語言,通過一些複雜的數學公式算出來的,這有一套通用的和非通用的技術,如果開源,源碼也是可查的,引擎工程師主要做的是實現這套演算法,並且把參數甩出來,遊戲開發工程師要做的主要就是調參數,如果閉源。。。那我也沒辦法那是商業機密,具體的演算法和代碼一句兩句就說不清了
主要分為
1,浪花的計算和顯示2,水下場景折射後圖像的計算和顯示3,建築物,船等等和水面進行碰撞導致的水霧和水波(這個主要用粒子效果實現)這些東西在很早的ogre引擎里都開源了,從模擬的角度而言不比紅警3採用的RNA引擎差多少更多的是運算效率和細節上的差距了
效果如圖所示
仔細觀察會發現,紅警3的浪花比較大,泡沫很多,顏色也很鮮艷個人覺得乍一看有點不像真實的海,倒有點像一汪硫酸銅。。。

說個體外話,當時覺得不是很完善,雖說很美。但只要調低水面質量,幀數馬上就能提高一半左右…
我認為跟你用 dx9, dx11 或是 opengl 沒關係,重要的是演算法。下面這個鏈接提供了很多關於水面渲染的技術Water Simulation我也提過類似的問題,並且得到了很多有用的意見和建議,你可以參考《神秘海域4》的水面、海面是如何實現的? - 計算機圖形學 - 知乎
1.水深度:用深度相機獲取背景像素深度(剔除水體本身),然後計算水在投影空間的深度,水深度=水面深-背景深。定義淺水區水顏色和深水區顏色,根據水深來對兩種顏色做插值得水自身顏色。2.反射:根據主相機位置和水面計算反射矩陣,然後創建鏡像相機,傳人相機矩陣(要用上反射矩陣)和投影矩陣,剔除水面和水底層後,做渲染紋理傳入shader後用於水面顏色。不要求實時用CubeMap也可以。3.折射:主相機位置創建折射相機,只渲染水下層,渲染紋理傳染shader作為水底色。4.水流動:可以用Gerstner、FFT、三角波、FlowMap等方法來計算水面起伏。如果是模擬海洋還要加入波粒子、海浪大波,用雅可比絕對值計算泡沫。5.菲涅耳效應:用schlick近似模擬不同視角的差異,也可以把F0拿出來給美術同學調節。6.開爾文船波:模擬水體交互的方法,可以從上面水流預留交互參數來控制,更簡單方法是直接在法線圖上畫幾十個逐漸擴大的水圈來模擬。7.水底:主要考慮水底霧、水紋刻蝕(可以參考GPU Gems)。
個人感覺不僅是水面,你認為所達到的效果和水底的映襯也有關。
推薦閱讀:
※如何評價AS仙閣教練寒夜?
※玩DOTA和LOL的人機選手,是什麼支持你們玩2000盤的?
※如何看待正版遊戲和盜版遊戲的問題?
※如何看待6.28日的鬥魚一姐之爭?
※AR Gun 這類玩具的可玩性在哪裡?都有哪些類似的產品?
TAG:遊戲 | 計算機技術 | 渲染 | 命令與征服:紅色警戒3 |




