Sun
18
Nov 2007
Alpha Testing to funkcja przydatna tam, gdzie skomplikowany kształt obiektu określają przezroczyste miejsca na teksturze zamiast układu geometrii - np. do rysowania drzew, trawy itp. Problem w tym, że taki alfa-test trzeba też wykonać przy rysowaniu obiektu do Shadow Mapy, Shadow Mapa jest często w formacie zmiennoprzecinkowym (np. R32F), a przy renderowaniu do tekstur w formatach zmiennoprzecinkowych ustawienia takie jak alfa-blending i alfa-testing często nie działają.
Rozwiązaniem jest napisanie sobie alfa-testu samemu w Pixel Shaderze za pomocą instrukcji anulującej rysowanie piksela - texkill. W języku HLSL odpowiada jej funkcja clip. Przykładowy kod wygląda tak:
// Zadeklarowane jest: out float4 Out : COLOR0 // Wypełniam Out, łącznie z kanałem alfa // Zakładam granicę alfa = 128, czyli 0.5 // Na końcu Pixel Shadera dodaję: clip(Out.a - 0.5);
Jeszcze większy problem z obiektami używającymi alfa-testu mają ci, którzy realizują cienie za pomocą drugiej techniki - Shadow Volume. Z inicjatywy Skalniaka próbowaliśmy niedawno przedyskutować tą sprawę w tym wątku forum.
Comments | #rendering #directx Share