5 pontos por GN⁺ 2024-07-29 | 1 comentários | Compartilhar no WhatsApp
  • Visão geral do projeto

    • Venho trabalhando há alguns anos em cenas e fases 3D executadas no navegador
    • No início, eram demos individuais, mas aos poucos evoluíram para projetos mais parecidos com jogos interconectados
    • Uso técnicas procedurais e generativas para implementar certos elementos
  • Shaders + Textures

    • A maioria das texturas é projetada para não ter emendas, de modo que padrões não fiquem visíveis mesmo em áreas grandes
    • Crio shaders personalizados em Three.JS para fornecer funcionalidades adicionais
  • Triplanar Mapping

    • Permite aplicar texturas a meshes sem mapa UV, sendo útil para terrenos gerados proceduralmente
    • Pode ser implementado de forma simples e aplicado a vários tipos de mesh
    • Usa a função pow() para ajustar os pesos, melhorar a qualidade e otimizar o desempenho
  • Hex Tiling

    • Algoritmo que esconde a repetição de texturas sem emendas
    • Foi portado como uma biblioteca independente que pode ser integrada facilmente a projetos em Three.JS
    • Requer mapa UV e tem alto overhead de desempenho
  • Depth Pre-Pass

    • Para melhorar o desempenho, renderiza a cena duas vezes para registrar a profundidade dos pixels
    • Em cenas com muito overdraw, pode melhorar o desempenho em mais de 30%
  • AI-Powered PBR Texture Synthesis

    • Usa texturas geradas por IA para elevar a qualidade da cena
    • Usa DeepBump e Materialize para gerar mapas PBR
  • Volumetric Fog/Clouds

    • Desenvolve shaders que adicionam nuvens ou neblina à cena
    • Usa lookups de ruído com LoD para adicionar várias funcionalidades
  • Meshes + Geometry

    • Pesquisa técnicas para gerar e deformar meshes em tempo de execução
    • Gera proceduralmente principalmente elementos decorativos ou de fundo
  • LoD Terrain

    • Gera terreno com funções de ruído e ajusta dinamicamente a resolução conforme a distância da câmera
  • Procedural Mesh Processing + Manipulation Pipeline

    • Constrói um pipeline para subdividir e deformar meshes low-poly de forma procedural
    • O tratamento de normais exige muito esforço
  • Future Work

    • Planeja usar Constructive Solid Geometry (CSG) para unir ou recortar meshes
    • Pretende portar para Rust para obter um entendimento melhor

Resumo do GN⁺

  • Este artigo apresenta várias técnicas e ferramentas úteis para desenvolvimento procedural de jogos
  • Técnicas de texturização como Triplanar Mapping e Hex Tiling melhoram ao mesmo tempo desempenho e qualidade
  • Geração de texturas com IA e shaders de Volumetric Fog/Clouds aumentam o realismo da cena
  • Trabalhos futuros como Constructive Solid Geometry têm grande potencial para deformação de meshes
  • Projetos com funcionalidades semelhantes incluem o ProBuilder da Unity e o Houdini

1 comentários

 
GN⁺ 2024-07-29
Opinião do Hacker News
  • Já tive experiência tentando fazer geração procedural no passado

    • Especialmente tentando criar árvores legais
    • Senti falta de uma boa forma de conectar geometria com facilidade
    • Criar dois cilindros é fácil, mas conectá-los é muito difícil
    • Em teoria, CSG poderia preencher essa lacuna, mas é difícil porque precisa modelar em forma 3D
    • Tentei criar uma rotina para conectar dois loops, mas não funcionou bem
    • Mais tarde, quero fazer um jogo em que um sistema modular de geração procedural funcione de forma espontânea
  • Boa geração de terreno não é simples

    • É difícil tanto na escala do mundo quanto na altura dos olhos
    • Abordagens simples geram height maps irregulares que quase não se parecem com a realidade
    • Dwarf Fortress começa com um deslocamento de ponto médio básico e faz muitas personalizações em cima disso
  • É um ótimo texto sobre técnicas procedurais na web

  • Tive experiências mistas com o uso de depth prepass

    • Nas poucas vezes em que tentei, não senti grandes ganhos de desempenho em GPUs desktop de nível intermediário a avançado
    • Não tenho certeza do motivo, mas pode ser porque o early-Z rejection já economizava chamadas do pixel shader
    • Em geral, renderizo meshes opacas da frente para trás
    • Para ser justo, meus experimentos foram no contexto de aplicações CAD/CAM, não de jogos
    • As cenas tinham pouca textura e geometria com número de polígonos muito alto, ao contrário de ambientes típicos de jogos
  • Como artista 3D, achei o artigo muito interessante

    • Bons artigos sobre esse tema são muito raros
    • Pretendo experimentar o Three.js