3DWorld 部落格:https://3dworldgen.blogspot.com
3DWorld 是一個基於 OpenGL 的跨平台 3D 遊戲引擎,自 2001 年在加州大學柏克萊分校學習 CS184 電腦繪圖課程以來,我一直在研究它。
圍繞 OpenGL 的 3D 圖形函數、類別和包裝器
具有熱重載功能的著色器產生器/處理器
地形、植被、城市、建築內部和外部等的程序內容生成。
帶有星系、恆星、行星、衛星等的程式宇宙生成器。
具有即時使用者編輯功能的程式體素 3D 地形生成
地形產生器,包括各種噪音函數、侵蝕、即時使用者編輯、高度圖讀/寫
程序建築(內部和外部)、道路和城市生成
原始物件類型和其他物件的物理模擬(> 10K 動態物件)
即時晝/夜循環與天氣(雨、雪、冰雹、風、閃電)
具有反射和折射的基於物理的材料
動態陰影、環境光遮擋、多達 1024 個動態光源、後處理效果
骨骼動畫和程式動畫
內建第一人稱射擊遊戲《笑臉殺手》
內建太空船+星球殖民遊戲
建構開放世界物品收藏與殭屍遊戲模式
電腦人工智慧為 FPS 遊戲中的玩家、建造遊戲玩法以及宇宙遊戲中的飛船提供幫助
Lightwave 物件檔案、3DS 格式的匯入器以及其他檔案格式的 Assimp 匯入器
紋理讀取支援:JPEG、PNG、BMP、TIFF、TGA、DDS
針對大型模型的快速載入和即時渲染進行了最佳化(> 1GB 的頂點/紋理資料)
我在提交 6607 處將專案從 svn 轉換為 git。這是一個跨平台專案。包含 Microsoft Visual Studio 2022 專案文件。也包括 linux/gcc makefile,但更具實驗性。有關更多詳細信息,請參閱 README.linux。該專案應該在 Linux 上的 gcc 下建置並進行一些工作,但自從我嘗試這個以來已經有一段時間了。我有一個過時的舊 makefile,但可能不需要太多工作來修復並使其可用。
請注意,這是一個大型儲存庫,目前約為 1GB。我包含了原始程式碼、設定檔、紋理、聲音、小模型、照明檔案、場景資料、高度圖和專案檔。此儲存庫不包含某些場景中使用的大型模型文件,您必須單獨下載這些文件。這意味著某些場景設定檔將無法運作,因為它們找不到引用的資料。目前的依賴項列表是:
OpenGL 4.5(應配備 Windows 8/10/11 最新圖形驅動程式)
OpenAL 1.1(選購)(系統安裝:https://www.openal.org/downloads/ 或您可以嘗試更新的 openal-soft:https://github.com/kcat/openal-soft)
freeglut-2.8.1(目前 3.0 版本可能有效:https://sourceforge.net/projects/freeglut/)
freealut-1.1.0(可選)(其中一個版本在這裡:https://github.com/vancegroup/freealut)
zlib-1.2.11(您可以從這裡下載更新版本:https://zlib.net/)
glew-2.0.0 (2.1.0 也可能有效:http://glew.sourceforge.net/)
gli (最新版本:https://github.com/g-truc/gli / 僅標頭,包含在依賴項目記錄中)
glm-0.9.9.0 (最新版本:https://glm.g-truc.net/0.9.9/index.html 或https://github.com/g-truc/glm / 僅標頭,包含在依賴項目錄中)
libpng-1.2.20(可選)(我的版本很舊;最新版本:https://libpng.sourceforge.io/index.html);大多數情況下可以用 stb_image 替換,地圖圖像導出除外。
libtiff-4.3.0(選購)(最新版本:http://www.simplesystems.org/libtiff/)
Assimp(可選)(請參閱 https://github.com/assimp/assimp/blob/master/Build.md 上的建置說明;vcpkg 建置說明可能是最簡單的。)
libtarga(包含原始碼)
STB 標頭:stb_image、stb_image_write、stb_dxt(包含來源)
我已將大多數這些庫的精簡版本包含在依賴項目錄中。我刪除了 3DWorld 不需要的所有大文件,在某些情況下甚至是範例/測試/文件。這些是在 Windows 11 上使用 MS Visual Studio 2022 Community 建立的。如果您複製/安裝 vcpkg,它應該與 3DWorld 目錄處於相同等級。
請注意,其中許多依賴項都是舊的,可以用更新的庫替換。我一直專注於添加內容,對此不太感興趣。 Freeglut 可能應該替換為 SDL,影像庫應該替換為 STB 或 DevIL。 (STB 用作後備,但不支援所有使用的影像。)
如果您想建立 3DWorld,可以使用依賴項/資料夾中的項目,或自行下載並建置它們並更改專案設定以使用它們。我目前使用 3DWorld 的 x64 MS Visual Studio 2022 Community 建立目標,但 win32 建置目標也可以運作。 MSVS 2019 專案 3DWorld_msvs2019.vcxproj 目前已過時,但可能可以正常運作。如果將 DLL 從 lib64/ 資料夾複製到儲存庫的根目錄並進行一些其他專案設定更改,它應該以 32 位元模式編譯和運行。
如果您有 Linux,您可以嘗試使用提供的 makefile 進行建置。文件 README.linux 應該會有幫助。我已經建造了 3DWorld,並且主要在帶有 gcc 7 的 Ubuntu 18.04 和帶有 gcc 9 的 Ubuntu 20.04 上運行。
3DWorld 在命令列上取得設定檔名稱。如果未找到,它將讀取 defaults.txt 並使用其中列出的任何設定檔。其中一些 congig 檔案包括 Sponza Atrium、Stanford Dragon、sportscar 等模型。如果找不到模型,我嘗試讓 3DWorld 產生非致命錯誤。許多較大的模型可以在 McGuire 電腦圖形檔案中找到:http://casual-effects.com/data/
我已經打包了對於GitHub 儲存庫來說太大的3D 模型,並將它們放在Google Drive 上(現在最高為v6):https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view ? usp=sharing 其中一些模型以 3DWorld 的內部格式存儲,不應在其他項目中重複使用。其他來自 Mixamo 等網站。還有一個紋理目錄,其中包含用於建築內部的附加紋理,可以與專案紋理目錄合併。
系統需求:
Windows 8/10/11; Linux 將 makefile 與 gcc 一起使用時。
Microsoft Visual Studio 2019 或 2022。你也可以嘗試在linux上使用gcc。
相對較新的一代 Nvidia 或 AMD GPU(在我的配備 Intel 顯示卡的筆記型電腦上運行,但幀速率為 12-20 FPS)
較大場景至少 8GB 系統內存
較大場景至少 4GB GPU 顯示;我的 GPU 有 12GB 內存
故障排除:似乎某些系統(特別是 AMD 卡)需要 OpenGL 核心情境。可以透過在設定檔中新增“use_core_context 1”來選擇。這也可以在 scene_config/config_post.txt 中啟用,該檔案是在讀取所有其他頂級設定檔後套用的檔案。在某些情況下(某些 Nvidia 卡),使用核心上下文可能會比較慢,這就是為什麼我默認情況下沒有啟用它。
有用的按鍵(有關更多按鍵綁定,請參閱 readme-keys.txt):
a、s、d、w:運動
q,e:更改武器(遊戲模式)
“空間”:跳躍/射擊
‘esc’:退出
「tab」:螢幕選單(使用箭頭鍵和「X」導航以切換選單)
b:啟用物件/物理/AI(用於地面模式和宇宙模式遊戲)
F1:地面/宇宙/平鋪地形模式之間切換
F2:切換遊戲模式
m:切換全螢幕模式
h:切換飛行移動
v:改變相機模式(水晶球/軌道與第一人稱)
V:切換滑鼠外觀
K:切換俯視圖模式
x:暫停
滑鼠左鍵:轉動/動作
滑鼠右鍵:火
我目前根據 GPLv3 許可證將此存儲庫用於教育目的。某些子模組可透過與我的 GitHub 帳戶中的商業用途相容的其他授權取得。它不是一個商業工具,我也不想在這裡賺錢。儘管我正在接受回饋、錯誤報告和建議,但現階段我也不會尋找其他人來參與該專案。如果我決定用這個來製作一個真正的遊戲,也許事情會改變。如果您想在您的專案中使用此處的某些內容,請告訴我。
沒有關於 3DWorld 的更多文件。不過,我確實有一個博客,其中包含演算法的描述和大量螢幕截圖:https://3dworldgen.blogspot.com
以下是我部落格中連結的一些螢幕截圖:
這是一棟大樓的零售區,裡面擺滿了貨架。建築物可以包含數以萬計的互動對象,玩家可以隨身攜帶。 (config_heightmap.txt)
放置在其他房間的攝影機在安全監視器上顯示即時視訊。 (config_heightmap.txt)
殭屍(具有尋路和其他人工智慧行為)四處走動並掉入室內游泳池。水面有波紋、水花、倒影、折射。 (config_heightmap.txt)
停車場停放著汽車,灑水管佈置在天花板上。 (config_heightmap.txt)
程序化的建築地下室,有人、間接照明和沿著天花板佈線的管道。 (config_heightmap.txt)
程序化的住宅區,後面有辦公大樓。人行道上和建築物內都有汽車和行人。 (config_heightmap.txt)
程序建築內部 - 一個帶有程序生成書籍的圖書館。 (config_heightmap.txt)
程序生成的具有完整內飾的房屋和辦公大樓。 (config_heightmap.txt)
具有間接照明的夜間場景中的反射(金屬)、折射(玻璃)、發射和半透明球體。即時繪製;球體可以交互移動。 (config_white_plane.txt)
具有建築物、道路、汽車和行人的程序城市。 (config_heightmap.txt)
程序城市在晚上與前景中的橋樑。 (config_heightmap.txt)
有鬆樹的早期程序城市。
早期的程序城市。
在放置城市之前使用域扭曲噪音和水力侵蝕模擬的地形。 (config_heightmap.txt)
具有河流、樹木、草地等的平鋪地形模式(config_t.txt)
涉及樹木、植物和草地的即時互動式破壞性火災/煙霧模擬。 (config_trees.txt)
程序宇宙太陽系與小行星帶。 (宇宙/config_universe.txt)
Crytek Sponza 中庭場景,具有動態陰影投射光源和間接照明。 (sponza/config_sponza2.txt)
10,000 個高度詳細的博物館模型實例放置在平鋪地形模式(普吉特海灣高度圖)中,並使用陰影和間接照明即時繪製。 (config_museum_tt_model.txt)
Crytek Sponza 中庭設有反光地板和 200 個即時動態點光源。 (sponza/config_sponza2.txt)
辦公大樓庭院中有許多具有基於密度的光衰減的反射/折射球體和立方體。 (mapx/config_mapx.txt)
聖米格爾場景,具有動態降雪和使用自訂著色器渲染的路徑追蹤積雪覆蓋圖。 (config_san_miguel.txt)
San Miguel 場景使用路徑追蹤的預計算間接照明、法線貼圖和立方體貼圖反射表面進行即時渲染。 (config_san_miguel.txt)
2M 程式產生 + 放置的松樹(500K 可見)使用實例廣告看板以平鋪地形模式即時繪製。 (config_t.txt)
Mapx 場景中 10,000 個動態盒子的互動式堆疊。堆疊可以移動和推翻,場景可以儲存/重新載入/編輯。 (mapx/config_mapx.txt)
程式生成的行星,其環包含小行星。 (宇宙/config_universe.txt)
小行星帶,包含 10,000 個動態(旋轉和軌道)小行星、100,000 個點精靈粒子和大量塵埃廣告看板雲。 (宇宙/config_universe.txt)
平鋪地形模式,顯示程式生成的各種形式的植被,包括草、花、松樹、棕櫚樹和落葉樹。這些實際上是投射陰影的多邊形模型。 (config_t.txt)
Crytek Sponza 場景中透過基於雜訊的體積煙霧的即時動態光軸。 (sponza/config_sponza2.txt)
Crytek Sponza 場景中的反光金屬地板,具有間接陽光 + 天空照明。 (sponza/config_sponza2.txt)
在辦公大樓大廳中使用立方體貼圖反射紋理在動態場景中即時繪製反射球體、環面和立方體。材料是使用基於物理的模型的金屬和電介質的混合物。 (mapx/config_mapx.txt)
具有間接照明、反射表面和陰影貼圖的博物館場景。該模型具有程序紋理。 (config_museum.txt)
下雪的房子場景是透過掉落十億個雪粒並積雪而生成的。雪是預先計算的,但可以即時渲染。 (房子/config_house_winter.txt)
雨模擬和渲染,包括每個雨滴和潮濕/反射表面的碰撞檢測。 (房子/config_house.txt)
重疊聚光燈的間接照明和陰影應用於動態物件。 (mapx/config_mapx.txt)
在平鋪地形模式下使用硬體鑲嵌進行水波模擬。 (config_t.txt)
使用間接照明程序產生 3D 體素冰洞。此地形可以使用畫筆和武器火力進行即時編輯。 (config_ice_caves.txt)
程式產生的行星完全在片段著色器中繪製,沒有紋理。這包括地形生成(冰、雪、岩石、森林、沙漠、泥土)、水、雲和大氣。 (宇宙/config_universe.txt)