Jump to content
  • entries
    941
  • comments
    5,894
  • views
    868,122

About this blog

Learn about game development technology

Entries in this blog

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

Turbo Game Engine (Leadwerks 5) beta updated

An update for the beta of the new engine is now available with the following changes: GLTF loader is now working for most models. A large collection of GLTF files are available online for free from many sources, and they can be loaded right into the engine without any adjustment for materials or textures. Single-file GLB files also work. Added support for GLTF extension KHR_materials_pbrSpecularGlossiness. Disabled PNG loader gamma correction. world->SetSkybox(tex

Josh

Josh

Leadwerks 5 beta Mega Update

A huge update is available for Turbo Engine Beta. Hardware tessellation adds geometric detail to your models and smooths out sharp corners. The new terrain system is live, with fast performance, displacement, and support for up to 255 material layers. Plugins are now working, with sample code for loading MD3 models and VTF textures. Shader families eliminate the need to specify a lot of different shaders in a material file. Support for multiple monitors and be

Josh

Josh

EAX Effects in Leadwerks 5 beta

I've been doing some work on the sound system in Leadwerks 5 beta, and I added EAX effects in. If you have a dedicated sound card this can be used to add some nice reverb effects that make your sound environment sound a lot more real: Here's the simplest usage: auto fx = LoadSoundEffect("Sound/FX/sewerpipe.json"); auto listener = CreateListener(world); listener->SetEffect(fx); This will apply the effect to all mono sources. Stereo sources are assumed to be music or GUI n

Josh

Josh

Render-To-Texture with Vulkan in Leadwerks 5

In Leadwerks 4, render-to-texture was accomplished with the SetRenderTarget command, which allowed a camera to draw directly to a specified texture, while hiding the underlying framebuffer object (FBO). In the new engine we have a bit more explicit handling of this behavior. This is largely in part due to the use of Vulkan's bindless design, which greatly improves the context-binding design of OpenGL. The Leadwerks "Buffer" class was never documented or officially supported because the underlyin

Josh

Josh

Leadwerks Plugin SDK

I've restructured the plugin SDK for our new engine and created a new repository on Github here: https://github.com/Leadwerks/PluginSDK The GMF2 format will only be used as an internal data transfer protocol for model loader plugins. Our main supported file format will be GLTF. As of now, the plugin system can be used to write texture loaders for different file formats, model loaders, or to modify behavior of particles in the new particle system. The FreeImage texture loader has been

Josh

Josh

Organizing the New Engine

The addition of our plugin system makes the engine feel different. There is a stronger distinction between core and non-essential functionality. I removed a lot of third-party libraries from the project and am just focusing on graphics, physics, pathfinding, and other features that are core to the functioning of your game. Things like file importers terrain generation, etc. can be stored away in self-contained optional plugins, or can be part of the editor project, and do not need to reside in t

Josh

Josh

Terrain Compression

I wanted to see if any of the terrain data can be compressed down, mostly to reduce GPU memory usage. I implemented some fast texture compression algorithms for BC1, BC3, BC4, BC5, and BC7 compression. BC6 and BC7 are not terribly useful in this situation because they involve a complex lookup table, so data from different textures can't be mixed and matched. I found two areas where texture compression could be used, in alpha layers and normal maps. I implemented BC3 compression for terrain alpha

Josh

Josh

Advanced Terrain Building in Leadwerks Game Engine 5

In Leadwerks Game Engine 4, terrain was a static object that could only be modified in the editor. Developers requested access to the terrain API but it was so complex I felt it was not a good idea to expose it. The new terrain system is better thought out and more flexible, but still fairly complicated because you can do so much with it. This article is a deep dive into the inner workings of the new terrain system. Creating Terrain Terrain can be treated as an editable object, which i

Josh

Josh

Project Workflows

It's funny how all of the various features in the new engine are interconnected and development just flows from one to another. I was working on terrain, and I needed to save out some texture data so I implemented Pixmaps, and I wanted to add Basis support and DXT decompression, and then I started converting texture formats, and now I need a way to manage this all. This is an idea I have had for several years and I finally got to try it out. Leadwerks Game Engine 4 has a strictly defined wo

Josh

Josh

Advanced Lua Debugging

I've had some more time to work with the Lua debugger in Leadwerks Game Engine 5 beta, and it's really amazing.  Adding the engine classes into the debug information has been pretty simple. All it takes is a class function that adds members into a table and returns it to Lua. sol::table Texture::debug(sol::this_state ts) const { auto t = Object::debug(ts); t["size"] = size; t["format"] = format; t["type"] = type; t["flags"] = flags; t["samples"] = samples; t["faces"] = faces;

Josh

Josh

Load files from URL

I have been spending most of my time on something else this month in preparation for the release of the Leadwerks 5 SDK. However, I did add one small feature today that has very big implications for the way the engine works. You can load a file from a web URL: local tex = LoadTexture("https://www.github.com/Leadwerks/Documentation/raw/master/Assets/brickwall01.dds") Why is this a big deal? Well, it means you can post code snippets that can be copied and pasted without requiring download o

Josh

Josh

Leadwerks 5 beta update adds model saving and static shadow caching

A new update is available for beta testers. The dCustomJoints and dContainers DLLs are now optional if your game is not using any joints (even if you are using physics). The following methods have been added to the collider class. These let you perform low-level collision tests yourself: Collider::ClosestPoint Collider::Collide Collider::GetBounds Collider::IntersectsPoint Collider::Pick The PluginSDK now supports model saving and an OBJ save

Josh

Josh

Leadwerks 5 Beta Update Available

A new update is available to beta testers. I updated the project to the latest Visual Studio 16.6.2 and adjusted some settings. Build speeds are massively improved. A full rebuild of your game in release mode will now take less than ten seconds. A normal debug build, where just your game code changes, will take about two seconds. (I found that "Whole program optimization" completely does not work in the latest VS and when I disabled it everything was much faster. Plus there's the precompile

Josh

Josh

Leadwerks 5 Beta Update Available

An update is available for beta testers. All Lua errors should now display the error message and open the script file and go to the correct line the error occurs on. The voxel raytracing system is now accessible. To enable it, just call Camera:SetGIMode(true). At this time, only a single voxel grid with dimensions of 32 meters, centered at the origin is in use. The voxel grid will only be generated once, at the time the SetGIMode() method is called. Only the model

Josh

Josh

Streaming Terrain Data Fetching

Previously, I showed how to create a terrain data set from a single 32768x32768 heightmap. The files have been uploaded to our Github account here. We will load data directly from the Github repository with our load-from-URL feature because this makes it very easy to share code examples. Also, even if you fly around the terrain for a long time, you are unlikely to ever need to download the complete data set. Think about Google Earth. How long would it take you to view the entire planet at full r

Josh

Josh

Leadwerks 5 Beta Update Available on Steam

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.

Josh

Josh

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

The Year of the Linux Desktop is Here

One month ago I began work to investigate what it would take to bring Ultra App Kit, the foundation for our new generation of game development tools, to Linux. Today I am happy to share my progress with you and discuss some of the things I have learned. Developed by MIT in the year 1984, X11 is an interesting beast that is easy to start with, but can become quite difficult once you get into the details. (Wayland support is of course an obvious step in the not-too-distant future but I have t

Josh

Josh in Articles

Animated Textures

One of my goals in Ultra Engine is to avoid "black box" file formats and leave all game assets in common file formats that can be easily read in a variety of programs. For this reason, I put a lot of effort into the Pixmap class and the DDS load and save capabilities. In Ultra Engine animated textures can be stored in a volume texture. To play the animation, the W component of the UVW texcoord is scrolled. The fragment shader will sample the volume texture between the nearest two slices on

Josh

Josh in Articles

WerkSpace

Well, this is our new community site. I've wanted something like this for a while, and finally found a way to do it. We've got blogs, a gallery, customizable profiles, and yes, a forum. I was unsuccessful in my attempt to migrate the data from PHPBB, so the old forum will be left intact as an archive. I really like this new system. It's not just a forum, it's a social netwerking site!   If you register an account and aren't able to access all the goodies, please be patient while I enter a

Josh

Josh

12-22-9

Working to improve the implementation of the code known as framework. It needs to be able to talk to Lua, with all programming languages. I can't really go on documenting the script until this is finalized, so the time to do it is now.

Josh

Josh

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

×
×
  • Create New...