Welcome back. In this segment we're going to go over some of the course logistics and give a brief overview of what the course is about. What the course outline is. First we introduce the notion of the 3D graphics pipeline. The graphics pipeline consists of 3 stages: modeling, animation and rendering. First let's talk about modeling. That is the process of creating geometric models of objects we're interested in. This could be a simple model of an object like a teapot. It could be a complicated mesh of an object like a cat sculpture. Or it could be a 2 billion polygon mesh of Michelangelo's David that was scanned several years ago by Professor Levoy and collaborators. The next step if you want the objects to actually move is to consider the animation or the motion of characters. And this is a rich area. We often want vibrant humanoid motion. In other cases we just want motion of objects from one place to another. The final step is rendering or creating realistic images, given the geometry and the animation. And there we want to simulate the way the light propagates in the scene to create effects like realistic and intricate shadow details, such as what you see in images on the right. In this course, we are going to have assignments that cover modeling and rendering parts of the graphics pipeline to give you basic understanding of computer graphics. In this course, we are not going to have time to go into animation in detail. We hope there will be a future course that deals with that. The first assignment deals with transformations and the goal there to place the objects in the world and view them. In particular, you will write a simple viewer that will view a teapot placed at the center of the screen and you will have to move around the teapot and create images in that way. The next 2 assignments deal more with rendering aspects of the course. So, in particular homework 2 is the scene viewer, and there you want to be able to view the scene the user specifies, and you want to be able to do it, with realistic lighting, with realistic materials, and as specified by the user. In homework 3, you will build a ray tracer which is an offline method to create very visually high quality visually realistic images by tracing rays that arise from the camera and go through each pixel in the image. I've said rasterize and I have said raytrace. Rasterization refers to your assignment in homework 2. So rasterization refers to homework 2, and raytracing refers to homework 3. These are fundamentally two different ways in which you can create images. Rasterization essentially goes through all the geometric primitives and dertermines where in the screen they should go. Raytracing does the opposite thing which goes to each point or each pixel in the screen and determines which geometric primitive that corresponds to. They each have their advantages and disadvantages, namely raytracing can produce higher quality images, but has historically been slower. We'll talk about the distinctions between them later in the course. But the nice thing is that homeworks 2 and 3 present ways in which you can create images of the same screen, same scene using both raytracing and rasterization. And this is the basic knowledge of computer graphics that this course seeks to give you. Let me talk a little bit about assignment logistics. The immediate task, you need to fulfill is to complete homework 0 and that enables you to ensure that you have the right kind of code compilation framework setup for all of the assignments. Now for all of the assignments including homework 0, we will have feedback and grading servers. And what that enable you to do is that you submit images that your program has produced. Our servers will compare these to the images that should have been produced and they'll return you a score and a difference image essentially noting what the differences are. Now you may wonder how you generate all the images that are needed. So the program's skeletons that we provide do most of that work automatically. For the raytracer you generate the images yourself. And you can submit the assignment multiple times. So you get feedback about what is working, what is not working. You can fix it and resubmit. Only your last submission will be counted. The skeleton code we provide in C++, Open GL, GLSL for Homework 0, 1 and 2 enables you to focus on the parts that you really need for the assignment. At the same time, you do get a chance to write a raytracer from scratch, so that's a good experience to have. To progress in this course, you do need a good programming background, in C, C++ or Java. The language doesn't matter that much, but the programming in this course will be in C++. You do not need any prior knowledge of 3D graphics or of programming in open GL or GLSL. Let me say a little bit about the workload. This course is structured to have essentially the same workload as the local Berkeley courses and in fact we're using essentially the same assignments and the same grading mechanism. And so I have the slide which I use for the local course as well, and it's a course which is a lot of fun and very rewarding to create visual computer graphics imagery. But it does involve a significant amount of work. And there are, in particular, 3 programming projects in the online course, and all of those do require significant effort. The later ones especially. The course also involves understanding of mathematical and geometric concepts and we will have a final here which will be multiple choice where you will be tested on those. Prerequisites as I noted, you need a solid programming background and beside that you need some basic mathematical skills. So we will have a review of linear algebra in the next lecture. And the mathematical skills are not really more than what you would get from basic high school course. All of our assignments involve programming on the graphics processor using the GL shading language. An interesting point in the last 10 years is the development of GPU, the Graphics Programming Unit, which has made the graphics, 3D graphics programmable and has really enabled a revolution in 3D computer graphics. This course is modern and uses GPUs. So in homework 0, 1 and 2, you will be using GLSL with programmable shaders. Nowadays shaders are programmable and portable across all platforms, including on your phone for example. But you may need to set up your environment and compilation framework correspondingly.