Tessellates meshes according to their subdivision scheme, converting them into higher polygon meshes which follow the limit surface - usually the smooth regular quads of a Catmull-Clark scheme.

Can be used similiarly to “subdivide” or “smooth” features in other packages, with one distinction: because it puts output points directly on the limit surface, using the tessellated result as a subdiv surface again will result in the surface shrinking. Tessellation gives the most accurate possible result for a given number of divisions in one step, but is not appropriate for doing repeated operations on the same mesh.

This node implements the tessellation schemes described by OpenSubdiv, as described here: ( Note that OpenSubdiv’s “tessellation rate” parameter is the same as our “divisions” parameter, except “tessellation rate” is one higher than “divisions. )


Container for user-defined plugs. Nodes should never make their own plugs here, so users are free to do as they wish.


The processed output scene.


The on/off state of the node. When it is off, the node outputs the input scene unchanged.


The input scene


The filter used to control which parts of the scene are processed. A Filter node should be connected here.


The number of vertices to insert in each edge during tessellation.


Calculate normals based on the limit surface. If there are existing normals, they will be overwritten. If this is not set, existing normals will be interpolated like any other primvar.

Note that we currently output Vertex normals, which makes sense for most subdivs, but does not accurately capture infinitely sharp creases.


Overrides the subdivision scheme that determines the shape of the surface. By default, the subdivision scheme used comes from the mesh’s interpolation property, which should be set with a MeshType node, so it will apply to rendering the surface, and also this node. Overriding is useful if a mesh has not been tagged correctly ( for example, if you want to force a mesh to be smooth, you can set scheme to CatmullClark ).


Force bilinear tessellation of meshes without subdivision schemes.

If there is no subdivision scheme stored on the mesh ( interpolation = "linear" ), and you haven’t overridden the scheme, we interpret that to mean no tessellation is required. Bilinear tessellation won’t change the shape of the surface, but sometimes forcing tessellation is useful anyways ( for example, to apply deformation on a denser mesh ).


Specifies which parts of mesh boundaries are forced to exactly meet the boundary. Without this forcing, a subdivision surface will naturally shrink back from the boundary as it smooths out.

Usually, you want to force both edges and corners to exactly meet the boundary. The main reasons to change this are to use Edge Only if you want to produce curved edges from polygonal boundaries, or to use None if you’re doing something tricky with seamlessly splitting subdiv meshes by providing the split meshes with a border of shared polygons in order to get continuous tangents.


Specifies where face varying primitive variables should use a simple linear interpolation instead of being smoothed.

In order for UVs to correspond to approximately the same texture areas as the original polygons, usually you want to, at minimum, pin the outside corners. But pinning the entire boundary causes some pretty weird discontinuities, so finding the right compromise is tricky.

See the OpenSubdiv docs for explanation of the details of options like Corners Plus 1:


Option to use a non-standard Smooth subdivision rule that provides slightly better results at triangular faces in Catmull-Clark meshes than the standard Catmull-Clark algorithm.