Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Sutat

Pages: [1]
1
Graphique / Re : Combiner des sprites en une sprite unique
« le: Février 08, 2013, 06:48:27 pm »
Attention au RenderTexture.

J'ai ce problème en ce moment sur les vieilles machines :
Tu risques de créer une texture qui est trop grande pour la carte graphique.
Du coup un programme qui marche chez toi pourrait ne pas fonctionner chez quelqu'un d'autre.
Je ne me suis pas encore penché sur le problème mais en lisant le forum un peu au hasard (:p) j'ai vu Laurent parlé de BigTexture (librairie Thor) et de sf::Image (en gros refaire ce que fait Thor).

L'idée est de découper l'image en plusieurs petites textures.
Quand la texture est toute faite, c'est relativement facile (une texture en .png par exemple).
Mais quand tu dois la construire dynamiquement comme je le fais (donc dans un RenderTexture) je ne sais pas si c'est aussi simple.

Bon ce poste ne sert peut être à rien, mais je t'avertis au cas où.

2
Graphique / Re : Optimisation - Effet de lumière
« le: Février 08, 2013, 06:42:51 pm »
Quand je parle d'images pré calculées plus haut ce sont bien des images PNG que je fais sur gimp.
Ca marche plutôt bien, mais je dois prévoir des tailles de PNG différentes je pense si je veux beaucoup faire varier la taille de ma lumière.

Sinon c'est intéressant le TriangleFan, je ne connaissais pas non plus le TriangleStrip avant que Laurent m'en parle. A voir si ça marche bien pour faire un cercle composé d'autres cercles.. ce que j'ai fais dans mon petit bout de code, pour avoir plus de choix de dégradés.

3
Graphique / Re : Optimisation - Effet de lumière
« le: Février 08, 2013, 08:39:11 am »
Bon j'ai fais un vertex Array pour faire ma lumière en TriangleStrip.
C'est vrai que le dégradé est bien, mais si je veux faire des lumières d'une forme précise ça va vraiment pas être simple à la longue.

Je vais pour l'instant rester sur mes images précalculées, mais je garde ça de coté dans ma branche git :)

@Gregouar Le lien que tu m'as donné m'a pas mal inspiré.

Merci,

Voici la formule que j'utilisais pour construire un triangle, c'était pas super, j'avais des fois des points blanc qui apparaissait dans mon cercle, et des fois il y a un triangle en trop dans le cercle qui en superpose un autre :
        quarter = (360.0f / nbTriangles);
        for (float angle = 0.0f; angle <= 360.0f; angle += quarter)
        {
            va.append(center);
            va.append(sf::Vertex(sf::Vector2f(rayon * cosf(angle * PI / 180) + x, rayon * sinf(angle * PI / 180) + y), couleurExtremite));
            va.append(sf::Vertex(sf::Vector2f(rayon * cosf((angle + quarter) * PI / 180) + x, rayon * sinf((angle + quarter) * PI / 180) + y), couleurExtremite));
            va.append(sf::Vertex(sf::Vector2f(rayon * coeffIntermediaire * cosf(angle * PI / 180) + x, rayon * coeffIntermediaire * sinf(angle * PI / 180) + y), couleurIntermediaire));
            va.append(sf::Vertex(sf::Vector2f(rayon * coeffIntermediaire * cosf((angle + quarter) * PI / 180) + x, rayon * coeffIntermediaire * sinf((angle + quarter) * PI / 180) + y), couleurIntermediaire));
        }
        va.append(center);
 

4
Graphique / Re : Re : Optimisation - Effet de lumière
« le: Février 02, 2013, 07:52:10 pm »
Ah oui... Pourquoi ne pas plutôt utiliser un seul cercle rempli avec un dégradé de couleurs ?
Je le fais avec la solution précalculée. Mais sinon je ne sais pas comment on fait un dégradé de couleur avec SFML, je regarderais.

Citer
Le concept est bon, mais ton algorithme est bizarre. Normalement on dessine la scène directement sur la fenêtre puis on applique une surface contenant les effets de lumière en mode BlendMultiply. Je ne comprends pas ta façon de faire, peux-tu expliquer ?
En fait j'ai deux surfaces : la surface en niveau de gris et la surface de la scène (le jeu avec des sprites).
Ce que je fais c'est dessiner la surface de la scène APRES le niveau de gris en mode BlendMultiply.
Je le fais dans le sens contraire de ce que tu proposes.

Je viens de tester ce que tu proposes et ça fonctionne, je ne sais pas pourquoi je voyais ça dans l'autre sens, mais tu me diras une multiplication fonctionne dans les deux sens : a*b = b*a. :)

Je vais prendre ta solution, on utilise un RenderTexture en moins.

Citer
Les shaders (post-fx = shader sur tout l'écran) ne sont qu'un moyen de court-circuiter ce que fait la carte graphique. Donc tant que tu peux implémenter ton algorithme avec des trucs standards, et que ça ne requiert pas des opérations ridiculement lentes (genre accéder à une texture pixel par pixel), alors ça ne t'apportera rien de réimplémenter le truc avec un shader.
Très bien merci.

5
Graphique / Re : Optimisation - Effet de lumière
« le: Février 02, 2013, 05:28:31 pm »
Je dessine autant de cercle que de dégradé de lumière pour un faisceau de lumière et pour chaque frame.
Je pense que le problème vient de là.

Quand on lance l'application on ressent vraiment que ça ram, la lumière à du mal à suivre ma souris.
J'ai la solution de précalculer le cercle de lumière, mais ce sera moins joli si je zoom beaucoup.

Après sans parler de ça, est-ce que tu penses que c'est une bonne solution de passer par deux RenderTexture.
J'ai lu des topics qui parlent de post-fx mais je ne sais pas si ça vaut le coup pour ça.

6
Graphique / Optimisation - Effet de lumière
« le: Février 02, 2013, 04:09:00 pm »
Bonjour,

J'aimerais développer un petit jeu en 2D basé sur des effets de lumière.
Ca fait très longtemps que je n'ai pas développé en C++, je me suis souvenu que je jouais avec la SFML et que j'aimais bien donc je l'ai reprise, j'utilise la 2.0.

Voilà pour la petite histoire.
Mon problème est que j'ai l'impression que ma méthode pour faire mes effets de lumière va être très très gourmande quand je vois la petite maquette que je viens d'écrire.

Ma question est donc : avez-vous des axes d'optimisation ?

J'utilise deux RenderTexture :
  • gameTexture : Pour les sprites du jeu
  • blendTexture : Pour les effets de lumière

En gros je dessine mon jeu dans la gameTexture.
Puis mes effets de transparence en niveau de gris dans la blendTexture.
Je dessine la blendTexture sur le RenderWindow, puis la gameTexture en "BlendMultiply".

Ce qui donne :
blendTexture.clear();
        blendTexture.draw(rectangle);
        blendTexture.setSmooth(true);

        for (float radius = 1000.0f; radius > 200.0f; radius -= 2.0f) {
            sf::CircleShape circle(radius);
            int black = -0.30625 * radius + 316.25; // Droite
            circle.setFillColor(sf::Color(black, black, black));
            circle.setPointCount(radius/10);
            circle.setPosition(pos.x - radius, pos.y - radius);
            blendTexture.draw(circle);
        }

        blendTexture.display();

        gameTexture.clear();
        gameTexture.draw(sprite);
        gameTexture.display();

        sf::Sprite blend(blendTexture.getTexture());
        sf::Sprite game(gameTexture.getTexture());

        window.clear();
        window.draw(blend);
        window.draw(game, sf::BlendMultiply);
        window.display();
 

J'ai mis en pièce jointe le petit fichier de source complet de la maquette si ça intéresse.
Si vous voulez tester il faut mettre une image "115869.jpg" qui fait 1920x1080 (si votre résolution supporte) pour lancer l'application.

Merci,

[attachment deleted by admin]

Pages: [1]
anything