Alpha Testing kontra Shadow Mapping

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

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

Comments

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2019