Overview There are many topics covering the concept behind fixing your time step. Last time I read them was many years ago and having just re-read them I just realized they already cover about 50% of what I planned to cover, but while they do give implementations and explain certain concepts fairly well, people still [...]
[Update] Post Processing
Another progress update. There isn’t much special to say about what I have added because it is fairly standard post-processing, but I felt a few screenshots would be of interest for anyone following this project. I generally lay down a solid foundation before adding any features. I could have added post-processing long ago but I [...]
Passing Data Between Game States
Overview I mentioned in the previous article that passing data between game states is easy enough, and a many readers wanted to know how this could be done. So by popular demand I will provide 2 methods for how this can be done. I will also go into more detail on how state changes are [...]
General Game/Engine Structure
Overview The subject of how one should organize a game has been appearing a lot lately. Mainly these questions are focused on how to organize all the different parts of the game, such as the menu, the gameplay area, the bonus rounds, the story screens, etc. The most common proposal I see are switch cases [...]
DXT Compression Revisited
Pre(r)amble I made a previous post on a new method for compressing images into the DXT format. Various sources, including former NVIDIA employee Ignacio Castaño, agreed that the quality was not quite what it should be, and I began a more thorough investigation into why. Some of my test images also had a few bad artifacts [...]
iOS Support
A few weeks ago I purchased a MacBook Pro and later began the arduous process of porting the engine to iOS. My engine is organized into mini-engines, which are each their own projects (brought together into one master project) and build into separate libraries. The sound library, terrain library, physics library, etc. This keeps things [...]
New DXT Compressor (Algorithm Explained)
Overview DXTn is a type of image compression whose decompression is hardware-accelerated, which means you can send the same amount of texture information over the bus to the graphics card for a much smaller bandwidth fee since it does not need to be decompressed before the transfer. This makes DDS files using the DXTn compression [...]
[Progress Update] Shadows
The last progress I posted that included screenshots was when I added textures. That was a few months ago. While I have not had much to report since then, I have been no lazy bum. There were many advancements, but I wanted to wait until I had shadows before I posted anything major. I am [...]
Procedures for Safe Coding
Overview One of the things every programmer learns as he or she gains experience is how to avoid mistakes. Each time you make a mistake, you surely consider a way to avoid that mistake next time. As you gain experience, you start to discover practices that can help you to avoid a lot of mistakes. [...]
Tutorial: Tightly Culling Shadow Casters for Directional Lights (Part 2)
Continued… In the previous tutorial we came to the conclusion that the below image highlights the planes we want to pull towards ourselves, assuming we are the light source. Representing planes in 2D is not easy, but imagine each black line segment represents a plane that is coming from our eyes and is rotated along [...]
Tutorial: Tightly Culling Shadow Casters for Directional Lights (Part 1)
Overview Let’s start with a directional light. It casts shadows all over the scene. Since it is a directional light, it has infinite range and thus casts shadows everywhere. If we stretched a shadow map over the entire world, the shadow resolution would simply not be sufficient. We only want to casts shadows that the [...]
Progress Update
It has been a while since I posted any screenshots or updates. Rest assured, I am working on the engine constantly and have made a lot of progress, but mostly foundation work. A solid foundation leads to a stable and easily made future. In a previous company, long long ago, for the first time, I [...]
Style Guidelines
Overview I have been seeing a lot of questions lately about style. Ironically, a lot of people have in the past asked me to make a style guide. The reason I have refused for so long is because people can’t handle a style different from their own. It is such a personal subject for some [...]
Unity 3D
Yesterday I met the CEO and co-founder of Unity 3D, David Helgason. We have a mutual friend—Brett Seyler, who used to work at Garage Games/InstantAction and made the Torque game engine, but joined the Unity 3D team a few years ago. We talked for quite some time and he had his senior staff give me a [...]
3D Performance Tips
Overview This article will cover a lot of tips that can be used to speed up any 3D graphics system. Bottlenecks To understand why something makes your system faster, it is best to understand what makes it slow. An accurate table of which have the largest impacts can’t really be made because it depends [...]
Multi-Language Support/UTF
Overview Support for complex languages such as Chinese is crucial, and to avoid bugs and to provide the best support possible for exotic languages it is best to support them from the beginning, tempting as it may be to just use ASCII strings to get fast results so you can move on to the juicy [...]
[Progress Update] Normal Mapping/Transparency Mapping
In just a short time after getting texture support, support for transparency textures and normal textures has also been added. Because these subjects are well documented online, tutorials on how to support them will not be provided here. This is simply a progress update so that anyone following the progress of L. Spiro Engine can [...]
[Progress Update] Textures: That’s a Go
Support for textures on 3D models took quite a while to add. There were many sub-systems to put into place so that I could make a texture system easily upgradable to support multi-textures, normal maps, reflection maps, etc. These changes spread across the graphics library and model library, and included foundation groundwork related to the [...]
Organization for Multi-platform Support
Overview Support for multiple platforms is a huge selling point for any game engine, and I consider this necessary for my project. This article is about how to handle support for many platforms without creating spaghetti code. L. Spiro Engine supports DirectX 9, DirectX 10, DirectX 11, OpenGL, and will support, OpenGL ES, Nintendo Wii U, PlayStation [...]
