Jaki jest proces rasteryzacji wektorów w programie Illustrator?


19

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.

Obraz podstawowy

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.)

Obrazy renderowane w popularnych narzędziach do edycji grafiki

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.

Ekskluzywny render pokazujący wygładzanie

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.

Plik SVG renderowany w przeglądarce

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.

Schemat rekompozycji obrazu

Teoretycznie daje to ten sam obraz, co posiadanie go w jednym kawałku, ale wynik jest nieco inny przy użyciu tej metody.

Wynik przekomponowanego obrazu

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)

SVG w rzutni Blendera

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.

Rzeczywiste renderowanie 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?

4
Inni powszechni rendererzy również mają ten problem z konfleksją. Zobacz w3.impa.br/~diego/projects/GanEtAl14/sample.html?contour .
lhf 22.12.15

Odpowiedzi:


12

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 ”.

Zoptymalizowana grafika a podgląd ekranu programu Illustrator

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).

wprowadź opis zdjęcia tutaj

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:

do0=do1α+do2)(1-α)

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.


1
BTW, aby uzyskać bardziej szczegółowe informacje na temat tego, dlaczego mieszanie alfa nie „robi właściwej rzeczy” w takich przypadkach, sprawdź ten artykuł: Interpretowanie alfa autorstwa Andrew Glassnera.
Nathan Reed,

@NathanReed Będzie wyglądał thnx, ale tutaj jest to po prostu to, że nawet jeśli alfa działało poprawnie, nie będzie wiedział, które części pokrywają piksele, a które nie. Dwie warstwy z 50% alfa mogą oznaczać całkowicie nieprzezroczyste lub widoczną tylko jedną warstwę, ponieważ obiekty wypełniają identyczny region, którego po prostu nie znamy.
joojaa

2
@ joojaa Tak, to jest w zasadzie punkt, w którym pisze papier: alfa może reprezentować albo krycie, pokrycie, albo kombinację obu. :)
Nathan Reed

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.