Multisampling



  • Aus der MSDN:

    "Following this logic, one way to combat aliasing is with oversampling. Oversampling is a technique that renders the scene at a higher resolution than the display resolution...
    however, it requires a larger back buffer and, therefore, a higher fill cost. Oversampling is not implemented by Microsoft Direct3D (nor is it recommended due to the disadvantages just mentioned).

    Another technique for combatting aliasing is multisampling. Multisampling reduces the overhead of oversampling, by emulating the sub-pixel averaging behavior without actually computing each sub-pixel's color...
    During multisampling, the rasterization process tests multiple sample points inside each pixel so it might seem that multisampling is just as expensive as oversampling. However, multisampling doesn't run the pixel pipeline at every sampling point. Instead, a single pixel sample determines the color at the pixel center, and the percentage of sampling points covered by the polygon is multiplied by the pixel color"


  • Mod

    schön dass du nun gelernt hast wie es richtig läuft.

    die pixelpipelinearbeit wird gesparrt, mehr nicht. man hat trotzdem das mehrfache an auflösung.

    war ne schwere geburt 😉

    rapso->greets();



  • rapso schrieb:

    die pixelpipelinearbeit wird gesparrt, mehr nicht. man hat trotzdem das mehrfache an auflösung.

    Genau das is der springende Punkt: in dem Text steht davon NICHTS. Da dies bis jetzt meine einzige Quelle war (man sollte meinen die offizielle D3D Doku sollte ausreichen) kann man wir wohl kaum vorwerfen was nicht richtig verstanden zu haben.
    Nebenbei: Meine eigentliche Frage konnte mir noch immer niemand beantworten. Wenn du dich so gut mit MS auskennst, was bedeuten dann die 2 Paramter? 😞



  • der erste beschreibt die qualität des multisamplings, der zweite den multisamplingtyp



  • life schrieb:

    der erste beschreibt die qualität des multisamplings, der zweite den multisamplingtyp

    ^
    Moep. Ich brauch keine Übersetzung sondern ne Beschreibung WAS das genau bedeutet. was GENAU bedeutet "Qualität" bei MS? Was sind MultisamplingTYPEN?



  • interpreter schrieb:

    LastManStanding schrieb:

    Nein es gibt die ANzahl der Samples an.
    Beim Multi Sampling wird ja das Bild um einen gewissen Faktor vergößert. Dieser Parameter gibt an um wieviel, z.B.: 4x, 8x, ...

    Nein, eben NICHT. Das was du meinst ist Supersampling 🙄

    Ja Sorry!
    Hab diesen Beitrag geschrieben bevor ich deine Antwort gelesen habe!

    mfg LastManStanding


  • Mod

    interpreter schrieb:

    rapso schrieb:

    die pixelpipelinearbeit wird gesparrt, mehr nicht. man hat trotzdem das mehrfache an auflösung.

    Genau das is der springende Punkt: in dem Text steht davon NICHTS. Da dies bis jetzt meine einzige Quelle war (man sollte meinen die offizielle D3D Doku sollte ausreichen) kann man wir wohl kaum vorwerfen was nicht richtig verstanden zu haben.
    Nebenbei: Meine eigentliche Frage konnte mir noch immer niemand beantworten. Wenn du dich so gut mit MS auskennst, was bedeuten dann die 2 Paramter? 😞

    es steht auch nichts davon, dass die skalierung nun nicht mehr da wäre 😉
    aber gut ist die doku wirklich nicht. reicht aber meißtens.

    dort steht wohl auch, dass die smaplezahl die anzahl der samples,also die vergrößerung des rendertargets angibt, die quality ist ein wert den du als "hint" an die treiber weiterleiten lassen kannst um denen zu sagen welche der möglichen qualitätsstufen für eine bestimmte smaplezahl du haben möchtest. dabei kannst du mit IDirect3D9::CheckDeviceMultiSampleType die qualität abfragen, sofern der returnvalue != 0 ist.
    afaik.

    rapso->greets();



  • [quote="rapso"]
    es steht auch nichts davon, dass die skalierung nun nicht mehr da wäre 😉
    [quote]
    Hm, ja. Aber wenn im Text extra Oversampling erläutert und danach explizit gesagt wird, dass D3D diese Technik NICHT benutzt, dann heißt das für mich als Anfänger, dass beim Multisampling also nix hochgerechnet und dann wieder "downgesamplet" wird. Eine exakte Erklärung WIE D3Ds Multisampling nun wirklich funktioniert habe ich nirgends gefunden. Sorry, aber diese mickrigen Powerpoint Folien von Nvidia mit ihren 2,3 Diagrammen sagen mir als totalen Anfänger auch nicht wirklich viel...

    aber gut ist die doku wirklich nicht. reicht aber meißtens.

    Allerdings. Die Doku ist vor allem an sehr, sehr vielen Stellen extrem oberflächlich. Microsoft liegt wohl nichts daran, dass der Durchschnittsanwender hinter die Kulissen schauen kann.

    dort steht wohl auch, dass die smaplezahl die anzahl der samples,also die vergrößerung des rendertargets angibt, die quality ist ein wert den du als "hint" an die treiber weiterleiten lassen kannst um denen zu sagen welche der möglichen qualitätsstufen für eine bestimmte smaplezahl du haben möchtest. dabei kannst du mit IDirect3D9::CheckDeviceMultiSampleType die qualität abfragen, sofern der returnvalue != 0 ist.
    afaik.

    Für mich ergibt das nach wie vor keinen Sinn. In der MSDN wird erwähnt, dass oversampling von D3D unter anderem deshalb nicht benutzt wird, weil es einen größeren BackBuffer erfordert ("however, it requires a larger back buffer and, therefore, a higher fill cost. "). Wie passt das dann damit zusammen, dass Multisampling laut deinen Aussagen eben AUCH mit höheren Auflösungen arbeitet?



  • Nachtrag: So, ich hab jetzt seitenlange (und stinklangweilige) Dokus zu MS gelesen.
    Fazit: Beim MS wird NICHT das Bild wie beim Oversampling hochgesamplet - es wird also auch nichts skaliert. Stattdessen wird das Bild mehrmals (jeweils verschoben) gerendert - und das parallel. Die Farbe des letztlichen Pixels wird aus den verschiedenen BackBuffern (Multisample-Buffer) errechnet.
    Die MultisampleTypen geben die Anzahl an Sampling-Points wider, wobei keine Forderung von D3D an die HW Implementierung gemacht wird (ob die Sampling-Points also nun geordnet oder gedreht sind etc.)

    Tja Rapso, so kann man sich täuschen 😉


  • Mod

    interpreter schrieb:

    Nachtrag: So, ich hab jetzt seitenlange (und stinklangweilige) Dokus zu MS gelesen.
    Fazit: Beim MS wird NICHT das Bild wie beim Oversampling hochgesamplet - es wird also auch nichts skaliert. Stattdessen wird das Bild mehrmals (jeweils verschoben) gerendert - und das parallel. Die Farbe des letztlichen Pixels wird aus den verschiedenen BackBuffern (Multisample-Buffer) errechnet.
    Die MultisampleTypen geben die Anzahl an Sampling-Points wider, wobei keine Forderung von D3D an die HW Implementierung gemacht wird (ob die Sampling-Points also nun geordnet oder gedreht sind etc.)

    Tja Rapso, so kann man sich täuschen 😉

    nur weil bei der skalierung die einzelnen pixel nicht in einem großen array sind, sondern in mehreren hintereinander, heißt es nicht dass es keine skalierung gibt.

    fakt ist, dass statt einem pixel, nun z.b. 4mal soviel (sub)pixel benutzt werden um kanten zu glätten. dieses vielfache der pixel benutzt nun 4mal soviel speicher der am ende des frames wieder auf die ursprungsgröße runtergerechnet wird.
    wie das genau in der graka abläuft ist dabei der hardware überlassen. deswegen hast du auch diese quality hints. weil manchmal, obwohl du 4samples auswählst, dann nur 2benutzt werden und dafür ein besseres texturefiltering was 4x vorgaukeln soll zum nahezu 2x geschwindigkeitsnachteil.

    rapso->greets();



  • rapso schrieb:

    interpreter schrieb:

    Nachtrag: So, ich hab jetzt seitenlange (und stinklangweilige) Dokus zu MS gelesen.
    Fazit: Beim MS wird NICHT das Bild wie beim Oversampling hochgesamplet - es wird also auch nichts skaliert. Stattdessen wird das Bild mehrmals (jeweils verschoben) gerendert - und das parallel. Die Farbe des letztlichen Pixels wird aus den verschiedenen BackBuffern (Multisample-Buffer) errechnet.
    Die MultisampleTypen geben die Anzahl an Sampling-Points wider, wobei keine Forderung von D3D an die HW Implementierung gemacht wird (ob die Sampling-Points also nun geordnet oder gedreht sind etc.)

    Tja Rapso, so kann man sich täuschen 😉

    nur weil bei der skalierung die einzelnen pixel nicht in einem großen array sind, sondern in mehreren hintereinander, heißt es nicht dass es keine skalierung gibt.

    fakt ist, dass statt einem pixel, nun z.b. 4mal soviel (sub)pixel benutzt werden um kanten zu glätten. dieses vielfache der pixel benutzt nun 4mal soviel speicher der am ende des frames wieder auf die ursprungsgröße runtergerechnet wird.
    wie das genau in der graka abläuft ist dabei der hardware überlassen. deswegen hast du auch diese quality hints. weil manchmal, obwohl du 4samples auswählst, dann nur 2benutzt werden und dafür ein besseres texturefiltering was 4x vorgaukeln soll zum nahezu 2x geschwindigkeitsnachteil.

    rapso->greets();

    Richtig. Ich wollte es nur erwähnen, weil irgendwer geantwortet hat, dass das Bild vergrößert wird. Als ich anmerkte das dem nicht so ist kam eben gleich dein Einspruch, den ich nicht so stehen lassen wollte. Man kann es drehen und wenden wie man will, aber das Bild wird nicht als gesamtes vergrößert. Das die Pixel menge durch die Erzeugung von Subpixeln natürlich indirekt größer wird ist richtig. Naja, hauptsache wir wissen jetzt alle wie es (in etwa) funktioniert. Wie es 100%ig funktioniert wissen eh nur die D3D/NVidia/ATI Typen 🤡


  • Mod

    wie es genau funktioniert steht eigentlich in den patenten.

    auf jedenfall entsteht die hauptersparniss dadurch, dass pro "echtem" pixel, nur einmal gerechnet wird, dieser pixel wird dann in jeden subpixel reingesetzt wenn der zbuffer-wert das erlaubt.

    weiter haben ati/nv/matrix ihre 4:1 bzw 16:1 pixel kompression die darauf bassiert, dass sie, falls alle subpixel beschrieben werden sollen, nur in den ersten "layer" einen pixel reinschreiben. falls nicht alle subpixel beschrieben werden sollen, merken sie sich das irgendwo (da gibt es viele wege) und schreiben es in alle subpixel.

    der qualitative nachteil der sich dabei ergibt, sieht man insbesondere bei alphatest texturen. weil sie nur einmal pro pixel berechnet werden, sieht man das texel oder nicht. bei FSAA könnte man die texture noch zu 25% 50% und 75% sehen.

    rapso->greets();



  • Hm, noch ne Frage: Habe ich das richtig verstanden, dass Multisampling NUR für Kantenglättung zuständig ist (im Gegensatz zu anderen Anti-Aliasing Techniken wie z.B. Oversampling, wo auch "Farbkanten" innerhalb eines Polygons geglättet werden)? Laut einem Artikel ist das erwünscht, da innerhalb der Polygone sowieso Filter verwendet werden können (bilinear etc) und eine spätere erneute Glättung durch Multisampling dadurch unerwünscht wäre.



  • Hm, noch ne Frage: Habe ich das richtig verstanden, dass Multisampling NUR für Kantenglättung zuständig ist (im Gegensatz zu anderen Anti-Aliasing Techniken wie z.B. Oversampling, wo auch "Farbkanten" innerhalb eines Polygons geglättet werden)? Laut einem Artikel ist das erwünscht, da innerhalb der Polygone sowieso Filter verwendet werden können (bilinear etc) und eine spätere erneute Glättung durch Multisampling dadurch unerwünscht wäre.

    Antialiasing innerhalb des Polygons würde erst dann sinn machen, wenn die Textur hoch genug aufgelöst wäre und man so tatsächlich mehr Information gewinnen würde. Das steht dann aber ein klein wenig im Gegensatz zu MIP-Mapping. Du müsstest also jeweis ein doppelt so große Textur verwenden, wie MIP-Mapping normalerweise verwenden würde. Ob der dadurch entstehende Unterschied allerdings in Spielen sichtbar ist wage ich zu bezweifeln.

    Wenn ich was Zeit habe werde ich dir mal was Rendern, das den Unterschied zeigt.



  • So:
    Ohne Antialasing
    kanten antialased
    komplett antialased

    Den Effekt, dass die Kanten der Schrift bei komplettem Oversampling deutlich schärfer werden könnte man auch anders erziehlen, nämlich durch antisotrphische Filterung. Dann ist komplettes Oversampling tatsächlich sinnlos.



  • Helium schrieb:

    So:
    Ohne Antialasing
    kanten antialased
    komplett antialased

    Den Effekt, dass die Kanten der Schrift bei komplettem Oversampling deutlich schärfer werden könnte man auch anders erziehlen, nämlich durch antisotrphische Filterung. Dann ist komplettes Oversampling tatsächlich sinnlos.

    Danke 👍


  • Mod

    Helium schrieb:

    Den Effekt, dass die Kanten der Schrift bei komplettem Oversampling deutlich schärfer werden könnte man auch anders erziehlen, nämlich durch antisotrphische Filterung. Dann ist komplettes Oversampling tatsächlich sinnlos.

    solange man kein alphatest verwedet 😉

    rapso->greets();


Anmelden zum Antworten