Panda3D v1.9: un aperçu des nouveautés

Panda3D est un excellent petit moteur de jeu qui donne d’assez bons résultats. Bien entendu, on ne le comparera pas au game engine de Blender, à Unity ou à Unreal Engine 4. Ce que j’aime chez lui, c’est qu’il est très simple à apprendre et qu’avec un petit script qu’on lance en ligne de commande (interpréteur python), on arrive à faire de bons résultats. Le jeu tourne sans modification sous Windows, Mac OS et Linux. Il est également possible de créer des jeux qui se jouent dans le navigateur web, mais au travers d’un plugin toutefois (ce n’est pas du HTML5/WebGL).

J’avais réalisé quelques maquettes de jeux avec, dont un jeu de combat d’avions – je mettrai prochainement les sources du jeu sur ce blog.

Je ne vais pas vous présenter Panda, mais les nouveautés qui sont annoncées pour la version 1.9 (la version actuellement téléchargeable est la 1.8.1)

 Le rendu OpenGL a été grandement retravaillé afin de prendre en compte les fonctionnalités modernes proposées par cette librairie:

  • sRGB support (linear pipeline): Les écrans d’ordinateur reproduisent les couleurs par synthèse additive à partir de trois primaires. L’unité centrale envoie à l’écran, pour chaque point (pixel), trois valeurs numériques correspondant à la luminosité de chaque primaire à cet endroit.La norme sRGB établit des valeurs compatibles avec la plupart des écrans du commerce, de sorte que les couleurs soient, avec les valeurs par défaut, suffisamment bien représentées, lorsque aucune information plus précise n’est disponible. Au final, on obtient des images dont la luminosité est optimisée en fonction de l’écran sur laquelle elle est projetée. Comme une image vaut mieux que cent discours, voici 2 photos profitant du physically-based rendering :ColorSpace-UncorrectedColorSpace-CorrectedLes infos techniques sont disponibles dans la documentation.
  • Tessellation shaders : La tesselation permet d’ajouter un maillage plus fin à un objet afin de permettre des transformations physiques, notamment au niveau des normal maps. Dans l’exemple ci-dessous, le pavage d’un chemin est tout d’abord subdivisé, puis déformé par une texture dite de “normal map”  – le tout étant réalisé automatiquement par le GPU:

tessellated-displacement-870x489

  • Compute shaders: Sont désormais supportés les vertex shaders, les pixel shaders, mais également les geometry shaders (dont la tesselation fait partie)


sponza-reflection

  • Render-to-texture : Il est désormais possible d’effectuer le rendu directement dans des texture arrays, des cube maps, et des textures 3D.  Il est ainsi possible d’optimiser la gestion des ombres et d’appliquer par exemple plusieurs ombres sur un objet (provenant de plusieurs lampes) en une seule passe.
  • Stereo FBOs : Il y a longtemps que la gestion stéréoscopique existe sous Panda3D, mais là, il s’agit d’optimiser l’affichage pour des média comme l’Occulus Rift.
  • Debugging and profiling : Des outils ont été ajoutés, et des amélioration ont été apportées au système de débogage et de profiling. Pstat s’enrichit par exemple du profiler de GPU interrogeant ainsi directement le hardware, sans avoir à passer par une mesure de CPU.

pstats_gpu_timing

  • Divers: pas mal d’améliorations en terme de performance, de gestion des cubemaps sans les traces de couture (comme ci-dessous), une écriture plus aisée des GLSL shaders, etc.

seamless-cubemaps
Voilà, on oublie souvent qu’il y a pas mal de petits moteurs sympas qui sont beaucoup plus facile à prendre en main par les débutants que les outils dont on parle le plus souvent. Personnellement, je trouve Panda3D très adapté à l’enseignement de la programmation et de la 3D. C’est un moteur robuste, bien écrit, et qui bénéficie du soutient des studios Disney et la Carnegie Mellon University.

 En attendant que cette version soit disponible (on peut déjà la tester en version bêta), Je vous laisse avec un petit paysage sous panda3D :


 

Ces articles pourraient aussi vous intéresser …