Environment probes are now available on the beta branch. To access them, you must set the "UnlockBetaFeatures" setting in the config file to 1, then start the editor. Environment probes are available in the "Effects" object creation category.
Environment probes should be placed with one in each room. Use the object scale to make the probe's volume fill the room. (Like decals, probes will display a bounding box when selected.) You do not have to worry about covering every single space as
Virtual reality rendering is very demanding on hardware for two reasons. First, the refresh rate of most VR headsets is 90 hz instead of the standard 60 hz refresh rate most computer monitors operate at. This means that rendering must complete in about 11 milliseconds instead of 16. Second, we have to render the scene twice with two different views, one for each eye. Without any special optimizations, this roughly means that we have to pack 16 milliseconds worth of rendering code into five milli
After about four days of trying to get render-to-texture working in Vulkan, I have everything working except...it doesn't work. No errors, no clue what is wrong, but the renderer is not even clearing the depth attachment, which is why the texture read shown here is flat red.
There's not much else to say right now. I will keep trying to find the magic combination of cryptic obscure settings it takes to make Vulkan do what I want.
This is very hard stuff, but once I have it working
A new update is available for beta subscribers. Transparent materials are now supported. Unlike the old deferred renderer, our new clustered forward renderer supports transparency really really well! You can add these in a JSON material file with a Boolean property called "transparent" set to true:
"transparent": true
There are no separate blend modes now, since pre-multiplied alpha allows alpha and additive blending in a single pass. This is actually a really simple technique but for som
One of the downsides of deferred rendering is it isn't very good at handling transparent surfaces. Since we have moved to a new forward renderer, one of my goals in Leadwerks 5 is to have easy hassle-free transparency with lighting and refraction that just works.
Pre-multiplied alpha provides a better blending equation than traditional alpha blending. I'm not going to go into the details here, but it makes it so the transparent surface can be brighter than the underlying surface, as you can
Today I implemented the last two compound primitives. Tubes are the same as in 3D World Studio, with parameters for the number of segments and thickness. Since the Leadwerks3D editor supports smooth groups, another new compound primitive has been added. A torus is a "donut" shape. These can be used to make curved pipes and other things. Here are the two compound primitives, side by side:
Smooth groups and new primitives in Leadwerks3D allow you to create new kinds of geometry which we
These are the top-ten top grossing items in the Leadwerks Workshop Store over the last three months:
Nature Model Pack
SciFi Materials 1
Modern Sewer Construction Kit
Zombie Action Figures
Old Furniture Pack
SciFi Materials 5
Mercenary Action Figure
Morgue
Strike Troop
The Stalker
First of all, we can see that outdoor vegetation and rocks sells best. This is consistent with what I have seen with our DLCs and with products in the past.
We also see four c
The script editor and Lua implementation is very close to being a usable programming environment. You can actually see the pointers to the C++ objects you create, and step through code. It's still missing features, but the parts I was worried about are working.
I am adding Lua commands like crazy, and it's easy to keep track of them because they all reside in one header file. The function overloading is great, as you can see in my example here, where I use a single float value to set the
While working with zlib, I implemented the package system, and it turned out really cool. Here's some stuff you can do
First, let's load the package and register it in the file system:
Package* pak = ReadPackage("mystuff.pak"); //Read the package
RegisterPackage(pak); //Register package into file system
Read a file from a package, just as if it were on the hard drive:
Stream* stream = ReadFile("mystuff/new document.txt"); //Read a file straight out of the package!
Write a file t
I thought I would take a minute to write down some of the things I have learned about releasing software on Steam, in order to help with your game releases.
First of all, always wait a week after you are "finished" to release a major update. This is because you will always find little problems, and sometimes major ones, after you think you've finished everything. Leadwerks 3.6 was scheduled for release at the start of this week, as far as I knew everything was working, but I knew to give i
Yesterday I tried a plugin I've been meaning to try out for a long time, Steam Sign-in for IPB. It worked without a hitch and I was able to easily figure out how to locate a Steam ID from a forum account, and vice versa. You can sign straight into Leadwerks using your Steam ID, or you can add a Steam ID to your existing account. (See "Edit Profile".)
The gallery, videos, Workshop, and games sections will now correctly link to your Leadwerks profile page. Notice when you click on the auth
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
Crowd navigation is built into Leadwerks3D. You just set a destination, and your characters will automatically travel wherever you tell them to go. I think having navigation built into the engine will give us better results than a third party add-on would. We can automatically recalculate sections of the map that change, AI script functions can be called when certain events occur, and the code to control characters is extremely simple.
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.
In designing the new engine, I have found that there are three distinct types of optimization.
Streamlining
This is refinement. You make small changes and try to gain a small amount of performance. Typically, this is done as a last step before releasing code. The process can be ongoing, but suffers from diminishing returns after a while. When you eliminate unnecessary math based on guaranteed assumptions you are streamlining code. For example, a 4x4 matrix multiplication can skip the calc
Note: This article contains some referral links for affiliate systems that I added after writing it. My purpose for including them is so that I can learn how these systems work by participating in them, because I am interested in possibly implementing one of our own in the future. The article was written because these are all things I am using and recommend and I am very bored with the same old things.
Except for VR, the last decade of technology has been pretty yawn-inducing. I think Silic
C++11 modernizes the C++ programming language with many new features and techniques. Below are just a few of the new ways you can use C++ with Leadwerks.
auto
You can automatically declare a new variable type by the data that is assigned to it:
auto i = 42; // i is an int
auto l = 42LL; // l is an long long
auto p = new foo(); // p is a foo*
Here's a more practical use that saves a lot of typing. The code below:
std::map<std::string, std::vector<int>> map;
for
As I work with the new engine more and more I keep finding new ways it makes life happy and productive.
Smart Pointers
I have talked about how great these are at length, but I keep finding new reasons I love them. The behind-the-scenes design has been a lot of fun, and it's so cool to be able to write lines of code like this without any fear of memory leaks:
LoadSound("Sound/Music/fully_loaded_60.wav")->Play();
What do you think that code does? It plays a sound, keeps it in m
First, I was experiencing some crashes due to race conditions. These are very very bad, and very hard to track down. The problems were being caused by reuse of thread returned objects. Basically, a thread performs some tasks, returns an object with all the processed data, and then once the parent thread is done with that data it is returned to a pool of objects available for the thread to use. This is pretty complicated, and I found that when I switched to just creating a new return object each
The animation update routine has been moved into its own thread now where it runs in the background as you perform your game logic. We can see in the screenshot below that animation updates for 1025 characters take about 20 milliseconds on average. (Intel graphics below, otherwise it would be 1000 FPS lol.)
In Leadwerks 4 this would automatically mean that your max framerate would be 50 FPS, assuming nothing else in the game loop took any time at all. Because of the asynchronous threa
Most of the prizes are now shipped, and I am just cleaning up a few pieces of missing information for shipping. In order to ship posters, I need a full name, which I have requested from onaid, MDGunn, Evayr, and Graham. I also am missing a shirt size for Garlic Waffle and MDGunn. I have not received any shipping info from MartyJ, or else I missed it.
I found some mailing tubes from ULine to send posters in, at about $0.75 each. If you are receiving a sticker it will be included in the tu
This isn't really a fancy PR post that's been carefully thought out, more just a quick update of what I've been doing.
A third party firm was contracted to provide a Debian package for Leadwerks. We tried to do it in-house, but were unsuccessful. I expect it to go live next week, at which point I will have a final Kickstarter update and start the Linux push in earnest. I've been fairly quiet about it because I wanted to make sure things worked, and I was also waiting for the distribution
Here are some of the things from my childhood that I still find weirdly fascinating. Bringing that same feeling into Leadwerks is something I have long driven towards. More on that later.
I recorded some clips from Dave's latest version of his scene he is working on. Somehow he managed to get more detail and faster speed. The octree optimizations in version 2.32 help a lot here. The renderer is really good at dealing with lots of small objects strewn across a scene, even if it did take some trouble before we got it working completely right. So here's a short video we'll be using to showcase the capabilities of Leadwerks Engine:
Please share this on Facebook, Twitter, YouT
One month ago I began work to investigate what it would take to bring Ultra App Kit, the foundation for our new generation of game development tools, to Linux. Today I am happy to share my progress with you and discuss some of the things I have learned.
Developed by MIT in the year 1984, X11 is an interesting beast that is easy to start with, but can become quite difficult once you get into the details. (Wayland support is of course an obvious step in the not-too-distant future but I have t