Visual features: -scene is Crytek Sponza atrium + 10000 teapots (most of them are out of Sponza) -1000 dynamic omni lights with high density (most of them are out of Sponza) -1000 dynamic spot lights with high density (most of them are out of Sponza) -ray traced shadows from every light (robust solution based on screen space bent cone tracing) -physically based shading - fresnel-roughness BRDF model (diffuse - Disney factor, specular - Cook-Torrance geometry term with GTR distribution) -physically based atmosphere model (initially engine starts at night but you can change sun position from console) -physically based fog model that includes lights scattering in atmosphere
Engine features: -deferred based renderer -very fast and precise visibility occlusion using OpenGL atomic operations -binary tree based object managment -tiled based shading -precise lights classification using ray tracing instead of boundary boxes
Demo restrictions: -freefly (but feelings are cool in VR, yaaamy I'm so high... :D) -no sun shadows yet 😞 -no native OculusHD support (you can change resolution in ovr.cfg, but unfortunately rendering artifacts will appear, because tile size is 16x16 and 1080/16 = 67.5), but I will fix it in nearest future -no native antialiasing (SSAA x1.5 instead) -OpenGL 4.3 is required, so demo will work only on NVIDIA 4xx/6xx/7xx/Quadro6000/K5000 series or higher (or maybe Radeon (:) -Demo is rendering heavy (in nearest future low/normal/high quality profiles will be added)
Controls: -W,S,A,D - moving -Q,E - up/down -C - show cursor -left mouse click - select/deselect object (you can move/rotate it but only from console) -mouse - look around
Other notes: -Demo is NVIDIA friendly, but I dont test it on AMD GPUs (OpenGL on AMD sucks, very slow in most cases...) -Good news: demo compiled with OVR SDK 0.2.3 so it automaticaly uses your default Oculus profile \O/ -Good news: it is not required to setup the Oculus display in 'clone' mode, just use native 'extend' mode. If Oculus display is not second display, than you should change next line in ovr.cfg: \vid_display 1 -> \vid_display <display_id - 1>
Usage: -3DEngine_starter_demo.exe - mono view -3DEngine_console_demo.exe - mono view + simple console in different window -vr.bat - stereo view
Console interface: "~" - open console, all commands begins with "\", after typing some symbols you can press TAB for autocompletion.
Usefull console commands: "\atm_sun_position X Y" - sun lat(X)-lon(Y) position in degrees (-90 0 = night, 0 0 = dusk, 90 0 = zenith, 30 0 = mid day) "\atm_haze X" - visibility distance (X) in meters at ocean level (by default is 140m, so you can see a lot of light scattering), for absolutely clean atmosphere set it 400000m "\vid_glControl X" - X = 0/1/2, 0 - nothing, 1 - glFlush, 2 - glFinish (lowers overall latency but drops performance) "\ovr_prediction X" - prediction time in seconds "\shader_debug X,Y,Z,W" - Important: without spaces, X - on/off global ambient, Y - not used, Z - on/off shadows, W - on/off lights moving "\shader_debug 1,0,1,1" - global ambient ON, shadows ON, dynamic lights "\shader_debug 1,0,1,0" - global ambient ON, shadows ON, static lights "instance_move X,Y,Z" - Important: without spaces, moving vector "instance_rotate X,Y,Z" - Important: without spaces, rotations
Future work: -Oculus HD support -More configs: low/normal/high quality -Sun shadows -True reflections
Thank you for reading. You can mail me steelratsoftware [at] gmail.com for any suggestions.
Enjoy!
Link changed to updated demo...
UPDATE1: -OculusHD support -works fine with any resolution (no problems with tiled shading now) -friendly SSAA control, just set desired value in cfg file (command \vid_ssaa), for 720p good value is 1.4, for 1080p good value is 1.1 -simple vsync was replaced to adaptive vsync (command \vid_vsync -1) -prediction time control via \ovr_prediction <sec> in cfg file -Oculus warping fit to screen command (\ovr_fitToScreen 0 - no fit, lower fov, high subsample quality; \ovr_fitToScreen 1 - fit, full fov near 130 degrees, low subsample quality, more SSAA is required)
Please, check OpenGL version in console.log. I think, you should update your drivers. Also you can mail console.log to me (steelratsoftware@gmail.com) and I will check what is going on.
Teapot party heh. I got a solid 60 FPS on my Nvidia 670 w/ i7 i930. The lights moved choppy like it was low FPS, but everything else was smooth. Looked nice.
Thank you! I almost complete first update for this demo:
-OculusHD support -friendly SSAA control from config file
P.S. You can run 3DEngine_starter_demo.exe directly and check your FPS (in right square). Keep in mind that in stereo mode "frametime = frametime_mono + 1 ms" (drawcalls in g-buffer renderered twice)