rauw a écrit : ↑vendredi 15 novembre 2019 à 21:33
Bubu a écrit : ↑vendredi 15 novembre 2019 à 14:02
Toute mon enfance, j'ai été pourri par les performances pourries de mes ordis.
Mais copieux hein. Pourri puissance 10.000. Excusez du peu.
Soit on pouvait faire ce que l'on voulait, mais à la vitesse d'un escargot, BASIC.
Soit on programmait en langage machine. Je n'avait encore aucune connaissance en informatique (primaire), donc je n'y arrivais pas.
Et puis 30 ans plus tard, j'ai réalisé que cela avait changé. Oh malheur.
Au niveau graphismes pour notre jeu pour Android, je me suis lâché. J'ai quasiment pu faire tout ce que je voulais.
Programme Java et OpenGL.
Après il y a des salopes et des connards qui vont vous dire : Oui mais Java c'est un langage qui utilise une machine virtuelle, et il n'est pas performant.
Que nenni, je suis surpris d'avoir les mêmes performances sur un smart phone Android programmé en Java, que sur mon Ordi Windows x programmé en C++.
Les performances dépendent également du hardware ainsi que du code (donc des équipes de programmation/développement). Pour une tâche spécifique, un programme utilisant un algorithme optimisé en Java aura toutes ses chances d'être plus performant que du C++ mal codé.
La "loi de Wirth" évoque la stagnation (voire la diminution) des performances de programmes informatiques malgré l'augmentation de la puissance de calcul du matériel. Dans le web par exemple, j'ai remarqué qu'on incluait beaucoup de bibliothèques plus lourdes que nécessaire, ce qui surcharge les serveurs/clients.
Je ne sais pas si vous connaissez le HLSL. High Level Shader Language. Ils sont marrants. C'est le langage de programmation des GPUs pour DirectX (Microsoft).
En fait c'est pas le language qui est haut niveau, ce sont les GPUs.
C'est assez dingue ce qu'ils sont capables de calculer. (Une simple instruction pour calculer un produit scalaire, ou un produit vectoriel, une seule instruction pour multiplier un vecteur par une matrice. Et maintenant, ils ont des cœurs dédiés au lancer de rayon. C'est complètement fou)
EDIT : Le HLSL (DirectX) et le GLSL (OpenGL) sont très proches et très simples d'accès. Ils utilisent la syntaxe du C.
La seule chose en plus, c'est qu'ils ont des types en plus, pour représenter les vecteurs et les matrices. Et des instructions qui permettent de les manipuler.
Je préfère le GLSL perso, car le vertex shader et le pixel shader sont indépendants. Deux programmes indépendants. 2 fichiers textes indépendants. Le pixel shader est appelé fragment shader sous OpenGL, et c'est plus juste car on ne sait pas quand on calcule le fragment s'il sera visible ou pas. Et ensuite les vertex shaders il n'en faut pas beaucoup. (Skybox, objets statiques, et skin meshes en gros). Alors que les fragments shaders il peut y en avoir beaucoup. Plus d'une dizaine minimum.
Sous OpenGL, on compile les 2 programmes (Vertex et Fragment shaders) en temps réel et on les relie. (link). En temps réel. Et cela constitue après un seul programme que le GPU exécute.
Quelle que soit la plateforme, le vertex shader, et le pixel shader ne se suivent pas dans le pipeline graphique.
Il y a plein d'étapes intermédiaires.
Le vertex shader est là pour les transformations matricielles essentiellement. µPour placer les sommets des objets dans la scène.
Ensuite il peut y avoir le geometry shader, qui crée à la volée de la géométrie nouvelle.
Après il peut y avoir le shader de tesselation en plus. Je n'ai jamais utilisé.
Le plus important c'est l'unité de rastérisation. Elle transforme les sommets calculés par le vertex shader en surface sur l'écran.
Et la projection est déjà appliquée à cet étage du pipeline.
Pour simplifier : vertex shader -> rasterisation -> pixel shader.
L'unité de rastérisation rempli les triangles en fournissant les coefficients d'interpolations, via coordonnées barycentriques.
Le problème c'est que cela ne marche pas pour remplir les textures, il faut en plus prendre en compte la projection.
Plus un point est profond, et plus il est petit.
Mais pas de pb, les GPUs gèrent cela automatiquement depuis leur création.