Author Topic: Hyperion v1.1.0: la revanche des FBOs  (Read 4431 times)

0 Members and 1 Guest are viewing this topic.

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2385
    • oZone3D.Net
Hyperion v1.1.0: la revanche des FBOs
« on: January 26, 2006, 12:17:03 AM »
Hyperion 1.1.0 download

Cette nouvelle version d'Hyperion apporte le support de la programmation GPGPU. Voir le site officiel ( http://www.gpgpu.org ) pour plus de détail.

Mais en un mot, la prog GPGPU permet d'utiliser le GPU dans des calculs généraux comme les simulations de phénomèmes physiques complexes (dynamiques des fluides par exemple). Mais une des grandes difficultés est de transposer les algorithmes CPU en algorithmes GPU.

La prog GPGPU nous montre la voie à suivre à partir de 4 concepts:

- GPGPU concept 1: Arrays = textures
- GPGPU concept 2: Kernels = shaders
- GPGPU concept 3: Computing = drawing
- GPGPU concept 4: Feedback

Ces 4 concepts sont maintenant supportés dans Hyperion. Les concepts 2 et 3 le sont depuis les premières version d'Hyperion. Mais la grande
nouveauté se situe au niveau des concepts 1 et 4. Le concept 1 nécessite des textures en virgule flottante afin de pouvoir stocker des nombres réels non clampés (i.e. non limités à l'interval [0.0; 1.0]). Ces nombres sont codés au format virgule flottante IEEE 754 32-bits. Hyperion possède un nouveau format de pixel pour ces textures: RGBA_32F.

Les textures en virgule flottante ne sont accessibles qu'au travers des vertex et pixel shaders. Hyperion offre à présent un support des FBO plus complet. Les FBOs ou Framebuffer Objects sont la solution moderne au concept 4: le feedback. Le feedback permet simplement d'utiliser
les valeurs précédemment calculées (output) comme nouvelles valeurs d'entrées (input). Le pixel shader, responsable des calculs, stocke le
nouveau resultat dans la texture. La seule façon de pouvoir écrire dans une texture RGBA_32F est de faire un RTT ou render to texture. Mais un RTT classique utilise le framebuffer de la fenêtre 3D de l'application. Ce framebuffer clampe les valeurs dans la zone [0.0; 1.0] ce qui est problématique dans notre cas. Les FBOs permettent de créer des nouveaux framebuffers qui ne possèdent pas cette limitation. Il est possible d'y écrire des valeurs full-IEEE 754 32-bits. La host-api LUA a un nouveau jeu de fonctions pour manipuler les FBOs ( HYP_Scene.fbo_xxxx() ).

Mais comme toujours dans le monde de la 3D temps réel, les choses ne sont pas simples. nVidia et ATI supportent tous les deux les textures en
virgule flottante mais chacun à sa façon.

nVidia ne supporte les textures flottantes que sous la forme de textures NPOTD (Non Power Of Two Dimension) via l'extension
GL_NV_texture_rectangle avec ce que ça implique (coordonnées de texture uv non normalisées...). Sur une architecture nVidia, Hyperion
crée automatiquement un texture NPOTD si le format de pixel est EGBA_32F et si elle est attachée à un FBO. Il est aussi possible de
spécifier une texture NPOTD avec l'attribut type du noeud texture en utilisant l'enum TEXTURE_RECTANGLE_2D.

De son coté, ATI ne supporte pas l'extension GL_NV_texture_rectangle mais vaguement une extension GL_EXT_texture_rectangle. Mais je
n'ai pas trop insisté (la fatigue surement) sur ce point car ATI supporte les textures flottantes avec des textures 2D normales (POTD) mais
n'offre qu'une résolution de calcul de 24-bits...

Dernière chose, au niveau des shaders, le sampler de texture samplerRect permet d'accéder au textures NPOTD mais ce sampler n'est supporté seulement que par nVidia.

Pour résumer, actuellement, seules les cartes nVidia offrent un support correct pour les calculs GPGPU.

Pour un bon complément à cette explication, allez jetter un coup d'oeil au tutorial
sur le rendu de la fractale de Mandelbrot en utilisant les techniques GPGPU et surtout la demo qui montre la mise en oeuvre de tous ces concepts.

Voilà pour les grandes lignes de la version 1.1.0 d'Hyperion.

La prog 3D c'est beaucoup, beaucoup de temps, de la sueur, du sang, des hurlements, un combat perpétuel contre la machine mais heureusement un peu de satisfaction quand les pixels s'ordonnent correctement à l'écran. Avis aux amateurs...