Les nouveaux programmeurs graphiques devraient-ils apprendre Vulkan au lieu d'OpenGL?

53

Extrait du wiki : "Khrono a initialement désigné l'API Vulkan comme étant" l'initiative OpenGL de nouvelle génération "", et il s'agit d' un "effort de refonte en profondeur visant à unifier OpenGL et OpenGL ES en une API commune qui ne sera pas inversée" compatible avec les versions OpenGL existantes ".

Alors, est-ce que ceux qui se lancent maintenant dans la programmation graphique devraient être mieux servis pour apprendre Vulkan au lieu d’OpenGL? Il semble qu'ils serviront le même but.

galois
la source
1
Si vous pouvez faire quelque chose dans une API, vous pouvez le faire avec n'importe quelle autre API, la manière de le faire dépend de l'API.
A --- B

Réponses:

33

À peine!

Cela ressemble beaucoup à demander "Les nouveaux programmeurs devraient-ils apprendre le C ++ au lieu du C" ou "Les nouveaux artistes devraient-ils apprendre la peinture numérique au lieu de la peinture physique".

Surtout parce qu’il n’est PAS compatible avec les versions antérieures, les programmeurs graphiques seraient fous d’exclure les API graphiques les plus courantes du secteur, simplement parce qu’il y en a une nouvelle. De plus, OpenGL fait des choses différentes différemment. Il est tout à fait possible qu'une entreprise choisisse OpenGL plutôt que Vulkan, surtout si tôt dans le jeu, et que cette entreprise ne soit pas intéressée par quelqu'un qui ne connaît pas OpenGL, qu'ils connaissent ou non Vulkan.

La spécialisation est rarement une compétence commercialisable.

Pour ceux qui n'ont pas besoin de commercialiser leurs compétences en tant que telles, comme les développeurs indépendants, il serait encore PLUS stupide de supprimer un outil de leur boîte à outils. Un développeur indépendant dépend encore plus de la flexibilité et de la capacité de choisir ce qui fonctionne et ce qui est financé. Spécialisé dans Vulkan limite seulement vos options.

La spécialisation est rarement un paradigme efficace.

mHurley
la source
2
Bonne réponse, m'a rappelé cela: elise.com/quotes/heinlein_-_specialization_is_for_insects
Will
7
Cette analogie C ++ est inappropriée. Vulkan est une nouvelle API de nouvelle génération développée par les créateurs d'OpenGL. C ++ est un concurrent établi, principalement compatible avec la version antérieure de C.
Moby Disk
Ces détails ne sont pas pertinents au point de l'analogie.
mHurley
6
Revendiquer une spécialisation inefficace ou invendable est incroyablement naïf. Un traducteur qui connaît les cinq mots de chaque langue parlée est inutile, les gens vont embaucher des traducteurs qui maîtrisent (sont spécialisés dans) un petit nombre de langues. Maintenant, la surspécialisation est problématique. Un traducteur qui maîtrise parfaitement une langue et ne sait que cette langue n’est pas non plus un traducteur utile. Et les développeurs (indépendants ou non) doivent faire attention à ne pas passer tout leur temps à apprendre de nouveaux outils. Finalement, ils doivent réellement faire quelque chose à vendre, de peur de se retrouver en faillite
8bittree
Soyons clairs: je ne suis pas nécessairement en désaccord avec vous en ce qui concerne OpenGL et Vulkan. C’est peut-être un cas où apprendre les deux au lieu de Vulkan est le meilleur choix.
8bittree
40

Si vous débutez maintenant et que vous souhaitez travailler avec le processeur graphique (au lieu de toujours utiliser un moteur de jeu tel que Unity), vous devez absolument commencer par apprendre Vulkan. Peut-être devriez-vous apprendre GL plus tard aussi, mais il y a deux raisons de penser à Vulkan en premier.

  1. GL et GLES ont été conçus il y a de nombreuses années, lorsque les GPU fonctionnaient de manière très différente. (La différence la plus évidente étant le fait d'appeler des appels en mode immédiat par opposition à la file d'attente en mosaïque et aux commandes.) GL vous encourage à penser dans un style en mode immédiat et possède beaucoup d'héritage. Vulkan propose des modèles de programmation beaucoup plus proches du fonctionnement actuel des processeurs graphiques. Ainsi, si vous apprenez Vulkan, vous comprendrez mieux comment fonctionne réellement la technologie, ainsi que ce qui est efficace et ce qui est inefficace. Je vois beaucoup de gens qui ont commencé avec GL ou GLES et ont immédiatement adopté de mauvaises habitudes, telles qu'émettre des appels de tirage séparés par objet au lieu d'utiliser des VBO ou, pire encore, d'utiliser des listes d'affichage. Il est difficile pour les programmeurs GL de savoir ce qui n’est plus encouragé.

  2. Il est beaucoup plus facile de passer de Vulkan à GL ou GLES que l’inverse. Vulkan rend explicites un grand nombre d'éléments cachés ou imprévisibles dans GL, tels que le contrôle de la simultanéité, le partage et l'état de rendu. Cela soulève beaucoup de complexité du pilote à l'application: mais, ce faisant, il donne le contrôle à l'application et simplifie l'obtention de performances prévisibles et de la compatibilité entre différents fournisseurs de GPU. Si vous avez du code qui fonctionne dans Vulkan, il est assez facile de le transférer vers GL ou GLES, et vous vous retrouvez avec quelque chose qui utilise de bonnes habitudes GL / GLES. Si vous avez un code qui fonctionne dans GL ou GLES, vous devez presque recommencer pour le faire fonctionner efficacement dans Vulkan: surtout s'il a été écrit dans un style hérité (voir le point 1).

Au début, je craignais que Vulkan soit beaucoup plus difficile à programmer et que, même si ce serait acceptable pour les développeurs expérimentés des grandes entreprises, cela constituerait un énorme obstacle pour les indépendants et les amateurs. J'ai posé cette question à certains membres du groupe de travail, qui ont indiqué qu'ils disposaient de points de données provenant de personnes à qui ils avaient déjà parlé et qui s'étaient déjà installés à Vulkan. Ces personnes vont des développeurs d'Epic travaillant sur l'intégration UE4 aux développeurs de jeux amateurs. Selon leurs expériences, pour commencer (c’est-à-dire pour avoir un triangle à l’écran), il fallait apprendre plus de concepts et avoir un code standard plus long, mais ce n’était pas trop complexe, même pour les indépendants. Mais une fois arrivés à ce stade, ils ont trouvé beaucoup plus facile de créer une application réelle pouvant être expédiée, parce que (a) le comportement est beaucoup plus prévisible entre les implémentations de différents fournisseurs et (b) que l’obtention de résultats satisfaisants avec tous les effets activés n’implique pas autant d’essais et d’erreurs. Forts de ces expériences de développeurs réels, ils m'ont convaincu que la programmation contre Vulkan était viable, même pour un débutant en graphisme, et que la complexité générale était moins grande une fois que vous avez dépassé le tutoriel et commencé à créer des démos ou des applications que vous pouvez donner à d'autres personnes.

Comme d’autres l’ont dit: GL est disponible sur de nombreuses plateformes, WebGL est un bon mécanisme de livraison. De nombreux logiciels existants utilisent GL et de nombreux employeurs embauchent pour cette compétence. Il sera dans les prochaines années alors que Vulkan s'intensifiera et développera un écosystème. Pour ces raisons, il serait insensé d’exclure complètement l’apprentissage de GL. Malgré cela, vous aurez beaucoup plus de facilité avec cela et deviendrez un meilleur programmeur GL (et un meilleur programmeur GPU en général) si vous commencez avec quelque chose qui vous aide à comprendre le GPU au lieu de comprendre son fonctionnement. il y a 20 ans.

Bien sûr, il y a une option de plus. Je ne sais pas si cela vous concerne en particulier, mais j'estime que je devrais le dire de toute façon aux autres visiteurs.

Pour être un développeur de jeux vidéo indépendant ou un concepteur de jeux, ou pour faire des expériences de réalité virtuelle, vous n'avez pas besoin d'apprendre Vulkan ou GL. Beaucoup de gens commencent avec un moteur de jeu (Unity ou UE4 sont populaires en ce moment). En utilisant un tel moteur, vous pourrez vous concentrer sur l'expérience que vous souhaitez créer plutôt que sur la technologie qui le sous-tend. Cela vous cachera les différences entre GL et Vulkan, sans que vous ayez à vous soucier de ce qui est pris en charge sur votre plate-forme. Cela vous permettra de vous familiariser avec les coordonnées 3D, les transformations, l'éclairage et l'animation sans avoir à traiter tous les détails en même temps. Certains studios de jeu ou de réalité virtuelle ne fonctionnent que sur un moteur et ne disposent pas du tout d'un expert GL à temps plein. Même dans les grands studios qui écrivent leurs propres moteurs, ceux qui font la programmation graphique sont une minorité,

En savoir plus sur la manière d'interagir avec un processeur graphique est certainement une compétence utile que de nombreux employeurs apprécieront, mais vous ne devriez pas avoir l'impression d'apprendre à en faire autant pour la programmation 3D; et même si vous le savez, ce ne sera pas nécessairement quelque chose que vous utiliserez tous les jours.

Dan Hulme
la source
2
Je suis un peu en désaccord. Vulkan (et DX12) s’est avéré très difficile à mettre en œuvre, pour les développeurs expérimentés . Avec toute la puissance que Vulkan vous donne, il est très facile de se tirer une balle dans le pied. De plus, Vulkan nécessite beaucoup plus de code passe-partout. Pour quelqu'un qui vient juste d'apprendre la programmation GPU, j'ai tendance à penser que Vulkan sera très pénible.
RichieSams
2
@RichieSams Je ne pense pas que vous vouliez dire "mettre en œuvre". Seul le fournisseur de GPU doit implémenter Vulkan, et c'est beaucoup plus facile que d'implémenter OpenGL. (Croyez-moi, je l'ai fait!) Mais en supposant que vous vouliez dire qu'il est difficile d'intégrer ou de programmer, j'ai ajouté un paragraphe avec des informations que j'ai apprises du groupe de travail Vulkan.
Dan Hulme
Correct. Mettre en œuvre est peut-être un mauvais choix de mots. Je voulais dire «utiliser» dans votre programme. Mais j'aime tes modifications. Bien mis
RichieSams
@DanHulme - Je suis surpris de votre commentaire "GL vous encourage à penser dans un style immédiat". Je pensais que ce n'était vrai que pour les premières versions d'OpenGL?
ToolmakerSteve
1
@ToolmakerSteve Le groupe de travail OpenGL a consacré beaucoup de travail à l'ajout d'écritures en simultanéité et par lots, de sorte que vous puissiez exprimer votre programme de manière appropriée pour les implémentations en mosaïque / différée. Mais c'est toujours une base qui a été établie dans l'ère du mode immédiat, c'est pourquoi ces personnes ont décidé qu'un nouveau départ à Vulkan était nécessaire. Et je vois encore beaucoup de nouveaux utilisateurs commençant par GL et formant un modèle mental en mode immédiat du fonctionnement des implémentations.
Dan Hulme
26

L'apprentissage de la programmation graphique ne se limite pas à l'apprentissage des API. Il s'agit d'apprendre comment fonctionne le graphique. Transformations de vertex, modèles d'éclairage, techniques d'ombre, mappage de texture, rendu différé, etc. Celles-ci n'ont absolument rien à voir avec l'API que vous utilisez pour les implémenter.

La question est donc la suivante: voulez-vous apprendre à utiliser une API? Ou voulez-vous apprendre les graphiques ?

Pour pouvoir utiliser des graphiques à accélération matérielle, vous devez apprendre à utiliser une API pour accéder à ce matériel. Mais une fois que vous avez la possibilité de vous connecter au système, votre apprentissage graphique cesse de se concentrer sur ce que l'API fait pour vous et se concentre plutôt sur les concepts graphiques. Éclairage, ombres, reliefs, etc.

Si votre objectif est d'apprendre les concepts graphiques, vous passerez moins de temps avec l'API à ne pas passer à l' apprentissage de concepts graphiques . Comment compiler des shaders n'a rien à voir avec les graphiques. Ni comment leur envoyer des uniformes, comment télécharger des données de vertex dans des tampons, etc. Ce sont des outils et des outils importants pour le travail graphique.

Mais ils ne sont pas réellement des concepts graphiques. Ils sont un moyen d'atteindre un but.

Il faut beaucoup de travail et d’apprentissage avec Vulkan avant de pouvoir arriver au point où vous êtes prêt à apprendre les concepts graphiques. La transmission de données à des shaders nécessite une gestion explicite de la mémoire et une synchronisation explicite des accès. Et ainsi de suite.

En revanche, atteindre ce point avec OpenGL nécessite moins de travail. Et oui, je parle d'OpenGL, un profil de base basé sur un shader, moderne.

Il suffit de comparer ce qu'il faut pour faire quelque chose d'aussi simple que d'effacer l'écran. En vulkan, cela nécessite au moins un peu de compréhension d'un grand nombre de concepts: tampons de commande, files d'attente de périphériques, objets de mémoire, images et diverses constructions WSI.

OpenGL ... il est trois fonctions: glClearColor, glClearet les tampons d'échange spécifiques à la plate - forme appel. Si vous utilisez OpenGL plus moderne, vous pouvez le réduire à deux: glClearBufferuivet permuter les tampons. Vous n'avez pas besoin de savoir ce qu'est un framebuffer ou d'où provient son image. Vous effacez-le et permutez les tampons.

Etant donné qu'OpenGL vous cache beaucoup, il vous faut beaucoup moins d'efforts pour en arriver au point où vous apprenez réellement les graphiques, par opposition à l'interface avec le matériel graphique.

De plus, OpenGL est une API (relativement) sûre. Il y aura des erreurs lorsque vous faites quelque chose de mal, généralement. Vulkan n'est pas. Bien qu'il existe des couches de débogage que vous pouvez utiliser pour vous aider, l'API Vulkan de base ne vous dira presque rien, sauf en cas de défaillance matérielle. Si vous faites quelque chose de mal, vous pouvez obtenir un rendu non conforme ou planter le GPU.

Couplé à la complexité de Vulkan, il devient très facile de faire la mauvaise chose par accident. Oublier de définir une texture sur la bonne disposition peut fonctionner dans une mise en œuvre, mais pas dans une autre. Oublier un point de synchronisation peut parfois fonctionner, mais échouer soudainement sans raison. Et ainsi de suite.


Cela dit, l’apprentissage des graphiques ne se limite pas à l’apprentissage des techniques graphiques. Il y a un domaine en particulier où Vulkan gagne.

Performance graphique .

Être un programmeur graphique 3D nécessite généralement une idée de la façon d'optimiser votre code. Et c’est ici que la dissimulation d’informations par OpenGL et son comportement dans le dos deviennent un problème.

Le modèle de mémoire OpenGL est synchrone. L'implémentation est autorisée à émettre des commandes de manière asynchrone tant que l'utilisateur ne peut pas faire la différence. Ainsi, si vous rendez le rendu d'une image et essayez de la lire, l'implémentation doit générer un événement de synchronisation explicite entre ces deux tâches.

Mais pour atteindre les performances dans OpenGL, vous devez savoir que les implémentations le font de manière à pouvoir l' éviter . Vous devez savoir où l'implémentation publie secrètement des événements de synchronisation, puis réécrire votre code pour les éviter autant que possible. Mais l'API elle-même ne rend pas cela évident. vous devez avoir acquis cette connaissance quelque part.

Avec Vulkan ... vous êtes celui qui doit émettre ces événements de synchronisation. Par conséquent, vous devez être conscient du fait que le matériel n'exécute pas les commandes de manière synchrone. Vous devez savoir quand vous devez émettre ces événements et vous devez donc savoir qu'ils ralentiront probablement votre programme. Donc, vous faites tout ce que vous pouvez pour les éviter.

Une API explicite comme Vulkan vous oblige à prendre ce type de décision en matière de performances. Et par conséquent, si vous apprenez l’API Vulkan, vous avez déjà une bonne idée de ce qui va être lent et de ce qui va être rapide.

Si vous devez effectuer un travail sur le framebuffer qui vous oblige à créer un nouveau renderpass, il y a de fortes chances qu'il soit plus lent que si vous pouviez l'intégrer dans un sous-passe séparé d'un renderpass. Cela ne signifie pas que vous ne pouvez pas faire cela, mais l'API vous avertit que cela pourrait entraîner des problèmes de performances.

Dans OpenGL, l'API vous invite fondamentalement à modifier les pièces jointes de votre framebuffer bon gré mal gré. Il n'y a aucune indication sur les modifications rapides ou lentes.

Dans ce cas, apprendre Vulkan peut vous aider à mieux apprendre à créer des graphiques plus rapidement. Et cela vous aidera certainement à réduire les frais généraux du processeur.

Il faudra encore beaucoup de temps avant de pouvoir apprendre les techniques de rendu graphique.

Nicol Bolas
la source
1
Je suis heureux que vous ayez posté ceci, car il indique clairement certaines idées que j’avais hésité à exprimer dans ma réponse: l’apprentissage des concepts est d’une importance capitale. Je pense que la différence, c’est que vous encouragez GL parce qu’il est plus facile de commencer, alors que cette facilité permet de commencer à faire les choses de manière héritée. Il est assez difficile de savoir dans GL ce qu'est le "langage moderne" par rapport à la programmation dans un style traditionnel. Si personne ne vous conseille d'utiliser des VAO au lieu d'un appel de tirage séparé par primitive, il est beaucoup plus difficile de désapprendre cette erreur ultérieurement.
Dan Hulme
1
@ DanHulme: Tout est une question d'utilisation du bon matériel d'apprentissage. Il existe de nombreux matériaux en ligne utilisant des idiomes modernes. Personne ne devrait jamais essayer d'apprendre les graphiques en lisant simplement un manuel de référence ou une spécification.
Nicol Bolas
Vous faites que ça sonne vraiment facile! Malgré tout, je vois encore des programmeurs se lancer dans le graphisme - certains d'entre eux très compétents dans d'autres domaines - et utiliser des fonctionnalités anciennes sans rien apprendre des caractéristiques de performance. C'est vraiment difficile de se tromper à Vulkan, parce que cela rend les choses chères plus chères. De toute façon, nous n'avons pas besoin de discuter. Je suis d’accord avec votre argument principal: l’apprentissage des concepts est primordial et vous pouvez le faire sans Vulkan ou GL.
Dan Hulme
@DanHulme: " C'est vraiment difficile de se tromper dans Vulkan " Parce que vous êtes trop occupé pour tout faire autrement ;) De plus, il est toujours assez facile de se tromper dans les performances de Vulkan. Synchronisation inutile. Utiliser uniquement la mise en page "générale". Ne pas profiter des sous-passes. Changements fréquents de pipeline. Et ainsi de suite. Sans oublier que différents vendeurs ne s'entendent même pas sur la meilleure façon d'utiliser Vulkan.
Nicol Bolas
2
@ DanHulme: Quant à la facilité d'utilisation de OpenGL moderne, je fais de mon mieux pour le rendre facile . Si des personnes insistent pour apprendre des déchets comme NeHe ou pour lire une documentation aléatoire, personne ne peut les aider. Vous pouvez conduire les chevaux à l’eau, mais vous ne pouvez pas les faire boire.
Nicol Bolas
7

Le principal attrait d'OpenGL (du moins pour moi) est qu'il fonctionne sur de nombreuses plates-formes. Actuellement, Vulkan ne fonctionne pas sur OSX et Apple a une API concurrente appelée Metal. Il est fort possible que Apple ne prenne en charge Vulkan dans un certain temps et que, dans ce cas, le support Vulkan n'atteigne que son dernier matériel. OpenGL supporte déjà la plupart des matériels et continuera à le faire.

Gavin Higham
la source
Je parierais que si OSX supportait un jour Vulkan, il n'en supporterait qu'un petit sous-ensemble, et que cela deviendrait également l'API graphique Next Generation pour les navigateurs Web, OpenGL est toujours beaucoup plus simple à utiliser (dans une certaine mesure bien sûr) que Vulkan, ce que vulkan gagne en simplicité en rendant le pipeline il le perd en traitement explicite de beaucoup d'autres choses
GameDeveloper
1
Le mode immédiat de @DarioOO OpenGL est beaucoup plus simple à utiliser que ce que vous appelez la chose qui n'est pas en mode immédiat, mais ce n'est pas recommandé.
user253751
1
@Gavin: Il convient de noter que les versions OpenGL 4.2 ou supérieures ne sont pas non plus prises en charge sur OSX. Donc, si vous voulez utiliser quelque chose de récent d'OpenGL sur OSX, vous ne pouvez pas. Et il est peu probable qu'Apple adopte les versions ultérieures d'OpenGL. La plate-forme Apple est entièrement intégrée au Metal, ce qui fait que multiplate-forme est un vrai casse-tête dans les deux sens.
Nicol Bolas
Apple ne soutiendra jamais Vulkan à moins d'y être contraint, et les aspects économiques sont assez simples. En se mêlant à Metal, ils espèrent pouvoir attirer les développeurs de jeux mobiles qui ont besoin de plus que GLES2 mais ne disposent pas des ressources nécessaires pour écrire leurs jeux à la fois pour Vulkan et Metal. Ils sont prêts à sacrifier le petit écosystème de jeu de Mac pour cela, surtout si les développeurs iOS sont également disponibles sur le Mac App Store.
Jonathan Baldwin
Vulkan fonctionne maintenant sur macOS (anciennement OS X): moltengl.com
Alexander
4

Cela dépend de ce que vous voulez faire. Si vous voulez apprendre la programmation graphique uniquement pour vous-même, peu importe ce que vous choisissez.

Si vous songez à un travail professionnel, je vous recommande Vulkan. C'est plus proche du matériel et je pense que la connaissance du matériel est importante pour les programmeurs graphiques.

Vulkan est plus proche du matériel parce qu'OpenGL fait beaucoup de choses sous le capot que vous faites manuellement dans Vulkan, comme exécuter la file d'attente de commandes. La gestion de la mémoire dépend également de l'application et non du pilote. Vous devez vous préoccuper de l’allocation de mémoire pour uniforms(variable que vous passez de CPU à GPU), de leur suivi. Vous avez plus de choses à vous inquiéter, mais cela donne aussi plus de liberté d'utilisation de la mémoire. Cela peut sembler effrayant et accablant mais ce n’est vraiment pas le cas. Ce n'est que la prochaine API que vous devez apprendre.

Comprendre ces choses vous aidera également à comprendre le fonctionnement du GPU. Ce qui vous permettra d’optimiser à la fois sur Vulkan et sur OpenGL.

Et une dernière chose qui me vient à l’esprit, si vous commencez à apprendre la programmation graphique, probablement lorsque vous chercherez un emploi, car un Vulkan sera plus populaire (peut-être plus populaire que OpenGL). De plus, pour autant que je sache, la plupart des entreprises qui utilisent une API graphique écrivent leurs propres fonctions autour de celle-ci, il est donc possible que, sur le poste, vous n'écriviez pas dans OpenGL ni dans Vulkan, mais des connaissances sur le GPU seront toujours utiles.

Derag
la source
2

Cela fait quelques mois que je «me familiarise avec» la programmation graphique.

En ce moment, je suis toujours au lycée et je peux vous dire que je cherche presque toujours à développer des applications multiplates-formes. C'est en fait mon problème numéro un avec Vulkan - Il n'est pas développé pour fonctionner sur toutes les plateformes. Je travaille avec OpenGL en Java depuis plus de 6 mois.

Un autre problème que j'ai avec les revendications de Vulkan est de savoir comment il prétend être meilleur. Alors que OpenGL ne met certainement pas à jour leur site web très souvent. Ils continuent à publier constamment des mises à jour et j'attends toujours avec impatience les nouvelles mises à jour qui s'exécutent plus rapidement ou fonctionnent mieux avec le nouveau matériel.

Cela étant dit, bien que je travaille principalement avec OpenGL, je comprends les principes de base de DirectX et de Vulkan. Bien que je ne travaille pas beaucoup avec eux, particulièrement Vulkan, car il est très difficile à apprendre et pas aussi structuré pour la programmation qu'OpenGl et DirectX.

Enfin, je voudrais ajouter que la spécialisation dans un seul domaine, comme j’utilise principalement Java et OpenGL, n’est pas étonnamment autonome. Si je voulais obtenir un emploi dans une entreprise de création de jeux, OpenGL ne serait généralement utilisé que pour créer des jeux destinés au développement sous Linux et Android et éventuellement à OSX. DirectX pour Windows et consoles <Quel Vulkan peut remplacer dans certains cas.

Je ne peux pas supporter les mises à jour OpenGL pour toujours, et je ne le ferai pas. Mais c'est ma préférence pour le développement.

Winter Roberts
la source
" Un autre problème que j'ai avec les revendications de Vulkan est la façon dont il prétend être meilleur. " Vulkan ne prétend pas être quoi que ce soit. C'est juste une API; il ne peut pas faire de réclamations.
Nicol Bolas
Vous vous rendez compte que Vulkan et GL sont fabriqués principalement par les mêmes personnes?
Dan Hulme
Oui. Je préfère toujours GL
Winter Roberts
2

Je voudrais vous donner mon point de vue graphique débutant sur le sujet. Ce que j'ai compris (au cours de nombreuses années en tant qu'ingénieur dans un autre domaine), c'est que les concepts fondamentaux sont la partie la plus importante. Une fois que vous avez une bonne compréhension de ces éléments, l’apprentissage de la dernière nouvelle API brillante est la partie la moins difficile. Je ne sais pas si vous êtes un jeune amateur tentant de programmer le nouveau Skyrim ou si vous recherchez un emploi dans le domaine de la technologie de l'information.

Je vous dis ce que je pense que c'est la meilleure approche à mon avis pour apprendre l'infographie "comme un pro".

  1. Apprenez l'algèbre linéaire et la géométrie comme un pro. Sans cela, oubliez toute API ou tout graphique sophistiqué
  2. Achetez un bon livre sur l'infographie (p. Ex. Fondements de l'infographie )
  3. Pendant que vous étudiez le livre, configurez un environnement de programmation avec quelque chose qui vous permette de dessiner sur une image et de mettre en œuvre les algorithmes! Ce peut être Java 2D ou C ++ et SDL ou même Python et Pygame. À ce stade, vous devez mettre en marche vos engrenages texturés en rotation avec plusieurs vues de caméra avant d' essayer d'obtenir 10000 FPS.
  4. Maintenant, prenez OpenGL, Vulkan ou DirectX et répétez votre exemple (voir ci-dessus).

Commencer à se soucier de la performance avant de comprendre comment tracer une ligne, c'est comme se soucier de l'aérodynamisme de votre voiture avant d'obtenir le permis de conduire.

Ingframin
la source
0

Je suis autodidacte en C ++ sans aucune éducation formelle et au cours des 15 dernières années, j'ai appris OpenGL 1.0 à travers Modern OpenGL et DirectX 9c, 10 et 11. Je ne suis pas entré dans DirectX 12 et je voulais essayez-moi à Vulkan. J'ai seulement terminé quelques tutoriels de base pour dessiner un simple triangle ou un simple cube en rotation avec Vulkan. Comme avec DirectX 11 et OpenGL 3.3+, j'ai écrit des moteurs de jeu 3D entièrement opérationnels et les ai même utilisés pour créer des jeux simples.

Je dois dire que cela dépend de l'environnement général de la personne qui apprend. Si vous vous lancez dans la programmation graphique 3D, je dirais que, pour commencer, il convient de passer à OpenGL ou à DirectX 11, car il existe de nombreux tutoriels, ressources, exemples et applications qui fonctionnent déjà. Apprendre les graphiques 3D n’est en aucun cas un sujet facile.

Si nous faisons abstraction de l’aspect programmation et que nous nous concentrons simplement sur le type de techniques utilisées impliquant les différents niveaux de mathématiques menant à des ensembles de données et à des structures et algorithmes de données; Avant de pouvoir même créer un moteur de jeu 3D ou en utiliser un déjà existant, vous devez connaître et comprendre beaucoup de choses.

Maintenant, si vous comprenez déjà toutes les notions mathématiques et théoriques et que vous avez une certaine expérience en programmation, vous pouvez utiliser les API, bibliothèques et applications existantes, telles que Unity ou Unreal Engine, et simplement écrire le code source et les scripts dont vous avez besoin pour faire fonctionner votre application. .

Donc, de ma propre compréhension et de la façon dont je vois les choses, voici si vous cherchez à créer un jeu rapide juste pour créer un jeu; aller avec des cadres déjà existants qui rendraient votre temps de production beaucoup plus petit. D'autre part, si vous souhaitez comprendre le fonctionnement interne de la conception des moteurs de jeu / moteurs de physique / moteurs d'animation et des simulateurs et si vous souhaitez en créer un vous-même, vous avez le choix entre choisir votre API, telle que DirectX, OpenGL ou Vulkan. Votre connaissance de la programmation existante serait également l’un des facteurs déterminants. Ce que je veux dire par là est que si vous ne connaissez rien au multi-threading, aux appels synchrones ou asynchrones, aux barrières de mémoire, aux courses de données, aux sémaphores et au parallélisme (programmation parallèle),

Je mentionne cela parce que si vous ne savez pas comment gérer correctement votre mémoire avec vos threads et le temps d'accès; Vulkan va te mordre dans le cul! Où OpenGL et DirectX vous tiendrons au courant tout en consommant beaucoup plus de puissance de calcul.

Maintenant, si votre niveau de connaissance en programmation est correct et que vous avez les antécédents mathématiques suivants qui concernent tous les niveaux d’Algèbre, Géométrie, Trigonométrie, Algèbre Booléenne, Probabilités, Statistiques, Algèbre à base de matrices vectorielles, Calcul I, II, .... Infinty (lol). Calcul vectoriel, Algèbre linéaire, Systèmes d'équations linéaires, Géométrie analytique avec calcul vectoriel de calculs à variables multiples, Théorie des nombres et des ensembles, Ensembles de données et structures, Analyse informatique, Conception algorithmique et algorithmique. Ensuite, vous pourrez entrer dans les concepts de ce qu’il faut pour créer un moteur de jeu réel, sans aucune mathématique appliquée ni aucune équation de physique dont vous aurez besoin. Une fois que vous avez cette expérience et suffisamment d'expérience en programmation, notamment la gestion de la mémoire et l'arithmétique des pointeurs, vous pouvez commencer à créer votre moteur de jeu.

Vous devez donc comprendre tous les aspects de la création d’un moteur de jeu afin de faire de la programmation graphique avancée. Si vous ne faites que des graphiques 2D, la vie n’est pas compliquée, car vous pouvez le faire en Python sans l’une des API susmentionnées! Mais si vous voulez être sérieux et concevoir un moteur de jeu complet à la fois robuste et robuste, avec de nombreux jeux de fonctionnalités, vous pouvez choisir entre C ou C ++ et utiliser OpenGL, Direct X ou Vulkan. N'importe lequel d'entre eux irait bien. Maintenant, si vous construisez le moteur à partir de zéro et que vous recherchez le moteur le plus "efficace" avec le moins de surcharge de ressources, choisissez Vulkan. Mais si vous allez dans cette voie, vous devriez au moins savoir tout ce que j'ai mentionné ci-dessus et quelques-uns!

Comme vous pouvez le constater, Vulkan n’est pas vraiment destiné aux programmeurs débutants dans ce domaine. Vous devez avoir une connaissance approfondie de tous les maths, paradigmes de programmation, tous les différents types de jeux de données et d'algorithmes, y compris le threading, la synchronisation de la mémoire, la programmation parallèle. Et même dans ce cas, il s’agit simplement d’amener l’application à charger un simple triangle 2D sur l’écran. Ce qui peut être fait dans environ 100 lignes de code dans OpenGL ou dans 250 lignes de code dans DirectX prend près de 1000 lignes de code dans Vulkan!

Vulkan laisse tout à vous, car vous êtes responsable de tous les aspects de votre utilisation de Vulkan dans votre application. Il n'y a pas de prise de main, cela ne vous gêne pas, cela vous permet de vous tirer une balle dans le pied ou de vous pendre et d'acheter un nœud coulant récursif!

Maintenant, cela ne veut pas dire que les débutants ou ceux qui sont nouveaux dans ce domaine ne devraient pas apprendre Vulkan, mais voici ce que je leur suggèrerais: Premièrement, apprenez assez de choses sur OpenGL et / ou DirectX application de base est structurée juste pour rendre un simple triangle ou un cube en rotation. Familiarisez-vous avec leurs API et leurs modèles récurrents de leurs structures. Tout en apprenant que vous pouvez apprendre Vulkan du côté de Parallel, vous pouvez ainsi voir comment chacun des trois accomplit la même tâche tout en sachant comment ils le font différemment. Vous pouvez également comparer les résultats entre les différentes API et à partir de là, vous pourrez alors choisir lequel vous convient le mieux. Cette méthode vous donnerait aussi un autre outil dans votre boîte à outils, et vous pourriez même écrire votre application pour supporter les 3 et avoir le "

En fin de compte, il appartient à cette personne de choisir l’itinéraire qu’elle souhaite emprunter. À partir de là, son succès dépend de son dévouement, de ses études constantes, de son dur labeur, de ses essais et erreurs et, plus important encore, de ses échecs. Si vous n'échouez pas, vous échouez! Vous ne réussissez que si vous avez échoué, trouvé votre (vos) erreur (s), corrigé (e) s, progressé (e), relevé (e) et tout recommencé!

Francis Cugler
la source
-1

Vous devriez d'abord apprendre OpenGL, car c'est la norme pour les graphiques sur de nombreuses plates-formes.

Même s'il existe une bibliothèque plus récente, il est très important de comprendre les bases et de travailler avec un langage utilisé dans l'ensemble du secteur ... Surtout que Vulkan ne sera plus utilisé dans les grandes entreprises pendant un certain temps.

  1. Personne ne veut s’adapter tout de suite et finit par se faire avoir par un Framework / Library non stable.

  2. Ils auraient besoin d'embaucher / recycler leurs programmeurs Open-GL actuels, et ce n'est pas nécessaire.


De plus, j'ai entendu dire qu'OpenGL et Vulkan n'étaient pas exactement les mêmes. J'entends dire que Vulkan est une API de niveau inférieur et plus proche du code machine qu'OpenGL.

Cette réponse que je viens de trouver semble avoir beaucoup d'informations intéressantes

https://gamedev.stackexchange.com/questions/96014/what-is-vulkan-and-how-does-it-differ-from-opengl


Une autre chose à prendre en compte est le problème rencontré avec OpenGL 1.

OpenGL 1 à OpenGL 2 avait des modifications MAJEURES et, étant donné que de nombreuses personnes utilisaient OpenGL1 et le matériel pris en charge, la compatibilité avec certaines versions / moteurs était très lourde, et il est parfois très pénible pour les développeurs de continuer à le supporter. .

Outre le support, la langue a tellement changé que vous avez dû apprendre de nouvelles choses.

Cela s'est produit avec des frameworks tels que JavaFX (de 1.x à 2.x) et Play! Cadre (également 1.x à 2.x). Des modifications complètes du cadre, ce qui signifie que nous devons réapprendre ... tout ...


Vous devez donc essentiellement attendre que Vulkan soit STABLE. Cela signifie attendre probablement le correctif 2.0. Cela ne signifie pas que vous ne pouvez pas en apprendre davantage sur les bases de Vulkan, mais simplement savoir que cela pourrait changer. Je suppose qu'un groupe comme Kronos fournirait dès le début une API très stable, d’autant plus que plusieurs ingénieurs de Nvidia et d’AMD travaillent sur Vulkan, notamment un responsable de Nvidia supervisant apparemment le projet, ainsi que The base of Mantle; Cependant, comme tout logiciel, nous, les codeurs, verrons si cela fonctionne bien dès le début, mais beaucoup sont méfiants et attendent de voir ce qui se passe.

XaolingBao
la source
Vulkan est stable en ce moment. Votre GL 1.0 vs 2.0 analogie est appropriée. Commencer par GL maintenant serait comme commencer à apprendre GL 1.0 six mois après la sortie de GL 2.0.
Dan Hulme
1
Vulkan pourrait être "stable" cela ne veut pas dire que les choses ne changeront pas, c'est la nature des langues, à laquelle j'ai présenté deux changements récents apportés aux langues au cours des dernières années. Comment savons-nous que cela ne se produira pas pour Vulkan? En gros, vous dites que l'apprentissage d'OpenGL est un gaspillage, et c'est faux. Cela donne l'impression qu'OpenGL est mort et ne sera plus utilisé ... Aussi faux. En outre, je ne suis pas le seul à croire que Vulkan pourrait avoir des problèmes de stabilité. Ce n’est peut-être pas le cas, mais dans toute nouvelle langue, c’est ce que vous recherchez.
XaolingBao
1
Bien sûr, les choses vont changer, et le groupe de travail travaille déjà sur de nouvelles fonctionnalités pour une prochaine version de spécifications (ssh, vous ne l'avez pas entendu dire). Stable signifie que ces choses vont ajouter à la spécification, et les choses que vous en apprenez aujourd'hui seront toujours valables dans deux ans. OTOH, les choses que vous apprenez sur GL aujourd'hui ne concordent déjà pas très bien avec le fonctionnement des GPU: tout comme apprendre à connaître les pipelines à fonction fixe dans un monde de shader programmable. Si vous lisez ma réponse, vous verrez que je ne pense pas que l'apprentissage de GL maintenant est un gaspillage. Mais "Vulkan is too new" n’est pas une bonne raison de l’écarter.
Dan Hulme
1
@Lasagna: " C’est sujet à changement, peu d’entreprises s’adapteront à son utilisation " Valve. Épique. Unité. Tous sont fortement investis pour faire fonctionner leurs moteurs sur Vulkan. CryTech et Id ne l'ignorent pas non plus. Votre déclaration n’est donc pas à la mesure des faits.
Nicol Bolas
2
@Lasagna: "Le fait que les entreprises y investissent leurs projets " ne signifie-t-il pas que les moteurs 3D sont adaptés aux moteurs 3D ? ... Les moteurs 3D ne sont donc pas qualifiés de "projets"? DOTA2 compte-t-il comme un "projet"? Parce qu'il y a un soutien pour Vulkan en ce moment . La gamme de smartphones et de tablettes de Samsung compte-t-elle comme un "projet"? Parce qu'ils envisagent de l'intégrer à l'interface utilisateur. La réalité est que beaucoup de personnes sont prêtes à "être celles qui testent une nouvelle plate-forme", si cette plate-forme leur fournit ce dont elles ont besoin.
Nicol Bolas