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

About this blog

Learn about game development technology

Entries in this blog

Global Illumination Research Pt 6

A "roughness" property has been added in the material editor. This is a simple slider with a value from zero to one. (The default material roughness value is 0.5, so all your existing materials won't turn into mirrors when the update comes). Changing the roughness value will have no visible effect unless an environment probe is visible in the scene, although I could modify the lighting shaders to make this control gloss in the specular calculation:     Two new commands have also been add

Josh

Josh

Fun with Stateless API

Leadwerks 5 / Turbo makes extensive use of multithreading. Consequently, the API is stateless and more explicit. There is no such thing as a "current" world or context. Instead, you explicitly pass these variables to the appropriate commands. One interesting aspect of this design is code like that below works perfectly fine. See if you can work through it and understand what's going on: int main(int argc, const char *argv[]) { //Create a model ;) auto box = CreateBox(nullptr); //Cre

Josh

Josh

Week 2

What an interesting first week. I compiled a C++ program for Android, made a programming language, learned about iPhone development, and figured out a lot of C++ stuff I did not know.   It's nice to see that a port to Android will work pretty much like I was hoping. I just write an abstract driver for every system, and have specific drivers that extends that class: class GraphicsDriver {} class GL4GraphicsDriver : public GraphicsDriver {}   Then when you have something like a surface tha

Josh

Josh

4.2 Beta

An early build of Leadwerks Game Engine 4.2 beta is available on the beta branch on Steam. This release will update the engine with the latest C++ tools and add new graphics and other features. Visual Studio 2017 support Compatible with the latest C++11 / GCC on Linux Refraction: apply "Materials\Effects\glass.mat" onto any object to see this in action. Heat haze: drag the heat haze emitter prefab into the scene to view ("Prefabs\Effects\heathaze.pfb"). Spotlight texture: you can

Josh

Josh

Lua in Leadwerks 5 is Solved

When considering the script system in Leadwerks 5, I looked at alternatives including Squirrel, which is used by Valve in many games, but these gave me a deeper appreciation for the simplicity of Lua. There are only a handful of rules you need to learn to use the language, it’s fun to use, yet somehow it does everything you could ever need. These were three big issues I had to solve. First, the Leadwerks 5 API makes extensive use of smart pointers, which our binding library tolua++ does not

Josh

Josh

Android Progress

I got touch input and text rendering working on Android. Happily, I have not encountered any issues with different behavior on any tested OpenGLES devices, including iOS. The framerate on my HTC Evo jumps around quite a bit, which appears to be an issue with the Java garbage collector. Framerate on iOS is a solid 60 FPS, so we should be able to get this sorted out.   Here's a video: http://www.leadwerks.com/werkspace/page/videos/_/leadwerks-engine-3/android-progress-r100   I also discover

Josh

Josh

A first look at entity scripts

In Leadwerks Engine 3, you can load a script and attach it to any entity. You can attach multiple scripts to any entity, and they will be called in the order they were attached. Right now, I am calling the script-side table "actor" because it is a little more descriptive than "object" but I'm not sure about all the syntax yet. Below is a sample script for a sliding door. When you attach this to a model, the script will control its behavior: ----------------------------- -- Sliding door sc

Josh

Josh

Where Angels Fear to Thread

Leadwerks Engine 2 is single-threaded. The engine performs one task at a time. The engine updates physics, then performs some other tasks, then renders the scene, waiting until each task if finished before moving onto the next one:   I have experience programming threads in BlitzMax, and it works pretty much the same way in C++. Leadwerks3D is taking full advantage of threads and multicore CPUs, splitting off any expensive tasks that can be run on separate threads.   Multithread program

Josh

Josh

Selective file inclusion (continued)

Based on a little observation, I've made the following changes to the publish routine on the beta branch: The FPS Player script has been updated so that the footstep sound files are explicitly named, so they don't get missed in the publish step. You will need to update your project to get the new script (or just copy FPSPlayer.lua to your project). There is now a checkbox to "Only include used files". If this is checked, then the new packing routine will be used, otherwise the old beha

Josh

Josh

Merry Christmas, and a look at our new headquarters

I hope everyone is having an awesome Christmas week. I'm taking a break from coding to show you our new office we moved into in November at the Sacramento Hacker Lab.   All decked out for Christmas:   Chris is pretending to work, but he's not fooling me:   So we changed the arrangement to make a reverse mullet. (Party in the front, business in the back):   The kitchen provides energy, both in the form of food and alcohol:   The common area:   The room-temperature beer flo

Josh

Josh

Gameplay!

The Leadwerks community project "Midnight Salsa" was one of my favorite things that came out of Leadwerks 2. Watching the videos of everyone collaborating across the globe was really interesting, and with Aggror's leadership they did pull off what they set out to do: Make a playable zombie FPS. However, there were some weak points that showed me where I could put effort and have it be the most useful.   When you go through the first set of doors, a carefully placed light above the door shin

Josh

Josh

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

Framework, Lua, and the programmers who love them

We're finishing up 2009 by resolving some longstanding design issues that haven't been particularly critical, but have weighted on my mind. Framework is not like the main engine. It's far more high-level, and is also the kind of code people want to customize. I don't like locking the user into my way of doing things. However, the interaction between Lua, C++, and Framework commands are a real issue, which we started to see immediately as Lua became available. This was resolved by compiling Frame

Josh

Josh

The path we are on

Previously, I have talked about my plans for Leadwerks and how to get there. In that blog I started with technical specs and went backwards with the path we would follow to achieve those goals. Now I have begun to put some of these ideas into practice and I want to review my plan with you.   I met with a very large academic institution a few months ago and talked about using Leadwerks to teach game programming. This is the whole reason I wrote this blog and did the research included therein

Josh

Josh

New game engine examples

The new game engine needs to roll out with some top-notch examples showing off what it can do. Here's what I want: First-person shooter Offroad racing game Space shoot-em-up side-scroller. Side-scoller platformer similar to the Contra Playstation game. Now what I can use your help with is finding good example games on YouTube or Steam that I can start designing these samples around. Post your ideas below!

Josh

Josh

Happy New Year

Today I added the visible guides in the editor for point and spot lights. I also tested out the new FBX converter, recompiled with the 2012 FBX SDK. It works. (There are no file format changes in the 2013 FBX SDK, so this will load everything.) Our character models still have to be rescaled, so I added a resize option in the model editor. That way models can be resized and the model file saved, so you don't have to rescale a model every single time you place it in the editor. Having models

Josh

Josh

Package Plugins and Mods

Leadwerks 4 supports compressed and encrypted game files in ZIP format, but there are many different custom package formats different games use. The plugin system in Leadwerks 5 allows us to create importers for these different package formats so we can access content directly from commercial games you have installed on your computer. The example below shows how to load a VTF texture from the game Half-Life 2 directly from the game's install files. First we need to load some plugins to deal

Josh

Josh

Leadwerks 3.4 Launch Prep

Leadwerks 3.4 will be launched as soon as AMD releases their new driver, preferably by Monday. The three big features this introduces are: Vehicles Water Built-in Workshop browser   As well as over 100 small fixes and improvements.   The launch will coincide with a week-long sale. The results of the sale will give me an estimate of cash flows for 2015 and let me make decisions about what to invest in the company and continued development.   Following the launch, we'll have a

Josh

Josh

Voxel Ray Tracing and Physically-Based Rendering

Light is made up of individual particles called photons. A photon is a discrete quantum of electromagnetic energy. Photons are special because they have properties of both a particle and a wave. Photons have mass and can interact with physical matter. The phenomenon of "solar pressure" is caused by photons bombarding a surface and exerting force. (This force actually has to be accounted for in orbital mechanics.) However, light also has a wavelength and frequency, similar to sound or other wave

Josh

Josh in Articles

Initial VR Implementation

As you probably noticed, I've been playing around with the Oculus Rift DK2 and it's really neat! With Klepto's help I was able to get it running and integrated into the engine very quickly. Beta support will be added soon so you can play with it yourself. Why is it beta? Because it is possible some behavior may change, particularly the way head rotation is handled. Also, it only works on Windows at this point. I'm waiting for OculusVR to add direct HMD rendering for Linux, because without

Josh

Josh

Future Ideas

Here are some of my thoughts on how a future engine might look. I am not devoting any time to this, and it would not come to exist for several years, but it's fun to think about technology and design:   I've been fascinated with the game "Fuel". This game has an enormous playable area that is streamed from the hard drive. You can drive for hours and barely cover a fraction of the map. For some reason the game has been given bad reviews. I played Motorstorm on the PS3, and I think Fuel is a lot

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

CSG Brushes vs. Point Entities

The built-in level design tools in Leadwerks3D are great for quickly sketching out a game level. Most of this remains unchanged from the design of 3D World Studio, with a few extras like smooth groups and new primitive types:   When a point entity object type is selected in the side panel, the object creation widget changes to a simple cross hair:   The selection box with tabs that CSG brushes use are great for quickly moving, scaling, rotating, and shearing brushes, but they aren't tha

Josh

Josh

Project Manager

The Project Manager lets you manage multiple Leadwerks projects. A project includes assets, scripts, code, code projects for Visual Studio, Xcode, and Eclipse, along with your game's executable. The Project Manager lets you view and switch between your different projects.   Projects can be exported into a .zip file for easy sharing and archiving. You can even have Leadwerks3D scan all source code files and only include the asset files that your game actually uses. (I'm still adding the p

Josh

Josh

Louie, Lua

Below is raw output from the Lua debugger. It displays all variables, tables, and functions in the Lua script call stack. This will be displayed in a nice treeview interface that looks much better, but I found this terribly exciting.   You'll notice that tables don't get expanded, even though I have the ability to display all the values in a table. The reason they don't get expanded is because tables can contain tables, including tables that might be found elsewhere in the program. This ca

Josh

Josh

×
×
  • Create New...