《孤島驚魂5》中的地形渲染技術-網格生成
育碧作為一個年貨大廠,在PCG這方面肯定有很深的積累,在GDC2018的這次分享中,其詳細的介紹了地形在純GPU管線上的實現方式,使得最終能夠得到一個擁有大片懸崖峭壁的真實地形。
本文是筆者看完FarCry5的分享後寫的個人理解,初次學習GPU管線,難免有理解錯誤的地方,希望大佬指正
本次分享依次介紹了以下內容
1.GPU Pipeline實現
2.地形渲染
3.懸崖渲染
4.高度圖之外的技術
5.基於螢幕空間的渲染
6.其他地形相關
GPU Pipeline實現
首先說一下單個平面的實現
先渲染一個毫無起伏的純平面Mesh
在頂點著色器中,根據InstanceID和vertexId可以得到在高度圖上的對應位置,依據此位置去對頂點進行偏移
配合貼圖可得到以上效果
之後介紹瞭如何將四叉樹的分化邏輯移到GPU,四叉樹的CPU實現已經介紹過了,這裡不再細講
https://zhuanlan.zhihu.com/p/88646346
按2km*2km對地形劃分為多個樹結構
分化到最大的地形塊邊長為64米,被稱為一個Sector,總共有160*160個sector,也就是如果所有樹分化到最大,會存在160*160個lod最大的地形塊
正常遊戲中會載入大概500個地形塊(包含任意lod等級)
正常遊戲中,地形一共存在6個lod等級
每一個樹結構都對應一個mipmap,mipmap的層級和lod層級相同
每一個Node的資訊都儲存在對應Mip等級mipmap的一個畫素中
畫素值是一個16位的Index,根據這個index,可以去Buffer,也就是一個陣列中去拿到節點的詳細資訊,包括高度範圍,lod資訊,貼圖位置資訊
如果這個節點是不存在的(地形不是一個標準正方形),則會把一個特殊值賦給index
四叉樹是一個遞迴的結構,但遞迴難以在GPU上實現,所以這裡採用該演算法的迴圈形式
一共存在3個儲存節點資訊的buffer
首先把根節點放入bufferA,遍歷其中每個節點
如果不可分化,則將該節點加入FinalBuffer
如果可分化,則將子節點放入bufferB
當根節點分化完畢,會互換AB兩個buffer的作用,清空BufferA,然後遍歷bufferB,將子節點加入bufferA。直到處理完所有lod
同時也會將每個lod的節點有多少記錄下來
這裡還說了一個優化,但筆者沒用過computershader,所以也沒看懂~
同時會生成一個LODMap,每個Sector都會被賦予一個LOD值,用於解決裂縫問題。
LOD的值能夠根據FinalBuffer輕鬆獲取
每一個Node會被分為64個Patch,Patch即可視為一個具體的vertex
為16*16的Mesh,經過一系列cull,最終把可視的Patch放到一個RenderLst.
遮擋剔除採用的Hiz,主機上會採用純Gpu實現,Hiz的演算法知乎上有很多文章,之後有時間我也會按自己的理解寫一下。
而PC則會把CPU上產生的深度圖上傳到GPU(這裡我的理解是cpu上有剔除邏輯,會把中間生成的深度圖傳至gpu進一步剔除,但是ppt沒講為什麼這麼搞)
On console platforms we use a GPU best occluder pass to prime the depth buffer and extracttheHTile.
On PC we have a software rasterized occlusion buffer that we already use for CPU visibility which we upload to atexture.
背面剔除,針對每一個Patch,會離線為其生成一個圓錐體,這個圓錐體Patch內所有頂點法線組成的最小圓錐。之後會把資訊存到一個Tex中。
執行時直接如上計算可以判斷是否需要剔除
每一個patch都會儲存它周圍節點的lod資訊,如上圖,當前節點lod為3,通過周圍節點的lod可以得到一個值。根據此值對頂點進行干預以解決裂縫問題
地洞渲染的思路是地形上開兩個洞,中間的管道採用單獨的mesh渲染
這裡用到了一個小技巧,如果是洞穴口,則讓座標除0得到NaN,如果一個頂點座標為NaN,則用到此頂點的面片都會被discard掉。
PPT下載:
連結:https://pan.baidu.com/s/1nRoaaoYI7ln0wyo6Sqppiw
提取碼:4jly
相關閱讀:全境封鎖UI設計指南
作者:風和雨林
專欄地址:https://zhuanlan.zhihu.com/p/88859361
相關文章
- 育碧:《孤島驚魂5》是育碧本世代銷量最高的遊戲遊戲
- 育碧:截至2023年《孤島驚魂 5》玩家人數已突破 3000 萬
- 《孤島驚魂5》最低電腦配置要求和推薦電腦配置介紹
- 《孤島驚魂 6》篝火評測:合格以上,突破未滿的育碧沙盒新嘗試
- 《孤島驚魂 6》GI 評測 9 分:傳承系列優點,實現自我超越
- 《黃泉:孤島驚魂》正式版上線 一起來唱《小星星》
- 育碧談《孤島驚魂6》的創新之道:開發一整套複雜系統,讓主角唱歌
- 十月新遊前瞻 | 密特羅德、孤島驚魂 6、帝國時代 IV、旅行遊記
- NPD:2021年10月美國遊戲軟硬體排行榜 《孤島驚魂6》和NS登頂遊戲
- 震驚!這個技術部落格居然...
- 打破專案管理中的資訊孤島專案管理
- 網易魔幻英雄戰術競技手遊《孤島先鋒》今日開啟終極測試
- 網易魔幻英雄戰術競技手遊《孤島先鋒》新資料片7月26日公測
- 驚豔的渲染效果!
- 解決資料孤島的鑰匙
- 機房驚魂記
- 地平線:黎明時分中的雲渲染技術
- 物聯網 IOT 裝置如何脫離資訊孤島?
- 資料孤島是什麼?為什麼都2022年了還存在資料孤島?
- 資料治理:走出資料孤島
- 《對馬島之魂》:“取巧”成功的佳作
- Minecraft類遊戲地形生成機制Raft遊戲
- 如何打破Sec、 Dev和Ops之間的孤島?dev
- 《逆水寒》凶宅驚魂實用技巧詳解 《逆水寒》凶宅驚魂嚇人嗎?
- 網際網路公司裡技術團隊的部落格
- navmesh 生成網格資訊 總 (更新中 )
- 資料孤島的定義,企業如何應對?
- 逆變器的防孤島測試效能評估
- 5G中網路切片技術是什麼?—VecloudCloud
- 技術人如何搭建自己的技術部落格
- 基於Unity3D引擎的大地形生成研究Unity3D
- vue:服務端渲染技術Vue服務端
- Vue 服務端渲染技術Vue服務端
- 詩意的邊緣個人部落格 - 一個走在php之路的技術員個人部落格技術網站PHP網站
- 簡述大前端技術棧的渲染原理前端
- Cesium官方教程5--地形圖層
- 如何打破資料孤島,實現資料治理
- 為什麼2022年仍然存在資料孤島?