Hey guys,
I know, there were a few topics on FXAA, but it didn't help me with my problem, hence the new thread.
The problem is, I don't see any difference between the FXAA and Non-FXAA Render.
Then again I am not passing a non-linear color space texture to the FXAA shader. And not sure how to.
If my understanding is correct Linear color space is the one that is got when you sample a texture (0 to 1 range or 0 - 255 range) where the colors change in a linear fashion.
I am not sure what sRGB is about ?
Currently my texture is in RGBA8 dx format.
According to Fxaa3.11 release by Timothy.
"Applying FXAA to a framebuffer with linear RGB color will look worse.
This is very counter intuitive, but happens to be true in this case.
The reason is because dithering artifacts will be more visiable
in a linear colorspace."
.
The FXAA paper mentions something about using the following in DX9 (which is what i am working on)
// sRGB->linear conversion when fetching from TEX SetSamplerState(sampler, D3DSAMP_SRGBTEXTURE, 1);
// on SetSamplerState(sampler, D3DSAMP_SRGBTEXTURE, 0); // off
// linear->sRGB conversion when writing to ROP SetRenderState(D3DRS_SRGBWRITEENABLE, 1);
// on SetRenderState(D3DRS_SRGBWRITEENABLE, 0); // off
This is what I am doing.
1. Render to texture using D3DRS_SRGBWRITEENABLE = 1, and turn it off after I am done.
When I render this texture, it looks brighter than usual.
2. Render screen quad with this texture using D3DSAMP_SRGBTEXTURE = 1, and turn it off after I am done.
When this texture renders, it looks correct.
But the aliasing still remains. I figured I shouldn't be doing step two because that would turn the non-linear color to linear while sampling.
But doing that results in the texture/scene got from the first step.
I have attached my shaders here.
Any help is greatly appreciated.
P.S, Timothy also mentioned something about pixel offset being different on dx11 w.r.t dx9 by 0.5 of a pixel.
http://timothylottes.blogspot.com/2011/07/fxaa-311-released.html
Thanks a lot !
Jerry
[attachment=10322:FXAA.zip]
FXAA and Color Space
The problem is, I don't see any difference between the FXAA and Non-FXAA Render.
Could you post some comparison screenshots ?
Oh I forgot, about the pics.
I have an abstraction going on for directx9 and opengl2.
So the same window in the pics support both of them.
I got hold of a glsl shader for FXAA and integrated to the opengl side.
(am not sure what version it is, but it appears to be from the same source)
Seems to work. But when I made changes to the directx hlsl with updated inputs, it still doesn't work
I am reattaching all the shaders and the screenshots here.
Note the difference w.r.t the directx screenshots only. The window name holds the name of the renderer
When I use GLSL it works fine.
Thanks
Jerry
I have an abstraction going on for directx9 and opengl2.
So the same window in the pics support both of them.
I got hold of a glsl shader for FXAA and integrated to the opengl side.
(am not sure what version it is, but it appears to be from the same source)
Seems to work. But when I made changes to the directx hlsl with updated inputs, it still doesn't work
I am reattaching all the shaders and the screenshots here.
Note the difference w.r.t the directx screenshots only. The window name holds the name of the renderer
When I use GLSL it works fine.
Thanks
Jerry
The major difference between DX9 and OGL2 is, that DX9 is, well, DX9, but OGL2 can be pimped by using extensions. The FXAA shaders use a lot of extensions, I would test it on a higher DX version, maybe the FXAA implemenation has reached its limits on DX9, or you should choose a preset better suited for DX9.
The problem with DX9 is that it has the "half pixel offset problem", which will wreak havoc with any kind of post-processing shader.
The official description of the problem is here:
http://msdn.microsof...0(v=vs.85).aspx
In the versions of FXAA that I've used, it expects you to account for this flaw in DX9 yourself and EITHER shift your full-screen vertices OR texture coordinates by half a pixel as described in the MSDN link, so that the pixel shader receives the same interpolated values as it would in GL/DX10/DX11.
The official description of the problem is here:
http://msdn.microsof...0(v=vs.85).aspx
In the versions of FXAA that I've used, it expects you to account for this flaw in DX9 yourself and EITHER shift your full-screen vertices OR texture coordinates by half a pixel as described in the MSDN link, so that the pixel shader receives the same interpolated values as it would in GL/DX10/DX11.
If you want to understand the linear color space, try to google "gamma correction". Generally speaking, to the monitor, the relationship between luminance and color is not linear, but a Exponential curve. So in order to output the linear color, texture color was also been precorrected by an exponent value. So although you can see the correct color on the screen,the color you used before is nonlinear. This can cause problems in some algrithm,but in my work,the FXAA use nonlinear color space works well.
Hey Thanks guys.
Like Hodgman said, My initial setting was 1/2 texel size off on DX9.
After fixing the issue the textures still renders the old jaggy pattern
Initially I noticed some difference in the image when rendering to texture vs normal rendering in the case of DX9.
Now, both look the same. I am assuming the 1/2 texel problem is accounted for.
@dragon.R
I used this article to understand the color space stuff
http://filmicgames.com/archives/299
Tried to use the color space as in the Fxaa_3.11 header. But still no dice.
Reattaching updated shaders.
lol... Maybe I should go for SMAA
https://vimeo.com/31247769
Fxaa3 (lower quality 0.62 ms) vs SMAA Tx2 (higher quality 1.32 ms)
Hard to decide
Thanks guys
Jerry
Like Hodgman said, My initial setting was 1/2 texel size off on DX9.
After fixing the issue the textures still renders the old jaggy pattern
Initially I noticed some difference in the image when rendering to texture vs normal rendering in the case of DX9.
Now, both look the same. I am assuming the 1/2 texel problem is accounted for.
@dragon.R
I used this article to understand the color space stuff
http://filmicgames.com/archives/299
Tried to use the color space as in the Fxaa_3.11 header. But still no dice.
Reattaching updated shaders.
lol... Maybe I should go for SMAA
https://vimeo.com/31247769
Fxaa3 (lower quality 0.62 ms) vs SMAA Tx2 (higher quality 1.32 ms)
Hard to decide
Thanks guys
Jerry
I`ve read your code,you need to #define FXAA_GREEN_AS_LUMA 1,otherwise it will take the alpha of tex color as luminance,as your input alpha is always 1,nothing will be changed. And your parameters seemed to have some problems,try to read the annotation and check them.
Managed to port glsl code to hlsl for FXAA.
Seems to work.
Attaching it for people who need it. It looks simpler than the Fxaa 3.11. I am guessing its the old version. But it performs better.
Tried with and without Luma. Works in both cases.
On DX9 you need to do color space conversion, in order to use it correctly.
I do something like this:
Stage 0
Render Main Scene to texture
- Texture Read convert - SRGB to Linear
- Texture Write convert - None
Stage 0.5 (Optional, if filling alpha with luma)
Render Texture to Texture
- Texture Read convert - None
- Texture Write convert - None
Stage 1
Render Texture to Monitor using FXAA
- Texture Read convert - None
- Texture Write convert - Linear to SRGB (as Monitor requires SRGB format)
Hopefully that clarifies some stuff.
For now this works.
@Dragon. Couldn't get the Fxaa 3.11 to work though. I rechecked all the variables, I am not sure whats the problem. if you find something wrong, please tell me. Attaching the updated old one again. Attaching some part of the code, if someone wants to see.
I have a question
FPS drops as follows (@1080p):
- Normal Render (1500 FPS)
- Render To Texture (1000 FPS)
- Texture To Scene with FXAA (500 FPS)
Is that normal ?
Jerry
Seems to work.
Attaching it for people who need it. It looks simpler than the Fxaa 3.11. I am guessing its the old version. But it performs better.
Tried with and without Luma. Works in both cases.
On DX9 you need to do color space conversion, in order to use it correctly.
I do something like this:
Stage 0
Render Main Scene to texture
- Texture Read convert - SRGB to Linear
- Texture Write convert - None
Stage 0.5 (Optional, if filling alpha with luma)
Render Texture to Texture
- Texture Read convert - None
- Texture Write convert - None
Stage 1
Render Texture to Monitor using FXAA
- Texture Read convert - None
- Texture Write convert - Linear to SRGB (as Monitor requires SRGB format)
Hopefully that clarifies some stuff.
For now this works.
@Dragon. Couldn't get the Fxaa 3.11 to work though. I rechecked all the variables, I am not sure whats the problem. if you find something wrong, please tell me. Attaching the updated old one again. Attaching some part of the code, if someone wants to see.
I have a question
FPS drops as follows (@1080p):
- Normal Render (1500 FPS)
- Render To Texture (1000 FPS)
- Texture To Scene with FXAA (500 FPS)
Is that normal ?
Jerry
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement