UNPKG

@bottobot/td-mcp

Version:

TouchDesigner Documentation MCP Server v2.3 - Pure MCP server for VS Code/Codium with comprehensive operator documentation for 629 operators + 7 tutorials across all categories (TOP, CHOP, SOP, DAT, MAT, COMP, POP). Features experimental POP operators wit

759 lines 55.7 kB
{
  "id": "subdivide_sop",
  "name": "Subdivide SOP",
  "displayName": "Subdivide SOP",
  "category": "SOP",
  "subcategory": "Generators",
  "version": "",
  "lastUpdated": "2025-08-07T07:50:10.081Z",
  "sourceFile": "C:\\Program Files\\Derivative\\TouchDesigner\\Samples\\Learn\\OfflineHelp\\https.docs.derivative.ca\\Subdivide_SOP.htm",
  "url": "",
  "description": "The Subdivide SOP takes an input polygon surface (which can be piped into one or both inputs), and divides each face to create a smoothed polygon surface using a Catmull-Clark subdivision algorithm. Especially useful for avoiding the angular appearance often associated with polygonal models - without adding lots of extra geometry to the entire object. For best results, polygons should be convex and relatively uniform in distribution.",
  "summary": "The Subdivide SOP takes an input polygon surface (which can be piped into one or both inputs), and divides each face to create a smoothed polygon surface using a Catmull-Clark subdivision algorithm. E",
  "details": "",
  "usage": "",
  "tips": [],
  "warnings": [],
  "parameters": [
    {
      "id": null,
      "name": "Group",
      "label": "Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe Subdivide  takes an input polygon surface (which can be piped into one or both inputs), and divides each face to create a smoothed polygon surface using a Catmull-Clark subdivision algorithm. Especially useful for avoiding the angular appearance often associated with polygonal models - without adding lots of extra geometry to the entire object. For best results, polygons should be convex and relatively uniform in distribution.\t\nSubdivision surfaces also allows you to create the smoothed surface based on a polygon control shape. As the control shape changes, so does the smooth shape within.\nsubdivideSOP_Class\n\nContents\n \n \n \n \n \n\n \n \n \n \n \n \n\n\n\n\n\n\nCreases control the strength of pull of the polygon faces on the subdivision surfaces, much like a magnet drawing the surface towards the reference polygon. They can be applied selectively using the  field to specify an input group to use.\nCreases work by controlling the strength of the pull of the polygon faces on the subdivision surfaces, like a magnet drawing the surface towards the reference polygon. The figure below shows the result of setting the  to 0, 1, 2 reading from left to right. As the weight increases so the pull effect strengthens and the shape approaches the reference polygon.\n\n\n\nIf there is a second input:\n\nIf the Override button is enabled, each edge defined in the second input will have its edge crease weight set to the value of the override.\nIf the vertex attribute \"creaseweight\" exists on the second input, each matching edge in the input will have its crease weight set to the maximum of the vertex attributes for any shared edges.\nIf the primitive attribute \"creaseweight\" exists on the second input, each polygon in the second input will set matching edges to the appropriate weights.If there is no second input:\n\nIf an override is specified, the value of the override is used for all edges in the sub-divided surface.\nIf the vertex attribute \"creaseweight\" exists, this attribute will be used to define the crease weights on the edges of the surface.\nIf the primitive attribute \"creaseweight\" exists, this attribute will be used to define the crease weights for the subdivision surface.When defining crease weights on shared edges, the maximum of the weights of the shared edges is used. For example, if two polygons share an edge and the primitive attribute is used, the maximum of the crease weight will be used for the shared edge.\n\n\nCracks can be closed by either  or , so only one of these two options can be chosen at a time from the  parameter.  applies only to Pulling, and is disabled when Stitching is chosen.\nA crack is formed by a single edge on the non-subdivided area and multiple edges on the subdivided area. The  menu determines what will will happen to the single edge on the non-subdivided area, and in more generally, to the polygon containing this edge.\nIf  is chosen and cracks are pulled closed, all the points on the subdivided edges are pulled (i.e. moved) to the closest points on the non-subdivided edges.  is disabled, when  is specified.\nIf cracks are pulled with the  option, the non-subdivided edge is split into many sections, so that each each point on the non-subdivided edge now corresponds to a new point on the subdivided edge. Then, points on the newly divided edge are joined with the points on the subdivided boundary. A  of 1 will place these joined points along the subdivided boundary. A  of 0 will place them along the non- subdivided boundary (and values between 0 and 1 will place them somewhere inbetween).\nPulling cracks with the  option will do exactly the same thing as , except it will also triangulate the non-subdivided polygon. This is desirable because pulling the non-subdivided boundary towards the curved subdivided boundary will likely generate a non-planar polygon, so  will divide this polygon into smaller (planar) ones. Pulling cracks with a  of 1 and triangulating usually produces the nicest results.\nThe  option is necessary because the Divide SOP is not designed to handle (very) non-planar polygons.\nThe  option, on the other hand, inserts new polygons (triangles) to close up the cracks. When  is chosen, many triangles are created, each having one vertex on one point of the non-subdivided edge.\nWhen  is chosen, the non-subdivided edge is divided, so there are more points available to be used for triangles. The resulting triangles are more regularly shaped (not as long and skinny). The  option will again triangulate the non-subdivided polygon, although this option is less likely to be used becuase this polygon should remain planar during stitching.\n\n\n  subdivide - Subset of input to use as a polygonal mesh to subdivide. Accepts patterns, as described in Pattern Matching.\n\n\n\t\t\n  creases - This field allows you to specify a subset of the second input to use as creases. The elements of the second input specified by the  field are used as creases. Each edge in a crease polygon corresponds to the edge in the polygon mesh which has the same point numbers.  position is irrelevant. For polygon edges to be classified as the same edge, they must share the same points. Merely being physically close is not sufficient.\t\nThe primitive attribute creasesharpness is used to determine the sharpness of the specified creases unless overridden.\n\n\n\t\t\n  iterations - How many iterations to subdivide. Higher numbers give a smoother surface.\n\n\n\t\t\n  overridecrease - Determine if the crease sharpness should be determined by the primitive or vertex creaseweight attribute or by overridden by this .\n\n\n\t\t\n  creaseweight - If the crease weight is overriden, this is the weight used.\t\nTip: The default is to have the Override Crease Weight Attribute enabled. So you can simply set a value which applies to all the creases. You can, however, set a crease attribute using the  or  SOPs which allows for more control.\n\n\n\t\t\n  outputcrease - If any creases are sharper than the , they will be left over in the resulting geometry. With this parameter enabled, these left over creases are created with the appropriate primitive attribute values, and placed in the specified group.\n\n\n\t\t\n  outcreasegroup - Name of the group to place the generated creases into.\n\n\n\t\t\n  closeholes -  - Choose how gaps are handled in the output geometry.\n\n noclose - Don't close cracks. pull - Move points on boundary of subdivided area in order to close cracks formed during the subdivision. stitch - Add polygons (triangles) to close the cracks caused by subdividing.\n\t\t\n  surroundpoly -  - Choose how to handle the polygons on either side of a crack when pulling or stitching it closed.\n\n nodiv - When  is chosen, many triangles are created, each having one vertex on one point of the non-subdivided edge. edges - Divides edges surrounding the subdivided area when pulling or stitching cracks by inserting new polygons (triangles) to close up the cracks. triangulate - Does exactly the same thing as , except it also triangulates the non-subdivided polygon. This is desirable because pulling the non-subdivided boundary towards the curved subdivided boundary will likely generate a non-planar polygon, so Triangulate will divide this polygon into smaller (planar) ones. Pulling cracks with a Bias of 1 and triangulating usually produces the nicest results.\n\t\t\n  bias - Determines which points are moved when pulling crack closed.\t\n0 means move points on subdivided area to meet boundary.\n1 means move points on boundary to meet subdivided area.\n\n\n\n\nBelow, a Subdivide  is used to create a subdivision surface from a Box SOP. The  of the subdivision is set to 2. The Facet SOP consolidates the points so that the box faces are treated as a unit.\n\n\n\n -\n -\n\nExtra Information for the Subdivide  can be accessed via an Info CHOP.\n\n\n\n - Number of points in this . - Number of primitives in this . - Number of particles in this . - Time spent in another thread updating geometry data on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time. - Time spent in another thread updating meta surface geometry data (such as metaballs or nurbs) on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2021.100002018.28070before 2018.28070\nSOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nA sequence of vertices form a Polygon in a SOP. Each vertex is an integer index into the Point List, and each Point holds an XYZ position and attributes like Normals and Texture Coordinates.\n\n\n\nA surface type in SOPs that includes polygon, curve (NURBS and Bezier), patch (NURBS and Bezier) and other basic shapes like sphere, tube and metaball. Points and Primitives are part of the Geometry Detail, which is a part of a SOP.\n\n\n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nThe Graphics Processing Unit. This is the high-speed, many-core processor of the graphics card/chip that takes geometry, images and data from the CPU and creates images and processed data.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Subdivide_SOP&oldid=24238\"\n\t\tCategory: SOPs",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.076Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Group",
      "label": "Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe Subdivide  takes an input polygon surface (which can be piped into one or both inputs), and divides each face to create a smoothed polygon surface using a Catmull-Clark subdivision algorithm. Especially useful for avoiding the angular appearance often associated with polygonal models - without adding lots of extra geometry to the entire object. For best results, polygons should be convex and relatively uniform in distribution.\t\nSubdivision surfaces also allows you to create the smoothed surface based on a polygon control shape. As the control shape changes, so does the smooth shape within.\nsubdivideSOP_Class\n\nContents\n \n \n \n \n \n\n \n \n \n \n \n \n\n\n\n\n\n\nCreases control the strength of pull of the polygon faces on the subdivision surfaces, much like a magnet drawing the surface towards the reference polygon. They can be applied selectively using the  field to specify an input group to use.\nCreases work by controlling the strength of the pull of the polygon faces on the subdivision surfaces, like a magnet drawing the surface towards the reference polygon. The figure below shows the result of setting the  to 0, 1, 2 reading from left to right. As the weight increases so the pull effect strengthens and the shape approaches the reference polygon.\n\n\n\nIf there is a second input:\n\nIf the Override button is enabled, each edge defined in the second input will have its edge crease weight set to the value of the override.\nIf the vertex attribute \"creaseweight\" exists on the second input, each matching edge in the input will have its crease weight set to the maximum of the vertex attributes for any shared edges.\nIf the primitive attribute \"creaseweight\" exists on the second input, each polygon in the second input will set matching edges to the appropriate weights.If there is no second input:\n\nIf an override is specified, the value of the override is used for all edges in the sub-divided surface.\nIf the vertex attribute \"creaseweight\" exists, this attribute will be used to define the crease weights on the edges of the surface.\nIf the primitive attribute \"creaseweight\" exists, this attribute will be used to define the crease weights for the subdivision surface.When defining crease weights on shared edges, the maximum of the weights of the shared edges is used. For example, if two polygons share an edge and the primitive attribute is used, the maximum of the crease weight will be used for the shared edge.\n\n\nCracks can be closed by either  or , so only one of these two options can be chosen at a time from the  parameter.  applies only to Pulling, and is disabled when Stitching is chosen.\nA crack is formed by a single edge on the non-subdivided area and multiple edges on the subdivided area. The  menu determines what will will happen to the single edge on the non-subdivided area, and in more generally, to the polygon containing this edge.\nIf  is chosen and cracks are pulled closed, all the points on the subdivided edges are pulled (i.e. moved) to the closest points on the non-subdivided edges.  is disabled, when  is specified.\nIf cracks are pulled with the  option, the non-subdivided edge is split into many sections, so that each each point on the non-subdivided edge now corresponds to a new point on the subdivided edge. Then, points on the newly divided edge are joined with the points on the subdivided boundary. A  of 1 will place these joined points along the subdivided boundary. A  of 0 will place them along the non- subdivided boundary (and values between 0 and 1 will place them somewhere inbetween).\nPulling cracks with the  option will do exactly the same thing as , except it will also triangulate the non-subdivided polygon. This is desirable because pulling the non-subdivided boundary towards the curved subdivided boundary will likely generate a non-planar polygon, so  will divide this polygon into smaller (planar) ones. Pulling cracks with a  of 1 and triangulating usually produces the nicest results.\nThe  option is necessary because the Divide SOP is not designed to handle (very) non-planar polygons.\nThe  option, on the other hand, inserts new polygons (triangles) to close up the cracks. When  is chosen, many triangles are created, each having one vertex on one point of the non-subdivided edge.\nWhen  is chosen, the non-subdivided edge is divided, so there are more points available to be used for triangles. The resulting triangles are more regularly shaped (not as long and skinny). The  option will again triangulate the non-subdivided polygon, although this option is less likely to be used becuase this polygon should remain planar during stitching.\n\n\n  subdivide - Subset of input to use as a polygonal mesh to subdivide. Accepts patterns, as described in Pattern Matching.\n\n\n\t\t\n  creases - This field allows you to specify a subset of the second input to use as creases. The elements of the second input specified by the  field are used as creases. Each edge in a crease polygon corresponds to the edge in the polygon mesh which has the same point numbers.  position is irrelevant. For polygon edges to be classified as the same edge, they must share the same points. Merely being physically close is not sufficient.\t\nThe primitive attribute creasesharpness is used to determine the sharpness of the specified creases unless overridden.\n\n\n\t\t\n  iterations - How many iterations to subdivide. Higher numbers give a smoother surface.\n\n\n\t\t\n  overridecrease - Determine if the crease sharpness should be determined by the primitive or vertex creaseweight attribute or by overridden by this .\n\n\n\t\t\n  creaseweight - If the crease weight is overriden, this is the weight used.\t\nTip: The default is to have the Override Crease Weight Attribute enabled. So you can simply set a value which applies to all the creases. You can, however, set a crease attribute using the  or  SOPs which allows for more control.\n\n\n\t\t\n  outputcrease - If any creases are sharper than the , they will be left over in the resulting geometry. With this parameter enabled, these left over creases are created with the appropriate primitive attribute values, and placed in the specified group.\n\n\n\t\t\n  outcreasegroup - Name of the group to place the generated creases into.\n\n\n\t\t\n  closeholes -  - Choose how gaps are handled in the output geometry.\n\n noclose - Don't close cracks. pull - Move points on boundary of subdivided area in order to close cracks formed during the subdivision. stitch - Add polygons (triangles) to close the cracks caused by subdividing.\n\t\t\n  surroundpoly -  - Choose how to handle the polygons on either side of a crack when pulling or stitching it closed.\n\n nodiv - When  is chosen, many triangles are created, each having one vertex on one point of the non-subdivided edge. edges - Divides edges surrounding the subdivided area when pulling or stitching cracks by inserting new polygons (triangles) to close up the cracks. triangulate - Does exactly the same thing as , except it also triangulates the non-subdivided polygon. This is desirable because pulling the non-subdivided boundary towards the curved subdivided boundary will likely generate a non-planar polygon, so Triangulate will divide this polygon into smaller (planar) ones. Pulling cracks with a Bias of 1 and triangulating usually produces the nicest results.\n\t\t\n  bias - Determines which points are moved when pulling crack closed.\t\n0 means move points on subdivided area to meet boundary.\n1 means move points on boundary to meet subdivided area.\n\n\n\n\nBelow, a Subdivide  is used to create a subdivision surface from a Box SOP. The  of the subdivision is set to 2. The Facet SOP consolidates the points so that the box faces are treated as a unit.\n\n\n\n -\n -\n\nExtra Information for the Subdivide  can be accessed via an Info CHOP.\n\n\n\n - Number of points in this . - Number of primitives in this . - Number of particles in this . - Time spent in another thread updating geometry data on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time. - Time spent in another thread updating meta surface geometry data (such as metaballs or nurbs) on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2021.100002018.28070before 2018.28070\nSOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nA sequence of vertices form a Polygon in a SOP. Each vertex is an integer index into the Point List, and each Point holds an XYZ position and attributes like Normals and Texture Coordinates.\n\n\n\nA surface type in SOPs that includes polygon, curve (NURBS and Bezier), patch (NURBS and Bezier) and other basic shapes like sphere, tube and metaball. Points and Primitives are part of the Geometry Detail, which is a part of a SOP.\n\n\n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nThe Graphics Processing Unit. This is the high-speed, many-core processor of the graphics card/chip that takes geometry, images and data from the CPU and creates images and processed data.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Subdivide_SOP&oldid=24238\"\n\t\tCategory: SOPs",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.078Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Group",
      "label": "Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "The Subdivide  takes an input polygon surface (which can be piped into one or both inputs), and divides each face to create a smoothed polygon surface using a Catmull-Clark subdivision algorithm. Especially useful for avoiding the angular appearance often associated with polygonal models - without adding lots of extra geometry to the entire object. For best results, polygons should be convex and relatively uniform in distribution.\t\nSubdivision surfaces also allows you to create the smoothed surface based on a polygon control shape. As the control shape changes, so does the smooth shape within.\nsubdivideSOP_Class\n\nContents\n \n \n \n \n \n\n \n \n \n \n \n \n\n\n\n\n\n\nCreases control the strength of pull of the polygon faces on the subdivision surfaces, much like a magnet drawing the surface towards the reference polygon. They can be applied selectively using the  field to specify an input group to use.\nCreases work by controlling the strength of the pull of the polygon faces on the subdivision surfaces, like a magnet drawing the surface towards the reference polygon. The figure below shows the result of setting the  to 0, 1, 2 reading from left to right. As the weight increases so the pull effect strengthens and the shape approaches the reference polygon.\n\n\n\nIf there is a second input:\n\nIf the Override button is enabled, each edge defined in the second input will have its edge crease weight set to the value of the override.\nIf the vertex attribute \"creaseweight\" exists on the second input, each matching edge in the input will have its crease weight set to the maximum of the vertex attributes for any shared edges.\nIf the primitive attribute \"creaseweight\" exists on the second input, each polygon in the second input will set matching edges to the appropriate weights.If there is no second input:\n\nIf an override is specified, the value of the override is used for all edges in the sub-divided surface.\nIf the vertex attribute \"creaseweight\" exists, this attribute will be used to define the crease weights on the edges of the surface.\nIf the primitive attribute \"creaseweight\" exists, this attribute will be used to define the crease weights for the subdivision surface.When defining crease weights on shared edges, the maximum of the weights of the shared edges is used. For example, if two polygons share an edge and the primitive attribute is used, the maximum of the crease weight will be used for the shared edge.\n\n\nCracks can be closed by either  or , so only one of these two options can be chosen at a time from the  parameter.  applies only to Pulling, and is disabled when Stitching is chosen.\nA crack is formed by a single edge on the non-subdivided area and multiple edges on the subdivided area. The  menu determines what will will happen to the single edge on the non-subdivided area, and in more generally, to the polygon containing this edge.\nIf  is chosen and cracks are pulled closed, all the points on the subdivided edges are pulled (i.e. moved) to the closest points on the non-subdivided edges.  is disabled, when  is specified.\nIf cracks are pulled with the  option, the non-subdivided edge is split into many sections, so that each each point on the non-subdivided edge now corresponds to a new point on the subdivided edge. Then, points on the newly divided edge are joined with the points on the subdivided boundary. A  of 1 will place these joined points along the subdivided boundary. A  of 0 will place them along the non- subdivided boundary (and values between 0 and 1 will place them somewhere inbetween).\nPulling cracks with the  option will do exactly the same thing as , except it will also triangulate the non-subdivided polygon. This is desirable because pulling the non-subdivided boundary towards the curved subdivided boundary will likely generate a non-planar polygon, so  will divide this polygon into smaller (planar) ones. Pulling cracks with a  of 1 and triangulating usually produces the nicest results.\nThe  option is necessary because the Divide SOP is not designed to handle (very) non-planar polygons.\nThe  option, on the other hand, inserts new polygons (triangles) to close up the cracks. When  is chosen, many triangles are created, each having one vertex on one point of the non-subdivided edge.\nWhen  is chosen, the non-subdivided edge is divided, so there are more points available to be used for triangles. The resulting triangles are more regularly shaped (not as long and skinny). The  option will again triangulate the non-subdivided polygon, although this option is less likely to be used becuase this polygon should remain planar during stitching.\n\n\n  subdivide - Subset of input to use as a polygonal mesh to subdivide. Accepts patterns, as described in Pattern Matching.\n\n\n\t\t\n  creases - This field allows you to specify a subset of the second input to use as creases. The elements of the second input specified by the  field are used as creases. Each edge in a crease polygon corresponds to the edge in the polygon mesh which has the same point numbers.  position is irrelevant. For polygon edges to be classified as the same edge, they must share the same points. Merely being physically close is not sufficient.\t\nThe primitive attribute creasesharpness is used to determine the sharpness of the specified creases unless overridden.\n\n\n\t\t\n  iterations - How many iterations to subdivide. Higher numbers give a smoother surface.\n\n\n\t\t\n  overridecrease - Determine if the crease sharpness should be determined by the primitive or vertex creaseweight attribute or by overridden by this .\n\n\n\t\t\n  creaseweight - If the crease weight is overriden, this is the weight used.\t\nTip: The default is to have the Override Crease Weight Attribute enabled. So you can simply set a value which applies to all the creases. You can, however, set a crease attribute using the  or  SOPs which allows for more control.\n\n\n\t\t\n  outputcrease - If any creases are sharper than the , they will be left over in the resulting geometry. With this parameter enabled, these left over creases are created with the appropriate primitive attribute values, and placed in the specified group.\n\n\n\t\t\n  outcreasegroup - Name of the group to place the generated creases into.\n\n\n\t\t\n  closeholes -  - Choose how gaps are handled in the output geometry.\n\n noclose - Don't close cracks. pull - Move points on boundary of subdivided area in order to close cracks formed during the subdivision. stitch - Add polygons (triangles) to close the cracks caused by subdividing.\n\t\t\n  surroundpoly -  - Choose how to handle the polygons on either side of a crack when pulling or stitching it closed.\n\n nodiv - When  is chosen, many triangles are created, each having one vertex on one point of the non-subdivided edge. edges - Divides edges surrounding the subdivided area when pulling or stitching cracks by inserting new polygons (triangles) to close up the cracks. triangulate - Does exactly the same thing as , except it also triangulates the non-subdivided polygon. This is desirable because pulling the non-subdivided boundary towards the curved subdivided boundary will likely generate a non-planar polygon, so Triangulate will divide this polygon into smaller (planar) ones. Pulling cracks with a Bias of 1 and triangulating usually produces the nicest results.\n\t\t\n  bias - Determines which points are moved when pulling crack closed.\t\n0 means move points on subdivided area to meet boundary.\n1 means move points on boundary to meet subdivided area.\n\n\n\n\nBelow, a Subdivide  is used to create a subdivision surface from a Box SOP. The  of the subdivision is set to 2. The Facet SOP consolidates the points so that the box faces are treated as a unit.\n\n\n\n -\n -\n\nExtra Information for the Subdivide  can be accessed via an Info CHOP.\n\n\n\n - Number of points in this . - Number of primitives in this . - Number of particles in this . - Time spent in another thread updating geometry data on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time. - Time spent in another thread updating meta surface geometry data (such as metaballs or nurbs) on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2021.100002018.28070before 2018.28070\nSOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nA sequence of vertices form a Polygon in a SOP. Each vertex is an integer index into the Point List, and each Point holds an XYZ position and attributes like Normals and Texture Coordinates.\n\n\n\nA surface type in SOPs that includes polygon, curve (NURBS and Bezier), patch (NURBS and Bezier) and other basic shapes like sphere, tube and metaball. Points and Primitives are part of the Geometry Detail, which is a part of a SOP.\n\n\n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nThe Graphics Processing Unit. This is the high-speed, many-core processor of the graphics card/chip that takes geometry, images and data from the CPU and creates images and processed data.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Subdivide_SOP&oldid=24238\"",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Group",
      "label": "Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "subdivide - Subset of input to use as a polygonal mesh to subdivide. Accepts patterns, as described in Pattern Matching.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Creases",
      "label": "Creases",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "creases - This field allows you to specify a subset of the second input to use as creases. The elements of the second input specified by the  field are used as creases. Each edge in a crease polygon corresponds to the edge in the polygon mesh which has the same point numbers.  position is irrelevant. For polygon edges to be classified as the same edge, they must share the same points. Merely being physically close is not sufficient.\t\nThe primitive attribute creasesharpness is used to determine the sharpness of the specified creases unless overridden.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Depth",
      "label": "Depth",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "iterations - How many iterations to subdivide. Higher numbers give a smoother surface.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Override Crease Weight Attribute",
      "label": "Override Crease Weight Attribute",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "overridecrease - Determine if the crease sharpness should be determined by the primitive or vertex creaseweight attribute or by overridden by this .",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Crease Weight",
      "label": "Crease Weight",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "creaseweight - If the crease weight is overriden, this is the weight used.\t\nTip: The default is to have the Override Crease Weight Attribute enabled. So you can simply set a value which applies to all the creases. You can, however, set a crease attribute using the  or  SOPs which allows for more control.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Generate Resulting Creases",
      "label": "Generate Resulting Creases",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outputcrease - If any creases are sharper than the , they will be left over in the resulting geometry. With this parameter enabled, these left over creases are created with the appropriate primitive attribute values, and placed in the specified group.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "New Group",
      "label": "New Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outcreasegroup - Name of the group to place the generated creases into.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Close Cracks",
      "label": "Close Cracks",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "closeholes -  - Choose how gaps are handled in the output geometry.\n\n noclose - Don't close cracks. pull - Move points on boundary of subdivided area in order to close cracks formed during the subdivision. stitch - Add polygons (triangles) to close the cracks caused by subdividing.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Do Not Close",
      "label": "Do Not Close",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "noclose - Don't close cracks. pull - Move points on boundary of subdivided area in order to close cracks formed during the subdivision. stitch - Add polygons (triangles) to close the cracks caused by subdividing.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Surrounding Faces",
      "label": "Surrounding Faces",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "surroundpoly -  - Choose how to handle the polygons on either side of a crack when pulling or stitching it closed.\n\n nodiv - When  is chosen, many triangles are created, each having one vertex on one point of the non-subdivided edge. edges - Divides edges surrounding the subdivided area when pulling or stitching cracks by inserting new polygons (triangles) to close up the cracks. triangulate - Does exactly the same thing as , except it also triangulates the non-subdivided polygon. This is desirable because pulling the non-subdivided boundary towards the curved subdivided boundary will likely generate a non-planar polygon, so Triangulate will divide this polygon into smaller (planar) ones. Pulling cracks with a Bias of 1 and triangulating usually produces the nicest results.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "No Edge Division",
      "label": "No Edge Division",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "nodiv - When  is chosen, many triangles are created, each having one vertex on one point of the non-subdivided edge. edges - Divides edges surrounding the subdivided area when pulling or stitching cracks by inserting new polygons (triangles) to close up the cracks. triangulate - Does exactly the same thing as , except it also triangulates the non-subdivided polygon. This is desirable because pulling the non-subdivided boundary towards the curved subdivided boundary will likely generate a non-planar polygon, so Triangulate will divide this polygon into smaller (planar) ones. Pulling cracks with a Bias of 1 and triangulating usually produces the nicest results.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Bias",
      "label": "Bias",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "bias - Determines which points are moved when pulling crack closed.\t\n0 means move points on subdivided area to meet boundary.\n1 means move points on boundary to meet subdivided area.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.080Z",
      "rawData": {},
      "sourceElement": null
    }
  ],
  "parameterGroups": {},
  "codeExamples": [],
  "pythonExamples": [],
  "expressions": [],
  "commonInputs": [],
  "commonOutputs": [],
  "relatedOperators": [],
  "workflowPatterns": [],
  "images": [],
  "videos": [],
  "assets": [],
  "keywords": [
    "subdivide",
    "sop",
    "takes",
    "input",
    "polygon",
    "surface",
    "(which",
    "piped",
    "into",
    "both",
    "inputs),"
  ],
  "tags": [
    "SOP",
    "TouchDesigner",
    "Subdivide SOP"
  ],
  "searchWeight": 1,
  "contentHash": "",
  "processingDate": "2025-08-07T07:50:10.081Z",
  "processingVersion": "1.0.0",
  "isValid": true,
  "validationErrors": []
}