Obecnie próbuję zrozumieć kilka rzeczy na temat rasteryzacji grafiki wektorowej i różnych sposobów jej implementacji w różnych typach aplikacji.
Przetestowałem i porównałem kilka programów i zauważyłem, że istnieje zasadnicza różnica w zachowaniu antyaliasingu w procesie rasteryzacji. Szczególnie interesuje mnie zachowanie renderowania w programie Illustrator . Zobaczysz dlaczego, czytając dalej.
Do moich testów użyłem bardzo prostej kompozycji trójkątów ułożonych w nieregularny sześciokąt o różnych kolorach.
Oprogramowanie do grafiki wektorowej
Oto trzy rendery tej samej grafiki wektorowej w programach Illustrator, Affinity i Inkscape. (Obraz utworzony w Affinity i Inkscape jest dokładnie taki sam.)
Jak widać, na każdej krawędzi obrazu renderowanego za pomocą Affinity i Inkscape znajduje się niepożądana biała linia. Wygładzanie nie wypełnia tego obszaru jednolitym kolorem, co powoduje małą przerwę między sąsiednimi kształtami.
Chociaż w renderowaniu w programie Illustrator nie ma przerwy, krawędzie kształtów wyglądają tak gładko, jak renderowanie koligacji.
Oto obraz pokazujący ten sam obszar każdego obrazu w powiększeniu.
Istnieje bardzo subtelna różnica między tymi dwoma obrazami. Renderowanie powinowactwa jest nieco gładsze, ale prawie niemożliwe jest dostrzeżenie różnicy, gdy patrzy się na obrazy w ich oryginalnych rozmiarach.
Przeglądarki
Renderowanie SVG
Wyświetlanie tej samej grafiki wyeksportowanej jako SVG w przeglądarce wygląda bardzo podobnie do obrazu rastrowego utworzonego przez Affinity i Inkscape.
Istnieją bardzo małe różnice w wygładzaniu krawędzi (które naprawdę nie są tutaj warte pokazania), ale rasteryzacja SVG w popularnych przeglądarkach zachowuje się prawie tak samo.
Renderowanie z rozkładem
Testując renderowanie programu Illustrator nieco dalej, próbowałem podzielić części mojej grafiki i wyeksportować je indywidualnie, a następnie skomponować z powrotem za pomocą oprogramowania do edycji rastrowej.
Teoretycznie daje to ten sam obraz, co posiadanie go w jednym kawałku, ale wynik jest nieco inny przy użyciu tej metody.
Jak pokazano, kiedy dwie części są złożone, między nimi jest niewielka szczelina. Chociaż jest bardziej subtelny, jest bardzo podobny do grafiki renderowanej w Affinity.
Renderowanie wielokątów
Blender (oprogramowanie 3D)
Blender pozwala importować pliki SVG i manipulować nimi jako obiektami krzywej. Oto zaimportowana grafika pokazana w rzutni 3D. (Domyślnie na materiał wpływ będą miały światła na scenie. Zaznaczenie właściwości bezcieniowej w panelu właściwości materiału pozwoli na renderowanie kształtów w ich oryginalnych kolorach).
Oto rendering wykonany z SVG w Blenderze.
Nie ma żadnej przerwy między trójkątami. Inne oprogramowanie 3D prawdopodobnie będzie działać w ten sam sposób. Więc Blender zachowuje się tak jak Illustrator , czy tak? Może jest na odwrót?
Prawdziwe pytania
- Z jakiej biblioteki rysunków wektorowych korzysta program Illustrator za scenami?
- Czy to możliwe, że program Illustrator korzysta z pewnego rodzaju silnika renderowania 3D? Czy to jest oprogramowanie typu open source? (prawdopodobnie nie?)
- Czy którakolwiek ze znanych bibliotek do rysowania wektorów, takich jak Kair i Skia, może osiągnąć takie samo zachowanie renderowania? (Brak odstępu między kształtami)
- Czy istnieje jakaś mniej znana biblioteka rysunków wektorowych, która ma takie samo zachowanie?
źródło
Odpowiedzi:
O ile mogę stwierdzić, Illustrator ma 2 lub 3 różne rasteryzatory. Podgląd na ekranie jest również podatny na te same artefakty przerw, co program, ale jest dostrojony, aby zminimalizować efekt. Twój post sugeruje, że interesuje Cię wynik „ zoptymalizowany pod kątem sztuki ”.
Zdjęcie 1 : Różne tryby renderowania programu Illustrator. Grafika zoptymalizowana po lewej stronie i podpowiedź po prawej stronie. Zauważ, że podpowiedź pokazuje niewielkie tło. Nie mam nowej wersji CC, więc nie mogę pokazać trzeciej.
Jak zatem działa sztuka zoptymalizowana?
Tryb renderowania zoptymalizowany pod względem artystycznym to po prostu niezalizowany obraz renderowany w wyższej rozdzielczości, który następnie poddawany jest filtrowaniu pudełkowemu . Nazywa się to superpróbkowaniem, które jest kosztowne. Filtr pudełkowy to po prostu średnia wartość próbek w pudełku (piksel). Jest to rzeczywiście podobna technologia, jak w przypadku filtra wielopikselowego używanego w renderowaniu blendera. Możesz zrobić to samo ręcznie i uzyskać te same wyniki.
W rzeczywistości renderowanie, które otrzymujesz z ilustratora, nie jest naprawdę dobre. Jest renderowany w przestrzeni nieliniowej i nie jest korygowany, a lepsze wyniki można uzyskać, zamieniając filtry wyższego rzędu i obliczając w liniowej przestrzeni kolorów. Wszystkie metody z wieloma próbkami wykazują to samo poprawne renderowanie (biorąc pod uwagę wystarczającą liczbę próbek, nawet matematycznie poprawnych).
Zdjęcie 2 : Filtrowanie wielu pikseli, na lewym ilustratorze natywny „Art Optimized”. Po prawej ten sam obraz przy 16 x 16 pikseli z wielopłatowym filtrem Lanczos w przestrzeni liniowej . Upewnij się, że twój zoom wynosi 1: 1.
Problem
Rzeczywiście pogodziłeś się z prawdziwym problemem obecnej generacji rendererów ekranowych. Starają się unikać wielokrotnego próbkowania na rzecz obliczania zasięgu. Ale to po prostu nie działa idealnie! Po prostu dlatego, że mieszanka alfa to:
Gdy łańcuch nie osiąga 0, gdy jest przykuty łańcuchem do półprzezroczystych powierzchni, więc tło pokazuje koryta. Ponadto nie wie, w jaki sposób zasięg jest dystrybuowany, więc zrobi to źle. Po prostu nie da się tego obejść w takiej nie pokrywającej się sprawie. ale jeśli zezwolisz, aby kształty zachodziły na siebie, obliczenie pokrycia można rozwiązać (patrz tutaj ).
Inne pytania Możesz uzyskać taki sam wynik w dowolnym innym silniku, po prostu multisampling obrazu bez antyaliasingu. Nie można uzyskać efektu w renderowaniu na ekranie bez robienia nakładki, ponieważ optymalizują one szybkość. Czy program Illustrator używa 3D? Nowe CC może zależeć od twojej interpretacji 3D. Ten problem nie ma nic wspólnego z 3D tylko metodami rekonstrukcji sygnału, więc nie ma on tak naprawdę zastosowania do pytania.
źródło
I tylko dla dodania: nazywa się to artefaktem „konfuzji” i właśnie do tego celu w programie AntiGrain Geometry zastosowano rasteryzator kształtów złożonych , patrz:
flash_rasterizer.png http://agg.sourceforge.net/antigrain.com/demo/flash_rasterizer.png
Również to, co NV Path Rendering twierdzi, że poprawia:
Wprowadzenie do NV_path_rendering (s. 67) lub NV_path_rendering FAQ (# 29).
źródło