Renderowanie czcionek na GPU z użyciem algorytmu Slug: dynamiczna dylatacja i otwarcie patentu
Algorytm Slug, opracowany w 2016 roku, umożliwia renderowanie czcionek i grafiki wektorowej na GPU bezpośrednio z krzywych Beziera, bez użycia map tekstur. Przez dziesięć lat metoda ewoluowała, uzyskując kluczowe ulepszenie – dynamiczną dylatację, a obecnie jego patent jest otwarty do swobodnego wykorzystania na licencji MIT.
Ewolucja algorytmu Slug
Slug rozwiązuje złożone zadanie niezawodnego, szybkiego i wysokiej jakości renderowania tekstu w czasie rzeczywistym. Niezawodność wyklucza artefakty takie jak pominięte piksele, szybkość zapewnia renderowanie bez spadku FPS na konsolach z 2016 roku, a wysoka jakość – płynne krzywe i wyraźne kąty przy dowolnej skali i perspektywie.
Od publikacji w JCGT w 2017 roku kod przeszedł kilka zmian:
- Usunięto optymalizację podziału pasów, która przyspieszała duże glify, ale wprowadzała dywergencję w shaderach i podwajała ilość danych.
- Wykluczono adaptacyjne supersamplowanie, ponieważ jego wpływ był zauważalny tylko dla ledwo czytelnego tekstu, a aliasing małych rozmiarów jest skutecznie łagodzony przez dylatację.
- Przerobiono podejście do renderowania wielokolorowych emoji: zamiast pętli w shaderze pikselowym teraz stosuje się zestaw niezależnych glifów z własnymi wielokątami ograniczającymi, co upraszcza kod i zwiększa wydajność.
Te poprawki uprościły shader pikselowy, zmniejszyły ilość danych i poprawiły ogólną efektywność renderowania.
Dynamiczna dylatacja: automatyczna optymalizacja
Przed wprowadzeniem dynamicznej dylatacji użytkownik ręcznie ustawiał stałą odległość dla rozszerzania wielokątów ograniczających glify. To prowadziło do dwóch problemów: artefaktów aliasingu przy małych rozmiarach i nadmiernego zużycia zasobów GPU przy dużych. Dynamiczna dylatacja rozwiązuje oba, automatycznie obliczając optymalne przesunięcie w shaderze wierzchołkowym na podstawie macierzy model-widok-projekcja (MVP) i rozmiarów widoku.
Obliczenie gwarantuje, że centra częściowo pokrytych pikseli trafiają do wnętrza wielokąta, przechwytywane przez rasteryzator, bez zbędnego wypełniania. Formuła jest wyprowadzona z warunku rozszerzenia o połowę piksela w widoku i sprowadza się do równania kwadratowego:
d = (s³t + s²√(u² + v²)) / (u² + v² - s²t²)
gdzie s = m₃₀p_x + m₃₁p_y + m₃₃, t = m₃₀n̂_x + m₃₁n̂_y, a u i v – pochodne od parametrów MVP i normalnej. Znak «+» daje przesunięcie na zewnątrz wzdłuż jednostkowej normalnej.
Aby zachować oryginalny rozmiar glifu, współrzędne próbkowania na płaszczyźnie kegela są korygowane za pomocą odwrotnej macierzy Jacobiego 2×2, która przekształca przesunięcie w przestrzeni obiektu.
Otwarcie patentu i licencjonowanie
W 2019 roku autor otrzymał patent na algorytm Slug, ale teraz otwiera go do swobodnego wykorzystania na licencji MIT. To pozwala deweloperom integrować metodę w swoich projektach bez ograniczeń prawnych. Biblioteka Slug jest już licencjonowana przez firmy takie jak Activision, Adobe i Ubisoft do gier wideo, wizualizacji naukowej, CAD i innych dziedzin, demonstrując swoją praktyczną wartość.
Co jest ważne
- Slug renderuje czcionki i grafikę wektorową na GPU bezpośrednio z krzywych Beziera, zapewniając niezawodność, szybkość i wysoką jakość.
- Dynamiczna dylatacja automatycznie optymalizuje rozszerzanie wielokątów ograniczających, eliminując artefakty i nadmierne zużycie zasobów.
- Algorytm ewoluował: usunięto optymalizację podziału pasów i supersamplowanie, uproszczono renderowanie emoji.
- Patent na Slug jest teraz otwarty na licencji MIT, umożliwiając swobodne użycie w projektach komercyjnych i niekomercyjnych.
- Metoda jest stosowana w branży gier wideo, wizualizacji naukowej, CAD i innych obszarach, potwierdzając swoją efektywność.
— Editorial Team
Brak komentarzy.