• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
jerrinx

DX11
FXAA and Color Space

9 posts in this topic

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.
[b]"Applying FXAA to a framebuffer with linear RGB color will look worse.[/b]
[b]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."[/b]
.

The FXAA paper mentions something about using the following in DX9 (which is what i am working on)
[b]// 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[/b]

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]
0

Share this post


Link to post
Share on other sites
[quote name='jerrinx' timestamp='1343587522' post='4964290']
The problem is, I don't see any difference between the FXAA and Non-FXAA Render.
[/quote]
Could you post some comparison screenshots ?
2

Share this post


Link to post
Share on other sites
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 [img]http://public.gamedev.net//public/style_emoticons/default/sad.png[/img]

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 Edited by jerrinx
0

Share this post


Link to post
Share on other sites
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.
0

Share this post


Link to post
Share on other sites
The problem with DX9 is that it has the "[url="http://www.google.com/search?q=dx9%20half%20pixel%20offset%20problem"]half pixel offset problem[/url]", which will wreak havoc with any kind of post-processing shader.

The official description of the problem is here:
[url="http://msdn.microsoft.com/en-us/library/windows/desktop/bb219690(v=vs.85).aspx"]http://msdn.microsof...0(v=vs.85).aspx[/url]

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. Edited by Hodgman
2

Share this post


Link to post
Share on other sites
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.
1

Share this post


Link to post
Share on other sites
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 [img]http://public.gamedev.net//public/style_emoticons/default/sad.png[/img]

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
[url="http://filmicgames.com/archives/299"]http://filmicgames.com/archives/299[/url]

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 [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]
[url="https://vimeo.com/31247769"]https://vimeo.com/31247769[/url]
Fxaa3 (lower quality 0.62 ms) vs SMAA Tx2 (higher quality 1.32 ms)
Hard to decide

Thanks guys
Jerry Edited by jerrinx
1

Share this post


Link to post
Share on other sites
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.
1

Share this post


Link to post
Share on other sites
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 Edited by jerrinx
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • By YixunLiu
      Hi,
      I have a surface mesh and I want to use a cone to cut a hole on the surface mesh.
      Anybody know a fast method to calculate the intersected boundary of these two geometries?
       
      Thanks.
       
      YL
       
    • By hiya83
      Hi, I tried searching for this but either I failed or couldn't find anything. I know there's D11/D12 interop and there are extensions for GL/D11 (though not very efficient). I was wondering if there's any Vulkan/D11 or Vulkan/D12 interop?
      Thanks!
    • By lonewolff
      Hi Guys,
      I am just wondering if it is possible to acquire the address of the backbuffer if an API (based on DX11) only exposes the 'device' and 'context' pointers?
      Any advice would be greatly appreciated
    • By MarcusAseth
      bool InitDirect3D::Init() { if (!D3DApp::Init()) { return false; } //Additional Initialization //Disable Alt+Enter Fullscreen Toggle shortkey IDXGIFactory* factory; CreateDXGIFactory(__uuidof(IDXGIFactory), reinterpret_cast<void**>(&factory)); factory->MakeWindowAssociation(mhWindow, DXGI_MWA_NO_WINDOW_CHANGES); factory->Release(); return true; }  
      As stated on the title and displayed on the code above, regardless of it Alt+Enter still takes effect...
      I recall something from the book during the swapChain creation, where in order to create it one has to use the same factory used to create the ID3D11Device, therefore I tested and indeed using that same factory indeed it work.
      How is that one particular factory related to my window and how come the MakeWindowAssociation won't take effect with a newly created factory?
      Also what's even the point of being able to create this Factories if they won't work,?(except from that one associated with the ID3D11Device) 
    • By ProfL
      Can anyone recommend a wrapper for Direct3D 11 that is similarly simple to use as SFML? I don't need all the image formats etc. BUT I want a simple way to open a window, allocate a texture, buffer, shader.
  • Popular Now