Unity3D - Como pavimentar sprites 2D?

8

Eu uso iluminação dinâmica de vértice em sprites 2D. Em sprites maiores, a iluminação é mais feia do que nos menores. Isso ocorre porque todo sprite é apenas um quad de dois triângulos. Não há vértices suficientes para a iluminação em áreas maiores.

Existe uma maneira de usar mais triângulos em um sprite? Talvez até dependendo de quanto espaço na tela eles cubram?

aggsol
fonte
11
Parece que você deseja subdividir seu quad? Se for esse o caso, existem alguns bons exemplos em pseudo-código para fazer isso. O Afaik Unity permitirá que você acesse uma malha de objetos do jogo (e seus triângulos / vértices), que deve permitir realizar o que você deseja. Aqui está um exemplo aqui no gamedev para subdividir quads: Como subdividir um quad? . É assim que você estava procurando?
Logham
Sim, subdividir um quad é a abordagem que estou procurando. Isso inclui enrolamentos e UVs, eu acho. Dessa forma, eu teria mais triângulos.
aggsol
Você já tentou usar um shader de mosaico ao desenhar seu sprite? docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html answers.unity3d.com/questions/583960/…
ClassicThunder
2
Quando você separa o quad, os valores de iluminação dos vértices serão apenas interpolados. O quad é plano, portanto, com mais vértices, a interpolação será linear em todo o quad. Como a adição de mais triângulos corrigirá esse problema. Isso soa como algo que deve ser resolvido com um pixel shader.
Arun R
@ArunR Bom ponto, mas se, por exemplo, o quadrilátero for maior que o alcance de uma luz pontual, o triângulo usará luz se o texto do texto não estiver mais aceso. Infelizmente, o uso do pixel shader não é uma opção em todos os dispositivos.
aggsol

Respostas:

2

Parece que você precisa criar seu próprio objeto de jogo e usar um algo de triangulação personalizado para lidar com os detalhes com base em algumas matemáticas relacionadas ao tamanho.

Talvez algo assim possa ajudar ...

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

Outras opções podem ser usar um sombreador mais inteligente e um mapa de relevo com suas abordagens de tipo de deslocamento de vértice sprite ....

É difícil dizer sem saber exatamente o que você está tentando alcançar quanto ao que melhor se encaixa. Espero que uma dessas ajudas.

Guerra
fonte
A idéia é usar luz de vértice nos sprites, pois é muito mais rápido que as luzes de pixel. Especialmente algumas plataformas móveis têm chips gráficos de baixa especificação.
aggsol
Então você está dizendo que você tem um quad grande que deseja dividir e, por vértice, acende o resultado? Você pode obter um resultado muito melhor e mais rápido usando a iluminação por pixel no IMO quad existente de baixa resolução, mas se é isso o que deseja, faça isso. Dividir um quad não deve ser muito difícil, certo?
War
Lembre-se de que o que você economiza com iluminação por pixel perderia efetivamente por ter buffers de vértice maiores ... a outra opção, é claro, é ter um pouco de matemática no shader de vértice para passar um nível de luz ao shader de pixel com base em uma parte do vértice para que você ainda tenha um VB pequeno e não aponte por pixel.
War
sucata a idéia ... que não vai funcionar ... hmmmm
War
11
Se você precisar de esclarecimentos sobre a questão, poste um comentário.
MichaelHouse