Blog 3DWorld: https://3dworldgen.blogspot.com
3DWorld é um mecanismo de jogo 3D multiplataforma baseado em OpenGL no qual venho trabalhando desde que fiz o curso de computação gráfica CS184 na UC Berkeley em 2001. Ele possui os seguintes recursos:
Funções gráficas 3D, classes e wrappers em torno do OpenGL
Gerador/processador de shader com recarga a quente
Geração de conteúdo processual para terrenos, vegetação, cidades, interiores e exteriores de edifícios, etc.
Gerador de universo processual com galáxias, estrelas, planetas, luas, etc.
Geração de terreno 3D de voxel processual com edição de usuário em tempo real
Gerador de terreno incluindo diversas funções de ruído, erosão, edição de usuário em tempo real, leitura/gravação de mapa de altura
Construção processual (interior e exterior), geração de estradas e cidades
Simulação física para tipos de objetos primitivos e outros (> 10K objetos dinâmicos)
Ciclo dia/noite em tempo real com clima (chuva, neve, granizo, vento, relâmpagos)
Materiais de base física com reflexão e refração
Sombras dinâmicas, oclusão de ambiente, até 1.024 fontes de luz dinâmicas, efeitos de pós-processamento
Animação esquelética e animação processual
Jogo de tiro em primeira pessoa integrado "smiley killer"
Nave espacial integrada + jogo de colonização de planetas
Construindo coleção de itens de mundo aberto e modo de jogo zumbi
IA de computador para jogadores no jogo FPS, construção de jogabilidade e naves no jogo do universo
Importador para arquivo objeto Lightwave, formatos 3DS e Assimp para outros formatos de arquivo
Suporte de leitura para texturas: JPEG, PNG, BMP, TIFF, TGA, DDS
Otimizado para carregamento rápido e renderização em tempo real de modelos grandes (> 1 GB de dados de vértice/textura)
Converti o projeto de svn para git no commit 6607. A maior parte do código é escrita em C++, com GLSL para shaders. Este pretende ser um projeto multiplataforma. Os arquivos de projeto do Microsoft Visual Studio 2022 estão incluídos. Um makefile linux/gcc também está incluído, mas é mais experimental. Consulte README.linux para obter mais detalhes. O projeto deve ser construído no gcc no linux com algum trabalho, mas já faz um tempo que não tentei isso. Eu tenho um makefile antigo que está desatualizado, mas pode não exigir muito trabalho para consertá-lo e torná-lo utilizável.
Esteja avisado, este é um repositório grande, atualmente com cerca de 1 GB. Incluí código-fonte, arquivos de configuração, texturas, sons, pequenos modelos, arquivos de iluminação, dados de cena, mapas de altura e arquivos de projeto. Este repositório não contém os arquivos de modelo grandes usados em algumas cenas; você terá que baixá-los separadamente. Isso significa que alguns dos arquivos de configuração da cena não funcionarão porque não conseguem encontrar os dados referenciados. A lista atual de dependências é:
OpenGL 4.5 (deve vir com os drivers gráficos mais recentes do Windows 8/10/11)
OpenAL 1.1 (opcional) (instalação do sistema: https://www.openal.org/downloads/ ou você pode experimentar o openal-soft mais recente: https://github.com/kcat/openal-soft)
freeglut-2.8.1 (a versão atual 3.0 provavelmente funciona: https://sourceforge.net/projects/freeglut/)
freealut-1.1.0 (opcional) (uma versão está aqui: https://github.com/vancegroup/freealut)
zlib-1.2.11 (você pode baixar uma versão mais recente aqui: https://zlib.net/)
glew-2.0.0 (2.1.0 provavelmente também funciona: http://glew.sourceforge.net/)
gli (versão mais recente: https://github.com/g-truc/gli / apenas cabeçalho, incluído no diretório de dependências)
glm-0.9.9.0 (versão mais recente: https://glm.g-truc.net/0.9.9/index.html ou https://github.com/g-truc/glm / apenas cabeçalho, incluído no diretório de dependências )
libpng-1.2.20 (opcional) (Minha versão é muito antiga; versão mais recente: https://libpng.sourceforge.io/index.html); Pode ser substituído por stb_image na maioria dos casos, exceto para exportação de imagem de mapa.)
libtiff-4.3.0 (opcional) (versão mais recente: http://www.simplesystems.org/libtiff/)
Assimp (opcional) (Veja as instruções de construção em https://github.com/assimp/assimp/blob/master/Build.md; as instruções de construção do vcpkg são provavelmente as mais fáceis.)
libtarga (fonte incluída)
Cabeçalhos STB: stb_image, stb_image_write, stb_dxt (fonte incluída)
Incluí versões simplificadas da maioria dessas bibliotecas no diretório de dependências. Removi todos os arquivos grandes que não são exigidos pelo 3DWorld, em alguns casos até exemplos/testes/documentação. Eles foram criados com a comunidade MS Visual Studio 2022 no Windows 11. Se quiser usá-los, você precisará copiar os diretórios para o diretório raiz e reconstruir todas as bibliotecas necessárias para outras versões do Windows ou Visual Studio. Se você clonar/instalar o vcpkg, ele deverá estar no mesmo nível do diretório 3DWorld.
Observe que muitas dessas dependências são antigas e podem ser substituídas por bibliotecas mais recentes. Tenho me concentrado em adicionar conteúdo e não estou muito interessado nisso. O Freeglut provavelmente deveria ser substituído por SDL e as bibliotecas de imagens por STB ou DevIL. (STB é usado como substituto, mas não suporta todas as imagens usadas.)
Se quiser construir o 3DWorld, você pode usar os projetos na pasta dependencies/ ou baixá-los e construí-los você mesmo e alterar as configurações do projeto para usá-los. Atualmente uso o destino de compilação x64 MS Visual Studio 2022 Community para 3DWorld, mas o destino de compilação win32 também funciona. O projeto MSVS 2019 3DWorld_msvs2019.vcxproj está desatualizado, mas pode funcionar. Ele deve ser compilado e executado no modo de 32 bits se você copiar as DLLs da pasta lib64/ para a raiz do repositório e fizer outras alterações nas configurações do projeto.
Se você possui Linux, você pode tentar construir usando o makefile fornecido. O arquivo README.linux deve ser útil. Consegui que o 3DWorld fosse construído e executado principalmente no Ubuntu 18.04 com gcc 7 e no Ubuntu 20.04 com gcc 9.
3DWorld usa um nome de arquivo de configuração na linha de comando. Se não for encontrado, ele lê defaults.txt e usa qualquer arquivo de configuração listado lá. Alguns desses arquivos congig incluem modelos como Sponza Atrium, Stanford Dragon, sportscar, etc. Esses arquivos são muito grandes para serem armazenados no repositório git. Tentei fazer com que o 3DWorld gerasse erros não fatais se os modelos não pudessem ser encontrados. Muitos dos modelos maiores podem ser encontrados no McGuire Computer Graphics Archive: http://casual-effects.com/data/
Empacotei os modelos 3D que são muito grandes para o repositório GitHub e os coloquei no Google Drive aqui (até a v6 agora): https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view? usp=sharing Alguns desses modelos são armazenados no formato interno do 3DWorld e não devem ser reutilizados em outros projetos. Outros vêm de sites como o Mixamo. Há também um diretório de texturas com texturas adicionais usadas na construção de interiores que podem ser mescladas com o diretório de texturas do projeto.
Requisitos do sistema:
Janelas 8/10/11; Linux ao usar o makefile com gcc.
Microsoft Visual Studio 2019 ou 2022. A versão profissional ou comunitária é necessária para suporte OpenMP. Você também pode tentar usar o gcc no Linux.
Uma geração relativamente nova de GPU Nvidia ou AMD (funciona no meu laptop com gráficos Intel, mas a 12-20 FPS)
Pelo menos 8 GB de memória de sistema para cenas maiores
Pelo menos 4 GB de memória GPU para cenas maiores; Minha GPU tem 12 GB de memória
Solução de problemas: Parece que alguns sistemas (placas AMD em particular) requerem um contexto central OpenGL. Isso pode ser selecionado adicionando "use_core_context 1" no arquivo de configuração. Isso também pode ser habilitado em scene_config/config_post.txt, que é um arquivo que se aplica após a leitura de todos os outros arquivos de configuração de nível superior. Em algumas situações (algumas placas Nvidia), o uso de um contexto principal pode ser mais lento, por isso não o habilitei por padrão.
Chaves úteis (consulte readme-keys.txt para obter mais combinações de teclas):
a,s,d,w: Movimento
q,e: Mudar de arma (modo de jogo)
'espaço': pular/disparar
'esc': Sair
'tab': Menu na tela (navegue com as teclas de seta e 'X' para alternar entre menus)
b: Ativar objetos/física/IA (para modo terrestre e modo universo)
F1: Alternar entre os modos solo/universo/terreno lado a lado
F2: Alternar modo de jogo
m: Alternar modo de tela cheia
h: Alternar movimento de voo
v: Alterar o modo da câmera (bola de cristal/órbita vs. primeira pessoa)
V: Alternar a aparência do mouse
K: Alternar modo de mapa aéreo
x: Pausa
Esquerda do mouse: Virar/Ação
Mouse à direita: Fogo
Atualmente tenho este repositório para fins educacionais sob a licença GPLv3. Alguns submódulos estão disponíveis com outras licenças compatíveis com uso comercial em minha conta GitHub. Não é uma ferramenta comercial e não estou tentando ganhar dinheiro aqui. Também não estou procurando outras pessoas para trabalhar no projeto neste estágio, embora esteja aceitando comentários, relatórios de bugs e sugestões. Talvez as coisas mudem se eu decidir fazer disso um jogo de verdade. Se você gostaria de usar algo aqui para o seu projeto, por favor me avise.
Não há documentação adicional para 3DWorld. No entanto, tenho um blog que inclui descrições dos algoritmos e muitas capturas de tela: https://3dworldgen.blogspot.com
Aqui estão algumas capturas de tela vinculadas ao meu blog:
Aqui está uma área comercial de um prédio com prateleiras. Os edifícios podem conter dezenas de milhares de objetos interativos que o jogador pode pegar e carregar. (config_heightmap.txt)
Câmeras colocadas em outras salas mostram vídeos em tempo real em monitores de segurança. (config_heightmap.txt)
Zumbis (com localização de caminhos e outros comportamentos de IA) andando e caindo em uma piscina coberta. A superfície da água tem ondulações, respingos, reflexos e refrações. (config_heightmap.txt)
Garagem com carros estacionados e tubulações de sprinklers instaladas no teto. (config_heightmap.txt)
Subsolo do edifício processual com pessoas, iluminação indireta e tubulações distribuídas ao longo do teto. (config_heightmap.txt)
Bairro residencial processual com prédios de escritórios ao fundo. Há carros e pessoas nas calçadas e dentro dos prédios. (config_heightmap.txt)
Interior do edifício processual - uma biblioteca com livros gerados processualmente. (config_heightmap.txt)
Casas e edifícios de escritórios gerados processualmente com interiores completos. (config_heightmap.txt)
Esferas reflexivas (metal), refrativas (vidro), emissivas e translúcidas em cena noturna com iluminação indireta. Desenhado em tempo real; esferas podem ser movidas interativamente. (config_white_plane.txt)
Cidade processual com edifícios, estradas, carros e pedestres. (config_heightmap.txt)
Cidade processual à noite com ponte em primeiro plano. (config_heightmap.txt)
Cidade processual inicial com pinheiros.
Cidade processual inicial.
Terreno usando ruído de distorção de domínio com simulação de erosão hidráulica antes da cidade ser colocada. (config_heightmap.txt)
Modo terreno lado a lado com rio, árvores, grama, etc. (config_t.txt)
Simulação interativa destrutiva de fogo/fumaça em tempo real envolvendo árvores, plantas e grama. (config_trees.txt)
Sistema solar do universo processual com cinturão de asteróides. (universo/config_universe.txt)
Cena do átrio Crytek Sponza com fonte de luz dinâmica de projeção de sombras e iluminação indireta. (sponza/config_sponza2.txt)
10.000 instâncias de um modelo de museu altamente detalhado colocado no modo de terreno lado a lado (mapa de altura de Puget Sound) e desenhado em tempo real com sombras e iluminação indireta. (config_museum_tt_model.txt)
Átrio Crytek Sponza com pisos reflexivos e 200 fontes de luz pontuais dinâmicas em tempo real. (sponza/config_sponza2.txt)
Muitas esferas e cubos reflexivos/refrativos com atenuação de luz baseada em densidade no pátio do prédio de escritórios. (mapx/config_mapx.txt)
Cena de San Miguel com queda de neve dinâmica e mapa de cobertura de neve traçado por caminho renderizado com um shader personalizado. (config_san_miguel.txt)
Cena de San Miguel renderizada em tempo real com iluminação indireta pré-computada traçada por caminho, mapas normais e superfícies reflexivas mapeadas em cubo. (config_san_miguel.txt)
2 milhões de pinheiros gerados processualmente + colocados (500 mil visíveis) desenhados em tempo real no modo de terreno lado a lado usando outdoors instanciados. (config_t.txt)
Empilhamento interativo de 10.000 caixas dinâmicas na cena mapx. As pilhas podem ser movidas e derrubadas, e a cena pode ser salva/recarregada/editada. (mapx/config_mapx.txt)
Planeta gerado processualmente com anéis contendo pequenos asteróides. (universo/config_universe.txt)
Cinturão de asteróides com 10.000 asteróides dinâmicos (rotativos e em órbita), 100.000 partículas de sprite pontuais e nuvens volumosas de poeira. (universo/config_universe.txt)
Modo terreno lado a lado, mostrando várias formas de vegetação gerada processualmente, incluindo grama, flores, pinheiros, palmeiras e árvores decíduas. Na verdade, são modelos poligonais que projetam sombras. (config_t.txt)
Raios de luz dinâmicos e em tempo real através de fumaça volumétrica baseada em ruído na cena Crytek Sponza. (sponza/config_sponza2.txt)
Pisos metálicos refletivos na cena Crytek Sponza, com iluminação indireta de sol + céu. (sponza/config_sponza2.txt)
Esferas reflexivas, toro e cubo desenhados em tempo real em uma cena dinâmica usando texturas de reflexão de mapa de cubo no saguão do prédio de escritórios. Os materiais são uma mistura de metais e dielétricos usando modelos baseados fisicamente. (mapx/config_mapx.txt)
Cena de museu com iluminação indireta, superfícies reflexivas e mapeamento de sombras. Este modelo é texturizado processualmente. (config_museum.txt)
Cena de casa nevada gerada pela queda de um bilhão de partículas de neve e acúmulo de neve. A neve é pré-computada, mas pode ser renderizada em tempo real. (casa/config_house_winter.txt)
Simulação e renderização de chuva, incluindo detecção de colisão para cada gota de chuva e superfícies molhadas/reflexivas. (casa/config_house.txt)
Iluminação indireta e sombras de holofotes sobrepostos aplicados a objetos dinâmicos. (mapx/config_mapx.txt)
Simulação de água com ondas usando mosaico de hardware no modo terreno lado a lado. (config_t.txt)
Cavernas de gelo voxel 3D geradas processualmente com iluminação indireta. Este terreno pode ser editado em tempo real com pincéis e disparos de armas. (config_ice_caves.txt)
Planeta gerado processualmente e desenhado inteiramente no shader de fragmento, sem texturas. Isso inclui a geração de terreno (gelo, neve, rocha, floresta, deserto, terra), água, nuvens e atmosfera. (universo/config_universe.txt)