This is an update on my progress of our voxel raytracing system. VXRT is designed to provide all the reflection information that PBR materials use. If a picture is worth a thousand words, then this counts as a 5000 word article.
Direct lighting:
Global illumination:
Specular reflection:
Skybox component:
Final combined image:
A release candidate for Visual Studio 2017 was released in November. I took a chance that the final release would be out in December, but it isn't here yet. Releasing Leadwerks 4.2 built with VC 2017 could possibly cause the program to not run on some computers, because the Visual Studio 2017 redistributable is not out yet, and there is no option yet to make this part of the installation on Steam.
Because of this, I am going to release Leadwerks 4.2 for use with Visual Studio 2015, and upg
In order to get the camera frustum space dividing up correctly, I first implemented a tiled forward renderer, which just divides the screen up into a 2D grid. After working out the math with this, I was then able to add the third dimension and make an actual volumetric data structure to hold the lighting information. It took a lot of trial and error, but I finally got it working.
This screenshot shows the way the camera frustum is divided up into a cubic grid of 16x16x16 cells. Red an
To make an entity in Leadwerrks3D behave, you can drag a script from the asset browser to the actors list in the entity properties editor. Each entity can have multiple scripts attached to it. Each script can have different variables exposed, with control for the GUI they are displayed in. For example, you can specify upper and lower limits of a spinner or a list of choices for a drop down box. Each script attached to an entity, along with its set of properties, is called an "actor" because.
The last two weeks were mostly me wrestling with C++. I had promising results with a meta language that translates to C++ and compiles, and also learned how to create makefiles as a result of that. I tried CodeLite and CodeBlocks, in addition to MS Visual Studio. I finally settled on CodeBlocks.
Codeblocks can be configured pretty easily to use GCC, the MS C++ compiler that Visual Studio uses, as well as about a dozen others (very curious to see if LE3 compiled with the Intel compiler is
I've been doing a lot to create the final Leadwerks projects to build static libraries, and the corresponding Visual Studio, Xcode, and Eclipse projects to load those libraries and start coding with Leadwerks 3 in C++. We're also making progress with our sample game "Darkness Awaits". The community came up with an awesome logo for the game that captures the spirit and feel of the original concept, which first formed as a mod for the original Quake engine. I uploaded gamecreator's Photoshop fi
I've been doing some work with animated models lately, and encountered some of the difficulties people have mentioned with model animations. It's not really hard to do, but there are things we can do to make the process faster when dealing with lots of animations. This video explains some of the changes I made to make it easier to get animated models into Leadwerks.
These include:
Animation name in extraction dialog.
Animation tab with all sequences displayed at once.
Import animat
With the main culling and rendering algorithm done, I am focusing on the billboard display for the Leadwerks 3.7 vegetation system. My goal is to reduce the popping artifacts the Leadwerks 2 renderer displayed:
I am testing with a non-plant model with the idea that if I can get it to look reasonably well with an oddly sized mechanical object with highly visible lines, then a tree should look very good. Below you can see part of the billboard image drawn on the screen showing the object
Leadwerks 3 / 4 was aimed at beginners who were completely new to game development. Since we were the first game engine on Steam, this made a lot of sense at the time, and the decision resulted in a successful outcome. However, in the next engine we are taking a different approach. (This is a direct result of Steam Direct.)
Enterprise is a new market I am pursuing, and we have a lot of interest from aerospace and defense VR developers. The fact that I am American also helps here. There are
The fantastic Fatcow icon set was recommended to me in the comments in a previous blog post. These are very similar to the Silk icon set, but come in 32x32 and 16x16 versions, have more icons, and better coloration. The Silk icon set is sort of a desaturated pastel tone I don't like, and Fat Cow's icons are more saturated and bright. I had actually considered running the Silk icons through a color-correction algorithm, but Fat Cow has already done the work for me.
I knew from the start I
I am experimenting with a system for creating a sequence of actions using Lua coroutines. This allows you to define a bunch of behavior at startup and let the game just run without having to keep track of a lot of states.
You can add coroutines to entities and they will be executed in order. The first one will complete, and then the next one will start.
A channel parameter allows you to have separate stacks of commands so you can have multiple sequences running on the same object. For
In order to get ready for the Workshop, and to get ready to implement texture locking, some preliminary work needed to be done. First, I needed to improve the CSG texture mapping routine. It was modified to take into account a texture's dimensions. This means that wide flat textures like this trim piece will be mapped to their texel area, not with the same aspect ratio as a square image:
The default mapping scale is that 1024 texels maps to 256 centimeters. This ensures it is easy to l
I have successfully transferred lit voxel data into a 3D texture. The texture is now being used to display the lighting at each voxel. Soft edges are appearing due to linear filtering in the texture. To achieve this, I used an OpenGL 4.2 feature which allows you to write values into any arbitrary position in a texture. This could also be used for motion blur or fluid simulations in the future. However, since Mac support for OpenGL only goes up to 4.1, it means we cannot use real-time GI on a Mac
Shadow maps are now supported in the new Vulkan renderer, for point, spot, and box lights!
Our new forward renderer eliminates all the problems that deferred renderers have with transparency, so shadows and lighting works great with transparent surfaces. Transparent objects even receive lighting from their back face automatically!
There is some shadow acne, which I am not going to leave alone right now because I want to try some ideas to eliminate it completely, so you neve
I am now in possession of the official Leadwerks USB drives. Weighing in at 16 GB, they look fantastic.
These will be shipped out shortly, along with the posters from the last game tournament. I've been working behind the scenes on some big things that took my attention, but I am not yet ready to reveal any of this. Because of the timing on this, we are going to do a Leadwerks Fall Games Festival starting in September.
I am going to spend the rest of the summer in Europe, where
An update is available on the beta branch which makes changes to the way DLCs are installed. The SciFi Interior Pack has been added as a paid Workshop item. You can obtain this item by either purchasing it through the Workshop Store interface, or buying the DLC on our Steam Store page. At the time of this writing, the other model pack DLCs have not been added yet.
To install the SciFi Interior Pack DLC you simply browse to it in the Workshop interface. If you own the DLC the "Buy" button
I spent a few days setting up a server application and attempting to implement NAT punch through. You can read the details of my adventures here.
Here's what I think:
I can probably get it working.
There's a lot of weird hardware and configurations out there I can't realistically test.
There will always be a certain failure rate which translates into angry users who I can't help.
So I started to think about this backwards, by first asking what we want the user exp
By modifying the spotlight cone attenuation equation I created an area light, with shadow.
And here is a working box light The difference here is the box light uses orthographic projection and doesn't have any fading on the edges, since these are only meant to shine into windows.
If I scale the box light up and place it up in the sky, it kind of looks like a directional light. And it kind of is, expect a directional light would either use 3-4 different box lights set at rad
At 100% scaling this image appears correctly:
At 200% scaling it falls apart. The line points are in fact scaled correctly, but they are not surrounding the shape as intended:
So I think instead of converting the coordinate system back and forth between scaled and non-scaled coordinates, the creation function needs to multiply the coordinates by the scaling factor. That means if you create a 70x30 pixel widget and the GUI is using a 200% scaling factor, it will actually create a 14
In this non-technical blog I will give you more of Josh's useful tips on how to live. In this blog I am talking about baggage, in the form of data physical possessions.
Archive and Delete
The first thing you need to do is organize. If you have all your files in dozens of different folders all over your computer, it will be very difficult to track them all down. This is why Leadwerks and most other programs store files in your Documents folder on your computer. Leadwerks projects, along
A new update is available for Leadwerks 5 beta. This adds the ability for to use post-processing effects together with render-to-texture. The SpriteLayer class has been renamed to Canvas and the Camera::AddSpriteLayer method has been renamed to Camera::AddCanvas.
The beta has been moved to Steam and updates will be distributed there from now on. Beta testers were sent keys to install the program on their Steam accounts.
Things have gone so remarkably smoothly so far in the process of building Leadwerks Linux, that it makes sense we would encounter some issues sooner or later. In this update I will talk about some of the challenges recently encountered.
GDB
I was able to get GDB to debug an application built with the Leadwerks static library, in this case our editor. It took me a while to realize you have to hit "continue" once or twice when the application starts, because GDB pauses the program when it conn
Texture arrays are a feature that allow you to pack multiple textures into a single one, as long as they all use the same format and size. In reality, this is just a convenience feature that packs all the textures into a single 3D texture. It allows things like cubemap lookups with a 3D texture, but the implementation is sort of inconsistent. In reality it would be much better if we were just given 1000 texture units to use. However, these can be used to pack all scene shadow maps into a single
Subscribers can now download my current revision of the Turbo Game Engine design document in the private forum here:
Here are a few excerpts:
The document is still evolving so expect changes and updates.