Posts

Showing posts from 2016

Global Illumination -- which technique should you use?

Image
Global illumination is a process that simulates indirect lighting. In the real world, light bounces around. Rays of light bounce off of walls and keep bouncing, and they don't stop. Unless we can simulate this, we'll never be able to render realistic lighting. However, due to the limitations of our present-day technology, we don't even have an efficient algorithm that simulates two bounces of light. I mean, yeah, we've got Global Illumination with Voxel Cone Tracing , but it lags a lot on mid-end devices and it isn't exactly an ideal solution for games that are targeted at consoles and mid-end computers. Ambient Occlusion techniques (SSAO being the most popular one) aren't considered to be part of Global Illumination, although they're often lumped together. Recently we reviewed SSDO (screen-space directional occlusion), which efficiently simulates a single bounce of light. We also have Light Propagation Volumes (LPV) which is used in some of the most popul

Screen Space Directional Occlusion -- Is it worth it?

Image
I don't pretend to be some sort of expert on computer graphics, but I just thought I'd share a couple of my thoughts on screen-space directional occlusion (SSDO). This is a (rather old) successor to the ever-popular SSAO (screen-space ambient occlusion), and SSDO has a couple of improvements. I recently read the research paper and tried to wrap my 14-year-old mind around it (to no avail). I'm still trying to understand it, but I think I know enough to tell if it's worth moving from SSAO to SSDO. The latest version of CryEngine still lists SSDO as one of the main features on their website. I think that's more than enough reason to consider implementing SSDO. But what improvements does SSDO bring? Why should you prefer it over SSAO? 1) It adds directional shadows and indirect colour bleeding 2) Does not introduce any new artifacts 3) It's done in screen-space, so it doesn't depend on the number of polygons in the scene. Here's a description of SSDO

Screen-Space Ambient Occlusion -- VICTORY!

Image
Yesterday, I managed to implement screen-space ambient occlusion. Next up: global illumination with voxel cone tracing. Or maybe screen-space directional occlusion. Nah, I think it'll be the former. No. of samples: 64 (a little overkill, but whatever) Radius: 3 Hey, there, dragon! You lookin' pretty nice today! Oh, yeah, and I used John Chapman's tutorial (as well as learnopengl.com's tutorial). To remove the noise pattern (I used a noise texture to randomly rotate the normal-oriented hemispherical sample kernels), I applied a single-pass Gaussian blur with a blur radius of 2. See you again! P.S. I used LWJGL, because Java is the language I'm most fluent in.