As I have explained before, I plan for Ultra Engine to use glTF for our main 3D model file format, so that your final game models can be easily loaded back into a modeling program for editing whenever you need. glTF supports a lot of useful features and is widely supported, but there are a few missing pieces of information I need to add into it. Fortunately, this JSON-based file format has a mechanism for extensions that add new features and data to the format. In this article I will describe th
I have two goals for the art pipeline in the new game engine.
Eliminate one-way 3D model conversions.
Use the same game asset files on all platforms.
In Leadwerks, 3D models get converted into the proprietary MDL format. Although the format is pretty straightforward and simple, there is no widespread support for loading it back into 3D modeling programs. This means you need to keep a copy of your 3D model in FBX and MDL format. You may possibly want to keep an additional fi
Here's a cool effect I don't know why I didn't think of this sooner. This shader uses parallax occlusion and a trick similar to that in the weeper (22a_weeper). The idea is that you can get a cheap refraction effect by multiplying the texture coordinates of the diffuse texture with the normals (naturally you'd have to establish the diffuse "outcolor" after you establish the normals). It looks something like this:
float amplitude = 0.1;
vec4 outcolor = texture(texture0,ex_texcoords0 + normal.x
Package plugins are now supported in Ultra Engine 1.0.2. This allows the engine to handle other package formats besides just ZIP. In order to test this out, I created the Quake Loader plugin, which currently supports the following formats used in the original Quake game:
PAK
WAD
BSP (textures)
SPR
LMP
Why Quake? Well, the original Quake game is what got me into game development through modding, but Quake is also great for testing because it's so weird.
Took some time to figure out the best approach to do this but I've got it now.
To start with I created components that are all the same size. I am using 16x16x16 components. The voxel terrain is 128^3 so dividing that evenly is 8^3 components. In this image there is 512 of them. The red are inactive and the green are active (they have a model the represents the surface). This posed a problem for very large terrains. I would need a component size small enough so that LOD and real-time
After months of work on various base classes I have finally started to re-build my game in Ultra. There is still a lot of work to do to these classes (voxel terrain especially) but my aim is to keep the ball rolling by getting them to a workable state so I can build a playable game and then work on fine tuning later. Plus, I find it more fun to fine tune classes when there is a working game at your finger tips rather than just a bland test project.
I started off with voxel terrain. Basic
I wanted to take some time to investigate geospatial features and see if it was possible to use GIS systems with Ultra Engine. My investigations were a success and resulted in some beautiful lunar landscapes in a relatively short period of time in the new game engine.
I have plans for this, but nothing I can say anything specific about right now, so now I am working on the editor again.
Leadwerks had a very well-defined workflow, which made it simple to use but also somewhat limi
I'm working on a editor which translates english into C++ for Ultra Engine in realtime.
The idea is to make using Ultra Engine really easy, and it should suit beginners as well as advanced users.
Over time I plan to make it an universal human language to computer language translator which can be configured to use any game engine or other engine.
I'm also wondering if a commanding sentence is more easy than an spectating sentence, but perhaps both can be used to make it suit all cases.
I started using Ultra Engine on 2023-01-18. Learning to use the engine has been really easy.
The documentation is very clear and I can search for keywords I want to learn about. Each command has a fully working example, so I can quickly copy-paste and try the code.
The installer is also amazingly fast and automatic, and updating to the latest engine is just a click away. Updating my projects to use the latest version is also fully automatic by clicking on the yellow sign.
The supp
This diary counts so much steps to reach a good experience of car driving with Leadwerks 4.6, that it just felt so often like unreachable.
So as we know the car is built with 8 joints, 4 hinge joints for the tires + 4 slider joints for the dampers
I just thought last week about implementing a new little trick like using a spring joint more to connect the visible car to the invisible body of the car.
Set the mass to about 300 (usually to heavy for joints) and set the Gravit
In this post, I want to introduce you to my GitHub repository: https://github.com/klepto2/UltraEngineUtilities
Currently, there is not that much available, but I am working on adding more utilities and helper classes, which will help to work with UltraEngine. I had the privilege to be one of the first users of UltraEngine and was able to see the enormous amount of potential right from the beginning. So with the repo, I want to give some of the small or bigger helpers I have developed or ma
I'm pleased to announce that Ultra Engine SDK Early Access is now available. Four years ago, I set out to solve the performance problems I was seeing while working on virtual reality projects at NASA. Ultra Engine is the product of a lot of intense research and development during which I invented a new architecture designed for the way modern graphics hardware works. The results exceeded my wildest expectations, providing Ultra Engine with order-of-magnitude faster rendering performance than Lea
Instead of settling for one way only to voxelize a terrain I decide to make it possible to select between a few of them depending on what was required. They're are basically just two methods, forward or backward.
enum VoxelMethod {
VOXEL_METHOD_FORWARD,
VOXEL_METHOD_FORWARD_CONTOUR,
VOXEL_METHOD_BACKWARD,
VOXEL_METHOD_BACKWARD_CONTOUR
};
Forward starts with a parent node and checks each corner against some function that says if the corner is above or below some user defined surface.
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:
As I have stated before, my goa for this game enginel is not to build a marketplace of 3D models, but instead to just make sure our model loading code reliably loads all 3D models that are compliant with the glTF specification. I started testing more 3D models from Sketchfab, and found that many of them are using specular/gloss materials. At first I thought I could just fudge the result, but I wasn't getting very good results, and the Windows 10 3D Object Viewer was showing them perfectly. This
I've been working hard getting all the rendering features to work together in one unified system. Ultra Engine, more than any renderer I have worked on, takes a lot of different features and integrates them into one physically-based graphics system. A lot of this is due to the excellent PBR materials system that Khronos glTF provides, and then there are my own features that are worked into this, like combined screen-space and voxel ray traced reflections.
Anyways, it's a lot of di
Autodesk 3ds Max now supports export of glTF models, as well as a new glTF material type. The process of setting up and exporting glTF models is pretty straightforward, but there are a couple of little details I wanted to point out to help prevent you from getting stuck. For this article, I will be working with the moss rocks 1 model pack from Polyhaven.
Getting geometry into 3ds Max is simple enough. I imported the model as an FBX file.
To set up the material, I opened the compa
As the first release of Ultra Engine approaches, it seems clear that the best way to maximize its usefulness is to make it as compatible as possible with the Leadwerks game engine. To that end, I have implemented the following features.
Native Loading of Leadwerks File Formats
Ultra Engine loads and saves DDS, glTF, and OBJ files. Other formats are supported by plugins, both first and potentially third-party, for PNG, JPG, BMP, TGA, TIFF, GIF, HDR, KTX2, and other files. Additionally,
For the past few months I've been working on Voxel Terrain for Ultra. I started by creating an octree whose parent node encapsulates the bounds for the entire terrain and must be a perfect cube with dimensions that are a power of two. This ensures all child nodes can be neatly subdivided. If a more rectangular terrain is required the octree creates more than one parent node to make up the rectangle.
The next step was to subdivide the parent node to a level where each node would represent
I've spent the last few months pressing buttons, clicking joysticks and shaking my computer mouse to solve the solution input for Cyclone. Back when it shipped in June, I've created a system that allowed users to assign keys to actions, in which the game would detect as input. My player code never knew what button was pressed; it just knew what action was caused. This is very similar to how Steam Input works.
There were a few flaws with my original system. Some of which didn't surface until
As a teenager, I've spent thousands of hours with the Source SDK. It was really cool how Valve gave people the real tools to develop and create maps and mods. Overtime I got to see and take apart games to see how they actually work.
Overtime, the indie engine market took over, and making Source mods is now just a terrible experience. Hammer crashes more frequently and the SDK branch of the engine has old bugs that were never patched. I want the excitement I had of making maps and cool featu
Considering this blog as a diary of progress about car simulation with Leadwerks,
I had the dream to simulate those desert crawlers able to climb on sharperned hills with a lot of impuls,
Swinging on the roads as they're light, allowing the player to discover rapidly a large part of the map.
Technically all the features (directions, dampers, smoothing, acceleration) get simplified but adjusted to be in a good balance.
The car may be overpowered but it's fun!
For the last for years I've been lurking in the forums waiting patiently for the release of Ultra. I thought I'd be a good time to start up my blogs again about The Seventh World. The game that has been in the works for over a decade! I started this game in the Leadwerks 2 days. It started off as a very simple game but as I'm sure you're all aware, simple ideas can quickly grow into monsters of an undertaking if you let them!
A few years ago, as I started fleshing out gameplay I