3DWorld-Blog: https://3dworldgen.blogspot.com
3DWorld ist eine plattformübergreifende OpenGL-basierte 3D-Game-Engine, an der ich arbeite, seit ich 2001 den CS184-Computergrafikkurs an der UC Berkeley belegt habe. Sie verfügt über die folgenden Funktionen:
3D-Grafikfunktionen, Klassen und Wrapper rund um OpenGL
Shader-Generator/Prozessor mit Hot-Reload
Prozedurale Inhaltsgenerierung für Gelände, Vegetation, Städte, Innen- und Außenbereiche von Gebäuden usw.
Prozeduraler Universumsgenerator mit Galaxien, Sternen, Planeten, Monden usw.
Prozedurale Voxel-3D-Geländegenerierung mit Benutzerbearbeitung in Echtzeit
Geländegenerator mit verschiedenen Rauschfunktionen, Erosion, Benutzerbearbeitung in Echtzeit, Lesen/Schreiben der Höhenkarte
Verfahrenstechnisches Bauen (innen und außen), Straßen- und Stadtgenerierung
Physiksimulation für primitive Objekttypen und andere (> 10.000 dynamische Objekte)
Echtzeit-Tag/Nacht-Zyklus mit Wetter (Regen, Schnee, Hagel, Wind, Blitz)
Physikalisch basierte Materialien mit Reflexion und Brechung
Dynamische Schatten, Umgebungsokklusion, bis zu 1024 dynamische Lichtquellen, Nachbearbeitungseffekte
Skelettanimation und prozedurale Animation
Integriertes Ego-Shooter-Spiel „Smiley Killer“
Eingebautes Raumschiff + Planetenkolonisierungsspiel
Aufbau einer Open-World-Gegenstandssammlung und eines Zombie-Gameplay-Modus
Computer-KI für Spieler im FPS-Spiel, Gebäude-Gameplay und Schiffe im Universum-Spiel
Importer für Lightwave-Objektdateien, 3DS-Formate und Assimp für andere Dateiformate
Leseunterstützung für Texturen: JPEG, PNG, BMP, TIFF, TGA, DDS
Optimiert für schnelles Laden und Echtzeit-Rendering großer Modelle (> 1 GB Vertex-/Texturdaten)
Ich habe das Projekt bei Commit 6607 von SVN nach Git konvertiert. Der größte Teil des Codes ist in C++ geschrieben, mit GLSL für Shader. Es handelt sich hierbei um ein plattformübergreifendes Projekt. Projektdateien von Microsoft Visual Studio 2022 sind im Lieferumfang enthalten. Ein Linux/GCC-Makefile ist ebenfalls enthalten, ist jedoch experimenteller. Weitere Informationen finden Sie in README.linux. Das Projekt sollte mit etwas Arbeit unter gcc unter Linux erstellt werden können, aber es ist schon eine Weile her, dass ich das ausprobiert habe. Ich habe ein altes Makefile, das veraltet ist, aber möglicherweise nicht allzu viel Arbeit erfordert, um es zu reparieren und nutzbar zu machen.
Seien Sie gewarnt, dies ist ein großes Repository, derzeit etwa 1 GB. Ich habe Quellcode, Konfigurationsdateien, Texturen, Sounds, kleine Modelle, Beleuchtungsdateien, Szenendaten, Höhenkarten und Projektdateien eingefügt. Dieses Repo enthält nicht die großen Modelldateien, die in einigen Szenen verwendet werden. Sie müssen diese separat herunterladen. Das bedeutet, dass einige der Szenenkonfigurationsdateien nicht funktionieren, weil sie ihre referenzierten Daten nicht finden können. Die aktuelle Liste der Abhängigkeiten lautet:
OpenGL 4.5 (Sollte mit den neuesten Grafiktreibern für Windows 8/10/11 geliefert werden)
OpenAL 1.1 (optional) (Systeminstallation: https://www.openal.org/downloads/ oder Sie können das neuere openal-soft ausprobieren: https://github.com/kcat/openal-soft)
freeglut-2.8.1 (Aktuelle Version 3.0 funktioniert wahrscheinlich: https://sourceforge.net/projects/freeglut/)
freealut-1.1.0 (optional) (Eine Version ist hier: https://github.com/vancegroup/freealut)
zlib-1.2.11 (Eine neuere Version können Sie hier herunterladen: https://zlib.net/)
glew-2.0.0 (2.1.0 funktioniert wahrscheinlich auch: http://glew.sourceforge.net/)
gli (Neueste Version: https://github.com/g-truc/gli / nur Header, im Abhängigkeitsverzeichnis enthalten)
glm-0.9.9.0 (Neueste Version: https://glm.g-truc.net/0.9.9/index.html oder https://github.com/g-truc/glm / Nur Header, im Abhängigkeitsverzeichnis enthalten )
libpng-1.2.20 (optional) (Meine Version ist sehr alt; neueste Version: https://libpng.sourceforge.io/index.html); Kann in den meisten Fällen durch stb_image ersetzt werden, außer beim Export von Kartenbildern.)
libtiff-4.3.0 (optional) (Neueste Version: http://www.simplesystems.org/libtiff/)
Assimp (optional) (Siehe Build-Anweisungen unter https://github.com/assimp/assimp/blob/master/Build.md; Die vcpkg-Build-Anweisungen sind wahrscheinlich die einfachsten.)
libtarga (Quelle enthalten)
STB-Header: stb_image, stb_image_write, stb_dxt (Quelle enthalten)
Ich habe abgespeckte Versionen der meisten dieser Bibliotheken in das Abhängigkeitsverzeichnis aufgenommen. Ich habe alle großen Dateien entfernt, die von 3DWorld nicht benötigt werden, in einigen Fällen sogar Beispiele/Tests/Dokumentation. Diese wurden mit der MS Visual Studio 2022 Community unter Windows 11 erstellt. Wenn Sie diese verwenden möchten, müssen Sie die Verzeichnisse in das Stammverzeichnis kopieren und alle Bibliotheken neu erstellen, die für andere Versionen von Windows oder Visual Studio benötigt werden. Wenn Sie vcpkg klonen/installieren, sollte es sich auf derselben Ebene wie das 3DWorld-Verzeichnis befinden.
Beachten Sie, dass viele dieser Abhängigkeiten alt sind und durch neuere Bibliotheken ersetzt werden könnten. Ich habe mich auf das Hinzufügen von Inhalten konzentriert und bin daran nicht besonders interessiert. Freeglut sollte wahrscheinlich durch SDL und die Bildbibliotheken durch STB oder DevIL ersetzt werden. (STB wird als Fallback verwendet, unterstützt jedoch nicht alle verwendeten Bilder.)
Wenn Sie 3DWorld erstellen möchten, können Sie die Projekte im Ordner dependencies/ verwenden oder sie herunterladen und selbst erstellen und die Projekteinstellungen ändern, um sie zu verwenden. Ich verwende derzeit das x64 MS Visual Studio 2022 Community-Build-Ziel für 3DWorld, aber das Win32-Build-Ziel funktioniert auch. Das MSVS 2019-Projekt 3DWorld_msvs2019.vcxproj ist derzeit veraltet, kann aber möglicherweise zum Laufen gebracht werden. Es sollte im 32-Bit-Modus kompiliert und ausgeführt werden, wenn Sie die DLLs aus dem Ordner lib64/ in das Stammverzeichnis des Repos kopieren und einige andere Änderungen an den Projekteinstellungen vornehmen.
Wenn Sie Linux haben, können Sie versuchen, mit dem bereitgestellten Makefile zu erstellen. Die Datei README.linux sollte hilfreich sein. Ich habe 3DWorld dazu gebracht, Ubuntu 18.04 mit gcc 7 und Ubuntu 20.04 mit gcc 9 zu erstellen und größtenteils darauf auszuführen.
3DWorld nimmt einen Konfigurationsdateinamen in der Befehlszeile entgegen. Wenn es nicht gefunden wird, liest es „defaults.txt“ und verwendet alle dort aufgeführten Konfigurationsdateien. Einige dieser Kongigdateien umfassen Modelle wie den Sponza Atrium, den Stanford Dragon, einen Sportwagen usw. Diese Dateien sind zu groß, um sie im Git-Repository zu speichern. Ich habe versucht, 3DWorld dazu zu bringen, nicht schwerwiegende Fehler zu generieren, wenn die Modelle nicht gefunden werden können. Viele der größeren Modelle finden Sie im McGuire Computer Graphics Archive: http://casual-effects.com/data/
Ich habe die 3D-Modelle, die zu groß für das GitHub-Repo sind, gepackt und hier auf Google Drive gestellt (bis jetzt Version 6): https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view? usp=sharing Einige dieser Modelle werden im internen Format von 3DWorld gespeichert und sollten nicht in anderen Projekten wiederverwendet werden. Andere stammen von Websites wie Mixamo. Es gibt auch ein Texturverzeichnis mit zusätzlichen Texturen für Gebäudeinnenräume, die mit dem Projekttexturverzeichnis zusammengeführt werden können.
Systemanforderungen:
Windows 8/10/11; Linux bei Verwendung des Makefiles mit gcc.
Microsoft Visual Studio 2019 oder 2022. Für die OpenMP-Unterstützung ist die Professional- oder Community-Version erforderlich. Sie können auch versuchen, gcc unter Linux zu verwenden.
Eine relativ neue Generation von Nvidia- oder AMD-GPUs (Läuft auf meinem Laptop mit Intel-Grafik, aber mit 12–20 FPS)
Mindestens 8 GB Systemspeicher für die größeren Szenen
Mindestens 4 GB GPU-Speicher für die größeren Szenen; Meine GPU verfügt über 12 GB Speicher
Fehlerbehebung: Es scheint, als ob einige Systeme (insbesondere AMD-Karten) einen OpenGL-Kernkontext erfordern. Dies kann durch Hinzufügen von „use_core_context 1“ in der Konfigurationsdatei ausgewählt werden. Dies kann auch in scene_config/config_post.txt aktiviert werden, einer Datei, die nach dem Lesen aller anderen Konfigurationsdateien der obersten Ebene angewendet wird. In manchen Situationen (bei einigen Nvidia-Karten) kann die Verwendung eines Kernkontexts langsamer sein, weshalb ich ihn nicht standardmäßig aktiviert habe.
Nützliche Schlüssel (siehe readme-keys.txt für weitere Tastenkombinationen):
a,s,d,w: Bewegung
q,e: Waffe wechseln (Gameplay-Modus)
'Leerzeichen': Springen/Feuern
'esc': Beenden
„Tab“: Bildschirmmenü (navigieren Sie mit den Pfeiltasten und „X“, um zwischen den Menüs zu wechseln)
b: Objekte/Physik/KI aktivieren (für das Gameplay im Bodenmodus und im Universumsmodus)
F1: Wechseln Sie zwischen den Modi Boden/Universum/gekacheltes Gelände
F2: Spielmodus umschalten
m: Vollbildmodus umschalten
h: Flugbewegung umschalten
v: Kameramodus ändern (Kristallkugel/Orbit vs. Egoperspektive)
V: Mausansicht umschalten
K: Overhead-Kartenmodus umschalten
x: Pause
Linke Maustaste: Drehen/Aktion
Maus rechts: Feuer
Ich habe dieses Repo derzeit für Bildungszwecke unter der GPLv3-Lizenz eingerichtet. Einige Untermodule sind mit anderen Lizenzen verfügbar, die mit der kommerziellen Nutzung in meinem GitHub-Konto kompatibel sind. Es ist nicht als kommerzielles Tool gedacht und ich versuche hier nicht, Geld zu verdienen. Ich suche derzeit auch nicht nach anderen, die an dem Projekt mitarbeiten, akzeptiere jedoch Feedback, Fehlerberichte und Vorschläge. Vielleicht ändern sich die Dinge, wenn ich mich entscheide, daraus ein echtes Spiel zu machen. Wenn Sie hier etwas für Ihr Projekt verwenden möchten, lassen Sie es mich bitte wissen.
Für 3DWorld gibt es keine weitere Dokumentation. Ich habe jedoch einen Blog, der Beschreibungen der Algorithmen und viele Screenshots enthält: https://3dworldgen.blogspot.com
Hier sind einige Screenshots aus meinem Blog:
Hier ist ein Einzelhandelsbereich eines Gebäudes mit Regalen. Gebäude können Zehntausende interaktiver Objekte enthalten, die der Spieler mitnehmen und herumtragen kann. (config_heightmap.txt)
In anderen Räumen platzierte Kameras zeigen Echtzeit-Videoübertragungen auf Sicherheitsmonitoren. (config_heightmap.txt)
Zombies (mit Pfadfindung und anderen KI-Verhaltensweisen), die umherlaufen und in ein Hallenbad fallen. Die Wasseroberfläche weist Wellen, Spritzer, Reflexionen und Brechungen auf. (config_heightmap.txt)
Parkhaus mit geparkten Autos und an der Decke verlegten Sprinklerrohren. (config_heightmap.txt)
Prozeduraler Gebäudekeller mit Menschen, indirekter Beleuchtung und entlang der Decke verlegten Rohren. (config_heightmap.txt)
Prozedere Wohngegend mit Bürogebäuden im Hintergrund. Sowohl auf den Gehwegen als auch in den Gebäuden gibt es Autos und Menschen. (config_heightmap.txt)
Innenraum eines prozeduralen Gebäudes – eine Bibliothek mit prozedural generierten Büchern. (config_heightmap.txt)
Prozedural generierte Häuser und Bürogebäude mit vollständiger Innenausstattung. (config_heightmap.txt)
Reflektierende (Metall), brechende (Glas), emittierende und durchscheinende Kugeln in einer Nachtszene mit indirekter Beleuchtung. In Echtzeit gezeichnet; Kugeln können interaktiv bewegt werden. (config_white_plane.txt)
Prozedurale Stadt mit Gebäuden, Straßen, Autos und Fußgängern. (config_heightmap.txt)
Prozedurale Stadt bei Nacht mit Brücke im Vordergrund. (config_heightmap.txt)
Frühe Verfahrensstadt mit Kiefern.
Frühe Verfahrensstadt.
Gelände unter Verwendung von Domain Warp Noise mit hydraulischer Erosionssimulation, bevor die Stadt platziert wurde. (config_heightmap.txt)
Gekachelter Geländemodus mit Fluss, Bäumen, Gras usw. (config_t.txt)
Interaktive, zerstörerische Feuer-/Rauchsimulation in Echtzeit mit Bäumen, Pflanzen und Gras. (config_trees.txt)
Prozedurales Universum Sonnensystem mit Asteroidengürtel. (universe/config_universe.txt)
Crytek Sponza Atriumszene mit dynamischer Schattenwurf-Lichtquelle und indirekter Beleuchtung. (sponza/config_sponza2.txt)
10.000 Instanzen eines hochdetaillierten Museumsmodells, platziert im gekachelten Geländemodus (Puget Sound-Höhenkarte) und in Echtzeit mit Schatten und indirekter Beleuchtung gezeichnet. (config_museum_tt_model.txt)
Crytek Sponza-Atrium mit reflektierenden Böden und 200 dynamischen Punktlichtquellen in Echtzeit. (sponza/config_sponza2.txt)
Viele reflektierende/brechende Kugeln und Würfel mit dichtebasierter Lichtdämpfung im Innenhof des Bürogebäudes. (mapx/config_mapx.txt)
San Miguel-Szene mit dynamischem Schneefall und pfadverfolgter Schneebedeckungskarte, gerendert mit einem benutzerdefinierten Shader. (config_san_miguel.txt)
In Echtzeit gerenderte San-Miguel-Szene mit pfadverfolgter, vorberechneter indirekter Beleuchtung, Normalkarten und würfelförmig abgebildeten reflektierenden Oberflächen. (config_san_miguel.txt)
2 Mio. prozedural generierte + platzierte Kiefern (500.000 sichtbar), gezeichnet in Echtzeit im gekachelten Geländemodus unter Verwendung instanzierter Werbetafeln. (config_t.txt)
Interaktives Stapeln von 10.000 dynamischen Boxen in der Mapx-Szene. Stapel können verschoben und umgeworfen werden, und Szenen können gespeichert/neu geladen/bearbeitet werden. (mapx/config_mapx.txt)
Prozedural generierter Planet mit Ringen, die kleine Asteroiden enthalten. (universe/config_universe.txt)
Asteroidengürtel mit 10.000 dynamischen (rotierenden und umlaufenden) Asteroiden, 100.000 Punkt-Sprite-Partikeln und Volumenwolken für Staub. (universe/config_universe.txt)
Gekachelter Geländemodus, der verschiedene Formen prozedural generierter Vegetation zeigt, darunter Gras, Blumen, Kiefern, Palmen und Laubbäume. Dabei handelt es sich eigentlich um Polygonmodelle, die Schatten werfen. (config_t.txt)
Dynamische Lichtstrahlen in Echtzeit durch geräuschbasierten volumetrischen Rauch in der Crytek Sponza-Szene. (sponza/config_sponza2.txt)
Reflektierende Metallböden in der Crytek Sponza-Szene mit indirekter Sonnen- und Himmelsbeleuchtung. (sponza/config_sponza2.txt)
Reflektierende Kugeln, Torus und Würfel, in Echtzeit in einer dynamischen Szene mit Würfelkarten-Reflexionstexturen in der Lobby des Bürogebäudes gezeichnet. Materialien sind eine Mischung aus Metallen und Dielektrika, die auf physikalisch basierten Modellen basieren. (mapx/config_mapx.txt)
Museumsszene mit indirekter Beleuchtung, reflektierenden Oberflächen und Schattenkartierung. Dieses Modell ist prozedural texturiert. (config_museum.txt)
Verschneite Hausszene, die durch den Abwurf einer Milliarde Schneepartikel und die Ansammlung von Schnee entsteht. Schnee wird vorberechnet, kann aber in Echtzeit gerendert werden. (house/config_house_winter.txt)
Regensimulation und -darstellung, einschließlich Kollisionserkennung für jeden Regentropfen und jede nasse/reflektierende Oberfläche. (house/config_house.txt)
Indirekte Beleuchtung und Schatten durch überlappende Scheinwerfer, die auf dynamische Objekte angewendet werden. (mapx/config_mapx.txt)
Wassersimulation mit Wellen mittels Hardware-Tessellation im gekachelten Geländemodus. (config_t.txt)
Prozedural generierte 3D-Voxel-Eishöhlen mit indirekter Beleuchtung. Dieses Gelände kann in Echtzeit mit Pinseln und Waffenfeuer bearbeitet werden. (config_ice_caves.txt)
Prozedural generierter Planet, vollständig im Fragment-Shader gezeichnet, ohne Texturen. Dazu gehören die Geländegenerierung (Eis, Schnee, Fels, Wald, Wüste, Erde), Wasser, Wolken und Atmosphäre. (universe/config_universe.txt)