Forums Développement Multimédia

Aller au contenu

- - - - -

user interface en 2D

CODE Actionscript

8 réponses à ce sujet

#1 jsellam

    Ceinture Blanche

  • Members
  • Pip
  • 10 messages

Posté 09 July 2012 - 10:36 AM

Hello,
Quelle est la meilleur technique pour faire une interface utilisateur en 2D (basée sur stage3D / minko) ?
j'ai vu cet exemple : http://blogs.aerys.i...ets-with-minko/
Vous en pensez quoi ?

#2 jsellam

    Ceinture Blanche

  • Members
  • Pip
  • 10 messages

Posté 09 July 2012 - 11:53 AM

ah c'est bon, il faut utiliser un sprite et non directement un mesh : https://github.com/o...e9dd93fad0e85f8

#3 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 10 July 2012 - 09:59 AM

Salut,

à moins que tu veuilles faire des interfaces de fou furieux en 2,5D à la Scaleform, je pense que c'est un peu overkill d'utiliser de l'accélération matérielle. Pouvoir utiliser Flash (Pro) pour faire l'interface 2D par dessus la 3D, c'est sûrement un des gros avantages de Stage3D.

Après, il me semble évident que si tu veux faire de l'interface vraiment très poussée, il y'a effectivement pas mal de choses à faire avec Minko.

Donc tout dépend au final du ratio temps/complexité du résultat voulu que tu as en tête...

++

#4 jsellam

    Ceinture Blanche

  • Members
  • Pip
  • 10 messages

Posté 10 July 2012 - 11:59 AM

c'est pour du mobile, et je ne pense pas qu'utiliser du displaylist par dessus du stage3D soit la meilleur solution question performances non ?

Par contre, j'ai des problèmes de conflit entre des sprites (avec couche alpha) qui effacent d'autres sprites. Comment fonctionne les priorités ? ça semble très différent des moteurs 2d type starling ou ND2D

#5 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 10 July 2012 - 12:02 PM

salut

Citation

et je ne pense pas qu'utiliser du displaylist par dessus du stage3D soit la meilleur solution question performances non ?
ba question performance j'ai envie de dire qu'utiliser flash n'est pas une bonne idée

a+

#6 jsellam

    Ceinture Blanche

  • Members
  • Pip
  • 10 messages

Posté 10 July 2012 - 13:07 PM

Voir le messagepaodao, le 10 July 2012 - 12:02 PM, dit :

salut

ba question performance j'ai envie de dire qu'utiliser flash n'est pas une bonne idée

a+

Merci Paodao, pour l'instant sur mes téléphones de tests, j'ai de très bonnes perf avec minko, et l'avantage est de pouvoir en plus du mobile publier sur le web (avec un plugin distribué a plus de 95%)

#7 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 10 July 2012 - 18:19 PM

Si la display list ne change pas à chaque frame alors ça ne devrait pas ête un gros problème. Même sur mobile. Enfin tu me diras j'ai pas tout testé et certainement pas sur tous les mobiles :)

Normalement y'a un attribut "depth" sur les Sprite de Minko.

En gros tu veux faire l'interface 2D par dessus la 3D ?

#8 jsellam

    Ceinture Blanche

  • Members
  • Pip
  • 10 messages

Posté 11 July 2012 - 11:27 AM

Alors en fait, j'ai 4 niveaux on va dire :

- le décor qui est en "vrai" 3D
- des personnages qui sont en 2.5D, c'est a dire, des sprites toujours de face, mais don la taille change en fonction de la caméra
- des sprites eux aussi en 2.5D, placés dans le décor, qui changent de taille en fonction de la distance de la caméra, mais qui doivent être toujours devant le mesh 3D du décor
- une user interface en 2D (soit en displaylist soit en sprite, je verrais plus tard)

- le décor en 3D : ça fonctionne
- les sprites des personnages : ça fonctionne
- les sprites rendu en dernier, je ne sais pas comment faire le shader, je n'ai pas compris comment fonctionne le "priority" avec "depthSortDrawCalls" c'est bien ça que je dois utiliser dans mon shader ?

merci

#9 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 12 July 2012 - 10:08 AM

Citation

les sprites rendu en dernier

Normalement il est (très) rare de devoir influencer l'ordre de rendu puisque le z-buffer s'occupe de tout. Si tu as des problèmes de transparence, tu devrais plutôt regarder du côté de la fonction "kill" et de comment elle est utilisée dans le BasicShader. En gros, si la propriété 'alphaThreshold' est définie dans les bindings du Mesh, ça va killer tous les pixels dont l'alpha est inférieur à la valeur de cette propriété : ca evite que les pixels "transparents" soient écrits dans le frame buffer mais surtout dans le depth buffer, qui peut causer des problèmes d'occlusion en fonction de l'ordre de rendu.

Dans la plupart des cas, cette propriété est inutile ! En effet, si on trie les draw calls en mettant 'depthSortDrawCalls' dans les ShaderSettings, l'algorithme du peintre est utilisé pour s'assurer que les objets transparents seront rendus après les objets opaques et que le blending sera ainsi bien effectué.

Mais dans certains cas, ce tri ne fonctionne pas pour exactement les mêmes raisons que lorsqu'on l'utilisait pour trier des triangles dans Flash 10:
- certains mesh se "chevauchent" et ont une profondeur ambiguë qui ne permet pas de les afficher correctement
- certains mesh ont une géométrie telle qu'elle va s'occulter elle même; c'est à dire qu'un seul draw call va écrire plusieurs fois le même pixel et que le blending dépendra donc de l'ordre de dessin des triangles (c'est à priori le cas pour n'importe quel objet qui n'est pas convexe...)

Là pas le choix, il faut "kill" les pixels transparents.

Citation

comment fonctionne le "priority"
'priority' pour les Shader donne la priorité de la passe de rendu. Exemple: pour le shadow mapping la depth pass doit être faite avant la passe rendue car on en a besoin pour calculer les ombres projetée. La depth pass des objets projetant une ombre doit donc avoir une priorité supérieure à la passe de rendu des objets qui vont recevoir une ombre.

Cette priorité agit par passe de rendu. Pas par objet/draw call. Dans minko, tous les objets utilisant le même Shader vont être automatiquement rendu en une seule passe ce qui permet d'avoir de très bonnes performances sur le GPU.

Tu remarqueras d'ailleurs que l'on modifie la priorité du BasicShader et 'depthSortDrawCalls' en fonction de la valeur de la propriété 'blending':

https://github.com/a...cShader.as#L177


var blending : uint = meshBindings.getConstant(BasicProperties.BLENDING, Blending.NORMAL);


if ((blending & 0xff) == BlendingSource.SOURCE_ALPHA)
{
 settings.priority -= 0.5;
 settings.depthSortDrawCalls = true;
}
 

En gros, si on utilise le blending alpha alors on doit:
- s'assurer que cette passe de rendu se fera après une passe avec des objets opaques
- trier les draw calls de cette passe de rendu pour que les objets transparents se blendent correctement entre eux



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP