Project update

by

I have been secretly working on the project for a some time now. However, I haven’t written anything about it since I don’t really considered it terribly interesting, I would certainly recommend reading other blogs written by more experienced people. The latest news is that the graphics engine is getting in shape and the editor is getting a decent start with editable terrain and stuff. I have also (finally) updated the math library from using simple scalar math to using SSE intrinsics. I can’t really comment on the speed improvement, since I don’t really measure that at the moment – I mostly write such stuff to learn new techniques.

More interestingly, the engine is now capable of indirect lighting by using the light propagation volumes technique developed by CryTek. It looks quite nice, there is no support for indirect occlusion yet but that is something I will look into in the next couple of days. There are a couple of pitfalls, and direct errors in the paper, one has to be aware of when implementing this algorithm, which BlackHC has written a really nice document about. My implementation is currently running the CryTek sponza scene at 100 fps on my Radeon 5770 in 1920×1080 resolution with some SSAO, screenshots are available below. I have implemented regular shadow mapping, but the resolution is so bad that I don’t use it. I made a half-hearted attempt at ESM and it does look slightly better. However, I need to configure my shadow frustum better because geometry which is too far away from the camera doesn’t cast shadows, and it looks awful.

Indirect illumination

Full illumination

My upcoming project is to implement image space photon mapping, but implement the ray tracing on the GPU instead using ComputeShader. This is going to be a very interesting project, I have done some research on GPU ray tracing and there are quite a few techniques that I’m going to try. There are a lot of recent, excellent papers on the subject of GPU ray tracing. My first step was to write a simple ray tracer for my test scene. This ray tracer just uses brute force to determine the close triangle intersecting in my tiny 72 triangle scene. If this goes well, I will extend to full scene ray tracing and it seems like a two level hierarchy with a BVH and then a kdTree seems to be the best choice but I’ll need to do some testing on that. My tiny ray tracer is practically finished (100% untested), and I’ll start looking at how the initial bounce is going to be implemented. It feels like a pixel shader that writes out to an AppendStructuredBuffer is the way to go.

~Daniel

Advertisement

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


Follow

Get every new post delivered to your Inbox.