Úgy hozta az Erő, hogy le kellett implementálnom a Crysis 2-ben is alkalmazott SMAA-t. Mint tudjuk, az MSAA (multisample anti-aliasing) nem működik jól a deferred renderinggel, ezért találták ki azt, hogy akkor egy postprocess lépésben simítsuk el az éleket. Ez a technika annyira aktuális, hogy az NVidia driverekben hardveresen le is van implementálva (FXAA), bár a minösége megkérdőjelezhető, ugyanis mindent antialiasol, azt is amit nem kéne.
Na de mi is ez a SMAA? A hasonló módszerekhez képest megpróbálja a lehető legpontosabban rekonstruálni az éleket, és kiszámolni a lefedettséget (coverage). Sőt, ezt úgy csinálja, hogy a már élsimított képet nem rontja le.
Az 1x-es SMAA egy sima postprocess technika, azaz kér egy képet és élsimítja, semmi egyéb nem kell neki. Átlagos képekre teljesen jól működik ez is, viszont ha már vonalakat is kell élsimítani, akkor problémái vannak. Shader Model 3 mindenképpen kell neki, bár OpenGL-ben meg lehet buherálni, hogy GLSL 1.2-vel is menjen, de úgy nem ad olyan szép eredményt (és kell neki egy bemelegedési idő, amíg kiforgatja a ciklusokat).
A minőséget tovább lehet javítani a temporal supersampling nevű módszerrel, ami annyiból áll, hogy az előző frame eredményét felhasználja az aktuálishoz. Ehhez a jelenetet kicsit fel kell rázni (egyszer jobbra egyszer balra), majd az ezekből kapott élsimított képeket összeblendelni a pixelsebesség függvényében. Huhh. Azaz kell hozzá velocity textúra (amit amúgyis megcsinálnál mondjuk a motion blur miatt) és ajánlott a multiple render target support is.
Igen meghökkentő, hogy az így kapott SMAA T2x technika erősen közelíti a 16-os MSAA-t!! (bal: MSAA, jobb: SMAA)
És itt még nincs is vége a bulinak, ugyanis ez még tovább javítható egy 2x-es MSAA-val, amit értelemszerűen nem csináltam már meg, így kapva az SMAA 4x-et.