{
  "id": "chop_to_sop",
  "name": "SOP to",
  "displayName": "SOP to",
  "category": "CHOP",
  "subcategory": "Generators",
  "version": "",
  "lastUpdated": "2025-08-08T00:37:40.784Z",
  "sourceFile": "C:\\Program Files\\Derivative\\TouchDesigner\\Samples\\Learn\\OfflineHelp\\https.docs.derivative.ca\\CHOP_to_SOP.htm",
  "url": "",
  "description": "The CHOP to SOP takes CHOP channels and generates 3D polygons in a SOP. It reads sample data from a CHOP and converts it into point positions and point attributes. This makes it complementary to the SOP to CHOP. The Channels created by the SOP to CHOP can be modified and then re-inserted into the SOP network via a CHOP to SOP.",
  "summary": "The CHOP to SOP takes CHOP channels and generates 3D polygons in a SOP. It reads sample data from a CHOP and converts it into point positions and point attributes. This makes it complementary to the S",
  "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  to  takes  channels and generates 3D polygons in a . It reads sample data from a CHOP and converts it into point positions and point attributes. This makes it complementary to the SOP to CHOP. The Channels created by the SOP to CHOP can be modified and then re-inserted into the  network via a  to .\t\nBy default, the  is a line from (-1 0 0) to (1 0 0) containing one point for every sample in the .\t\t\nIt matches the input channels to the Channel  (tx ty tz) where possible. If tx or ty or tz don’t match anything, it just uses the value from the default line, and it only shows a Warning.\t\t\nThe simplest thing to do is to send it a channel named ty, which will make a 3D curve that looks like the  curve.\t\t\nThis does what a Point SOP with a op('wave1')['chan1'].eval(0) function can do, but is much faster.\t\t\nBy using point groups from the incoming , the channels can be inserted only into the group's points.\t\t\nThe  to  also supports custom attributes. If the user maps a channel to an attribute that is not found, that attribute is added to the points.  Currently, all custom attributes are floats and of size = 1. \t\t\nIn its default state it will attempt to replace the point positions (P(0) P(1) P(2)) with the channels named tx ty and tz.\t\t\nThe channel and attribute scope are first expanded into individual names and matched on a 1 to 1 basis. If you are filling P it doesn't matter if you specify t[xyz] or tx ty tz, both will replace P(0) P(1) P(2), which can be collapsed to P.\t\t\nFor example: Add custom attributes \"Scale\", \"Twist\" or \"Roll\" to the backbone's points with a  to .\t\t\nIf you connect a  to its input, it will use the  as a starting geometry versus the default line.\nchoptoSOP_Class\n\nContents\n \n \n \n \n \n \n\n\n\n\n\n  group - Modify only the points within this point group. If blank, all points are modified. Accepts patterns, as described in: Pattern Matching.\n\n\n\t\t\n  chop - Specifies which  Network /  contains the sample data to fetch.\n\n\n\t\t\n  startpos -  - Sets the bounds for positions that are not defined by a channel, ie. a channel is not set to one of the P attributes.\n\n startposx - startposy - startposz -\n\t\t\n  endpos -  - Sets the bounds for positions that are not defined by a channel, ie. a channel is not set to one of the P attributes.\n\n endposx - endposy - endposz -\n\t\t\n  method -  - The sample data fetch method:\n\n static - Uses one channel for each attribute, and all points use this channel (the first point resides at index 0, the next at 1, and so on). The length of the channels should be at least the number of points modified. animated - Uses one channel per attribute per point. The channels show the animation of each point's position/attribute values. Your channels should be named with 0, 1, 2, 3, etc. at the end of the names to correspond to each point they will replace (e.g., tx0, ty0, tz0, tx1, ty1, tz1). Your  should have (number of attributes * number of points) channels in it.\n\t\t\n  chanscope - The names to use to modify the attributes.\n\n\n\t\t\n  attscope - A string list of attributes to modify in the . List of Common :\t\nP -  position (X, Y, Z) - 3 values\nPw -  weight - 1 value\nCd -  color (red, green, blue, alpha) - 4 values\nN -  normal (X, Y, Z) - 3 values\nuv -  texture coordinates (U, V, W) - 3 valuesSee Attributes for a complete listing of attributes.\n\n\n\t\t\n  organize - Instead of using the point index, use the value of this attribute as the index to use when looking up into the .\n\n\n\t\t\n  mapping -  - Determines how the  samples are mapped to the geometry points.\n\n onetoone - The samples are simply mapped 1-to-1, each sample is mapped to the next point in order. scale - If there are more or less  samples than points in the geometry, then the  channels are resampled to interpolate values for all the geometry points.\n\t\t\n  compnml - Creates normals on the geometry.\n\n\n\t\t\n  comptang - Creates tangents on the geometry.\n\n\n\n\n\n -\n\nExtra Information for the  to  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\\n2022.241402021.100002018.28070before 2018.28070\nSOPs\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\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\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nInformation associated with SOP geometry. Points and primitives (polygons, NURBS, etc.) can have any number of attributes - position (P) is standard, and built-in optional attributes are normals (N), texture coordinates (uv), color (Cd), etc.\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\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=CHOP_to_SOP&oldid=24177\"\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-08T00:37:40.779Z",
      "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  to  takes  channels and generates 3D polygons in a . It reads sample data from a CHOP and converts it into point positions and point attributes. This makes it complementary to the SOP to CHOP. The Channels created by the SOP to CHOP can be modified and then re-inserted into the  network via a  to .\t\nBy default, the  is a line from (-1 0 0) to (1 0 0) containing one point for every sample in the .\t\t\nIt matches the input channels to the Channel  (tx ty tz) where possible. If tx or ty or tz don’t match anything, it just uses the value from the default line, and it only shows a Warning.\t\t\nThe simplest thing to do is to send it a channel named ty, which will make a 3D curve that looks like the  curve.\t\t\nThis does what a Point SOP with a op('wave1')['chan1'].eval(0) function can do, but is much faster.\t\t\nBy using point groups from the incoming , the channels can be inserted only into the group's points.\t\t\nThe  to  also supports custom attributes. If the user maps a channel to an attribute that is not found, that attribute is added to the points.  Currently, all custom attributes are floats and of size = 1. \t\t\nIn its default state it will attempt to replace the point positions (P(0) P(1) P(2)) with the channels named tx ty and tz.\t\t\nThe channel and attribute scope are first expanded into individual names and matched on a 1 to 1 basis. If you are filling P it doesn't matter if you specify t[xyz] or tx ty tz, both will replace P(0) P(1) P(2), which can be collapsed to P.\t\t\nFor example: Add custom attributes \"Scale\", \"Twist\" or \"Roll\" to the backbone's points with a  to .\t\t\nIf you connect a  to its input, it will use the  as a starting geometry versus the default line.\nchoptoSOP_Class\n\nContents\n \n \n \n \n \n \n\n\n\n\n\n  group - Modify only the points within this point group. If blank, all points are modified. Accepts patterns, as described in: Pattern Matching.\n\n\n\t\t\n  chop - Specifies which  Network /  contains the sample data to fetch.\n\n\n\t\t\n  startpos -  - Sets the bounds for positions that are not defined by a channel, ie. a channel is not set to one of the P attributes.\n\n startposx - startposy - startposz -\n\t\t\n  endpos -  - Sets the bounds for positions that are not defined by a channel, ie. a channel is not set to one of the P attributes.\n\n endposx - endposy - endposz -\n\t\t\n  method -  - The sample data fetch method:\n\n static - Uses one channel for each attribute, and all points use this channel (the first point resides at index 0, the next at 1, and so on). The length of the channels should be at least the number of points modified. animated - Uses one channel per attribute per point. The channels show the animation of each point's position/attribute values. Your channels should be named with 0, 1, 2, 3, etc. at the end of the names to correspond to each point they will replace (e.g., tx0, ty0, tz0, tx1, ty1, tz1). Your  should have (number of attributes * number of points) channels in it.\n\t\t\n  chanscope - The names to use to modify the attributes.\n\n\n\t\t\n  attscope - A string list of attributes to modify in the . List of Common :\t\nP -  position (X, Y, Z) - 3 values\nPw -  weight - 1 value\nCd -  color (red, green, blue, alpha) - 4 values\nN -  normal (X, Y, Z) - 3 values\nuv -  texture coordinates (U, V, W) - 3 valuesSee Attributes for a complete listing of attributes.\n\n\n\t\t\n  organize - Instead of using the point index, use the value of this attribute as the index to use when looking up into the .\n\n\n\t\t\n  mapping -  - Determines how the  samples are mapped to the geometry points.\n\n onetoone - The samples are simply mapped 1-to-1, each sample is mapped to the next point in order. scale - If there are more or less  samples than points in the geometry, then the  channels are resampled to interpolate values for all the geometry points.\n\t\t\n  compnml - Creates normals on the geometry.\n\n\n\t\t\n  comptang - Creates tangents on the geometry.\n\n\n\n\n\n -\n\nExtra Information for the  to  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\\n2022.241402021.100002018.28070before 2018.28070\nSOPs\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\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\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nInformation associated with SOP geometry. Points and primitives (polygons, NURBS, etc.) can have any number of attributes - position (P) is standard, and built-in optional attributes are normals (N), texture coordinates (uv), color (Cd), etc.\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\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=CHOP_to_SOP&oldid=24177\"\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-08T00:37:40.781Z",
      "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  to  takes  channels and generates 3D polygons in a . It reads sample data from a CHOP and converts it into point positions and point attributes. This makes it complementary to the SOP to CHOP. The Channels created by the SOP to CHOP can be modified and then re-inserted into the  network via a  to .\t\nBy default, the  is a line from (-1 0 0) to (1 0 0) containing one point for every sample in the .\t\t\nIt matches the input channels to the Channel  (tx ty tz) where possible. If tx or ty or tz don’t match anything, it just uses the value from the default line, and it only shows a Warning.\t\t\nThe simplest thing to do is to send it a channel named ty, which will make a 3D curve that looks like the  curve.\t\t\nThis does what a Point SOP with a op('wave1')['chan1'].eval(0) function can do, but is much faster.\t\t\nBy using point groups from the incoming , the channels can be inserted only into the group's points.\t\t\nThe  to  also supports custom attributes. If the user maps a channel to an attribute that is not found, that attribute is added to the points.  Currently, all custom attributes are floats and of size = 1. \t\t\nIn its default state it will attempt to replace the point positions (P(0) P(1) P(2)) with the channels named tx ty and tz.\t\t\nThe channel and attribute scope are first expanded into individual names and matched on a 1 to 1 basis. If you are filling P it doesn't matter if you specify t[xyz] or tx ty tz, both will replace P(0) P(1) P(2), which can be collapsed to P.\t\t\nFor example: Add custom attributes \"Scale\", \"Twist\" or \"Roll\" to the backbone's points with a  to .\t\t\nIf you connect a  to its input, it will use the  as a starting geometry versus the default line.\nchoptoSOP_Class\n\nContents\n \n \n \n \n \n \n\n\n\n\n\n  group - Modify only the points within this point group. If blank, all points are modified. Accepts patterns, as described in: Pattern Matching.\n\n\n\t\t\n  chop - Specifies which  Network /  contains the sample data to fetch.\n\n\n\t\t\n  startpos -  - Sets the bounds for positions that are not defined by a channel, ie. a channel is not set to one of the P attributes.\n\n startposx - startposy - startposz -\n\t\t\n  endpos -  - Sets the bounds for positions that are not defined by a channel, ie. a channel is not set to one of the P attributes.\n\n endposx - endposy - endposz -\n\t\t\n  method -  - The sample data fetch method:\n\n static - Uses one channel for each attribute, and all points use this channel (the first point resides at index 0, the next at 1, and so on). The length of the channels should be at least the number of points modified. animated - Uses one channel per attribute per point. The channels show the animation of each point's position/attribute values. Your channels should be named with 0, 1, 2, 3, etc. at the end of the names to correspond to each point they will replace (e.g., tx0, ty0, tz0, tx1, ty1, tz1). Your  should have (number of attributes * number of points) channels in it.\n\t\t\n  chanscope - The names to use to modify the attributes.\n\n\n\t\t\n  attscope - A string list of attributes to modify in the . List of Common :\t\nP -  position (X, Y, Z) - 3 values\nPw -  weight - 1 value\nCd -  color (red, green, blue, alpha) - 4 values\nN -  normal (X, Y, Z) - 3 values\nuv -  texture coordinates (U, V, W) - 3 valuesSee Attributes for a complete listing of attributes.\n\n\n\t\t\n  organize - Instead of using the point index, use the value of this attribute as the index to use when looking up into the .\n\n\n\t\t\n  mapping -  - Determines how the  samples are mapped to the geometry points.\n\n onetoone - The samples are simply mapped 1-to-1, each sample is mapped to the next point in order. scale - If there are more or less  samples than points in the geometry, then the  channels are resampled to interpolate values for all the geometry points.\n\t\t\n  compnml - Creates normals on the geometry.\n\n\n\t\t\n  comptang - Creates tangents on the geometry.\n\n\n\n\n\n -\n\nExtra Information for the  to  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\\n2022.241402021.100002018.28070before 2018.28070\nSOPs\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\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\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nInformation associated with SOP geometry. Points and primitives (polygons, NURBS, etc.) can have any number of attributes - position (P) is standard, and built-in optional attributes are normals (N), texture coordinates (uv), color (Cd), etc.\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\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=CHOP_to_SOP&oldid=24177\"",
      "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-08T00:37:40.783Z",
      "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": "group - Modify only the points within this point group. If blank, all points are modified. 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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "CHOP",
      "label": "CHOP",
      "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": "chop - Specifies which  Network /  contains the sample data to fetch.",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Start Position",
      "label": "Start Position",
      "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": "startpos -  - Sets the bounds for positions that are not defined by a channel, ie. a channel is not set to one of the P attributes.\n\n startposx - startposy - startposz -",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "X",
      "label": "X",
      "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": "startposx - startposy - startposz -",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "End Position",
      "label": "End Position",
      "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": "endpos -  - Sets the bounds for positions that are not defined by a channel, ie. a channel is not set to one of the P attributes.\n\n endposx - endposy - endposz -",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "X",
      "label": "X",
      "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": "endposx - endposy - endposz -",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Method",
      "label": "Method",
      "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": "method -  - The sample data fetch method:\n\n static - Uses one channel for each attribute, and all points use this channel (the first point resides at index 0, the next at 1, and so on). The length of the channels should be at least the number of points modified. animated - Uses one channel per attribute per point. The channels show the animation of each point's position/attribute values. Your channels should be named with 0, 1, 2, 3, etc. at the end of the names to correspond to each point they will replace (e.g., tx0, ty0, tz0, tx1, ty1, tz1). Your  should have (number of attributes * number of points) channels in it.",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Static",
      "label": "Static",
      "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": "static - Uses one channel for each attribute, and all points use this channel (the first point resides at index 0, the next at 1, and so on). The length of the channels should be at least the number of points modified. animated - Uses one channel per attribute per point. The channels show the animation of each point's position/attribute values. Your channels should be named with 0, 1, 2, 3, etc. at the end of the names to correspond to each point they will replace (e.g., tx0, ty0, tz0, tx1, ty1, tz1). Your  should have (number of attributes * number of points) channels in it.",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Channel Scope",
      "label": "Channel Scope",
      "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": "chanscope - The names to use to modify the attributes.",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Attribute Scope",
      "label": "Attribute Scope",
      "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": "attscope - A string list of attributes to modify in the . List of Common :\t\nP -  position (X, Y, Z) - 3 values\nPw -  weight - 1 value\nCd -  color (red, green, blue, alpha) - 4 values\nN -  normal (X, Y, Z) - 3 values\nuv -  texture coordinates (U, V, W) - 3 valuesSee Attributes for a complete listing of attributes.",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Organize by Attribute",
      "label": "Organize by 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": "organize - Instead of using the point index, use the value of this attribute as the index to use when looking up into the .",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Mapping",
      "label": "Mapping",
      "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": "mapping -  - Determines how the  samples are mapped to the geometry points.\n\n onetoone - The samples are simply mapped 1-to-1, each sample is mapped to the next point in order. scale - If there are more or less  samples than points in the geometry, then the  channels are resampled to interpolate values for all the geometry points.",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "One Sample to Each Point",
      "label": "One Sample to Each Point",
      "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": "onetoone - The samples are simply mapped 1-to-1, each sample is mapped to the next point in order. scale - If there are more or less  samples than points in the geometry, then the  channels are resampled to interpolate values for all the geometry points.",
      "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-08T00:37:40.783Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Compute Normals",
      "label": "Compute Normals",
      "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": "compnml - Creates normals on the geometry.",
      "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-08T00:37:40.784Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Compute Tangents",
      "label": "Compute Tangents",
      "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": "comptang - Creates tangents on the geometry.",
      "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-08T00:37:40.784Z",
      "rawData": {},
      "sourceElement": null
    }
  ],
  "parameterGroups": {},
  "codeExamples": [],
  "pythonExamples": [],
  "expressions": [],
  "commonInputs": [],
  "commonOutputs": [],
  "relatedOperators": [],
  "workflowPatterns": [],
  "images": [],
  "videos": [],
  "assets": [],
  "keywords": [
    "chop",
    "to",
    "sop",
    "takes",
    "channels",
    "generates",
    "polygons",
    "sop.",
    "reads",
    "sample",
    "data"
  ],
  "tags": [
    "CHOP",
    "TouchDesigner",
    "CHOP to SOP"
  ],
  "searchWeight": 1,
  "contentHash": "",
  "processingDate": "2025-08-08T00:37:40.784Z",
  "processingVersion": "1.0.0",
  "isValid": true,
  "validationErrors": []
}