Comprendre le pixel art dans Unity 2d

10

J'ai du mal à comprendre les bases du pixel art dans Unity.

Je comprends ce qu'est une unité et que si je dessine mon sprite avec 16x16 pixels, je dois définir PPU sur 16.

Prenez stardew valley par exemple, dans l'image ci-dessous, vous pouvez clairement voir que le joueur n'est pas carré. Le créateur du jeu a dit qu'il avait tout fait en 16x16, mais comment y a-t-il autant de détails dans les personnages? Vous ne corrigez sûrement pas plusieurs carrés 16x16 ensemble pour créer un personnage (comme vous le feriez avec un tilemap)?

entrez la description de l'image ici

Quelle est la façon «courante» de traiter des choses qui ne sont pas carrées, comme les personnages de l'image. Faites-vous simplement un sprite 16x32 et définissez PPU sur 16? Cela ne donnera-t-il pas un aspect un peu bizarre à côté des sprites 16x16? Choisissez-vous généralement une taille (c.-à-d. 16, 32, 64), puis respectez-vous cela pour tout dans le jeu?

Le problème visuel que j'ai vu est celui-ci, où un sprite 32x32 semble très déplacé (trop net) à côté d'un sprite 16x16.

entrez la description de l'image ici

Je me demande donc comment mélanger les tailles sans obtenir cet effet où une image semble beaucoup plus nette que l'autre. Si, par exemple, je voulais qu'un caractère soit 16x32, ou n'importe quelle valeur non carrée, quand mes tuiles sont 16x16

Green_qaue
la source
2
PPU n'a rien à voir avec les dimensions de texture de vos sprites, il décide simplement de l'échelle à laquelle ils sont affichés par rapport à votre système de coordonnées mondial. Deux images-objets avec le même PPU afficheront la même densité de pixels (c'est-à-dire que la taille affichée de chaque bloc de pixels sera la même d'une image-objet à l'autre en vue directe), même si les images ont des tailles complètement différentes. Je ne suis donc pas sûr de ce que vous entendez par "cela ne donnera-t-il pas un aspect un peu bizarre" - pouvez-vous nous expliquer exactement quel problème visuel vous avez observé?
DMGregory
@DMGregory Bien sûr, permettez-moi de télécharger une image
Green_qaue
1
L'effet montré dans votre exemple de capture d'écran se produira si vous associez deux images avec des valeurs PPU différentes (ou si une image a ses pixels doublés / triplés dans la texture elle-même, ou si vous avez appliqué une échelle à une image mais pas à l'autre) . Si vous vous en tenez à une valeur PPU cohérente et que vous ne mettez pas à l'échelle vos sprites, vous conserverez une densité de pixels cohérente
DMGregory
@DMGregory Donc, si mes tuiles sont 16x16, et je veux un personnage avec plus de détails (comme vous pouvez voir le caractère 16x16 ci-dessus a très peu de détails), par exemple 32x16, je devrais créer un sprite 32x16, et garder PPU à 16 (même chose comme tuiles)?. Ou par exemple, si je voulais un éléphant, alors peut-être que ce devrait être 64x128, est-ce que je devrais aussi le régler à 16 PPU?
Green_qaue
1
PPU est le nombre de pixels qui tiennent dans une unité mondiale. Si vous souhaitez toujours que vos pixels aient la même taille, vous devez toujours utiliser une valeur PPU cohérente. (Cela signifie qu'un arbuste 16x16 et un éléphant 64x128 à 16 PPU afficheront tous deux la même densité de pixels, et l'éléphant couvrira 32 fois plus de surface d'écran que l'arbuste). C'est tout ce que vous vous demandiez?
DMGregory

Réponses:

16

Pour résumer les points ci-dessus, ce qui importe pour que deux éléments de pixel art correspondent, c'est que leur densité de pixels (texels par zone d'écran / unité mondiale) soit la même.

En utilisant certains sprites de Stardew Valley comme exemple, nous pouvons voir que même si les sprites ont des dimensions de texture différentes, ils correspondent sur une grille cohérente car chaque pixel est dessiné de la même taille.

Exemple montrant deux sprites de tailles différentes à la même densité de pixels.

Si nous considérons la taille de la plante comme une tuile / une unité d'espace mondial, nous pouvons voir que cette unité s'étend sur 16 pixels horizontalement et verticalement. Le personnage, ayant deux fois la hauteur de la plante, couvre également deux fois le nombre de tuiles / unités mondiales, de sorte que la densité de pixels reste la même à 16 pixels par unité mondiale.

Pour Unity en particulier, il l'expose pour vous en tant que paramètre Pixels par unité dans l'inspecteur des paramètres d'importation de Sprite . Tant que vous utilisez un nombre cohérent ici pour tous vos sprites, Unity se chargera automatiquement de les dessiner à la bonne taille dans votre monde pour conserver cette densité de pixels - même si ce sont des tailles impaires et non pas deux ou exactes. multiples de la taille de votre carreau. Donc, dans cet exemple, à la fois l'arbuste et le personnage, et tout le reste dans le jeu utiliserait un PPU OF 16.

Le nombre exact que vous choisissez n'est pas un problème, c'est la cohérence qui compte le plus. Si nous voulions que chaque tuile s'étende sur 2 unités mondiales, afin que lors de l'édition de niveau, nous puissions facilement nous aligner sur les coins de tuiles (nombres impairs) et les centres de tuiles (nombres pairs), alors nous utiliserions un PPU de 8 à la place pour tous nos sprites.

Ne le baissez pas trop bas. Vous verrez des articles recommandant un paramètre PPU de 1, ce qui signifie qu'un sprite de 256 pixels s'étendra sur 256 unités mondiales. Bien que cela puisse ne pas sembler alarmant, des systèmes comme la physique sont réglés en supposant que la plupart de votre gameplay se déroulera sur des échelles de dixièmes à des dizaines d'unités, et rendre votre échelle trop grande peut entraîner un mauvais comportement. Essayez de choisir un certain nombre de pixels significatifs dans votre gameplay, comme la largeur de votre personnage ou votre tuile. Cela facilitera également vos calculs pour la programmation et la conception de niveaux (par exemple, "Je veux que ce personnage lance 3 tuiles correctement, donc c'est x + 3.0f")

Notez que la mise à l'échelle d'une image-objet, d'une image d'interface utilisateur ou de ses parents à l'aide des propriétés de transformation les distordra de cette densité de pixels cohérente, alors soyez très prudent avec les propriétés d'échelle et conservez la plupart ou la totalité de votre scène à une échelle de 1,0 pour plus de simplicité.

Une dernière mise en garde est que rien de tout cela ne détermine la taille réelle de vos sprites sur votre écran - cela est déterminé par la taille de votre fenêtre / écran de jeu, et la taille / FoV / angle de votre caméra. Pour des pixels parfaits en 2D, vous devrez également vous assurer que la hauteur de votre fenêtre est un multiple entier du nombre de pixels d'image-objet que votre caméra voit (hauteur orthographique de la caméra x 2 x PPU)

DMGregory
la source