Soul Engine Devlog #Jan2019

Introduction Soul is a rendering engine that I have been working on this past couple of months. Note that it is not a game engine. A game engine is just too unrealistic and ambitious for me right now. In fact, I develop this engine just as a first pass to understand how graphics pipeline works, and I have the plan to ditch this engine as soon as possible. Godot is

C++ 11 Atomics and Concurrency Memory Model – Part 1

What is the problem. Let us assume we have this source code that we want to compile. What if the compiler during the compilation reorders the instructions into this: Does it change the behavior of the program? As you can see both the codes above will result in z = 7. There is no change in the behavior of the program. In fact, it is perfectly valid for the compiler

Soul Engine Devlog #March 2019

It has been two months since my last devlog in January. I didn’t do any devlog in February due to laziness so there is not much to show on that month. I try to figure out what makes me feel lazy to continue this project, and I figure out that it is tough to debug and test the feature that I implemented. I always know that I need a better

Improving the Stability of Your Physics

In the previous post, we have covered a technique to resolve constraint in our physics simulation. Because we are working in the real-time domain, we need to sacrifice accuracy for speed by using an iterative method to resolve our constraints. Sequential Impulse doesn’t give the exact solution for the problems, but the solution it offers is good enough for games where accuracy is not the priority, as long as it

Understanding Constraint Solver in Physics Engine

Out of various phases of the physics engine, Constraint Resolution was the hardest for me to understand personally. I need to read many different papers and articles to fully understand how constraint resolution works. Therefore, I decided to write this article to help me understand it more easily in the future if, for instance, I forget how this works. This article will tackle this problem by giving an example, then