I just put the final touches on my own custom model format this morning to replace MS3D and everything works! I wrote an export script for Blender for my custom format and loaded it in the engine code. As of right now, the implementation is duplicate to what was working with MS3D, but because the data layout is friendlier for Shaders, it loads even faster than before! I’m not sure why most the 3d model formats out there aren’t more straight forward. Every game, every shader application, in modern GPU programming needs per Vertex data.
Before jumping into my own format, I assessed other popular formats as well. FBX, X, 3DS, these all have downfalls. FBX seemed too bloated, it is a full SDK with more functionality than I need and I spent a whole day just reading the documentation. X format seems pretty nice, but there is no binary exporter for Blender currently, if I wanted to use this format I’d have to write it myself. 3DS is a popular format, but does not include per vertex normals, it only stores face normals (smoothing groups).
I was progressing just fine, but recently hit the realization that the .MS3D 3d model format does not support Normal Map textures, or any other textures besides Diffuse! What a downer! I was really liking this format. Well, it is back to the drawing board. Currently I’m testing out the Autodesk FBX SDK. It is heavier than what I was looking for, but it at least has support for modern features and every 3d package supports it.
I started writing my own home-brew game engine, “DEngine”. It is a cross-platform 3d Game Engine. I’m doing this for fun and education so I’m not sure how far I’ll get. Here is the plan.
- Cross Platform (Currently Windows/Linux, Planned Mac)
- 3d APIs: DirectX 11 (Windows Only) and OpenGL 3.2
- Physics: Bullet
- Math: Bullet Vectormath Library (All Matrix and Vector Math is SSE3 SIMD)
- Cross Platform Window Manager and 3d Context Creation for:
- Windows (WIN32+D3D11, WIN32+GL3.2) and Linux (X11+GL3.2)
- .MS3D Model Loading with Diffuse Texture Support (DDS, TGA, JPG, BMP, PNG) and Per-Pixel Lighting
A long way to go! Hoorah!