A Rendering Tutorial

3D rendering was one of the topics in computer software which I tried to engage at the very beginning of my journey of learning programming. In fact, I had studied 3D modeling through 3DS Studio 4.0 for a year before deciding to pursue a software developer career.

Yet I had not touched GPU-based rendering until 10 years later after I started programming, and it would be another 6 years before I rendered something more than a sphere or a donut on the screen.

There are quite a few unique obstacles in learning 3D rendering which a programer hardly runs across in other fields, which is why even veteran programmers experienced in other areas often give up shortly taste the topic.

For one, you need to dive into multiple areas, math, UI kit, and graphics APIs, before putting them together to see the actual result visually. Another on top of list is the lack of proper data. Can you imagine to learn image processing without a digital camera or a reliable JPEG or RAW image loader? On of the reasons that I hate every tutorials and books I read is that they all start from drawing a triangle, or using the pre canned Utah tea pot. It’s boring and, more importantly, prevent you from discovering and thinking about real-world challenge of creating a rendering system.

A wonderful thing happening lately is that, with proper tools, methodologies, and information, a beginner can safely skip a few boring step and move rapidly to real-world problems in the learning process of many areas. I do want to share this advancement in learning approach to more developers.

By occasionally glimpse to materials in this field, it took me about ten years to figure out how vendors of hardwares and operating systems collaborate to offer a development environment to programmers as well as ways to deliver to users (in multiple styles originated from varies points of view of different organizations). I eventually grabbed the basic concept of moving from fixed-function pipeline to programmable GPU, yet too bored about rendered simple donuts shapes, and too confused about the ad-hoc theory of rendering, to proceed. I paused my effort in 3D rendering for another 7 years (although doing a little bit GPU programming for other stuff), thinking of applying the methodologies which I learned from other endeavor to it from time to time. The event eventually reignited my interest is that my boss encouraged me attending the SIGGRAPH 2016. Here it comes, over one year later, I finally closed the ends of all I accumulated and created Nuo Model Viewer.

It’s worth to mention that, like in many tasks, I seldom write code from scratch in this learning process. Instead, I took example code from varies places, which I transformed into the form I need (or aligned to Nuo Model Viewer’s code base). Looking back, if I had encountered a sample code base which is as simple as, yet integrated as many graphics features as Nuo Model Viewer, I would have saved much effort in fusing and morphing the code, yet obtain the same level of knowledge. That inspires me to share Nuo Model Viewer with more developers and create this site of tutorials around it.

Tutorial 1: Live in the World