Jump to content
  • entries
    941
  • comments
    5,894
  • views
    870,256

About this blog

Learn about game development technology

Entries in this blog

Voxel Cone Step Tracing - Emission and Motion

Adding emission into the cascaded voxel cone step tracing global illumination and dynamic reflections system (SEO ftw) was simple enough: There's some slight trailing but it looks okay to me. There is a bit of a "glitch" in that when the emissive surface gets near the wall, the ambient occlusion kicks in, even though the sphere is self-illuminating. This happens because the emission color is mixed with the light voxel during the rasterization step. I could fix this by storing emis

Josh

Josh in Articles

Website Changes

I want to streamline some of this website. We went through a lot of changes since the release on Steam in 2014 and learned what works and what does not. The "Marketplace" is just called the default "Downloads" name now, and that literally is what it is for. It's a place to keep a permanent copy of your files. Paid files are still supported, and any purchased items are still available to download, but I do not have any aspirations of building this up unless it just happens spontaneously. Ins

Josh

Josh in Articles

Reflection Colors

An update is available for Leadwerks 5 beta on Steam that adds a World::SetSkyColor() command. This allows you to set a gradient for PBR reflections when no skybox is in use. I learned with Leadwerks 4 that default settings are important. The vast majority of screenshots people show off are going to use whatever default rendering settings I program in. We need a good balance between quality and performance for the engine to use as defaults. Therefore, the engine will use SSAO and bloom effe

Josh

Josh in Articles

Ultra App Kit beta updated

A new update is available on Steam for Ultra App Kit. A TEXTFIELD_PASSWORD style flag has been added and is used for the password entry form: A WINDOW_CHILD style flag has been added. I found this was necessary while implementing a Vulkan 3D viewport in a GUI application. You can read more about that here. Pressing the Tab key will now switch the focus between widgets. The "Learn" tab in the project manager has been moved in front of the "Community" tab. The Visual

Josh

Josh in Articles

Vulkan on AMD Graphics Cards

I have procrastinated testing of our new 3D engine on AMD hardware for a while. I knew it was not working as-is, but I was not too concerned. One of the promises of Vulkan is better support across-the-board and fewer driver bugs, due to the more explicit nature of the API. So when I finally tried out the engine on an R9 200 series card, what would actually happen? Would the promise of Vulkan be realized, or would developers continue to be plagued by problems on different graphics cards? Read on

Josh

Josh in Articles

Finalizing Direct Lighting

I have not used the engine outside the editor in a while, but I needed to for performance testing, so now I am back to real-time rendering. During the development of the GI system I broke most of the light types, so I had to spend a couple of days getting those to work again. While doing this, I decided to resolve some longstanding issues I have put off. First, the PBR lighting will use a default gradient in place of the skybox, if no reflection map is set for the world. This is based off t

Josh

Josh in Articles

Better Voxelization

My initial implementation of mesh voxelization for ray tracing used this code. It was good for testing, but has some problems: It's slow, using an unnecessary and expensive x * y * z loop No support for per-voxel color based on a texture lookup There are mathematical mistakes that cause inaccuracy, and the math has to be perfect My solution addresses these problems and only uses an x * y loop to generate the voxels. It does this by identifying the major (largest magn

Josh

Josh in Articles

Plugins and File Formats

At last I have been able to work the plugin system into the new editor and realize my dreams. The editor automatically detects supported file formats and generates thumbnails for them. (Thumbnails are currently compatible with the Leadwerks system, so Leadwerks can read these thumbnail files and vice-versa.) If no support for a file format is found, the program just defaults to the whatever icon or thumbnail Windows shows. The options dialog includes a tab where you can examine each pl

Josh

Josh in Articles

Reflections on Reflections

Now that I have the downsampled reflection data working, I can start casting rays. The cone step tracing is not a 100% perfect representation of physical light, but it gives a very favorable balance of quality and performance. Somehow I came up with a few formulas that eliminate light leaks and other artifacts. Quite honestly I did not think the results would be this good. Indoor / outdoor scenes with thin walls are very difficult to prevent light leaks in, but somehow it's working ve

Josh

Josh in Articles

Sparse Voxel Octree Reflections

I've now got basic specular reflections working with the sparse voxel octree system. This uses much less memory than a voxel grid or even a compressed volume texture. It also supports faster optimized ray tests, for higher quality reflections and higher resolution. Some of the images in this article were not possible to produce in my initial implementation that used volume textures. This shot shows the reflection of just the diffuse color. Notice the red column is visible in three reflectio

Josh

Josh in Articles

Ultra App Kit Beta Updated

An update is available for the Ultra App Kit beta on Steam. Menu open / close behavior is finished and is now working bug-free. Fixed problem where list boxes were only showing the first item. A submenu item is demonstrated in the example program. A progress bar widget is added in the example program. A label widget is added in the example program. A second radio button is added in the example program. Still to do: Work out some scaling i

Josh

Josh in Articles

Real-time Global Illumination: Background Updating

Previously I wrote about introducing latency to the voxel cone step tracing realtime global illumination system. The idea here is to improve performance and quality, at the cost of a small delay when the GI calculation gets updated. The diffuse GI lighting gets cached so the final scene render is very fast. Here's what a gradual GI update does. Of course, this will be running unseen in the background for the final version, but this shows what is actually happening: My new video pro

Josh

Josh in Articles

Built-in Shaders

In Leadwerks, required files were always a slightly awkward issue. The engine requires a BFN texture and a folder of shaders, in order to display anything. One of my goals is to make the Ultra Engine editor flexible enough to work with any game. It should be able to load the folder of an existing game, even if it doesn't use Ultra Engine, and display all the models and scenes with some accuracy. Of course the Quake game directory isn't going to include a bunch of Ultra Engine shaders, so what to

Josh

Josh in Articles

Ultra App Kit 1.2 Released

Ultra App Kit 1.2 is now available on our site and on Steam. This is a bug fix update that resolves numerous small issues reported in the bug reports forum. To download the latest version, see My Purchases.

Josh

Josh in Articles

×
×
  • Create New...