2011年10月13日 星期四

Unity Water真實水的設定技巧

這篇將說明要怎樣建立水, 利用自己的mesh, 調整設定, 提供一些從美術的角度, 讓水變得好看. 請持續關注這系列的文章. 這篇集中火力介紹專業的水特效, 但文章後面會介紹一般的技巧, 很實用喔!

水是由哪些元素構成的?
氫與氧

那, 在Unity裡頭, 水又是由哪些東西構成的呢?
有很多不同的水類型您可以創建, 或是直接使用prefab. 為了要展現最新的水特效與腳本, 我將專注於Water4ExampleSimple assets這個場景資產, 基本上它內含幾個3D meshes, 用來表現您水面效果.

  • WaterTile script
  • Water shader
一個空物件, 用來表示水放置的位置, 並帶有:
  • 一個水腳本 把顏色 法線貼圖與主要參數暴露出來
  • 一個反射腳本
  • 一個lighting腳本 用在高光特效
  • 一個displacement腳本
我要怎樣做出水體呢?
最簡單的方法是把把prefab拖到場景裡面 指定您的cutom mesh
  • Assets > Import Package > Water (pro only)
  • 在project window裡頭開啟Standard Assets > Water (Pro only)資料夾
  • 開啟Water4資料夾
  • 把Water4Example (Simple) Prefab拖曳到場景裡面
  • 選取其中一個tile meshes 到mesh component>點擊右邊的target icon 選取您的mesh (這個mesh必須要在你專案裡面)
  • 如果你的mesh角度不對的話, 旋轉Water4ExampleSimple parent node 90度角
  • 藉由移動parent node來移動您的mesh
  • 移除第二的tile mesh
設置
一旦你設定好您的mesh, 你就可以開始調整參數了. 選取您的Water4ExampleSimple node, 在inspector檢視參數.

Water Base
這個腳本的功能是用來啟動或是關閉即時的平面反射效果(planar reflections), 這個是根據parent mesh的高度來計算的, 所以child meshes的自身Y軸位移應該是0, 這個參數也可以讓你啟動skybox來源的反射效果.

高光照明
你可以調整高光強度, 或是用拖曳的方式改變高光的來源. 這個來源可以是來自你的directional light或是場景中任何的物件, 不一定要是光源

Gerstner(孤立波) Displace
這個參數你可以設定根據孤立波產生的演算法產生波浪效果

水效果的小技巧
出門去看看真正的水長怎樣, 養成參考真實世界的是個好習慣. 如果能夠收集到水的影片更好.
  • 水會吸收紅光, 然後反射出更多綠色與藍色的光線. 而天空會讓水呈現藍色, 因此:
  • 最好不要直接把水表面的顏色設定為藍色, 相反地, 你可以在水表面用綠色, 而水下面採用藍色. 這樣就能做出池塘感覺的幻覺了.
  • 我想這就是為什麼當美術人員在製作池塘的時候, 會使用: 綠色/藍色/藍綠色, 當做基底色了
  • 而藍色的顏色越深, 看起來水就越深. 你可以在水底部使用較深的顏色, 讓refraction顏色更深.
在tile上使用藍色與綠色, 對比於使用灰色與粉紅色


細微的特效, 比較能做出寫實的幻覺. 記得要多嘗試不同參數, 在試的時候考慮到以下微妙的差異:
  • 法線的滾動率(Scrolling speed of normals )
  • Reflection
  • Refraction
  • Fresnel 與 Normal strengths
  • Displacement
  • 介紹您一個實用的技巧: 把參數設為0, 然後慢慢增加數值, 直到調整到你想要的效果.
  • 如果你的模型是凸面的(例如瀑布邊緣), 記得在曲線的地方多加一點面數, 讓水看起來有自然的彎曲效果.

下一回, 我們將介紹Water 4 Advanced關於泡沫與深度衰減(depth extinction)參數喔!

[相關文章]

1 則留言:

jacky tseng 提到...

實用!! 希望未來能有更多新功能的專題範例操作,例如:下一個版本要出的「尋路系統」 :D :D :D