Czasami używam grafiki wektorowej, po prostu dlatego, że w niektórych przypadkach wyglądają nieco ładniej, a innym razem używam grafiki bitmapowej / rastrowej.
Zastanawiałem się, czy istnieją jakieś znaczące różnice w wydajności między tymi dwiema opcjami?
texture
bitmap-graphics
vector-graphics
performance
Ethan Bierlein
źródło
źródło
Odpowiedzi:
Jak powiedział TheBuzzSaw, zależy to od wielu rzeczy, w tym od implementacji grafiki rastrowej w porównaniu do grafiki wektorowej.
Oto kilka metod grafiki wektorowej o wysokiej wydajności, które są renderowane przy użyciu tradycyjnych metod rasteryzacji.
Loop i Blinn pokazują, jak renderować kwadratową krzywą beziera grafiki wektorowej, renderując pojedynczy trójkąt i używając współrzędnych tekstury w module cieniującym piksele, aby stwierdzić, czy piksel znajduje się powyżej czy poniżej krzywej: http: //www.msr-waypoint. net / en-us / um / people / cloop / LoopBlinn05.pdf
Podstawową ideą jest ustawienie trójkątnych pozycji narożnych na 3 pozycje punktu kontrolnego i ustawienie współrzędnych tekstury w każdym narożniku odpowiednio na (0,0), (0,5,0) i (1,1). W module cieniującym, jeśli interpolowana współrzędna tekstury (x * xy) wynosi <0, piksel znajduje się pod krzywą, w przeciwnym razie jest powyżej krzywej.
Możesz zobaczyć fałszywą implementację tego na shadertoy tutaj: https://www.shadertoy.com/view/4tj3Dy
Jeśli chodzi o drugą metodę, oto metoda z Valve, w której odległości do kształtu są przechowywane w teksturze zamiast danych pikselowych, umożliwiając rysowanie grafiki wektorowej za pomocą próbkowania tekstury. Dekodowanie jest tak proste, że można je zaimplementować nawet na sprzęcie o stałej funkcji za pomocą tylko testu alfa! http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf
Aby dać ci wyobrażenie o tym, jak dobrze działa druga technika, ten wąsy 1024 x 768 został wygenerowany z obrazu źródłowego 64 x 32, który miał jeden kanał kolorów! (aka nieskompresowany 2 KB)
Napisałem też o tym na swoim blogu: http://blog.demofox.org/2014/06/30/distance-field-textures/
Oto przykładowy kod OpenCL, który pokazuje, jakie to proste:
Obie te techniki są super szybkie i nieco zacierają granicę między grafiką wektorową i rasteryzowaną. Są renderowane przy użyciu technik rasteryzacji, ale mają właściwości powiększania / skalowania, takie jak techniki grafiki wektorowej.
źródło
Może tam być.
Mniej odpowiedzi technicznej:
Jeśli budujesz stronę internetową lub inną aplikację, w której nie masz nic wspólnego z programowaniem graficznym, odpowiedź brzmi prawdopodobnie tak. Podstawowe interfejsy API spróbują zgadnąć, jak je renderować i skutecznie buforować. Ponieważ jednak aplikacja działa, a interfejs API czasami zgaduje niepoprawnie, może być konieczne ponowne renderowanie elementów i obniżenie wydajności.
Więcej technicznych:
Pamiętaj, że jeśli nie używasz jednego z najnowszych układów GPU i biblioteki do rysowania ścieżek wektorowych na GPU, wszystkie tekstury bitmapowe są renderowane przez GPU.
Rozważę typowy przypadek, w którym grafiki wektorowe są renderowane do tekstur. Wydajność zależy od łańcucha narzędzi, od tego, czy aplikacja dynamicznie tworzy tekstury z zasobów wektora i czy grafika jest wyświetlana przy różnych poziomach powiększenia. W grę wchodzą dwa problemy: generowanie zasobów i tekstur. Jeśli wyświetlasz grafikę tylko w rozmiarze statycznym, powiedziałbym, że nie ma różnicy i być może twój zestaw narzędzi może przekształcić zasoby w grafikę bitmapową przed uruchomieniem. Jeśli jednak są wyświetlane w różnych rozmiarach lub w świecie 3D, będziesz potrzebować tekstur zmapowanych, które zajmują więcej pamięci. Zajmą dużo pamięci, jeśli naprawdę chcesz zobaczyć ich wierność z bliska o większej fakturze.
Mam nadzieję, że to pomoże.
źródło
Istnieje kilka sposobów renderowania grafiki wektorowej. Jak wspomina TheBuzzSaw, NVIDIA ma rozszerzenie, które może dość szybko renderować ogólne ścieżki (ale oczywiście działa tylko na GPU NVIDIA). Alan Wolfe wspomina o niejawnych metodach powierzchniowych (Loop-Blinn / pola odległości), które definiują funkcję, która mówi, czy jesteś wewnątrz kształtu, czy poza nim, i kolorują piksele na podstawie tej funkcji. Inną metodą są szablony i okładki, w których renderujesz ścieżkę w buforze szablonów i używasz parzystej liczby nieparzystej, aby ustalić, czy ścieżka obejmuje piksel.
Ogólnie jednak kompromis polega na tym, że renderowanie rastra będzie szybsze, ale jest bardziej podatne na aliasing (nawet pola odległości rozpadają się w niskiej i wysokiej skali). Ścieżki renderowania wymagają wielu ustawień, ale teoretycznie można je skalować do dowolnej rozdzielczości.
źródło