¿Cómo aborda la independencia de resolución en contenido gráfico basado en ráster?

32

Esos juegos que no tienen la suerte de ejecutarse en una plataforma bloqueada, como las computadoras de mano, deben ejecutarse en varios formatos de resolución y relaciones de aspecto.

En un juego en 3D, es posible que tenga un HUD o una GUI de menú basada en gráficos de trama, y ​​en un juego en 2D, puede tener un montón de quads que son recipientes para sprites.

Entonces, mi pregunta es, ¿cómo aborda el diseño y el funcionamiento del contenido en varias resoluciones y relaciones de aspecto? Supongamos que tiene un personaje de sprite que es un sprite de 300x400 píxeles y está rodeado por un nivel hecho de mosaicos. En diferentes resoluciones / relaciones de aspecto, vería un FOV completamente diferente. O si tiene un menú HUD o GUI, querrá mantener algunas cosas en las mismas posiciones y del mismo tamaño en relación con la pantalla. Sin embargo, la fuente de gráficos es mapas de bits de trama, no vectores.

Obviamente, el problema se ha abordado en numerosas ocasiones. Estoy interesado en escuchar acerca de varios enfoques que han funcionado para usted hasta ahora. ¿Mantiene una unidad de 'píxel' agnóstica de dimensiones arbitrarias que transforma mágicamente en las dimensiones necesarias mediante una fórmula basada en resolución y relación de aspecto u otros enfoques?

editar:

Entonces, la conclusión es enumerar sus relaciones de aspecto. La combinación de aspecto más baja: la resolución es en la que diseñas cosas importantes. Un área segura si quieres. Las mismas relaciones de aspecto, pero las resoluciones más altas son simples problemas de escala. El contenido artístico está diseñado para la más alta resolución. Las relaciones de aspecto más grandes simplemente muestran más de nivel / FOV con información presentada que no es crítica como la que está en un área segura. Algo así como en esta imagen que hice . texto alternativo

Fotograma clave
fuente
1
No veo cómo pasaste de las respuestas en esta pregunta a la conclusión que hiciste después de tu " edición: ". En mi opinión, estas respuestas son inadecuadas y no deberías haber aceptado ninguna de ellas. EG: Su respuesta aceptada solo habla de una parte de la pregunta (escalado de sprites), no del problema completo. Lo que has dicho después de " editar: " es más útil que las respuestas aquí, en mi opinión. Pero, realmente no lo "entiendo" lo suficientemente bien como para implementarlo. Desafortunadamente, si solicito más detalles en una nueva pregunta, se marcará como un duplicado.
Daniel Kaplan

Respuestas:

7

Si sus resoluciones son similares entre sí, puede usar el mismo arte en todas ellas con quizás una reducción de escala en tiempo de ejecución para las pantallas más pequeñas. Si difieren en más de un factor de 2x, necesitará crear (o al menos hacer que un artista modifique) los activos separados para las diferentes resoluciones.

Con 2D, la resolución tiene un gran efecto sobre cómo diseñar imágenes. Un sprite que se ve rico en detalles y realista en alta resolución será fangoso e indescifrable. Del mismo modo, un sprite que es limpio y nítido en baja resolución se verá barato y demasiado simple en alta resolución.

munificente
fuente
Sin embargo, la relación de aspecto me preocupa. Por ejemplo, no es un gran salto de 1080p a 720p, ya que el aspecto es el mismo, estamos trabajando con una escala simple. Qué sucede cuando tienes que decir 1080p vs 1680x1050. ¿Debo mostrar más del FOV nivelado y más amplio en un aspecto más grande, como un margen? Por ejemplo, diseñe para un aspecto más amplio con un área segura donde vaya todo el contenido importante, para no recortarlo de la pantalla en aspectos más estrechos.
Keyframe
Actualizaré la pregunta con una presentación visual de esta solución. Parece que no hay otra manera.
Keyframe
4

Una forma es crear los activos de la imagen en un formato vectorial (SVG, Illustrator, etc.) y convertirlos en imágenes ráster según lo necesiten las diferentes versiones del juego.

Matias Valdenegro
fuente
Claro, pero olvidé mencionar que no es una opción. El principal problema es que la creación de contenido ráster y vectorial es totalmente diferente (el ráster es mucho mejor para los artistas). Sin embargo, una opción sería crear múltiples activos ráster, pero creo firmemente que debe haber una mejor solución. Por ejemplo, la creación de activos para la relación de aspecto / resolución admitida más grande y la reducción en versiones de tiempo de ejecución de menor resolución sobre la marcha o algo así. Sin embargo, el posicionamiento sigue siendo el problema.
Keyframe
Sí, esa también es una opción, si puede soportar la pérdida de calidad y los problemas de rendimiento.
Matias Valdenegro
8
No estoy seguro de que sea correcto que "la trama es mejor para los artistas". Mi artista gráfico usa Illustrator por estas mismas razones. Cuando llegó el momento de actualizar a la resolución 2X del iPhone 4, le resultó sencillo exportar todo de nuevo. Raster puede ser mejor para los artistas de Photoshop que no quieren volver a capacitarse como artistas de vectores, pero a la larga probablemente sean mejores para convertirse en expertos en gráficos basados ​​en vectores. Las plataformas físicas están cambiando demasiado rápido para pensar en píxeles.
Chris Garrett
4

Al mantener la pantalla completa en diferentes resoluciones, si desea la perfección de píxeles (es decir, "Como lo produjo el artista"), el problema es que no existe una forma totalmente automática de escalar sprites hacia arriba o hacia abajo (o rotarlos) que no No requiere aprobación humana. En última instancia, eso se debe a que la colocación de píxeles es algo subjetivo. El algoritmo de representación realiza una escala o rotación, y tiene que usar algunas técnicas de aproximación para hacer esto, por ejemplo. filtrado bilineal Si aún desea bordes duros en los píxeles para tener esa "perfección de píxeles" (es decir, no usar AA o BF), entonces tendrá que aceptar que la escala en algún grado sin potencia de 2 va a producir algunos artefactos indeseables.

Un enfoque interesante para un problema similar se encuentra en RotSprite , una aplicación / algoritmo diseñado para realizar rotaciones "automáticas" de sprites. Con eso, quiero decir que produce una serie de resultados finales posiblemente deseables después del procesamiento intensivo, para que el operador humano pueda elegir. Los sprites elegidos a mano terminan yendo al juego, lo que significa que este es un paso de creación de contenido, y no uno en tiempo de ejecución.

Una posible respuesta a su pregunta de "píxel agnóstico de dimensiones mágicas arbitrarias": OpenGL (que bien podría tener la intención de usar si se va de plataforma cruzada) funciona de una manera totalmente diferente de un renderizador de ráster de software. Considera el ancho y la altura de la pantalla en el rango de punto flotante 0.0-> 1.0, y asigna los píxeles en consecuencia en la GPU. Por supuesto, esto puede resultar en artefactos, a menos que, por ejemplo. BF está activado para texturas (que es lo que son tus sprites en OpenGL).

Ingeniero
fuente
Esto es completamente incorrecto. Puede usar la composición y elementos repetibles (piense en mosaicos) en lugar de escalar para mantener el píxel perfecto en cualquier relación de aspecto. Por supuesto, si los elementos son pequeños a una resolución más alta, se volverán cada vez más pequeños. por lo que necesitaría una escala 2X o recursos de resolución diferentes.
adrix89