Vampire: petite introduction à Maggie3D

13 sujets de 1 à 13 (sur un total de 13)

  • thellier

      #376283

      Bonjour

      Comme je me remets à programmer et que là je suis en plein dans Maggie3D pour la Vampire alors j’en fais une petite présentation

      Maggie3D
      C’est quoi ?
      La nouvelle fonctionnalité du chipset SAGA de la Vampire qui ajoute du traçage 3D
      Ca fonctionne comme le blitter (c’est le blitter en fait) on remplis quelques registres custom et après ca trace le nombre de pixel prévu comme le blitter

      Comme vous le savez les cartes 3D tracent des triangles texturés et là cela trace en une simple passe une ligne du triangle
      Cette ligne est texturée avec correction de perspective, filtrée (bilinear) et gère le zbuffer et un gouraud

      ( Néanmoins il a que quelques possibilité de mode de traçage : une seule couleur de lampe, un seul mode de zbuffer, un seul blending (transparence/mélange de couleurs) c’est beaucoup moins que Warp3D )

      ————-
      —-X——-
      —-#X——
      —-X#X—– <— Maggie trace une ligne texturée du triangle comme celle ci
      —-#X#X—-
      —-X#X#X—-
      —————–

      Ca parait peu mais ça peut être des centaines de pixels d’un coup dans cette ligne pour de gros triangles 🙂

      Il suffit donc de tracer toutes les lignes pour obtenir un triangle
      et de tracer tout les triangles pour tracer un objet 3D
      et tout les objets 3D pour obtenir la scene 3D du jeu

      Maggie.library

      Est une bibliothéque qui évite de s’embêter à programmer directement en hard Maggie3D avec ses registres, un peu comme OpenGL vis à vis des cartes 3D
      Il permet de tracer une série de triangles ou de polygones en une seule fonction
      et calcule la transformation/projection/éclairage de cet objet
      Elle gère aussi les textures et le zbuffer, l’écran et l’éclairage et les tableaux d’indices et de points 3D
      Bref c’est un peu comme GLES : un OpenGL avec juste quelques fonctions notamment juste les plus efficaces pour tracer …. mais sans les shaders programmable bien entendu 😉

      slingshot

        #376295

        Super explication ! 🙂 Merci beaucoup
        Est ce que tu arrives a évaluer quelles performances ont pourrait avoir avec Maggie3D ?
        Via un exemple concret.

        Merci

        __sam__

          #376297

          Est-ce applicable sur les écrans bitmaps Amiga ou uniquement sur du RGBA ? Au niveau perfs, ca fait combien de pixels par secondes ?

          Samuel.

          Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
          A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
          A500 Vampire V2+ ^8^ 🙂
          (mais aussi TO8, TO8D, TO9. Groupe PULS.)

          thellier

            #376306

            Désolé les gars j’en suis pas encore au stade de compiler le code :-/

            Là j’ai juste écrit de nouvelles fonctions utilisant directement Maggie3D en hard pour une version de Cow3D n’utilisant pas Warp3D mais juste ses propres fonctions de traçage de triangles

            Ca nous donnera les perfs maximales (sans Warp3D, sans OpenGL….)

            Si je vois que c’est déjà trop lent ça vaudra pas le coup de faire un WaZp3D par dessus
            Si c’est assez rapide il suffira de réécrire soft3D.library qui est le driver (soft puis hard) de WaZp3D en utilisant Maggie3D et non pas un rendu soft
            Une fois que la Vampire aura un soft3D.library qui marche elle aura Wazp3D qui marche par dessus et donc aussi MiniGL et StormMesa qui marchent par dessus

            Par ailleurs il faudra aussi que je mette à jour les sources de Wazp3D car la version de test v57 (celle avec le rendu Nova sous OS4) n’a jamais été recompilé sous OS3/68k.
            En dehors du rendu Nova (qui ne peut évidemment marcher que sous de vraies machines OS4) cette version a plusieurs optimisations utiles

            Admin

            bigdan

              #376375

              Intéressant, je suis curieux de voir cela que cela donnera … A suivre donc

              thellier

                #376378

                Le code de Cow3D version Maggie3D est compilé (0 errors 0 warnings) je teste sur Vampire demain soir dès que j’ai la CF et adapteur pour mettre le nouvel ApolloOS
                Après il vaudra mieux réécrire la fonction de tracé de triangle en pur ASM pour avoir la performance optimale

                @Sam apparemment Maggie3D ne peut rendre que sur du ARGB32 ou du RGB565 donc pas dans les autres modes bitmaps et bitplanes dommage si des jeux existants veulent juste du RGB24

                slingshot

                  #376381

                  une demo justement sortir hier sur le sujet par la Team.
                  http://www.apollo-core.com/knowledge.php?b=8&note=40358&z=lrFgyq

                  thellier

                    #376477

                    Bon mon Cow3D marchouille avec Maggie3D (ça marche mais le double buffering est cassé donc c’est pas beau mais c’est pas mon sujet)
                    La vache fait +- 4 fps avec avec rendu Maggie3D mais elle fait dans les 6000 triangles ca nous fait dans les 27000 triangles texturés/seconde
                    Y a latitude pour optimiser un peu mais ça doublera pas la vitesse
                    Faut que j’explore si RGB565 est vraiment plus rapide comme écran que ARGB

                    __sam__

                      #376478

                      Ah 4fps… Je m’attendais à bien plus car dans ce fil Gunnar parle que Maggie fait facile du 110fps pour le rotozoom cité plus haut (qui n’a pas vraiment besoin de la 3D en effet).

                      Samuel.

                      Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
                      A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
                      A500 Vampire V2+ ^8^ 🙂
                      (mais aussi TO8, TO8D, TO9. Groupe PULS.)

                      thellier

                        #376479

                        Oui mais le rotozoom ne trace qu’un quad*, la vache trace près de 6000 triangles

                        (*) comme on trace des segments de ligne horizontales avec maggie on est pas limité à tracer des triangles mais des quads, polygones ou surfaces simples même un rond plein peut être tracé avec

                        —–#X#X#—-
                        —–X#X#X—- on peut faire un quad avec des lignes horizontales texturées
                        —–#X#X#—-
                        —–X#X#X—-
                        —–#X#X#—-

                        ——–#X—–
                        —–X#X#X#—- on peut faire un rond avec des lignes horizontales texturées
                        —-X#X#X#X—
                        —–X#X#X#—
                        ——–X#—-

                        __sam__

                          #376481

                          Oui et franchement les rotozoom ca se fait en 68000 de base et là il n’y avait pas de rotations.

                          Dans mon test “Monkey” (github) on affiche autour de 1000 triangles à 30 fps en 680×0 pur, ce qui nous amène à 5fps pour 6000 triangles. Du coup je comprends mal le gain de Maggie par rapport à du 100% soft.

                          Si je me souviens bien, le profiling n’indiquait pas que les routines de tracé comme les plus couteuses, mais aussi les routines de calcul 3D qui sont horrible à optimiser si on veut éviter les bulles dans le pipeline, mais aussi et surtout: le fait qu’il y a aucune primitive de calcul même minimale comme un mult+add pour faire des produit scalaires super rapidement et ne pas perdre trop de temps dans les calculs matriciels.

                          Samuel.

                          Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
                          A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
                          A500 Vampire V2+ ^8^ 🙂
                          (mais aussi TO8, TO8D, TO9. Groupe PULS.)

                          thellier

                            #376482

                            Ben si par rapport à ton monkey il y a texture+filtering+blending+zbuffer et puis moi je suis un programmeur en C donc mes performances sont moins bonnes (notamment sur le calcul)

                            Par exemple dans WaZp3D j’ai privilégié la compatibilité et le debuggage donc y a beaucoup trop de code qui ralentit mais mon but initial était de tourner sur une machine rapide (winuae) avec une compatibilité et options de debug maximales pour que ça puisse servir à développer des applis WaRp3D dans WinUAE

                            Bref dans mon mode de développement l’optimisation passe vraiment en dernier derrière fonctionnalités, lisibilité du code, compatibilité, stabilité

                            Effectivement l’Apollo team devrait nous fournir le meilleur code/instructions pour faire du calcul vectoriel
                            Après maggie.library inclut les transformations/éclairage donc peut être ses fonctions sont 68080 optimisés, mais je sais pas je m’en suis pas servi

                            Pour ma part une instruction qui serait très utile serait un add multiple genre un LONG d0=d0+d4; d1=d1+d5; d2=d2+d6; d3=d3+d7;
                            pour faire en une passe
                            x=x+deltax;
                            y=y+deltay;
                            z=z+deltaz;
                            w=w+deltaw;

                            __sam__

                              #376489

                              Ben si par rapport à ton monkey il y a texture+filtering+blending+zbuffer et puis moi je suis un programmeur en C donc mes performances sont moins bonnes (notamment sur le calcul)

                              Bah le Monkey est en C pour l’essentiel (juste un seul fichier ASM) et il y a le Zbuffer, le gouraud etc. Il n’y a que la texture que je n’ai pas ajoutée car j’en ai fait dans une autre démo (un rotozoom qui n’a rien à envier à la Démo Maggie), et aussi dans quake.

                              Pour ma part une instruction qui serait très utile serait un add multiple genre un LONG d0=d0+d4; d1=d1+d5; d2=d2+d6; d3=d3+d7;
                              pour faire en une passe
                              x=x+deltax;
                              y=y+deltay;
                              z=z+deltaz;
                              w=w+deltaw;

                              C’est forcément des longs ? Si tu peux te contenter de WORD, il y a une instruction AMMX qui fait 4 additions d’un coup: PADDW. (Note: il serait bien de la coller dans un intrinsics.h pour y avoir accès en C).

                              Si tu tiens aux LONG, en réorganisant le code ASM généré par le compilo pour éviter les bulles dans le pipeline, on peut s’arranger pour que deux additions s’exécutent en parallèle sur les deux unités arithmétiques. Tu gagnerait un facteur 2 sur ces opérations. C’est déjà ca.

                              Dans le monkey, j’utilise en plus en parallèle le FPU, et les unités entières. Mais bon c’est tricky /touchy et il ne faut faire cela qu’à la toute fin sur les fonctions que le profiler mets en avant sinon on optimise pour rien (on perds son temps).

                              Samuel.

                              Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
                              A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
                              A500 Vampire V2+ ^8^ 🙂
                              (mais aussi TO8, TO8D, TO9. Groupe PULS.)

                            13 sujets de 1 à 13 (sur un total de 13)

                            • Vous devez être connecté pour répondre à ce sujet.

                            Forums AmigaOS, MorphOS et AROS Matériel Vampire: petite introduction à Maggie3D

                            Amiga Impact