Jump to content
  • entries
    941
  • comments
    5,894
  • views
    871,843

About this blog

Learn about game development technology

Entries in this blog

System Hooks Are Your Friend

Here's an example of how setting a debug hook in Leadwerks3D from a BlitzMax program saved me a lot of time stepping through code to figure out where something went wrong. When the engine encounters a fatal error, the hook is called, giving control back to the main program.   I can even step through the BlitzMax debugger and see which call to Leadwerks3D produced the error:   And it works with all supported languages. Little things like this make programming with Leadwerks3D very enjoy

Josh

Josh

The Living Room is About to Change

Miniaturization has been a big trend over the last five years, but it isn't limited to mobile. It's impacted other areas of technology that I find much more interesting than cell phones. Previously, I wrote about the changing PC form factor, and how my current rig is a no-compromises full-size PC packed into a form factor about the size of a bread box.   I happen to have my hands on a few pieces of technology that are brand new, unreleased, or things I myself am creating. All these technolo

Josh

Josh

Source art files now supported in Workshop

You might not have noticed this, but Workshop items can now include the following file formats: "bmp","jpg","jpeg","png","tga","dds","psd","blend","fbx","obj","3ds","x","dae"   When Leadwerks installs Workshop items, the source art files are unzipped first, then the final files are unzipped, in order to avoid triggering a reconversion of the file. If you import an FBX and makes some changes to it, you can safely include the FBX in your Workshop package and it will install without reconvertin

Josh

Josh

GPU Voxel Downsampling with Compute Shaders

For downsampling of GI voxel data, I found that a compute shader offers the best performance. The first step was to add support for compute shaders into Ultra Engine.  I've never used these before but I was able to get them working pretty quickly. I think the user API will look something like this: //Load compute shader auto module = LoadShaderModule("Shaders/Compute/test.comp.spv"); auto shader = CreateShader(); shader->SetModule(module, SHADER_COMPUTE); //Create work group int wor

Josh

Josh in Articles

Leadwerks Articles

The articles database makes a triumphant return with a beautiful new template: http://www.leadwerks...e/page/articles   The front page shows the most recent articles. Clicking on a category on the right gives you the entire list of articles for that category: http://www.leadwerks...s/_/programming   The new template I designed will help organize and present articles better. There's some great content written by the community, but I haven't provided a very clear specification for the arti

Josh

Josh

Building Universal Game Assets

I have two goals for the art pipeline in the new game engine. Eliminate one-way 3D model conversions. Use the same game asset files on all platforms. In Leadwerks, 3D models get converted into the proprietary MDL format. Although the format is pretty straightforward and simple, there is no widespread support for loading it back into 3D modeling programs. This means you need to keep a copy of your 3D model in FBX and MDL format. You may possibly want to keep an additional fi

Josh

Josh in Articles

Asset Loader Class

There's a discussion on the forum that sort of veered into talking about Khronos' GLTF file format specification: Some of this gave me some ideas for changes in the art pipeline in Turbo Game Engine. I was not feeling very concentrated today so I decided to do some easy work and implement a loader class: class Loader : public SharedObject { public: std::vector<wstring> extensions; virtual bool Reload(shared_ptr<Stream> stream, shared_ptr<SharedObject> o, const int f

Josh

Josh

Beta update adds per-project AddOns management

An update is available on the beta branch. This fixes the picked triangle always returning 0 bug, and it adds a new dialog for managing Workshop add-ons on a project by project basis.   I tried to keep the addon management dialog unobtrusive, but I still didn't want the user to be confused if they subscribed to a new Workshop item and didn't see it show up. The dialog appears automatically if you have added a new item, but otherwise it will stay hidden unless you open it with the Workshop &g

Josh

Josh

Transparency and Refraction in Vulkan

One of the downsides of deferred rendering is it isn't very good at handling transparent surfaces. Since we have moved to a new forward renderer, one of my goals in Leadwerks 5 is to have easy hassle-free transparency with lighting and refraction that just works. Pre-multiplied alpha provides a better blending equation than traditional alpha blending. I'm not going to go into the details here, but it makes it so the transparent surface can be brighter than the underlying surface, as you can

Josh

Josh

Beta update available

An update is available on the beta branch. This adds an optional recursive parameter to the Entity::SetCollisionType command and updates the MonsterAI script so that not so many special settings need to be adjusted to make enemies work.

Josh

Josh

Leadwerks 4.6 Development

With Christmas approaching I am now turning my attention to finishing Leadwerks Game Engine 4.6. The major features planned are peer-to-peer networking and a new vehicles system, as well as miscellaneous bug fixes. A beta build will be made available early on Steam for testing.

Josh

Josh

DPI Drawing Issues Solved

I've updated the beta branch (Lua on Windows only) with a new build that solves the DPI scaling issues I previously described. Widget creation still works the same, using the same coordinate system regardless of GUI scale. Widget scripts must use global coordinates in the drawing commands, which means calling Widget:GetPosition(true) and Widget:GetSize(true). Here's the very simple panel script, which simply draws a solid block on the screen to frame child widgets within: function Script:D

Josh

Josh

Hello Mac

Being reasonably confident that my GUI design will work on Windows and Linux, I wanted to make sure it would also work for Mac computers. The first step was to compile Leadwerks Game Engine in Apple's Xcode IDE. Like Visual Studio and Code::Blocks, I was able to create two targets so that the same project can be used to compile both the static library and standalone executable.     At this point the Window class for Mac contains mostly empty functions that don't do anything, but this is a

Josh

Josh

Steam Machines are Here

I went into GameStop and purchased a new Alienware Steam Machine for testing. They had a nice display showing all the new Steam stuff you can buy in stores.  

Josh

Josh

Leadwerks 5 beta first-person shooter template

The best way to test the new engine is to use it to make something. I am messing around with the beginnings of a new first-person shooter template. I'm telling everyone involved "We are remaking Doom, but a little differently" and it actually works really well. Everyone understand what it should look like, and there is no need to establish a new visual style. We can tell when we have it right, and when we have it wrong. And the original game gives us a sort of benchmark for quality and performan

Josh

Josh

Starting with a Bang

Crowdfunding campaigns are a great way to kick off marketing for a game or product, with several benefits. Free promotion to your target audience. Early validation of an idea before you create the product. A successful crowdfunding campaign demonstrates organic consumer interest, which makes bloggers and journalists much more willing to give your project coverage. Oh yeah, there's also the financial aspect, but that's actually the least important part. If you make $1

Josh

Josh in Articles

Ultra Engine Compatibility with Leadwerks Game Engine

As the first release of Ultra Engine approaches, it seems clear that the best way to maximize its usefulness is to make it as compatible as possible with the Leadwerks game engine. To that end, I have implemented the following features. Native Loading of Leadwerks File Formats Ultra Engine loads and saves DDS, glTF, and OBJ files. Other formats are supported by plugins, both first and potentially third-party, for PNG, JPG, BMP, TGA, TIFF, GIF, HDR, KTX2, and other files. Additionally,

Josh

Josh in Articles

Slogging On

Everything I'm working on right now is a real grind. Trying to get some window code to run on Mac and chatting with Valve on how to optimize the Workshop Store. If I didn't have a plan this would not feel like I was going anywhere. I think that's why programmers often fail to reach beyond a certain level of success. I don't mean simply financial success, I mean they don't go big enough to make a really complete product. They make a car with 22 different gears and no seat. If you don't have

Josh

Josh

Terrain on the new Google Nexus 7

Compatibility testing for the new terrain system ended up taking an entire week. Most of the problems revolved around OpenGL ES and some iOS driver bugs. Once I got it running on iOS, Android was able to run it with only one small change. The quality settings in this video are lowered for mobile, but the new Google Nexus 7 can actually handle quite a lot, at an impressive 1920x1200 resolution! With a price tag of only $200, this is a great choice for an Android tablet.  

Josh

Josh

Project Launch Settings and Mod Support

The new editor is being designed to be flexible enough to work with any game, so it can be used for modding as well as game development with our new 3D engine. Each project has configurable settings that can be used to handle what the editor actually does when you run the game. In the case of a game like Quake, this will involve running a few executables to first compile the map you are working on into a BSP structure, then perform lightmaps and pre-calculate visibility. You can also

Josh

Josh in Articles

Turbo Game Engine (Leadwerks 5) beta updated

A new beta update is available for subscribers. What's new? Lighting Point and spot lights are now supported in the new Vulkan renderer, with either PBR or Blinn-Phong lighting. Lighting is controlled by the shader in the material file. There are two main shaders you can use, "Shaders/PBR.spv" and "Shaders/Blinn-Phong.spv". See below for more details. JSON Materials Materials can now be loaded from JSON files. I am currently using the .json file extension instead of "mat",

Josh

Josh

GPU Voxelization

After testing and some discussion with other programmers, I decided to try performing voxelization on the GPU instead of the CPU. The downside is the memory usage is much higher than a sparse voxel octree, but I found that sparse voxel octrees were very slow when it came to soft reflections, although the results of the sharp raycast were impressive: You can read the details of GPU voxelization here if you wish. Initially I thought the process would require rendering the

Josh

Josh in Articles

Growing Leadwerks

As of this morning, the most recent Steam sale is now complete. The sales figures were excellent and we picked up a lot of new users. Most importantly, we've got a lot of new data on how people behave and what can be done to make them happy.   There's three stages a new Leadwerks user goes through to become a happy productive developer. The first is to actually buy the software. The main ingredients here are the demo, website pages describing the benefits of our approach to game developmen

Josh

Josh

Tips for Launching Your Game on Steam

I thought I would take a minute to write down some of the things I have learned about releasing software on Steam, in order to help with your game releases.   First of all, always wait a week after you are "finished" to release a major update. This is because you will always find little problems, and sometimes major ones, after you think you've finished everything. Leadwerks 3.6 was scheduled for release at the start of this week, as far as I knew everything was working, but I knew to give i

Josh

Josh

Voxel GI: GPU Acceleration, corrected bounces, and reflections

I've moved the GI calculation over to the GPU and our Vulkan renderer in Leadwerks Game Engine 5 beta now supports volume textures. After a lot of trial and error I believe I am closing in on our final techniques. Voxel GI always involves a degree of light leakage, but this can be mitigated by setting a range for the ambient GI. I also implemented a hard reflection which was pretty easy to do. It would not be much more difficult to store the triangles in a lookup table for each voxel in order to

Josh

Josh

×
×
  • Create New...