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.
fuente
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.
fuente
combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final frame
Muy 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.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:
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
f32
por componentes dentro de los sombreadores y generar resultados paraf16
representar los objetivos. Pero almacenar texturas de albedo enf16
eso no solo es exagerado, es un gran rendimiento injustificado para nuestro precioso ancho de banda.fuente