Esses jogos que não têm a sorte de rodar em uma especificação de plataforma bloqueada, como computadores de mão, precisam rodar em vários formatos de resolução e proporções.
Em um jogo em 3D, você pode ter um HUD ou GUI de menu com base em gráficos de varredura, e em um jogo em 2D, você pode ter um monte de quads que são embarcações para sprites.
Então, minha pergunta é: como você aborda o design e a operação de conteúdo em várias resoluções e proporções? Vamos supor que você tenha um personagem de sprite de 300 x 400 pixels e cercado por um nível de blocos. Em diferentes resoluções / proporções, você verá um FOV completamente diferente. Ou, se você possui um menu HUD ou GUI, você deseja manter algumas coisas nas mesmas posições e tamanho do mesmo em relação à tela. No entanto, a fonte gráfica é bitmaps rasterizados, não vetoriais.
Obviamente, o problema foi abordado várias vezes. Estou interessado em ouvir várias abordagens que funcionaram para você até agora. Você mantém uma unidade arbitrária de pixel de dimensão arbitrária que você transforma magicamente em dimensões necessárias por meio de fórmula baseada em res e proporção ou em outras abordagens?
Portanto, a conclusão é enumerar suas proporções. Menor combinação de aspectos: a resolução é aquela em que você cria coisas importantes. Uma área segura, se você preferir. As mesmas proporções, mas resoluções mais altas são simples problemas de dimensionamento. O conteúdo artístico foi desenvolvido para a mais alta resolução. As proporções maiores simplesmente mostram mais de nível / FOV com as informações apresentadas que não são críticas, como é a área segura. Algo como nesta imagem que fiz .
Não vejo como você passou das respostas desta pergunta para a conclusão que você fez após a sua " edição: ". Na IMO, essas respostas são inadequadas e você não deveria ter aceito nenhuma delas. EG: Sua resposta aceita fala apenas de uma parte da pergunta (escala de sprites), não de toda a questão. O que você disse após a " edição: " é mais útil do que as respostas aqui, IMO. Mas eu realmente não o "entendo" o suficiente para implementá-lo. Infelizmente, se eu pedir elaboração de uma nova pergunta, ela será marcada como duplicada.
Se suas resoluções forem semelhantes umas às outras, você pode simplesmente usar a mesma arte em todas elas, talvez com algum downscaling em tempo de execução para as telas menores. Se eles diferem mais do que o fator 2x, digamos, você precisará criar (ou pelo menos ter um ajuste no artista) recursos separados para as diferentes resoluções.
Com o 2D, a resolução afeta bastante a maneira como você cria imagens. Um sprite que pareça ricamente detalhado e realista em alta resolução será enlameado e indecifrável em escala reduzida. Da mesma forma, um sprite limpo e nítido olhando para baixa resolução parecerá barato e excessivamente simples em alta resolução.
Aspect Ratio me preocupa embora. Por exemplo, não é um grande salto de 1080p para 720p, já que o aspecto é o mesmo, então estamos excluindo a escala simples. O que acontece quando você diz 1080p vs 1680x1050. Mostro mais FOV mais amplo e nivelado em aspectos maiores, mais ou menos uma margem? Por exemplo, projete para um aspecto mais amplo, com uma área segura onde todo o conteúdo importante vai, para não ser cortada da tela em aspectos mais estreitos.
— Keyframe
Vou atualizar a pergunta com a apresentação visual desta solução. Parece que não há outro caminho.
Uma maneira é criar os ativos de imagem em um formato vetorial (SVG, Illustrator etc.) e convertê-los em imagens raster, conforme necessário pelas diferentes versões do jogo.
Claro, mas eu esqueci de mencionar que não é uma opção. O principal problema é que a criação de conteúdo raster e vetorial é totalmente diferente (o raster é muito melhor para os artistas). Uma opção seria criar vários recursos de varredura, mas acredito firmemente que deve haver uma solução melhor. Por exemplo, a criação de ativos para a maior taxa de resolução / aspecto suportada e a redução em versões com menor tempo de execução em tempo real ou algo assim. O posicionamento continua sendo o problema ainda.
— Keyframe 14/07
Sim, isso também é uma opção, se você puder suportar os problemas de perda de qualidade e desempenho.
Não sei se está correto que "raster é melhor para artistas". Meu artista gráfico usa o Illustrator por essas mesmas razões. Quando chegou a hora de atualizar para a resolução 2X do iPhone 4, era simples exportar tudo novamente. A varredura pode ser melhor para artistas do Photoshop que não desejam se treinar como artistas de vetores, mas a longo prazo provavelmente é melhor se tornarem especialistas em gráficos baseados em vetores. As plataformas físicas estão mudando muito rapidamente para pensar em pixels.
— 31510 Chris Garrett
Ao manter a tela cheia em diferentes resoluções, se você deseja a perfeição em pixels (ou seja, "Como o artista a produziu"), o problema é que não há uma maneira totalmente automatizada de escalar sprites para cima ou para baixo (ou girá-los) que não não requer aprovação humana. Em última análise, é porque o posicionamento dos pixels é uma coisa subjetiva. O algoritmo de renderização realiza algumas redimensionamentos ou rotações e precisa usar algumas técnicas de aproximação para fazer isso, por exemplo. filtragem bilinear. Se você ainda quer arestas duras sobre os pixels para ter que "a perfeição do pixel" (ou seja, não usando AA ou BF), então você vai ter que aceitar que a escala por algum grau não-potência de 2 está indo para produzir alguns artefatos indesejáveis.
Uma abordagem interessante para um problema semelhante é encontrada no RotSprite , um aplicativo / algoritmo projetado para executar rotações "automáticas" de sprites. Com isso, quero dizer que produz uma série de resultados finais possivelmente desejáveis ​​após processamento intensivo, para o operador humano escolher. Os sprites escolhidos a dedo acabam entrando no jogo, o que significa que essa é uma etapa de criação de conteúdo, e não de execução.
Uma resposta possível à sua pergunta "pixel agnóstico de dimensão mágica arbitrária": o OpenGL (que você pode estar pretendendo usar se estiver usando uma plataforma cruzada) funciona de uma maneira totalmente diferente de um renderizador de varredura de software. Ele considera a largura e a altura da tela no intervalo de ponto flutuante de 0,0 a 1,0 e mapeia os pixels de acordo na GPU. Claro que isso pode resultar em artefato, a menos que, por exemplo. O BF está ativado para texturas (que são seus sprites no OpenGL).
Isso está errado. Você pode usar composição e elementos repetíveis (think tiles) em vez de dimensionar para manter o pixel perfeito em qualquer proporção. Obviamente, se os elementos forem pequenos em resolução mais alta, eles ficarão cada vez mais pequenos. você precisaria de escala 2X ou recursos de resolução diferentes.