De la 3D en Python ?

Le problème exposé dans ce sujet a été résolu.

Salut,

je me demandais s’il était envisageable de faire de la 3D avec Python. Attention, je ne parle pas d’utiliser des scripts dans Blender ou Maya. Je ne parle pas non plus de CAO mais plutôt du jeu-vidéo ou de l’animation. Loin de moi l’idée de concevoir le prochain Grand Theft Auto, je souhaiterai néanmoins aborder programmatiquement le monde de la 3D, en saisir un peu les contours. J’ai des notions solides en algèbre linéaire et en géométrie analytique si besoin.

L’idée au final serait de concevoir un petit moteur 3D, sans grande prétention. Je pensais à un voxel engine dans le style de Minecraft, par exemple. J’ai déjà réalisé un ray-caster avec PyGame.

Mes principales questions sont :

  • Quel(les) libraire(s) me conseillerez-vous pour mon utilisation ? OpenGL ? Panda3D ? Python-Ogre ?
  • Les performances en Python sont-elles acceptables où vaut t-il mieux se diriger vers un langage de bas niveau comme Rust ou C++ ?
  • Quelle différence y a t-il entre un moteur de rendu et la modélisation ? Un moteur comme Panda3D permet t-il la modélisation où s’agit t-il seulement de rendu d’entités pré-modélisées ? (textures, éclairage, ombres, etc.) ?

Merci d’avance.

+0 -0

Niveau librairie, je dirais que Ursina si tu veux un truc facile à prendre en main (en 10 lignes de code tu peux avoir un truc correct), sinon en plus compliqué mais plus performant Harfang 3D (🇫🇷).

Avec les librairies (souvent écrites en C++), Python s’en sort pas mal niveau performance.

+1 -0

Pour ce qui est de la performance, ça dépend de si tu fais du calcul en python ou si c’est délégué à la bibliothèque C++. À noter qu’il existe Godot Engine, un moteur de jeu, qui est scriptable avec le Godot Script, un langage inspiré par Python. Cependant, les devs indiquent que s’ils ont développé Godot Script, c’est parce qu’aucun langage de script existant ne leur permettait d’atteindre les fonctionnalités qu’ils souhaitaient pout interagir avec leur moteur, y compris Python.

https://docs.godotengine.org/en/stable/about/faq.html#doc-faq-what-is-gdscript

+1 -0

Merci @Melcore pour m’avoir fait découvrir Ursina. Rapide à prendre en main et plus ou moins performant (pour mes besoins) des tests que j’ai pu faire promptement. Même s’il est vrai que c’est limite un poil trop simpliste. (EDIT : ah mais c’est un framework Panda3D)

@Moté, en ce qui concerne les calculs, n’est-il pas possible d’utiliser une librairie comme numpy complémentairement par exemple ? Il me semble que les temps de calculs sont plutôt convaincants. Sinon je connais GodotEngine, mais je préfère me focaliser sur Python. Il est toutefois intéressant de comprendre pourquoi la plupart des languages de script ne leur convenaient pas.

Après je précise que mon objectif n’est nullement de faire quoique ce soit de pro. Les raisons de mon soudain intérêt pour la 3D sont purement éducationnelles.

+1 -0

Il me semble que le transfert entre API a toujours un peu de mal.

Ce sera vraiment négligeable si ce qui passe la ffi est en fait des pointeurs vers des tableaux. Transformer un PyObject qui en fait pointe vers un gros array numpy en par exemple un ndarray côté Rust coûte presque rien (c’est juste faire de la tambouille pour récupérer le pointeur et les informations de taille), surtout comparé aux calculs fait sur ces tableaux. Ce qui coûte vraiment cher, c’est typiquement de changer une liste Python de flottant Python en un tableau continu de vrai flottants (parce que faut aller chercher chaque flottant en mémoire derrière la couche de pointeurs que Python utilise pour les masquer), mais si tu utilises les API numpy et compagnie correctement pour charger et manipuler tes données, tu te retrouves jamais à faire ça en pratique.

+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte