《Afterlight》中泰坦星環境的實現方法
本文將由負責遊戲設計並擔任編劇的Víctor Franco分享,《Afterlight》中泰坦星環境的實現方法。
實現光照和環境的方法-粒子及霧效果
首先,我們希望儘可能逼真地模擬環境和光照。通過對泰坦星上的光照進行研究,我們起初使用近似的流明值在Unity重現這種效果。但結果並不理想,場景幾乎完全黑暗。
在《Afterlight》中,我們希望通過自然的光照帶來外星景觀效果,所以我們決定使用塔科夫斯基對電影拍攝的一些方法來呈現泰坦星的氛圍和大氣,這讓環境和紋理變得非常重要。
我們使用Unity中Post-Processing Stack後期特效處理包來實現螢幕空間的霧基礎,並使用Next-Gen Soft-Shadows資源包中極其柔和的陰影效果,這款資源由Psychose Interactive Inc.製作。霧效很好地模擬了環境深處的密度、陰影、以及光線透過濃霧的效果。
Next-Gen Soft-Shadows資源包:
https://assetstore.unity.com/packages/vfx/shaders/next-gen-soft-shadows-137380
在第二個圖層,我們加入兩個粒子系統:一個用於實現區域性的霧,另一個用於實現漂浮的粒子。區域性的霧通過自定義著色器實現,該著色器的靈感來自Playdead開發的《Inside》遊戲中的煙霧效果和水泡。
該著色器使用一個紋理圖集,作為實現多樣性的第一步,它也有少量UV變形,以及朝著粒子移動方向的翻滾動畫。我們通過Unity中粒子系統的頂點流功能實現這種效果。
目前,我們正在製作體積霧系統的原型,以減少大量的Overdraw,使煙霧粒子符合霧的大量積聚效果。
漂浮粒子的原理很簡單:它們的運動和旋轉都基於噪聲,我們只需給它們新增紋理圖集來增加多樣性即可。
我們計劃不久後,將這些CPU粒子替換為GPU粒子,從而在不產生高昂CPU開銷的情況下,生成數百萬個粒子。
地形變形
泰坦星環境中最有趣的特徵之一,是泰坦星表面被冰凍的碳氫化合物沙丘所覆蓋。這樣產生了可變形的地形效果,使角色可以留下自己的腳印。
為此,我們在渲染紋理上繪製貼花,從而為腳印生成高度圖。通過光線投射,我們可以把位置包含在地形的UV中,從而使用自定義著色器把貼花繪製到特定位置。該著色器會讓貼花互相混合。最後,通過使用另一個著色器,高度圖會逐漸變得模糊,然後消融。
高度圖會移動地形的頂點,該著色器有很高階別的曲面細分來實現該功能,因此變形效果具有大量細節。
最後,地形法線使用DICE工作室在《戰地3》所使用的的方法來進行計算,這是一種非常簡單的方法,可以為變形處光照實現不錯的法線。
表面-冰沙
表面著色器的靈感來自《風之旅人》的沙子效果,為了實現這種效果,我們需要4個步驟:
我們需要一個波痕法線,它使沙丘避免看起來單調乏味。
我們需要一個粒狀法線來提供混亂的噪聲。
我們會處理鏡面效果,它會受到之前法線和檢視方向取得的菲涅爾效果所遮罩。
為了在地面實現發光效果,我們需要使用白噪聲紋理,它會根據檢視方向動態變化。
岩石半透明效果
為了使泰坦星的岩石看起來冰冷,有凍結的效果,我們通過次表面散射效果製作了自定義半透明著色器。
為了實現該著色器,我們使用了DICE工作室開發《戰地3》時使用的一些技巧,這種方法實現半透明效果的開銷很小。
此外,我們必須展現結冰的岩石中的一些結構,例如裂縫,因此我們通過視差對映模擬這種效果。
在進入設施場所時,遊戲主角Xin會改變她的裝扮。在設施內,Xin穿著太空服,為了突出服裝的區別,我們在服裝上使用了和岩石一樣的方法。這樣我們可以取得更加自然的外觀,使她在黑暗場景中凸顯出來。
液態甲烷
泰坦星上湖泊和海洋這樣的液體都是以液態甲烷為基礎。為了使用合適效果來模擬這種畫面,我們學習了Playdead的《Inside》遊戲中分層水體的渲染方法。
該效果分為:首先是液體的表面材質,然後是與這個表面相互作用的粒子。
我們的表面也是分層的:
我們需要把表面和其它元素混合起來,我們為此使用Alpha Blending模式。
平滑的相交部分通過對比攝像機深度紋理和當前表面深度來實現。它和“軟粒子”使用的是相同的系統。
我們為相交部分使用常見的水泡效果。為了實現水泡效果,我們使用平滑相交部分的類似方法。
為了給它多樣性和移動,我們使用分層噪聲的相同方法:泡沫紋理會複製到單獨呈現的圖層中,然後互相混合。
我們將處理水下的扭曲效果:折射效果。表面會獲取下方渲染的內容,然後使用被表面法線貼圖扭曲的UV再次進行投影。
我們會實現反射效果。為此,我們使用輔助攝像機進行平面反射,它用於渲染反射效果的一部分內容,使它作為表面上的紋理進行投影。該紋理也會受到法線貼圖的扭曲。
最後,水錶面會受到簡單的海洋鏡面調節。
一共有三種不同粒子:波紋粒子、水泡粒子和水花粒子。
波紋粒子是圓環形狀的紋理,會從起點向外展開,它們使用了和表面相同的扭曲效果。通過圓環形狀的法線,波紋粒子會混合到下層表面,為其增加效果。
水泡和表面的相同,但它會繼承和波紋粒子相同的變大動畫。
最後,水花粒子的發射過程和大小調節取決於在表面上生成水花的物件的移動速度。
小結
《Afterlight》中泰坦星環境的實現方法就介紹到這裡。下載Unity Connect APP,請點選此處。觀看部分Unity官方視訊,請關注B站帳戶:Unity官方。
作者: Víctor Franco
來源:Unity官方平臺
原地址:https://mp.weixin.qq.com/s/QtkLfIllcISzh9QlnW_WlQ
相關文章
- 微前端中實現沙箱環境的方案調研前端
- 在非容器環境中實現DevOpsdev
- 如何在雲原生環境中實現安全左移?
- 星型轉換實現方法
- 在雲環境中實現成功的現代資料分析平臺
- Linux中修改環境變數PATH的方法Linux變數
- Linux環境下實現NTFS分割槽完全讀寫的方法(轉)Linux
- 如何在測試環境中實現 API 模擬呼叫API
- 實現B/S環境的UI定製UI
- uboot環境變數實現分析boot變數
- 在 kubernetes 環境中實現 gRPC 負載均衡RPC負載
- Hybris開發環境的license計算實現開發環境
- rac環境下standby資料庫的實現資料庫
- lamp環境搭建與phpwind,wordprss實現LAMPPHP
- 現實的媒介:動漫中的遊戲表象與雙環境化的想象力遊戲
- 人工智慧中的情景環境與順序環境人工智慧
- Linux中修改環境變數及生效方法Linux變數
- 如何在 Objective-C 的環境下實現 deferObject
- MyHeritage是如何實現釋出到生產環境的
- 教你三步實現CDH到星環TDH的平滑遷移
- 在Weblogic環境下的servlet中實現應用級身份認證 (轉)WebServlet
- Bash 中的環境變數變數
- 移動機器人如何在陌生環境中實現智慧導航?機器人
- Linux中修改環境變數及生效方法(永久、臨時)環境變數檢視Linux變數
- Objective-C環境下的靜態陣列實現Object陣列
- K均值演算法基於CUDA環境的實現演算法
- ASP環境下輕鬆實現報表的列印 (轉)
- 用 C# 實現檢測系統環境變數 “Path” 中是否有某個值,沒有就新增的方法C#變數
- 星級評價的實現
- 《Afterlight》:在遊戲設計中結合象徵符號遊戲設計符號
- HTML中樹的實現方法 (轉)HTML
- Vue生產環境除錯的方法Vue除錯
- 環境變數的設定方法(轉)~變數
- 在工業環境中透過預測性維護實現價值
- 利用 Dart-Define 實現 Flutter 多環境配置DartFlutter
- 在Jboss Cluster環境下如何實現Singleton?
- java中Hibernate的環境配置Java
- Oracle DG環境中的管理操作Oracle