Estoy tratando de implementar el mapeo de tonos junto con la adaptación ocular y HDR. En realidad, ya implementé esto, pero no estoy satisfecho con el resultado y creo que hice algo mal.
Mi imagen final (antes del postprocesamiento) la guardo en una textura de medio flotador. También tengo 2 texturas auxiliares. El primero almacena la luminancia de registro y el color promedio, mínimo y máximo del mismo en el último mapa-mip. El segundo almacena el valor de adaptación que se calcula como:
prevLum + (avgLum - prevLum) * (1.0 - exp2(-adaptionRate))
donde prevLum es el valor de adaptación anterior (el tamaño de esta textura es 1x1). La textura de la luminancia del registro es formato R8B8G8 y la segunda es R8. En los tutoriales vi que se utilizan texturas de medio flotador, pero en mi caso tengo imágenes demasiado brillantes (casi blancas).
En el sombreador final posterior al proceso, estoy usando todos los valores para obtener adaptación ocular y mapeo de tonos usando este código:
float autokey(in float lum) {
return 1.03 - 2.0 / (2.0 + log10(lum + 1.0));
}
float hejl(in float color) {
float x = max(0.0, color - 0.004);
return (x * (A * x + B)) / (x * (A * x + C) + D);
}
float adaptedLum = texture(adaptedLuminance, vec2(0.5)).r;
float exp = exposure * autokey(adaptedLum) / adaptedLum;
result *= exp;
result.xyz=RGB2xyY(result.xyz); // conversion to CIE xyY
result.z = hejl(result.z);
result.xyz=xyY2RGB(result.xyz);
Y aquí están mis resultados:
- adaptación ocular y mapeo de tonos activados
- solo adaptación ocular
- solo mapeo de tonos
- todo fuera
Como puede ver cuando el mapeo de tonos está activado, el color del conejito es más pálido. Y cuando la adaptación del ojo está activada, la imagen final es mucho más oscura. ¿Podría alguien explicarme qué podría causar eso, porque creo que algo aquí está mal? ¿Quizás es algo con espacios de color que no entiendo bien? ¿O con la floración que se aplica antes del mapeo de tonos y la adaptación ocular?
También tengo otro comportamiento extraño con la adaptación ocular. Cuando miro áreas oscuras, el fondo (cielo) se vuelve más brillante. Está bien, pero siempre ocurre cuando el centro de la cámara está en el área negra (no importa qué tan lejos esté la cámara de esta área).
Me basé en la implementación incluida en los proyectos en estas páginas: John Chapman , Nutty Software