¿Imágenes HDR lineales de medio flotador de 16 bits como texturas (difusas / albedo)?

10

Así que estuve pensando en esto por un tiempo e intenté buscar una respuesta en Google pero sin ningún éxito.

Si todas sus texturas son imágenes LDR de 8 bits, como JPEG, no podría causar conflictos con el control de exposición / mapeo de tonos al renderizar. Es decir, si ajusta la exposición de representación de su imagen que debería exponer detalles en las texturas que realmente no están allí, ya que se han bloqueado por el bajo rango dinámico. Entonces, ¿no tendría sentido también tener las texturas como imágenes HDR, guardadas como .exr, en un espacio de color lineal con medio flotador de 16 bits para obtener una buena representación del color (el flotador "completo" de 32 bits podría ser excesivo?). Tener valores de color más detallados y correctos también podría, creo, tener un efecto en GI y cómo se calcula el sangrado de color.

¿O simplemente no es necesario ya que el resultado final de la representación que queremos probablemente será similar al nivel de exposición de la textura cuando se fotografió de alguna manera? Y dado que la cámara dispara principalmente en 12-14 bits, tendría que tomar múltiples exposiciones de la textura y hacer todo ese trabajo adicional para unirlas todas en un HDRI.

Editar: para aclarar, estoy más interesado en esto desde un punto de vista fotográfico realista, con renderizadores de trazas de rayos (como mental ray, V-Ray, Arnold, etc.) con simulaciones completas de luz e iluminación global, en lugar de motores de juego en tiempo real.

Kristoffer Helander
fuente

Respuestas:

8

En la producción de películas, casi nunca usamos texturas de 8 bits para color / albedo, debido a bandas, etc. (JPEG es especialmente problemático ya que, por especificación, es sRGB en lugar de valores lineales). O bien usamos 'half' (16 bit float ) o valores enteros sin signo de 16 bits para texturas de color / albedo.

Larry Gritz
fuente
1
Wow, gracias @LarryGritz! Teniendo en cuenta que trabajas para Sony Pictures Imageworks, ¡te tomaré como una fuente muy confiable! :) Pero, ¿cómo se capturan estas texturas? La mayoría de las cámaras solo disparan en archivos RAW de 14 bits, ¿tiene cámaras especiales con sensores lineales de 16 bits? ¿O toma múltiples exposiciones para las texturas, tal como una lo hace para la iluminación basada en imágenes HDRI? ¿O simplemente captura con una cámara RAW de 14 bits y la guarda como "16 bits"? Ow, y qué formato de archivo utiliza, .tiff (.tx, .tex) o .exr? ¡¡Gracias de nuevo por tu aportación!! :)
Kristoffer Helander
1
@KristofferHelander: La conversión de una captura de 14 bits a una representación de 16 bits del rango 0-1 se logra fácilmente mediante la multiplicación. Pero la mayoría de nuestras texturas están pintadas, no fotografiadas: a veces se pintan directamente en un formato de 16 bits, a veces se pintan en sRGB y luego se convierten a 16 bits cuando se "linealizan" para usarlas como textura. No hay necesidad de HDR para texturas de albedo.
Larry Gritz
1
@KristofferHelander: Para las texturas de albedo, tendemos a usar TIFF con datos enteros de 16 bits (lo que llamamos .tx es solo formato TIFF pero en mosaico y con multiresolución MIP-map almacenada como subimágenes múltiples dentro del archivo TIFF). Para datos HDR reales, como capturas de entorno, utilizamos OpenEXR. La salida del renderizador también tiende a ser OpenEXR.
Larry Gritz
8

Sí, en algunos casos extremos es posible que la iluminación HDR y el mapeo de tonos expongan problemas de bandas en texturas de color. En esos casos, tener una mayor profundidad de bits para las texturas podría ser útil. Sin embargo, en mi experiencia, la mayoría de los materiales y las situaciones de iluminación ordinarias no presentan este problema, y ​​la mayoría de las texturas en un juego típico están bien en 8 bits (o incluso menos), los juegos a menudo usan compresión BC1, lo que los reduce a 5- 6-5 bits).

Las personas usan objetivos de renderizado HDR porque una sola escena puede contener magnitudes de brillo muy diferentes, como una habitación oscura en la que se puede ver a través de una ventana un exterior iluminado por el sol 10 a 100 veces más brillante que la habitación. Sin embargo, las texturas de color no tienen un rango tan amplio de magnitudes. Representan reflectancias, que están inherentemente en el rango [0, 1], y en la práctica pocos materiales cotidianos son más bajos que alrededor del 2-5% de reflectancia. Por lo tanto, una imagen de 8 bits (con codificación gamma) generalmente puede representar colores difusos y especulares con suficiente precisión.

Es cierto que la combinación de una textura bastante oscura con una iluminación muy brillante o una configuración de cámara extremadamente sobreexpuesta puede mostrar bandas en el cuadro final, pero ese sería un caso más inusual.

Un caso en el que es probable que le desee una textura HDR es materiales emisores, especialmente para señales de neón y las fuentes de luz similares. La textura aparecería con su valor amplificado para aparecer como una fuente de luz brillante en el juego, por lo que en ese caso una imagen de 8 bits podría mostrar fácilmente bandas.

Finalmente, aún puede ser útil trabajar con mayor precisión (por ejemplo, precisión de 16 bits) si es posible al capturar y crear texturas, simplemente porque le da más margen para procesar la imagen sin causar problemas de precisión. Por ejemplo, si necesita ajustar niveles o balance de color, pierde un poco de precisión; que puede introducir bandas (especialmente si lo hace varias veces) al comenzar desde una imagen de origen de 8 bits. Una fuente de 16 bits sería más resistente a tales problemas. Sin embargo, la textura final utilizada en el juego probablemente todavía se comprimiría a 8 bits.

Nathan Reed
fuente
combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final frameMuy buena idea. Pero podemos notar que la codificación gamma está aquí precisamente para mitigar este punto. Si tiene el problema, ¿por qué no prueba con un exponente gamma superior? sin embargo, eso inhibiría el uso de muestreadores de hardware sRGB.
v.oddou
Gracias por su aporte. Pero para aclarar, estoy principalmente interesado en esto desde un punto de vista fotográfico realista, con renderizadores de trazado de rayos (como mental ray, V-Ray, Arnold, etc.) con simulaciones completas de luz e iluminación global, en lugar de reales -motores de juegos de tiempo.
Kristoffer Helander
@KristofferHelander Es bueno saberlo, pero creo que lo que escribí probablemente también se aplica al renderizado sin conexión. Pero admito que no tengo mucha experiencia directa en esa área.
Nathan Reed
@NathanReed Sí, ciertamente hiciste algunos comentarios realmente buenos :)
Kristoffer Helander
5

Me gustaría invitar a los lectores a leer este artículo sobre la tecnología de rasterización del motor Quake 2 explicada en detalle , si tienen tiempo.

Si es TLDR, preste atención a esta imagen: ingrese la descripción de la imagen aquí

Lo que vemos es el canal Albedo , eso es lo que quieres codificar en 16 bits si entiendo tu pregunta correctamente.
No voy a decir " si pudiera codificarse en 256 colores para juegos en el pasado, ¿por qué necesitaríamos 281474976710656 (eso es 281 billones) en juegos nuevos? " Incluso si quisiera, pero eso suena como el tipo gruñón de Pixar de Arriba. Más constructivamente, si notaste en esta imagen, todo está al mismo nivel de iluminación . Más particularmente, la intensidad máxima posible que conserva la saturación deseada. (significado en el espacio HSV, V está al máximo)

El énfasis es clave, apenas necesitamos bits porque albedo no tiene profundidad para codificar de todos modos. La dinámica proviene del sombreado, tiene sentido trabajar f32por componentes dentro de los sombreadores y generar resultados para f16representar los objetivos. Pero almacenar texturas de albedo en f16eso no solo es exagerado, es un gran rendimiento injustificado para nuestro precioso ancho de banda.

v.oddou
fuente
Gracias por su aporte. Pero para aclarar, estoy principalmente interesado en esto desde un punto de vista fotográfico realista, con renderizadores de trazado de rayos (como mental ray, V-Ray, Arnold, etc.) con simulaciones completas de luz e iluminación global, en lugar de reales -motores de juegos de tiempo. He actualizado mi publicación original.
Kristoffer Helander