創作類《塞爾達傳說:曠野之息》風格的水著色器
來自德國柏林22歲的Florian Gelzenleuchter也是這款遊戲的忠實粉絲,他正在獨立製作一個專案《The Bells' Arietta》,這個專案將使用Unity實現《塞爾達傳說:曠野之息》的畫面表現效果。
專案介紹
有沒有覺得《The Bells' Arietta》中畫面效果和《塞爾達傳說:曠野之息》相差無幾呢?
本文,我們將重點介紹《The Bells' Arietta》中,製作水著色器的工作流程。
在收集參考素材時,我會仔細觀察現實中的效果,以及效果在遊戲內的實現結果。這不僅有助於給予啟發,而且也提供了實用的資訊,告訴我可以實現什麼東西,以及什麼地方可能出現問題。
如果有人問我:在《塞爾達傳說:曠野之息》中,什麼東西會在神廟內提供獨特的感覺?
我會把答案總結為三個重要部分:冰冷而美觀的大理石、穿過空氣的光束、以及清澈透明的水。認真思考後,我開始製作水著色器。
專案機制
由於遊戲角色林克無法潛入水底,所以《塞爾達傳說:曠野之息》的水會讓玩家的攝像機一直保持在水面上。
在水體內渲染水效果時,通常需要複雜的著色器設定和額外的水下效果。而且,把攝像機限制在水面可以簡化攝像機的移動。
我設定了相同的限制,這樣便可以專注於從水面上觀察水的外觀,也讓我可以使用著色器技巧,例如:為水下的霧效果使用深度緩衝區。
實現焦散效果
在光線被彎曲表面折射,然後投射到水底時,便會出現焦散效果中令人著迷的圖案。常見的焦散效果例子是一杯水或游泳池表面被陽光照射時的畫面。
下圖是大海中的焦散效果。
首先,我們要解決的問題是焦散效果的動畫。類似其它能量類效果,焦散效果有非常自然的外觀。對於噪聲部分,常用的方法是在Photoshop中使用簡單的混合設定來製作原型。
在本示例中,我們可以注意到下圖左側的基本紋理。我為紋理的每個通道加入了少量偏移,用於計算光線折射。然後建立圖層副本,把圖案放大,然後把混合模式改為Darken變暗。
移動圖層副本時,便會出現混合後的特別效果。在最後的圖案中,通過附加方式把紋理混合到沙灘紋理上。在最終著色器中,兩個圖層會獨立移動。
現在,我可以把結果從光線方向投射到物件上。通過使用NdotL和物件的陰影貼圖加入額外遮罩,現在焦散效果幾乎完成了。
後續步驟取決於物件本身,通常情況下會有一個高度值,該值會在物件所在水面的高度上劃分效果。如果資源是小型模組化資源,該值會在多數情況下起到作用。
但是,如果連線的地形有不同高度,我們則無法定義通用的Cutoff值。使用深度緩衝區是一種解決方法,但在渲染透明物件前,我們無法獲取該物件的深度。由於我們必須計算每個物件的焦散效果和著色器,因此整個效果的效能不是很好。
專案中,我使用的解決方法利用了遊戲引擎中透明物件的特點。這類物件不會渲染到深度緩衝區或G緩衝區,因此我可以訪問所有水下物件的法線和深度資訊。
深度資訊用於計算世界位置,這種方法通常用於後期處理效果。通過使用這種方法,所有工作都可以在一個著色器內完成,焦散效果會自動影響寫入深度緩衝區的所有內容。
紋理製作
水著色器由多個部分組成。它利用了一個經典方法:讓兩個法線貼圖以不同速度和大小互相重疊滾動,這樣就可以輕鬆調整表面的外觀。
這個方法也適用於焦散紋理和另一個噪聲紋理,用來實現水泡等更多細節。由於使用平面對映,在水流到達特定角度時,水的流速也會變快,因此我可以把該著色器放到任何位置,使水的流動效果接近現實。
水著色器的功能如下:
- 帶有法線貼圖的表面細節。
- 在角度較大的位置,流速會變快。
- 焦散效果會從陽光方向投射到表面下的所有內容。
- 基於深度的折射效果,因此在淺水區的折射效果較小。
- 水面上的水泡和陰影。
- 水下的霧、模糊和色差效果。
- 通過頂點顏色定義位移效果區。
使用Unity的挑戰
在實現逼真的水著色器時,平衡美感和互動性是關鍵。無論現實與否,水都應該看起來富有活力,這就是為什麼即使是《塞爾達傳說:風之杖》的單色海洋也會使人感到逼真的原因。
使用頂點替換和滾動兩個法線貼圖的方法是一個很好的起點,我們還會加入一些折射效果,使用基本的水著色器做進一步優化。
另一個重要部分是互動性,例如:游泳時角色會產生波浪,碰撞時會濺起水花,岸邊的沙子碰到水浪時會變溼。
將水加入遊戲世界時,我們要讓它和所有內容融合起來,而不是類似互相獨立的物體。當然,這也很大程度上取決於遊戲的特定需求。
如果想要知道自己的水著色器效果如何,我們可以詢問別人是否想在這片虛擬的畫素流體中游泳。如果對方回答是的話,這將是很積極的評價。
關於處理著色器的建議
在處理著色器時,必須清楚自己想要實現的效果,並根據遊戲機制來進行開發。著色器是很好的工具,可以把遊戲過程和遊戲世界融合起來。對於著色器初學者,建議建立自己的工具庫,從而製作出色的效果。
我總會嘗試實現想法中的新功能,即使可能不會在任何專案中使用這些功能。但如果現在花時間研究看似不實用的東西,它可能在未來會成為其它專案的重要部分。
雖然我們經常會使用新方法,但也別忘了經典的方法或更簡單的方法。在遊戲開發中,很多東西會發生變化,結合使用基本方法實現複雜的效果是一件很有趣的事。
如果你總是追尋最新方法,卻忽視了過去的方法,這樣可能會浪費潛在的優秀工具。我們應該充分利用新方法和舊方法的潛力,為我們的工作提供便利。
小結
對於著色器程式設計而言,水效果是很好的實現目標。目前有很多出色的效果案例,而且新的創意和藝術風格仍在不斷給人驚喜,精美的水效果從不會過時,所以趕緊實踐去完成精美的水效果吧。
下載Unity Connect APP,請點選此處。 觀看更多Unity官方精彩視訊,請關注“Unity官方”B站賬戶。
你可以訪問Unity答疑專區留下你的問題,Unity社群和官方團隊幫你解答:
Connect.unity.com/g/discussion
來源:Unity官方平臺
原文:https://mp.weixin.qq.com/s/7bvBBldIH3J7YrhRRsevPA
相關文章
- 《塞爾達傳說:曠野之息》:何止優秀,意義深遠
- 《塞爾達傳說:曠野之息》技術分析:神作是怎麼煉成的
- 為什麼這麼好玩?領略《塞爾達傳說:曠野之息》精妙設計(上)
- 以《塞爾達傳說:曠野之息》和《異度之刃》為例談好點子的重要性
- 《塞爾達傳說:曠野之息》等4款Switch遊戲中國版權申請獲准許遊戲
- 達人分享 | 賽璐璐風格與《塞爾達傳說》
- Nintendo Switch發售五週年賣出1億354萬臺,《塞爾達傳說:曠野之息》售出2580萬份
- Switch 塞爾達傳說曠野之息:中文字體+1.6.0+2DLC整合版+林可兒3.0.1 增強整合MOD
- 《塞爾達傳說:荒野之息》的大世界地圖是怎麼製作的?地圖
- 《塞爾達傳說:荒野之息》是如何做新手引導的?
- 《塞爾達無雙 災厄啟示錄》專訪 與《曠野之息》連結的無雙體驗
- E3 2019 | 任天堂直面會彙總 《塞爾達傳說:荒野之息》續作!
- 《塞爾達傳說:荒野之息》開放世界探究(下):互動機制
- 《塞爾達傳說·荒野之息》中所隱含的“快樂遊戲”的奧祕遊戲
- 為什麼你不能錯過《塞爾達傳說:荒野之息》的開放世界
- 塞爾達風之杖渲染解析
- 《塞爾達傳說:荒野之息》隨感:一個活的世界,以及它是如何被殺死的
- 《塞爾達傳說》是怎麼做開放世界的?
- 遊戲機制設計:《塞爾達傳說:荒野之息》中的湧現與弱引導設計遊戲
- 為什麼全世界都在期待《塞爾達傳說:王國之淚》?
- 媒體一致好評,這部沒有塞爾達的《塞爾達傳說》新作究竟好在哪兒?
- E3 2021 新作內容彙總,《艾爾登法環》開頭,《曠野之息》續作收尾
- 說說《塞爾達》服化道那些事
- 《塞爾達傳說:織夢島》做了場跨越20年的美夢
- 為何我放任 7 歲的兒子痴迷《曠野之息》?
- 千萬銷量預定!為什麼《NS Sports》與《曠野之息》續作同樣重要?
- 林克整容史:歷代「塞爾達」藝術風格變化回顧
- 在35年的系列歷史上,《塞爾達傳說》如何影響遊戲行業?遊戲行業
- 運用關卡結構圖分析《曠野之息》的關卡設計
- 《塞爾達傳說》與氛圍遊戲的興起:在遊戲中感受禪意遊戲
- 縫合怪遊戲的千層套路?《塞爾達傳說》也只是其中一環遊戲
- 我確實沒法逼自己把《曠野之息》玩下去了
- 《塞爾達傳說:御天之劍 HD》證明我們不需要一個世代的體感遊戲遊戲
- 《曠野之息》劇情拾遺與新作前瞻(上):弦外之音與啞謎
- HowLongToBeat: 《塞爾達傳說:王國之淚》榮登2023年最耗時遊戲榜首 遊玩時長高達110小時遊戲
- 從《曠野之息》馬匹系統的設計看任天堂對開放世界的把控
- 通過在遊戲內製造程式碼Bug,《塞爾達傳說:時之笛》速通記錄首次突破10分鐘遊戲
- 【遊戲設計隨筆06】關於《塞爾達傳說》的迷宮設計(dungeons design)的一些思考遊戲設計