Unity3D - Comment tesseller des sprites 2D?

8

J'utilise l'éclairage dynamique des sommets sur les sprites 2D. Sur les plus grands sprites, l'éclairage est plus laid que sur les plus petits. En effet, chaque image-objet n'est qu'un quadruple de deux triangles. Pas assez de sommets pour éclairer de plus grandes surfaces.

Existe-t-il un moyen d'utiliser plus de triangles sur un sprite? Peut-être même en fonction de la surface d'écran couverte?

aggsol
la source
1
Il semble que vous souhaitiez subdiviser votre quad? Si tel est le cas, il existe de bons exemples dans le pseudo-code pour y parvenir. Afaik Unity vous permettra d'accéder à un maillage d'objets de jeu (et ses triangles / sommets) qui devrait permettre d'accomplir ce que vous voulez. Voici un tel exemple ici sur gamedev pour les quads de plongée: Comment subdiviser un quad? . Est-ce que cela correspond à ce que vous cherchiez?
Logham
Oui, la subdivision d'un quad est l'approche que je recherche. Cela inclut le bobinage et les UV, je suppose. De cette façon, j'aurais plus de triangles.
aggsol
Avez-vous essayé d'utiliser un shader de pavage pour dessiner votre sprite? docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html answers.unity3d.com/questions/583960/…
ClassicThunder
2
Lorsque vous pavez le quadrilatère, les valeurs d'éclairage des sommets vont juste être interpolées. Le quad est plat, donc avec plus de sommets, l'interpolation sera juste linéaire sur l'ensemble du quad. Comment l'ajout de triangles résoudra-t-il ce problème? Cela ressemble à quelque chose qui devrait être résolu avec un pixel shader.
Arun R
@ArunR Bon point, mais si par exemple le quad est plus grand que la portée d'un point lumineux, alors le triangle utilisera la lumière si le sommet n'est plus éclairé. L'utilisation du pixel shader n'est malheureusement pas une option sur tous les appareils.
aggsol

Réponses:

2

On dirait que vous devez créer votre propre objet de jeu et utiliser un algo de triangulation personnalisé pour gérer les détails en fonction de certaines mathématiques liées à la taille.

Peut-être que quelque chose comme ça pourrait aider ...

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

D'autres options pourraient être d'utiliser un shader plus intelligent et une carte de relief avec vos approches de type déplacement de sprite ... vertex.

Il est difficile de dire sans savoir exactement ce que vous essayez de réaliser quant à ce qui pourrait vous convenir le mieux. Espérons que l'une de ces aides.

Guerre
la source
L'idée est d'utiliser la lumière vertex sur les sprites car elle est beaucoup plus rapide que les lumières pixel. En particulier, certaines plates-formes mobiles ont des puces graphiques de faible spécification.
aggsol
Donc, vous dites que vous avez un grand quad que vous souhaitez diviser, puis par sommet, allumez le résultat? Vous pouvez obtenir un résultat bien meilleur et plus rapide en utilisant un éclairage par pixel sur le quadruple IMO basse résolution existant, mais si c'est ce que vous voulez, allez-y. Le fractionnement d'un quad ne devrait pas être trop difficile, non?
Guerre du
Gardez à l'esprit que ce que vous enregistrez par éclairage par pixel, vous perdriez efficacement en ayant des tampons de sommet plus grands ... du sommet de sorte que vous obtenez toujours un petit VB et non par lumière pixel.
Guerre du
abandonner cette idée ... qui ne fonctionnera pas ... hmmmm
War
1
Si vous avez besoin d'éclaircissements sur la question, postez un commentaire sur la question.
MichaelHouse