El desarrollador de Block Game logra 400 FPS con occlusion culling por software en una GPU integrada

Software occlusion culling in Block Game

El desarrollador de Block Game logra 400 FPS con occlusion culling por software en una GPU integrada

Enikofox, desarrollador de Block Game, implementa un sistema de occlusion culling renderizado por software para su GPU integrada Radeon Vega 8. Utilizando un buffer de profundidad de 256x128 y una jerarquía de subchunks, el sistema descarta entre el 50% y el 95% de los chunks según el entorno, alcanzando más de 400 FPS en cuevas. El autor detalla las optimizaciones, como transformaciones más baratas y el uso de hilos, que hicieron viable la técnica en hardware débil.

Lo que hice es mucho más simple y no tiene nada de lo sofisticado que mencioné antes. Estoy usando FNA para crear Block Game, así que estoy atascado con tecnología más antigua y no puedo aprovechar las capacidades de la GPU.
  1. Pannoniae

    Buen artículo :) Sí, básicamente esto es un tradeoff entre potencia de CPU y GPU. Hay diferentes tipos de culling. Está lo básico como el backface culling (soportado en hardware, no renderizar triángulos que miran en dirección opuesta a ti) y el frustum culling (no renderizar objetos que tu cámara no ve). Estos se usan en casi todos los juegos.

    Para el occlusion culling es un poco más complicado porque puedes hacerlo en la CPU de dos maneras generales: o hacer raycasting de baja resolución / renderizado por software como en el artículo en la CPU y hacer culling basado en eso. Esto es una carga de trabajo adaptativa, puedes darle más hilos o potencia de CPU y escala para un mejor culling, lo que resulta en menos píxeles renderizados en la GPU.

    También puedes usar GPU culling, pero eso es más complicado de hacer y usa la GPU, lo que crea un catch-22: quieres usar GPU culling para reducir la carga de la GPU, pero las GPU integradas no manejan bien los compute shaders y el ancho de banda de memoria en general, así que hacer una pasada de culling podría eliminar cualquier ganancia de culling que puedas tener.

    Y las GPU dedicadas tienen la potencia bruta y el ancho de banda de memoria para simplemente enviar todo en tu frustum y que la mayor parte sea descartada por profundidad.

    Me pregunto si sería aún más rápido crear un grafo de conectividad en la CPU, como que cada chunk sepa si un vecino es visible y viceversa. Al renderizar, se recorre el grafo de chunks y se envían los chunks visibles, algo así como un recolector de basura primitivo para determinar la vivacidad. El culling sería peor, pero presumo que […]

  2. keyle

    Vaya, un artículo técnico en HN. ¿Qué está pasando? ¿Hemos vuelto a 2022? /s

Más de este día

2026-09-29