Request for Advise - Smoothing Line Edges and Otherwise improving Quality ...

Started by
8 comments, last by tmason 9 years, 11 months ago

Hello,

So I finally got my project on the Oculus Rift! It was a good feeling but now it's a matter of drastically improving display quality.

One of the most striking things I have noticed is that line edges are not really smooth at all. Below is a picture.

How can I have crisp (or crisper) edges?

Thank you for your time.

Line_Smoothing_Help.png

Advertisement
Looks like you need some form of anti-aliasing.

Initially, I'd try turning on MSAA, assuming that your hardware/driver support multisample framebuffers (recent cards/drivers should be fine). If that is insufficient (or doesn't work), there are a variety of more complicated/nuanced approaches to anti-aliasing which would be worth looking into.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Looks like you need some form of anti-aliasing.

Initially, I'd try turning on MSAA, assuming that your hardware/driver support multisample framebuffers (recent cards/drivers should be fine). If that is insufficient (or doesn't work), there are a variety of more complicated/nuanced approaches to anti-aliasing which would be worth looking into.

Thank you so much for your quick reply.

The MSAA hardware anti-aliasing isn't something easy to implement, is it?

Here is my code now for my framebuffer:


glGenFramebuffers(1, &g_OculusRiftFrameBufferObject_ID);
	glBindFramebuffer(GL_FRAMEBUFFER, g_OculusRiftFrameBufferObject_ID);
	glGenTextures(1, &g_OculusRiftTexture_ID);
	glBindTexture(GL_TEXTURE_2D, g_OculusRiftTexture_ID);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, l_TextureSize.w, l_TextureSize.h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	glGenRenderbuffers(1, &g_OculusRiftDepthBufferObject_ID);
	glBindRenderbuffer(GL_RENDERBUFFER, g_OculusRiftDepthBufferObject_ID);
	glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, l_TextureSize.w, l_TextureSize.h);
	glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, g_OculusRiftDepthBufferObject_ID);
	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, g_OculusRiftTexture_ID, 0);

	GLenum l_GLDrawBuffers[1] = { GL_COLOR_ATTACHMENT0 };
	glDrawBuffers(1, l_GLDrawBuffers); // "1" is the size of DrawBuffers

	g_DrawBufferStatusCheck_ENUM = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);

	if (g_DrawBufferStatusCheck_ENUM != GL_FRAMEBUFFER_COMPLETE)
	{
		glBindRenderbuffer(GL_RENDERBUFFER, 0);
		glBindTexture(GL_TEXTURE_2D, 0);
		glBindFramebuffer(GL_FRAMEBUFFER, 0);
		return false;
	}
	else
	{}

GL_EXT_framebuffer_multisample. The extension was moved into the Core library of OpenGL from version 3.0 onwards.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

GL_EXT_framebuffer_multisample. The extension was moved into the Core library of OpenGL from version 3.0 onwards.


Ok, thank you. I will give this a shot.
You could also give FXAA a try, pure post-processing-based AA in a shader:
http://www.geeks3d.com/20110405/fxaa-fast-approximate-anti-aliasing-demo-glsl-opengl-test-radeon-geforce/

You could also give FXAA a try, pure post-processing-based AA in a shader:
http://www.geeks3d.com/20110405/fxaa-fast-approximate-anti-aliasing-demo-glsl-opengl-test-radeon-geforce/

Thank you, I am giving both a try; I ran into a bit of trouble but I will elaborate in a separate post.

Thanks again.

Thanks for the help folks!

Success:

Line_Smoothing_Success.png

That looks much better. Is that FXAA or multisample?

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

That looks much better. Is that FXAA or multisample?

4x Multisample...

This topic is closed to new replies.

Advertisement