hARMful engine

Posté par Bibi09 le 3/1/2020 19:53:35

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.


Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=3&topic_id=49507&post_id=580396