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

About this blog

Learn about game development technology

Entries in this blog

The Workshop

The Leadwerks Workshop has been evolving over the last year, and here I will talk about how it came about and where we are going with this.   What We've Learned Use of the Leadwerks Workshop has increased since the last major revision. Encouraged by this, I have added additional tools that make it easier to make models game-ready, like convex decomposition and automatic hit boxes on character models. The Steam WebAPI has been very helpful and allowed me to create a nice web-based interface

Josh

Josh

The PC is changing

PC towers have been about the same since they became popular in the 1990's, replacing the previous horizontal form factor:   Cases have gone from beige to black, but very little else has changed.     PC towers tend to be designed for the old ATX style motherboards, which were first introduced in 1995:   PC cases are still designed primarily for this form factor, ignoring the fact that many internal components have changed. The sound and ethernet card are now typically built into

Josh

Josh

The path we are on

Previously, I have talked about my plans for Leadwerks and how to get there. In that blog I started with technical specs and went backwards with the path we would follow to achieve those goals. Now I have begun to put some of these ideas into practice and I want to review my plan with you.   I met with a very large academic institution a few months ago and talked about using Leadwerks to teach game programming. This is the whole reason I wrote this blog and did the research included therein

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

The Left-Hand Rule

Leadwerks uses a left-handed coordinate system. This means that if you hold your left hand as shown below, your middle finger, index finger, and thumb will point in the directions of the X, Y, and Z axes, respectively.     Rotations use the left-handed rotation rule. To predict the direction of positive rotation, curl your fingers on your left hand and point your thumb in the direction of the rotational axis. Your fingers will curl in the direction of positive rotation along that axis.

Josh

Josh

The Happenings

The Steamworks SDK has been updated with some new functionality I need to transition Leadwerks Workshop to the SteamUGC system. This will result in unlimited file sizes, more reliable downloads, and other new features. However, the documentation isn't updated yet, so I am going to wait for that before moving forward, and focus on non-coding things this week. Once the Workshop edits are finished and tested, Leadwerks 3.5 will be released.   At the same time, Jorn and I are working on the new

Josh

Josh

The great big beta update

The beta branch on Steam has received an update with some important changes. A new project template called "Tutorial Samples" has been added, which includes the files you need to complete the new tutorials found here. A new script, Main.lua, has been introduced to take over the main entry point of your program. As explained in detail here, this will have no effect on your existing projects. The screenshot publish feature is fixed. Flowgraph arguments no longer require the EnableLegac

Josh

Josh

The Financials of Custom Content

The Leadwerks Merc character, who I think will go down in history over the next few years second only to the infamous "Crawler", is an experiment. First of all, I wanted a completely custom-made character to developer AI with. This ensured that I was able to get the model made exactly to my specs so that we would have a template for other characters to follow. Fortunately, the script I wrote can easily be used with other models like Arteria's Strike Troop.   The quality of this model is rea

Josh

Josh

The Day After

I'm taking a short break before I swap GPUs to fix that ATI shader error.   There are now 110 Leadwerks Engine 2.3 users. I did not think the number would be nearly that many.   I am most interested now in documentation, tutorials, and examples as well as improving existing features. With C++, it wasn't worth diving too deep into game tutorials, because only 40% of the programmers would find it useful. Furthermore, it is harder to design useful game components that are easy for users to lear

Josh

Josh

The Asset Loader Class

In Turbo (Leadwerks 5) all asset types have a list of asset loader objects for loading different file formats. There are a number of built-in loaders for different file formats, but you can add your own by deriving the AssetLoader class or creating a script-based loader. Another new feature is that any scripts in the "Scripts/Start" folder get run when your game starts. Put those together, and you can add support for a new model or texture file format just by dropping a script in your project.

Josh

Josh

The Ancient Forbidden Knowledge of X11

The most interesting thing about the development of Leadwerks is digging into low-level X11 libraries that no one really understands. If the stock answers of "use GTK" or "use QT" were sufficient, this project would not be necessary. No one really knows how X11 works anymore, so it's like we are exploring an archaeological ruin and discovering ancient forbidden knowledge.     Here's me looking at the X11 documentation.     X11 doesn't really have a concept of non-embedded child wind

Josh

Josh

The Amazing Draggable Checkable Multiselectable Multidimensional TreeView with Icons

Last week I compiled the engine into a DLL and a static lib. That was pretty painless, and I have the project set up so it's easy to switch back and forth. I still haven't got Code::Blocks compiling right, which I will need for the Linux build. It can't seem to find any libs, but it's not too important yet.   After altering the behavior of the MaxGUI canvas slightly, I was able to load the engine DLL in BlitzMax and display 3D rendering on a windowed application. It's very easy to do this

Josh

Josh

TGIF

Happy Friday.     One thing I will point out is that success is much more about creative experimentation than it is about sheer willpower. You have a little control over willpower, but not a ton. It's much better to keep the same amount of effort and just be smarter about what you do, than to try really really hard. That means taking a lot of risks and experiencing a lot of small low-cost failures to find what works.

Josh

Josh

Textures in Vulkan

I finally got a textured surface rendering in Vulkan so we now have officially surpassed StarFox (SNES) graphics: Although StarFox did have distance fog. ? Vulkan uses a sort of "baked" graphics pipeline. Each surface you want to render uses an object you have to create in code that contains all material, texture, shader, and other settings. There is no concept of "just change this one setting" like in OpenGL. Consequently, the new renderer may be a bit more rigid than what

Josh

Josh

Textures in Leadwerks Engine 3

Textures in LE3 give you more control. You can retrieve all or part of any mipmap of a texture to system memory, edit the texture, then send it back to the GPU. Fortunately, the engine checks the bounds of the texture so you don't have to worry about producing any blue screens of death, as can happen when you're having too much fun with GPU memory.   Here's some simple code to retrieve the texture from video memory into a system memory bank, modify it, and send it back to the graphics card:

Josh

Josh

Textures and materials in Vulkan

I now have different materials with textures working in Vulkan. The API allows us to access every loaded texture in any shader, although some Intel chips have limitations and will require a fallback. This is interesting because some of our design decisions in Leadwerks 4 were made because we had a limit of 16 textures a shader could access. Terrain clipmaps were a good solution to this problem, but since the same limitations no longer exist it may be time to revisit this design. We could, for ex

Josh

Josh

Texture Load Plugins

Texture loading plugins allow us to move some big libraries like FreeImage into separate optional plugins, and it also allows you to write plugins to load new texture and image formats. To demonstrate the feature, I have added a working VTF plugin to the GMF2 SDK. This plugin will load Valve texture files used in Source Engine games like Half-Life 2 and Portal. Here are the results, showing a texture loaded directly from VTF format and also displayed in Nem’s nifty VTFEdit tool.

Josh

Josh

Texture Import Features

Since I am working with the Blender import pipeline and also getting artists onboard the Steam Workshop, it makes sense to work out any little details in the art pipeline that can be improved. One of these is the texture import process.   Leadwerks 3.0 was designed to function across PC and mobile, and one of the compromises that had to be made was texture compression. There is no universally supported texture compression format on mobile, while the PC has several variations of DXT compressi

Josh

Josh

Textfield Widget

It took a few hours to add scrolling to the textfield widget. Now when the caret moves beyond the bounds of the box, text will slide over to keep the caret visible. This really isn't much different from a full text editor. The script is available now on the beta branch on Steam and presently weights in at 381 lines of Lua code.     The Draw function is pretty short and easy to understand. I think most people will customize the appearance of these widgets more than the behavior: f

Josh

Josh

Text Area Widget

The text area widget is now available on the beta branch on Steam, for Windows and Lua only at this time.   The text area is a read-only widget at this time. However, the text is all selectable, and in the future will be able to be copied to the clipboard. This widget creates two scroll bars which appear only when needed, for horizontal and vertical scrolling. The multiline text selection and scrolling was pretty difficult to implement, but the results are really nice.     I'm not goin

Josh

Josh

Tessellation in Action

With tessellation now fully implemented, I was very curious to see how it would perform when applied to arbitrary models. With tessellation, vertices act like control points for a Bezier mesh that is subdivided dynamically in screen space. Could tessellation be used to add new details to any low-poly model? Here is a low-res character model with a pointy head and obvious sharp edges all around his silhouette: When tessellation is enabled, the sharp edges go away and the mes

Josh

Josh

Terrain Test

I borrowed Shadmar's terrain splatting shader. This is the result after fiddling around with it for a few minutes in Leadwerks 3. (No normal mapping yet, but that's easy to add.)   Physics can be added by generating a physics shape from the terrain model. It doesn't allow heightmap editing in the editor, but I think this will serve as a good solution until our super uber mega streaming terrain system is built.   Thanks to Shadmar for the assets.   Klepto is also looking into a few OpenG

Josh

Josh

×
×
  • Create New...