Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- 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 konserwatywną rasteryzację.
Konserwatywna rasteryzacja jest przydatna w wielu sytuacjach, w tym w celu pewności w wykrywaniu kolizji, wykrywaniu okluzji i wykrywaniu widoczności.
Na przykład na poniższej ilustracji przedstawiono zielony trójkąt renderowany przy użyciu konserwatywnej rasteryzacji. Brązowy obszar jest znany jako "region niepewności" - region, w którym błędy zaokrąglania i inne problemy dodają pewną niepewność do dokładnych wymiarów trójkąta. Czerwone trójkąty w każdym wierzchołku pokazują sposób obliczania regionu niepewności. Duże szare kwadraty pokazują piksele, które zostaną renderowane. Różowe kwadraty pokazują piksele renderowane przy użyciu "lewej górnej reguły", która wchodzi w grę, gdy 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
Aby uzyskać wiele szczegółowych informacji na temat interakcji konserwatywnej rasteryzacji z potokiem grafiki, zobacz D3D12 Konserwatywna rasteryzacja.
Szczegóły implementacji
Typ rasteryzacji obsługiwany w trybie Direct3D 12 jest czasami określany jako "przeszacowany konserwatywny rasteryzacja". Istnieje również pojęcie "niedocenianej konserwatywnej rasteryzacji", co oznacza, że tylko piksele, które są w pełni objęte renderowanym elementem pierwotnym, są rasteryzowane. Niedoceniane konserwatywne informacje rasteryzacji są dostępne za pośrednictwem cieniowania pikseli za pomocą danych pokrycia wejściowego, a tylko przeszacowane konserwatywne rasteryzacja jest dostępna jako tryb rasteryzacji.
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 ujemnych wartości względem 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 obsługuje regiony niepewności 1/2 pikseli i nie są degenerację 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 dodaje degenerację po przyciąganiu i 1/256 regionów niepewności. Dodaje również obsługę przyspieszania algorytmów opartych na procesorze CPU (na przykład voxelization).
- Warstwa 3 dodaje regiony niepewności 1/512, pokrycie danych wejściowych wewnętrznych i obsługuje uśmiercanie okluzji. Pokrycie danych wejściowych dodaje nową wartość
SV_InnerCoveragedo 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 konserwatywne informacje rasteryzacji (czyli to, czy piksel jest gwarantowany -to-be-w pełni pokryte).
Podsumowanie interfejsu API
Następujące metody, struktury, wyliczenia i klasy pomocnicze odwołują się do konserwatywnej rasteryzacji:
- D3D11_RASTERIZER_DESC2 : struktura zawierająca opis rasterizatora, zwracając uwagi na klasę pomocnika CD3D12_RASTERIZER_DESC2 do tworzenia opisów rasterizatora.
- D3D11_CONSERVATIVE_RASTERIZATION_MODE : wartości wyliczeniowe dla trybu (włączone lub wyłączone).
- D3D11_FEATURE_DATA_D3D11_OPTIONS2: struktura przechowującą warstwę obsługi.
- D3D11_CONSERVATIVE_RASTERIZATION_TIER : wyliczenie wartości dla każdej warstwy obsługi przez sprzęt.
- ID3D11Device::CheckFeatureSupport : metoda uzyskiwania dostępu do obsługiwanych funkcji.
Tematy pokrewne
- funkcje Direct3D 11.3