**Contents**

*Keywords: ray-tracing, rasterisation, learning computer graphics, aliasing, geometry type, bézier curves and surfaces, participating media, volume rendering, smoke, fog, acceleration structure, multi-threading.*Want to report bugs, errors or send feedback? Write at feedback@scratchapixel.com. We do this for free, please be kind. Thank you.

## What Have We Learned?

We thought it would be nice for you to take a break and congratulate yourself for making the effort of learning already so much about computer graphics. Before moving to the next series of lessons, it is a good time to maybe go through our notes and quickly recap what we have learned so far.

A lot of people assume that Scratchapixel is only about ray-tracing. As you can see from reading this series of lessons we try to teach about a wide range of rendering techniques which are not limited to the field of ray-tracing. We learned about the very basic principle of projecting points onto an image plane, about the projection matrix and the rasterization algorithm. Of course we also learned about ray-tracing, and particular about generating camera rays and computing the intersection of these rays with different kinds of geometry: triangle meshes and simple parametric shapes such as spheres or planes. We also learned about using matrices for a wide range of techniques such as transforming objects from object to world space, as well as cameras and projection (a non-linear kind of transformation). We learned about the fundamentals of shading. We learned about simulating the look of diffuse surfaces, reflection and refraction and combining both effects using the Fresnel equation. We learned about the recursive nature of the ray-tracing algorithm when used to simulate effects such as reflection or global illumination. We also learned about illumination model such as the Phong model which can be used to simulate the appearance of glossy surface. Finally, we learned about global illumination and how this effect which contributes for a large part to the photo-realism of images, can be simulated using Monte-Carlo integration.

With such a range of techniques you can already produce images that match the results produced by professional applications. They match in terms of geometry and pixel values. In other words, if you render the same model, with the same camera and the same shading and lighting setup, your image and the image produced by a professional application will look the same. That is because basically mathematics never lie. All application follow the same rules, and if they are implemented correctly they should all produce the same results.

Knowing so much about rendering is an achievement on its own. With all the techniques studied so far, you can already produce a wide range of images and effects.

## Experiment

You learned quite a few different techniques in this series of lessons. Maybe now is also a good time to just have fun and experiment with these techniques! Try to create your own 3D models and experiment with things such as procedural texturing or global illumination. Creativity in computer graphics programming comes also from trying ways of combining different techniques together to create cool, fun, beautiful or unsual images.

## What Shall We Learn Next?

The question is now to consider what we should be learning next?

- Faster: what appears obvious especially in the last lesson of this series, is that using ray-tracing to simulate effects such as complex reflections or global illumination is quite a slow process. Most of the scenes we rendered so far are really simple and yet they are also already slow to render. Rendering more complex shapes or scenes made of hundreds or thousands of objects would then be desperately slow. Hopefully a large field of computer graphics is about
**accelerating ray-tracing**. The most two common techniques for doing so are**acceleration structures**and**multi-threading**. We will learn about these two techniques in the next section. - More: so far we also rendered very simple shapes. We already learned about polygon meshes but this not the only type of geometry we can render even though as explained in these lessons, especially in ray-tracing, we generally always convert these geometry types to triangulated meshes to ray-trace them anyway. In the next series of lessons we learn for example about Bézier curves and surfaces. This will be useful to render an image of the famous
**Utah teapot**. Learning about Bézier curves and surfaces is a good way of learning about mathematically more complex parametric surfaces such as NURBS which we will study in a further section. In the next section, we will also learn about how we can render what we call**participating media**or more simply things such as smoke or fog. Smoke is not really a kind of hard surface and they require a special algorithm to be rendered realistically called**ray-marching**. In the next section we will thus extend the range of geometry primitive we can render. More is also about extending the range of shading and lighting techniques: in the next section we will learn about area lights, image based lighting, texture mapping, depth-of-field, motion blur, etc. - Better: finally, in this series of lessons we talked about aliasing quite a few times. We noticed that the edges of objects particularly suffered from what we call the
**staircase effect**. This is due to the very nature of digital imaging in which the representation of continuous surfaces is broken down into discrete elements or pixels. The science behind fighting aliasing, or anti-aliasing is quite complex. It relies on signal theory and uses techniques such as Fourier transforms. We plan to write lesson devoted to these topics but teaching them is a challenge of its own. In the meantime, we will start with an intuitive introduction to the field of anti-aliasing.

In summary, in the next series of lessons we will learn about rendering more geometry, which we will lead us to find ways of accelerating the rendering process as well as improving the image quality overall, through essentially anti-aliasing. We will also learn about new shading and lighting techniques such as texture mapping, area and image based lighting. We will also study a very famous equation called the **rendering equation** and start to formalize our understanding of light as energy. Finally, we will continue exploring how we can simulate more complex shading effects such as glossy reflections using path-tracing and **importance sampling** which is a very important technique to **reduce noise** or **variance** in the image.