(1) 2 3 4 ... 9 »


hARMful engine
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2372

Bonjour à tous !
Cela fait un bon moment que je bosse sur un moteur de rendu 3D en temps réel. Entendez par là que c'est comme EEVEE ou un jeu vidéo et non comme Cycles. C'est une tâche assez compliquée mais c'est vraiment passionnant.

J'espère que ce sujet vous intéressera.

Le moteur s'appelle "hARMful (Engine)".
L'origine du nom est expliquée sur le site : https://dcarlus.github.io/hARMful/
Ici, la chaîne YouTube avec les avancées : https://www.youtube.com/channel/UCOIA1jQWucv_bcnVwMyeaTA



La principale raison pour laquelle je me suis engagé dans ce moteur, c'est pour apprendre et tester des choses. D'une part pour moi-même et avoir le plaisir de faire quelque chose de concret, mais aussi pour mon travail puisque je suis plongé dans ce type d'activité professionnellement. Cela me donne donc l'occasion de me perfectionner. Ce qui m'intéresse le plus, c'est le rendu visuel en lui-même car c'est dans ce domaine que je veux apprendre et dont j'ai le plus besoin au quotidien. C'est pourquoi le moteur ne fait pas encore grand chose d'autre qu'afficher des objets en 3D... Vous allez voir que ça ne sera pas toujours le cas !

Pour l'instant, ne vous attendez pas à pouvoir faire le jeu du siècle. A vrai dire, il ne fait pas grand chose... Je le développe tout seul sur mon temps libre, et selon ma motivation, donc ça avance doucement mais sûrement.

J'ai d'ores et déjà tracé une feuille de route pour les développements en cours et futurs. Je vais vous la détailler.

Premières fonctionnalités

Pour la première version "officielle", je prévois d'avoir un rendu assez simple. Par simple, j'entends un rendu comme on pouvait en avoir un avec le BGE de Blender 2.79 par exemple, contrairement à EEVEE qui propose un rendu plus photoréaliste. Notez que tout de même, j'utilise la dernière version d'OpenGL, à savoir OpenGL 4.5. Il faut donc une carte graphique assez récente pour l'utiliser. Si le rendu n'est pas ouf, la simplicité pour le développement est la principale raison de ce choix !

La première version devrait sortir courant 2020 (2ème ou 3ème trimestre au plus tard).
J'arrive à charger des objets 3D avec des matériaux allant jusqu'à proposer des textures couleurs + speculaire + normal map. J'ai mis en place quelques effets tels que des ombres dures et de l'AO "bas de gamme" (SSAO de son vrai nom, pour screen space ambient occlusion). Il me reste à faire le rendu d'objets ayant de la transparence, la réflexion et la réfraction et quelques autres optimisations non visuelles. Si je le peux, j'aimerais ajouter des effets de post-prod comme du bloom, de l'antialiasing, ...

Je vais aussi m'occuper de rendre le projet disponible sous Windows. En tout cas, rien n'empêche le portage sous tous les OS d'ordinateur. Actuellement, seules les personnes utilisant Linux peuvent s'en servir. Désolé pour les fans de la pomme, je n'ai aucune machine de chez Apple...



D'un point de vue technique, j'ai puisé des idées auprès de quelques moteurs existants. Par contre, j'ai pris l'idée mais je l'ai implémenté par moi-même, sans récupérer de code ici ou là. C'est de la rétro-ingénierie.
J'ai par exemple repris l'idée de framegraph de Qt3D que je trouve excellente, bien que perfectible. Par exemple, ils ne permettent pas d'étendre leur moteur en ajoutant de nouveaux types de noeuds pour le framegraph. Ou bien ne proposent pas de quoi faire de l'AO facilement.
J'ai aussi lu de la documentation sur Unity pour connaître la façon dont ils structurent leurs render targets ou quelques optimisations tel que le static batching.

Pour les personnes intéressées de tester, sachez que j'ai fait un petit programme de démo facile à compiler (sous Linux donc). Les dépendances à installer se trouvent dans le README du projet.
Il faut aller dans le dossier "hARMful/Softwares/Tests/HOPEful/" et taper la commande "cmake ." dans un terminal. Puis "make -j" qui ne devrait pas afficher d'erreur (tout vert). A la fin, le binaire se trouve dans "hARMful/Softwares/Tests/HOPEful/Rendering/bin/". Il compile sous ArchLinux et Debian Sid.


Versions suivantes

Pour la version 1.1 (sortie prévue à début 2022), j'axerai le développement sur les interactions utilisateur (clavier/souris et manettes), l'intégration d'un moteur physique et encore de nombreuses optimisations du moteur. Il y aura aussi le support de meshs animés.

La version 1.2 (sortie prévue mi/fin 2023) reviendra sur le rendu avec la disponibilité de rendus dits photoréalistes avec des matériaux "PBR" similaires à ceux de EEVEE. J'essaierai de proposer une ambient occlusion (Ground-truth ambient occlusion) bien plus réaliste, des ombres douces, et le support des HDRis. Normalement aussi, l'ajout de sons en passant par la bibliothèque OpenAL que j'ai déjà utilisée sur un autre projet.

Je pense aussi que je consacrerai une version à un moyen d'étendre le moteur. Tout d'abord, et ça ne devrait pas être un gros travail, permettre à n'importe qui d'ajouter des choses dans le moteur depuis son application 3D. Ensuite, proposer un système pour ajouter des scripts à la façon du BGE qui laissait la possibilité de développer des comportements en Python. Je n'ai aucune idée de la façon dont ce genre de chose peut s'incorporer donc ça demandera de la recherche.

La version 2.0 est encore très vague. Elle pourrait être réservée au passage vers d'autres technologies comme Vulkan si elles se montrent suffisamment intéressantes dans quelques années.

Merci d'avoir lu !
Je vous ferai part des avancées au fur et à mesure qu'il y aura du nouveau.


Contribution le : 03/01 19:53:35
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
02/09/2010 10:34
Post(s): 657
Salut,
Super projet, j'espère que tu le mèneras aussi loin que tu le souhaites !
Tu devrais aller voir https://www.raylib.com/, c'est un projet similaire mais en C et qui commence à être assez mature, je suis sûr que tu pourrais en tirer du bon.

Sinon tu prévois une certaine intégration avec Blender ?
Je trouve que souvent ce qu'il manque aux moteurs de jeu 3D c'est la possibilité de construire des scènes visuellement, parce que les construire directement en C++ c'est assez difficile et peu intéressant.

Dans tout les cas c'est super prometteur, je n'ai pas le temps de tester tout de suite mais j'y manquerais pas !

Contribution le : 07/01 12:34:45
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2372
Hello ! Merci pour ton soutien !
Je connaissais pas du tout raylib mais je vais regarder ça de près.


Oui, l'intégration avec Blender est même une idée que j'ai en tête mais que je n'ai pas notée.

On peut charger des fichiers pour les meshs. Pour la capture d'écran, c'est un seul FBX et le moteur créé tout les nœuds correspondant et y donne un accès si on veut changer des choses. Par exemple, éditer un matériau.

Pour le chargement des géométries, j'utilise ASSIMP. Or, ASSIMP est capable d'importer des fichiers .blend.
https://github.com/assimp/assimp

Ce qu'il faudra que je fasse, c'est explorer davantage ASSIMP afin de pouvoir récupérer plus de données que la géométrie et les matériaux. Il permet d'accéder aussi aux lampes et aux caméras.
On peut alors envisager un petit set up de scène dans Blender et l'importer directement dans un jeu avec assez peu de travail.

Voilou !

Contribution le : 08/01 09:33:00
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1615
Salut les copains,

Je supposes que tu le sais déjà, bibi09, mais veille bien à ce que ton moteur gère bien les armatures et ce, en quantités.

Je ne suis pas passé encore au dessus de la version 2.70 du BGE mais comme nous avions parlés de la version 2.72 et 2.76 avec toi, entre autre il me semble, je n'ai pas encore mis à l'épreuve le BGE à ce sujet...

Contribution le : 09/01 09:42:48
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
02/09/2010 10:34
Post(s): 657
Salut,
Je suis tombé sur cette liste hier soir, je me dis que ça pourrait te servir pour une partie de tes objectifs.
C'est une liste de libs minimalistes en C ou C++ et la plupart du temps dans le domaine public. Y a un peu de tout: GUI, math, geometrie, 2D, 3D etc...

Bon et puis y a ça aussi, pour choisir un langage de script.

Contribution le : 11/01 11:15:16
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2372
Salut Redstar et Commentquonfait !
Merci pour vos retours et vos idées, ça fait plaisir de voir des personnes s'intéresser.

@Redstar: Yep, je prévois bien de faire de l'animation avec des squelettes. ASSIMP embarque ces infos, il faudra que je me penche plus sur ces données. Pour l'instant, c'est un peu flou car selon les sources, ce n'est pas toujours pareil. Ça doit dépendre aussi de l'évolution de ASSIMP.

Il m'a semblé lire que pour chaque animation enregistrée sur une armature, ASSIMP donne les keyframes pour la rotation, la translation et le scale des bones. D'autres sites parlent de matrices de transformation aussi. Grosso modo, c'est la même chose.
Dans tous les cas, je vois un peu déjà comment ça doit se goupiller pour faire du skinning hardware (calculs côté GPU).

Pour gérer un grand nombre d'objets animés, le meilleur choix sera sans doute de faire de l'instancing de meshs.


@Commentquonfait: Merci pour les liens.
Je jetterai un œil à la partie scripting que tu indiques bien que je pense m'orienter vers du Python, langage qui s'inègre particulièrement bien dans du C++.
Je ne pense pas utiliser le premier que tu donnes. Non pas que je trouve ça mal fait ou quoi, plutôt parce que pour mon projet, j'ai deux lignes directrices :

1. utiliser le moins possible de bibliothèques externes afin de faciliter la compilation du projet (surtout quand je ferai un portage sous Windows, ça risque d'être rock n' roll !). J'ai un collègue qui fait un projet en 3D aussi mais en utilisant tout un tas de dépendances WTF. J'ai jamais pu le compiler.
Mon adage favori en programmation, c'est le principe KISS (Keep it simple, stupid) ou autrement dit : "pourquoi faire compliqué quand on peut faire simple".
https://fr.wikipedia.org/wiki/Principe_KISS

2. mon but n'est pas d'avoir un truc de ouf qui rivalise avec Unity ou Unreal. C'est avant tout un projet pour me permettre d'apprendre par moi-même, en faisant et en comprenant ce que je fais. Je veux aussi faire le plus de choses possible par moi-même pour le cadre professionnel, un peu comme le fait un graphiste en montant un portfolio.

Par exemple, pour la partie maths, j'aurais pu me la couler douce et utiliser la lib GLM. A la place, j'ai passé un an à coder ces trucs et au final, j'ai fini par comprendre toutes ces opérations. Quand je code un truc en 3D avec des maths, maintenant je sais ce que je fais. C'était pas gagné d'avance vu mon niveau en maths !
Ironie du sort, j'ai même fait une correction dans le code de OGRE car il y avait une erreur dans les Quaternions !

En plus, je voulais tester une technologie que j'ai jamais eu l'occasion d'utiliser jusque là : les "instruction unique, données multiples" ou SIMD en anglais. C'est ce qu'on voit sur les fiches techniques des CPU : SSE, SSE2, SSE4.1, AVX... Ces technologies permettent faire un calcul identiques sur plusieurs données en parallèle (je ne parle pas de multithreading).
On a donc un gain de performances non négligeable !
https://fr.wikipedia.org/wiki/Single_instruction_multiple_data

Par exemple, j'ai un vecteur V(x, y, z, w) et une valeur N.
Si je fais naïvement V x N, je dois calculer successivement (dans une boucle) Vx x N, Vy x N, Vz x N, Vw x N.
Avec du SIMD, ces quatre opérations sont exécutés en même temps au niveau du CPU. On a donc un boost conséquent quand on fait des calculs pour de la 3D.

Avant, je faisais des tests de performances avec et sans utilisation des SIMD, avant de supprimer la partie sans SIMD pour des raison de coûts en maintenance.
Sans SIMD, je calculais une partie de la suite de Fibonnacci en 9132ms.
Avec SIMD, c'est en 4768ms soit deux fois moins de temps.

Si on pense au temps de calcul dans le cadre d'une application 3D temps-réel, ça peut faire une nette différence.

J'espère que tu comprendras mieux pourquoi je n'essaie pas de m'appuyer sur des bases existantes.

Merci encore pour votre aide !

Contribution le : 11/01 16:30:52
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2372
Hello,
J'ai commencé à travailler sur les objets transparents, mais je pense que je vais mettre ça en pause.

En effet, c'est une partie assez obscure pour moi car ça demande des connaissances dans un domaine en OpenGL dont je n'ai eu aucune connaissance préalable (A-Buffer). Je ne suis pas satisfait des quelques infos disponibles sur internet à ce sujet et ça reste donc toujours aussi difficile à appréhender.
https://en.wikipedia.org/wiki/Order-independent_transparency

C'est pourquoi, je me suis acheté un livre sur les shaders en OpenGL4.6 (et compatibles Vulkan, donc très intéressants pour plus tard aussi). Il y est expliqué notamment comment implémenter cette méthode de transparence.

https://www.oreilly.com/library/view/opengl-4-shading/9781789342253/

La table des matières montre de nombreux points que j'ai prévus d'implémenter.
Le livre aborde également des points tels que l'animation côté shaders, la tesselation, les compute shaders (utiles pour du calcul généraliste en GPGPU), etc. De quoi passer des heures accroché à ces précieuses pages !

Un point important que je vois avec ce livre également, c'est la version d'OpenGL 4.6. Il utilise la toute dernière, ce qui me convient puisque c'est celle-là que j'utilise. Jusque là, je me suis principalement basé sur les tutoriels de LearnOpenGL. Ceci étant, il s'agit de tutoriels avec une version plus ancienne d'OpenGL (OpenGL 3.3). Je peux passer à côté de pratiques plus intéressantes bien que j'ai déjà adapté les tutoriels à mes besoins.

Quand je recevrai le livre*, je décortiquerai les différents points traités et je reverrai la roadmap du projet. Le bouquin me fera office de phare pour garder le cap.

* J'ai besoin de papier pour lire, les ebooks c'est bien sympa mais ça me fatigue trop les yeux...

Contribution le : 14/01 10:38:00
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2372
Hello tout le monde,
Je reviens vers vous car, après avoir commencé à étudier le bouquin, j'ai défini une nouvelle roadmap pour le projet.

Je suis parti sur un cycle de développement plus court en m'appuyant sur des fonctionnalités par version plutôt qu'un ensemble de fonctionnalités.

La première version du moteur devrait sortir plus tôt que prévu. Je pensais faire une release vers avril-mai, ça se fera sans doute en février. Après cette sortie, je ferai sans doute un break pour continuer sur mon projet d'animation avec Blender...

Pour la suite directe du moteur, je vais d'abord m'orienter sur la qualité du rendu. En particulier, et c'est probablement ce qui m'intéresse et me motive le plus sur le plan technique et visuel : du rendu physiquement réaliste (matériaux PBR comme dans EEVEE).
Je vais procéder en deux étapes. D'abord, je pense partir sur l'amélioration de l'éclairage en introduisant des lampes de type "spot" que je n'ai pas encore. J'ajouterai aussi le calcul des ombres pour les lampes ponctuelles et les spots, tout en apportant des ombres douces bien plus belles que les ombres brutes actuelles. Si possible, j'aimerais implémenter des ombres dont la netteté varie selon la distance (aussi appelée "Percentage-Closer Soft Shadows"). Pour clore cette partie sur l'éclairage, j'aimerais utiliser une ambient occlusion plus réaliste, à savoir de la "Ground-Truth Ambient Occlusion".
La seconde partie du travail sera axée sur les matériaux dits physiquement réalistes ou PBR. Il s'agit ni plus ni moins des matériaux qu'on peut apercevoir en utilisant EEVEE. A cela s'ajoutera l'éclairage ambiant à l'aide d'images et le support de HDRs. Enfin, l'ajout du parallax mapping en guise d'amélioration du normal mapping (meilleure perception du relief d'une surface).

Ensuite, j'attaquerai un morceau de choix avec la transparence. Jusque là, le moteur sera incapable d'afficher correctement des objets totalement transparent ou translucides. Je passe sur les raisons techniques mais dessiner des objets transparents en 3D (sans raytracing), c'est laborieux et souvent pas super joli. Ici, je vais utiliser une méthode moderne qui apporte un bon rendu des objets transparents même quand ils sont imbriqués les uns dans les autres. La version contiendra aussi différents effets liés comme la réfraction et la réflexion de lumière.

Outre des améliorations des performances, je continuerai avec un peu de "vie" dans les mondes 3D affichés. Là aussi, ça sera en deux temps.
D'abord, par les interactions utilisateur (clavier, souris, manettes). Je m'occuperai aussi d'incorporer le moteur physique Bullet pour les rigid bodies.
Après ça, ce sera avec différentes formes d'animation : meshes animés, objets pouvant suivre de trajectoires, ...

Pour la suite, je verrai quoi faire en temps voulu. Les fonctionnalités dont j'avais parlé précédemment (scripting, UI, Vulkan, ...) sont gardées pour les versions qui suivront. Il y a déjà pas mal de travail !

Contribution le : 18/01 22:31:13
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
02/09/2010 10:34
Post(s): 657
Salut,
En ce qui concerne tes remarque sur tes liens, en fait les libs du premier liens sont justement plutôt dans tes critères, c'est des libs single file donc facile à intégrer et dans le domaine public donc tu peux simplement copier le ficher dans ton projet.
Pour le scripting je trouve python un peu lourd pour être embarqué, et pour le coup c'est lourd comme dépendance, contrairement à ceux du second lien.

Enfin bon après c'est juste des suggestions .

Cool pour tes nouveaux projets ça me parait pragmatique comme road map. Bon courage pour faire tout ça.

Contribution le : 19/01 15:14:35
Créer un fichier PDF de la contribution Imprimer


Re: hARMful engine
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2372
Merci !
Oui, je comprends bien ce que tu veux dire pour les libs. Mais ma principale motivation pour ce projet, c'est d'avoir le plaisir de faire ces choses par moi-même.
Si je les prends déjà toutes faites, ça n'a plus aucun intérêt.


Pour le langage de script, je verrai le moment venu. Mon choix n'est pas encore arrêté et à vrai dire, je ne m'y connais pas vraiment. En fait, je parlais de Python parce que c'est le seul que je connais assez bien pour en avoir fait avec Blender.
Python propose énormément d'extensions pour plein de choses, c'est aussi pour ça que j'y pense.

Je sais qu'il y a aussi Lua en langage de script populaire qui est pas mal.

Faudra de toute façon tester pour voir lequel me semble le plus pertinent !


Contribution le : 19/01 17:49:35
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
(1) 2 3 4 ... 9 »




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses switch entre IK/FK 4 35 Hier 18:54:05
prometheusx 
Questions & Réponses Je bloque sur la modélisation de ce verre! Avez-vous une solution? 8 229 Hier 13:23:47
debutant 
[WIP] et travaux terminés [WIP] Tutoriel vidéo et création de mon prochain court métrage 3 207 Hier 02:29:55
Meltingman2 
Questions & Réponses [non résolu] cloth: déformation bizzarre au rendu 3 67 07/08 09:21:18
Arielboid 
Questions & Réponses les cheveux longueur 1 51 06/08 19:53:18
Rimpotche 
Questions & Réponses ADDON MB - Lab 0 57 06/08 15:29:23
GI-jo13 
Questions & Réponses [résolu] en sculpt mode 5 173 04/08 18:21:10
prometheusx 
Questions & Réponses [résolu] Array circulaire 2 144 04/08 15:22:46
Redstar 
[WIP] et travaux terminés [WIP] Teeny Tiny - Story    [1][2][3]...[5] 40 3963 04/08 07:18:00
Bibi09 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS horreur - Première version disponible !    [1][2][3]...[58] 576 98179 03/08 11:11:32
Hook 
Questions & Réponses Addon pour textures procedurales 2 145 02/08 20:11:35
Crocodile_13 
Questions & Réponses avis animation marche :)    [1][2][3][4] 34 713 02/08 20:03:14
prometheusx 
[WIP] et travaux terminés [terminé] court métrage 2020    [1][2] 13 874 02/08 15:28:29
flahaut 
Questions & Réponses [résolu] Générique, sous-titres etc 3 150 02/08 09:18:02
Corpia 
Questions & Réponses [résolu] Scène prend la couleur du fond    [1][2] 11 285 02/08 08:20:32
Arielboid 
Questions & Réponses [non résolu] Problele d'addon 0 115 02/08 01:52:30
nayther 
Questions & Réponses Addon pour textures procedurales 1 109 01/08 12:22:52
moonboots 
Questions & Réponses hair densité sélection de polys 9 247 30/07 23:18:21
lenogre 
Questions & Réponses [résolu] graph editor et location key frame 7 212 30/07 16:41:18
math_ 
Questions & Réponses les graphs editor :/ 4 196 30/07 11:19:07
prometheusx 

Qui est en ligne
133 utilisateur(s) en ligne (dont 89 sur Forums)

Membre(s): 0
Invité(s): 133


plus...
Nouveaux membres
SunnyCasil 9/8/2020
BernieBale 9/8/2020
JeseniaMau 9/8/2020
DaltonHodd 9/8/2020
Broderick9 9/8/2020
EleanorBin 9/8/2020
DorotheaKe 9/8/2020
Earl843969 9/8/2020
EleanorSca 9/8/2020
BernardMet 9/8/2020
Dernier Ajout
mirages-preview~0.jpg

Evènements à venir
Aou 13
Anniversaire Siskas
Sep 8
Anniversaire de ang
Nov 18
Anniversaire de RichDeg
plus 266 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2020 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445