How Surface Parameters Turn Geometry Into Information
This article is part of the Designing with Numbers series, a continuation of the Geometry Basics series. Together, they explore how computational design is shaped first by geometry, then by numbers.
Part 1 : It's not always about geometry, numbers matter too.
Part 2 : How Curve Parameters Give You More Control in Grasshopper
Part 3 : How Surface Parameters Turn Geometry Into Information (this article)
When we last talked about curve parameters, we said that when you search for something in Google Maps, the program tells you the coordinates of the location you're finding. If you type "McDonald's" in Google Maps, you actually get the coordinates of the place back.
It looks something like -33.43457, 149.58313, which you may recognize as latitude and longitude.

The latitude and longitude are coordinates, yes. But they are different to the XY coordinates that we know in 3D models, instead moving on a single plane, they move along the surface of the earth.
Well, that is the idea of surface parameters. A set of coordinates that trace the two directions of a surface. Instead of latitude and longitude, we use U and V. You can think of Earth as one big spherical surface, the latitude and longitude are it's U and V value in surface parameter terms.
Going Along a Surface
Think back to curve parameters and how we learnt that t is how far along you are on the Curve. Well, because we have two directions on a surface, we have two parameters that tell us how far along we are on a surface. These parameters are u and v, which are like U and V directions but they are lower case. (Yes, it’s confusing but I don't make the rules)
If you notice, uv is a like point with only XY and no Z component.
And much like t, uv has a domain from 0 to the length of each direction on the surface. Re-parameterize here will turn the domains of u and v into 0-1. Which means like t on a curve, putting 0.5,0.5 would get me the center of the surface.
But, instead of typing that in, you can actually use the MD slider component in Grasshopper to visually select the point.

Similarly to curves, the reason to learn about parameters for surfaces, is so that you have more information to work with. Let's again look at this in two steps. How to get the useful uv parameters first. Then how to use those parameters.
Getting Surface Parameters
Surface Closest Point
A straight-forward way to get the uv value from a surface is to use the Surface Closest Point component.
Note the re-parameterized symbol on the component
For any point you have, Grasshopper will find the closest point on the surface for you. It also gives you the actual XYZ point and the distance.
I use this operation when I am trying to bring any geometry closer to the surface but I want control over the direction. As we'll see later, when you pair this component with the evaluate surface component, you can do useful things with it.
Just be careful because this operation can be slow if you have too many points (>500,000 points)
Intersections
Another common way to get the uv point of surfaces is through intersections. There are two intersection components that will return the uv parameters to you. The Surface | Curve and the Surface | Line component.
They sound like the same components but using line means Grasshopper will treat the line like a ray and extend it infinitely. A curve though, is a physical thing, Grasshopper will only return the intersection if the curve actually passes through the surface.
The Surface | Line Component
The Surface | Curve Component
How to use Surface parameters
Extract Iso-curves
You can use the uv values to get the curves that make up the surface. This is done with the extract iso-curves component.
This is really useful if you need ever need to re-define the surface later or if you just need the curve. It's also where the definition of the surface is important. Because a heavy or a "dirty" surface means a dirty iso-curve too.
It’s hard to see what is happening but that “red” line is actually made many red dots.
Evaluate Surface
But the most powerful use of uv has to be extracting information from the surface itself. You can do this with the evaluate surface component.
Let's break down what you actually get from this component.
Surface Normals
Okay, the normal vector of the surface, is probably the most useful one. If you take anything away from this, is that uv parameters can help you get the normal vector of a surface really easily. Especially if you work with complex surfaces, you can use the normals to offset geometry or create geometry from the surface itself.
I have even used it to sort geometry.
Surfaces Frames & U/V Directions
The frame output will give you a plane on the uv point of the surface. The U direction and V direction are actually the x and y axis of that plane.
This is useful for a number of a reasons but it depends what you need the plane for. I use this option the most when I have to split the surface itself. Because the U/V direction gives me everything I need to make a big rectangle to split the surface.
I know it's duplicated information but you can recreate the plane output by using the point and the U & V directions. I think this is Grasshopper's way of giving us more choices to work with. A plane or vectors.
It's hard to see, but these outputs come in really handy when you have to sort things out by the surface or they can also help you orient your geometry too.
A Note on Shrinking Surfaces
Alright, this is going to get confusing very quickly, so bear with me. But if you remember surfaces from the last series, we talked about trimmed vs un-trimmed surfaces. We saw that Rhino still retains the information of the surface even after a split.
Well, this affects the uv values too. If you have a surface that has been split in Rhino but not shrunken, you can get some weird results. To show you what I mean, I am going to first split a surface into two. Then, I'll colour the bottom half cyan, just to make things clearer.
Now, I am going to try and get the isocurves from the top surface using the extract iso-curve component that we saw earlier.
Notice that the surface doesn't return any result for the U Isocurve, even if it was re-parameterized. It’s weird because the component clearly knows the surface was split but somehow can’t return any information on it. So it just returns a null.
To fix this, you can shrink the surface using the shrink Trimmed surface component before getting the isocurves.
If you remembered, we had to also shrink the surface in Rhino to get any meaningful results after a split. It's weird to explain this but this is an example of how Rhino and Grasshopper can behave differently even if they are the same program.
This also only happens if you split the surface in Rhino. If you put in some effort to do the splitting in Grasshopper, you won't have this problem.
That is because Grasshopper doesn't retain the surface information like Rhino does.
I know, I know. It's confusing but you'll get used to it and be able to spot these obscure differences between Rhino and Grasshopper with more experience.
Final Thoughts
Surface parameters might feel abstract at first, but they unlock a lot of control once you get used to them. It’s not something you’ll use every day, but when you do, you’ll be glad you understand it.
With practice, you start to see that curves and surfaces hold far more information than what’s visible on screen. And the more comfortable you get with parameters, the more control you’ll have over your design and scripts.
Thank you for reading. Consider subscribing if you haven’t, it really helps me know my writing here is useful.