¿Qué son las texturas 3D?

31

Google me ha fallado, no pude encontrar nada informativo. Entonces, tal vez GameDev pueda :).

  • ¿Qué son las texturas 3D?
  • ¿Cuándo se usan?
  • Costos de rendimiento?
  • ¿Cómo se almacenan?

Tengo muchas ideas vagas, pero no tengo una definición 'definitiva'.

Se agradece cualquier referencia a ejemplos o tutoriales, especialmente en la representación de sistemas de partículas a través de texturas 3D.

caviar desacelerado
fuente
No estoy seguro de lo que estás preguntando es una cosa. ¿Se refiere al mapeo normal y de relieve para simular la variación de superficie en áreas "planas"?
coderanger
2
Creo que lo que quiere decir es más como GL_TEXTURE_3D, etc.
Luker
1
Además, vea esta pregunta: ¿Cómo funciona el mapeo de texturas UVW? (y sus respuestas).
George Duckett

Respuestas:

34

La textura 3D funciona como una textura regular. Pero es realmente 3D. Las texturas 2D tienen coordenadas UV, 3D tiene UVW (había que usarlas de manera propagable). Los cordones de textura son cubos unitarios (0 - 1, 0 - 1, 0 - 1).

Posible uso :

  • efectos volumétricos en juegos (fuego, humo, rayos de luz, niebla realista)
  • almacenamiento en caché de luz para iluminación global en tiempo real ( CryEngine, por ejemplo)
  • científico (MRI, tomografías computarizadas se guardan en volúmenes)

Rendimiento :
Igual que la textura normal: súper rápido (acceso de memoria más rápido en gpu). Caché para hilos y optimizado para la situación en la que los hilos cercanos (sombreadores de píxeles) buscan valores cercanos.

Puede leerse como muestreo lineal puntual o utilizado (interpolación trilineal nativa. Epo interpolación bi-lineal en textura 2D).

Se almacenan en la memoria como un conjunto de texturas 2D.

Mipmapping en textura 3D:
ingrese la descripción de la imagen aquí

Notabene
fuente
14

Las texturas 3D o 'Texturas de volumen' son una serie de texturas normales dispuestas en rodajas, como una baraja de cartas. Estos se utilizan en la representación volumétrica que a menudo toma datos del mundo real, como tomografías computarizadas y luego los manipula. En juegos y gráficos, a veces es para efectos volumétricos como el humo, donde se cambia la flexibilidad de un sistema de partículas por el costo fijo y el cálculo fácil (y fácilmente en paralelo) de una textura de volumen. Es realmente fácil en una textura de volumen encontrar los vecinos más cercanos, pero esto puede ser un problema es un sistema de partículas más tradicional compuesto por puntos sueltos.

Además, algunos objetos complejos se benefician del uso de texturas de volumen, como la hierba:

El humo de Nvidia en una caja es un gran ejemplo:

http://www.youtube.com/watch?v=9AS4xV-CK14

Además, renderizar la dispersión de luz es más fácil cuando tiene un volumen para procesar

Lutero
fuente
7

Además de las respuestas existentes, me gusta cómo las texturas 3D se pueden crear también de manera procesal (en realidad tiene más sentido que una textura de procedimiento 2D), como el ruido y los fractales que proporcionarán detalles de textura buenos y no deformados a cualquier superficie angular sin tener para seleccionar un modelo de proyección (UV, plano, cilíndrico, esférico, etc.).

En lugar de muestrear una capa de mapa de bits en el espacio 3D, obtiene un valor distinto para cada punto en el espacio 3D con un algoritmo básico, que básicamente le brinda una resolución de textura infinita y sin problemas con texturas estiradas en polígonos angulados. Estas son "texturas" 3D o más bien sombreado superficial para mí ^^

De hecho, estoy bastante cansado de toda la textura de mapa de bits en el desarrollo del juego, cuando quiero ensuciar una nave espacial, quiero aplicar algunas capas de fórmulas de ruido y no tener que pintar un mapa de bits de resolución limitada. Un viejo aficionado 3D puede soñar, ¿no?)

En este momento, pre-hornear estas dulces soluciones de superficie de película 3D de la vieja escuela en color, mapas de bits UV normales y especulares son la única diversión que obtengo y se siente molestamente limitada. La escena de demostración (como siempre) tiende a (pre) generar texturas de procedimiento para 3D en tiempo real, pero se siente difícil encontrar buenas herramientas para soportar este flujo de trabajo desde el diseño hasta el tiempo de ejecución. La mayoría de los enfoques de procedimientos de desarrollo de juegos parecen ser sobre la generación de mallas. ¿Se pregunta cuánto podría manejar la tubería del sombreador con la ayuda de un mapa de profundidad / representación diferida de algos de ruido 3D de la vieja escuela?

... en lugar de tratar de descubrir cómo mapear una imagen de textura paramétricamente en la superficie de su forma, la naturaleza volumétrica de las texturas basadas en ruido le permite simplemente evaluarlas en las ubicaciones (x, y, z) en su píxel sombreador De esta manera, está tallando efectivamente su textura de un material sólido, que a menudo es mucho más sencillo que tratar de elaborar un mapeo paramétrico razonable sin distorsiones.

Este tipo de texturas de procedimiento volumétricas basadas en ruido han sido durante mucho tiempo pilares de películas, donde los sombreadores no requieren un rendimiento en tiempo real ... todas las películas de efectos especiales de hoy en día hacen un uso intensivo de sombreadores de procedimiento basados ​​en ruido ... es altamente dependiente sobre el uso extensivo de la función de ruido dentro de sombreadores de píxeles escritos en lenguajes como el RenderMan de Pixar. Con una buena implementación de la función de ruido disponible para uso en tiempo real en las GPU, espero ver algunas de las interesantes ideas visuales de las películas incorporadas en la próxima generación de entretenimiento interactivo en el escritorio y la consola. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html

Oskar Duveborn
fuente
Muy interesante lectura! Aunque tengo problemas para visualizar lo que quieres decir en tu segundo párrafo.
Caviar desacelerado
Quizás podría hacer un diagrama. Lo que quiero decir es que, en lugar de muestrear un mapa de bits, el color (o lo que sea que esté buscando) simplemente se decide por un algoritmo de ruido. De esa manera, no se necesita interpolación entre los píxeles del mapa de bits (ya que seguramente no muestreará en una posición perfecta de 1x1 píxeles) y la resolución se volverá en teoría infinita. Es un poco como calcular el interés para una tasa de interés específica en lugar de usar una tabla de búsqueda precalculada donde hay ciertos pasos / intervalos (= resolución de mapa de bits).
Oskar Duveborn
Después de leer la totalidad del artículo referenciado. Tengo una comprensión mucho mejor, pero creo que ref. las imágenes beneficiarían a ambas partes: la insegura y la tl; dr. :)
deceleratedcaviar
0

Los patrones de textura 3D se aplican a los vóxeles de un cuerpo volumétrico de la misma manera que los patrones de textura 2D se aplican a los píxeles de un polígono 2D. Aquí hay un ejemplo de una textura volumétrica 3D en JavaScript (requiere WebGL):

http://kirox.de/test/Surface.html

presione [v], gire el cuerpo y cambie el gradiente de la textura generada con la rueda del mouse

oofante
fuente