02
Dec
09

Engine Update

Here’s an update on the graphics engine I am building for my last class at DigiPen. Model loading, MTR managing, camera controls, texture managing and fragment/vertex/geometry shaders are all handled by yours truly. One focus I had on this particular engine was setting up a fast/user-friendly post processing system. I’v implemented a system of string-recognized render buffers and post processing fragment shaders that can be chained along to stack post-processing effects until you’ve reach your final picture. Instead of drudging through having to bind FBOs, igniting shader programs and sending uniforms etc., this allows the user to simply say… PostProcess( "MyScene", "ToneMapShader", "MyHDRScene" );. Where “MyScene” is the name of the render target you want to be shaded using “ToneMapShader” and then store the output into “MyHDRScene”. All that is required is an offline step where the user verifies all that is needed by the shader.
Also by going through my system, instructions to GPU are saved by only updating the graphics pipeline when necessary. I can keep track of the current GPU state and thus save time such that if someone wanted to use the same texture sampler on TEXTURE2′s unit there’s no need to re-bind the texture thus saving communication time on the slow bus between CPU and GPU. This can save loads of time and any good graphics engineer needs to be weary of GPU state changes; especially changing shader programs which my system also handles.
This demonstration is ready to run on an Nvidia 6600GT.

Extra Features in Demo:
Beside self-shadowing parallax, I was able to get global shadow maps to work with the parallax occlusion. Because parallax mapping actually takes place on flat geometry, depth comparisons with the light buffer will conclude that something parallaxed is in shadow when it really isn’t; this causes “floating” shadows where no matter how steep the parallax-occlusion becomes, the shadow test still determines shade with the flat piece of geometry. I modified the G-Buffer such that when an object is using parallax-mapping, I alter it’s world-space position in the G-Buffer. This is easy to do via shaders by simply moving the world-space position along the object’s normal*parallax_value.

Deferred Lighting
Steep Parallax Mapping with Soft Shadows
Variance Shadow Maps
Screen Space Motion Blur

Advertisement

2 Responses to “Engine Update”


  1. 1 alex
    December 2, 2009 at 10:11 pm

    looking really sharp…

  2. 2 Paul
    December 16, 2009 at 3:34 pm

    Daaayaaamn duuuude!!! This shit’s looking fucking awesome. Nice job!


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s


calendar

December 2009
M T W T F S S
« Nov   Mar »
 123456
78910111213
14151617181920
21222324252627
28293031  

Follow

Get every new post delivered to your Inbox.