I have uploaded a video demo for Point Light Dynamic shadows with sponza scene containing 32 point lights with dynamic shadows.
Some performance results at resolution 1080p (as rendered in the above screenshot) –
- Depth Pass – 0.410 ms
- ShadowMap Update – 2.1 ms
- Lighting Pass (With 32 dynamic shadows) – 5.5 ms
- Lighting Pass (With 32 static shadows) – 4.9 ms
Cascaded Shadow Maps is so far the best solution to tackle Perspective and Projective aliasing in shadows. The basic idea is to use multiple shadow maps (mostly 3 or 4) to cover different areas of view camera frustum. The root cause of these shadow artifacts is lack of one to one mapping between shadow map texels and pixels on the screen (in view space). The Cascaded Shadow mapping provides higher resolution shadow maps to objects closer to the eye solving the root cause of artifacts.
(Screenshot – JustAnotherGameEngine)
Shadows are one of the key features for creating realistic and believable virtual scenes. Whether hard or soft or physically correct, shadows are very crucial in providing important visual cues. Shadows can be an important aspect of gameplay also. For example, it plays an important role in CounterStrike by allowing us to see enemies around corners, coming through doors, etc.
Real-Time Shadows is an active area of research. There’s still no single fool-proof technique of rendering shadows that can handle all the cases. Well, there exists a way to render high quality physically correct shadows through ray-tracing but that’s not fast enough to render in real-time on current hardware. So a better way to say this is that there’s no real-time hack of rendering high quality, flicker/ jaggies free, physically correct, etc shadows yet.
From past 7-8 weeks I have been mainly working on shadows along with some engine code refactoring, adding support for some new things to support shadows like Texture arrays, Geometry shaders, etc
Read the rest of this entry
Here’s the sponza model rendered with 1024 dynamic point lights –
I am getting 650+ (650-900) fps in this scene depending upon how many lights are in the view and how many lights end up per tile. This is with Depth Prepass, which gave a boost of approx 150 fps in this scene.
Note – These results are without any optimizations on application side. – no frustum Culling, no sorting,data of all the lights is being updated perframe, etc.
Some more screenshots –
Tested 1024 Dynamic Point Lights. These screenshots have been Captured in Debug Mode. For performence test I am working on importing Sponza Model.
I recently started working on JustAnotherGameEngine again. Although ToneMapping was left incomplete in april I have started on Deferred Rendering for now.Plan is to do ToneMapping after this so that I would have some test scenes with lights rather than just HDR skybox. Because I feel its more difficult to do Tonemapping properly in a 3D scene with multiple dynamic light sources or varying luminosity rather than just a skybox and will be a good test while testing different tone mapping operators.
There’s been a lot of progress in last couple of weeks. Many resource managers are done, Scene graph is almost complete, some camera systems are there, also static model loading is there, etc. Couple of Camera controllers have been done too – CameraFREELOOK and CameraOrbit. Other types of camera will be implemented as needed but for now I need these two only. Also I am using open source asset import library for importing X files only for now as I have test scenes in X file from the artwork used in last version of the engine. Once I get things working I will mess around with other formats too. Also looks like it doesn’t support so might have to implement FBX loader myself using FBX SDK later.
I trying to make the engine component based this time and also there’s been significant architectural changes compared to old DX9 version of the engine. It’s going to take a while to make engine as capable as before in terms of features. But this time it will be much more programmer friendly, more optimized, more capable to support complex scene hierarchies, etc.
I am working on loading large scenes again in this new version. Today I tested the full map with all textures at 7-8 FPS, using simple textured shader for now. It’s still better than my first attempt using DX9 engine when I got 1-2 FPS 🙂 which later after optimizations went up to 1000 FPS approx. ( after spatial partitioning, frustum culling, batching etc. ) .
In this first attempt I just made things working and there’s a lot of things left in mesh grouping, scene render manager, batching, material management, etc. I am hoping to achieve at least same results ( at least 1000 FPS ) after some optimizations and finish some loose ends.
Here’s a quick screenshot –
Also I will be adding a dedicated page for new version of the engine which will have an update list of things and also a To-do list. But I want to finish this scene loading first which should be done by Friday.
ASSIMP ( An open source library to import many 3d file formats )