{"id":1601,"date":"2026-05-26T15:22:28","date_gmt":"2026-05-26T13:22:28","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1601"},"modified":"2026-05-26T15:22:32","modified_gmt":"2026-05-26T13:22:32","slug":"antyaliasing","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/05\/26\/antyaliasing\/","title":{"rendered":"Antyaliasing"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Renderowanie grafiki rastrowej opiera si\u0119 na siatce pikseli, a ka\u017cdy piksel ma sko\u0144czony rozmiar i mo\u017ce przechowywa\u0107 tylko jedn\u0105 warto\u015b\u0107 koloru w danym momencie. Problem pojawia si\u0119 wtedy, gdy na takiej siatce trzeba przedstawi\u0107 uko\u015bn\u0105 lini\u0119, krzyw\u0105, cienk\u0105 czcionk\u0119 albo obiekt poruszaj\u0105cy si\u0119 mi\u0119dzy kolejnymi klatkami. Powstaj\u0105 wtedy charakterystyczne poszarpane kraw\u0119dzie, migotanie oraz utrata czytelno\u015bci detali. Zjawisko to nazywa si\u0119 aliasingiem i od dekad stanowi jedno z podstawowych ogranicze\u0144 grafiki komputerowej. W praktyce rozwi\u0105zaniem sta\u0142y si\u0119 techniki wyg\u0142adzania obrazu okre\u015blane wsp\u00f3ln\u0105 nazw\u0105 <strong>Antyaliasing<\/strong> co w praktyce wp\u0142ywa zar\u00f3wno na jako\u015b\u0107 obrazu, jak i koszt obliczeniowy.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis Tre\u015bci<\/h2><nav><ol><li><a href=\"#antyaliasing-co-to-w-praktyce-renderowania-obrazu-i-dlaczego-piksele-tworza-poszarpane-krawedzie\">Antyaliasing: Co to w praktyce renderowania obrazu i dlaczego piksele tworz\u0105 poszarpane kraw\u0119dzie<\/a><\/li><li><a href=\"#mechanizm-wygladzania-krawedzi-od-prostego-usredniania-probek-do-rekonstrukcji-koncowego-obrazu\">Mechanizm wyg\u0142adzania kraw\u0119dzi od prostego u\u015bredniania pr\u00f3bek do rekonstrukcji ko\u0144cowego obrazu<\/a><\/li><li><a href=\"#antyaliasing-co-to-w-odniesieniu-do-najwazniejszych-technik-stosowanych-w-grach-i-silnikach-graficznych\">Antyaliasing co to w odniesieniu do najwa\u017cniejszych technik stosowanych w grach i silnikach graficznych<\/a><ol><li><a href=\"#ssaa-supersampling-anti-aliasing\">SSAA \u2013 Supersampling Anti-Aliasing<\/a><\/li><li><a href=\"#msaa-multisample-anti-aliasing\">MSAA \u2013 Multisample Anti-Aliasing<\/a><\/li><li><a href=\"#fxaa-fast-approximate-anti-aliasing\">FXAA \u2013 Fast Approximate Anti-Aliasing<\/a><\/li><li><a href=\"#taa-temporal-anti-aliasing\">TAA \u2013 Temporal Anti-Aliasing<\/a><\/li><li><a href=\"#dlaa-i-rozwiazania-oparte-na-rekonstrukcji\">DLAA i rozwi\u0105zania oparte na rekonstrukcji<\/a><\/li><\/ol><\/li><li><a href=\"#zaleznosc-pomiedzy-rozdzielczoscia-obrazu-czestotliwoscia-probkowania-i-realnym-odbiorem-jakosci\">Zale\u017cno\u015b\u0107 pomi\u0119dzy rozdzielczo\u015bci\u0105 obrazu cz\u0119stotliwo\u015bci\u0105 pr\u00f3bkowania i realnym odbiorem jako\u015bci<\/a><\/li><li><a href=\"#praktyczne-skutki-stosowania-antyaliasingu-oraz-sytuacje-w-ktorych-jego-wlaczenie-nie-zawsze-daje-lepszy-efekt\">Praktyczne skutki stosowania antyaliasingu oraz sytuacje w kt\u00f3rych jego w\u0142\u0105czenie nie zawsze daje lepszy efekt<\/a><\/li><li><a href=\"#antyaliasing-co-to-z-punktu-widzenia-implementacji-programistycznej-i-uproszczonego-modelu-obliczeniowego\">Antyaliasing co to z punktu widzenia implementacji programistycznej i uproszczonego modelu obliczeniowego<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 id=\"antyaliasing-co-to-w-praktyce-renderowania-obrazu-i-dlaczego-piksele-tworza-poszarpane-krawedzie\" class=\"wp-block-heading\">Antyaliasing: Co to w praktyce renderowania obrazu i dlaczego piksele tworz\u0105 poszarpane kraw\u0119dzie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aliasing jest skutkiem pr\u00f3bkowania sygna\u0142u ci\u0105g\u0142ego przez uk\u0142ad dyskretny. W grafice komputerowej sygna\u0142em ci\u0105g\u0142ym jest idealna geometria sceny, a uk\u0142adem dyskretnym ekran z\u0142o\u017cony z okre\u015blonej liczby pikseli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi obiekt przecina granice pikseli, system musi zdecydowa\u0107, kt\u00f3ry piksel nale\u017cy uzna\u0107 za nale\u017c\u0105cy do obiektu, a kt\u00f3ry nie. Bez dodatkowych oblicze\u0144 ka\u017cdy piksel otrzymuje warto\u015b\u0107 0 albo 1 \u2013 pe\u0142ne pokrycie lub jego brak. To prowadzi do efektu schodk\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najbardziej widoczne objawy aliasingu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>poszarpane kraw\u0119dzie linii uko\u015bnych,<\/li>\n\n\n\n<li>migotanie cienkich element\u00f3w podczas ruchu,<\/li>\n\n\n\n<li>znikanie drobnych detali,<\/li>\n\n\n\n<li>niestabilno\u015b\u0107 obrazu przy zmianie perspektywy,<\/li>\n\n\n\n<li>efekt \u201edr\u017cenia\u201d tekstur.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Problem nie ogranicza si\u0119 do gier. Wyst\u0119puje r\u00f3wnie\u017c w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>renderingu CAD,<\/li>\n\n\n\n<li>typografii ekranowej,<\/li>\n\n\n\n<li>grafice medycznej,<\/li>\n\n\n\n<li>wizualizacji danych,<\/li>\n\n\n\n<li>systemach map i GIS,<\/li>\n\n\n\n<li>przetwarzaniu obrazu.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Matematycznie mo\u017cna traktowa\u0107 to jako zbyt rzadkie pr\u00f3bkowanie sygna\u0142u wzgl\u0119dem jego cz\u0119stotliwo\u015bci przestrzennej.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Poj\u0119cie<\/th><th>Znaczenie<\/th><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td>Pr\u00f3bkowanie<\/td><td>Odczyt warto\u015bci obrazu w punktach<\/td><td>Pobranie koloru dla piksela<\/td><\/tr><tr><td>Aliasing<\/td><td>B\u0142\u0119dna reprezentacja szczeg\u00f3\u0142\u00f3w<\/td><td>Schodkowana kraw\u0119d\u017a<\/td><\/tr><tr><td>Nadpr\u00f3bkowanie<\/td><td>Wi\u0119cej punkt\u00f3w pomiarowych<\/td><td>4\u00d7 wi\u0119cej pr\u00f3bek<\/td><\/tr><tr><td>Filtracja<\/td><td>U\u015brednianie wynik\u00f3w<\/td><td>Wyg\u0142adzenie przej\u015b\u0107<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce antyaliasing dzia\u0142a przez zwi\u0119kszenie informacji dost\u0119pnej dla pojedynczego piksela.<\/p>\n\n\n\n<h2 id=\"mechanizm-wygladzania-krawedzi-od-prostego-usredniania-probek-do-rekonstrukcji-koncowego-obrazu\" class=\"wp-block-heading\">Mechanizm wyg\u0142adzania kraw\u0119dzi od prostego u\u015bredniania pr\u00f3bek do rekonstrukcji ko\u0144cowego obrazu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Idea jest stosunkowo prosta: zamiast sprawdza\u0107 pojedynczy punkt wewn\u0105trz piksela, analizuje si\u0119 kilka punkt\u00f3w i wyznacza udzia\u0142 powierzchni obiektu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi piksel jest pokryty obiektem tylko w 30%, nie otrzymuje pe\u0142nego koloru, ale warto\u015b\u0107 po\u015bredni\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">kraw\u0119d\u017a przechodzi przez piksel.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bez AA \u2192 kolor = 255<\/li>\n\n\n\n<li>pokrycie 50% \u2192 kolor = 128<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dzi\u0119ki temu granice przestaj\u0105 by\u0107 skokowe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uproszczony algorytm:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Etap<\/th><th>Operacja<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Wyznaczenie geometrii<\/td><\/tr><tr><td>2<\/td><td>Podzia\u0142 piksela na pr\u00f3bki<\/td><\/tr><tr><td>3<\/td><td>Obliczenie pokrycia<\/td><\/tr><tr><td>4<\/td><td>U\u015brednienie<\/td><\/tr><tr><td>5<\/td><td>Zapis ko\u0144cowego koloru<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad prostego u\u015bredniania w Pythonie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\ndef average(samples):\\n return sum(samples) \/ len(samples)\\n\\npixel=[255,255,0,0]\\nprint(average(pixel))\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad proceduralny w C:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>c\\n#include &lt;stdio.h&gt;\\n\\nint main() {\\n int s[4]={255,255,0,0};\\n int sum=0;\\n\\n for(int i=0;i&lt;4;i++)\\n sum+=s[i];\\n\\n printf(\\\"%d\\\", sum\/4);\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad w C++:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C++<\/td><td><code>cpp\\n#include &lt;iostream&gt;\\nusing namespace std;\\n\\nint main() {\\n int s[]={255,255,0,0};\\n int sum=0;\\n\\n for(int i=0;i&lt;4;i++)\\n sum+=s[i];\\n\\n cout &lt;&lt; sum\/4;\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W rzeczywistych silnikach dochodzi jeszcze filtracja przestrzenna, rekonstrukcja obrazu i korekcja kolor\u00f3w.<\/p>\n\n\n\n<h2 id=\"antyaliasing-co-to-w-odniesieniu-do-najwazniejszych-technik-stosowanych-w-grach-i-silnikach-graficznych\" class=\"wp-block-heading\">Antyaliasing co to w odniesieniu do najwa\u017cniejszych technik stosowanych w grach i silnikach graficznych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nie istnieje jedna metoda antyaliasingu. Ka\u017cda technika rozwi\u0105zuje ten sam problem innym kosztem obliczeniowym.<\/p>\n\n\n\n<h3 id=\"ssaa-supersampling-anti-aliasing\" class=\"wp-block-heading\">SSAA \u2013 Supersampling Anti-Aliasing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Najstarsze i najdok\u0142adniejsze podej\u015bcie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Scena renderowana jest w wy\u017cszej rozdzielczo\u015bci, a potem skalowana w d\u00f3\u0142.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ekran 1920\u00d71080,<\/li>\n\n\n\n<li>SSAA 4\u00d7,<\/li>\n\n\n\n<li>rzeczywisty rendering: 3840\u00d72160.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Zalety:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bardzo wysoka jako\u015b\u0107,<\/li>\n\n\n\n<li>dzia\u0142a na geometri\u0119 i tekstury.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wady:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ogromne obci\u0105\u017cenie GPU,<\/li>\n\n\n\n<li>wzrost liczby oblicze\u0144 nawet czterokrotnie.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"msaa-multisample-anti-aliasing\" class=\"wp-block-heading\">MSAA \u2013 Multisample Anti-Aliasing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Optymalizacja SSAA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pr\u00f3bkowanie wykonywane jest g\u0142\u00f3wnie na kraw\u0119dziach geometrii.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tryb<\/th><th>Liczba pr\u00f3bek<\/th><\/tr><\/thead><tbody><tr><td>MSAA 2\u00d7<\/td><td>2<\/td><\/tr><tr><td>MSAA 4\u00d7<\/td><td>4<\/td><\/tr><tr><td>MSAA 8\u00d7<\/td><td>8<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Daje dobr\u0105 jako\u015b\u0107 przy rozs\u0105dnym koszcie.<\/p>\n\n\n\n<h3 id=\"fxaa-fast-approximate-anti-aliasing\" class=\"wp-block-heading\">FXAA \u2013 Fast Approximate Anti-Aliasing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Metoda post-processingu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Silnik analizuje gotowy obraz i wykrywa ostre przej\u015bcia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cechy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bardzo niski koszt,<\/li>\n\n\n\n<li>dzia\u0142a na starszych kartach,<\/li>\n\n\n\n<li>mo\u017ce rozmywa\u0107 tekst.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"taa-temporal-anti-aliasing\" class=\"wp-block-heading\">TAA \u2013 Temporal Anti-Aliasing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jedna z najcz\u0119\u015bciej u\u017cywanych metod wsp\u00f3\u0142cze\u015bnie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wykorzystuje informacje z poprzednich klatek.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mechanizm:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Krok<\/th><th>Operacja<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Render aktualnej klatki<\/td><\/tr><tr><td>2<\/td><td>Pobranie historii<\/td><\/tr><tr><td>3<\/td><td>Rekonstrukcja<\/td><\/tr><tr><td>4<\/td><td>Filtracja<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Zalety:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wysoka jako\u015b\u0107,<\/li>\n\n\n\n<li>dobre wyg\u0142adzanie ruchu.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wady:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>smu\u017cenie,<\/li>\n\n\n\n<li>utrata ostro\u015bci.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"dlaa-i-rozwiazania-oparte-na-rekonstrukcji\" class=\"wp-block-heading\">DLAA i rozwi\u0105zania oparte na rekonstrukcji<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nowoczesne podej\u015bcie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wykorzystuje:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dane temporalne,<\/li>\n\n\n\n<li>wektory ruchu,<\/li>\n\n\n\n<li>filtry rekonstrukcyjne,<\/li>\n\n\n\n<li>czasem modele uczenia maszynowego.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pozwala uzyska\u0107 jako\u015b\u0107 zbli\u017con\u0105 do supersamplingu przy ni\u017cszym koszcie.<\/p>\n\n\n\n<h2 id=\"zaleznosc-pomiedzy-rozdzielczoscia-obrazu-czestotliwoscia-probkowania-i-realnym-odbiorem-jakosci\" class=\"wp-block-heading\">Zale\u017cno\u015b\u0107 pomi\u0119dzy rozdzielczo\u015bci\u0105 obrazu cz\u0119stotliwo\u015bci\u0105 pr\u00f3bkowania i realnym odbiorem jako\u015bci<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wy\u017csza rozdzielczo\u015b\u0107 sama w sobie cz\u0119\u015bciowo redukuje aliasing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por\u00f3wnanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Rozdzielczo\u015b\u0107<\/th><th>Piksele<\/th><\/tr><\/thead><tbody><tr><td>1280\u00d7720<\/td><td>921 600<\/td><\/tr><tr><td>1920\u00d71080<\/td><td>2 073 600<\/td><\/tr><tr><td>2560\u00d71440<\/td><td>3 686 400<\/td><\/tr><tr><td>3840\u00d72160<\/td><td>8 294 400<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przy wi\u0119kszej liczbie pikseli pojedynczy schodek staje si\u0119 mniej widoczny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To jednak nie usuwa problemu ca\u0142kowicie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119sty b\u0142\u0105d:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201eMam 4K, wi\u0119c AA jest zb\u0119dny\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nie zawsze.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na cienkich liniach, siatkach, ro\u015blinno\u015bci i elementach oddalonych aliasing pozostaje widoczny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W silnikach czasu rzeczywistego dochodzi jeszcze aliasing temporalny \u2013 obraz mo\u017ce migota\u0107 mimo bardzo wysokiej rozdzielczo\u015bci.<\/p>\n\n\n\n<h2 id=\"praktyczne-skutki-stosowania-antyaliasingu-oraz-sytuacje-w-ktorych-jego-wlaczenie-nie-zawsze-daje-lepszy-efekt\" class=\"wp-block-heading\">Praktyczne skutki stosowania antyaliasingu oraz sytuacje w kt\u00f3rych jego w\u0142\u0105czenie nie zawsze daje lepszy efekt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W\u0142\u0105czenie wyg\u0142adzania ma konsekwencje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Korzy\u015bci:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bardziej stabilny obraz,<\/li>\n\n\n\n<li>mniejsze zm\u0119czenie wzroku,<\/li>\n\n\n\n<li>czytelniejsze detale,<\/li>\n\n\n\n<li>mniej migotania.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Koszty:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wzrost u\u017cycia pami\u0119ci,<\/li>\n\n\n\n<li>dodatkowe obci\u0105\u017cenie GPU,<\/li>\n\n\n\n<li>czasem wzrost op\u00f3\u017anienia renderingu.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142adowe obserwacje praktyczne:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Scenariusz<\/th><th>Zalecenie<\/th><\/tr><\/thead><tbody><tr><td>Gry e-sportowe<\/td><td>FXAA lub brak<\/td><\/tr><tr><td>Gry AAA<\/td><td>TAA<\/td><\/tr><tr><td>Rendering statyczny<\/td><td>SSAA<\/td><\/tr><tr><td>CAD<\/td><td>MSAA<\/td><\/tr><tr><td>VR<\/td><td>ostro\u017cne u\u017cycie TAA<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pu\u0142apki:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zbyt agresywny TAA powoduje rozmycie interfejsu,<\/li>\n\n\n\n<li>wysokie MSAA mo\u017ce ogranicza\u0107 liczb\u0119 klatek,<\/li>\n\n\n\n<li>filtracja po skalowaniu cz\u0119sto daje artefakty.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"antyaliasing-co-to-z-punktu-widzenia-implementacji-programistycznej-i-uproszczonego-modelu-obliczeniowego\" class=\"wp-block-heading\">Antyaliasing co to z punktu widzenia implementacji programistycznej i uproszczonego modelu obliczeniowego<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Programista implementuj\u0105cy rasteryzacj\u0119 musi zdecydowa\u0107, ile informacji zebra\u0107 dla ka\u017cdego piksela.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najprostszy model:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wz\u00f3r<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td><code>kolor = suma_pr\u00f3bek \/ liczba_pr\u00f3bek<\/code><\/td><td>U\u015brednienie<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad w Pythonie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nsamples=[0.2,0.5,1.0,0.3]\\ncolor=sum(samples)\/len(samples)\\nprint(color)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad w C:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>c\\nfloat samples[4]={0.2,0.5,1.0,0.3};\\nfloat sum=0;\\n\\nfor(int i=0;i&lt;4;i++)\\n sum+=samples[i];\\n\\nprintf(\\\"%.2f\\\", sum\/4);\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad w PHP:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>php\\n&lt;?php\\n$s=[0.2,0.5,1.0,0.3];\\n\\necho array_sum($s)\/count($s);\\n?&gt;\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Prawdziwe silniki wykorzystuj\u0105 dodatkowo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bufory g\u0142\u0119boko\u015bci,<\/li>\n\n\n\n<li>histogramy ruchu,<\/li>\n\n\n\n<li>filtry Gaussa,<\/li>\n\n\n\n<li>analiz\u0119 kontrastu,<\/li>\n\n\n\n<li>rekonstrukcj\u0119 temporaln\u0105.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dlatego wsp\u00f3\u0142czesny antyaliasing jest bardziej systemem przetwarzania obrazu ni\u017c pojedynczym filtrem.<\/p>\n\n\n\n<h2 id=\"faq\" class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Czy antyaliasing zwi\u0119ksza liczb\u0119 FPS?<\/strong><br>Nie. Zwykle j\u0105 zmniejsza, poniewa\u017c wymaga dodatkowych oblicze\u0144.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Czy TAA zawsze jest lepszy od MSAA?<\/strong><br>Nie. TAA lepiej redukuje migotanie, ale mo\u017ce rozmywa\u0107 obraz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Dlaczego tekst wygl\u0105da gorzej po w\u0142\u0105czeniu FXAA?<\/strong><br>Filtr dzia\u0142a na gotowym obrazie i mo\u017ce traktowa\u0107 kraw\u0119dzie liter jak aliasing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Czy rozdzielczo\u015b\u0107 4K eliminuje potrzeb\u0119 AA?<\/strong><br>Nie ca\u0142kowicie. Wci\u0105\u017c pozostaj\u0105 problemy temporalne i drobne detale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Czy antyaliasing dzia\u0142a tylko w grach?<\/strong><br>Nie. Jest stosowany w renderingu, typografii, CAD, GIS i wizualizacji naukowej.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kt\u00f3ra technika daje najwy\u017csz\u0105 jako\u015b\u0107?<\/strong><br>Najcz\u0119\u015bciej SSAA, ale koszt obliczeniowy jest bardzo wysoki.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wyg\u0142adzanie kraw\u0119dzi pozostaje jednym z podstawowych kompromis\u00f3w grafiki komputerowej. Celem nie jest stworzenie idealnego obrazu, lecz ograniczenie b\u0142\u0119d\u00f3w wynikaj\u0105cych z pr\u00f3bkowania do poziomu, kt\u00f3rego u\u017cytkownik nie zauwa\u017ca podczas normalnego korzystania z ekranu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u0179r\u00f3d\u0142o Foto: Magnific<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Renderowanie grafiki rastrowej opiera si\u0119 na siatce pikseli, a ka\u017cdy piksel ma sko\u0144czony rozmiar i mo\u017ce przechowywa\u0107 tylko jedn\u0105 warto\u015b\u0107 koloru w danym momencie. Problem pojawia si\u0119 wtedy, gdy na takiej siatce trzeba przedstawi\u0107 uko\u015bn\u0105 lini\u0119, krzyw\u0105, cienk\u0105 czcionk\u0119 albo obiekt poruszaj\u0105cy si\u0119 mi\u0119dzy kolejnymi klatkami. Powstaj\u0105 wtedy charakterystyczne poszarpane kraw\u0119dzie, migotanie oraz utrata czytelno\u015bci detali. Zjawisko to nazywa si\u0119 aliasingiem i od dekad stanowi jedno z podstawowych ogranicze\u0144 grafiki komputerowej. W praktyce rozwi\u0105zaniem sta\u0142y si\u0119 techniki wyg\u0142adzania obrazu okre\u015blane wsp\u00f3ln\u0105 nazw\u0105 Antyaliasing co w praktyce wp\u0142ywa zar\u00f3wno na jako\u015b\u0107 obrazu, jak i koszt obliczeniowy. Antyaliasing: Co to w praktyce renderowania obrazu i dlaczego piksele tworz\u0105 poszarpane kraw\u0119dzie Aliasing jest skutkiem pr\u00f3bkowania sygna\u0142u ci\u0105g\u0142ego przez uk\u0142ad dyskretny. W grafice komputerowej sygna\u0142em ci\u0105g\u0142ym jest idealna geometria sceny, a uk\u0142adem dyskretnym ekran z\u0142o\u017cony z okre\u015blonej liczby pikseli. Je\u017celi obiekt przecina granice pikseli, system musi zdecydowa\u0107, kt\u00f3ry piksel nale\u017cy uzna\u0107 za nale\u017c\u0105cy do obiektu, a kt\u00f3ry nie. Bez dodatkowych oblicze\u0144 ka\u017cdy piksel otrzymuje warto\u015b\u0107 0 albo 1 \u2013 pe\u0142ne pokrycie lub jego brak. To prowadzi do efektu schodk\u00f3w. Najbardziej widoczne objawy aliasingu: Problem nie ogranicza si\u0119 do gier. Wyst\u0119puje r\u00f3wnie\u017c w: Matematycznie mo\u017cna traktowa\u0107 to jako zbyt rzadkie pr\u00f3bkowanie sygna\u0142u wzgl\u0119dem jego cz\u0119stotliwo\u015bci przestrzennej. Poj\u0119cie Znaczenie Przyk\u0142ad Pr\u00f3bkowanie Odczyt warto\u015bci obrazu w punktach Pobranie koloru dla piksela Aliasing B\u0142\u0119dna reprezentacja szczeg\u00f3\u0142\u00f3w Schodkowana kraw\u0119d\u017a Nadpr\u00f3bkowanie Wi\u0119cej punkt\u00f3w pomiarowych 4\u00d7 wi\u0119cej pr\u00f3bek Filtracja U\u015brednianie wynik\u00f3w Wyg\u0142adzenie przej\u015b\u0107 W praktyce antyaliasing dzia\u0142a przez zwi\u0119kszenie informacji dost\u0119pnej dla pojedynczego piksela. Mechanizm wyg\u0142adzania kraw\u0119dzi od prostego u\u015bredniania pr\u00f3bek do rekonstrukcji ko\u0144cowego obrazu Idea jest stosunkowo prosta: zamiast sprawdza\u0107 pojedynczy punkt wewn\u0105trz piksela, analizuje si\u0119 kilka punkt\u00f3w i wyznacza udzia\u0142 powierzchni obiektu. Je\u017celi piksel jest pokryty obiektem tylko w 30%, nie otrzymuje pe\u0142nego koloru, ale warto\u015b\u0107 po\u015bredni\u0105. Przyk\u0142ad: kraw\u0119d\u017a przechodzi przez piksel. Dzi\u0119ki temu granice przestaj\u0105 by\u0107 skokowe. Uproszczony algorytm: Etap Operacja 1 Wyznaczenie geometrii 2 Podzia\u0142 piksela na pr\u00f3bki 3 Obliczenie pokrycia 4 U\u015brednienie 5 Zapis ko\u0144cowego koloru Przyk\u0142ad prostego u\u015bredniania w Pythonie: J\u0119zyk Kod Python python\\ndef average(samples):\\n return sum(samples) \/ len(samples)\\n\\npixel=[255,255,0,0]\\nprint(average(pixel))\\n Przyk\u0142ad proceduralny w C: J\u0119zyk Kod C c\\n#include &lt;stdio.h&gt;\\n\\nint main() {\\n int s[4]={255,255,0,0};\\n int sum=0;\\n\\n for(int i=0;i&lt;4;i++)\\n sum+=s[i];\\n\\n printf(\\&#8221;%d\\&#8221;, sum\/4);\\n}\\n Przyk\u0142ad w C++: J\u0119zyk Kod C++ cpp\\n#include &lt;iostream&gt;\\nusing namespace std;\\n\\nint main() {\\n int s[]={255,255,0,0};\\n int sum=0;\\n\\n for(int i=0;i&lt;4;i++)\\n sum+=s[i];\\n\\n cout &lt;&lt; sum\/4;\\n}\\n W rzeczywistych silnikach dochodzi jeszcze filtracja przestrzenna, rekonstrukcja obrazu i korekcja kolor\u00f3w. Antyaliasing co to w odniesieniu do najwa\u017cniejszych technik stosowanych w grach i silnikach graficznych Nie istnieje jedna metoda antyaliasingu. Ka\u017cda technika rozwi\u0105zuje ten sam problem innym kosztem obliczeniowym. SSAA \u2013 Supersampling Anti-Aliasing Najstarsze i najdok\u0142adniejsze podej\u015bcie. Scena renderowana jest w wy\u017cszej rozdzielczo\u015bci, a potem skalowana w d\u00f3\u0142. Przyk\u0142ad: Zalety: Wady: MSAA \u2013 Multisample Anti-Aliasing Optymalizacja SSAA. Pr\u00f3bkowanie wykonywane jest g\u0142\u00f3wnie na kraw\u0119dziach geometrii. Przyk\u0142ad: Tryb Liczba pr\u00f3bek MSAA 2\u00d7 2 MSAA 4\u00d7 4 MSAA 8\u00d7 8 Daje dobr\u0105 jako\u015b\u0107 przy rozs\u0105dnym koszcie. FXAA \u2013 Fast Approximate Anti-Aliasing Metoda post-processingu. Silnik analizuje gotowy obraz i wykrywa ostre przej\u015bcia. Cechy: TAA \u2013 Temporal Anti-Aliasing Jedna z najcz\u0119\u015bciej u\u017cywanych metod wsp\u00f3\u0142cze\u015bnie. Wykorzystuje informacje z poprzednich klatek. Mechanizm: Krok Operacja 1 Render aktualnej klatki 2 Pobranie historii 3 Rekonstrukcja 4 Filtracja Zalety: Wady: DLAA i rozwi\u0105zania oparte na rekonstrukcji Nowoczesne podej\u015bcie. Wykorzystuje: Pozwala uzyska\u0107 jako\u015b\u0107 zbli\u017con\u0105 do supersamplingu przy ni\u017cszym koszcie. Zale\u017cno\u015b\u0107 pomi\u0119dzy rozdzielczo\u015bci\u0105 obrazu cz\u0119stotliwo\u015bci\u0105 pr\u00f3bkowania i realnym odbiorem jako\u015bci Wy\u017csza rozdzielczo\u015b\u0107 sama w sobie cz\u0119\u015bciowo redukuje aliasing. Por\u00f3wnanie: Rozdzielczo\u015b\u0107 Piksele 1280\u00d7720 921 600 1920\u00d71080 2 073 600 2560\u00d71440 3 686 400 3840\u00d72160 8 294 400 Przy wi\u0119kszej liczbie pikseli pojedynczy schodek staje si\u0119 mniej widoczny. To jednak nie usuwa problemu ca\u0142kowicie. Cz\u0119sty b\u0142\u0105d: \u201eMam 4K, wi\u0119c AA jest zb\u0119dny\u201d. Nie zawsze. Na cienkich liniach, siatkach, ro\u015blinno\u015bci i elementach oddalonych aliasing pozostaje widoczny. W silnikach czasu rzeczywistego dochodzi jeszcze aliasing temporalny \u2013 obraz mo\u017ce migota\u0107 mimo bardzo wysokiej rozdzielczo\u015bci. Praktyczne skutki stosowania antyaliasingu oraz sytuacje w kt\u00f3rych jego w\u0142\u0105czenie nie zawsze daje lepszy efekt W\u0142\u0105czenie wyg\u0142adzania ma konsekwencje. Korzy\u015bci: Koszty: Przyk\u0142adowe obserwacje praktyczne: Scenariusz Zalecenie Gry e-sportowe FXAA lub brak Gry AAA TAA Rendering statyczny SSAA CAD MSAA VR ostro\u017cne u\u017cycie TAA Pu\u0142apki: Antyaliasing co to z punktu widzenia implementacji programistycznej i uproszczonego modelu obliczeniowego Programista implementuj\u0105cy rasteryzacj\u0119 musi zdecydowa\u0107, ile informacji zebra\u0107 dla ka\u017cdego piksela. Najprostszy model: Wz\u00f3r Znaczenie kolor = suma_pr\u00f3bek \/ liczba_pr\u00f3bek U\u015brednienie Przyk\u0142ad w Pythonie: Kod python\\nsamples=[0.2,0.5,1.0,0.3]\\ncolor=sum(samples)\/len(samples)\\nprint(color)\\n Przyk\u0142ad w C: Kod c\\nfloat samples[4]={0.2,0.5,1.0,0.3};\\nfloat sum=0;\\n\\nfor(int i=0;i&lt;4;i++)\\n sum+=samples[i];\\n\\nprintf(\\&#8221;%.2f\\&#8221;, sum\/4);\\n Przyk\u0142ad w PHP: Kod php\\n&lt;?php\\n$s=[0.2,0.5,1.0,0.3];\\n\\necho array_sum($s)\/count($s);\\n?&gt;\\n Prawdziwe silniki wykorzystuj\u0105 dodatkowo: Dlatego wsp\u00f3\u0142czesny antyaliasing jest bardziej systemem przetwarzania obrazu ni\u017c pojedynczym filtrem. FAQ Czy antyaliasing zwi\u0119ksza liczb\u0119 FPS?Nie. Zwykle j\u0105 zmniejsza, poniewa\u017c wymaga dodatkowych oblicze\u0144. Czy TAA zawsze jest lepszy od MSAA?Nie. TAA lepiej redukuje migotanie, ale mo\u017ce rozmywa\u0107 obraz. Dlaczego tekst wygl\u0105da gorzej po w\u0142\u0105czeniu FXAA?Filtr dzia\u0142a na gotowym obrazie i mo\u017ce traktowa\u0107 kraw\u0119dzie liter jak aliasing. Czy rozdzielczo\u015b\u0107 4K eliminuje potrzeb\u0119 AA?Nie ca\u0142kowicie. Wci\u0105\u017c pozostaj\u0105 problemy temporalne i drobne detale. Czy antyaliasing dzia\u0142a tylko w grach?Nie. Jest stosowany w renderingu, typografii, CAD, GIS i wizualizacji naukowej. Kt\u00f3ra technika daje najwy\u017csz\u0105 jako\u015b\u0107?Najcz\u0119\u015bciej SSAA, ale koszt obliczeniowy jest bardzo wysoki. Wyg\u0142adzanie kraw\u0119dzi pozostaje jednym z podstawowych kompromis\u00f3w grafiki komputerowej. Celem nie jest stworzenie idealnego obrazu, lecz ograniczenie b\u0142\u0119d\u00f3w wynikaj\u0105cych z pr\u00f3bkowania do poziomu, kt\u00f3rego u\u017cytkownik nie zauwa\u017ca podczas normalnego korzystania z ekranu. \u0179r\u00f3d\u0142o Foto: Magnific<\/p>\n","protected":false},"author":1,"featured_media":1602,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1601","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-poradnik"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1601"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1601\/revisions"}],"predecessor-version":[{"id":1603,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1601\/revisions\/1603"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1602"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}