Not long ago, I wrote about my experiments with AI-generated textures for games. I think the general consensus at the time was that the technology was interesting but not very useful in its form at the time. Recently, I had reason to look into the OpenAI development SDK, because I wanted to see if it was possible to automatically convert our C++ documentation into documentation for Lua. While looking at that, I started poking around with the image generation API, which is now using DALL-E 2. Ste
Midjourney is an AI art generator you can interact with on Discord to make content for your game engine. To use it, first join the Discord channel and enter one of the "newbie" rooms. To generate a new image, just type "/imagine" followed by the keywords you want to use. The more descriptive you are, the better. After a few moments four different images will be shown. You can upsample or create new variations of any of the images the algorithm creates.
And then the magic begins:
Heat haze is a difficult problem. A particle emitter is created with a transparent material, and each particle warps the background a bit. The combined effect of lots of particles gives the whole background a nice shimmering wavy appearance. The problem is that when two particles overlap one another they don't blend together, because the last particle drawn is using the background of the solid world for the refracted image. This can result in a "popping" effect when particles disappear, as well
Previously I talked about the technical details of hardware tessellation and what it took to make it truly useful. In this article I will talk about some of the implications of this feature and the more advanced ramifications of baking tessellation into Turbo Game Engine as a first-class feature in the
Although hardware tessellation has been around for a few years, we don't see it used in games that often. There are two big problems that need to be overcome.
We need a way to preven
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
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;
The Model class is being slightly restructured to add support for built-in LOD without the need for separate entities. Previously, a list of surfaces was included in the Model class itself:
class Model
{
std::vector<shared_ptr<Surface> > surfaces;
};
This is being replaced with a new LOD class, which allows multiple lists of surfaces containing less detail to be stored in the same model:
class LOD
{
std::vector<shared_ptr<Surface> > surfaces;
};
class Model
Lighting is nearly complete. and it is ridiculously fast! There are still some visual glitches to work out, mostly with lights intersecting the camera near plane, but it's nearly perfect. I turned the voxel tree back on to see what the speed was, and to check if it was still working, and I saw this image of the level partially voxelized. The direct lighting shader I am using in the rest of the scene will be used to calculate lighting for each voxel on the GPU, and then bounces will be performed
Last week I travelled to Seattle for a few days to lay some groundwork for the future of Leadwerks Software. During the week I tried out Valve's VR hardware, visited a gassification plant, and survived a trifecta of astrological phenomenon.
Steam VR Although I attended Steam Dev Days, I did not get a chance to demo Valve's virtual reality hardware. I was invited by one employee to come back and check it out, so I decided to take them up on that offer last week.
Valve's VR is improved over
I'm really shocked by how fast C++ can be. iOS and Android do not support GPU skinning, so I had to implement vertex-weighted skinning on the CPU. It took about a day to get running, and then I started optimizing code.
My test case was an 8400 polygon model. Each vertex could be attached to as many as four bones, but most just used two or three bones. To make it more interesting, I put the vertex weighting code inside a loop so it would be performed ten times instead of once.
When I
I generally categorize every aspect of Leadwerks as either "absolutely required" or not necessary. If it's categorized as the latter, I don't bother with it, and if it's categorized as the first, I pursue it with a dogged determination until it is done. This has served us well in many ways, like our vegetation rendering system and character controller.
However, this assumes I have full control and mastery over the product, or at least have someone working for me who does. This is almost a
With Luabind, it turns out we don't even need a table associated with an entity. We can just add values and functions straight to Lua's representation of that entity in the virtual machine! So instead of this:
object.health=100
object.entity:SetPosition(1,2,3)
You can just do this, which is much nicer!:
entity.health=100
entity:SetPosition(1,2,3)
So there's no object/actor nonsense, you just work directly with the entity itself.
Entity Keys The Get/SetKey convention from Lea
Last week Valve founder and CEO Gabe Newell took to the stage at LinuxCon and proclaimed that "Linux is the future of gaming". Gabe talked about Linux gaming capabilities and promised to unveil something "on the hardware side" the following week. Today, Valve announced the upcoming release of SteamOS, a living-room operating system designed specifically to compete directly with the XBox, Playstation, and Wii console ecosystems. SteamOS will being openness to the console gaming world. This will h
This is a rough timeline of events I am planning in the new year. It is not complete, and may change, but this is just what I am thinking right now.
January 15: Release Leadwerks 5 Alpha Zero subscription
February 1: Launch Kickstarter campaign for development of Leadwerks 5 Alpha One
February 1: Game Tournament
March 3: Kickstarter campaign complete
April 1: Leadwerks 4.6 released (vehicles, NAT punch-through)
June 30: Summer Games Tournament
Jun
It's been an eventful year.
A new beautiful website has been rolled out, and our community software is updated to the latest version of Invision Power Board, which allowed us to move all file storage to Amazon S3 for basically free unlimited storage space for the site.
Documentation moved into a new easy to use system.
The Games Showcase was created.
We had a totally kick-*** Halloween Game Tournament.
Announced the development of Leadwerks 5, added unicode sup
You may notice the website header looks a little different. Sleeker, cooler, more 2013ish. Well, it's actually a lot more classic Leadwerks than you might realize. Here's what Leadwerks.com looked like in 2005:
I've been wracking my brain trying to decide what I want to show at the upcoming conference, and decided I should get the new editor in a semi-workable state. I started laying out the interface two days ago. To my surprise, the whole process went very fast and I discovered some cool design features along the way.
With the freedom and control I have with the new user interface system, I was able to make the side panel extend all the way to the top and bottom of the window client area. This g
Below you can see LeadwerksGUI running nicely on Ubuntu. Once we get through the window and event code, the GUI code acts exactly the same on Linux and Windows. The behavior of the widgets is reliable and double-buffered rendering makes the appearance perfectly solid. Image loading is not working yet, but you can see the vector graphics are working perfectly.
Leadwerks GUI will provide a smoother user experience on Linux and give us cross-platform UI consistency across all operating
In Leadwerks Engine 3, you can load a script and attach it to any entity. You can attach multiple scripts to any entity, and they will be called in the order they were attached. Right now, I am calling the script-side table "actor" because it is a little more descriptive than "object" but I'm not sure about all the syntax yet. Below is a sample script for a sliding door. When you attach this to a model, the script will control its behavior:
-----------------------------
-- Sliding door sc
The beta branch has been updated with a new build of version 4.5 beta. VR support is implemented and documented here: https://www.leadwerks.com/learn?page=API-Reference_Object_VR
Linux C++ projects will currently not build in the beta (working on it now).
See this thread on updating your C++ projects:
https://www.leadwerks.com/community/topic/16838-upgrading-44-c-projects-to-45/
Version 4.5 is updated on the beta branch on Steam.
Fixed small projection error in VR mode.
Added fog settings in editor and into map file format.
Fixed Workshop browser back button not working.
Added VR project template.
Added VR player script
Added friction to hinge joint script.
Added ball and slider joint scripts.
Joint scripts will now use the entity parent for the other joint connection (if it exists).
We've only got about 24
A new build is available on the beta branch on Steam.
Fixed Kinematic joint rotation (thanks Julio!)
Fixed FlushKeys / FlushMouse not working on Linux.
I'm still having trouble compiling with the latest version of Code::Blocks / GCC: https://www.leadwerks.com/community/topic/14663-compile-problem-on-ubuntu-1604-using-codeblocks-c
Another build is available on the beta branch on Steam.
Fixed zip import behavior.
Fixed physics swept collision bug, waiting for confirmation this fixed other reported problems.
Kinematic joint rotation not fixed yet.
Updated to Steamworks 1.41
Updated to latest version of OpenVR
Code::Blocks C++ project not updated yet.
We're getting close to release, so your reports (especially the ones with examples!) are appreciated.
Instructions for upda