Unity3D - ¿Cómo teselar sprites 2D?

8

Utilizo iluminación dinámica de vértices en sprites 2D. En sprites más grandes, la iluminación es más fea que en los más pequeños. Esto se debe a que cada sprite es solo un quad de dos triángulos. No hay suficientes vértices para iluminar áreas más grandes.

¿Hay alguna manera de usar más triángulos en un sprite? ¿Quizás incluso dependiendo de cuánto espacio de pantalla cubran?

aggsol
fuente
1
¿Parece que quieres subdividir tu quad? Si ese es el caso, hay algunos buenos ejemplos en pseudocódigo para lograr esto. Afaik Unity te permitirá acceder a una malla de objetos del juego (y sus triángulos / vértices) que deberían permitirte lograr lo que deseas. Aquí hay un ejemplo de este tipo en gamedev para subdividir quads: ¿Cómo subdividir un quad? . ¿Está esto en la línea de lo que estabas buscando?
Logham
Sí, subdividir un quad es el enfoque que estoy buscando. Esto incluye bobinado y rayos UV, supongo. De esa manera tendría más triángulos.
aggsol
¿Has intentado usar un sombreador de teselación al dibujar tu sprite? docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html answers.unity3d.com/questions/583960/…
ClassicThunder
2
Cuando teselas el quad, los valores de iluminación de los vértices se interpolarán. El quad es plano, por lo que con más vértices, la interpolación será lineal en todo el quad. Cómo agregar más triángulos solucionará este problema. Esto suena como algo que debería resolverse con un sombreador de píxeles.
Arun R
@ArunR Buen punto, pero si, por ejemplo, el quad es más grande que el rango de un punto de luz, entonces el triángulo usará luz si el vértice ya no se ilumina. El uso del sombreador de píxeles lamentablemente no es una opción en todos los dispositivos.
aggsol

Respuestas:

2

Parece que necesita crear su propio objeto de juego y usar un algoritmo de triangulación personalizado para manejar los detalles en función de las matemáticas relacionadas con el tamaño.

Tal vez algo como esto podría ayudar ...

http://forum.unity3d.com/threads/tessellation-algorithms-for-polygons.228051/

Otras opciones podrían ser usar un sombreador más inteligente y un mapa de relieve con su sprite ... enfoques de tipo de desplazamiento de vértice.

Es difícil decirlo sin saber exactamente qué es lo que está tratando de lograr en cuanto a lo que podría encajar mejor. Esperemos que una de estas ayudas.

Guerra
fuente
La idea es usar la luz de vértice en los sprites, ya que es mucho más rápido que las luces de píxeles. Especialmente algunas plataformas móviles tienen chips gráficos de baja especificación.
aggsol
Entonces, ¿estás diciendo que tienes un quad grande que quieres dividir y luego por vértice de luz el resultado? Podría obtener un resultado mucho mejor y más rápido utilizando la iluminación por píxel en la IMO cuádruple de baja resolución existente, pero si eso es lo que desea, hágalo. Dividir un quad no debería ser demasiado difícil, ¿verdad?
Guerra
Tenga en cuenta que lo que ahorra al iluminar por píxel, lo perdería efectivamente si tuviera amortiguadores de vértices más grandes ... la otra opción, por supuesto, es tener algo de matemática en el sombreador de vértices para pasar un nivel de luz al sombreador de píxeles basado en una porción del vértice, por lo que aún obtienes un VB pequeño y no lo haces por píxel de luz.
Guerra
desechar esa idea ... eso no funcionará ... hmmmm
Guerra
1
Si necesita aclaraciones sobre la pregunta, publique un comentario sobre la pregunta.
MichaelHouse