[Index Software] Coin des développeurs :]

Pour les gens qui ont simplement envie de discuter sans souhaiter faire passer d'information particulière.
Message
Auteur
Avatar du membre
Bubu
Intarissable
Messages : 7738
Enregistré le : dimanche 19 mai 2013 à 12:03
Localisation : En haut à gauche

Re: Coin des développeurs :]

#601 Message par Bubu » mardi 27 novembre 2018 à 15:53

Je réfléchis à un système d'animations autonome.
Parce que dans Sqwap, j'ai répété le même code des centaines de fois.
On ne se rend pas compte, mais chaque variation de transparence, de taille, de position exige beaucoup de code.
Et beaucoup de paramètrage.

Je voudrais changer ça : qu'il n'y ait que les paramètres de l'animation à fournir.
Et que l'animation se fasse automatiquement en conséquence.

Donc il faut envisager : l'interpolation, le déplacement linéaire (voire avec accélération et décélération) , l'animation sinusoïdale, etc.
Mais ce n'est pas encore clair dans ma tête.
Il y a beaucoup d'animations qui fonctionnent pareil, que ce soit l'alpha, la taille par exemple.
Et je tiens à mon effet Marshmallow : c'est un scaling non uniforme ou les échelles horizontales et verticales sont opposées.

La réponse la plus adéquate, je crois, c'est de créer un Objet template ValueHolder<...>
En gros, tous les paramètres seraient définis comme ça. (taille, alpha, etc)

Par exemple :

alpha = new ValueHolder<float>();
Ensuite il faudrait la fournir à un animateur. (Mais il faudrait fournir la valeur min, la valeur max, et la vélocité de l'animation)
alphaAnimator = new LinearAnimator(ValueHolder alpha, float minValue, float maxValue, float velocity);
Il suffit d'appeler alphaAnimator.getValue() pour avoir le résultat utilisé pour rendre l'image.

[EDIT]
Je me suis compliqué la vie.
Il n'y a pas de raison de Créer des ValueHolder, vu que les références des objets sont passées par valeur...
J'ai tout revu.
Pour l'instant :
J'ai crée une classe abstraite Animator, qui ne prend que en compte si l'animation est en boucle, et quand elle est finie.
Et deux vraies implémentations,
LinearAnimator, qui prend en paramètre une valeur (un flottant) de début, une vélocité (initiale) et une accélération (Et éventuellement une valeur de fin).
InterpolationAnimator, qui prend un vecteur de valeurs (de flottants) de début, un vecteur de valeurs de fin, et une durée. (Beaucoup plus simple que LinearAnimator).
Il y aura peut-être des variantes.

Mais surtout, maintenant, le plus important, c'est que les valeurs soient mises à jour de manière invisible.
On les crée juste, et on ne fait que récupérer leurs valeurs.

Pour cela, j'ai créé des constructeurs non accessibles.
Seul l'objet "Game" peut les créer.
Donc il faut s'adresser à l'objet Game pour les créer. Et il les stocke dans sa petite liste personnelle, dans son coin.
Normal, car lui en échange les met à jour automatiquement (Selon le temps écoulé entre chaque frame) et les supprime. (Selon le statut de l'animation).

A suivre ... :innocent:

[EDIT 2]
J'ai fait un autre Animateur :
SinusAnimator, dont le rôle est de faire une sinusoïde au cours du temps.
Les paramètres sont l'angle initial, la vitesse angulaire, et les valeurs min et max que doit prendre la sinusoïde. (max - min = amplitude de la sinusoïde).

Sinon, j'ai abandonné l'idée de centraliser la mise à jour des animators : car si le système est mal utilisé, les animators s'accumulent dans l'objet Game sans qu'ils soient détruits.
Donc c'est à l'utilisateur de les mettre à jour manuellement.
Après c'est pas compliqué, c'est fait en une ligne :
animator.update(deltaTimeMillis);

... :roll:

[EDIT 3]
Je viens d'en créer un autre : SinusInterpolationAnimator
Son but est de faire une interpolation entre vecteurs de flottants, mais en suivant une sinusoïde.
Donc il prend en arguments 2 vecteurs de flottants qui sont interpolés via une sinusoïde. (dont les arguments sont l'angle initiale et la vitesse angulaire).
Mes unités sont un peu ésotériques par contre. Les angles sont exprimés en degrés, et la vitesse angulaire, en degrés par milliseconde. Mais c'est adapté pour mon cas.

C'est très utile pour faire des clignotements, des changements de couleur souples, et mon effet marshmallow, ou simplement des mouvements périodiques.

[EDIT 4 ]
Je me suis encore une fois compliqué la vie :
Il y a la méthode update(temps écoulé).
Et la méthode getValue().

Je vais les joindre, il n'y aura plus de méthode update, mais une seule méthode getValue(temps écoulé).
Cela simplifie tout, on met à jours les valeurs au moments où on veut les récupérer.
En précisant le temps écoulé. (Le temps écoulé entre chaque frame est fourni par le moteur en début de frame.)

[EDIT 5]
Lourdingue Premier au rapport. :bravo:
Il faudrait que j'encapsule ce paramètre "temps écoulé" aussi.
Game fournit le temps écoulé.
En interne, les animateurs l'utilisent.
Mais il y aura tjrs des animations particulières, qui auront besoin du temps écoulé.
Donc je suis dans le flou.

Et cela crée un problème :
Si une animation doit-être mise en pause, c'est impossible.
Alors que si c'est explicite, à chaque frame il suffit de dire que le temps écoulé est zéro (0).

[EDIT6]
Bon, j'ai encore changé le code. Je pense que c'est la bonne cette fois.
Maintenant, le temps doit être explicitement donné aux Animateurs au moment où l'on veut les valeurs, et il y en a de 4 types.
L'un permet de passer d'un réel à un autre via vitesse et accélération.
Un autre permet de faire une interpolation linéaire entre deux vecteurs de réels.
Un autre décrit une sinusoïde au cours du temps.
Et le dernier permet de faire une interpolation sinusoïdale entre 2 vecteurs de réels.

A ce stade, je ne crois pas avoir besoin d'autres.
On pourrait imaginer des interpolations selon Bézier, mais je pense que c'est inutile.

Bref, normalement le post est clos. :innocent:
TSA, diagnostic établi à mes 33 ans par le CRA de ma région.
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"

Avatar du membre
Tugdual
Modérateur
Messages : 40115
Enregistré le : jeudi 15 novembre 2012 à 0:13
Localisation : Nord-44
Contact :

Re: Coin des développeurs :]

#602 Message par Tugdual » jeudi 13 décembre 2018 à 19:14

TCS = trouble de la communication sociale (24/09/2014).

Avatar du membre
Tugdual
Modérateur
Messages : 40115
Enregistré le : jeudi 15 novembre 2012 à 0:13
Localisation : Nord-44
Contact :

Re: Coin des développeurs :]

#603 Message par Tugdual » mardi 18 décembre 2018 à 11:18

TCS = trouble de la communication sociale (24/09/2014).

Avatar du membre
Benoit
Intarissable
Messages : 8889
Enregistré le : lundi 28 septembre 2009 à 13:55
Localisation : オルセー
Contact :

Re: Coin des développeurs :]

#604 Message par Benoit » mardi 18 décembre 2018 à 11:27

Elles comportent la plupart du temps des annonces publicitaires et des trackers par exemple, la majorité basée sur des scripts JavaScript de tierce partie.
Euh, comment dire, ça n'est peut être pas uniquement JS le problème du coup. :mryellow:
Identifié Aspie (広島, 08/10/31) Diagnostiqué (CRA MP 2009/12/18)

話したい誰かがいるってしあわせだ

Être Aspie, c'est soit une mauvaise herbe à éradiquer, soit une plante médicinale à qui il faut permettre de fleurir et essaimer.

Avatar du membre
Tugdual
Modérateur
Messages : 40115
Enregistré le : jeudi 15 novembre 2012 à 0:13
Localisation : Nord-44
Contact :

Re: Coin des développeurs :]

#605 Message par Tugdual » mardi 18 décembre 2018 à 12:09

Il y a quand même énormément de choses réalisées en Javascript sans réelle plus-value.

Autant de script, pour la plupart du temps, juste afficher un peu de texte, quelques images et des liens...
TCS = trouble de la communication sociale (24/09/2014).

Avatar du membre
Benoit
Intarissable
Messages : 8889
Enregistré le : lundi 28 septembre 2009 à 13:55
Localisation : オルセー
Contact :

Re: Coin des développeurs :]

#606 Message par Benoit » mardi 18 décembre 2018 à 12:17

Ah je suis d'accord ça ne sert à rien, mais une partie du temps de latence est lié à la récupération de ces données inutiles là où elles sont hébergées, et ça n'est pas la faute du langage de script dans ce cas.
Identifié Aspie (広島, 08/10/31) Diagnostiqué (CRA MP 2009/12/18)

話したい誰かがいるってしあわせだ

Être Aspie, c'est soit une mauvaise herbe à éradiquer, soit une plante médicinale à qui il faut permettre de fleurir et essaimer.

Avatar du membre
Tugdual
Modérateur
Messages : 40115
Enregistré le : jeudi 15 novembre 2012 à 0:13
Localisation : Nord-44
Contact :

Re: Coin des développeurs :]

#607 Message par Tugdual » mardi 18 décembre 2018 à 12:51

C'est vrai.

On peut ajouter l'intégration de plus en plus fréquentes d'images non optimisées, pesantes de plusieurs centaines de Ko, voire parfois d'un ou deux Mo, souvent carrément en PNG...
TCS = trouble de la communication sociale (24/09/2014).

Avatar du membre
Bubu
Intarissable
Messages : 7738
Enregistré le : dimanche 19 mai 2013 à 12:03
Localisation : En haut à gauche

Re: Coin des développeurs :]

#608 Message par Bubu » vendredi 21 décembre 2018 à 15:27

Roi Parano Premier.
Je culpabilise car je poste des images en png.
Le format png est un format compressé sans perte.
Comme un fichier zip.
On peut aussi régler le taux de compression sur ce format (avec pertes), mais dans ce cas on opte plus pour jpg.
TSA, diagnostic établi à mes 33 ans par le CRA de ma région.
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"

Avatar du membre
Benoit
Intarissable
Messages : 8889
Enregistré le : lundi 28 septembre 2009 à 13:55
Localisation : オルセー
Contact :

Re: Coin des développeurs :]

#609 Message par Benoit » vendredi 21 décembre 2018 à 15:44

Pour un développeur d'appli, ça me semble indispensable de faire attention pour ses clients, vu que certains pays pratiquent encore l'accès internet "facturé au volume".

De toute façon ici, même des images "normales" sont parfois refusées par le filtre de taille.
Identifié Aspie (広島, 08/10/31) Diagnostiqué (CRA MP 2009/12/18)

話したい誰かがいるってしあわせだ

Être Aspie, c'est soit une mauvaise herbe à éradiquer, soit une plante médicinale à qui il faut permettre de fleurir et essaimer.

Avatar du membre
Bubu
Intarissable
Messages : 7738
Enregistré le : dimanche 19 mai 2013 à 12:03
Localisation : En haut à gauche

Re: Coin des développeurs :]

#610 Message par Bubu » lundi 31 décembre 2018 à 13:52

Benoit a écrit : vendredi 21 décembre 2018 à 15:44 Pour un développeur d'appli, ça me semble indispensable de faire attention pour ses clients, vu que certains pays pratiquent encore l'accès internet "facturé au volume".

De toute façon ici, même des images "normales" sont parfois refusées par le filtre de taille.
J'espère que tu as passé un joyeux réveillon de Noël.
Pour les jeux, le format jpg, ou tout format d'images compressées avec pertes est évité. (Pour ne pas dire proscrit).
Par contre on utilise des formats compressés que les GPU sont capables de décoder à la volée, en temps réel.
Ce n'est pas pour la taille du fichier sur le stockage, mais parce que la bande passante de communication CPU/GPU est très (toujours trop) basse.
Grâce à ces formats spécifiques de compression, on arrive à limiter le débit par 4.
De toute façon le goulot d'étranglement qui concerne la communication CPU vers GPU est LE problème principal de performance en 3D temps réel. Il faut au maximum (du coup) éviter les communications entre eux deux. Et le moins de draw-calls possible par image.
Pour cela on a à disposition par exemple l'instancing, qui permet de rendre en un seul draw call tous les objets identiques d'une scène en un seul draw-call (arbres, herbe, ...)
(On fournit une seule fois le mesh, et pour chaque instance la matrice de positionnement, ces matrices sont toutes envoyées d'un coup en un seul buffer au GPU)
C'est pareil pour les foules (un autre exemple), qui utilisent les skin-meshes (meshes élastiques qui se déforment en suivant des animations qui opèrent sur leurs squelettes, leurs os)
Là, on met les palettes de matrices dans des textures. Et on peut tracer tous les skin-meshes identiques en un seul tracé (draw call).

Bref, le problème est loin d'être lié à la seule capacité de stockage.
C'est plus lié à des questions de performances ici. (Moins d'échanges CPU/GPU, moins de draw-calls).

[EDIT]
L'idéal je crois serait d'arriver à une seule communication et un seul draw-call par frame.
Il faudrait pour cela pouvoir mettre une suite d'instructions haut-niveau dans le GPU (une suite de programmes pour GPU (shaders) ) à exécuter à la suite, sans communication via le CPU.
Mais c'est utopique. Et j'ai l'impression qu'aujourd'hui l'accent est plus porté sur le lancer de rayon.
TSA, diagnostic établi à mes 33 ans par le CRA de ma région.
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"

Avatar du membre
Bubu
Intarissable
Messages : 7738
Enregistré le : dimanche 19 mai 2013 à 12:03
Localisation : En haut à gauche

Re: Coin des développeurs :]

#611 Message par Bubu » lundi 31 décembre 2018 à 14:53

Je suis sûr que vous l'ignorez, mais vous avez tous un super-calculateur chez vous : le GPU.
En bref, le CPU est très bon pour faire plein de tâches à la suite (et en même temps depuis le multi-core).
A l’opposé, Le GPU est un monstre pour faire la même chose en même temps.

Pour simplifier, le CPU c'est le chef d'orchestre de votre ordinateur. Il gère tout.
Mais de temps en temps, (et beaucoup si vous jouez), il délègue les calculs au GPU.

L'architecture des deux est incomparable.
Le CPU : son architecture est SISD : single instruction, single data.
Une instruction pour une donné. Il fait un calcul à la fois, puis passe au prochain.

Le GPU : SIMD : single instruction, multiple data.
Sa capacité est de calculer la même chose sur des donnés multiples.
Un seul programme pour de multiples donnés.
Vous lui donnez une instruction et un ensemble de donnés. Instantanément, il va tout calculer.
(On se doute que c'est nécessaire pour l'infographie, il faut appliquer le même programme sur tous les pixels de votre écran).

Dans ce cas, votre GPU, sur votre carte graphique, est au moins 1000x plus rapide que le serait votre CPU.
Car il a des milliers de cœurs !
Le GPU ne fonctionne pas comme un CPU:
on lui donne une file d'instruction qu'il dispatche sur tous les cœurs.
Et on file à chacun des cœurs des données différentes.
Au niveau computationnel, c'est imparable.

Pour finir, les deux sont complémentaires. Chacun sa tâche.
Cette dualité GPU/CPU est nécéssaire.
TSA, diagnostic établi à mes 33 ans par le CRA de ma région.
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"

Avatar du membre
Tugdual
Modérateur
Messages : 40115
Enregistré le : jeudi 15 novembre 2012 à 0:13
Localisation : Nord-44
Contact :

Re: Coin des développeurs :]

#612 Message par Tugdual » jeudi 24 janvier 2019 à 20:46

TCS = trouble de la communication sociale (24/09/2014).

Avatar du membre
Bubu
Intarissable
Messages : 7738
Enregistré le : dimanche 19 mai 2013 à 12:03
Localisation : En haut à gauche

Re: Coin des développeurs :]

#613 Message par Bubu » lundi 4 février 2019 à 14:29

Connaissez-vous Unity ?
Je suis sûr que oui. Surtout si vous jouez.
C'est un moteur de jeu et de réalité virtuelle multi-plateforme.
Il supporte toutes les plateformes, (les consoles, les mobiles, les PCs)
La moitié des jeux aujourd'hui est développée grâce à Unity.
Seule ombre au tableau, il n'est (pas, très loin de l'être) libre.
Mais sous réserve d'une rémunération mensuelle sous un certain seuil, il est gratuit. Par contre on a droit à son logo au lancement du logiciel.
Sinon, c'est comme une location. Il faut verser un loyer tous les mois.
Il intègre évidemment un moteur graphique (2D et 3D), un moteur physique (2D et 3D), un système d'interfaces utilisateur. (Les fenêtres comme sous Windows, quoi :mrgreen: )
Les tutos sont pléthores, et les vidéos YouTube sont légions.
Selon ce que l'on veut développer, il faut connaître le C# et une variante de JavaScript.
Donc un langage managé et un autre interprété.

Bon, c'est une usine à fric mais seuls les gros studios l'utilisant en pâtissent et profitent à la boîte.
Pour les indés, c'est une aubaine.

(Nous comptons faire notre prochain jeu sous Unity)
TSA, diagnostic établi à mes 33 ans par le CRA de ma région.
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"

Avatar du membre
Nerevar
Nouveau
Messages : 5
Enregistré le : mardi 11 décembre 2018 à 0:08
Localisation : Versailles

Re: Coin des développeurs :]

#614 Message par Nerevar » jeudi 7 février 2019 à 23:57

Ce serait quoi, comme jeu? :)
Diagnostiqué depuis très jeune

Avatar du membre
Bubu
Intarissable
Messages : 7738
Enregistré le : dimanche 19 mai 2013 à 12:03
Localisation : En haut à gauche

Re: Coin des développeurs :]

#615 Message par Bubu » vendredi 8 février 2019 à 16:52

Nerevar a écrit : jeudi 7 février 2019 à 23:57 Ce serait quoi, comme jeu? :)
On ne sait pas encore. :innocent:
Sur la forme, on pense pour l'instant qu'on utilisera des graphismes 3D.
Ce sera sans doute un jeu de logique. (puzzle game).
TSA, diagnostic établi à mes 33 ans par le CRA de ma région.
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"

Répondre