5 puntos por GN⁺ 2024-07-29 | 1 comentarios | Compartir por WhatsApp
  • Resumen del proyecto

    • He trabajado durante varios años en escenas y niveles 3D que se ejecutan en el navegador
    • Al principio comenzaron como demos individuales, pero poco a poco evolucionaron hacia proyectos interconectados con forma de juego
    • Utilicé técnicas procedurales y generativas para implementar ciertos elementos
  • Shaders + Texturas

    • La mayoría de las texturas están diseñadas para no tener costuras, de modo que no se noten patrones incluso en áreas grandes
    • Creé shaders personalizados en Three.JS para aportar funcionalidad adicional
  • Triplanar Mapping

    • Permite aplicar texturas a una malla sin mapas UV, lo que resulta útil para terrenos generados de forma procedural
    • Puede implementarse de forma sencilla y aplicarse a distintas mallas
    • Usé la función pow() para ajustar los pesos, mejorar la calidad y optimizar el rendimiento
  • Hex Tiling

    • Un algoritmo que oculta la repetición de texturas sin costuras
    • Lo porté como una biblioteca independiente que puede integrarse fácilmente en proyectos de Three.JS
    • Requiere mapas UV y tiene una sobrecarga de rendimiento considerable
  • Depth Pre-Pass

    • Para mejorar el rendimiento, renderiza la escena dos veces y registra la profundidad de los píxeles
    • Puede mejorar el rendimiento en más de 30% en escenas con mucho overdraw
  • Síntesis de texturas PBR impulsada por IA

    • Usa texturas generadas por IA para elevar la calidad de la escena
    • Genera mapas PBR con DeepBump y Materialize
  • Volumetric Fog/Clouds

    • Desarrolló shaders para añadir nubes o niebla a la escena
    • Usa búsquedas de ruido LoD para agregar distintas funciones
  • Meshes + Geometry

    • Investigó técnicas para generar y deformar mallas en tiempo de ejecución
    • Principalmente genera de forma procedural elementos decorativos o de fondo
  • LoD Terrain

    • Genera terreno con funciones de ruido y ajusta dinámicamente la resolución según la distancia a la cámara
  • Pipeline de procesamiento y manipulación procedural de mallas

    • Construyó un pipeline para subdividir y deformar proceduralmente mallas low-poly
    • El tratamiento de las normales requiere mucho esfuerzo
  • Trabajo futuro

    • Planea usar Constructive Solid Geometry (CSG) para fusionar o recortar mallas
    • Busca portarlo a Rust para entenderlo mejor

Resumen de GN⁺

  • Este artículo presenta varias técnicas y herramientas útiles para el desarrollo procedural de juegos
  • Técnicas de texturizado como Triplanar Mapping y Hex Tiling mejoran al mismo tiempo el rendimiento y la calidad
  • La generación de texturas con IA y los shaders de Volumetric Fog/Clouds aumentan el realismo de la escena
  • Trabajos futuros como Constructive Solid Geometry tienen gran potencial para la deformación de mallas
  • Proyectos con funciones similares incluyen ProBuilder de Unity y Houdini

1 comentarios

 
GN⁺ 2024-07-29
Comentario de Hacker News
  • En el pasado he intentado trabajar con generación procedural

    • En particular, traté de crear árboles geniales
    • Sentía que faltaba una manera fácil de conectar geometría
    • Crear dos cilindros es fácil, pero conectarlos es muy difícil
    • En teoría, CSG podría cubrir ese vacío, pero es difícil porque hay que modelarlo en 3D
    • Intenté hacer una rutina para conectar dos bucles, pero no funcionó bien
    • Más adelante me gustaría crear un juego donde un sistema modular de generación procedural funcione por sí solo
  • La buena generación de terreno no es sencilla

    • Es difícil tanto a escala mundial como a la altura de los ojos
    • Los enfoques simples generan mapas de altura irregulares que casi no se parecen a la realidad
    • Dwarf Fortress parte de un desplazamiento de punto medio básico y luego añade mucho trabajo personalizado
  • Es un gran artículo sobre técnicas procedurales en la web

  • He tenido experiencias mixtas al usar un depth pre-pass

    • Las veces que lo probé, no sentí una gran mejora de rendimiento en GPUs de escritorio de gama media a alta
    • No estoy seguro de la razón, pero podría deberse a que el rechazo temprano de Z ya ahorraba invocaciones del pixel shader
    • Por lo general renderizo las mallas opacas de adelante hacia atrás
    • Para ser justos, mis experimentos se hicieron en el contexto de una aplicación CAD/CAM, no de un juego
    • La escena tenía texturas mínimas y geometría de muy alto número de polígonos, a diferencia de un entorno de juego típico
  • Como artista 3D, me pareció un artículo muy interesante

    • Los buenos artículos sobre este tema son muy raros
    • Voy a probar Three.js