Estou lutando para entender o básico por trás da pixel art no Unity.
Entendo o que é uma unidade e, se eu desenhar meu sprite com 16x16 pixels, devo definir o PPU como 16.
Pegue o vale de stardew, por exemplo, na imagem abaixo você pode ver claramente que o jogador não é quadrado. O criador do jogo disse que ele fez tudo em 16x16, mas como há tantos detalhes nos personagens? Certamente você não remende vários quadrados 16x16 para formar um personagem (como faria com um mapa de peças)?
Qual é a maneira "comum" de lidar com coisas que não são quadradas, como os caracteres da imagem. Você acabou de criar sprite 16x32 e definir o PPU para 16? Isso não parecerá estranho ao lado de sprites 16x16? Você geralmente escolhe um tamanho (ou seja, 16, 32, 64) e depois se mantém fiel a isso para tudo no jogo?
A questão visual que eu vi é essa, em que um sprite de 32x32 parece muito fora do lugar (muito nítido) ao lado de um sprite de 16x16.
Então, eu estou pensando, como você mistura tamanhos sem obter esse efeito, onde uma imagem parece muito mais nítida que a outra. Por exemplo, se eu quisesse que um caractere tivesse 16x32, ou qualquer valor diferente de quadrado, quando meus blocos tivessem 16x16
fonte
Respostas:
Resumindo os pontos acima, o que importa para que duas peças de pixel art correspondam é que a densidade de pixels (texels por área de tela / unidade mundial) é a mesma.
Usando alguns sprites do Stardew Valley como exemplo, podemos ver que, embora os sprites tenham dimensões de textura diferentes, eles correspondem a uma grade consistente porque cada pixel é desenhado do mesmo tamanho.
Se pensarmos no tamanho da planta como um bloco / uma unidade do espaço mundial, podemos ver que essa unidade mede 16 pixels na horizontal e na vertical. O personagem, com o dobro da altura da planta, também cobre o dobro do número de blocos / unidades mundiais; portanto, a densidade de pixels permanece a mesma em 16 pixels por unidade mundial.
Para o Unity especificamente, ele expõe isso para você como uma configuração de pixels por unidade no inspetor de configurações de importação do Sprite . Desde que você use um número consistente aqui para todos os seus sprites, o Unity tratará automaticamente de desenhá-los no tamanho certo em seu mundo para manter essa densidade de pixels - mesmo que sejam tamanhos ímpares e não sejam dois ou exato múltiplos do tamanho do seu bloco. Portanto, neste exemplo, tanto o arbusto quanto o personagem, e todo o resto do jogo usariam um PPU OF 16.
O número exato escolhido não é grande coisa, é a consistência que mais importa. Se quisermos que cada bloco abranja 2 unidades mundiais, para que, ao editar o nível, possamos ajustar facilmente os cantos (números ímpares) e os centros dos blocos (números pares), usaríamos uma PPU de 8 para todos os nossos sprites.
Só não diminua muito . Você verá alguns artigos recomendando uma configuração PPU de 1, o que significa que um sprite de 256 pixels abrangerá 256 unidades mundiais. Embora isso possa não parecer alarmante, sistemas como a física estão sintonizados, assumindo que a maior parte do seu jogo estará acontecendo em escalas de décimos a dezenas de unidades, e aumentar sua escala pode fazer com que eles se comportem mal. Tente escolher um número de pixels que seja significativo na sua jogabilidade, como a largura do seu personagem ou o seu ladrilho. Isso também tornará sua matemática mais fácil para a programação e o design de níveis (por exemplo, "Eu quero que esse personagem trace 3 blocos corretamente, então é isso
x + 3.0f
")Observe que o dimensionamento de um sprite, imagem de interface do usuário ou de seus pais usando propriedades de transformação os distorcerá desta densidade consistente de pixels, portanto, tenha muito cuidado com as propriedades de escala e mantenha a maior parte ou toda a cena em uma escala de 1,0 por simplicidade.
Um último aviso é que nada disso determina o tamanho dos sprites na tela - isso é determinado pelo tamanho da janela / tela do jogo e pelo tamanho / FoV / ângulo da câmera. Para um pixel perfeito em 2D, você também precisará garantir que a altura da sua janela seja um número inteiro múltiplo do número de pixels sprite que sua câmera vê (altura ortográfica da câmera x 2 x PPU)
fonte