[Programmation] - NearlyRealEngine

Discussion dans 'Hors sujet' créé par Solasis, 21 Novembre 2017.

  1. Solasis

    Solasis Informaticien en devenir

    Bonjour à tous ! Bienvenue sur ce topic où je décris l'avancé de mon moteur de rendu 3D que j'ai subtilement nommé NearlyRealEngine :D

    Initialement ce projet fut celui que je devais rendre pour ma L2 Informatique mais j'ai décidé de continuer à ajouté des fonctionnalités pour apprendre à programmer de manière plus propres, plus performantes, ...

    Le moteur est basé sur l'utilisation de voxel (cubique) pour faire le rendu d'objet et de monde, il permet de faire actuellement ceci :
    Ce qui est en cours d'implantation :
    Plein de choses géniales quoi ! :D

    Quelques screenshot pour la postérité :
    Quelques notes :
    Dépôt : https://github.com/AbelDoc/NearlyRealEngine_Dev
    Pikayoda aime ça.
  2. majorjohn

    majorjohn Invocateur de Staff Administrateur

    J'ai juste 2-3 question H.S.
    Pourquoi cette version de la SDL ?
    Quelle version du C++ ?
    21K de Ligne Oo C'est quand même assez fat. ça me parait beaucoup.

    C'est la carte Graphique ou le cpu qui prends l'affichage en charge ?

    Pourquoi vouloirs faire un Moteur 3D ?
  3. Solasis

    Solasis Informaticien en devenir

    SDL c'est la version 2.0
    OpenGL 3.1 tous simplement parce que j'ai suivis un tutoriel pour commencer sous OpenGL, je commencerais à porter le moteur sous OpenGL4.5 (j'crois ?), enfin la dernière version quoi ^^
    C++14 :)
    21k c'est avec la documentation (toutes les fonctions sont documenté, le code en lui même dois faire 12-14k).
    Le jeu en lui même (celui du projet), fais 2k donc après voilà tu fais le calcul, le moteur n'est pas très lourds en lui même.
    Mais bon pour pouvoir gérer autant de blocs et tout, j'ai créer des algorithmes peut-être pas les plus courts mais très performants, il y a plein de manière d'arriver à mon résultat avec plus ou moins de ligne mais les nombres de lignes ne compte pas vraiment après tout ^^

    Alors DANS mon moteur :
    Le CPU s'occupe de charger le monde puis de charger ce qu'on appelle les meshs (les "tableaux" de points pour afficher tous les blocs, en vulgarisant) et les envoies au GPU qui s'occupera de l'affichage ! :)

    Le CPU ne s'occupe in-game que des IAs et des collisions :)

    EDIT : Pourquoi faire un moteur ?
    Car c'est une des meilleurs façons d'apprendre à programmer sur tous les domaines !
    Car après je vais créer un modules réseau pour le multijoueurs, j'ai appris la programmation 3D, les collisions, l'optimisation, ... beaucoup beaucoup de choses.
    Et également cela me permet de programmer des logiciels ou jeu sur ce moteur tout en connaissant chaque choses et donc de programmer plus vite bref ça se résume : Pour être un bon programmeur faut programmer !
    Et tenter de faire des choses TRES compliqué ^^
  4. majorjohn

    majorjohn Invocateur de Staff Administrateur

    C'était la version de OpenGl qui m'intéressait du coups merci de m'avoir répondu sur ça aussi au passage ^^'.

    Je te conseille de versionner ton code si ce n'est pas déjà fait. C'est toujours pratique ^^.

    Pour le moteur je possais la question car je trouve toujours dommage de réinventé la roue. Surtout qu'au final j'en ai pas connu beaucoup qui on fini leurs moteurs.
    Hmmm ... De la prog réseau en C++, Je te souhaite bien du plaisir.
  5. Solasis

    Solasis Informaticien en devenir

    Aha oui j'avais compris t'inquiète pas ^^
    Oui je le versionne ne t'en fait pas ! :)
    J'ai un dépôt Git de toute façon (privé ehe)
    Oui beaucoup m'ont dit ça mais le résultat est que je suis le meilleur de la licence tous simplement car j'ai de l'expérience en programmation grâce à ça ! Mais oui c'est vraiment un projet qui me tient à coeur donc je pense tout de même le continuer très longtemps ! :)
    Je sais c'est pas idéal mais bon je vais tout de même essayer ! Et pis si j'arrive qu'est ce qui se passe ? Vous pourrez tous essayer le jeu donc bon ? On espère nn ? ^^
  6. majorjohn

    majorjohn Invocateur de Staff Administrateur

    Le but n'était absolument pas de te décourager ^^. Personnellement je suis jaloux des personnes qui arrive à avoir de la motivation et du temps pour se lancer et continuer activement des projets comme ça. N'hésite pas à venir nous faire part de tes avancé c'est toujours très intéressant // motivant.
  7. Solasis

    Solasis Informaticien en devenir

    3 Screen provenant du jeu "Projet" (Le 3ème montre une version debug avancé, les blocs sont des triangles (woah sans blague), mais ce qui est a retenir c'est que dans le jeu "Test" les blocs sont "fusionner" donc l'affichage debug avancé vous montrerais des triangles fusionné :)
    [​IMG][​IMG] [​IMG]

    EDIT : On peut voir notamment que les zombies peuvent traverser les murs ! Alors pourquoi laisser ça ? Les obstacles (les murs) sont gérers par l'algorithme de PathFinding(PF)(A* pour ceux qui connaissent, qui va être remplacé par un algorithme par champ de vecteur plus approprié), donc je préfère gérer les obstacles avec l'algos de recherche de chemin que de tester les collisions avec les murs :) (L'un étant moins cher et surtout obligatoire, donc autant avoir un bon algo de PF qui s'occupe des obstacles et considéré que les zombies vont "éviter' les obstables, ici on vois un p'tit soucis dans cet algo par exemple :))
    thepecnocrat aime ça.
  8. thepecnocrat

    thepecnocrat médiateur a la retraite

    Cette chance ! Nous en projet l2 on nous a dit "t'as le droit qu'a la sdl2 et tu te débrouille !!!!" résultat, c'était simcity en 3D isométrique.... Et en dehors de l'apprentissage perso, je suis censé toucher à openGL que dans quelques mois, au second semestre (alors que je suis en M1 info pour préparer un M2 image quoi ! ><)
  9. Solasis

    Solasis Informaticien en devenir

    P'tit précision alors : on nous a dit : Vous devez utilisez SDL. (bon pas le droit d'utiliser unity ou ce genre de choses toutes faites bien sur vous me comprenez)
    J'ai dit à ma prof : J'ouvre la fenetre avec SDL ça compte ? Elle à dit oui ehe :p
  10. majorjohn

    majorjohn Invocateur de Staff Administrateur

    @thepecnocrat n'attends pas la fac pour apprendre des choses. Surtout tes profs. Personnellement la ou j'ai le plus appris c'est quand je discutais avec diverse édutiant ou autre. J'ai jamais eu de cours sur les réseaux de neurone ou encore du node.js pourtant pour le premier je sais ce que c'est et le deuxième je sais en faire.

    @Solasis t'es plutôt motivé, dis donc ^^.
  11. Solasis

    Solasis Informaticien en devenir

    La fac est pas si mauvaise ! Nan mais dis donc ! ^^
    Il faut comprendre qu'on a du temps libre a TOI de te dire, bah je vais programmer et apprendre plus tous seul ^^

    Ouais pas mal motivé ! Et quand je vois le résultat de 4 mois de travail j'suis content ! Ces derniers jours je travaillais sur l'optimisation de la création du monde
    Je peut vous donner quelques chiffres à l'issue de benchmarks :

    Création de mesh (Grille de point à envoyé a OpenGL pour l'envoie au GPU donc pour le rendu d'un chunk ):
    Avant Opti : 500ms (longggggg, en gros vous prenez un bloc, l'écran freeze 0,5s ^^)
    Après Opti :
    • Opti 1 (celle du jeu "Projet", sans fusion) : 50ms
    • Opti 2 (celle du jeu "Test", avec fusion) : 8ms !
    Sa utilise un algorithme d'indexation de points, avec une table de hashage (donc une fonction de hash de points 3D), donc du assez lourds ^^

    Après je présente des trucs ici, mais on peut discuter de mes algorithmes si jamais vous en connaissez des mieux ou si vous avez des idées de choses à implanté !!!
    Ce qui est prévu :
    1. Les Shaders (Meilleurs lumières, Ombre, Réflection, Deferred Lighting, Ambient Occlusion)
    2. Meilleur collision (Separated Axis Theorem - SAT Collision)
    3. Gestion des particules
    4. Chargement de .obj
    5. Monde infinie avec chargement dynamique de chunks
  12. majorjohn

    majorjohn Invocateur de Staff Administrateur

    Étant donnée que j'ai fini mes études je pense que je peux être aussi tranchant avec la fac. Les cours te forment à assimiler/apprendre rapidement et à avoir les rudiments de l'info. Ce n'est donc pas inutile, mais il ne faut pas s'attendre à voir des chose récente, ou très avancé dans un domaine. Même si c'est ton domaine de spécialisation.

    Niveau 3D ça commence à faire un moment que j'en ai pas fait. Mais je suis toujours au points sur la gestion mémoire normalement en C++. (Je ne m'avance pas trop non plus j'ai pas regardé la norme C++17).

    Je sais pas si tu as déjà jeté un œil à tout ce qui est Thread, si ce n'est pas déjà fait n'hésite pas à regarder un peu.
  13. Solasis

    Solasis Informaticien en devenir

    Ouais c'est plus de la théorie que de la pratique mais là fac n'est pas a rejeté au banc des études pourrie :p
    Désolé je fais pas mal de médiation scientifique pour valoriser la fac ^^ Surtout au niveau de l'informatique, on fais pas des choses récentes mais si tu maîtrises les technologies de bases, c'est à toi d'évoluer
    Niveau mémoire j'ai aussi optimiser en créant un cache mémoire pour gérer les calcul 3D ^^

    Je vais créer un support pour faire du calcul en parallèle (des collisions ou du chargement de chunks), mais c'est pas ce qui m'intéresse pour le moment :)
    Là ça va vraiment être au niveau des shaders ^^, après faut se rappeler j'suis en L2, je suis pas développeur 3D ni professionnel donc bon ce que je fais n'est pas parfait ^^
    Mais pour l'instant le jeu "Projet" est complet et fini et très fluide donc j'pense que le boulot fournie est pas si dégueux ^^, les screens le montre c'est assez sympa comme rendu final :)
  14. Alphajim

    Alphajim Akksul Barram, leader du Concordat d'Iyssada

    Tu n'auras plus qu'à postuler chez Schine et proposer de revoir tout le codage xD
    Nan je plaisante, ça m'a l'air de finir en un petit jeu bien sympa :3
  15. Solasis

    Solasis Informaticien en devenir

    Mdr je ne suis pas à ce niveau ^^
    Je vais essayer de trouver un moyen de vous le faire tester :) Si jamais vous avez une solution ?
  16. Solasis

    Solasis Informaticien en devenir

    Coucou les gens !
    Pour ceux qui suivent : Je vais passer le moteur sous openGL 4.4 (déjà par 3.3 pour l'instant)
    Ce qui va me demander de passer par les shaders et beaucoups d'autres choses !

    J'ai donc pas mal de boulot devant moi ! Il n'y aura pas beaucoup de news je pense :/
    Normalement les vacances de Noël devrait me permettre de pas mal avancer, j'espère avoir fait la transition pour 2018 :D

    PS : Le jeu "Projet" est officiellement fini ! Il est nommé "You're not Alone"
    C'est un jeu de survie dans un labyrinthe remplie de zombie ! Je vais vous trouvez un moyen que vous puissiez tous le tester ^^
  17. Solasis

    Solasis Informaticien en devenir

    Bonjour tout le monde ! Grosse update !
    Oui le projet n'est pas mort ! Loin de là, j'ai juste eu une période de calme à cause de mes partiels puis j'ai totalement passé le moteur sous OpenGL 4.4 ce qui m'a demandé de le retaper un peu plus que ce que je pensais. Il est également développer en 64 bits pour pouvoir un accès mémoire un peu plus grand pour m'amuser :3

    Ancien Moteur :
    [​IMG]

    Nouveau Moteur :
    [​IMG]

    Qu'est ce qui y'a changé depuis la dernière fois ? :)
    Va y avoir quelques termes techniques si vous voulez savoir ce que c'est je peut détaillé un peu (certaines techniques sont utilisés dans les jeux modernes par ailleurs :))

    Gestion des lumières ponctuelles/directionnelles par fragment (avant par vertex)
    • Réflection de la skybox sur l'eau (on peut le voir sur le screenshot d'ailleurs, la lumière rouge et blanche :))
    • Deferred Rendering (contrairement au Forward Rendering de l'ancien moteur)
    • Occlusion Ambiante (SSAO, Screen Space Ambient Occlusion)
    • Ombres dynamique du soleil
    • Performance Mémoire/CPU bien meilleur
    • Génération de monde plus propres et plus réaliste
    • Système de chargement/sauvegarde des chunks dynamique (permet de déplace le monde autour du joueur sans lag)
    • Code plus propre et plus maintenable

    Beaucoup de choses ont été retirés de l'ancien moteur car il n'est pas reconstruit totalement mais pour l'instant je me concentre sur les aspects graphiques pour en apprendre un peu plus, d'où le Deferred Rendering, le SSAO, les ombres dynamique, ...
    Il n'y a rien de jouable du coup mais par rapport à ce que je faisais avant y'a eu beaucoup d'avancement ! :)
    Pikayoda aime ça.
  18. Pikayoda

    Pikayoda L'hybride de l'espace !

    En tout cas ça progresse beaucoup, tu nous illumines de motivation ! :eek: J'ai hate de voir ce que tu va faire après ça, tu es toujours sur une idée de créer des planètes ?

    Et pour un HUD tu m'appelles hein ! :b
    Solasis aime ça.
  19. Solasis

    Solasis Informaticien en devenir

    Merci :):)
    Oui y'a une grosse évolution entre les 2 versions ! ^^

    Pour l'instant comme je le dit je bosse sur la partie graphisme du moteur
    Du coup là je bosse sur des ombres un peu plus propres pour le soleil, après je pense faire du bloom et modélisé les lumières en voxel, des skybox dynamiques, de l'atmosphère, des particules, ...
    Et je sais pas trop comment faire pour créer une planète en voxel ... je veux faire ça propre mais pas trop d'idée sur le coup, je sais pas si j'en fais des petites styles starmade ou des énormes qui serait des "mondes" accessibles via l'espace mais c'est pas ma priorité là tout de suite :)

    Je commencerais normalement a faire la partie Entité/Joueurs du moteurs dans 1 petit mois si y'a pas de soucis ^^
    Bah pour l'interface ouais je te demanderais surement ! Mais là reviens dans 6 mois xD
    Pikayoda aime ça.
  20. numero8

    numero8 archimage de classe D et demi Dernier builder du mois Animateur

    Ce qui pourrait être marrant aussi c'est d'implanter un algo de transvoxel, c'est pas si compliquer, par contre vaut mieux avoir construit les objets en surface implicite pour faciliter les calcules.

    De base c'est du marching cube : Le principe c'est de faire ce déplacer un cube le long du terrain. Ensuite tu regarde à chaque coin du cube si il est à l'intérieur, et par rapport aux coins qui le sont, tu place des polygones.

    Après le principe est simplement de diviser le cube en 4 et de regarder encore pour tout ces points lesquelles sont à l'intérieur. ça permet de faire des Lod pour avoir de bonne perf tout en ayant un terrain lisse.

    http://transvoxel.org/

Partager cette page