Renderowanie Subpixel dla Ray Tracer

16

W renderowaniu czcionek często stosuje się renderowanie subpikseli . Podstawową ideą jest tutaj rozbicie piksela na komponenty RGB, a następnie obliczenie wartości dla każdego osobno. Ponieważ każdy element jest mniejszy niż cały piksel, możliwe jest uzyskanie antyaliasingu o wyższej jakości.

Istnieje oczywiście analogiczny sposób, aby zrobić to samo dla znacznika promienia. Filtrowanie rekonstrukcji wykonuje się osobno dla każdego podkanału.

Byłem zaskoczony, że tak naprawdę nie mogłem znaleźć odniesienia do wykonujących to ray tracerów. Zwłaszcza jeśli już wykonujesz renderowanie spektralne, wydaje się to oczywistą rzeczą do zrobienia. Jest ten artykuł z czasopisma, o którym nigdy nie słyszałem, który wydaje się być powiązany. Ale ogólnie renderowanie subpikseli po prostu nie wydaje się powszechne. Moje pytanie: dlaczego nie ?

imallett
źródło
Czy obrazy renderowane w subpikselach nadal będą wyglądać dobrze, jeśli będą wyświetlane na ekranach w orientacji pionowej?
jamesdlin
jako inżynier nigdy nie zgodziłbym się na wdrożenie tak ... zepsutego pomysłu. Z WYJĄTKIEM, jeśli jestem pewien, że wyświetlacz jest całkowicie naprawiony. jak aplikacja na iPhone'a 5S. Korzystanie z tej techniki generuje uszkodzone obrazy z ekranów przy użyciu odwróconych wzorów lub różnych aranżacji.
v.oddou

Odpowiedzi:

14

Jest to całkowicie możliwe

Chociaż różnica może nie być szczególnie zauważalna, spodziewałbym się, że próbkowanie z uwzględnieniem dokładnej geometrii pikseli daje nieco dokładniejszy obraz. Musisz tylko przesunąć centra pikseli na komponent koloru zgodnie z (średnią) lokalizacją podpikseli tego koloru. Pamiętaj, że nie wszystkie układy pikseli mają jeden do jednego związek między pikselami i subpikselami.

Na przykład penTile RGBG ma dwa razy więcej zielonych subpikseli niż czerwony i niebieski, jak pokazuje ten obraz z Wikipedii:

Zamknij obraz geometrii pikseli RGBG

Nie znam żadnego technicznego powodu, który uniemożliwiłby wykorzystanie tego do generowania dowolnych pełnokolorowych obrazów. W rzeczywistości kolorowa scena będzie miała mniej zauważalne artefakty kolorystyczne niż czerń na białym tekście, co sprawia, że ​​różnice w kolorach są najtrudniejsze do kamuflażu.

Czcionki są renderowane na żądanie

Istotną różnicą między renderowaniem sceny ze śledzeniem promieni a renderowaniem czcionek jest to, że czcionki są renderowane na żądanie i mogą uwzględniać używany ekran. W przeciwieństwie do tego scena ze śledzeniem promieni jest często wstępnie renderowana, a następnie wyświetlana na wielu różnych typach ekranów (o różnej geometrii pikseli). Na przykład wyświetlanie obrazu ze śledzeniem promieni na stronie internetowej uniemożliwi dostosowanie go do określonego typu monitora.

Jeśli projektujesz program raytracingu w czasie rzeczywistym i masz dostęp do sprawdzenia geometrii pikseli monitora, możesz raytrace do określonego układu subpikseli. Jednak raytracing offline, który tworzy nieruchomy obraz, można jednak dostosować tylko do jednego rodzaju geometrii pikseli, co spowoduje, że obraz będzie wyglądał gorzej na dowolnej innej geometrii pikseli. Można obejść ten problem, renderując zestaw różnych obrazów i wybierając odpowiedni, gdy zostanie on później wyświetlony na określonym typie monitora.

Jest mało prawdopodobne, aby przyniosła to długoterminową korzyść

Nie ma więc powodu, dla którego nie można renderować subpikseli dla raytracera, ale oznacza to uwzględnienie aspektu monitora, który nie zawsze jest znany. Inną rzeczą, o której należy pamiętać, jest to, że będziesz rozwijać to oprogramowanie dla kurczącego się rynku. Renderowanie subpikseli jest przydatne na ekranach o stosunkowo niskiej rozdzielczości. Ponieważ coraz więcej ekranów (nawet ekranów mobilnych) zbliża się do tak wysokiej rozdzielczości, że ludzkie oko nie jest w stanie wykryć różnicy wynikającej z renderowania subpikseli, twoja praca będzie prawdopodobnie bardziej teoretyczna niż praktyczna.

trichopaks
źródło
3
Jako adwokat diabła, jeśli to możliwe, aby renderować subpiksele w kolorze (jestem sceptyczny!), Wydaje się, że może być przydatny w sytuacjach VR, gdzie walczą o wystarczającą rozdzielczość. Może także na telefonach lub stołach (bez siatkówki?)
Alan Wolfe,
1
@AlanWolfe tak, ale jest także 3 razy droższy do renderowania
joojaa
tak na pewno, to prawda. Są jednak sytuacje, w których nie stanowi to problemu. Na przykład znam kilka algorytmów, w których nie trzeba strzelać promieniami dla każdego piksela w każdej klatce. Wygląda na to, że może to mieć także wpływ na grafikę rastrową. Znowu nie jestem przekonany, że renderowanie subpikseli w kolorze jest prawdziwe, ale wiesz, JEŚLI! : P
Alan Wolfe
@AlanWolfe Nie rozumiem twoich wątpliwości. Wszystkie obrazy są już renderowane z subpikselami, ale kolory są niedopasowane o od jednej trzeciej do połowy piksela. Nie widzę, jak poprawienie tego braku wyrównania nie doprowadziłoby do uzyskania obrazu o wyższej jakości. Czy masz jakieś szczególne obawy (które mogą być dobrym pytaniem ...)?
trichoplax
3
@ joojaa Nie ma powodu, aby renderowanie było 3 razy droższe. Nie musisz strzelać 3 razy więcej promieni; po prostu zastosujesz 3 różne ciężary, akumulując promienie w buforze ramki. W efekcie używasz innego jądra antyaliasingu dla każdego kanału kolorów.
Nathan Reed,
9

Jasne, możesz użyć renderowania subpikseli dla dowolnych obrazów. Renderowanie subpikseli jest jednak ogólną techniką przetwarzania obrazu 2D - nie ma to nic wspólnego ze śledzeniem promieni. Równie dobrze możesz go używać z dowolną inną metodą renderowania 3D, a nawet z prostym rysunkiem 2D, fotografią lub nawet wideo.

Tak więc powiedziałbym, że „renderowanie subpikseli dla ray tracingu” naprawdę łączy dwie odrębne problematyczne domeny, które najlepiej traktować osobno. Jedynym istotnym połączeniem jest to, że jeśli śledzisz promieniowo scenę w czasie rzeczywistym i wiesz, że wynikowy obraz zostanie narysowany na ekranie przy użyciu renderowania subpikseli, możesz użyć tych informacji do optymalizacji gęstości pikseli (i proporcji współczynnik) obrazu pośredniego (np. przy użyciu 3x poziomej gęstości pikseli dla typowego ekranu LCD LCD).


Potencjalnym źródłem nieporozumień może być to, że w obecnym systemie komputerowym renderowanie subpikseli jest powszechnie stosowane tylko w przypadku tekstu i zazwyczaj jest zintegrowane z kodem renderowania czcionek. Główne przyczyny tego są prawdopodobnie historyczne, ale tam też zwykle występują największe korzyści (pod względem poprawy wizualnej i czytelności).

Ponadto, ze względu na sposób, w jaki tekst składa się z prostych i powtarzalnych kształtów wektorowych, integracja renderowania subpikseli z mechanizmem renderowania czcionek oferuje dodatkowe możliwości optymalizacji w porównaniu z renderowaniem tekstu w buforze o wysokiej rozdzielczości, a następnie przetwarzaniem go.

To powiedziawszy, w pełni oczekuję, że w miarę dojrzewania technologii przejdziemy do systemu, w którym renderowanie subpikseli jest po prostu wykonywane w sposób przezroczysty przez procesor graficzny lub ewentualnie przez sam ekran.

(Najprawdopodobniej będzie to wymagać aplikacji, które chcą w pełni wykorzystać tę funkcję, aby poradzić sobie z pikselami fizycznymi, które są mniejsze i niekoniecznie mają taki sam kształt, jak „piksele logiczne”. Ale z drugiej strony już się tym zajmujemy kierunek z ekranami o wysokiej DPI).

Ilmari Karonen
źródło
Tervetuloa! Tak, twoja uwaga jest ważna, mówię, że system lub sprzęt musi to zrobić, ponieważ tylko system może w przyszłości realistycznie wiedzieć o orientacji ekranu i organizacji kolorów na ekranie. Najlepiej sam ekran by to zrobił.
joojaa,