Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
I prefer traditional AA. I haven't used FXAA, but I have used MLAA, and I find it to blur my games in a negative manner... not to mention making text look horrible. It all comes down to loss of data in my opinion. Less raw data = less image quality. Applying algorithms and filters to predict what is supposed to be there just isn't accurate, and as the complexity and fidelity of game engines increases, AA methods will look more and more incorrect. I enjoy my 6870x2 setup but not MLAA.
p.s. when did the EDIT button get added !?
I tested the FXAA in DNF and I was less than impressed. Blurred odd spots of the screen and I still had a lot of aliasing issues.
There's a lot of back-and-forth bullshit when it comes to AA. FXAA, I think, is the first step towards companies considering what's best for gamers instead of what's best for themselves. Instead of trying to make the other guy look bad by using algorithms they know make their competitor's cards struggle, they're trying to give US (gamers) the best possible solution.
Imagine, for a second, how awesome our world would be if they worked together on a few key technologies... ok I'm going to stop dreaming now.
The problem is it has to be implemented, that is additional development time which is expensive.
Already been done for the most part. Someone has already ported the FXAA shader to be used in ENBseries. It works in GTA4. That's right, you can have FXAA in GTA4, which has zero support for MSAA.
Look ma, no jaggies!
This code snippet can be pasted into ENBseries' effect.txt to add the shader effect.
Code:/*============================================================================ FXAA3 QUALITY - PC NVIDIA FXAA III.8 by TIMOTHY LOTTES ============================================================================*/ #define FXAA_LINEAR 0 #define FXAA_QUALITY__EDGE_THRESHOLD (1.0/16.0) #define FXAA_QUALITY__EDGE_THRESHOLD_MIN (1.0/16.0) #define FXAA_QUALITY__SUBPIX_CAP (3.0/4.0) #define FXAA_QUALITY__SUBPIX_TRIM (1.0/4.0) #define FXAA_QUALITY__SUBPIX_TRIM_SCALE (1.0/(1.0 - FXAA_QUALITY__SUBPIX_TRIM)) #define FXAA_SEARCH_STEPS 8 #define FXAA_SEARCH_THRESHOLD (1.0/4.0) float4 FxaaPixelShader(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR { #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0)) #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0)) float2 pos = IN.txcoord.xy; float2 rcpFrame = float2(1/ScreenSize, ScreenScaleY/ScreenSize); float4 rcpFrameOpt = float4(2/ScreenSize, 2*ScreenScaleY/ScreenSize, 0.5/ScreenSize, 0.5*ScreenScaleY/ScreenSize); float lumaN = dot(FxaaTexOff(SamplerColor, pos.xy, float2(0, -1), rcpFrame.xy).xyz, float3(0.299, 0.587, 0.114)); float lumaW = dot(FxaaTexOff(SamplerColor, pos.xy, float2(-1, 0), rcpFrame.xy).xyz, float3(0.299, 0.587, 0.114)); float4 rgbyM; rgbyM.xyz = FxaaTexTop(SamplerColor, pos.xy).xyz; rgbyM.w = dot(rgbyM.xyz, float3(0.299, 0.587, 0.114)); float lumaE = dot(FxaaTexOff(SamplerColor, pos.xy, float2( 1, 0), rcpFrame.xy).xyz, float3(0.299, 0.587, 0.114)); float lumaS = dot(FxaaTexOff(SamplerColor, pos.xy, float2( 0, 1), rcpFrame.xy).xyz, float3(0.299, 0.587, 0.114)); float lumaM = rgbyM.w; float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE))); float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE))); float range = rangeMax - rangeMin; if(range < max(FXAA_QUALITY__EDGE_THRESHOLD_MIN, rangeMax * FXAA_QUALITY__EDGE_THRESHOLD)) return rgbyM; float lumaNW = dot(FxaaTexOff(SamplerColor, pos.xy, float2(-1,-1), rcpFrame.xy).xyz, float3(0.299, 0.587, 0.114)); float lumaNE = dot(FxaaTexOff(SamplerColor, pos.xy, float2( 1,-1), rcpFrame.xy).xyz, float3(0.299, 0.587, 0.114)); float lumaSW = dot(FxaaTexOff(SamplerColor, pos.xy, float2(-1, 1), rcpFrame.xy).xyz, float3(0.299, 0.587, 0.114)); float lumaSE = dot(FxaaTexOff(SamplerColor, pos.xy, float2( 1, 1), rcpFrame.xy).xyz, float3(0.299, 0.587, 0.114)); float lumaL = (lumaN + lumaW + lumaE + lumaS) * 0.25; float rangeL = abs(lumaL - lumaM); float blendL = saturate((rangeL / range) - FXAA_QUALITY__SUBPIX_TRIM) * FXAA_QUALITY__SUBPIX_TRIM_SCALE; blendL = min(FXAA_QUALITY__SUBPIX_CAP, blendL); float edgeVert = abs(lumaNW + (-2.0 * lumaN) + lumaNE) + 2.0 * abs(lumaW + (-2.0 * lumaM) + lumaE ) + abs(lumaSW + (-2.0 * lumaS) + lumaSE); float edgeHorz = abs(lumaNW + (-2.0 * lumaW) + lumaSW) + 2.0 * abs(lumaN + (-2.0 * lumaM) + lumaS ) + abs(lumaNE + (-2.0 * lumaE) + lumaSE); bool horzSpan = edgeHorz >= edgeVert; float lengthSign = horzSpan ? -rcpFrame.y : -rcpFrame.x; if(!horzSpan) lumaN = lumaW; if(!horzSpan) lumaS = lumaE; float gradientN = abs(lumaN - lumaM); float gradientS = abs(lumaS - lumaM); lumaN = (lumaN + lumaM) * 0.5; lumaS = (lumaS + lumaM) * 0.5; bool pairN = gradientN >= gradientS; if(!pairN) lumaN = lumaS; if(!pairN) gradientN = gradientS; if(!pairN) lengthSign *= -1.0; float2 posN; posN.x = pos.x + (horzSpan ? 0.0 : lengthSign * 0.5); posN.y = pos.y + (horzSpan ? lengthSign * 0.5 : 0.0); gradientN *= FXAA_SEARCH_THRESHOLD; float2 posP = posN; float2 offNP = horzSpan ? float2(rcpFrame.x, 0.0) : float2(0.0f, rcpFrame.y); float lumaEndN; float lumaEndP; bool doneN = false; bool doneP = false; posN += offNP * (-1.5); posP += offNP * ( 1.5); for(int i = 0; i < FXAA_SEARCH_STEPS; i++) { lumaEndN = dot(FxaaTexTop(SamplerColor, posN.xy).xyz, float3(0.299, 0.587, 0.114)); lumaEndP = dot(FxaaTexTop(SamplerColor, posP.xy).xyz, float3(0.299, 0.587, 0.114)); bool doneN2 = abs(lumaEndN - lumaN) >= gradientN; bool doneP2 = abs(lumaEndP - lumaN) >= gradientN; if(doneN2 && !doneN) posN += offNP; if(doneP2 && !doneP) posP -= offNP; if(doneN2 && doneP2) break; doneN = doneN2; doneP = doneP2; if(!doneN) posN -= offNP * 2.0; if(!doneP) posP += offNP * 2.0; } float dstN = horzSpan ? pos.x - posN.x : pos.y - posN.y; float dstP = horzSpan ? posP.x - pos.x : posP.y - pos.y; bool directionN = dstN < dstP; lumaEndN = directionN ? lumaEndN : lumaEndP; if(((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0)) lengthSign = 0.0; float spanLength = (dstP + dstN); dstN = directionN ? dstN : dstP; float subPixelOffset = 0.5 + (dstN * (-1.0/spanLength)); subPixelOffset += blendL * (1.0/8.0); subPixelOffset *= lengthSign; float3 rgbF = FxaaTexTop(SamplerColor, float2(pos.x + (horzSpan ? 0.0 : subPixelOffset), pos.y + (horzSpan ? subPixelOffset : 0.0))).xyz; #if (FXAA_LINEAR == 1) lumaL *= lumaL; #endif float lumaF = dot(rgbF, float3(0.299, 0.587, 0.114)) + (1.0/(65536.0*256.0)); float lumaB = lerp(lumaF, lumaL, blendL); float scale = min(4.0, lumaB/lumaF); rgbF *= scale; return float4(rgbF, lumaM); }
Is that GTA 4 image downsampled from a crazy high resolution? Looking at the buildings to the side, and the crane in the background, it is hard to believe it is that clean from just FXAA.
look closer, the right half of the trunk below the mercedez logo is aliased & the diagonal pole holding the traffic light is also aliased & weird looking due to the depth blur cutting corners (not full rez, additional blur) so it can be fast enough
also why would you think fxaa was doing the depth blur's work
Is that GTA 4 image downsampled from a crazy high resolution? Looking at the buildings to the side, and the crane in the background, it is hard to believe it is that clean from just FXAA.
Anyone that uses PCSX2 for some PS2 emulation goodness may want to give the latest nightly builds a try too, because they've implement FXAA in it as an option now. Page-Up toggles it on and off.
If you can run anything at 4x internal resolution though I'm not sure you'll see much difference.
The problem is it has to be implemented, that is additional development time which is expensive.
Battlefield 3 Alpha has built in FXAA. I think the setting was set on low because it looks like 2X MSAA. I'm getting 45fps outdoors with FXAA and 30 with MLAA on the 6950. So I think FXAA is the way to go with its' open source-ness.
Shogun 2 already shipped with MLAA in-game. Other titles will as well.There's already an open source GPU implementation of MLAA
Note, the FEAR 3 improvements come from improving the performance of the FXAA shader.You should revisit MLAA performance with the new drivers.
I've messing with the FXAA injector hack on several games, and so far I love it. Decent quality aa at almost no performance loss, even on 5976x1080. Helped on Just Cause 2, at least!
MLAA requires an AMD Radeon HD 5xxx or 6xxx series card to run. Does FXAA have the same limitation?
I'm really hoping SWTOR has an implementation of this!
MLAA requires an AMD Radeon HD 5xxx or 6xxx series card to run. Does FXAA have the same limitation?
I'm really hoping SWTOR has an implementation of this!
FXAA is independant
I can't wait to try this with my Radeon 4870 then!
Improves performance:
Up to 30% when AMD’s Morphological Anti-Aliasing (MLAA) is enabled through the Catalyst Control Center on AMD Radeon HD 6000 and AMD Radeon HD 5000 series of products
It'd be nice if this was integrated in the Nvidia drivers by default.
MLAA requires an AMD Radeon HD 5xxx or 6xxx series card to run. Does FXAA have the same limitation?
I'm really hoping SWTOR has an implementation of this!
I played Deus Ex 3 leak and the FXAA looked really good. Also on the new 11.8 beta driver for AMD:
I guess FXAA forced AMD to step up on their game, everyone wins