Name of this video is NURB Surface 2D Lesson. We've been using NURB surfaces, we've been creating geometry with them in the last lesson, but we haven't been using them to generate geometry from to use them as a base geometry, which we can generate our point matrix from and then subsequent geometry from that so we can start to really shape our matrices in particular ways based on surfaces that we're inputting. A NURB surface stands for a non-uniform rational B-splines surface, which is surface that actually has a lot of complex mathematics which determine its curvature, which are outside of the scope of this course to discuss, although it is important to understand something about the data, the information that they're carrying with them that's unique to them, that's going to be important if we want to work with them and generate geometry from them. When we look at the information that a NURB carries with it, carries with it a couple of things. One, of course, is its GUID, which allows us to bring it in the code. The other thing it carries with it is something called a domain. I talked about this, mentioned it a little bit in our planes lesson that a NURB curve has a domain, but it just has a domain in one direction. A NURB surface has a domain in two directions, u direction and a v direction. We set up our surfaces so we can see those directions, we can see the isocurves in particular colors on the surface, and that we can also see our back-face on our surface. The thing that's strange about them as they exist in this different space than everything else within our world coordinate space. That the thing that we notice that they don't carry with them is an X, Y, Z coordinate. If we want to move from the coordinate space to the surface space or from the surface space back to the coordinate space, in code, we usually have to use a couple of tools to do that. So to create our point matrix from them, we have to use a tool called evaluate surface, which I've written down here at the bottom. We use that tool in putting the idea of the surface and something called the parameter, which is related to the domain of the surface. The parameter is values which are within the domain of a surface. We're going to use another function to find that domain. But essentially where domain of the surface is, like with a curve, it's two values, there's a start value and there's an end value, and it's really related to the dimension of that surface and space. Typically, the beginning domain value is going to be a zero. I'll talk about that a little bit more when we look at it in the code. But it's almost always zero, but we still acknowledge it. For surface that we're looking at here, let's just say that the ending domain in the u direction is 32 and in the v direction is 24. If we input into evaluate surface, the idea of the surface and then some value within that range, 32 and 24, let's say I input 20 and 20, that function evaluate surface is going to return a point on that surface at that parameter of 20, 20. It's not going to be attached to the surface in any way, it's going to be a separate entity. Actually evaluate surface it won't render that point out, I would need to use add point, what it actually returns is the coordinate at that point. Then I would need to use add point if I wanted to actually see it out within the scene. So it becomes this separate entity. We're going to use evaluate surface within a loop to create a matrice of points on a surface that we can then generate geometry from. What we need to do is come up with a way that we can give a sequence of parameters or u, v parameters to that function evaluate surface in order to generate those points. Then we're going to save those points within a dictionary so we can then go access them and create geometry from it. In order to do that, one of the things that we need to know is we need some data. We need to know what's the density of my grid that I want to create? I'm going to call that its interval. In this example, I'm saying use an interval of eight. Then we also need to do that in the v direction. I'm going to set up also an interval of eight. Then I have to find what's the dimension of this unit that I'm going to break the surface up into. That dimension we call our step. I'm going to need to find it for both the u and the v. That's just a product of the domain, taking the domain value 32, and dividing it by our interval, which is 8. That would give us a step of 4 in our u direction. Then in the v, I do the same thing. I take the domain of 24, divide it by 8, and that's going to give me a step of 3. The first time through my loop, that first point, and we're going to have to set these values up in a little equation. The first time through, all my values are going to be zero. That's going to create that first point. Then the next time through, my u and my v, one of them is going to be zero. I step through the u first, and so that would be my next point. Then I would do all these points through my IJ loop using my step values. We're going to take a much closer look at that system within the software tutorial, and we're really going to take it apart in a fine way, and then we'll start producing geometry directly from NURB surfaces.