Jump to content
  • entries
    940
  • comments
    5,894
  • views
    864,004

About this blog

Learn about game development technology

Entries in this blog

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

Package Plugins

Many games store 3D models, textures, and other game files in some type of compressed package format. These can be anything from a simple ZIP file to a custom multi-file archive system. This has the benefit of making the install size of the game smaller, and can prevent users from accessing the raw files. Often times undocumented proprietary file formats are used to optimize loading time, although with DDS and glTF this is not such a problem anymore. Leadwerks uses built-in support for encr

Josh

Josh in Articles

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

Ultra App Kit 1.2 Released

Ultra App Kit 1.2 is now available on our site and on Steam. This is a bug fix update that resolves numerous small issues reported in the bug reports forum. To download the latest version, see My Purchases.

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

Vulkan on Mac with MoltenVK

When it comes to complex projects I like to focus on whatever area of technology causes me the most uncertainty or worry. Start with the big problems, solve those, and as you continue development the work gets easier and easier. I decided at this stage I really wanted to see how well Vulkan graphics work on Mac computers. Vulkan doesn't run natively on Mac, but gets run through a translation library called MoltenVK. How well does MoltenVK actually work? There was only one way to find out...

Josh

Josh in Articles

Cryptocurrency Now Accepted in Store and Marketplace

We now accept popular cryptocurrencies in our store and Marketplace through Coinbase Commerce. That's right, you can now buy software like Ultra App Kit using Bitcoin, Ethereum, Litecoin, Dai, or Bitcoin Cash (if you can figure it out!). Right now it's a novelty, but it's worth trying. Maybe by 2022 it will be your only option? Sadly, Dogecoin is not one of the currently supported coins. Soon?

Josh

Josh in Articles

Ultra Engine Player Input Features

There are three new features in the upcoming Ultra Engine (Leadwerks 5) that will make game input better than ever before. High Precision Mouse Input Raw mouse input measures the actual movement of the mouse device, and has nothing to do with a cursor on the screen. Windows provides an interface to capture the raw mouse input so your game can use mouse movement with greater precision than the screen pixels. The code to implement this is rather complicated, but in the end it just boils

Josh

Josh in Articles

Vulkan on AMD Graphics Cards

I have procrastinated testing of our new 3D engine on AMD hardware for a while. I knew it was not working as-is, but I was not too concerned. One of the promises of Vulkan is better support across-the-board and fewer driver bugs, due to the more explicit nature of the API. So when I finally tried out the engine on an R9 200 series card, what would actually happen? Would the promise of Vulkan be realized, or would developers continue to be plagued by problems on different graphics cards? Read on

Josh

Josh in Articles

Linux, You Changed Man

I recently fired up an install of Ubuntu 20.04 to see what the state of development on Linux is now, and it looks like things have improved dramatically since I first started working with Linux in 2013. Visual Studio Code looks and works great on Linux, and I was able to load the Ultra Engine source code and start compiling, although there is still much work to do. The debugger is fantastic, especially after using the Code::Blocks debugger on Linux, which was absolutely sadistic. (They're both u

Josh

Josh in Articles

Three technology products you should be using in 2021

Note: This article contains some referral links for affiliate systems that I added after writing it. My purpose for including them is so that I can learn how these systems work by participating in them, because I am interested in possibly implementing one of our own in the future. The article was written because these are all things I am using and recommend and I am very bored with the same old things. Except for VR, the last decade of technology has been pretty yawn-inducing. I think Silic

Josh

Josh in Articles

Rendering Text on Linux with Xft

Diving into the innermost workings of the Linux operating system is a pretty interesting challenge. Pretty much nobody nowadays implements anything with raw X11 anymore. They use QT, SDL, or for drawing Cairo, with Pango for text rendering. The thing is, all of these libraries use X11 as the backend. I need full control and understanding over what my code is doing, so I've opted to cut out the middleman and go directly to the innermost core of Linux.   Today I improved our text rendering b

Josh

Josh

Website Changes

I want to streamline some of this website. We went through a lot of changes since the release on Steam in 2014 and learned what works and what does not. The "Marketplace" is just called the default "Downloads" name now, and that literally is what it is for. It's a place to keep a permanent copy of your files. Paid files are still supported, and any purchased items are still available to download, but I do not have any aspirations of building this up unless it just happens spontaneously. Ins

Josh

Josh in Articles

Welcome to ultraengine.com

You probably have noticed that our entire community has been migrated from the leadwerks.com domain to our new ultraengine.com domain. In this article I am going to describe recent changes to our website, the process by which these decisions were made, and the expected outcomes. These are not just superficial changes, but rather it is a fundamental restructuring of the way our business works. This is the execution of a plan I have had for several years. When we first starting selling on Ste

Josh

Josh in Articles

How infinite terrain can be implemented in Leadwerks Engine 5

Gamers have always been fascinated with the idea of endless areas to roam.  It seems we are always artificially constrained within a small area to play in, and the possibility of an entire world outside those bounds is tantalizing.  The game FUEL captured this idea by presenting the player with an enormous world that took hours to drive across: In the past, I always implemented terrain with one big heightmap texture, which had a fixed size like 1024x1024, 2048x2048, etc.  However,

Josh

Josh

Final Thoughts on Ultra App Kit

Breaking the new engine up into sub-components and releasing them in several stages is something new. The reason for trying this was twofold: Steam now incentives competition for digital shelf space, unlike when Leadwerks was first released on Steam in 2014, when I was trying to build up my quality of presence and promote one app ID on Steam. I would like to get some new software out early before the full engine is finished. The beautiful thing is that Ultra App Kit all con

Josh

Josh in Articles

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

Vulkan Viewport in a GUI Application

Before finalizing Ultra App Kit I want to make sure our 3D engine works correctly with the GUI system. This is going to be the basis of all our 3D tools in the future, so I want to get it right before releasing the GUI toolkit. This can prevent breaking changes from being made in the future after the software is released. Below you can see our new 3D engine being rendered in a viewport created on a GUI application. The GUI is being rendered using Windows GDI+, the same system that draws the

Josh

Josh in Articles

Last Call for API Modifications

I'm finalizing the Ultra App Kit API, which is going to be the basis of the new engine's API. Naming commands themselves is always a bit of an art unto itself. Some things are named a certain way because it is common convention, like Stream::Seek() instead of Stream::SetPosition() and ACos() instead of ArcCosine(). Other times we have holdovers from old APIs or BASIC syntax like Stream::EOF() or String::Mid(). Should a class that has no SetSize() method use GetSize() or Size() for a me

Josh

Josh in Articles

Ultra App Kit beta updated with DPI scaling support

An update for Ultra App Kit beta on Steam is now available. This finishes the user interface scaling to support HD, 4K, 8K, and other resolutions. My original plan was to force an application restart if the scale setting was changed, but I found a way to dynamically resize the interface in a manner that gives natural results, so it now supports dynamic rescaling. That is, if the user changes the Windows DPI setting, or if a window is dragged to a monitor with a different DPI setting, the applica

Josh

Josh in Articles

2020 Year in Code

2020 was the most intellectually challenging year in my career. Many major advancements were invented, and 2021 will see those items refined, polished, and turned into a usable software product. Here is a partial list of things I created: Streaming hierarchal planet-scale terrain system with user-defined deformation and texture projection. Vulkan post-processing stack and transparency with refraction. Vulkan render-to-texture. Major progress on voxel ray tracing.

Josh

Josh in Articles

Scenes, prefabs, and the Lua state serialization that loves them

The beta testers and I are are discussing game programming in the new engine. I want to see C++, Lua, and C# all take a near-identical approach that steals the best aspects of modern game programming and ditches the worst, to create something new and unique. To that end, we are developing the same simple game several times, with several different methodologies, to determine what really works best. One thing I realized quickly was we really need a way to load prefabs from files. I started im

Josh

Josh in Articles

Voxel Ray Tracing and Physically-Based Rendering

Light is made up of individual particles called photons. A photon is a discrete quantum of electromagnetic energy. Photons are special because they have properties of both a particle and a wave. Photons have mass and can interact with physical matter. The phenomenon of "solar pressure" is caused by photons bombarding a surface and exerting force. (This force actually has to be accounted for in orbital mechanics.) However, light also has a wavelength and frequency, similar to sound or other wave

Josh

Josh in Articles

Leadwerks 5 Editor Extension Example

Our new editor is being designed to support user-created extensions written in Lua. I want Lua to work in our new editor the way MaxScript works in 3ds Max, to allow an endless assortment of new tools you can create and use. Now that the editor GUI system is well underway, I want to start thinking about how user-created extensions will work with our new editor. I'm going to lay out some theoretical code for how a road creation tool might integrate into the editor. First we declare a st

Josh

Josh in Articles

Leadwerks 5 Beta Update

A new update is available for beta testers. This update focuses on the GUI capabilities, mostly for interfaces created directly on a window, rather than 3D interfaces. We are moving from a Lua-driven GUI system to one coded more explicitly in C++. This will provide us with better documented behavior, easier portability, and a more responsive interface. Changes: GUI widgets no longer use Lua scripts. Each widget type has a C++ class, a creation command, and style constants. A

Josh

Josh in Articles

×
×
  • Create New...