¿Cómo funciona Megatexture?

21

He estado pensando en desarrollar un pequeño motor no solo para desarrollar pequeños juegos experimentales, sino también como base para probar varias técnicas de renderizado y cosas así. En este momento he estado pensando mucho sobre cómo manejar las texturas y me topé con la textura de megate, pero esto es algo un poco desconcertante. Se habla mucho de que es mejor que el enfoque tradicional de tener un montón de texturas y cargarlas según sea necesario, pero ¿cómo evita esto la megatexture? en lugar de cargar cada textura individualmente, pero ¿cómo ofrece eso un mejor rendimiento, y no es solo otra forma de labranza?

¿Cómo muestreamos dicha textura cuando estamos en un sombreador? ¿Transmitimos parte de ella a la memoria y luego trabajamos en ella? He visto los últimos videos de Rage y la textura se ve genial, pero es solo el resultado de grandes artistas o la tecnología entra en juego.

En resumen, cómo funciona, por qué es genial y cómo podría hacer algo similar.

Daemoniorum
fuente

Respuestas:

15

La idea básica de las mega texturas es el uso de un atlas de texturas donde empaqueta todas sus diferentes texturas en una grande y usa UV para indexar en esta imagen. Se necesitan buenas heurísticas para saber qué parte de la textura necesita transmitir desde el disco en función de lo que ve en la pantalla. Lo bueno es que puedes tener texturas completamente únicas en todo el mundo del juego y solo mantener los datos visibles en la RAM. Se necesita un buen sistema de transmisión y almacenamiento en caché para que esto sea asequible.

Recomiendo revisar el material de esta página para obtener información más detallada sobre un enfoque: http://silverspaceship.com/src/svt/

Flawe
fuente
4

Consulte la asignación de clip para la implementación de hardware SGI preexistente.

Más recientemente, Megatexture se está utilizando como nombre de pila para Texturas virtuales dispersas (SVT)

SVT renderiza una vista de cámara de pequeña resolución, señalando qué textura y mapa MIP serán necesarios. Luego, una rutina de CPU emite cargas en el sistema de disco para llevar esos fragmentos de textura / mip a la memoria (si no está en la memoria) y luego el fragmento de textura cargado se coloca en una sección de un atlas de textura grande (generalmente en fragmentos de, por ejemplo, 128x128)

A medida que se incorporan fragmentos de textura, se actualiza una textura de redireccionamiento (un mapa de página virtual) que toma las texturas requeridas de un modelo y lo redirige a la parte particular de la textura grande donde realmente se almacena.

DeanoC
fuente
Eso explica bastante. Me preguntaba, si solo se estaba transmitiendo, cómo lograron transmitir fragmentos de esa textura masiva, ya sea en un HDD o en un disco lo suficientemente rápido como para ser de alguna utilidad, el atlas intermedio responde muy bien. También ahora puedo ver por qué es más eficiente en memoria que los métodos tradicionales. Buscaré más detalles sobre SVT (el enlace de Flawe parece un buen punto de partida para eso)
Daemoniorum
1

Puede pensar en Megatexture como una especie de textura de "transmisión". Una imagen de textura masiva y completamente detallada (en pocas palabras) que se lee a medida que se necesitan secciones para mostrarla. Sin embargo, estoy seguro de que hay mucho más que eso, como LOD / mipmapping, carga y gestión de recursos entre las cosas obvias.

Wikipedia tiene un artículo al respecto.

Nick Bedford
fuente
2
He leído el artículo antes, pero es un poco de luz sobre los detalles. Es un poco difícil obtener detalles reales sobre esa técnica. Desearía que ID hiciera un papel ...
Daemoniorum