Jump to content
  • entries
    941
  • comments
    5,894
  • views
    868,070

About this blog

Learn about game development technology

Entries in this blog

Documentation Revision

The new docs system is mostly working now: https://www.leadwerks.com/learn?page=API-Reference_Object_Entity_SetPosition   Features: Treeview list of all tutorials and API classes and functions. Alphabetical index (generated automatically from the table of contents). Search (with autogenerated search index). Switch back and forth between languages, with cookies to remember your preference. Entire examples are automatically selected when you click on them. Todo: Table of c

Josh

Josh

Evolution

This is a good time to write about some very broad changes I expect to come about over the next year in our community as our new engine "Turbo" arrives. Turbo Game Engine, as the name suggests, offers really fast performance using a groundbreaking Vulkan-based renderer, which is relevant to everyone but particularly beneficial for VR developers who struggle to keep their framerates up using conventional game engines. I want to help get you onboard with some of the ideas that I myself am processi

Josh

Josh

Plugins Expanded

This month I was working on a lot of NASA projects using Leadwerks. My goal with this is to build up enough business that I can start hiring more people to help. It's nice to make money using my own tools, and it gives me a lot of ideas for the new engine. This morning I felt like experimenting with the design of plugins in the new editor a bit. I came up with two types of plugins. One will add an new menu item to the model editor that flips the normals of the current model. The ProcessEven

Josh

Josh

Animation Tweening

Leadwerks 5 uses a different engine architecture with a game loop that runs at either 30 (default) or 60 updates per second. Frames are passed to the rendering thread, which runs at an independent framerate that can be set to 60, 90, or unlimited. This is great for performance but there are some challenges in timing. In order to smooth out the motion of the frames, the results of the last two frames received are interpolated between. Animation is a big challenge for this. There could potentially

Josh

Josh

Ultra Engine Client App

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

Josh

Josh in Articles

Voxel Cone Tracing Part 4 - Direct Lighting

Now that we can voxelize models, enter them into a scene voxel tree structure, and perform raycasts we can finally start calculating direct lighting. I implemented support for directional and point lights, and I will come back and add spotlights later. Here we see a shadow cast from a single directional light: And here are two point lights, one red and one green. Notice the distance falloff creates a color gradient across the floor: The idea here is to first calculate direc

Josh

Josh

Project Management

Leadwerks3D has built-in project management features that assist the user to create, share, and publish projects. When you first start editor for the first time, the New Project wizard is displayed. You can select a programming language and choose which platforms you want the project to support. It is possible to add project templates for new languages, too.   Once a project exists, you can go into the project manager and switch projects. This will cause the editor to use the project dir

Josh

Josh

How to create a material

Step 1. Add your image files into the project directory. I just added a bunch of TGA files, and they show up in the editor right away:   Step 2. Right-click on a texture and select the "Generate Material" menu item.   Step 3. There is no step 3. Your material is ready to use. The normal map was automatically detected and added to the material.   Here it is in the material editor.

Josh

Josh

From Cartography Shop to Leadwerks 3.1

This is just a little walk down memory lane that pleasantly shows what has led to where we are today. Some of this predates the name "Leadwerks" entirely.   Cartography Shop (2003)   3D World Studio (2004)   Leadwerks Game Engine 2 (2008)   Leadwerks Game Engine 3 (2013)

Josh

Josh

Global Illumination Research Pt 3

The environment probe feature is coming along nicely, spawning a whole new system I am tentatively calling "Deferred Image-Based Lighting". This adds image-based lighting to your scenes that accentuates the existing deferred renderer and makes for higher quality screenshots with lots of next-gen detail. The probes handle both image-based ambient lighting and reflections.   Shadmar helped by implementing parallax cubemap correction. This provides an approximate volume the cubemap is rendered

Josh

Josh

Memory Management in Vulkan

Vulkan gives us explicit control over the way data is handled in system and video memory. You can map a buffer into system memory, modify it, and then unmap it (giving it back to the GPU) but it is very slow to have a buffer that both the GPU and CPU can access. Instead, you can create a staging buffer that only the CPU can access, then use that to copy data into another buffer that can only be read by the GPU. Because the GPU buffer may be in-use at the time you want to copy data to it, it is b

Josh

Josh

You Won't Believe what Analytics in Leadwerks Reveal

How do you like that clickbait title?   I implemented analytics into Leadwerks Editor using GameAnalytics.com last month, in order to answer questions I had about user activity. Here's what I have learned.   The number of active users is what I was hoping for. A LOT of people ran Leadwerks in the last month, but people don't usually use it every day, as the number of daily users is lower. The numbers we have are good though.   A lot of people use the Workshop to install models and othe

Josh

Josh

Beta update available

A new update is available on the beta branch.   The FPS player script has been fixed to allow throwing of objects when he is not holding a weapon.   The script flowgraph system's behavior with prefabs has been changed. Script connections between prefabs will no longer be locked in the prefab file, and can be made in the map itself. The map version has been incremented, and maps saved with the new format will not load until you update or recompile your game. The changes in this system may

Josh

Josh

Vegetation nation

I got my hands on the GDC showcase scene by Michael Betke, and it's much more beautiful than I thought. I used this scene to rewrite and test the vegetation rendering code. Collision isn't working yet, but it's built into the routine. The results speak for themselves.   Fortunately, Pure3D is soon offering a set of game-ready vegetation models, so you can create gorgeous landscapes like this.

Josh

Josh

HTML Renderer for Linux

An HTML renderer for Linux has been implemented. This adds the welcome window and full Workshop inteface for Linux. This will be available soon for testing on the beta branch.      

Josh

Josh

Exporting a glTF model from 3ds Max

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

Josh

Josh in Articles

Lighting in Vulkan

I have basic point lights working in the Vulkan renderer now. There are no shadows or any type of reflections yet. I need to work out how to set up a depth pre-pass. In OpenGL this is very simple, but in Vulkan it requires another complicated mess of code. Once I do that, I can add in other light types (spot, box, and directional) and pull in the PBR lighting shader code. Then I will add support for a cubemap skybox and reflections, and then I will upload another update to the beta. S

Josh

Josh

Some hints of 3.0

This is a quick blog to fill you in on some of the features planned for Leadwerks Engine 3.0.   -Any entity can be a physics body. The body command set will become general entity commands, i.e. Entity.SetVelocity(). You can make an entity physically interactive with Entity.SetShape( shape ).   -Any entity can have any number of scripts attached to it. The basic model script functions will be supported for all entities, plus specialized script functions for certain entities. For example,

Josh

Josh

Vegetation Part 3

Billboards, transitions, and rendering are now done, and as you can see in the screenshot below, the idea works great. In Leadwerks 2, this application would have used hundreds of megabytes of data to store all the individual 4x4 matrices of each object. In Leadwerks 3, the instances are generated on the fly, so the application uses no more memory than a map with a blank terrain:     Still to do: Fade out billboards as they approach max view distance. Add rows to break up generated

Josh

Josh

Very Low-Level Advancements

There are three low-level advancements I would like to make to Leadwerks Game Engine in the future: Move Leadwerks over to the new Vulkan graphics API. Replace Windows API and GTK with our own custom UI. This will closely resemble the Windows GUI but allow new UI features that are presently impossible, and give us more independence from each operating system. Compile the editor with BlitzMaxNG. This is a BMX-to-C++ translator that allows compilation with GCC (or VS, I suppose). This w

Josh

Josh

Smart Pointers Lesson

This is something I typed up for some colleagues and I thought it might be useful info for C++ programmers. To create an object: shared_ptr<TypeID> type = make_shared<TypeID>(constructor args…) This is pretty verbose, so I always do this: auto type = make_shared<TypeID>(constructor args…) When all references to the shared pointer are gone, the object is instantly deleted. There’s no garbage collection pauses, and deletion is always instant: auto thing = m

Josh

Josh

Voxel GI: Light Bounces

I implemented light bounces and can now run the GI routine as many times as I want. When I use 25 rays per voxel and run the GI routine three times, here is the result. (The dark area in the middle of the floor is actually correct. That area should be lit by the sky color, but I have not yet implemented that, so it appears darker.) It's sort of working but obviously these results aren't usable yet. Making matters more difficult is the fact that people love to show their best scr

Josh

Josh

Beta update available

A new build is available on the beta branch with the following changes: Fixed sidepanel tab switching bug. Improved compatibility with intel graphics. Fixes instance rendering bug with instance count over 256. Added terrain hardware tessellation.   To enable hardware tessellation, select the Tools > Options menu item, select the Video tab, and set the tessellation value. Terrain layers much have a displacement map to display displacement mapping. Each terrain layer has an

Josh

Josh

Viewport Navigation

I've got orthographic viewport navigation done. I decided to build some grid commands into the camera class so that the graphics driver itself can handle the grid rendering, rather than having the editor make a bunch of OpenGL calls in a callback function. The grid can be rendered from any angle, and the math was a little tricky, but I got it worked out. I paid extra attention to showing the border where the world ends. The sliders that pan the viewport are very accurate, and stop right at t

Josh

Josh

Games, games, games

Looking back at a recent blog, I talked briefly about my plans for 2016: My goals were the following: Paid Workshop items Release Game Launcher on Steam proper. More features.   These goals are actually linked together. Let's focus on the amount and quality of games being released for the game launcher. Right now, we have a lot of variety of simple games, and some that are very fun, but we don't have any must-play hits yet. As long as the reviews look like this, the game launc

Josh

Josh

×
×
  • Create New...