Forums Développement Multimédia

Aller au contenu

- - - - -

Utilisation de la transparence

CODE Actionscript

54 réponses à ce sujet

#46 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 23 May 2012 - 23:27 PM

Compris :)

#47 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 22 November 2012 - 10:01 AM

Salut,

je remonte ce sujet pour apporter quelques précisions sur des ajouts (pas forcément récents) mais qui concerne l'utilisation d'une ColorTransform. Il est en fait tout à fait possible d'avoir exactement le même mécanisme - et tout aussi simplement je pense - en utilisant la propriété diffuseTransform (disponible dans tous les matériaux proposés dans Minko).

Cette propriété est une matrice ce qui en fait un équivalent direct de ColorTransform, seul le nom change.

Voilà par exemple comment favoriser le rouge en réduisant les autres couleurs :


material.diffuseTransform = new Matrix4x4().appendScale(1.0, 0.1, 0.1);
 

Pour utiliser des offsets, il sufft d'appliquer une translation. Si vous considérez une couleur RGBA comme un simple Vector4 XYZW, alors toutes les manipulations deviennent relativement évidentes : les propriétés "offset" de la ColorTransform sont des translations, et les propriétés "scale" des... scale :)

Grâce au type HLSAMatrix4x4, il est même possible de travailler en espace HLSA au lieu de RGBA, ce qui peut-être très pratique pour tout simplement désaturer les couleurs par exemple ou les manipuler pour faire du tone mapping en post-processing.

L'utilisation d'une matrice au lieu d'un objet ColorTransform a un intérêt énorme : en utilisant une timeline MatrixTimeline, on peut animer cette propriété ! On peut donc faire clignoter les objets, leurs appliquer des transitions de couleurs, etc...

J'espère que ça peut en aider certain et surtout que ça clarifie le bien fondé de ne pas utiliser un objet ColorTransform.

a+

#48 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 25 November 2012 - 11:03 AM

Pour montrer le procédé, j'ai fait un petit exemple dispo. ici :

HLSA Example

J'espère que ça peut aider :)

Modifié par Jean-Marc Le Roux, 25 November 2012 - 11:52 AM.


#49 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 25 November 2012 - 16:35 PM

Cool !
C'est très intéressant cette manière d'utiliser les Matrix, je n'y aurais jamais pensé...

Merci pour l'exemple aussi ! Il commence à y en avoir pas mal maintenant, c'est super !
Ca donne envie en tout cas :)

#50 deleted

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 13 July 2013 - 12:23 PM

Bonjour,

Je tente depuis plusieurs semaines d'utiliser la transparence dans Minko sans y parvenir ; J'essaye de faire des couches de nuages qui se superposent.

Comme les nuages sont blanc je me suis dit que le mieux serait d'utiliser la propriété Blending.ADDITIVE.

Mais la superposition ne fonctionne pas : la couche supérieure s'additionne bien au fond mais désactive les couches de nuages qu'elle recouvre. Elle se superpose donc directement à mon fond.

En utilisant la propriété DepthTest.ALWAYS j'arrive à faire superposer les couches mais cette fois elle passent devant tous mes éléments, même mon décors qui est censé se trouver devant.

J'ai lu qu'une méthode kill() pouvait être utilisé pour palier à ça mais quand je l'utilise je perds les dégradés de mes nuages.

Voici des captures de ce que j'obtiens :
Image attachée: blending-additive-minko.jpg

Et ci-dessous vous pouvez voir la méthode getPixelColor() de mon Shader :

override protected function getPixelColor() : SFloat
{
        var diffuseMap:SFloat = sampleTexture( meshBindings.getTextureParameter('diffuseMap'), interpolate(vertexUV) );
       
        var float:SFloat = float4(diffuseMap.r,diffuseMap.r,diffuseMap.r,diffuseMap.r);
        kill(subtract(0.5, lessThan(diffuseMap.r, 0.5)));
       
        return diffuseMap;
}

Je n'arrive pas à trouver de solutions, quelqu’un aurait il déjà géré ce genre de chose ? Dans ce jeu réalisé avec Minko cela m'a l'air de très bien marcher : http://themirage.fr/

Merci d'avance !
// Damien
http://namide.com/

#51 deleted

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 13 July 2013 - 18:12 PM

A force d'acharnement j'ai finis par arrive à ce que je souhaitais :smile:

Image attachée: clouds-minko.jpg

Pour ceux que ça intéresse voici ce que j'ai fais :

Dans le Shader des nuages :
override protected function initializeSettings(settings : ShaderSettings) : void
{
        var blending : uint = meshBindings.getProperty(
                BasicProperties.BLENDING, Blending.ADDITIVE
        );

        settings.blending = blending;

        settings.depthTest = DepthTest.ALWAYS;
        settings.priority = 1000;
       
        super.initializeSettings(settings);
}

Et dans le Shader du background (qui est un Mesh) :
override protected function initializeSettings(settings : ShaderSettings) : void
{
        settings.depthTest = DepthTest.ALWAYS;
        settings.priority = 2000;
       
        super.initializeSettings(settings);
}

Par contre j'ai beaucoup de mal à comprendre ce qu'il se passe...
De ce que j'ai cru comprendre "settings.depthTest = DepthTest.ALWAYS" force l'affichage permanent des objets (ça active les superpositions du coup) et "settings.priority = x" oblige les objets à s'afficher à un moment "x" ; plus "x" étant grand, plus les objets sont affichés tôt, plus ils ont de chances de se faire superposer par d'autres.

En tous les cas ça a l'air de marcher !
// Damien
http://namide.com/

#52 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 16 July 2013 - 07:11 AM

Citation

De ce que j'ai cru comprendre "settings.depthTest = DepthTest.ALWAYS" force l'affichage permanent des objets (ça active les superpositions du coup) et "settings.priority = x" oblige les objets à s'afficher à un moment "x" ; plus "x" étant grand, plus les objets sont affichés tôt, plus ils ont de chances de se faire superposer par d'autres.
C'est presque ça :)

Le depth test indique quelle est la formule à utiliser pour comparer la profondeur des pixels et savoir lequel devra s'afficher "par dessus". En utilisant DepthTest.ALWAYS, tu dis à la carte graphique que quelque soit la profondeur du pixel, il doit être dessiné sans le comparer au reste.

#53 deleted

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 16 July 2013 - 08:40 AM

Voir le messageJean-Marc Le Roux, le 16 July 2013 - 07:11 AM, dit :

Le depth test indique quelle est la formule à utiliser pour comparer la profondeur des pixels et savoir lequel devra s'afficher "par dessus". En utilisant DepthTest.ALWAYS, tu dis à la carte graphique que quelque soit la profondeur du pixel, il doit être dessiné sans le comparer au reste.

Merci Jean-Marc,

C'est ce que vous avez utilisé pour le jeu http://themirage.fr/ ?
// Damien
http://namide.com/

#54 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 16 July 2013 - 21:22 PM

On utilise ça un peu partout... il me semble que c'est le cas dans TheMirage c'est trop vieux pour que j'en sois sûr :)

#55 alvinbe

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 08 August 2016 - 14:05 PM

cool thks pour l'info ...
Base email pour la prospection et e-marketing.



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

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