Anti-Aliasing nachträglich einbauen



  • Hi,
    Ich möchte euch hier fragen ob es mit C++ nachträglich möglich ist in 3D Spiele von z.B. EA AA einzubauen?
    Man muss ja jeden einzelnen Pixel auslesen, und dann immer den Mittelwert ausrechnen und jeweils abändern.
    Würde das dann Funktionieren?( Abgesehen von dem Cheatschutz ).
    Weil der Bildschirm giebt ja dann das ursprüngliche Bild aus und ich schicke das neue schnell hinterher, wodurch man das ursprünglich Bild ja nicht mehr wahrnimmt?

    MFG ReduX



  • Ganz pragmatisch gedacht: für gewöhnlich kann man das beim Graphikkartentreiber einstellen.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    audacia schrieb:

    Ganz pragmatisch gedacht: für gewöhnlich kann man das beim Graphikkartentreiber einstellen.

    so seh ich das auch, und wenn das nicht geht, wird es relativ aufwendig ohne den sourcecode sowas einzubauen.



  • ReduX schrieb:

    Man muss ja jeden einzelnen Pixel auslesen, und dann immer den Mittelwert ausrechnen und jeweils abändern.

    😮 What? Das wird doch per Treiber/OpenGL-Einstellung gemacht.

    IMHO wird doch AA vollstaendig automatisch von der Grafikkarte vorgenommen.



  • Einfaches verwuscheln der 2d Leinwand die du auf dem Monitor siehst wird dir auch nicht so viel bringen, AntiAliasing in 3d Spielen geschieht imho an den 3d Objekten und nicht nachträglich nachdem das Gesamtbild aufgebaut wurde.
    Kannst ja mal einen Screenshot machen, den in Photoshop öffnen und den Weichzeichner(ich glaub es gibt auch einen Filter namens Anti-Aliasing) bemühen oder so und zu sehen was daraus wird 😉 .



  • dreaddy schrieb:

    Einfaches verwuscheln der 2d Leinwand die du auf dem Monitor siehst wird dir auch nicht so viel bringen, AntiAliasing in 3d Spielen geschieht imho an den 3d Objekten und nicht nachträglich nachdem das Gesamtbild aufgebaut wurde.

    In OpenGL kann man Anti-Aliasing über den OpenGL-Accumulation-Buffer realisieren, da wird einfach das gleiche Bild ein paar mal gerendert, aber um den Bruchteil eines Pixels verschoben und nicht mit voller helligkeit. Wenn das dann mehrmals gemacht wurde und die Bilder alle überlagert sind, kommt ein schönes 'anti-aliased' Bild raus 🙂



  • hehe geil..

    nehmen wir an wir haben 55fps , und eine auflösung 1280*1024

    dann müsste man 55 bilder pro sekunde erste screenen, diese über nen selbst gecodenen AA filter mit nem aufwand von 1310720 iterationen + berechnnen, und das neue bild auf den bildschirm mappen.

    da geht der rechner in die knie;)



  • BorisDieKlinge schrieb:

    hehe geil..

    nehmen wir an wir haben 55fps , und eine auflösung 1280*1024

    dann müsste man 55 bilder pro sekunde erste screenen, diese über nen selbst gecodenen AA filter mit nem aufwand von 1310720 iterationen + berechnnen, und das neue bild auf den bildschirm mappen.

    da geht der rechner in die knie;)

    bei z.B. zweifachem antialiasing nach dieser methode muss das bild einfach zweimal gerendert werden, da ist es klar, dass es länger dauert, aber das tut es bei anti-aliasing sowieso immer. Ein Vorteil dieser Methode ist allerdings auch, dass sich die 'virtuelle' Auflösung um die Anzahl der Rendervorgänge vervielfacht.

    Da man aber für diese Methode (und auch für andere Methoden des Polygonantialiasings; Multisampling etc.) die Vertex-/Texturdaten braucht und die Daten aus dem Framebuffer nicht reichen, wirst du sowieso wen überhaupt auf die einstellung im Treiber (falls vorhanden) zurückgreifen müssen.


  • Mod

    Die treiber und graphic-cards verwenden weit bessere mechanismen als einen accumulationbuffer. bei dem wuerded ihr bei x-fach AA auch x-mal langsammer sein und zusaetzlich am ende noch den framebuffer in den accumulationbuffer blenden/addieren. eure idee haette aber weit bessere bildqualitaet als resultat, weil nicht nur die kanten, sondern auch texturen mehr details haetten.
    Euro 2x AA waere aber vermutlich langsammer als 8x AA von der hardware 😉



  • @rapso:

    Die treiber und graphic-cards verwenden weit bessere mechanismen als einen accumulationbuffer.

    Hast ja selber schon geschrieben, besser (im Sinne von schöner) nicht, bloss schneller 🙂 Der letzte Voodoo Prototyp hatte AFAIK genau so ein einfaches Antialiasing mit Oversampling implementiert, und von der Qualität sind die Bilder immer noch nicht schlecht.

    BTW: mit einem Accumulation-Buffer und mehreren Samples kann man auch gleich DOF und motion-blur mitrechnen lassen. Damit das richtig gut aussieht braucht man allerdings schonmal 6 Samples (oder mehr).


Anmelden zum Antworten