Je me demande après avoir regardé ton exemple de 3d(spaceship) quand utiliser les ref ou handle du moteur ? Quand utiliser les ref ou pointeurs du c++ ? Et quand utiliser les objets ?
Je me demande après avoir regardé ton exemple de 3d(spaceship) quand utiliser les ref ou handle du moteur ? Quand utiliser les ref ou pointeurs du c++ ? Et quand utiliser les objets ?
En soi, c'est assez simple:
Les ObjectRef (MaterialRef, MeshRef, etc.) sont des pointeurs intelligents propriétaires, ils assurent que la ressource ne sera pas supprimée tant qu'ils existent, c'est important par exemple pour un Sprite de maintenir en vie son matériau, il utilise donc un MaterialRef.
À noter que les objets qui sont légers mais propriétaires de ressources (les Model/Sprite/Billboard, etc.) peuvent également être gérés par ces mêmes pointeurs intelligents (ModelRef par exemple).
En revanche, certains objets n'ont qu'un seul propriétaire mais il peut être intéressant de garder une référence dessus, c'est le principe des Handle qui sont donc des pointeurs intelligents non-propriétaires, ils passent à nullptr lorsque l'objet est détruit, ce qui est intéressant dans le cas du scripting (les variables Lua pointant sur des objets n'en sont pas toujours propriétaires) et des entités.
Pour les pointeurs du C++ (ça s'applique aussi aux références), tu les utilises quand tu fais une fonction qui ne va pas prendre possession de ton objet, typiquement dans Nazara j'utilise les références constantes pour les objets 'in', les références pour les objets 'inout' et les pointeurs nus pour les objets 'out'.
Quant aux objets en général, tu peux les utiliser là où ça a du sens, mais si une fonction te demande un "MaterialRef" en entrée, tu as tout intérêt à avoir créé ton matériau avec la fonction MaterialRef::New.
En pratique, les objets de ressources (ou gérant des ressources) sont toujours alloués à l'aide de leur méthode statique Objet::New(Params).
j'ai essayé d'utiliser nazara en le compilant et en le téléchargeant:
Je récolte ces erreurs:
Gravité Code Description Projet Fichier Ligne État de la suppression Erreur LNK2001 symbole externe non résolu "__declspec(dllimport) public: __thiscall Nz::VideoMode::VideoMode(unsigned int,unsigned int,unsigned char)" (__imp_??0VideoMode@Nz@@QAE@IIE@Z) Project4 c:\Users\Sandrine\source\repos\Project4\Project4\main.obj 1 Erreur (active) E1449 la spécialisation explicite de class "std::hash<Nz::MaterialPipelineInfo>" doit précéder sa première utilisation (à la ligne 575 de "c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\include\type_traits") Project4 c:\Users\Sandrine\Desktop\misterMAT_qui_rale_tout_le_temps\vs2017\NazaraDownload32\include\Nazara\Graphics\MaterialPipeline.inl 108
Tout d'abord, mais il n'y a aucune obligation, si tu veux une réponse plus rapide la prochaine fois je te suggère de rejoindre le Discord sur lequel Nazara a un canal dédié.
Ensuite, je dirais que la bibliothèque NazaraPlatform n'est pas indiquée dans le projet comme bibliothèque de cette façon:
Attention du coup à bien spécifier les dossiers de dépendances.
PS: J'avais copié la liste de ton tuto sur le wiki github donc il faudrait le rectifier( je ne vois pas trop l'intèrêt de mettre une issue ou une pull request donc je me dis ici)
Bonjour, pourrait-tu faire un tuto un peu comme pour VS 2017 mais pour CLion s'il te plaît car comme CLion utilise CMake c'est beaucoup plus compliquer a utiliser. Merci !
Bonjour, pourrait-tu faire un tuto un peu comme pour VS 2017 mais pour CLion s'il te plaît car comme CLion utilise CMake c'est beaucoup plus compliquer a utiliser. Merci !
Du coup on t'a répondu sur le Discord, si ça en intéresse on a un FindNazara.cmake en beta
JeanValJean46 a écrit:
une chose
c'est génial un particulier créer son propre moteur de jeux ça envoie du lourd.
mais par contre je trouve le rendus 3D un peu...médiocre
mais bon pour le moteuren question c'est plutot cool.
Je ne peux qu'être d'accord avec toi, ça n'a pas été ma priorité ces derniers temps mais je compte bien y remédier.
En fait le boulot a déjà commencé vers ce côté, le fait que Nazara supporte les réflexions est le premier pas vers le support du PBR. J'aimerai quand même finir de refaire ces RenderQueue avant de commencer le PBR, ça apporte trop de trucs chiant.
Oh au fait, je vous réserve une surprise. *rire diabolique*
Hello tout le monde, ça fait longtemps qu'il n'y a pas eu de nouvelles ici.
Désolé pour ce long moment silencieux, mais néanmoins productif.
Alors, pour procéder dans l'ordre, il faut savoir qu'une des raisons du silence est que je me suis finalement lancé dans la réalisation d'un jeu vidéo avec Nazara, rassurez-vous cependant, ça ne signifie pas du tout que le moteur n'avance plus, au contraire il mûrit.
En effet je me suis rendu compte en utilisant Nazara à mon boulot depuis l'année dernière qu'il y avait beaucoup de problèmes/bugs qu'il m'était impossible de voir en développant plutôt qu'en utilisant le moteur.
Concevoir un jeu à l'aide du moteur me permet donc de mieux comprendre les éventuels problèmes de celui-ci, et aussi de réaliser un peu l'objectif de base que j'avais, parce qu'à la base si je me suis lancé dans la conception de moteurs de jeux, c'était avant tout pour faire un jeu (ce que je ne recommande à personne ).
Concernant le jeu, il s'agit bien évidemment d'Utopia, un jeu de programmation (qui à l'époque était un MMORTS de programmation, si si!).
Donc le principe du jeu est de gérer des combats de vaisseaux spatiaux (et à terme, un empire spatial) où chaque vaisseau est programmé par le joueur et agit indépendamment lors des combats.
Pour revenir au moteur, comme je l'ai dit il avance et notamment la version en cours de développement (la 0.5) inclut énormément de correctifs (Changelog).
Je travaille beaucoup sur les nouvelles render queues en ce moment ainsi que sur l'implémentation Vulkan qui progresse enfin.
Les nouvelles render queues vont apporter la possibilité de faire des widgets plus avancées (avec notamment - enfin - la coupure du rendu aux bordures), qui vont ensuite introduire le concept de layouts (pour éviter de devoir positionner les widgets à la main).
Suite à cela, je vais revenir aux améliorations graphiques du moteur, notamment rajouter un système de compositors pour gérer les effets et post-processes beaucoup plus facilement.
Je vous tiendrais informé dans tous les cas.
J'en profite aussi vite fait pour vous dire que j'ai ouvert un devblog, un blog consacré au développement, où je parlerais donc des avancées de Nazara ou d'Utopia, en plus d'articles plus généraux sur la programmation.
Salut ! Ca fait un moment que je suis le post. Ce soir j'avais un peu de temps j'ai essayé de compiler le moteur pour tester Utopia. J'ai pas réussi. Voilà l'erreur :
--:~/NazaraEngine/build/gmake$ make -f NazaraExtlibs.make -j4
make: NazaraExtlibs.make : Aucun fichier ou dossier de ce type
make: *** Aucune règle pour fabriquer la cible « NazaraExtlibs.make ». Arrêt.
--:~/NazaraEngine/build/gmake$ make -f NazaraEngine.make -j4
make: NazaraEngine.make : Aucun fichier ou dossier de ce type
make: *** Aucune règle pour fabriquer la cible « NazaraEngine.make ». Arrêt.
Aujourd'hui j'apporte la bonne nouvelle: je me refocus sur Nazara (après avoir passé pas mal de temps sur Utopia, même si les projets ont et continueront d'évoluer en parallèle).
La raison à cela c'est qu'après presque six mois de développement (déjà ) sur Utopia, surtout de mise en place et d'avancement technique, j'ai décidé qu'il était temps de faire avancer le côté graphique/audio/GUI (au final, tout ce qui touche surtout à l'expérience utilisateur). Et c'est quelque chose qui demande des modifications moteur que je repoussais depuis longtemps (par exemple le refactor des render queues qui fonctionne parfaitement depuis hier o/).
Et j'ai notamment constaté que j'avançais bien plus rapidement sur Utopia que sur Nazara vis-à-vis de tâches complexes, la raison à cela étant je pense liée fortement aux conditions de travail:
1) Je travaille sur Utopia à un horaire fixe, celui de mes lives Twitch et sous le regard de plusieurs dizaines de spectateurs (ne me laissant pas le loisir de procrastiner). 2) Je travaille sur Nazara sur mon temps libre, en dehors des lives (sauf dans de rares occasions quand il y a un bug ou une feature à intégrer, très liée aux besoins du jeu, telle que le support IPv6).
Du coup, afin d'avancer sur des tâches complexes de Nazara, j'ai décidé de dédié un de mes deux jours de stream au développement du moteur, notamment à ce qui est en lien avec l'expérience utilisateur.
Je vous propose donc de me retrouver, pendant une période indéterminée (d'un ou deux mois) le mercredi soir à partir de 18h15 en train de streamer le développement de Nazara sur ma chaîne twitch, à partir de ce soir. (Le stream du samedi/dimanche reste pour sa part consacré au développement d'Utopia.)
Pas beaucoup d'avancement en ce moment (comme chaque été j'ai l'impression), la version 0.5 est en bonne voie et sera un changement majeur qui cassera pas mal la compatibilité (mais c'est un mal pour un bien), je t'invite à regarder la tronche du changelog.
Dernièrement il y a eu une énorme amélioration sur le rendu des sprites, qui est bien plus optimisé et beaucoup de correction de bugs, mais je vise encore au moins deux features essentielles avant de sortir la 0.5, notamment le nouveau système de "pipeline layout", permettant à l'utilisateur de spécifier les variables uniformes de son choix dans les shaders, et au système de matériau d'être bien plus souple. Autorisant au passage l'intégration des matériaux PBR (comme montré lors du dernier screenshot).
La seconde feature essentielle est liée à la GUI, j'aimerai finaliser le nouveau système et avoir des layouts (ce qui demande un boulot monstre quand même...).
Mais voilà, en ce moment je tourne un peu au ralenti, ayant en plus de ça acheté récemment un HTC Vive (huehue). Parlant de ça il faudra que je teste l'utilisation de Nazara en VR, voir ce qu'il est possible de faire.
Donc en bref: en ce moment ça tourne au ralenti mais ça va certainement revenir, comme chaque année
Je me baladais par là il y a maintenant quelques années, au début du projet. Je suis vraiment admiratif car tu as su garder le cap malgré les années qui passe, et rien que pour ça chapeau! Plus de 4500 commits, presque 200 stars, c'est énorme
Je me posais quelques questions au sujet du projet:
1. Quelles ont été les gros changements de direction que tu as pu avoir au cours du développement, entre ce que tu avais prévu et ce qui a été finalement fait?
2. Comment se mesure Nazara Engine face à d'autres librairies comme la SFML ou OGRE?
3. Dans quelle mesure ton projet a été utile pour la boite dans laquelle tu travailles?
4. Avec l'avènement du tout web, comment évolue le marché des codeurs C++?
Voilà, si tu as le temps de répondre ça me ferait bien plaisir, mais si tu n'as pas le temps je comprendrai ^_^
J'en profite pour dire que bien que je n'en ai pas encore pris le temps, il est prévu que je fasse un message récapitulatif de ces derniers mois pour vous tenir au courant, mais en quelques mots : le projet est toujours vivant et utilisé, mais je passe plus de temps à développer les jeux qui utilisent le moteur que le moteur lui-même en ce moment. Et il me reste une feature à intégrer pour la 0.5 qui retarde tout.
Pour répondre à tes questions :
Arsleust a écrit:
1. Quelles ont été les gros changements de direction que tu as pu avoir au cours du développement, entre ce que tu avais prévu et ce qui a été finalement fait?
Il y en a eu beaucoup, déjà Nazara n'est pas mon premier moteur : il y a eu l'Ungine à mes débuts dont l'architecture s'est écroulée au bout d'un an et demi à cause de mon inexpérience. Nazara a été conçu de façon beaucoup plus modulaire pour régler ce problème.
L'architecture du moteur a énormément évoluée au cours des années, la gestion des entités et des scènes a totalement été revue et ça a causé beaucoup de refactor qui, si le moteur n'avait pas été modulaire, m'aurait fait tout recommencer ou presque à coup sûr.
Du coup, je ne peux pas lister tous les gros changements, je peux en revanche dire que là où il était prévu à l'origine que le moteur soit .. un moteur, il est aujourd'hui découpé en deux parties : d'un côté un framework (ensemble de bibliothèques) donnant accès à des fonctionnalités et de l'autre un SDK regroupant toutes ces bibliothèques de façon cohérente et apportant toute une gestion beaucoup plus aisée mais aussi plus intrusive pour l'utilisateur.
Arsleust a écrit:
2. Comment se mesure Nazara Engine face à d'autres librairies comme la SFML ou OGRE?
Nazara intègre presque toutes les fonctionnalités de la SFML (à l'exception il me semble du support du micro, des joysticks et du rendu mobile), et bien d'autres encore. La partie framework du moteur ressemble beaucoup à la SFML en terme de fonctionnalités mais avec une interface bien moins facile, ce que la partie SDK vient rajouter.
Nazara est bien plus performant que la SFML, mais on ne peut pas dire que ça soit un exploit (la performance de la SFML s'explique surtout par l'intelligence des drivers OpenGL) ni forcément quelque chose de très utile (la SFML étant majoritairement utilisée pour des jeux au rendu simpliste que nos ordinateurs peuvent faire tourner extrêmement rapidement avec ou sans optimisation).
Quant à OGRE, je dirais d'un avis totalement subjectif que Nazara dispose d'une conception plus élégante et d'une architecture globalement mieux foutue, mais je n'ai pas regardé spécialement OGRE2. Cela étant, ce moteur est capable de bien plus de choses que Nazara actuellement (notamment il y a un aspect de Nazara - les matériaux - qu'il faut que je retravaille pour autoriser de faire ce qu'on veut).
Arsleust a écrit:
3. Dans quelle mesure ton projet a été utile pour la boite dans laquelle tu travailles?
C'est un socle de base fournissant des fonctionnalités élémentaires très utile, comme le support de la physique et des entités via son ECS, cependant beaucoup de travail a dû être fait par-dessus, notamment j'ai conçu tout un module d'intelligence artificielle (pour le jeu vidéo, donc rien à voir avec les réseaux de neurone) très intéressant que je n'ai évidemment pas le droit de partager.
Néanmoins, j'ai prévu dans les prochains mois de faire une nouvelle bibliothèque qui viendra apporter des fonctionnalités utiles à l'intelligence artificielle dans le jeu vidéo, cette bibliothèque ne sera pas liée à Nazara (mais rien n'empêcherait de faire un module pour ce dernier capable de faire le lien).
Plus d'info dans le pavé que je compte écrire bientôt.
Arsleust a écrit:
4. Avec l'avènement du tout web, comment évolue le marché des codeurs C++?
Je fais partie de ceux qui ne croient pas au "tout web", je pense qu'il n'est ni souhaitable ni intéressant que nos navigateurs continuent de se transformer en systèmes d'exploitations.
Concernant le marché des codeurs C++, disons que je n'ai pas une vision suffisamment large pour pouvoir te répondre clairement, tout ce que je peux dire c'est que je n'ai pas l'impression qu'il se porte particulièrement mal, ou même qu'il souffre de la présence des technologies du Web.
Je rajouterai même que maintenant que WASM a atteint 80% de support en terme de navigateur (et qu'il existe des solutions pour les 20% restant), le C++ peut être utilisé en tant que technologie pour le web client-side, donc ce langage n'est pas prêt de disparaitre.
Néanmoins, je commence à envisager le long terme, et j'ai commencé à apprendre Rust, qui est un langage qui a un très gros potentiel pour l'avenir mais qui souffre pour l'instant de sa jeunesse. Je n'ai pas encore prévu de l'utiliser dans un de mes projets mais ça ne saurait tarder.
Je profite de ce message aussi pour expliquer le manque d'activité de ces derniers mois (et ce pour tous mes projets) : on est en plein rush à mon boulot pour lancer le jeu sur lequel nous travaillons depuis près de deux ans, cela entraîne de la pression et des heures supplémentaires. Ça va bientôt se calmer, heureusement.
J'en profite aussi pour faire un peu de pub pour mon devblog sur lequel je viens de publier le début d'une série d'articles traitant du réseau dans le domaine du jeu vidéo. Si ça vous intéresse n'hésitez pas à jeter un oeil.
J'en profite également pour dire que je stream sur Twitch de nouveau à horaires fixes (le mercredi à 18h30 et le week-end) le développement d'un jeu vidéo utilisant Nazara, que je n'ai pas encore présenté sur ces forum.
Ça faisait longtemps que je n'avais pas posté de mise à jour concernant le moteur, et ça fait bien longtemps que je devais le faire mais je repoussais le moment, sans vous mentir, par pure fainéantise.
Alors pour commencer, mon nouveau travail m'a beaucoup occupé ces derniers temps, cela fait quelques mois que nous sommes en rush (avec des heures sup quotidiennes du coup) pour sortir notre jeu et cela a beaucoup affecté mon envie de programmer en rentrant du boulot malheureusement.
Mais tout ça se termine bientôt (j'ai l'impression d'écrire ces mots pour la quinzième fois).
Alors depuis que je me suis mis à faire des jeux avec Nazara, ce dernier avance au ralenti (et selon les besoins des jeux en question), mais il continue d'avancer heureusement.
Pour ce qui est d'Utopia (le premier vrai jeu que j'ai fait avec le moteur), l'avancement à atteint un prototype jouable où je me suis aperçu que l'idée qui avait été explorée n'était pas amusante, le scripting trop complexe, trop de facteurs à prendre en compte. J'ai donc décidé de mettre en pause le développement le temps de simplifier l'idée pour ensuite mieux y revenir (Voici tout de même une vidéo de ce que ça pouvait donner vers le milieu du développement).
J'ai donc décidé de commencer un second jeu dont l'idée me tenait à coeur, plus simple (en tout cas sur papier) et pas destiné à des programmeurs pour le coup (ce qui a l'avantage d'augmenter le public cible d'environ 9 millions de %), un projet de jeu 2D, une espèce de mélange entre teeworld et GMod. Burg'war.
Le concept est simple : c'est un jeu sandbox déguisé sous des airs de jeu de combat, tout le côté gameplay est entièrement scripté en Lua et ouvert à la modification. Envie de rajouter une nouvelle arme ? Allez-y. Envie de faire un mode de jeu qui soit la course à celui qui empile des objets le plus haut possible avant qu'ils ne tombent ? Go. Envie de faire un remake de Portal 2 en 2D ? Pourquoi pas.
Bon évidemment on est encore un peu loin de ces possibilités mais vous voyez le délire, et évidemment ce jeu est conçu avec Nazara.
Pour revenir sur le moteur, il y a eu beaucoup de changements dernièrement, avec notamment le support du text outlining :
Ainsi que du côté des widgets le support du line wrap (le saut de ligne automatique) et des scrollbar :
À côté de ça, le RichText arrive (la possibilité pour un texte d'alterner le style, la couleur, la police, la taille de chaque lettre) :
(Ok, c'est moche mais ça illustre les capacités).
Cette fonctionnalité se trouve pour l'instant sur sa branche à part et demande encore quelques petits avancement pour être mergée, mais après deux ans dans les cartons cette fonctionnalité (tout de même assez utile) arrive enfin.
D'autres changements vont arriver avant la sortie de la 0.5 comme par exemple je pense la disparition de la classe Nz::String (au bénéfice de fonctions libres pouvant fonctionner avec std::string), et l'intégration de la SDL2 comme backend (rendant le moteur compatible avec macOS et potentiellement Android et iOS dans la foulée, du moins techniquement. C'est aussi une façon d'améliorer le support Linux pour le fenêtrage).
Je vous avais mis un screenshot du PBR (technique d'éclairage moderne basée sur des propriétés réalistes des matériaux) partiellement implémenté dans Nazara :
Seulement ce screenshot avait été fait en modifiant le shader du phong lighting, le moteur continuait de son côté à considérer que tous les matériaux étaient basés sur du phong lighting. La grosse mise à jour des matériaux casse ce principe en rendant le tout totalement personnalisable, c'est-à-dire que vous pourrez faire vos matériaux comme bon vous semble et y associer autant de textures et de données (variables uniformes) autres que vous voudrez. C'est aussi l'occasion de passer à des uniform buffer objects au lieu des variables uniformes simples, améliorant la performance et surtout rendant le tout compatible avec par exemple Vulkan (ça a été un gros point de blocage pour la branche Vulkan).
Côté personnel j'ai commencé à m'intéresser au langage Rust, qui ma foi est un langage extrêmement intéressant. Je ne vais évidemment pas me mettre à réécrire mes projets en Rust, mais certains de mes futurs projets risquent d'être écrits dans ce langage, à suivre en tout cas.
Voilà, en résumé le moteur avance, plus lentement en ce moment à cause de mon boulot et de mes autres projets qui me prennent pas mal de temps, mais il avance quand même.
Au fait, pour ceux que ça peut intéresser pas mal de nouveaux articles sont sortis sur mon dev blog (à l'adresse https://sirlynixvanfrietjes.be ou https://lynix.be) et je continue évidemment les lives Twitch sur la programmation (notamment de Nazara).
Oh au fait, si vous souhaitez suivre les nouvelles autour de mes projets un peu plus fréquemment je dispose d'un serveur Discord où vous retrouverez les dernières nouvelles ainsi que les notifications (désactivables) pour mes lives sur un sujet particulier.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
méfiez vous des cochon d'indes couineurs
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Erwan28250
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)