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 .
Respuestas:
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.
fuente
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.
fuente
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).
fuente