[http://www.gdcvault.com/play/1015309/Water-Technology-of](http://www.gdcvault.com/play/1015309/Water-Technology-of)
gdc12上naughty dog帶來的水的技術,150+頁,信息量有點大,而且很多需要很多research的工作都被“不合適”帶過,可以想象這背后的工作量。
而且在crysis之后,敢在gdc上做水的分享,這個需要相當實力的,不過現在還是覺得crytek的水最強力。
水這塊真的是很有趣挺有深度的一塊,由于內容太多,我就主要寫我覺得不太熟悉的部分吧。
**人**
水這一塊參與做的,主要的是一個程序一個美術,contributor還有10個人,夠狠。
**河**

這個河的部分主要這幾個技術點:
- refraction/reflection
- flow based normal map和displacement
- 泡沫
這里值得一說的是normal map的flow,這個圖就很明白的:

flow based displacement,就是vertex在flow的基礎上,加一個sin/cos的偏移,以一個環形的方式順著flow走:

另外flow的效果還可以用于很多的效果:沙子,云,雪,和一些比較迷幻的效果。
**Vision:**

此圖大贊,nd的人稱之為“ship graveyard”
雖然最后nd也沒有實現出來,但是設計師能夠想象出這樣的東西,并畫成原畫,這個真的會讓技術人員熱血沸騰的。
海:
nd嘗試了幾個技術:
- fft技術很棒,但是比較費,而且參數不好調(我覺得還好吧)
- perlin noise效果不行
nd需要的海水,應該具有這樣的特性:
- 可以比較好的參數化
- 不能只是一個height field,需要是一個vector field
最后使用的是wave particle+GerstnerWave,

這個需要另外一個post來說,這里就淺嘗則止吧,wave particle有這樣的好處:
- artist好控制
- 沒有tiling的問題
- 效率高,有其適合spu優化
BigWave:

這樣的大波浪,這樣做的:

最后公式大集合:

LOD
這里使用clipmap的思路,類似height map的都可以這樣,其實水和地形的相似度真的是非常高,使用到camera的距離來定制lod,使用t-joint來處理接縫問題:

**效率**
這個就看編程功底了:

- 前言
- PracticalOcclusionCullingInKillZone3
- KillZone3的版本發布工具
- BattleField 3和NeedForSpeedTheRun中的渲染技術
- Shiny PC Graphics in Battle Filed 3
- Cascaded Light Propagation Volumes for Real-Time Indirect Illumination
- [crytek]Spherical Skinning withDual-Quaternions and QTangents
- [gdc12]神秘海域的水技術
- 《鋼鐵俠》等電影中的image based lighting和physical shading
- CompanyOfHeroes2渲染技術
- [sig13]Lighting technology of "The Last Of Us"