Rasteryzacja konserwatywna Direct3D 12
Konserwatywna rasteryzacja dodaje pewną pewność renderowania pikseli, co jest przydatne w szczególności w przypadku algorytmów wykrywania kolizji.
- — omówienie
-
interakcje z potoku
- interakcja reguł rasteryzacji
- interakcji wieloprzykładowych
- interakcji SampleMask
- interakcja z testem głębokości/wzornika
- interakcja z pikselami pomocnika
- interakcji pokrycia danych wyjściowych
- interakcja InputCoverage
- interakcji InnerCoverage
- interakcja interpolacji atrybutów
- interakcji wycinków
- interakcja Clip Distance
- interakcja rasteryzacji niezależnych obiektów docelowych
- interakcja topologii pierwotnej IA
- interakcji zapytań
- interakcja stanu cull
- interakcji IsFrontFace
- interakcja z trybami wypełniania
- szczegóły implementacji
- podsumowania interfejsu API
- Tematy pokrewne
Przegląd
Konserwatywna rasteryzacja oznacza, że wszystkie piksele, które są co najmniej częściowo pokryte renderowanym elementem pierwotnym, są rasteryzowane, co oznacza, że cieniowanie pikseli jest wywoływane. Normalne zachowanie to próbkowanie, które nie jest używane, jeśli włączono rasteryzację konserwatywną.
Konserwatywna rasteryzacja jest przydatna w wielu sytuacjach, w tym w celu uzyskania pewności w wykrywaniu kolizji, wykrywaniu okluzji i renderowaniu kafelków.
Na przykład na poniższej ilustracji przedstawiono zielony trójkąt renderowany przy użyciu rasteryzacji Konserwatystów, jak to się wydaje w rasteryzatorze (czyli przy użyciu współrzędnych wierzchołka stałego punktu 16.8). Brązowy obszar jest znany jako "region niepewności" - region koncepcyjny, który reprezentuje rozszerzone granice trójkąta, wymagane do zapewnienia, że pierwotny rasterizator jest konserwatywny w odniesieniu do oryginalnych współrzędnych wierzchołków zmiennoprzecinkowych. Czerwone kwadraty w każdym wierzchołku pokazują, w jaki sposób jest obliczany region niepewności: jako zmieciony kwadrat.
Duże szare kwadraty pokazują piksele, które zostaną renderowane. Różowe kwadraty pokazują piksele renderowane przy użyciu "Top-Left Rule", który wchodzi w grę jako krawędź trójkąta przecina krawędź pikseli. Mogą istnieć wyniki fałszywie dodatnie (zestaw pikseli, które nie powinny być), które system będzie normalnie, ale nie zawsze cull.
Interakcje z potokiem
Interakcja z regułami rasteryzacji
W trybie rasteryzacji konserwatystów reguły rasteryzacji mają taki sam sposób jak w przypadku, gdy tryb rasteryzacji konserwatystów nie jest włączony z wyjątkami dla reguły Top-Left opisanej powyżej i pokrycie pikseli. Należy użyć precyzji rasteryzatora 16.8 Fixed-Point.
Piksele, które nie byłyby objęte, jeśli sprzęt używał pełnych współrzędnych wierzchołków zmiennoprzecinkowych, mogą być uwzględniane tylko wtedy, gdy znajdują się w regionie niepewności nie większym pół piksela w domenie punktu stałego. Oczekuje się, że przyszły sprzęt osiągnie zaostrzony region niepewności określony w warstwie 2. Należy pamiętać, że to wymaganie zapobiega rozszerzaniu trójkątów odsuwu dalej niż jest to konieczne.
Podobny prawidłowy region niepewności ma również zastosowanie do InnerCoverage
, ale jest ściślejszy, ponieważ żadne implementacje nie wymagają większej niepewności w tym przypadku. Aby uzyskać więcej szczegółów, zobacz interakcji InnerCoverage.
Wewnętrzne i zewnętrzne regiony niepewności muszą być większe lub równe rozmiarowi połowy siatki pod piksela lub 1/512 piksela w domenie punktu stałego. Jest to minimalny prawidłowy region niepewności. 1/512 pochodzi z reprezentacji współrzędnych współrzędnych rasteryzatora 16.8 punktu stałego i reguły zaokrąglonej do najbliższej reguły, która ma zastosowanie podczas konwertowania współrzędnych wierzchołków zmiennoprzecinkowych na współrzędne 16,8 punktu stałego. 1/512 może ulec zmianie, jeśli precyzja rasteryzatora ulegnie zmianie. Jeśli implementacja implementuje ten minimalny region niepewności, musi postępować zgodnie z regułą Top-Left, gdy krawędź lub róg regionu niepewności spadnie wzdłuż krawędzi lub rogu piksela. Obcięte krawędzie regionu niepewności powinny być traktowane jako najbliższy wierzchołek, co oznacza, że liczy się jako dwie krawędzie: dwa sprzężenia w skojarzonym wierzchołku. Top-Left reguła jest wymagana, gdy jest używany minimalny region niepewności, ponieważ jeśli nie jest, implementacja konserwatywnej rasteryzacji nie może rasteryzować pikseli, które mogą być objęte wyłączeniem trybu konserwatywnej rasteryzacji.
Na poniższym diagramie przedstawiono prawidłowy region niepewności zewnętrznej generowany przez zamiatanie kwadratu wokół krawędzi pierwotnych w domenie punktu stałego (tj. wierzchołki zostały kwantyzowane przez reprezentację 16,8 punktu stałego). Wymiary tego kwadratu są oparte na prawidłowym rozmiarze regionu niepewności zewnętrznej: dla 1/2 piksela kwadrat ma 1 piksel szerokości i wysokości, dla 1/512 piksela, kwadrat jest 1/256 piksela szerokości i wysokości. Zielony trójkąt reprezentuje dany pierwotny, czerwona linia kropkowana reprezentuje granicę przeszacowanej Konserwatywnej Rasteryzacji, stałe czarne kwadraty reprezentują kwadrat, który jest przetoczony wzdłuż krawędzi pierwotnych, a niebieski obszar sprawdzania jest obszarem niepewności zewnętrznej:
Interakcja z wieloma próbkami
Niezależnie od liczby próbek w RenderTarget/DepthStencil powierzchni (lub czy ForcedSampleCount jest używany, czy nie), wszystkie próbki są pokryte rasteryzacją konserwatystów. Poszczególne lokalizacje próbek nie są testowane pod kątem tego, czy należą do pierwotnego, czy nie.
Interakcja z maską przykładową
SampleMask Stan rasteryzatora stosuje się tak samo, jak w przypadku, gdy konserwatywna rasteryzacja nie jest włączona dla InputCoverage
, ale nie ma wpływu na InnerCoverage
(tj. nie jest to and'ed w danych wejściowych zadeklarowanych za pomocą InnerCoverage
). Wynika to z faktu, że InnerCoverage
nie ma związku z tym, czy próbki MSAA są maskowane: 0 InnerCoverage
oznacza tylko, że piksel nie ma gwarancji pełnego objęcia ochroną, a nie że żadne próbki nie zostaną zaktualizowane.
Interakcja z testem głębokości/wzornika
Testowanie głębokości/wzornika jest kontynuowane dla konserwatywnie rasteryzowanego piksela w taki sam sposób, jak w przypadku, gdy wszystkie próbki są pokryte, gdy konserwatywna rasteryzacja nie jest włączona.
Kontynuowanie wszystkich omówionych próbek może spowodować ekstrapolację głębokości, która jest prawidłowa i musi być zaciśnięty do widoku, jak określono, gdy konserwatywna rasteryzacja nie jest włączona. Jest to podobne do sytuacji, gdy tryby interpolacji częstotliwości pikseli są używane w RenderTarget z liczbą próbek większą niż 1, chociaż w przypadku konserwatywnej rasteryzacji, jest to wartość głębokości przechodząca do stałego testu głębokości funkcji, który może być ekstrapolowany.
Wczesne zachowanie wyłuszczania głębokości z ekstrapolacją głębokości jest niezdefiniowane. Wynika to z faktu, że niektóre sprzęty wczesnej głębi nie mogą prawidłowo obsługiwać wartości głębokości ekstrapolowanych. Jednak wczesne zachowanie ulewności głębokości w obecności ekstrapolacji głębokości jest problematyczne nawet w przypadku sprzętu, który może obsługiwać ekstrapolowane wartości głębokości. Ten problem można obejść, zaciskając głębokość danych wejściowych Pixel Shader do minimalnych i maksymalnych wartości głębokości pierwotnego rasteryzowanego i zapisując tę wartość w celu oDepth
(rejestr głębi danych wyjściowych cieniowania pikseli). Implementacje są wymagane do wyłączenia wczesnego uścisku głębokości w tym przypadku z powodu oDepth
zapisu.
Interakcja z pikselami pomocnika
Reguły piksela pomocnika mają taki sam sposób jak w przypadku, gdy rasteryzacja konserwatystów nie jest włączona. W tym celu wszystkie piksele, w tym piksele pomocnika, muszą zgłaszać InputCoverage
dokładnie zgodnie z opisem w sekcji interakcji InputCoverage
. Tak więc w pełni nieobjęte pikselami pokrycie 0.
Interakcja z pokryciem danych wyjściowych
Pokrycie danych wyjściowych (oMask
) zachowuje się dla konserwatywnie rasteryzowanego piksela, tak jak w przypadku, gdy konserwatywna rasteryzacja nie jest włączona ze wszystkimi próbkami pokrytymi.
Interakcja inputCoverage
W trybie konserwatywnej rasteryzacji ten rejestr wejściowy jest wypełniany tak, jakby wszystkie próbki zostały objęte, gdy konserwatywna rasteryzacja nie jest włączona dla danego konserwatywnie rasteryzowanego piksela. Oznacza to, że wszystkie istniejące interakcje mają zastosowanie (np. zastosowano SampleMask), a pierwsze n bitów w InputCoverage
z LSB są ustawione na 1 dla konserwatywnie rasteryzowanego piksela, biorąc pod uwagę n próbki na piksel RenderTarget i/lub buforu DepthStencil w połączenia wyjściowegolub n próbki ForcedSampleCount. Pozostałe bity to 0.
Te dane wejściowe są dostępne w cieniowaniu niezależnie od użycia konserwatywnej rasteryzacji, choć Konserwatywna rasteryzacja zmienia swoje zachowanie, aby pokazać tylko wszystkie próbki objęte (lub żaden dla pikseli pomocnika).
Interakcja innerCoverage
Ta funkcja jest wymagana przez warstwę 3 i jest dostępna tylko w warstwie 3. Tworzenie cieniowania w środowisku uruchomieniowym zakończy się niepowodzeniem dla cieniowania, które używają tego trybu, gdy implementacja obsługuje warstwę mniejszą niż Warstwa 3.
Cieniowanie pikseli ma 32-bitową liczbę całkowitą całkowitą systemu generowania wartości dostępnej: InnerCoverage
. Jest to pole bitowe, które ma bit 0 z LSB ustawione na 1 dla danego konserwatywnie rasteryzowanego piksela, tylko wtedy, gdy ten piksel jest gwarantowany całkowicie wewnątrz bieżącego pierwotnego. Wszystkie inne bity rejestru wejściowego muszą być ustawione na 0, gdy bit 0 nie jest ustawiony, ale są niezdefiniowane, gdy bit 0 jest ustawiony na 1 (zasadniczo to pole bitowe reprezentuje wartość logiczną, gdzie wartość false musi być dokładnie 0, ale prawda może być dowolna nieparzysta (tj. bit 0) niezerowa wartość. Te dane wejściowe są używane w przypadku niedocenianych informacji o rasteryzacji konserwatystów. Informuje cieniowanie pikseli, czy bieżący piksel leży całkowicie wewnątrz geometrii.
Musi to uwzględniać błąd przyciągania w rozdzielczości większej lub równej rozdzielczości, w której działa bieżący rysunek. Nie może być wyników fałszywie dodatnich (ustawienie InnerCoverage
bitów, gdy piksel nie jest w pełni objęty żadnym błędem przyciągania w rozdzielczości większej lub równej rozdzielczości, w której działa bieżący rysunek), ale dozwolone są fałszywie ujemne. Podsumowując, implementacja nie może niepoprawnie identyfikować pikseli jako w pełni pokryte, które nie byłyby z pełnymi współrzędnymi wierzchołków zmiennoprzecinkowych w rasteryzatorze.
Piksele, które byłyby w pełni pokryte, jeśli sprzęt używał pełnych współrzędnych wierzchołków zmiennoprzecinkowych, może zostać pominięty tylko wtedy, gdy przecinają obszar niepewności wewnętrznej, który nie może być większy niż rozmiar siatki pod piksela lub 1/256 pikseli w domenie punktu stałego. Powiedział inny sposób, piksele całkowicie w wewnętrznej granicy wewnętrznego regionu niepewności muszą być oznaczone jako w pełni pokryte. Wewnętrzna granica regionu niepewności jest pokazana na poniższym diagramie przez pogrubioną czarną linię kropkowaną. 1/256 pochodzi z reprezentacji współrzędnej współrzędnej rasteryzatora 16.8 punktu stałego, co może ulec zmianie, jeśli precyzja rasteryzatora ulegnie zmianie. Ten region niepewności wystarczy, aby uwzględnić błąd przyciągania spowodowany konwersją współrzędnych wierzchołków zmiennoprzecinkowych do współrzędnych wierzchołków stałych punktów w rasteryzatorze.
Te same wymagania dotyczące 1/512 minimalnego regionu niepewności zdefiniowane w interakcjach reguł rasteryzacji mają zastosowanie również tutaj.
Na poniższym diagramie przedstawiono prawidłowy obszar niepewności wewnętrznej generowany przez zamiatanie kwadratu wokół krawędzi pierwotnych w domenie punktu stałego (tj. wierzchołki zostały kwantyzowane przez reprezentację 16,8 punktu stałego). Wymiary tego kwadratu są oparte na prawidłowym rozmiarze obszaru niepewności wewnętrznej: dla 1/256 piksela kwadrat jest 1/128 piksela szerokości i wysokości. Zielony trójkąt reprezentuje dany pierwotny, pogrubiona linia kropkowana reprezentuje granicę wewnętrznego regionu niepewności, stałe czarne kwadraty reprezentują kwadraty, które są przetoczone wzdłuż krawędzi pierwotnych, a pomarańczowy obszar sprawdzania jest wewnętrznym obszarem niepewności:
Użycie InnerCoverage
nie ma wpływu na to, czy piksel jest konserwatywnie rasteryzowany, tj. użycie jednego z tych trybów InputCoverage
nie ma wpływu na to, które piksele są rasteryzowane, gdy jest włączony tryb rasteryzacji konserwatystów. W związku z tym, gdy InnerCoverage
jest używana, a cieniowanie pikseli przetwarza piksel, który nie jest całkowicie objęty geometrią, jego wartość będzie wynosić 0, ale wywołanie Pixel Shader zostanie zaktualizowane. Różni się to od InputCoverage
wartości 0, co oznacza, że nie zostaną zaktualizowane żadne próbki.
Te dane wejściowe wykluczają się wzajemnie z InputCoverage
: obu nie można użyć.
Aby uzyskać dostęp do InnerCoverage
, musi być zadeklarowany jako pojedynczy składnik z jednego z rejestrów wejściowych modułu Cieniowania pikseli. Tryb interpolacji w deklaracji musi być stały (interpolacja nie ma zastosowania).
Na InnerCoverage
polu bitowym nie ma wpływu testy głębokości/wzornika ani anDed ze stanem SampleMask Rasterizer.
Te dane wejściowe są prawidłowe tylko w trybie konserwatywnej rasteryzacji. Jeśli funkcja Rasteryzacji konserwatywnej nie jest włączona, InnerCoverage
generuje niezdefiniowaną wartość.
Wywołania cieniowania pikseli spowodowane zapotrzebowaniem na piksele pomocnika, ale w przeciwnym razie nie są objęte elementem pierwotnym, muszą mieć InnerCoverage
rejestr ustawiony na wartość 0.
Interakcja interpolacji atrybutów
Tryby interpolacji atrybutów są niezmienione i działają tak samo, jak w przypadku, gdy nie włączono rasteryzacji konserwatystów, gdzie są używane wierzchołki skalowane w skali widoku i stałych punktów. Ponieważ wszystkie próbki w konserwatywnie rasteryzowanym pikselu są traktowane jako objęte, ważne jest, aby wartości były ekstrapolowane, podobnie jak w przypadku użycia trybów interpolacji częstotliwości pikseli w RenderTarget z liczbą próbek większą niż 1. Tryby interpolacji Centroid generują wyniki identyczne z odpowiadającym trybem interpolacji innej niż centroid; pojęcie centroid jest bez znaczenia w tym scenariuszu — w przypadku gdy pokrycie próbki jest tylko pełne lub 0.
Konserwatywna rasteryzacja umożliwia degenerację trójkątów w celu wygenerowania wywołań Cieniowania pikseli, dlatego degenerowane trójkąty muszą używać wartości przypisanych do wierzchołka 0 dla wszystkich wartości interpolowanych.
Interakcja przycinania
Gdy tryb konserwatywnej rasteryzacji jest włączony, a klip głębokości jest wyłączony (gdy DepthClipEnable stan rasteryzatora jest ustawiony na FAŁSZ), może istnieć wariancja interpolacji atrybutów dla segmentów pierwotnego, które znajdują się poza <0 = z <= w zakresie, w zależności od implementacji: albo wartości stałe są używane od punktu, w którym pierwotny przecina odpowiedni płaszczyznę (blisko lub daleko), lub interpolacja atrybutów zachowuje się tak, jakby tryb konserwatywnej rasteryzacji był wyłączony. Jednak zachowanie wartości głębokości jest takie samo niezależnie od trybu rasteryzacji konserwatystów, tj. elementów pierwotnych, które mieszczą się poza zakresem głębokości, muszą nadal mieć wartość najbliższego limitu zakresu głębokości widoku. Zachowanie interpolacji atrybutów wewnątrz <0 = z <= w zakresie musi pozostać niezmienione.
Interakcja z odległością klipu
Odległość klipu jest prawidłowa, gdy jest włączony tryb konserwatywnej rasteryzacji i zachowuje się dla konserwatywnie rasteryzowanego piksela, tak jak to robi, gdy konserwatywna rasteryzacja nie jest włączona ze wszystkimi próbkami pokrytymi.
Należy pamiętać, że Rasteryzacja konserwatywna może spowodować ekstrapolację współrzędnych wierzchołka W, co może spowodować, że W <= 0. Może to spowodować, że implementacje odległości klipu na piksel działają na odległość klipu, która została podzielona przez nieprawidłową wartość W. Implementacje clip distance muszą chronić przed wywołaniem rasteryzacji dla pikseli, gdzie współrzędna wierzchołka W <= 0 (np. z powodu ekstrapolacji w trybie konserwatywnej rasteryzacji).
Interakcja z niezależną rasteryzacją elementu docelowego
Konserwatywny tryb rasteryzacji jest zgodny z rasteryzacją niezależną docelową (TIR). Obowiązują zasady i ograniczenia TIR, zachowując się w przypadku konserwatywnie rasteryzowanego piksela, tak jakby wszystkie próbki zostały objęte.
Interakcja topologii pierwotnej IA
Konserwatywna rasteryzacja nie jest zdefiniowana dla elementów pierwotnych linii ani punktów. W związku z tym topologie pierwotne określające punkty lub linie generują niezdefiniowane zachowanie, jeśli są one przekazywane do jednostki rasteryzatora, gdy jest włączona konserwatywna rasteryzacja.
Walidacja warstwy debugowania sprawdza, czy aplikacje nie używają tych topologii pierwotnych.
Interakcja z zapytaniem
W przypadku konserwatywnie rasteryzowanego piksela zapytania zachowują się tak, jak wtedy, gdy konserwatywna rasteryzacja nie jest włączona, gdy wszystkie próbki są objęte. Na przykład w przypadku konserwatywnie rasteryzowanego piksela D3D12_QUERY_TYPE_OCCLUSION i D3D12_QUERY_TYPE_PIPELINE_STATISTICS (z D3D12_QUERY_TYPE) muszą zachowywać się tak, jak wtedy, gdy konserwatywna rasteryzacja nie jest włączona, gdy wszystkie próbki są objęte.
Wywołania cieniowania pikseli powinny zwiększać się dla każdego konserwatywnie rasteryzowanego piksela w trybie konserwatywnej rasteryzacji.
Interakcja z stanem cull
Wszystkie stany cull są prawidłowe w trybie konserwatywnej rasteryzacji i są zgodne z tymi samymi regułami, co w przypadku, gdy konserwatywna rasteryzacja nie jest włączona.
Porównując konserwatywną rasteryzację w samych rozdzielczościach lub bez włączonej konserwatywnej rasteryzacji, istnieje możliwość, że niektóre prymitywy mogą mieć niedopasowaną twarz (tj. jeden z tyłu, drugi przed obliczem). Aplikacje mogą uniknąć tej niepewności przy użyciu D3D12_CULL_MODE_NONE (z D3D12_CULL_MODE) i nie używają wartości wygenerowanej przez system IsFrontFace
.
Interakcja isFrontFace
Wartość wygenerowana przez system IsFrontFace
jest prawidłowa do użycia w trybie rasteryzacji konserwatywnej i jest zgodna z zachowaniem zdefiniowanym, gdy nie włączono rasteryzacji konserwatywnej.
Interakcja trybów wypełnienia
Jedynym prawidłowym D3D12_FILL_MODE konserwatywnej rasteryzacji jest D3D12_FILL_SOLID, każdy inny tryb wypełnienia jest nieprawidłowym parametrem stanu rasteryzatora.
Wynika to z faktu, że specyfikacja funkcjonalna D3D12 określa, że tryb wypełnienia szkieletu powinien konwertować krawędzie trójkątów na linie i postępować zgodnie z regułami rasteryzacji linii i zachowanie rasteryzacji linii konserwatywnej nie zostało zdefiniowane.
Szczegóły implementacji
Typ rasteryzacji obsługiwany w trybie Direct3D 12 jest czasami określany jako "Przeszacowana konserwatywna rasteryzacja". Istnieje również koncepcja "Niedoceniana konserwatywna rasteryzacja", co oznacza, że tylko piksele, które są w pełni objęte renderowanym elementem pierwotnym, są rasteryzowane. Niedoceniane informacje o rasteryzacji konserwatywnej są dostępne za pośrednictwem cieniowania pikseli za pomocą danych pokrycia wejściowego, a tylko przeszacowana konserwatywna rasteryzacja jest dostępna jako tryb rasteryzowania.
Jeśli jakakolwiek część pierwotnego nakłada się na piksel, ten piksel jest uznawany za pokryty, a następnie jest rasteryzowany. Gdy krawędź lub róg elementu pierwotnego spadnie wzdłuż krawędzi lub rogu piksela, zastosowanie "reguły w lewym górnym rogu" jest specyficzne dla implementacji. Jednak w przypadku implementacji, które obsługują degenerujące trójkąty, trójkąt degeneracyjny wzdłuż krawędzi lub rogu musi obejmować co najmniej jeden piksel.
Konserwatywne implementacje rasteryzacji mogą się różnić w zależności od sprzętu i generują fałszywie dodatnie wyniki, co oznacza, że mogą niepoprawnie zdecydować, że piksele są objęte. Może się to zdarzyć z powodu szczegółów specyficznych dla implementacji, takich jak pierwotne błędy rosnące lub przyciąganie z natury współrzędnych wierzchołków stałych punktów używanych w rasteryzacji. Przyczyna wyników fałszywie dodatnich (w odniesieniu do współrzędnych wierzchołków o stałym punkcie) jest prawidłowa, ponieważ wymagana jest pewna ilość wyników fałszywie dodatnich, aby umożliwić wykonanie oceny pokrycia względem wierzchołków po przycięciu (tj. współrzędnych wierzchołków wierzchołków, które zostały przekonwertowane z punktu zmiennoprzecinkowego na 16,8 punktu stałego używanego w rasteryzatorze), ale honorowanie pokrycia generowanego przez oryginalne współrzędne wierzchołków zmiennoprzecinkowych.
Konserwatywne implementacje rasteryzacji nie generują fałszywych wartości ujemnych w odniesieniu do współrzędnych wierzchołków zmiennoprzecinkowych dla niegenerowanych elementów pierwotnych po przyciąganiu: jeśli którakolwiek część pierwotnego nakłada się na dowolną część piksela, to ten piksel jest rasteryzowany.
Trójkąty, które są degenerowane (zduplikowane indeksy w buforze indeksu lub collinear w 3D) lub stają się degenerowane po konwersji o stałym punkcie (zderzające się wierzchołki w rasteryzatorze), mogą lub nie mogą być usuwane; oba są prawidłowymi zachowaniami. Degenerowane trójkąty muszą być traktowane jako tylne, więc jeśli określone zachowanie jest wymagane przez aplikację, może użyć uboju z tyłu lub przetestować na przedniej powierzchni. Degenerowane trójkąty używają wartości przypisanych do wierzchołka 0 dla wszystkich wartości interpolowanych.
Oprócz możliwości, że sprzęt nie obsługuje tej funkcji, istnieją trzy warstwy obsługi sprzętu.
- Warstwa 1 wymusza maksymalną niepewność 1/2 pikseli i nie obsługuje degenerates po przyciąganiu. Jest to dobre w przypadku renderowania kafelków, atlasu tekstur, generowania mapy światła i map cieni podrzędnych pikseli.
- Warstwa 2 zmniejsza maksymalną niepewność do 1/256 i wymaga, aby po przyciąganiu nie wykuły się. Ta warstwa jest przydatna w przypadku przyspieszania algorytmu opartego na procesorze CPU (na przykład voxelization).
- Warstwa 3 utrzymuje maksymalny region niepewności 1/256 i dodaje obsługę wewnętrznego pokrycia danych wejściowych. Wewnętrzne pokrycie danych wejściowych dodaje nową wartość
SV_InnerCoverage
do języka cieniowania wysokiego poziomu (HLSL). Jest to 32-bitowa liczba całkowita skalarna, którą można określić na wejściu do cieniowania pikseli i reprezentuje niedoszacowane informacje o rasteryzacji konserwatywnej (czyli to, czy piksel jest gwarantowany —to-be- w pełni pokryte). Ta warstwa jest przydatna w przypadku uśmiercania okluzji.
Podsumowanie interfejsu API
Następujące metody, struktury, wyliczenia i klasy pomocnicze odwołują się do konserwatywnej rasteryzacji:
- D3D12_RASTERIZER_DESC : struktura trzymająca opis rasterizatora.
- D3D12_CONSERVATIVE_RASTERIZATION_MODE : wartości wyliczenia dla trybu (włączone lub wyłączone).
- D3D12_FEATURE_DATA_D3D12_OPTIONS : struktura przechowując warstwę obsługi.
- D3D12_CONSERVATIVE_RASTERIZATION_TIER : wyliczenie wartości dla każdej warstwy obsługi sprzętu.
- CheckFeatureSupport : metoda uzyskiwania dostępu do obsługiwanych funkcji.
- CD3DX12_RASTERIZER_DESC : klasa pomocnika do tworzenia opisów rasterizatora.
Tematy pokrewne