dshadow21 escribió:traducción por que no alcanzo a entenderlo al 100%
Buenas gente. Resumiendo, q ha escribo un código en ensamblador que esperaba ansiosamente, y q los resultados son entre 10 y 100 veces más rápido. Lo de SIMDlicious, supongo q la optimización que ha hecho ha sido usar las instrucciones SIMD de la CPU y q va de escándalo
.
Por otra parte y aunq se q no es el hilo, pido perdón de antemano pero como se q ha causado mucha controversia pongo una idea referente al multi de Killzone SF.
Después de lo de Guerrilla y el multi a esa resolución tan extraña, me puse a pensar en como podían hacer lo q en teoría hacen y el porqué. Después de darle un par de vueltas se me ha ocurrido una posible idea, y q de ser posible es un avance bastante curioso.
Lo primero comentar que 960x1080 son 1036800 pixeles q es justo la mitad de 1920x1080 y tan solo un 12% mas q 720p. Como despues pondré en las imágenes, con tan solo un 12% mas de pixeles sobre 720p los resultados q se consiguen son muchísimo mejores que renderizando a 720p y escalando a 1080p.
La idea q se me ha ocurrido es la siguiente (para verlo mejor os recomiendo guardar las imágenes y visualizarlas en vuestro PC con el zoom que querais y comparando unas con otras):
1.- Renderizas todos tus buffer a la resolución indicada 960x1080. Puesto q la relación del pixel es 2:1, es decir 1 pixel de tu frame buffer nativo son 2 pixels en el frame buffer final, renderizas con dicha relación de aspecto, digamos q el buffer q sacas lo sacas con la imagen deformada:
2.- Una vez hecho esto, "estiras" dicha imagen (con una interpolación normal y corriente) y la pones a 1920x1080p:
3.- Una vez estirada la imagen, ahora mismo tendrías un buffer con la relación de aspecto correcta 1:1 pero como se ve en la imagen un poco borrosa. Puesto q la relación de aspecto del primer buffer era de 2:1 podemos decir que hemos "inventado un pixel" en este caso por ejemplo los pixeles impares (si nuestra primera columna es el 0).
Por ejemplo si en la imagen a 960x1080 teníamos esto, solo tenemos en cuenta la vertical pq la horizontal es nativa a 1080:
Pixel0--Pixel1--Pixel2--Pixel3
Ahora tendríamos esto:
Pixel0--Pixel0.5--Pixel1--Pixel1.5--Pixel2--Pixel2.5--Pixel3--Pixel3.5
El problema es q los pixeles "enteros" (0,1,2,3) al reescalar tb se mezclan, se difuminan y no tenemos el color exacto como lo sacamos al principio (si es negro puede q no sea ya negro puro sino q será un negro mas grisáceo) pero aún tenemos los pixeles del buffer anterior con la relación de aspecto 2:1. Lo que podemos hacer es coger el buffer 960x1080 e ir intercambiando los pixeles de este buffer con los del siguiente buffer de forma que si nos quedaría
Pixel0--Pixel0.5--Pixel1--Pixel1.5--Pixel2--Pixel2.5--Pixel3--Pixel3.5
Esto nos da un aspecto mucho mas definido y mucho mas cercano al 1080p nativo:
Aquí el 1080p nativo:
El paso 2 y 3 pueden hacerse juntos, al igual q ver en el frame anterior para completar el frame final. Sería un algoritmo de dos pases.
Por otra parte esto aún se puede ajustar mucho mas puesto que si hay motion blur aplicado a la cámara que creo q si, sabemos la velocidad (dirección y módulo) del pixel con respecto a la cámara, por lo q para componer los píxeles "inventados" podemos usar el pixel q mas nos convenga de la imagen anterior y por tanto depurar aún mas el efecto.
Por otro lado en el próximo frame podríamos hacer lo mismo pero con las columnas pares para así evitar artifacs. En estático queda prácticamente igual y funciona tanto con lineas verticales como con horizontales. Las peores, como siempre con los postprocesos de este tipo, son las diagonales pero aún así el resultado es muchísimo mejor q renderizar a 720p y escalar.
Al final tendríamos:
- Imagen 720p escalada a 1080p:
- Imagen 960x1080p reescalados con el postproceso a 1080p:
Imagen nativa:
Se puede apreciar la diferencia incluso en las pequeñas imágenes. La definición es mucho mayor con tan solo un 12% mas de pixeles sobre 720p.
Algunas pruebas mas (estas mucho mejor si las descargáis y las abrís poniendo el zoom para ver las diferencias):
Las lineas en diagonal...la pesadilla y dnd el algoritmo en teoría fallaría mas (como cualquier algoritmo de postprocesado de este tipo):
- 720p a 1080p:
- 960x1080 a 1080p con postprocesado:
- 1080p nativo:
Un saludo.