Blog 3DWorld : https://3dworldgen.blogspot.com
3DWorld est un moteur de jeu 3D multiplateforme basé sur OpenGL sur lequel je travaille depuis que j'ai suivi le cours d'infographie CS184 à l'UC Berkeley en 2001. Il présente les fonctionnalités suivantes :
Fonctions graphiques 3D, classes et wrappers autour d'OpenGL
Générateur/processeur de shader avec rechargement à chaud
Génération procédurale de contenu pour le terrain, la végétation, les villes, les intérieurs et extérieurs des bâtiments, etc.
Générateur d'univers procédural avec galaxies, étoiles, planètes, lunes, etc.
Génération procédurale de terrain 3D voxel avec édition utilisateur en temps réel
Générateur de terrain comprenant diverses fonctions de bruit, érosion, édition utilisateur en temps réel, lecture/écriture de carte de hauteur
Construction procédurale (intérieure et extérieure), génération de routes et de villes
Simulation physique pour les types d'objets primitifs et autres (> 10K objets dynamiques)
Cycle jour/nuit en temps réel avec météo (pluie, neige, grêle, vent, éclair)
Matériaux physiques avec réflexion et réfraction
Ombres dynamiques, occlusion ambiante, jusqu'à 1024 sources de lumière dynamiques, effets de post-traitement
Animation squelettique et animation procédurale
Jeu de tir à la première personne intégré "Smiley Killer"
Vaisseau spatial intégré + jeu de colonisation de planètes
Création d'une collection d'objets en monde ouvert et d'un mode de jeu zombie
IA informatique pour les joueurs du jeu FPS, créant un gameplay et des vaisseaux dans le jeu de l'univers
Importateur de fichiers objets Lightwave, formats 3DS et Assimp pour d'autres formats de fichiers
Prise en charge de la lecture des textures : JPEG, PNG, BMP, TIFF, TGA, DDS
Optimisé pour un chargement rapide et un rendu en temps réel de grands modèles (> 1 Go de données de sommets/textures)
J'ai converti le projet de svn en git au commit 6607. La plupart du code est écrit en C++, avec GLSL pour les shaders. Il s’agit d’un projet multiplateforme. Les fichiers de projet Microsoft Visual Studio 2022 sont inclus. Un makefile Linux/gcc est également inclus, mais il est plus expérimental. Voir README.linux pour plus de détails. Le projet devrait être construit sous gcc sur Linux avec un peu de travail, mais cela fait un moment que je n'ai pas essayé cela. J'ai un vieux fichier Make qui est obsolète, mais qui ne demande pas trop de travail pour le réparer et le rendre utilisable.
Attention, il s'agit d'un grand référentiel, actuellement d'environ 1 Go. J'ai inclus le code source, les fichiers de configuration, les textures, les sons, les petits modèles, les fichiers d'éclairage, les données de scène, les cartes de hauteur et les fichiers de projet. Ce dépôt ne contient pas les gros fichiers de modèles utilisés dans certaines scènes, vous devrez les télécharger séparément. Cela signifie que certains fichiers de configuration de scène ne fonctionneront pas car ils ne trouvent pas leurs données référencées. La liste actuelle des dépendances est la suivante :
OpenGL 4.5 (doit être fourni avec les derniers pilotes graphiques de Windows 8/10/11)
OpenAL 1.1 (facultatif) (installation du système : https://www.openal.org/downloads/ ou vous pouvez essayer le nouveau openal-soft : https://github.com/kcat/openal-soft)
freeglut-2.8.1 (la version actuelle 3.0 fonctionne probablement : https://sourceforge.net/projects/freeglut/)
freealut-1.1.0 (facultatif) (Une version est ici : https://github.com/vancegroup/freealut)
zlib-1.2.11 (Vous pouvez télécharger une version plus récente à partir d'ici : https://zlib.net/)
glew-2.0.0 (2.1.0 fonctionne probablement aussi : http://glew.sourceforge.net/)
gli (Dernière version : https://github.com/g-truc/gli/header uniquement, inclus dans le répertoire des dépendances)
glm-0.9.9.0 (Dernière version : https://glm.g-truc.net/0.9.9/index.html ou https://github.com/g-truc/glm/header uniquement, inclus dans le répertoire des dépendances )
libpng-1.2.20 (facultatif) (Ma version est très ancienne ; Dernière version : https://libpng.sourceforge.io/index.html) ; Peut être remplacé par stb_image dans la plupart des cas, sauf pour l'exportation d'images cartographiques.)
libtiff-4.3.0 (facultatif) (Dernière version : http://www.simplesystems.org/libtiff/)
Assimp (facultatif) (Voir les instructions de construction sur https://github.com/assimp/assimp/blob/master/Build.md ; Les instructions de construction de vcpkg sont probablement les plus simples.)
libtarga (source incluse)
En-têtes STB : stb_image, stb_image_write, stb_dxt (source incluse)
J'ai inclus des versions simplifiées de la plupart de ces bibliothèques dans le répertoire des dépendances. J'ai supprimé tous les fichiers volumineux qui ne sont pas requis par 3DWorld, dans certains cas même des exemples/tests/documentation. Ceux-ci ont été créés avec la communauté MS Visual Studio 2022 sur Windows 11. Si vous souhaitez les utiliser, vous devrez copier les répertoires dans le répertoire racine et reconstruire toutes les bibliothèques nécessaires pour d'autres versions de Windows ou de Visual Studio. Si vous clonez/installez vcpkg, il doit être au même niveau que le répertoire 3DWorld.
Notez que bon nombre de ces dépendances sont anciennes et pourraient être remplacées par des bibliothèques plus récentes. Je me suis concentré sur l'ajout de contenu et cela ne m'intéresse pas trop. Freeglut devrait probablement être remplacé par SDL, et les bibliothèques d'images par STB ou DevIL. (STB est utilisé comme solution de secours mais ne prend pas en charge toutes les images utilisées.)
Si vous souhaitez créer 3DWorld, vous pouvez utiliser les projets dans le dossier dependencies/, ou les télécharger et les créer vous-même et modifier les paramètres du projet pour les utiliser. J'utilise actuellement la cible de build x64 MS Visual Studio 2022 Community pour 3DWorld, mais la cible de build win32 fonctionne également. Le projet MSVS 2019 3DWorld_msvs2019.vcxproj est actuellement obsolète mais peut éventuellement fonctionner. Il doit être compilé et exécuté en mode 32 bits si vous copiez les DLL du dossier lib64/ vers la racine du référentiel et apportez d'autres modifications aux paramètres du projet.
Si vous utilisez Linux, vous pouvez essayer de construire en utilisant le makefile fourni. Le fichier README.linux devrait être utile. J'ai construit 3DWorld et l'ai principalement exécuté sur Ubuntu 18.04 avec gcc 7 et Ubuntu 20.04 avec gcc 9.
3DWorld prend un nom de fichier de configuration sur la ligne de commande. S'il n'est pas trouvé, il lit defaults.txt et utilise tous les fichiers de configuration qui y sont répertoriés. Certains de ces fichiers de configuration incluent des modèles tels que le Sponza Atrium, le Stanford Dragon, la voiture de sport, etc. Ces fichiers sont trop volumineux pour être stockés dans le dépôt git. J'ai essayé de faire en sorte que 3DWorld génère des erreurs non fatales si les modèles sont introuvables. La plupart des modèles les plus grands peuvent être trouvés dans les archives McGuire Computer Graphics : http://casual-effects.com/data/
J'ai regroupé les modèles 3D trop volumineux pour le dépôt GitHub et les ai mis sur Google Drive ici (jusqu'à la v6 maintenant) : https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view ? usp=sharing Certains de ces modèles sont stockés au format interne de 3DWorld et ne doivent pas être réutilisés dans d'autres projets. D’autres proviennent de sites comme Mixamo. Il existe également un répertoire de textures avec des textures supplémentaires utilisées avec les intérieurs de bâtiments qui peuvent être fusionnées avec le répertoire de textures du projet.
Configuration système requise :
Windows 8/10/11 ; Linux lors de l'utilisation du makefile avec gcc.
Microsoft Visual Studio 2019 ou 2022. La version professionnelle ou communautaire est nécessaire pour le support OpenMP. Vous pouvez également essayer d'utiliser gcc sous Linux.
Une génération relativement nouvelle de GPU Nvidia ou AMD (fonctionne sur mon ordinateur portable avec des graphiques Intel, mais à 12-20 FPS)
Au moins 8 Go de mémoire système pour les scènes plus grandes
Au moins 4 Go de mémoire GPU pour les scènes plus grandes ; Mon GPU a 12 Go de mémoire
Dépannage : Il semble que certains systèmes (les cartes AMD en particulier) nécessitent un contexte de base OpenGL. Cela peut être sélectionné en ajoutant "use_core_context 1" dans le fichier de configuration. Cela peut également être activé dans scene_config/config_post.txt, qui est un fichier qui s'applique après avoir lu tous les autres fichiers de configuration de niveau supérieur. Dans certaines situations (certaines cartes Nvidia), l'utilisation d'un contexte principal peut être plus lente, c'est pourquoi je ne l'ai pas activé par défaut.
Clés utiles (voir readme-keys.txt pour plus de raccourcis clavier) :
a,s,d,w : mouvement
q,e : Changer d'arme (mode de jeu)
'espace' : sauter/tirer
'esc' : Quitter
« onglet » : menu à l'écran (naviguez avec les touches fléchées et « X » pour changer de menu)
b : Activer les objets/physique/IA (pour le gameplay en mode sol et en mode univers)
F1 : basculer entre les modes sol/univers/terrain carrelé
F2 : basculer le mode de jeu
m : basculer en mode plein écran
h : basculer le mouvement de vol
v : Changer le mode de la caméra (boule de cristal/orbite vs première personne)
V : Basculer l'apparence de la souris
K : basculer le mode carte aérienne
x : Pause
Souris gauche : Tourner/Action
Souris droite : Feu
J'ai actuellement ce dépôt à des fins éducatives sous la licence GPLv3. Certains sous-modules sont disponibles avec d'autres licences compatibles avec une utilisation commerciale dans mon compte GitHub. Ce n’est pas un outil commercial et je n’essaie pas de gagner de l’argent ici. Je ne recherche pas non plus d'autres personnes pour travailler sur le projet à ce stade, même si j'accepte les commentaires, les rapports de bogues et les suggestions. Peut-être que les choses changeront si je décide d’en faire un vrai jeu. Si vous souhaitez utiliser quelque chose ici pour votre projet, faites-le moi savoir.
Il n'y a pas d'autre documentation pour 3DWorld. Cependant, j'ai un blog qui comprend des descriptions des algorithmes et de nombreuses captures d'écran : https://3dworldgen.blogspot.com
Voici quelques captures d'écran liées à mon blog :
Voici une zone commerciale d'un immeuble avec des étagères. Les bâtiments peuvent contenir des dizaines de milliers d'objets interactifs que le joueur peut emporter et transporter. (config_heightmap.txt)
Des caméras placées dans d’autres pièces affichent des flux vidéo en temps réel sur des moniteurs de sécurité. (config_heightmap.txt)
Des zombies (avec recherche de chemin et autres comportements d'IA) se promenant et tombant dans une piscine intérieure. La surface de l'eau présente des ondulations, des éclaboussures, des réflexions et des réfractions. (config_heightmap.txt)
Parking couvert avec voitures garées et tuyaux d'arrosage acheminés au plafond. (config_heightmap.txt)
Sous-sol d'un bâtiment procédural avec des personnes, un éclairage indirect et des tuyaux acheminés le long du plafond. (config_heightmap.txt)
Quartier résidentiel procédural avec des immeubles de bureaux en arrière-plan. Il y a des voitures et des gens sur les trottoirs et à l’intérieur des bâtiments. (config_heightmap.txt)
Intérieur du bâtiment procédural - une bibliothèque avec des livres générés de manière procédurale. (config_heightmap.txt)
Maisons et immeubles de bureaux générés de manière procédurale avec des intérieurs complets. (config_heightmap.txt)
Sphères réfléchissantes (métal), réfractives (verre), émissives et translucides dans une scène nocturne avec éclairage indirect. Dessiné en temps réel ; les sphères peuvent être déplacées de manière interactive. (config_white_plane.txt)
Ville procédurale avec des bâtiments, des routes, des voitures et des piétons. (config_heightmap.txt)
Ville procédurale la nuit avec pont au premier plan. (config_heightmap.txt)
Ville procédurale ancienne avec des pins.
Ville procédurale précoce.
Terrain utilisant le bruit de déformation de domaine avec simulation d'érosion hydraulique avant le placement de la ville. (config_heightmap.txt)
Mode terrain carrelé avec rivière, arbres, herbe, etc. (config_t.txt)
Simulation interactive de feu/fumée destructrice en temps réel impliquant des arbres, des plantes et de l'herbe. (config_trees.txt)
Système solaire de l'univers procédural avec ceinture d'astéroïdes. (univers/config_universe.txt)
Scène d'atrium Crytek Sponza avec source de lumière dynamique et éclairage indirect. (sponza/config_sponza2.txt)
10 000 instances d'un modèle de musée très détaillé placé en mode terrain carrelé (carte de hauteur de Puget Sound) et dessiné en temps réel avec des ombres et un éclairage indirect. (config_museum_tt_model.txt)
Atrium Crytek Sponza avec sols réfléchissants et 200 sources lumineuses ponctuelles dynamiques en temps réel. (sponza/config_sponza2.txt)
De nombreuses sphères et cubes réfléchissants/réfractifs avec atténuation de la lumière basée sur la densité dans la cour d'un immeuble de bureaux. (mapx/config_mapx.txt)
Scène de San Miguel avec chutes de neige dynamiques et carte de couverture de neige tracée avec un shader personnalisé. (config_san_miguel.txt)
Scène de San Miguel rendue en temps réel avec un éclairage indirect précalculé, des cartes normales et des surfaces réfléchissantes cartographiées par des cubes. (config_san_miguel.txt)
2 millions de pins générés de manière procédurale + placés (500 000 visibles) dessinés en temps réel en mode terrain carrelé à l'aide de panneaux d'affichage instanciés. (config_t.txt)
Empilement interactif de 10 000 boîtes dynamiques dans la scène mapx. Les piles peuvent être déplacées et renversées, et la scène peut être enregistrée/rechargée/éditée. (mapx/config_mapx.txt)
Planète générée de manière procédurale avec des anneaux contenant de petits astéroïdes. (univers/config_universe.txt)
Ceinture d'astéroïdes avec 10 000 astéroïdes dynamiques (en rotation et en orbite), 100 000 particules de sprite ponctuelles et des nuages de panneaux d'affichage volumineux pour la poussière. (univers/config_universe.txt)
Mode terrain en mosaïque, montrant diverses formes de végétation générée de manière procédurale, notamment de l'herbe, des fleurs, des pins, des palmiers et des arbres à feuilles caduques. Ce sont en fait des modèles polygonaux qui projettent des ombres. (config_t.txt)
Des puits de lumière dynamiques en temps réel à travers une fumée volumétrique basée sur le bruit dans la scène Crytek Sponza. (sponza/config_sponza2.txt)
Sols métalliques réfléchissants dans la scène Crytek Sponza, avec éclairage indirect soleil + ciel. (sponza/config_sponza2.txt)
Sphères réfléchissantes, tore et cube dessinés en temps réel dans une scène dynamique utilisant des textures de réflexion de carte cubique dans le hall de l'immeuble de bureaux. Les matériaux sont un mélange de métaux et de diélectriques utilisant des modèles physiques. (mapx/config_mapx.txt)
Scène de musée avec éclairage indirect, surfaces réfléchissantes et cartographie des ombres. Ce modèle est texturé de manière procédurale. (config_museum.txt)
Scène de maison enneigée générée par la chute d'un milliard de particules de neige et l'accumulation de neige. La neige est précalculée mais peut être restituée en temps réel. (maison/config_house_winter.txt)
Simulation et rendu de la pluie, y compris détection de collision pour chaque goutte de pluie et surfaces mouillées/réfléchissantes. (maison/config_house.txt)
Éclairage indirect et ombres provenant de projecteurs superposés appliqués à des objets dynamiques. (mapx/config_mapx.txt)
Simulation d'eau avec vagues utilisant la tessellation matérielle en mode terrain carrelé. (config_t.txt)
Grottes de glace voxel 3D générées de manière procédurale avec éclairage indirect. Ce terrain peut être édité en temps réel avec des pinceaux et des tirs d'armes. (config_ice_caves.txt)
Planète générée de manière procédurale, entièrement dessinée dans le fragment shader, sans textures. Cela inclut la génération de terrain (glace, neige, roche, forêt, désert, terre), l'eau, les nuages et l'atmosphère. (univers/config_universe.txt)