Jump to content
  • entries
    941
  • comments
    5,894
  • views
    867,674

About this blog

Learn about game development technology

Entries in this blog

AI-powered Texture Generation in Ultra Engine

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

Josh

Josh in Articles

AI-Generated Game Textures and Concept Art

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:

Josh

Josh in Articles

Advanced Transparency and Refraction in Vulkan

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

Josh

Josh in Articles

Advanced Tessellation in Vulkan

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

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

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

Adding LOD to the Model Class

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

Josh

Josh

Accidental Masterpieces

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

Josh

Josh

A Week in Seattle: Steam VR, Gas Works, and the Strawberry Moon

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

Josh

Josh

A tale of optimization

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

Josh

Josh

A Story of IT

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

Josh

Josh

A second look at entity scripts

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

Josh

Josh

A Red-Letter Day

No matter what, tomorrow is a big day for the tech industry. What do you think will happen? http://windows.microsoft.com/en-US/windows-8  

Josh

Josh

A Red Letter Day

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

Josh

Josh

A Look Forward to 2018

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

Josh

Josh

A Look Back at 2017

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

Josh

Josh

A fresh new look...or a blast from the past?

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:

Josh

Josh

A First Look at the New Editor

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

Josh

Josh in Articles

A first look at Leadwerks GUI on Linux

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

Josh

Josh

A first look at entity scripts

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

Josh

Josh

4.5 Beta Updated

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/  

Josh

Josh

4.5 beta update 5

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

Josh

Josh

4.5 beta update 4

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  

Josh

Josh

4.5 Beta Update 3

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

Josh

Josh

×
×
  • Create New...