2012-01-14 10 views
8

Jestem bardzo zainteresowany zrozumieniem, jak działa multisampling. Znalazłem obszerną literaturę na temat tego, jak ją włączyć lub wykorzystać, ale bardzo niewiele informacji na temat tego, co naprawdę robi, aby uzyskać antyaliasingowy rendering. W wielu miejscach znalazłem sprzeczne informacje, które tylko bardziej mnie zdezorientowały.Jak działa multisample?

Uwaga wiem jak włączyć i używać multisampling (I rzeczywiście już go używać), co nie wiem, jaki rodzaj danych naprawdę dostaje się do multisampled renderbuffers/tekstur, oraz w jaki sposób dane są używany w potoku renderowania.

Bardzo dobrze rozumiem, jak działa supersampling, ale multisampling wciąż ma pewne niejasne obszary, które chciałabym zrozumieć.

oto co specyfikacje powiedzieć: (OpenGL 4,2)

wartości pikseli próbki, w tym kolorów, głębi i wartości szablonowe są przechowywane w buforze (bufor Multisample). Próbki zawierają oddzielne wartości kolorów dla każdego koloru fragmentu.

...

Podczas multisampla świadczących zawartość fragmentu piksela są zmieniane na dwa sposoby. Po pierwsze, każdy fragment zawiera wartość zasięgu z bitami SAMPLES.

...

Po drugie, każdy fragment zawiera wartości głębokości próbki i zestawy danych związanych zamiast pojedynczej wartości głębokości i zestaw danych, który związany jest utrzymywany w trybie renderowania pojedynczej próbki.

Każda próbka zawiera wyraźny kolor, stopień pokrycia i głębokość. Czym się różni od normalnego supersamplingu? Wygląda na to, że mam do czynienia z "ważonym" superzamplingiem, w którym każda końcowa wartość piksela jest określana przez wartość pokrycia jego próbek zamiast prostej średniej, ale jestem tego bardzo pewien. A co ze współrzędnymi tekstury na poziomie próbki?

Jeśli przechowuję, powiedzmy, normalne w wielowarstwowej strukturze RGBF, czy odczytam je z powrotem "antyaliasingowane" (to znaczy zbliżające się do 0) na krawędziach wielokąta?

Fragmentujący moduł cieniujący jest wywoływany raz na fragment, chyba że używa on gl_SampleID, glSampleIn lub ma "próbny" kwalifikator pamięci. W jaki sposób fragment shader może być wywoływany raz na fragment i uzyskiwać renderowanie antyaliasingowe?

+0

Wyjaśnienie: NVIDIA: http://www.nvidia.com/object/feature_hraa.html –

+0

Niestety, ten link nie zawiera absolutnie żadnych informacji o tym, jak działa MS, możesz uzyskać jeszcze lepsze informacje z Wikipedii – user815129

+0

Ten wykład z 2007 roku na Stanford CS: http://graphics.stanford.edu/courses/cs248-07/lectures/2007.10.11%20CS248-06%20Multisample%20Antialiasing/2007.10.11 % 20CS248-06% 20Multisample% 20Antialiasing.ppt, szkoda, że ​​nie odnosi się do żadnych źródeł. –

Odpowiedz

5

OpenGL na Silicon Graphics:

http://www-f9.ijs.si/~matevz/docs/007-2392-003/sgi_html/ch09.html#LE68984-PARENT

wspomina: Podczas korzystania multisampling i odczytać z powrotem kolor, masz rozwiązany wartość koloru (czyli średnia próbek). Podczas odczytywania szablonu lub głębi zazwyczaj uzyskuje się pojedynczą wartość próbki, a nie średnią. Ta przykładowa wartość jest zwykle położona najbliżej środka piksela.

I jest to specyfikacja techniczna (1994) z witryny OpenGL.To wyjaśnia w szczegółach, co zrobić, jeśli MULTISAMPLE_SGIS jest włączona: http://opengl.org/registry/specs/SGIS/multisample.txt

Zobacz także ten powiązane pytanie: How are depth values resolved in OpenGL textures when multisampling?

a odpowiedź na to pytanie, gdzie jest zalecana GL_MULTISAMPLE_ARB: where is GL_MULTISAMPLE defined?. Specyfikacje dla GL_MULTISAMPLE_ARB (2002) są tutaj: http://www.opengl.org/registry/specs/ARB/multisample.txt

+0

Świetnie, i dziękuję za odniesienie do pytania multisamplingowego – user815129