Hello!
This blog was created in 2012, but here I am resurrecting it. The option to create a new blog disappeared when I deleted another old blog that had no articles.
Anyways, please ignore the previous entries, because they are really old and outdated. The code shown in those blogs do not work with LE 4, and I don't even think I have the engine that was released around 2012.
To catch up a bit; back then I ended up doing contract work with various game engines, then getting the jo
We are back and we have some good news for you...
First, we have released update 1.5.2 for SALVATIONLAND, which includes both various technical changes, as well as a very important improvement. And this improvement requires an advanced description.
This month marks 6 years since the team and I launched Leadwerks Game Engine for the first time and started working on it. It's been a long time, isn't it? And during this time, we had a chance to conduct a lot of experiments and face both t
With the new engine coming along and me noticing limits with Cyclone's current architecture, it's time for me to start thinking about the mistakes I've made and how would avoid repeating them with the new engine. Luckly, Ultra Engine is far more flexible than Leadwerks thanks to smart pointers and the event system. I wish to share some of my plans going forward.
Log, Log, Log Everything!
I personally never look at my log files. I instead look at the CMD output and the debugger to see w
I haven't been blogging much because I am making so much progress that there would be too much to cover. In this article I will talk about one little system I spent the last week on and show the improvements I have made to the workflow over Leadwerks.
In the asset editor, when the root of a model is selected, a "Collider" field appears in the physics properties. You can use this to quickly calculate and apply a collider to the model.
The convex hull collider includes an option fo
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
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
This update is the latest in a series of major updates. Now the game will only be supported with small patches as needed.
We have come a long way together with you, dear players. Thanks for your support!
Changelog:
- Cleaned up about ~500 megabytes during resource check
- Added junk buyer at the level "Gamsk - 2"
- Police chief at the "The Beginning" level now plays an animation during his first appearing
- Optimized game assets
- Optimized levels
- Added new character voic
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
Despite the intensity of the final tests, at the launch of SALVATIONLAND we made several serious mistakes that led to crashes and general technical problems. With this huge update, we want to prove that we care about players' requests, and game development is not just a hobby for us, but a full-fledged, important part of life. In addition to fixing various bugs, we also made a number of major structural overhauls that changed the pace of the game in its first quarter, as well as added several tr
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.
The "disc" is divided into two sides: the first contains music by various artists, used in the gameplay, and the second - author's ambient themes, recorded specifically for the game. Soundtrack is supplied free of charge. Enjoy!
https://store.steampowered.com/app/2326950/SALVATIONLAND_Soundtrack
The game is released!
Thanks to everyone who has been with us since Early Access started!
We hope you enjoy the final result.
You can buy and download game with 15% discount here: https://store.steampowered.com/app/1807590/SALVATIONLAND
What will happen next?
We plan to support the game with small updates, and in parallel with this... Let's just say that no one plans to stop at one game in the team. As soon as we have something to tell you, we will definitely do it in the St
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: