Jump to content

Voxel Cone Step Tracing Refinement


Josh

2,657 views

 Share

Before proceeding with multiple GI volumes, I decided to focus on just getting the lighting to look as close to perfect as possible, with a single stage.

Injecting the ambient light into the voxel data made flat-lit areas appear much more "3D", with color bleeding and subtle contours everywhere.

Lighting only:

part1.thumb.jpg.f04a8869c75ad24a0ddfb97d0ab025f1.jpg

Lighting + albedo

part2.thumb.jpg.b95cc8150de77bb503985e765e15c094.jpg

Some adjustments to the way the sky color is sampled gave a more lifelike appearance to outdoor lighting.

Before:

04998cb6d64c461fb647dc1a6375c639_og.thumb.jpg.c4fbbb7c4cf8043b9dcbc74225fcdbc0.jpg

After. Notice the shaded area still has a lot of variation:

bf3925ecc0494348b80e50eb60ca3139.change.thumb.jpg.cb14d7c108bcde5360e58df7178ae9df.jpg

Initial performance testing gives results consistent with my expectations. I'm running at half of 1920x1080 resolution, on a GEForce 1660 TI, and performance is about a third what it would be without GI. At 1920x1080, that drops to 90 FPS. Because it is so resource-intensive, I plan to render the effect at half-resolution, then upscale it and use an edge detection filter to fill in info for any pixels that need it. This card has only 1536 stream processors, about half as much as a 2080.

Untitled.thumb.jpg.3b10cfef94cb5d6982a77d9a793304ef.jpg

Further experiments with motion did not resolve the artifacts I was experiencing earlier, and in fact caused new ones because of the flickering introduced by the GPU voxelization. You can read a detailed discussion of these issues on the Gamedev.net forum. My conclusion for now is that moving objects should not be baked into the voxelized data, because they cause a lot of flashing and flickering artifacts. These could be added in the future by storing a separate voxel grid for each dynamic object, along with some kind of data structure the shader can use to quickly find the objects a ray can pass through.

This is great though, because it means voxelization only has to be updated when the camera moves a certain distance, of if a new static object is created or deleted. You still have completely dynamic direct lighting, and the GI system just follows you around and generates indirect lighting on the fly. I could run the update in the background and then show a smooth transition in between updates, and all the flickering problems go away. Performance should be very good once I have further optimized the system. And every surface in your game can show reflections everywhere. Moving lights work really really well, as you have seen.

The end is in sight and I am very pleased how this system is turning out. My goal was to create a completely dynamic system that provided better 3D reflections than cubemaps, and did not require manual placement or baking of probes, fast enough to use on older mid-range discrete GPUs, and that is what we got.

  • Like 6
 Share

13 Comments


Recommended Comments

On further reflection, I think reflections of dynamic objects will work great and run fast, but it will require additional work and should be deferred until after the initial release.

  • Like 2
Link to comment

Well, we have reflections appearing on dynamic objects, no matter what. But making dynamic objects appear in reflections is what I mean.

Link to comment

In my opiniom looks outdoors pictures best.

indoors: ... Well very nice but somehow I find the walls reflection a bit too much? Bit like metallic. I don't think concrete should reflect so much...?

Or maybe too much details..

I don't know but when I come into a room I don't expect to see the veins on the walls 10 meter from me.

Link to comment
8 minutes ago, Cromartie said:

Hi Josh, how much will the Ultra engine non steam license cost?

Austin Powers Doctor Evil GIF

  • Haha 1
Link to comment
3 minutes ago, Cromartie said:

ok)), and the license in steam?

I don't know if it will be on Steam.

Link to comment
1 hour ago, Marcousik said:

@Josh Any idea on an hypothetical "loading bar" on which prozent the ultra engine actually is, if 100% means the releasing state ?

85%

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...