En esta tercera parte, donde echamos un vistazo más en profundidad a la creación de juegos en 3D, nos centraremos en lo que puede suceder con el mundo 3D después de que se realiza el proceso de esquina y se rasteriza la escena. La estructuración es una de las etapas más importantes en el renderizado, aunque los colores de una cuadrícula bidimensional de bloques de colores se calculan y cambian, todo lo que sucede.

La mayoría de los efectos visuales que se ven en los juegos de hoy dependen del uso inteligente de las texturas; los juegos sin ellos serían aburridos y sin vida. ¡Así que vayamos a sumergirnos y veamos cómo funcionan!

Como siempre, si no está listo para sumergirse profundamente en los tejidos, no entre en pánico, puede comenzar Representación de juegos 3D 101. Pero una vez que haya superado los conceptos básicos, siga leyendo para conocer nuestro próximo vistazo al mundo de los gráficos 3D.

Comencemos simple

Elija los juegos 3D más vendidos de los últimos 12 meses y todos compartirán una cosa en común: mapas de textura (o solo texturas). Este es un término muy común, la mayoría de las personas crearán la misma imagen al pensar en texturas: un simple cuadrado plano o rectángulo que contiene una imagen de una superficie (hierba, piedra, metal, ropa, cara, etc.).

Pero cuando se usa en múltiples capas y se combina usando aritmética compleja, el uso de estas imágenes básicas en la escena 3D puede producir imágenes sorprendentemente realistas. Para ver cómo es posible, saltémoslos por completo y veamos cómo se verían los objetos en el mundo 3D sin ellos.




Como vimos en artículos anteriores, el mundo 3D está formado por esquinas: formas simples que se mueven y luego se colorea. Estos se utilizan luego para hacer primitivas, que luego se comprimen en una cuadrícula de píxeles 2D. Como no usaremos texturas, necesitamos colorear estos píxeles.




Un método que se puede utilizar se llama sombreado planoimplica tomar el color del primer vértice del material primitivo y luego usar ese color para todos los píxeles cubiertos por la forma en el ráster. Se parece a esto:




Obviamente, esta no es una tetera realista, al menos el color de la superficie es incorrecto. Los colores saltan de un nivel a otro, no hay una transición suave. Una solución a este problema podría ser usar algo llamado Sombreado de Gouraud.




Este es un proceso que toma los colores de las esquinas y calcula cómo cambia el color a lo largo de la superficie del triángulo. Matemáticas utilizadas Interpolación linearSi bien esto puede parecer elegante, en realidad, si el color de un lado primitivo es rojo 0.2 y el otro lado 0.8 es rojo, significa que el medio de la forma tiene un color entre 0.2 y 0.8 (es decir, 0.5).

Es relativamente sencillo de hacer y el principal beneficio es la velocidad. Muchos de los primeros juegos en 3D usaban esta técnica porque el hardware que hacía los cálculos estaba limitado por lo que podían hacer.




Pero incluso esto tiene sus problemas, porque si una luz apunta hacia el centro mismo de un triángulo, es posible que sus esquinas no puedan capturarlo correctamente. Esto significa que los reflejos causados ​​por la luz pueden pasarse por alto por completo.




Si bien los sombreados Flat y Gouraud están en el arsenal de renderizado, los ejemplos anteriores son candidatos claros para el uso de texturas para mejorarlos. Y para comprender mejor lo que sucede cuando se aplica una textura a una superficie, regresaremos en el tiempo ... a 1996.

Un breve juego y la historia de la GPU

Quake es un juego histórico lanzado hace 23 años software de identificación. Si bien no fue el primer juego en usar polígonos y texturas 3D para renderizar el entorno, fue uno de los primeros juegos en usarlos todos de manera tan efectiva.

Otra cosa que hizo fue mostrar lo que se puede hacer con OpenGL (la API de gráficos aún estaba en su primera revisión) y también ayudó en gran medida a vender el primer producto de tarjeta gráfica. Verite comentario ve 3Dfx Vudu.

Comparado con los estándares actuales, Voodoo era extremadamente simple: sin soporte de gráficos 2D, sin renderizado de esquinas y solo los conceptos básicos de renderizado de píxeles. Sin embargo, fue una belleza:

Tenía un chip completo (TMU) para tomar un píxel de una textura, y luego otro chip (FBI) para mezclarlo en un píxel del ráster. Podría tomar algunas acciones adicionales como crear efectos de niebla o transparencia, pero eso fue casi todo.

Si echamos un vistazo a la arquitectura detrás del diseño y el funcionamiento de la tarjeta gráfica, podemos ver cómo funcionan estos procesos.

El chip del FBI toma dos valores de color y los combina; uno de estos puede ser un valor de una textura. El proceso de recopilación es bastante simple matemáticamente, pero difiere ligeramente entre qué se está mezclando exactamente y qué API se usa para ejecutar las instrucciones.

Lo que miramos Ofertas de Direct3D En términos de funciones de combinación y operaciones de combinación, podemos ver que cada píxel se multiplica primero por un número entre 0.0 y 1.0. Esto determina cuánto del color del píxel afectará la apariencia final. Los dos colores de píxeles establecidos se agregan, restan o duplican; En algunas funciones, la operación es siempre una expresión lógica en la que se selecciona algo como el píxel más brillante.

La imagen de arriba es un ejemplo de cómo funciona esto en la práctica; factor de píxel utilizado para el píxel izquierdo alfa valor. Este numero es transparente píxeles.

El resto de los pasos implican aplicar un valor de niebla (tomado de una tabla de números creada por el programador, luego haciendo la misma combinación matemática); realizar algunas comprobaciones y ajustes de visibilidad y transparencia; antes de finalmente escribir el color del píxel en la memoria de la tarjeta gráfica.

¿Por qué lección de historia? A pesar de la relativa simplicidad del diseño (especialmente en comparación con los gigantes modernos), el proceso explica los conceptos básicos del texturizado: obtén algunos valores de color y mézclalos para que los modelos y entornos vean cómo debería ser en una situación determinada.

Los juegos de hoy todavía hacen todo esto, la única diferencia es la cantidad de textura utilizada y la complejidad de los cálculos de mezcla. Juntos simulan los efectos visuales que se ven en las películas o cómo la luz interactúa con diferentes materiales y superficies.

Los fundamentos del texturizado

Para nosotros, una textura es una imagen plana 2D aplicada a los polígonos que componen las estructuras 3D en el marco mostrado. Para una computadora, no es más que un pequeño bloque de memoria en forma de matriz 2D. Cada entrada en la matriz representa un valor de color para uno de los píxeles en la imagen de textura (más conocido) relleno de texto - píxeles de textura).

Cada vértice de un polígono tiene 2 coordenadas (generalmente sen, v) le dice qué píxel de la textura está asociado a sí mismo. Los vértices en sí tienen 3 conjuntos de coordenadas (X ve Z) y el proceso de adjuntar texto a las esquinas. Mapeado de texturas.

Para ver esto en acción, volvamos a una herramienta que hemos utilizado varias veces en esta serie de artículos: Representación en tiempo real de WebGL herramienta. Por ahora, z coordine alrededor de las esquinas y mantenga todo en un plano plano.

De izquierda a derecha, tenemos la textura. sen, v Coordenadas mapeadas directamente a las esquinas de los vértices x, y coordenadas. Luego las esquinas superiores y sus coordenadas han aumentado, pero la textura se estira hacia arriba ya que la textura todavía se asigna directamente a ellos. En la imagen de la derecha, esta vez cambiando la textura: u los valores han aumentado, pero esto hace que el tejido se aplaste y luego vuelva a aparecer.

Porque aunque la textura ahora es efectivamente más larga, cuanto mayor sea u su valor debe encajar en el primitivo - principalmente la textura se repite parcialmente. Esta es una forma de hacer algo que se ve en muchos juegos 3D: trepetir. Se pueden encontrar ejemplos comunes de esto en escenas con paisajes rocosos o cubiertos de hierba o paredes de ladrillo.

Ahora preparemos el escenario para que sea más primitivo y volveremos a poner en juego la profundidad. Lo que tenemos a continuación es una vista de paisaje clásica, pero la textura de la caja se copia y se repite entre los primitivos.

Ahora bien, esta textura de pecho pesa 66 kilogramos en formato gif original y tiene una resolución de 256 x 256 píxeles. La resolución original de la parte del marco cubierta por las texturas de la caja es 1900 x 680, por lo que solo en términos de 'área' de píxeles, esta zona solo debería poder mostrar 20 texturas de caja.

Obviamente tenemos más de 20 caminos, tantas texturas de cajas en el fondo muy Es más pequeño que 256 x 256 píxeles. De hecho lo son y pasaron por un proceso reducción de tejido (¡sí, esa es una palabra!). Intentemos de nuevo ahora, pero esta vez se acercó a uno de los cofres.

Tenga en cuenta que la textura tiene un tamaño de solo 256 x 256 píxeles, pero aquí podemos ver que una textura tiene más de la mitad del ancho de la imagen de 1900 píxeles de ancho. Pasó por algo llamado textura agrandamiento de tejido.

Estos dos procesos de textura siempre ocurren en juegos 3D, ya que todas las texturas aplicadas a primitivas necesitan escalarse junto con polígonos a medida que la cámara se mueve alrededor de la escena o cuando los modelos se acercan y se alejan. Matemáticamente, esto no es un gran problema, de hecho, incluso los chips gráficos integrados más simples parpadean en tal trabajo. Sin embargo, la reducción y el agrandamiento de tejidos plantean de alguna manera nuevos problemas que deben resolverse.

Ingresa mini texturas

El primer problema que se debe solucionar es el de las texturas distantes. Si miramos hacia atrás en la primera imagen del paisaje del cofre, las que están en el horizonte tienen solo unos pocos píxeles de tamaño. Intentar comprimir una imagen de 256 x 256 píxeles en un área tan pequeña no tiene sentido por dos razones.

Primero, una textura más pequeña ocupa menos espacio de memoria en la tarjeta gráfica, lo cual es útil para tratar de caber en una pequeña cantidad de caché. Esto significa que es menos probable que se elimine de la caché, y el uso repetido de este tejido obtendrá el beneficio de rendimiento completo de los datos que se encuentran actualmente en la memoria cercana. La segunda razón por la que venimos por un momento es que está relacionada con el mismo problema para las texturas ampliadas.

Una solución común para el uso de tejidos grandes triturados por pequeños primitivos, Pareo. Estas son versiones reducidas de la textura original; El motor del juego en sí puede ser construido (usando el comando API correspondiente para hacerlo) o prefabricado por diseñadores de juegos. Cada nivel de textura de mapa mip tiene la mitad de las dimensiones lineales del anterior.

Para la textura de la caja, sucede algo: 256 x 256 → 128 x 128 → 64 x 64 → 32 x 32 → 16 x 16 → 8 x 8 → 4 x 4 → 2 x 2 → 1 x 1.

Los mapas mip están todos empaquetados juntos, por lo que la textura sigue siendo el mismo nombre de archivo, pero ahora más grande. La textura está empaquetada de tal manera que sen, v las coordenadas no solo determinan qué texel se aplicará a un píxel en el marco, sino también desde qué mapa mip. Luego, los programadores codifican el renderizador para determinar el mapa mip que se utilizará en función del valor de profundidad del píxel cuadrado, es decir, si es demasiado alto, el píxel está lejos, por lo que se puede usar un pequeño mapa mip.

Los lectores perspicaces pueden haber visto la desventaja de los mapas MIP, y esto tiene el costo de que las texturas sean más grandes. La textura de la caja original tiene un tamaño de 256 x 256 píxeles, pero como puede ver en la imagen de arriba, la textura con mipmaps ahora es de 384 x 256. Sí, hay mucho espacio libre, pero el aumento total de al menos uno de los tamaños de tejido es del 50%, independientemente de cómo empaque en texturas más pequeñas.

Sin embargo, esto solo se aplica a los mapas MIP prefabricados; Si el motor del juego está programado para reproducirlos correctamente, el aumento nunca podrá ser superior al 33% del tamaño de la textura original. Por lo tanto, obtiene beneficios de rendimiento y mejoras visuales para un aumento relativamente pequeño de la memoria en los mapas MIP de textura.

A continuación se muestra una comparación de activación / desactivación de mapas MIP de textura:

En el lado izquierdo de la imagen, las texturas de la caja se usan 'tal cual', lo que da como resultado un aspecto granulado y el llamado patrones de muaré lejos. Mientras que a la derecha, el uso de mipmaps da como resultado una transición mucho más suave a través del paisaje donde la textura de la caja cambia a un color uniforme en el horizonte.

Sin embargo, ¿alguien quiere texturas borrosas que estropeen el fondo de su juego favorito?

Bilineer, de tres líneas, anisotrópico: todo es griego para mí

El proceso de seleccionar un píxel de una textura para aplicarlo a un píxel en un marco. muestreo de texturay en un mundo perfecto, su tamaño, ubicación, dirección, etc. Independientemente, sería una textura que se ajusta completamente a su primitivo. En otras palabras, el muestreo de texturas no es más que un proceso de mapeo de píxel a píxel recto de 1 por 1.

Dado que este no es el caso, el muestreo de texturas debe tener en cuenta varios factores:

  • ¿Se ha agrandado o reducido el tejido?
  • ¿La textura es original o un mapa mip?
  • ¿En qué ángulo se muestra la textura?

Analicémoslos uno por uno. La primera es bastante clara: si la textura se agranda, habrá más texto cubriendo demasiado el píxel en la primitiva; Con el encogimiento será al revés, cada texel ahora debería cubrir más de un píxel. Esto es un pequeño problema.

En segundo lugar, deja las texturas en ángulo, ya que los mapas MIP se utilizan para sortear el problema del muestreo de texturas con primitivas distantes. Y sí, eso también es un problema. ¿Por qué? Porque todas las texturas se crean con 'cara abierta' para una vista o son todas matemáticas: la normal de la superficie de la textura es la misma que la normal de la superficie que se muestra en la textura.

Por lo tanto, tener muy poca o demasiada textura y tener textura en ángulo, filtrado de texturas. Si no usa este proceso, esto es lo que obtiene:

Aquí, hemos reemplazado la textura de la caja con una textura de la letra R para mostrar más claramente cuánto desorden puede causar sin el filtrado de texturas.

Las API de gráficos como Direct3D, OpenGL y Vulkan ofrecen los mismos tipos de filtrado de rango, pero usan nombres diferentes para ellos. De hecho, todo es así:

  • Muestreo del punto más cercano
  • Filtrado lineal de texturas
  • Filtrado de texturas anisotrópicas

A todas las intenciones y propósitos, muestreo del punto más cercano si no filtra, es porque es el píxel más cercano al píxel, lo que requiere que se muestreen las texturas (es decir, que se copien de la memoria) y luego se mezclen con el color original del píxel.

Aquí viene el filtrado lineal al rescate. Necesario sen, v Las coordenadas de texel se envían al hardware para el muestreo, pero en lugar de obtener el texel más cercano a esas coordenadas, el muestreador cuatro monopolio Estos están directamente arriba, abajo, a la izquierda y a la derecha del seleccionado usando el muestreo del punto más cercano.

Estos 4 tejidos se mezclan luego usando una fórmula ponderada. Por ejemplo, en Vulkan la fórmula es:

T "Color", f Para el escurrido y del 1 al 4 se muestran cuatro textiles. Valores alfa ve beta qué tan lejos del punto definido por sen, v las coordenadas provienen de la mitad del tejido.

Afortunadamente, cualquier persona involucrada en juegos 3D, ya sea jugando o creando juegos, ocurre automáticamente en este chip de procesamiento de gráficos. De hecho, el chip TMU en 3dfx Voodoo hizo esto: muestreó 4 singulares y luego los barajó. Direct3D llama a esto de manera extraña filtrado bilirear, Sin embargo, desde la época del chip TMU de Quake y Voodoo, las tarjetas gráficas solo han podido realizar el filtrado bilirear en un ciclo de reloj (si la textura encaja cómodamente en la memoria cercana, por supuesto).

El filtrado lineal se puede usar junto con mipmaps, y si realmente desea ser elegante con su filtrado, puede tomar 4 textos de una textura, luego otros 4 del siguiente nivel de mipmap y luego combinarlos. ¿Y el nombre de Direct3D para eso? trilineal filtración. Qué tri sobre este proceso? Tu suposición es tan buena como la nuestra ...

El último método de filtrado mencionado se llama anizotrop. En realidad, se trata de un ajuste al proceso realizado en filtrado bilireal o trilineal. Inicialmente grado de anisotropía la superficie primitiva (y sorprendentemente complejo) - este valor cambia la relación de aspecto de la primitiva debido a su orientación:

La imagen de arriba muestra el mismo principal cuadrado con lados de igual longitud; Pero a medida que se aleja de nuestra perspectiva, parece un rectángulo cuadrado y su ancho aumenta por encima de su altura. Entonces, la primitiva de la derecha tiene una mayor anisotropía que la de la izquierda (y en el caso del cuadrado, el grado es exactamente cero).

La mayoría de los juegos 3D actuales te permiten habilitar el filtrado anisotrópico y luego ajustar su nivel (1x a 16x), pero ¿qué cambia realmente? La configuración controla el número máximo de muestras de texel adicionales tomadas por muestra lineal original. Por ejemplo, supongamos que el juego está configurado para utilizar un filtrado bilirear anisotrópico 8x. Esto significa que en lugar de solo tomar 4 valores de texto, devolverá 32 valores.

Lo claro que el uso de filtrado anisotrópico puede notar:

Simplemente desplácese un poco hacia arriba y compare el muestreo del punto más cercano para obtener un filtrado trilineal anisotrópico máximo de 16x. ¡Tan suave, casi delicioso!

Pero tiene que haber un precio que pagar por todo este hermoso sabor de textura de mantequilla, y definitivamente es rendimiento: todo filtrado trilineal anisotrópico máximo traerá 128 muestras de una textura por cada píxel renderizado. Incluso para lo mejor de las últimas GPU, esto no se puede hacer en un solo ciclo de reloj.

Si obtenemos algo como AMD Radeon RX 5700 XTCada una de las unidades de textura dentro del procesador puede apagar 32 direcciones de texel en un ciclo de reloj, luego cargar 32 texels de la memoria (cada uno de 32 bits de tamaño) en otro ciclo de reloj, y luego poner 4 de ellos juntos mark mark. Por lo tanto, se ha mezclado para 128 muestras de texel que requieren ciclos de al menos 16 horas.

Ahora la frecuencia de reloj base del 5700 XT es 1605 MHz, por lo que dieciséis bucles solo toman 10 nanosaniye. Esto es solo para cada píxel en un cuadro de 4K uno la unidad de textura solo tardaría 70 milisegundos. De acuerdo, ¡quizás el rendimiento no sea tan importante!

Incluso en 1996, los gustos de 3Dfx Voodoo eran bastante elegantes cuando se trata de manejar texturas. Se podía dar un máximo de 1 texel filtrado bilirear por ciclo de reloj, lo que significaba que se podían cortar 50 millones de texs cada segundo mientras el chip TMU oscilaba a 50 MHz. Un juego que se ejecuta a 800 x 600 y 30 fps requiere solo 14 millones de texto filtrado en bilirear por segundo.

Sin embargo, todo esto supone que las texturas están en la memoria cercana y que solo se asigna un texto a cada píxel. Hace veinte años, la idea de tener que aplicar múltiples texturas a un principio era casi completamente ajena, pero ahora es un lugar común. Veamos por qué ocurrió este cambio.

Iluminando el camino hacia imágenes magníficas

Para ayudar a comprender cómo el tejido se ha vuelto tan importante, eche un vistazo a esta escena de Quake:

Esta imagen oscura era la naturaleza de este juego, pero puedes ver que la oscuridad no es la misma en todas partes: los parches de las paredes y el piso son más brillantes que los demás para dar la sensación de iluminación general en esa área.

Las primitivas que componen los lados y el piso tienen la misma textura aplicada, pero hay una segunda textura llamada. mapa de luzse mezclan con valores de texel antes de que coincidan con píxeles cuadrados. Durante los días de Quake, los mapas de luz fueron precalculados y hechos por el motor del juego y se usaron para crear niveles de luz estáticos y dinámicos.

La ventaja de usarlos fue que se realizaron cálculos de iluminación complejos en texturas en lugar de esquinas, mejorando específicamente la apariencia de una escena y costando poco rendimiento. Obviamente, no es perfecto: como puede ver en el suelo, el límite entre las áreas iluminadas y las que están en la sombra es muy claro.

En muchos sentidos, un mapa de luz es solo otra textura (recuerde que no son más que matrices de datos 2D), por lo que lo que estamos viendo aquí es el uso temprano de lo que se conoce como. multi tejido. Como sugiere el nombre, es un proceso en el que se aplican dos o más texturas a un principio. El uso de mapas ligeros en Quake fue una solución para superar las limitaciones del sombreado de Gouraud, pero a medida que aumentaron las capacidades de las tarjetas gráficas, también lo hicieron las aplicaciones de varias unidades.

3Dfx Voodoo, como otras tarjetas de su época, se limitaba a lo que podía hacer en un render. pasar. Esta es esencialmente una secuencia de renderizado completa: desde la manipulación de las esquinas hasta el raspado del fotograma y luego el cambio de píxeles a un búfer de fotograma final. Hace veinte años, los juegos casi siempre tenían un pase.

Esto se debió a que costó mucho en términos de rendimiento, ya que desea procesar las esquinas dos veces, solo aplique más textura. Unos años después de Voodoo, tuvimos que esperar hasta que estuviera disponible para que pudiéramos hacer que las tarjetas gráficas ATI Radeon y Nvidia GeForce 2 se dibujen múltiples en una sola pasada de renderizado.

Estas GPU tenían más de una unidad de textura por segmento de representación de píxeles (en otras palabras, tubería), por lo que traer un texel filtrado bilirear de dos texturas separadas fue pan comido. Esto hizo que el mapeo de luz fuera aún más popular y cambió los valores de luz según los cambios en el entorno del juego, manteniendo los juegos completamente dinámicos.

Pero hay mucho más que se puede hacer con múltiples texturas, así que echemos un vistazo.

Es normal multiplicar la altura

En esta serie de artículos sobre renderizado 3D, no hemos cubierto cómo el papel de la GPU realmente encaja en todo el punto (¡lo haremos, todavía no!). Pero si vuelves Episodio 1y observe todo el trabajo complejo en el procesamiento de esquinas, podría pensar que esta es la parte más difícil de manejar para el procesador de gráficos de toda la matriz.

Ha pasado mucho tiempo y los programadores de juegos han hecho todo lo posible para reducir esta carga de trabajo. Esto significó buscar la bolsa de trucos visuales y eliminar tantos atajos y trucos como fuera posible, dando la misma apariencia visual de usar muchas esquinas en todas partes, pero sin usar muchos de ellos para comenzar.

Y la mayoría de estos trucos mapas de elevación ve mapas normales. Los dos relatan que el último se puede crear desde el primero, pero por ahora, veamos una técnica llamada: mapeo de tubérculos.

El mapeo de relieve implica el uso de una matriz 2D llamada mapa de elevación, que parece una versión única de la textura original. Por ejemplo, en la imagen de arriba, hay una textura de ladrillo realista aplicada a 2 superficies planas. El mapa de textura y altura se ve así:

Los colores del mapa de altura representan las normales de la superficie del ladrillo (cubrimos lo que es normal Episodio 1 de esta serie de artículos). Cuando la secuencia de renderizado llega al punto de aplicar la textura de ladrillo a la superficie, se realizan una serie de cálculos para ajustar el color de la textura de ladrillo a normal.

Como resultado, aunque los ladrillos siguen siendo perfectamente planos, se ven más en 3D. Especialmente si miras con atención los bordes de los ladrillos, puedes ver los límites de la técnica: la textura se ve un poco doblada. Pero para un truco rápido de agregar más detalles a una superficie, el mapeo de relieve es muy popular.

Un mapa normal es como un mapa de elevación, pero los colores de esa textura son los normales en sí. En otras palabras, no se requiere un cálculo para convertir el mapa de elevación a normal. Quizás se pregunte cómo se pueden usar los colores para representar una flecha en el espacio. La respuesta es simple: cada texel es R, G, B valores (rojo, verde, azul) y estos números son X ve Z valores para el vector normal.

En el ejemplo anterior, el diagrama de la izquierda muestra cómo cambia la dirección de la normal en una superficie rugosa. Para representar las mismas normales en una textura simple (diagrama del medio), les asignamos un color. En nuestro caso, R, G, B aumentando los valores de (0.255.0) para plano y luego las cantidades de rojo para izquierda y azul para derecha.

Tenga en cuenta que este color no se mezcla con el píxel original; le dice al procesador en qué dirección está mirando la normal para que la cámara pueda calcular con precisión los ángulos entre las luces y la superficie texturizada.

Los beneficios de la combinación normal y de relieve realmente brillan cuando se usa iluminación dinámica en la escena, y el proceso de renderizado calcula los efectos de los cambios de luz por píxel, no para cada esquina. Los juegos modernos ahora usan un montón de texturas para mejorar la calidad de la magia hecha.

Esta pared de aspecto realista es una superficie increíblemente plana: los detalles sobre el ladrillo y el mortero no están hechos con millones de polígonos. En cambio, solo 5 texturas y muchas matemáticas inteligentes hacen el trabajo.

El mapa de elevación se utilizó para generar el mapa normal para simular la forma en que los ladrillos proyectan sombras y todos los pequeños cambios en la superficie. La textura de rugosidad se utilizó para cambiar la forma en que la luz refleja los diferentes elementos de la pared (por ejemplo, un ladrillo nivelado refleja de manera más consistente que el mortero rugoso).

El mapa final, etiquetado AO en la imagen de arriba, forma parte de un proceso llamado oclusión ambiental: es una técnica que veremos más a fondo en un artículo posterior, pero por ahora son solo sombras.

La combinación de texturas es crucial

La textura es absolutamente esencial para el diseño de juegos. Obtén la versión 2019 de Warhorse Studio El reino se acerca: salvación - Un juego de rol en primera persona ambientado en la Bohemia del siglo XV, un antiguo país de la Europa del Medio Oriente. Los diseñadores estaban ansiosos por crear un mundo lo más realista posible para el período en cuestión. Y la mejor manera de darle vida al actor hace cientos de años es crear cada vista del paisaje, edificio, conjunto de ropa, cabello, artículos de uso diario, etc. Era tener el look adecuado para ello.

Cada textura única en esta única imagen en el juego ha sido creada por los artistas y su uso por el motor de renderizado controlado por los programadores. Algunos son pequeños, tienen detalles básicos y apenas se ocupan de filtrar o procesar otras texturas (alitas de pollo, por ejemplo).

Otros son de alta resolución y muestran muchos detalles finos; Se filtra anisotrópicamente y se mezcla con mapas regulares y otras texturas; solo mire la cara del hombre en primer plano. Los programadores han explicado los diferentes requisitos para texturizar cada elemento de la escena.

Todo esto está sucediendo en muchos juegos ahora, ya que los jugadores esperan más detalles y realismo. Las texturas crecerán y se usarán más en una superficie, pero el proceso de muestreo de texto y aplicación a píxeles será esencialmente el mismo que en los días de Quake. ¡La mejor tecnología nunca muere, no importa la antigüedad!