Criar um OPEN WORLD é Difícil... (Game Engine Devlog)

Поділитися
Вставка
  • Опубліковано 1 жов 2024

КОМЕНТАРІ • 44

  • @denislemos6345
    @denislemos6345 5 місяців тому +7

    Muito bom o seu sistema, mas ainda tem espaço para muita otimização! Vou deixar abaixo uma lista de técnicas que podem ajudar o pessoal, muitas delas vc já sabe, mas ainda é válido para outros colegas.
    * Atlas Texture: Eu planejaria cada setor, prédio, interior de casas, etc... De forma que o máximo número de objetos em cena compartilhassem o mesmo material e a mesma textura. Esse pequeno planejamento que vc faz durante a modelagem, já vai salvar um número gigantesco de draw calls.
    * World Streaming: Essa técnica faz uso de bom gerenciamento de memória para carregar e descarregar as cenas/chunks inteiros conforme o player se aproxima. Interiores de casas e prédios também podem ser carregados pra memória somente quando o player estiver perto de entrar na casa, caso contrário devem ser removidos da cena para poupar processamento.
    *LOD: Level of Detail, vc já implementou esse sistema, mas uma ideia é também fazer o "lod" nos materiais/shaders para versões mais simples com menos computações, pra que computar um sistema de reflexos e iluminação super poderoso em objetos longe da câmera se pode ser usado versões de shaders muito mais simples, não é mesmo?
    * GPU instanced: Se um objeto usa uma mesma mesh e mesmo material, pode-se usar GPU Instanced Rendering, assim esses objetos todos juntos gastarão apenas um draw call para serem renderizados. Essa técnica deve ser mais complicado de fazer, eu nunca implementei isso, apenas uso isso na Unity e funciona muito bem.
    * Billbord System: Parecido com LOD Sytem, muito útil para renderizar árvores distantes, quando um objeto ou uma árvore estiver muito longe, em vez de renderizar a mesh da árvore, é renderizado apenas um painel/quad contendo uma espécie de "screenshot" do modelo 3D que fica sempre apontando para a direção da câmera. Para mais detalhes, pesquisem na Asset Store da Unity um asset chamado: Mirage - Versatile Impostor System.
    *Impostor System: O sistema de impostor é um pouco diferente do qual vc mostrou no vídeo, na minha opinião, o sistema do seu vídeo está mais parecido com "Mesh Baker System". Na Asset Store da Unity tem um sistema de impostor incrível chamado "Amplify Impostors". Ele captura "screenshots" do modelo 3D ou de grupos de modelos, ou até mesmo de uma cena/chunk inteiro de vários ângulos possíveis e salva em uma textura. Após isso ele mapeia essas texturas em uma esfera, na hora de renderizar isso é integrado com o "LOD Sytem" e quando o modelo estiver um pouco distante da câmera, o modelo é substituído por uma esfera e a renderização dessa esfera renderiza o billboard correto conforme o ângulo da câmera muda. É sensacional, vale a pena estudar esse asset para tentar implementar esse recurso na sua game engine. Esse sistema também é usado para implementar interiores fakes em casas e prédios.
    * Cube Maps: Cube maps também podem ser usados para implementar interiores fakes de casas e prédios.
    *Float Point Precision: Em game engines (a maioria das game engines do mercado) que usam floats de 32-bits, vão acontecer muitos bugs conforme o player se distancia do ponto (0,0,0) da cena devido à perda de precisão do ponto flutuante. Esses bugs vão afetar as animações, física, medidas de tempo e renderização. Um truque para evitar isso, é mover todo o cenário para a posição (0,0,0) da cena toda vez que o player se afastar muito do ponto zero, dessa forma a câmera sempre vai estar próximo do ponto zero da cena, mesmo que no jogo o player esteja em outra cidade, move-se todo o cenário de forma que o player/câmera fique sempre perto do ponto zero. Quem estiver jogando o jogo não vai perceber isso, acho que todos os jogos de mundo aberto usam essa técnica. A distância máxima do ponto zero da cena vai variar de jogo pra jogo, a única forma de saber é testando em seu projeto.
    *Smooth Edges: Ao fazer o Bake dos normal maps, se toda a sua mesh estiver marcada como shade smooth em vez de shade flat, o tamanho da textura vai ser muito maior devido à forma como é feito a compressão das texturas, pois o shade smooth vai causar uma interpolação suave no normal map na região das arestas da mesh, essa suavização na textura gera uma diversidade maior de "cores" e consequentemente um número muito maior de pixeis precisam ser salvos no arquivo de imagem, já nas regiões flat da mesh, muitos pixels ficam com o mesmo valor de cor do seu vizinho, dessa forma a compressão vai ter um resultado bem mais eficiente. Faça o teste vc mesmo no Blender, defina toda a sua mesh como smooth e faça o bake do normal map. Agora defina a mesh como flat e faça o bake do normal map novamente e salve cada bake em PNGs diferentes. Uma smooth mesh complexa vai gerar um normal map muito mais pesado do que uma flat mesh. Uma dica é selecionar o seu objeto no Blender e definir o "shade" como "smooth", depois adicionar o modificar "Edge Split" e selecionar um ângulo para que as edges sejam definidas como "sharp". Na maioria dos modelos 3D, uma aresta com um ângulo maior do que 30-35 graus não vai fazer muita diferença na renderização se ela estiver marcada como smooth, pois acima disso já é considerada "hard edge", então não tem necessidade de desperdiçar memória e espaço em disco. Empresas grandes de jogos talvez não vão contratar um modelador caso ele não saiba disso, em projetos grandes, até mesmo esse detalhe faz diferença.
    *ECS: Entity Component System, eu não sei explicar em poucas palavras, mas esse sistema/padrão de arquitetura de software é uma forma muito eficiente de alocar os dados e sistemas do seu jogo na memória, se bem feito, vc pode ganhar centenas de fps se comparado com o modo de componentes tradicional que a maioria da game engines usam. Nem todos os jogos e game engines vão se beneficiar desse sistema. No site "Pikuma" tem um excelente curso que ensina a implementar um "ECS" do zero, o nome do curso é "C++ 2D Game Engine Programming", a implementação é feita em uma simples engine 2D, mas a ideia é a mesma para o 3D, eu comprei o curso e recomendo.
    Se eu lembrar de mais técnicas, eu edito aqui!

  • @GryphusStudio
    @GryphusStudio 6 місяців тому +12

    Eu coloco Emptys que vão adicionando regiões a medida que nos aproximamos , pra mim funciona bem 👍🏻, abraço tô acompanhando seu projeto

  • @FabioAnastacioSilva
    @FabioAnastacioSilva 6 місяців тому +5

    Se o Guilherme falou que é difícil, é porque o trem é de outro mundo kkk

  • @stargamer6857
    @stargamer6857 5 місяців тому +1

    OLá meu amigo falei com voce sobre o curso de Godot e ninguem me respondeu sobre os conteudos do curso ministrado. tipo o que de fato vou aprender no 3D o que é foco maior, tipo tem projetos de jogos em terceira pessoa e primeira pessoa, qual é o estilo do projeto aula, FPS ou terror, quais mecanimos vou aprende cara o seu video não da base nenhuma de didatica do que realmente é dado no curso de Godot. voce monstrou varios games mas o que de fato é ensinado no seu curso de godot? Porque vou consumir mas 3D pois tenho um projeto de Godot 3D na vipe do silent hill e resident evil. terror, com trocas de animação no animationTree. itens pra pegar na cena, quero aprender isso, tem no seu curso. porque pagar 200 conto pra aprender basico é brabo amigo. pago até 500 conto se for o caso mas quero aprender: tudo de animação 3D com animationPlayer e tree, quero aprender criar itens como pegar armas e usar no inventarios, criar menu com cena animada que já vi que ensina isso, particulas de sangue e da armas, explosão, cutscenes antes da fase, e start e loading game, Porque to com projeto indie ja fiz bastante coisas mas estou estagnado no animationTree e código pra esta bagaça. além de cutscenes antes e splashScreen pra logo da empresa. quero aprender pra criar algo show. Mas esta dificil achar um curso que presta só tem 2D aqui no tube. e quando acha um curso tudo bugado e sem dados.

  • @Ddiidev
    @Ddiidev 6 місяців тому +7

    Conteúdo delicinha de ver, nem sou gamer dev, mas gosto muito de ver o percurso.

  • @mjfgame764
    @mjfgame764 5 місяців тому +1

    professoooooooor finalmente depois de 2 anos e meio consegui publicar o Nobody na steam

  • @kamagashyperry5757
    @kamagashyperry5757 5 місяців тому +3

    incrível! so não intendo porque essa bisseção por jogos de mundo aberto, eu acho que todo desenvolvedor pequeno deveria se concentrar em jogos lineares e aprimorá-los ao máximo, ao ponto de confundir o jogador se e mundo aberto ou não, porque vejo desenvolvedoras boas perdendo tempo desenvolvendo coisas muito grandiosas, num esforço alucinante, sendo que podiam fazer um jogo super otimizado, lindo graficamente, e bem interessante da queles que prende o jogador, não e uma critica so uma observação, parabéns pelo trabalho, tomara que vocês consigam o que almejam!

  • @evandr000
    @evandr000 6 місяців тому +3

    Agora uma pergunta sincera, seria uma boa abordagem da engine de criar previamente essas malhas e texturas e só ir tirando a parte a ser realmente renderizada conforme foi passando pelos chunks? Tipo, faz um objeto inteiro com toda a malha e textura simplificada e meio que recorta aquilo que precisar ter mais detalhes e esse sim ir carregando em tempo de execução. Não sei se expliquei direito, mas parece uma abordagem um pouco mais leve do que ir gerando conforme a troca de chunks

    • @UnidayStudio
      @UnidayStudio  6 місяців тому +1

      Sim. É basicamente isso que o GTA e vários games do mesmo porte fazem.

  • @fernandosouzaesilva4055
    @fernandosouzaesilva4055 6 місяців тому +2

    Uma engine brasuca, qual a linguagem de programação?

  • @gamerx8145
    @gamerx8145 6 місяців тому +2

    Muito maneiro mano! Tmbm to me aventurando em mundo aberto no BLender mesmo, mas to indo devagar. ksksksk Realmente fica bem pesado.

  • @EwertonLuizUtrago
    @EwertonLuizUtrago 6 місяців тому +2

    Seria similar o Mesh.CombineMeshes da Unity? O problema é quando o mesh é grande e tem uma pontinha na camera do player, devido a isso todo mesh vai ser processado, mesmo se boa parte dele estivar fora da camera. Pelo menos é assim na Unity.

  • @moonaddict
    @moonaddict 6 місяців тому +2

    mapeamento uv já é complicado com toda uma interface ao seu dispor, tudo desanda quando você decide fazer na unha.

  • @GuiLuiz-VozEViolao
    @GuiLuiz-VozEViolao 5 місяців тому

    Parabéns pelo trabalho na engine, Gui!
    PS: Adoro esses vídeos mais técnicos, traz mais deles pra gente

  • @paulocezar7395
    @paulocezar7395 5 місяців тому +1

    Sei que é um negócio mt avançado, mas pretende adicionar um sistema de auto lod parecido com o nanite da unreal? Acho que ajudaria bastante nessa questão dos LODS no mundo aberto

  • @DanielGamer99
    @DanielGamer99 6 місяців тому +2

    Uma dúvida, a interface da Cave Engine é feita com imgui? Parece muito

  • @joao98_
    @joao98_ 4 місяці тому

    Há alguns meses vazou os códigos da rage e do GTAV, você chegou a dar uma olhada? Tentei ver, mas tava complexo demais pra mim kkk

  • @Tururuiy
    @Tururuiy 5 місяців тому

    Alguém pode me ajudar, tô com dificuldade em utilizar a API no blender, eu entendo mas travei no curso de python do Gui pq n entendi como importar pq n achei a pasta😅 com as lógicas pra importar pro blender 3.6

  • @highwizard6405
    @highwizard6405 6 місяців тому +2

    acho mto massa, faz mais

  • @evandr000
    @evandr000 6 місяців тому +2

    Gosto bastante desse tipo de vídeo ^^

  • @eduardokern202
    @eduardokern202 6 місяців тому +2

    Qualquer informação técnica é bem agregada!

  • @yurimanoel1150
    @yurimanoel1150 6 місяців тому +1

    cara já ovil falar de Transtorno Afetivo Sazonal, você esta calçando um pouco disso em min com esse post proses, claro que e bem pouco e não e nada demais, mas passa uma vibe meio ruim essa iluminação com essa neblina ai, acho que tem maneiras melhores de passar uma vibe fim do mundo sem essa neblina zoada ai, azul ou verde são bem melhores pra passar uma vibe decadente e taus

  •  6 місяців тому +1

    Muito bom o vídeo, hj o padrão da indústria é levar toda a malha e o grafo da scene para dentro da GPU, dessa forma vc consegue usar algoritmos de ordenação e oclusão com um compute shader. Se vc utilizar apis de renderização mais nova como Vulkan ou D3D12 daria para paralelizar todo esse processo, e uma dica de otimização é utilizar o conceito de streaming. Vc quebra a sua cena em várias partes(chunks) como vc fez no vídeo, e guarda esses chunks no disco, qnd a engine precisar desse chunk ela então vai fazer o upload desse chunk direto para GPU.

  • @Metal4gamer
    @Metal4gamer 6 місяців тому +2

    Maneiro isso ai top de mais.

  • @vkRenan
    @vkRenan 6 місяців тому +2

    Slk, que loucura.

  • @elmatador623
    @elmatador623 6 місяців тому +1

    faz a unity para mobile

    • @UnidayStudio
      @UnidayStudio  6 місяців тому

      Não

    • @elmatador623
      @elmatador623 6 місяців тому

      @@UnidayStudio eu poço ti pagar queres quanto 1 milhão

  • @luanab2479
    @luanab2479 6 місяців тому +1

    pow seus videos sao fodas eu to com um projeto de montar um battle royale e estou acompanhando seus videos e estudando pra poder montar ele . ainda ta nos primeiros passos desse projeto

  • @Tururuiy
    @Tururuiy 5 місяців тому

    Guilherme quando você terminar o pixel nogth fall pod atualizar seus curso de BGE

    • @UnidayStudio
      @UnidayStudio  5 місяців тому +1

      Opa, obrigado pelos 8 comentários iguais em vários vídeos. Fica tranquilo que eu vejo todos! 😁 Os cursos do upbge 0.2.5 já estão atualizados, o que mais voces gostaria de ver neles?

  • @gustavooliveira8415
    @gustavooliveira8415 5 місяців тому

    Fala irmão, blz? me tira uma dúvida pfvr, você trabalha com remodelagem pra mapa do gta san andreas? tô com um projeto pra um servidor de gta sa mta, caso não trabalhe, conhece alguém que manje pra indicar? valeeu!

  • @saulosouza4453
    @saulosouza4453 6 місяців тому +1

    Faltou um offset entre o player e o cubo para configurar uma distância maior

    • @UnidayStudio
      @UnidayStudio  6 місяців тому

      não entendi...

    • @saulosouza4453
      @saulosouza4453 6 місяців тому

      @@UnidayStudio a malha branca aparece quando vc SAI DA MARCACAO que vc cria para otimizar a renderização. Seria bom ter mais um parâmetro (offset) pra aumentar ou diminuir essa distância da marcação. Exemplo: se vc quer que a malha branca seja renderizada com uma distância maior, vc não pode aumentar a marcação, pois acaba englobando mais objetos. O ideal seria esse offset.

    • @Candefral
      @Candefral 6 місяців тому +2

      @@saulosouza4453 Pelo que eu entendi ele fez isso usando a esfera que ele mostrou em 5:18, que pode ser redimensionada sem aumentar a quantidade de objetos englobados.

    • @saulosouza4453
      @saulosouza4453 6 місяців тому +1

      @@Candefral correto. Era isso e eu não percebi rs

  • @IsabellaFrancoo
    @IsabellaFrancoo 6 місяців тому +2

    Voce ensina essas tecnicas no curso de unreal?

    • @UnidayStudio
      @UnidayStudio  6 місяців тому +2

      Essas técnicas são incrivelmente avançadas, eu acredito que você vai usar ou compreender esse tipo de coisa só com 10 anos de experiência na área, especificamente em Game Engine Development, e com um ensino superior. Pelo menos esse é o meu caso. Rsrsrs