Re: hARMful engine

Posté par Bibi09 le 11/1/2020 16:30:52
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 !

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