Jump to content
  • entries
    941
  • comments
    5,894
  • views
    871,761

About this blog

Learn about game development technology

Entries in this blog

Terrain Tessellation

Our "dynamic megatexture" terrain system contains a lot of powerful capabilities we haven't yet been able to tap into. One advantage of this approach is that it works extremely well with hardware tessellated terrain. In fact, our terrain system was originally designed with this in mind, which is the main reason we have a slot allocated for a displacement map. This video shows my first-pass implementation of the technique. When a displacement map is assigned to a terrain texture layer, painti

Josh

Josh

Beta Update available

Things are very good on the business side of Leadwerks, so I wanted to take some time right now for some research and development so I can give you guys some new and shiny features. It's very interesting to me how the design of Leadwerks 3 has laid a foundation that allows us to do lots of new things that have never been done, and now I am getting to dig into some of those areas and explore.   I've decided the area I want to focus on is all under the banner of "outdoor rendering". The vegeta

Josh

Josh

Beefing up the Script Editor

Along with vegetation, Leadwerks 3.7 is planned to include new features that turn the script editor into a powerful IDE. Auto-completion makes it easier to remember the command you are looking for and greatly enhances coding productivity. A built-in project explorer is also being added to make it easy to quickly navigate to and open any script or shader file in your project.     These and other planned enhancements provide a powerful coding environment built seamlessly into Leadwerks Edit

Josh

Josh

Beta update available

A new update is available on the beta branch on Steam. This fixes the low-res terrain shader so it compiles on AMD cards. It also fixes a possible brush rendering crash having to do with the recent optimizations made to make uncollapsed brushes draw more efficiently.

Josh

Josh

Official Steam Controller Bindings

A default Steam controller configuration has been created for Leadwerks Game Engine and Leadwerks Game Launcher. It is recommended that you use the keys listed here for controlling your games. This will ensure that your game can be played seamlessly with either a keyboard or Steam controller.   WASD: Movement Left shift: Run C: crouch Tab: Map, inventory, etc. Escape: exit game or main menu Mouse wheel down: next weapon Mouse wheel up: previous weapon R: Reload Left mouse button: sho

Josh

Josh

Finished character model

I've received our finished "Merc" character, made exclusively for Leadwerks! Say hello:     He still needs a simple rifle weapon and some scripting to make him actually shoot and not just punch people with the butt of his gun. When that happens, watch out, he is going to be one mean enemy (or perhaps a valuable ally against the mutant hordes?)

Josh

Josh

Shifting to DLCs

As described previously, the open-market model store approach does not work for Leadwerks and I am shifting my focus to providing DLCs made by third-party authors. The first thing I want to do is create more consistent branding that all DLC model packs will use. Here's what I came up with:           I'm also developing terminology to apply consistently to say what the DLC contains. The meaning of "Material Pack" and "Model Pack" is obvious. "Action Figures" will refer to charac

Josh

Josh

Mercenary Action Figure released as DLC

The Leadwerks Mercenary Action Figure has been released as a DLC. Previously, I talked about how the Workshop Store was not selling much content, and that we need game-ready content to be available to use in Leadwerks. At the same time, DLC sales are quite good, which seems contradictory.   To date, this item has total sales of $299 since release and cost $2000 to produce. (Additional characters will be a bit cheaper if we reuse animations.) After Steam's cut, I've lost $1800 on this proje

Josh

Josh

Running Your Computers in 2016

I was optimizing and downsizing my computer systems yesterday, and I thought I would write a blog about how I keep my Windows, Mac, and Linux systems running, along with email on my iPhone.   Install Windows and Linux on Two Separate Hard Drives The best way to run Windows and Linux side by side is on two separate drives. Try anything else and you will run into trouble. You should unplug the other drive when installing the OS to make sure they don't interfere with each other. Use the boot

Josh

Josh

Three ways you can polish your game, without programming

In this blog I want to talk about some cheap and easy ways to give your players a deeper more memorable experience, without touching a line of code. Voice Acting Games have used off-screen voice actors for years to add character, tell stories, and create a setting with minimal investment. A good voice actor will give enough texture to the backstory that the player will make up the missing pieces in their own imagination. All it takes is a microphone and someone with a nice speaking voice. 

Josh

Josh

Development Days

Some of the Leadwerks Game Engine design was originally developed to run on PC and mobile. In order to supported multiple renderers (OpenGL and OpenGLES) I implemented a system that uses an abstract base class with an API-specific class derived from that: Texture OpenGLTexture All OpenGL code was contained in the OpenGLTexture class. This worked fine, and theoretically it would have allowed us to support multiple renderers within one build, like OpenGL and Direc

Josh

Josh

First performance demonstration

I am proud to show off our first performance demonstration which proves that my idea for the Leadwerks 5 renderer works. To test the renderer I created 100,000 instanced boxes. The demo includes both regular and a mock VR mode that simulates single-pass stereoscopic rendering with a geometry shader. The hardware I tested on is an Intel i7-4770R (for graphics too) which is a few years old. Now this is not a perfect benchmark for several reasons. There is no frustum culling being perform

Josh

Josh

First Animation Metrics

I got skinned animation working in the new renderer, after a few failed attempts that looked like something from John Carpenter's The Thing. I set up a timer and updated a single animation on a model 10,000 times. Animation consists of two phases. First, all animations are performed to calculate the local position and quaternion rotation. Second, 4x4 matrices are calculated for the entire hierarchy in global space and copied into an array of floats. To test this, I placed this code inside the ma

Josh

Josh

Sample Sliding Door Script in Turbo / Leadwerks 5

I've successfully converter the sliding door script over to the new API. This will all look very familiar, but there are some cool points to note. The entity mass can be retrieved and set with a property as if it was just a regular variable. Underneath the hood, the engine is making method calls. I decided to prefix most field names with "slidingdoor_" to prevent other scripts from accidentally interfering. The "enabled" value, however, is meant to be shared. The Entity is

Josh

Josh

Sprite Layers and the GUI

For finer control over what 2D elements appear on what camera, I have implemented a system of "Sprite Layers". Here's how it works: A sprite layer is created in a world. Sprites are created in a layer. Layers are attached to a camera (in the same world). The reason the sprite layer is linked to the world is because the render tweening operates on a per-world basis, and it works with the sprite system just like the entity system. In fact, the rendering thread uses the

Josh

Josh

Ultra Engine (Leadwerks 5) beta updated

A new beta is available. In this build I cleaned up a lot of internal stuff. I removed some parts of the engine that I want to redesign in order to clean up the source. JSON material files loaded from MDL files are now supported. Added ActiveWindow() command. if the game window is not the foreground window this will return null. The Steamworks and all dependent classes are temporarily removed. There's a lot of stuff in there I don't intend to use in the future like all the Worksho

Josh

Josh

Leadwerks 5 beta Update

An update for Leadwerks 5 is now available. The Vulkan data transfer system has been revised and is now simpler but uses more memory. Data is likely to be quadruple-buffered, but it's a fairly small amount of data and this isn't a big concern.  I fixed a bad bug where multiple threads were accessing a global variable in the Mat4::GetQuaternion function. This fixes the object flashing glitch that was visible in previous builds. The engine is updated to the latest version of Newton

Josh

Josh

Bone Attachments

In Leadwerks Game Engine 4, bones are a type of entity. This is nice because all the regular entity commands work just the same on them, and there is not much to think about. However, for ultimate performance in Leadwerks 5 we treat bones differently. Each model can have a skeleton made up of bones. Skeletons can be unique for each model, or shared between models. Animation occurs on a skeleton, not a model. When a skeleton is animated, every model that uses that skeleton will display the same m

Josh

Josh

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

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

Analysis of Google Draco

Google Draco is a library that aims to do for mesh data what MP3 and OGG did for music. It does not reduce memory usage once a mesh is loaded, but it could reduce file sizes and improve download times. Although mesh data does not tend to use much disk space, I am always interested in optimization. Furthermore, some of the NASA models I work with are very high-poly, and do take up significant disk space. Google offers a very compelling chart showing a compression ratio of about 95%: Ho

Josh

Josh in Articles

Ultra Engine glTF extensions

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

Josh

Josh in Articles

Lighting optimizations in version 2.31

I got the volume intersection tests working, and it won't be hard to extend this to make trigger and fluid volumes. The image below shows a point light divided up into six volumes. Each pyramidal volume represents the camera frustum of one face of the shadow cubemap. In version 2.3 and earlier, whenever an object moves within the spherical volume of the point light, the shadow is considered invalidated, and all six faces of the shadowmap are redrawn. This is why point lights are so expensive

Josh

Josh

OnLive Lives?

When OnLive was first announced, I thought it couldn't ever work, because of latency issues. After my recent networking work, I think it might actually be feasible. We had fast enough response times that we could play lagless games with server-controlled physics, which is similar to the way OnLive works. A lot of our tests were performed with intercontinental connections, and of course those will have significant latency. We found that when playing within 1000 miles of the server latency wa

Josh

Josh

lgui

I've never considered myself a fan of writing GUI code, but now that I have a small job I need to get it done for, I'm actually having a lot of fun with it. I've been tinkering around with Lua GUI code for two days, and I came up with a really neat system after lots of trial and error.   Controls A "control" is the name for a button, label, or other widget. A control is a Lua table. The programmer creates the controls they want and then inputs mouse coordinates and the left mouse butt

Josh

Josh

×
×
  • Create New...