Software Rasterizer Source Released and other Updates
SDL C++ architecture D3D open source shaders
A Modern Approach to Software Rasterization
I have some potentially exciting news for any of you who are interested in software rasterization. I released the source code to my research project titled, "A Modern Approach to Software Rasterization." You can find the code here:
Here is a short description taken from my IOTD post a few weeks ago:
As a part of two semesters research of undergraduate research at Taylor University, I development a multi-threaded tile-based software rasterizer. The pipeline rasterizes and shades four fragments in parallel using SSE instructions, and utilizes and extensive custom written SIMD optimized math library for all vertex transformations. Features supported include custom vertex and fragment shaders written purely in C++ (thanks to some operator overloading tricks), perspective correct texture mapping, clipping and backface culling, the flexibility to select different render targets, and early Z rejection. In addition, rendering order is preserved. On a Hyper-Threaded Quad-Core Intel I7 mobile processor, the rasterizer performs a full four times faster with eight threads than with one. It utilizes SDL for frame buffer, thread, and bitmap management.
The source includes the demo executable. To run it, you will need a CPU supporting SSE 4.1. I recently tested it on a Core I5 dual-core processor with HyperThreading, and it runs 2.5 times faster on four threads than one! As far as I can tell, it scales very well to the number of cores on the machine. I haven't had a chance to try it on anything more than quad-core. If you happen to own a beastly machine with multiple processors, give it a try and see what kind of performance you get with more threads. On that note, the demo application takes in the number of threads to use as an argument. I created a few Windows batch files that run the demo with different settings--including how many threads to deploy.
Practical Rendering & Computation with DirectX 11
I just received this book in the mail yesterday, and I'm loving it. The authors did a great job covering material that the Microsoft documentation doesn't cover, and leaving the more mundane implementation details out. I'm only 100 pages in, but the chapters all look very interesting, so I'm excited to get to them! Great job MJP, Jason Z, and jollyjeffers for your hard work! I am hoping to utilize the material in the book to help organize my DirectX wrapper classes to be the most useful. It helps to understand which features are more heavily utilized and which ones are useful only for specific algorithms.
As I've stated in my previous entries, the struggle I have dealt with recently is trying to design a system without fully understanding the final product. I think this is bad practice, as requirement gathering should be the first order of business when starting a project. An idea for a good project has been formulating in my mind as of late. Since my overall goal is to learn how to design a game engine--with an emphasis on rendering, I think the best project is an interactive physics demo. My idea is to create a sandbox where the user controls a tank object composed of physics components. The world itself will be composed of standalone static and dynamic meshes which interact with the player. I want to explore some advanced rendering techniques like deferred shading, HDR, depth of field, SSAO, and motion blur as well. I have chosen Bullet as the physics library--I have heard great things about it.
Rather than design the engine for this demo from the bottom up, I want to start from both sides simultaneously. For instance, I want to start designing the world manager interface immediately as I am developing the rendering framework. This will help clarify what requirements I will need for materials, resource management, and pipeline organization. I will most likely utilize XML for the map file format, allowing the user to place objects and entities within the scene fairly easily. This would also allow something like a Maya plugin to export a scene along with the accompanying meshes fairly easily.
I'm excited about this project and I hope to have further updates for you in the future!