Blog de 3DWorld: https://3dworldgen.blogspot.com
3DWorld es un motor de juego 3D multiplataforma basado en OpenGL en el que he estado trabajando desde que tomé el curso de gráficos por computadora CS184 en UC Berkeley en 2001. Tiene las siguientes características:
Funciones, clases y contenedores de gráficos 3D en torno a OpenGL
Generador/procesador de sombreadores con recarga en caliente
Generación de contenidos procedimentales para terreno, vegetación, ciudades, interiores y exteriores de edificios, etc.
Generador de universos procedimentales con galaxias, estrellas, planetas, lunas, etc.
Generación procedimental de terreno voxel 3D con edición de usuario en tiempo real
Generador de terreno que incluye varias funciones de ruido, erosión, edición de usuario en tiempo real, lectura/escritura de mapas de altura
Edificio procesal (interior y exterior), generación de carreteras y ciudades.
Simulación física para tipos de objetos primitivos y otros (> 10K objetos dinámicos)
Ciclo día/noche en tiempo real con el tiempo (lluvia, nieve, granizo, viento, relámpagos)
Materiales de base física con reflexión y refracción.
Sombras dinámicas, oclusión ambiental, hasta 1024 fuentes de luz dinámicas, efectos de posprocesamiento
Animación esquelética y animación procedimental.
Juego de disparos en primera persona integrado "Smiley Killer"
Nave espacial integrada + juego de colonización de planetas.
Creación de una colección de objetos de mundo abierto y un modo de juego zombie
IA informática para jugadores del juego FPS, juego de construcción y juegos de naves en el universo
Importador de archivos de objetos Lightwave, formatos 3DS y Assimp para otros formatos de archivos
Soporte de lectura de texturas: JPEG, PNG, BMP, TIFF, TGA, DDS
Optimizado para carga rápida y renderizado en tiempo real de modelos grandes (> 1 GB de datos de vértice/textura)
Convertí el proyecto de svn a git en la confirmación 6607. La mayor parte del código está escrito en C++, con GLSL para sombreadores. Este pretende ser un proyecto multiplataforma. Se incluyen archivos de proyecto de Microsoft Visual Studio 2022. También se incluye un archivo MAKE de Linux/gcc, pero es más experimental. Consulte README.linux para obtener más detalles. El proyecto debería construirse bajo gcc en Linux con algo de trabajo, pero ha pasado un tiempo desde que probé esto. Tengo un archivo MAKE antiguo que está desactualizado, pero puede que no requiera mucho trabajo arreglarlo y hacerlo utilizable.
Tenga cuidado, este es un repositorio grande, actualmente alrededor de 1 GB. He incluido código fuente, archivos de configuración, texturas, sonidos, modelos pequeños, archivos de iluminación, datos de escenas, mapas de altura y archivos de proyecto. Este repositorio no contiene los archivos de modelo grandes utilizados en algunas escenas; deberás descargarlos por separado. Esto significa que algunos de los archivos de configuración de la escena no funcionarán porque no pueden encontrar sus datos de referencia. La lista actual de dependencias es:
OpenGL 4.5 (debe venir con los controladores de gráficos más recientes de Windows 8/10/11)
OpenAL 1.1 (opcional) (Instalación del sistema: https://www.openal.org/downloads/ o puede probar el openal-soft más nuevo: https://github.com/kcat/openal-soft)
freeglut-2.8.1 (La versión actual 3.0 probablemente funcione: https://sourceforge.net/projects/freeglut/)
freealut-1.1.0 (opcional) (Una versión está aquí: https://github.com/vancegroup/freealut)
zlib-1.2.11 (Puede descargar una versión más reciente desde aquí: https://zlib.net/)
glew-2.0.0 (2.1.0 probablemente también funcione: http://glew.sourceforge.net/)
gli (Última versión: https://github.com/g-truc/gli/solo encabezado, incluido en el directorio de dependencias)
glm-0.9.9.0 (Última versión: https://glm.g-truc.net/0.9.9/index.html o https://github.com/g-truc/glm/header solamente, incluido en el directorio de dependencias )
libpng-1.2.20 (opcional) (Mi versión es muy antigua; última versión: https://libpng.sourceforge.io/index.html); Se puede reemplazar con stb_image en la mayoría de los casos, excepto para la exportación de imágenes de mapas).
libtiff-4.3.0 (opcional) (Última versión: http://www.simplesystems.org/libtiff/)
Assimp (opcional) (consulte las instrucciones de compilación en https://github.com/assimp/assimp/blob/master/Build.md; las instrucciones de compilación de vcpkg son probablemente las más sencillas).
libtarga (fuente incluida)
Encabezados STB: stb_image, stb_image_write, stb_dxt (fuente incluida)
He incluido versiones simplificadas de la mayoría de estas bibliotecas en el directorio de dependencias. Eliminé todos los archivos grandes que 3DWorld no requiere, en algunos casos incluso ejemplos/pruebas/documentación. Estos se crearon con MS Visual Studio 2022 Community en Windows 11. Si desea usarlos, deberá copiar los directorios al directorio raíz y reconstruir las bibliotecas necesarias para otras versiones de Windows o Visual Studio. Si clona/instala vcpkg, debería estar al mismo nivel que el directorio 3DWorld.
Tenga en cuenta que muchas de estas dependencias son antiguas y podrían reemplazarse con bibliotecas más nuevas. Me he estado concentrando en agregar contenido y no estoy demasiado interesado en esto. Freeglut probablemente debería reemplazarse con SDL y las bibliotecas de imágenes con STB o DevIL. (STB se utiliza como alternativa, pero no admite todas las imágenes utilizadas).
Si desea construir 3DWorld, puede usar los proyectos en la carpeta dependencias/, o descargarlos y compilarlos usted mismo y cambiar la configuración del proyecto para usarlos. Actualmente uso el objetivo de compilación de la comunidad x64 MS Visual Studio 2022 para 3DWorld, pero el objetivo de compilación win32 también funciona. El proyecto MSVS 2019 3DWorld_msvs2019.vcxproj actualmente está desactualizado, pero es posible que funcione. Debería compilarse y ejecutarse en modo de 32 bits si copia las DLL de la carpeta lib64/ a la raíz del repositorio y realiza algunos otros cambios en la configuración del proyecto.
Si tiene Linux, puede intentar compilar utilizando el archivo MAKE proporcionado. El archivo README.linux debería resultar útil. Obtuve 3DWorld para compilar y ejecutar principalmente en Ubuntu 18.04 con gcc 7 y Ubuntu 20.04 con gcc 9.
3DWorld toma un nombre de archivo de configuración en la línea de comando. Si no se encuentra, lee defaults.txt y utiliza cualquier archivo de configuración enumerado allí. Algunos de estos archivos de configuración incluyen modelos como Sponza Atrium, Stanford Dragon, autos deportivos, etc. Estos archivos son demasiado grandes para almacenarlos en el repositorio de git. Intenté que 3DWorld generara errores no fatales si no se pueden encontrar los modelos. Muchos de los modelos más grandes se pueden encontrar en McGuire Computer Graphics Archive: http://casual-effects.com/data/
Empaqué los modelos 3D que son demasiado grandes para el repositorio de GitHub y los puse en Google Drive aquí (hasta la versión 6 ahora): https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view? usp=sharing Algunos de estos modelos se almacenan en el formato interno de 3DWorld y no deben reutilizarse en otros proyectos. Otros provienen de sitios web como Mixamo. También hay un directorio de texturas con texturas adicionales utilizadas en interiores de edificios que se pueden fusionar con el directorio de texturas del proyecto.
Requisitos del sistema:
ventanas 8/10/11; Linux cuando se utiliza el archivo MAKE con gcc.
Microsoft Visual Studio 2019 o 2022. Se necesita la versión profesional o comunitaria para ser compatible con OpenMP. También puedes intentar usar gcc en Linux.
Una generación relativamente nueva de GPU Nvidia o AMD (se ejecuta en mi computadora portátil con gráficos Intel, pero a 12-20 FPS)
Al menos 8 GB de memoria del sistema para escenas más grandes
Al menos 4 GB de memoria GPU para escenas más grandes; Mi GPU tiene 12GB de memoria
Solución de problemas: Parece que algunos sistemas (las tarjetas AMD en particular) requieren un contexto central OpenGL. Esto se puede seleccionar agregando "use_core_context 1" en el archivo de configuración. Esto también se puede habilitar en scene_config/config_post.txt, que es un archivo que se aplica después de leer todos los demás archivos de configuración de nivel superior. En algunas situaciones (algunas tarjetas Nvidia), el uso de un contexto central puede ser más lento, razón por la cual no lo tengo habilitado de forma predeterminada.
Teclas útiles (consulte readme-keys.txt para obtener más combinaciones de teclas):
a,s,d,w: movimiento
q,e: Cambiar arma (modo de juego)
'espacio': saltar/disparar
'esc': salir
'pestaña': menú en pantalla (navegue con las teclas de flecha y 'X' para cambiar de menú)
b: Habilitar objetos/física/IA (para juego en modo tierra y modo universo)
F1: cambiar entre los modos tierra/universo/terreno en mosaico
F2: alternar modo de juego
m: alternar modo de pantalla completa
h: alternar movimiento de vuelo
v: Cambiar el modo de cámara (bola de cristal/órbita vs. primera persona)
V: alternar la apariencia del mouse
K: alternar el modo de mapa aéreo
x: pausa
Ratón izquierdo: Giro/Acción
Ratón derecho: fuego
Actualmente tengo este repositorio con fines educativos bajo la licencia GPLv3. Algunos submódulos están disponibles con otras licencias compatibles con uso comercial en mi cuenta de GitHub. No pretende ser una herramienta comercial y no estoy tratando de ganar dinero aquí. Tampoco busco que otros trabajen en el proyecto en esta etapa, aunque acepto comentarios, informes de errores y sugerencias. Quizás las cosas cambien si decido hacer un juego real con esto. Si desea utilizar algo aquí para su proyecto, hágamelo saber.
No hay más documentación para 3DWorld. Sin embargo, tengo un blog que incluye descripciones de los algoritmos y muchas capturas de pantalla: https://3dworldgen.blogspot.com
Aquí hay algunas capturas de pantalla vinculadas desde mi blog:
Aquí hay un área comercial de un edificio con estantes. Los edificios pueden contener decenas de miles de objetos interactivos que el jugador puede tomar y transportar. (config_heightmap.txt)
Las cámaras colocadas en otras salas muestran transmisiones de video en tiempo real en monitores de seguridad. (config_heightmap.txt)
Zombis (con búsqueda de caminos y otros comportamientos de IA) caminando y cayendo en una piscina cubierta. La superficie del agua tiene ondulaciones, salpicaduras, reflejos y refracciones. (config_heightmap.txt)
Garaje con coches aparcados y tuberías de rociadores tendidas en el techo. (config_heightmap.txt)
Sótano de edificio procesal con personas, iluminación indirecta y tuberías tendidas a lo largo del techo. (config_heightmap.txt)
Barrio residencial procesal con edificios de oficinas al fondo. Hay coches y personas tanto en las aceras como en el interior de los edificios. (config_heightmap.txt)
Interior del edificio procesal: una biblioteca con libros generados procedimentalmente. (config_heightmap.txt)
Casas y edificios de oficinas generados procedimentalmente con interiores completos. (config_heightmap.txt)
Esferas reflectantes (metal), refractivas (vidrio), emisivas y translúcidas en escena nocturna con iluminación indirecta. Dibujado en tiempo real; Las esferas se pueden mover de forma interactiva. (config_white_plane.txt)
Ciudad procesal con edificios, carreteras, coches y peatones. (config_heightmap.txt)
Ciudad procesal de noche con puente en primer plano. (config_heightmap.txt)
Ciudad procesal temprana con pinos.
Ciudad procesal temprana.
Terreno que utiliza ruido de deformación de dominio con simulación de erosión hidráulica antes de que se coloque la ciudad. (config_heightmap.txt)
Modo de terreno en mosaico con río, árboles, césped, etc. (config_t.txt)
Simulación interactiva en tiempo real de fuego/humo destructivo que involucra árboles, plantas y pasto. (config_trees.txt)
Sistema solar del universo procesal con cinturón de asteroides. (universo/config_universo.txt)
Escena del atrio de Crytek Sponza con fuente de luz dinámica que proyecta sombras e iluminación indirecta. (sponza/config_sponza2.txt)
10.000 instancias de un modelo de museo muy detallado colocado en modo de terreno en mosaico (mapa de altura de Puget Sound) y dibujado en tiempo real con sombras e iluminación indirecta. (config_museum_tt_model.txt)
Atrio Crytek Sponza con pisos reflectantes y 200 fuentes de luz puntuales dinámicas en tiempo real. (sponza/config_sponza2.txt)
Muchas esferas y cubos reflectantes/refractivos con atenuación de luz basada en la densidad en el patio del edificio de oficinas. (mapx/config_mapx.txt)
Escena de San Miguel con nevadas dinámicas y mapa de cobertura de nieve trazado con un sombreador personalizado. (config_san_miguel.txt)
Escena de San Miguel representada en tiempo real con iluminación indirecta precalculada, mapas normales y superficies reflectantes con mapas de cubos. (config_san_miguel.txt)
2M generados procedimentalmente + pinos colocados (500K visibles) dibujados en tiempo real en modo de terreno en mosaico utilizando vallas publicitarias instanciadas. (config_t.txt)
Apilamiento interactivo de 10.000 cajas dinámicas en escena mapx. Las pilas se pueden mover y derribar, y la escena se puede guardar, recargar o editar. (mapx/config_mapx.txt)
Planeta generado procesalmente con anillos que contienen pequeños asteroides. (universo/config_universo.txt)
Cinturón de asteroides con 10.000 asteroides dinámicos (en rotación y en órbita), 100.000 partículas de sprites puntuales y nubes voluminosas de polvo. (universo/config_universo.txt)
Modo de terreno en mosaico, que muestra diversas formas de vegetación generada por procedimientos, incluidos pasto, flores, pinos, palmeras y árboles de hoja caduca. En realidad, se trata de modelos poligonales que proyectan sombras. (config_t.txt)
Rayos de luz dinámicos y en tiempo real a través de humo volumétrico basado en ruido en la escena de Crytek Sponza. (sponza/config_sponza2.txt)
Pisos metálicos reflectantes en la escena de Crytek Sponza, con iluminación indirecta de sol + cielo. (sponza/config_sponza2.txt)
Esferas reflectantes, toros y cubos dibujados en tiempo real en una escena dinámica utilizando texturas de reflexión de mapas de cubos en el vestíbulo del edificio de oficinas. Los materiales son una mezcla de metales y dieléctricos que utilizan modelos basados en la física. (mapx/config_mapx.txt)
Escena de museo con iluminación indirecta, superficies reflectantes y mapeo de sombras. Este modelo tiene una textura procesal. (config_museum.txt)
Escena de una casa nevada generada al dejar caer mil millones de partículas de nieve y acumular nieve. La nieve está precalculada pero se puede renderizar en tiempo real. (casa/config_house_winter.txt)
Simulación y renderizado de lluvia, incluida la detección de colisiones para cada gota de lluvia y superficies mojadas/reflectantes. (casa/config_house.txt)
Iluminación indirecta y sombras de focos superpuestos aplicados a objetos dinámicos. (mapx/config_mapx.txt)
Simulación de agua con olas mediante teselación por hardware en modo de terreno en mosaico. (config_t.txt)
Cuevas de hielo voxel 3D generadas procedimentalmente con iluminación indirecta. Este terreno se puede editar en tiempo real con pinceles y disparos de armas. (config_ice_caves.txt)
Planeta generado procesalmente dibujado íntegramente en el sombreador de fragmentos sin texturas. Esto incluye la generación del terreno (hielo, nieve, rocas, bosques, desiertos, tierra), agua, nubes y atmósfera. (universo/config_universo.txt)