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.
Respuestas:
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 :
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:
fuente
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
fuente
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?
fuente
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
fuente