Comprensión de pixel art en Unity 2d

10

Me cuesta entender los conceptos básicos detrás del pixel art en Unity.

Entiendo qué es una unidad, y que si dibujo mi sprite con 16x16 píxeles, debería establecer PPU en 16.

Tome Stardew Valley, por ejemplo, en la imagen a continuación puede ver claramente que el jugador no es cuadrado. El creador del juego dijo que hizo todo en 16x16, pero ¿cómo hay tantos detalles en los personajes? ¿Seguramente no parches varios cuadrados de 16x16 para formar un personaje (como lo harías con un mapa de mosaico)?

ingrese la descripción de la imagen aquí

¿Cuál es la forma "común" de tratar con cosas que no son cuadradas, como los personajes de la imagen. ¿Simplemente haces un sprite de 16x32 y configuras PPU a 16? ¿No hará que parezca un poco extraño junto a los sprites de 16x16? ¿Generalmente eliges una talla (es decir, 16, 32, 64) y luego te limitas a eso para todo en el juego?

El problema visual que he visto es este, donde un sprite de 32x32 se ve muy fuera de lugar (demasiado afilado) junto a un sprite de 16x16.

ingrese la descripción de la imagen aquí

Así que me pregunto, ¿cómo se mezclan los tamaños sin obtener este efecto donde una imagen se ve mucho más nítida que la otra? Si, por ejemplo, quisiera que un personaje fuera 16x32, o cualquier valor no cuadrado, cuando mis mosaicos son 16x16

Green_qaue
fuente
2
PPU no tiene nada que ver con las dimensiones de textura de sus sprites, solo decide la escala a la que se muestran en relación con su sistema de coordenadas mundial. Dos sprites con el mismo PPU mostrarán la misma densidad de píxeles (es decir, el tamaño mostrado de cada bloque de píxeles será el mismo de un sprite a otro cuando se ve directamente), incluso si las imágenes tienen tamaños completamente diferentes. Así que no estoy seguro de lo que quieres decir con "¿eso no hará que se vea un poco raro"? ¿Puedes explicar exactamente qué problema visual has observado?
DMGregory
@DMGregory Claro, déjame subir una imagen
Green_qaue
1
El efecto que se muestra en su captura de pantalla de ejemplo ocurrirá si combina dos imágenes con diferentes valores de PPU (o si una imagen tiene sus píxeles duplicados / triplicados en la textura misma, o si ha aplicado una escala a una imagen pero no a la otra) . Si se apega a un valor de PPU constante y no escala sus sprites, mantendrá una densidad de píxeles constante
DMGregory
@DMGregory Entonces, si mis mosaicos son de 16x16, y quiero un personaje con más detalles (como puede ver, el personaje de 16x16 anterior tiene muy pocos detalles), por ejemplo 32x16, debería crear un sprite de 32x16 y mantener PPU en 16 (igual como azulejos) O, por ejemplo, si quisiera un elefante, entonces quizás tendría que ser 64x128, ¿lo establecería también en 16 PPU?
Green_qaue
1
PPU es cuántos píxeles caben en una unidad mundial. Si siempre desea que sus píxeles tengan el mismo tamaño, siempre debe usar un valor PPU consistente. (Eso significa que un arbusto de 16x16 y un elefante de 64x128 a 16 PPU mostrarán la misma densidad de píxeles, y el elefante cubrirá 32 veces más área de pantalla que el arbusto). ¿Es eso todo lo que te preguntabas?
DMGregory

Respuestas:

16

Resumiendo los puntos anteriores, lo que importa para que coincidan dos piezas de pixel art es que su densidad de píxeles (texels por área de pantalla / unidad mundial) es la misma.

Usando algunos sprites de Stardew Valley como ejemplo, podemos ver que, aunque los sprites tienen diferentes dimensiones de textura, coinciden en una cuadrícula consistente porque cada píxel se dibuja del mismo tamaño.

Ejemplo que muestra dos sprites de diferentes tamaños con la misma densidad de píxeles.

Si pensamos en el tamaño de la planta como una baldosa / una unidad de espacio mundial, podemos ver que esta unidad abarca 16 píxeles horizontal y verticalmente. El personaje, que tiene el doble de la altura de la planta, también cubre el doble del número de fichas / unidades mundiales, por lo que la densidad de píxeles se mantiene igual a 16 píxeles por unidad mundial.

Para Unity específicamente, lo expone a usted como una configuración de píxeles por unidad en el inspector de configuración de importación de Sprite . Siempre que use un número consistente aquí para todos sus sprites, Unity se encargará automáticamente de dibujarlos en el tamaño correcto en su mundo para mantener esta densidad de píxeles, incluso si son tamaños impares y no potencia de dos o exacta múltiplos de su tamaño de mosaico. Entonces, en este ejemplo, tanto el arbusto como el personaje, y todo lo demás en el juego usaría una PPU DE 16.

El número exacto que elige no es gran cosa, lo más importante es la consistencia. Si quisiéramos que cada mosaico abarcara 2 unidades mundiales, de modo que cuando editemos el nivel, podamos ajustar fácilmente las esquinas de los mosaicos (números impares) y los centros de mosaicos (números pares), entonces usaríamos una PPU de 8 para todos nuestros sprites.

Simplemente no lo bajes demasiado bajo. Verá algunos artículos que recomiendan una configuración de PPU de 1, lo que significa que un sprite de 256 píxeles abarcará 256 unidades mundiales. Si bien esto puede no sonar alarmante, los sistemas como la física están ajustados asumiendo que la mayor parte de su juego se desarrollará en escalas de décimas a decenas de unidades, y hacer que su escala sea demasiado grande puede hacer que se comporten mal. Intenta elegir un número de píxeles que sea significativo en tu juego, como el ancho de tu personaje o tu ficha. Esto también hará que tus matemáticas sean más fáciles para la programación y el diseño de niveles (por ejemplo, "Quiero que este personaje ponga 3 fichas correctamente, así que eso es así x + 3.0f")

Tenga en cuenta que escalar un sprite, una imagen de interfaz de usuario o sus padres utilizando propiedades de transformación los distorsionará de esta densidad de píxeles constante, así que tenga mucho cuidado con las propiedades de escala y mantenga la mayor parte o la totalidad de su escena en una escala de 1.0 para simplificar.

Una última advertencia es que nada de esto determina qué tan grandes realmente terminan tus sprites en tu pantalla, eso está determinado por el tamaño de la ventana / pantalla del juego y el tamaño / FoV / ángulo de tu cámara. Para píxeles perfectos en 2D, también deberá asegurarse de que la altura de su ventana sea un múltiplo entero del número de píxeles de sprite que ve su cámara (altura ortográfica de la cámara x 2 x PPU)

DMGregory
fuente