Jump to content
  • entries
    941
  • comments
    5,894
  • views
    870,469

About this blog

Learn about game development technology

Entries in this blog

Robotic Arm in VR Concept 2

Here is the second iteration of our VR robotic arm concept. This can be used for the safe planning of robotic motions and early detection of potential problems. VR gives us intuitive manual control with six degrees of freedom along with stereoscopic vision for superior spatial awareness.  

Josh

Josh

Reverting the Entity Script Field

Last week I tried implementing a new method of controlling entity script fields. I was not satisfied with the current drag and drop from the scene tree method. I tried a system that was based on the entity name, which is how we used to do things in Quake mods.   Several people pointed out that this had a negative effect on their workflow, due to the difficult of copying and pasting groups of linked objects. So I began implementing a system that would create unique names when needed.   I s

Josh

Josh

Rethinking the Workshop

As discussed before, sales in the Workshop Store have been measly compared to what the DLCs regularly do. People just don't want to use it. Without revenue coming in, I can't convince third parties that it is a good idea to sell through this system (it isn't), and no new products will get added. We need a large library of content to be available for use in Leadwerks, but this isn't working. So I am moving on to another approach.   The "Workshop" menu item in the website header has been pla

Josh

Josh

Resolution Independence

I figured out how to make our GUI resolution-independent so that the existing editor code will correctly create items with the same proportions. This was very difficult, and it works really well! Some images aren't scaled here, but the important thing is the existing code is working the same, with no changes.   When the GUI is scaled to 200%, the buttons are bigger and indented further in from the right / bottom edges. The code that creates them just calls the parent ClientWidth() minus 74

Josh

Josh

Resizable Vulkan Window

When a window in Vulkan resizes you have to manually delete the about a dozen objects and then recreate them with the new size. It's unbelievably complicated. They've pushed all the driver complexity onto the application, in an effort to simplify the job of writing drivers. I can see the advantage to this, because OpenGL drivers in the past were always inconsistent, but it is still shocking how many little details they expose in Vulkan. Just resizing a window and swapping the screen buffer invol

Josh

Josh

Resizable Viewports on Linux

The beta branch has been updated with experimental support for resizable viewports on Linux, including an option to switch to a single viewport. The object bar buttons have also been fixed to display tool tips properly.     You can try this now by opting into the beta branch on Steam. Let me know what you think.

Josh

Josh

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

Render-To-Texture with Vulkan in Leadwerks 5

In Leadwerks 4, render-to-texture was accomplished with the SetRenderTarget command, which allowed a camera to draw directly to a specified texture, while hiding the underlying framebuffer object (FBO). In the new engine we have a bit more explicit handling of this behavior. This is largely in part due to the use of Vulkan's bindless design, which greatly improves the context-binding design of OpenGL. The Leadwerks "Buffer" class was never documented or officially supported because the underlyin

Josh

Josh

Relocation

My productivity has not been good lately because I am agonizing over where to live. I don't like where I am right now. Decisions like this were easy in college because I would just go where the best program was for what I was interested in. It's more difficult now to know if I am making the right choice.   I can "go big" and move to San Francisco, which weirdly has become the capitol of tech. I lived there before and know all the craziness to expect. I used to work at 24th and Mission (be

Josh

Josh

Refocusing on the PC

Back when Leadwerks 2 was first launched, it was just a BlitzMax programming SDK, intended to be a modern replacement for Blitz3D. It turned out Blitz users generally did not want it, and instead the audience it attracted was C++ programmers who like graphics. A visual editor was introduced and it was made as good as possible for a product that started with the intention of just being a programming SDK.   Leadwerks 3.0 was launched with a strong emphasis on the tools that Leadwerks 2 lacked,

Josh

Josh

Reflections on the Steam Summer Sale

It's been an eventful first half of 2015, and the second half promises to be just as exciting. I'm happy to say the Steam summer sale was a big success. I haven't done the calculation yet, but this year's sale did a lot more than last year, and we keep adding more and more new users. So that makes me feel very good about the future.   I've begun researching a way to create our own built-in store based on Workshop and Steam microtransactions. This is the same system that TF2 uses for in-app

Josh

Josh

Reflections on Reflections

Now that I have the downsampled reflection data working, I can start casting rays. The cone step tracing is not a 100% perfect representation of physical light, but it gives a very favorable balance of quality and performance. Somehow I came up with a few formulas that eliminate light leaks and other artifacts. Quite honestly I did not think the results would be this good. Indoor / outdoor scenes with thin walls are very difficult to prevent light leaks in, but somehow it's working ve

Josh

Josh in Articles

Reflection Colors

An update is available for Leadwerks 5 beta on Steam that adds a World::SetSkyColor() command. This allows you to set a gradient for PBR reflections when no skybox is in use. I learned with Leadwerks 4 that default settings are important. The vast majority of screenshots people show off are going to use whatever default rendering settings I program in. We need a good balance between quality and performance for the engine to use as defaults. Therefore, the engine will use SSAO and bloom effe

Josh

Josh in Articles

Realistic Penumbras

Shadows with a constant softness along their edges have always bugged me. Real shadows look like this. Notice the shadow becomes softer the further away it gets from the door frame. Here is a mockup of roughly what that shadow looks like with a constant softness around it. It looks so fake! How does this effect happen? There's not really any such thing as a light that all emits from a single point. The closest thing would be a very small bulb, but that still has volume. Bec

Josh

Josh

Real-time Global Illumination: Introducing Latency

Since previously determining that voxels alone weren't really capable of displaying artifact-free motion, I have been restructuring the GI system to favor speed with some tolerance for latency. The idea is that global illumination will get updated incrementally in the background over the course of a number of frames, so the impact of the calculation per frame is small. The new GI result is then smoothly interpolated from the old one, over a period of perhaps half a second. Here's a shot of the r

Josh

Josh in Articles

Real-time Global Illumination: Background Updating

Previously I wrote about introducing latency to the voxel cone step tracing realtime global illumination system. The idea here is to improve performance and quality, at the cost of a small delay when the GI calculation gets updated. The diffuse GI lighting gets cached so the final scene render is very fast. Here's what a gradual GI update does. Of course, this will be running unseen in the background for the final version, but this shows what is actually happening: My new video pro

Josh

Josh in Articles

Real-time Global Illumination

I finally have a cool screenshot to show you of our new real-time global illumination working. Here is a comparison screenshot showing direct lighting only: Now there are still lots of small issues to worry about. Right now I am only using a single cone trace. More cones will improve accuracy, but I think light leaking is just always going to be a fact of life with this technique. Still, the results looks great, require no precalculation, respond to environment changes, and

Josh

Josh

Real Bindless Textures

Previously I talked about array textures acting as "bindless" textures, but there is an actual OpenGL extension that allows a shader to access any texture without the stupid texture binding / slot convention that limits OpenGL 4.0 shaders to a minimum of 16 textures. Implemenation was surprisingly easy, although Mac hardware apparently does not support this extension. When combined with the multi-draw commands in OpenGL 4.3, and some other tricks, it is possible to render multiple sets of object

Josh

Josh

Random Thoughts

I don't have a clear and obvious subject for this blog, but I haven't posted in a while, so I wanted to write something. I've been getting in a lot of hours of development. My schedule on most days is wake up around 7, answer emails or test code on my Mac at home, then head over to the office at 10. Chris usually comes in right around then (we aren't too strict on schedules) and usually hangs around until around 6. I leave anywhere from 6-9 (and totally miss the rush hour traffic), go home,

Josh

Josh

Putting the finishing touches on Leadwerks for Linux

I'm happy to say that Leadwerks now supports the entire process of making games natively on Linux. Let's take a quick tour through the process. First, we create a new project in the project wizard. The project wizard will detect project templates (you can make your own) and let you make a game based on Lua script, or on a combination of C++ and script: Step two is to make your game. Fortunately, you've got everything you need built into a single integrated editor, including script and s

Josh

Josh

Pump up the volumes

Shader class...done. Surface class...done (pretty much).   One change in LE3 is the addition of .shader files. This is just a text file with a list of shader components: vertsource="mesh.vert" fragsource="mesh.frag" Your material file then just has to reference a single file: shader="mesh.shader" Of course, you'll be able to just drag the shader file onto the material shader property in the editor to assign it. You will never have to use Notepad, for anything.   Now working on

Josh

Josh

Publish your games directly to Steam with the Leadwerks game player

One of the coolest things I'm seeing in Leadwerks 3 is a lot of minigames being made. These are finished products, without super high expectations, but they are complete, don't take long to make, and some are quite fun. Seeing these gave me an idea for a feature that's been in development in the background for some time, and when you see what it does, it will explain some of the design decisions I've made over the last few months.   The next build on the beta branch on Steam will support Lua

Josh

Josh

Properties, Round 2

As I always do when making design decisions, I tried out several approaches to the properties dialog. Previously, I wrote about embedding it in the side panel, below the scene browser. I liked being able to quickly modify object properties, but I couldn't drag assets like textures and materials from the Asset Browser to the Properties Editor, because they were under different tabs in the side panel. Because of that, I popped the Properties Editor back into its own tool window.   The exper

Josh

Josh

Properties Dialog

After putting together a pretty complete model of how the logic editor would work, I found myself unsatisfied with the properties dialog. I originally intended to make a standard properties dialog that opened in a separate window, with "OK", "Cancel", and "Apply" buttons. However, the logic editor and properties dialog were both being opened in separate windows that were a child of the main window, with no strict draw order between the two of them. I found it confusing to select an entity in

Josh

Josh

Properties and the editor interface

The properties editor in Leadwerks3D is a live dialog. Your changes are shown instantly in the editor. If multiple objects are selected and their properties do not have the same values, the property interface will show an "indeterminate" state until the value is changed:   When an indeterminate value is changed, the new value is applied to all selected objects. Since they now have a matching value, it is now shown in the dialog. You can use this to move objects along a single axis, witho

Josh

Josh

×
×
  • Create New...