The CRI Project

Published September 07, 2014
Advertisement
This journal entry was originally written for my homepage. Go check it out!


THE CRI PROJECT



CRI, short for Common Rendering Interface, a name which is no longer relevant as I hinted at in my last blog post, is a high performance 3D rendering toolkit which started development in late 2013.

WHAT IS A RENDERING TOOLKIT EXACTLY?



So glad you asked! The CRI project is a piece of software which allows a developer to prototype and build graphical systems and effects in an intuitive manner. It is an extensible research and experimentation tool targeted more towards building technical demos and proofs of concepts (read: really really cool shiny stuff) rather than actual games (although using CRI in a game project would definitely be feasible). It is a sandbox environment for rapid implementation and iteration of anything graphics and rendering related.

At the core of the project lies a powerful lightweight multithreaded rendering engine built on top of Direct3D 11 and AMD's new Mantle API, with Mantle being the primary focus. Support for OpenGL 4 is currently also in the works but is treated as a "nice to have" feature for now since CRI relies heavily on multithreaded rendering job execution, something OpenGL does not like to play with nicely. Whether OpenGL will actually show up in later revisions of the project is absolutely not sure.

On top of this rendering engine a set of tools will be provided which allow a developer to build custom lighting and shading pipelines, render queues, post-processing effects and much much more in a data-driven and native plugin-based fashion. A basic scriptable scene compositor and asset manager will also be provided to create scenes and easily set up graphics configurations. With this an extensive profiling suite will also be provided as a way to get exact performance details of your setup.

Aside from all of this a C++ API will also be exposed for both the higher level tools and the low-level rendering engine. This allows for the development of plugins as well as integration into other C++ based projects such as games.



WHY BUILD SOMETHING LIKE THIS?



In the past I've written quite a few rendering engines both professionally and as personal side projects. The last one of my personal rendering projects was part of a larger project called RainEngine, which up until now has been my most ambitious and advanced personal project to date. As soon as I started my current job I pretty much stopped development on this project, this due to it being very massive in scope and me not being all too pleased with its overall design. I have been able to build some very cool stuff with it however and it served as the centerpiece of my portfolio before I started doing graphics programming professionally, and I am still very proud of what I achieved.

During the development of the RainEngine project I learned that even though I had greater ideas in mind I always got most of my enjoyment out of building cool graphical systems and effects. Often this lead me to spending weeks or even months on tweaking, fine-tuning and experimenting with advanced lighting systems or post-processing effects even though I should have been focusing on how they would work best in the game I wanted to build. It is at this point that I realized that I didn't care so much about building games with the technology I had implemented, but rather about building breathtaking or lifelike and dynamic scenes which one could traverse in real-time. Combine this with the excitement of being able to read papers about the latest and greatest AAA techniques and implementing them within my own environment, and I was all set.



This is why I am taking on the CRI project.



Does a tool like this already exist? Probably.

Do I care? No.

This is all about me building something I want to build: A cool and exciting project which will allow me to easily do even more cool and exciting stuff. If people end up being interested in it, that's great! If people want to try using it, even better! (although I'll probably hold off on releasing anything until certain software components I'm using are widely accessible and no longer under any NDAs, *cough* Mantle *cough*. This is also a heads-up that I won't be discussing anything Mantle specific on this blog). I'm just saying that I'm not planning on creating the world's best AAA rendering engine or the most revolutionary application ever, I just want to build a tool I can enjoy working on and working with while pushing my own skills even farther.



WHICH STATE IS THE PROJECT IN RIGHT NOW?



I've been working on this project for several months now. Due to work and life in general I often have days or even weeks where I don't touch any CRI code at all, which means development isn't exactly going at breakneck speeds. What I have right now is a core library with platform abstractions and utility code, a math library (which has been with me for years and has improved with every graphics related project I've done), a task-based multithreading system, a fully functional D3D11 low level renderer and partially functional Mantle and OpenGL renderers. Since I did not anticipate on getting access to Mantle at the start of the project I had designed the rendering infrastructure around D3D11. The focus has however shifted towards a Mantle-based design, so I am currently working on revising the architecture of the renderer to be more future proof (as it seems like future generations of both OpenGL and D3D will follow a Mantle-like approach).

As for design documents and architectural concepts for the rest of the project a lot more work has been done. I'd like to save the details for these for future blog posts though, as this one seems like a wall of text already.



FINISHING UP



If you've made it to this point: Congratulations! Apparently my post wasn't too boring! If I had cake I'd give you a slice!

I'd like to write a lot more about this project as development continues. Even if nobody really reads any of this, it's nice to write about this stuff to clear out my mind a bit!



Thanks for reading, and until next time!

(Again, you can also read this entry at my homepage!)
0 likes 0 comments

Comments

Nobody has left a comment. You can be the first!
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement
Advertisement