Difference between revisions of "Skin SOP"
(Skin SOP Auto Create) 
(cleaning) (Tag: 2018.28070) 

(20 intermediate revisions by 2 users not shown)  
Line 1:  Line 1:  
−  +  {{Summary  
−  {{Summary  +  opType=skin 
−  +  opLabel=Skin  
−    +  short=The Skin SOP takes any number of faces and builds a skin surface over them. 
−  +  opClass=skinSOP_Class  
−    +  opFamily=SOP 
−  +  long=The Skin SOP takes any number of faces and builds a skin surface over them. If given two or more surfaces, however, the SOP builds four skins, one for each set of boundary curves.  
+  
+  All face and surface types are valid as long as the input(s) contain only faces or only surfaces. Different face types can be skinned together into one surface. For example, it is possible to skin a cubic open NURBS curve with a polygon and a quintic closed Bzier curve even if the three faces have a different number of control vertices. Similarly, this SOP can skin the boundary curves of surfaces of different types, number of rows, columns, etc.  
+  
+  When face types are input, the number of input SOPs and the number of faces in each input establish the skinning method. If only one input exists, a "linearskinning" operation is performed by running a skin across the crosssections. The result is the classic ruled or skinned surface. If a second input exists, a "bilinear skinning" is performed which computes a crossskin between the faces in the first input (U crosssections) and the faces in the second input (V crosssections). The result is a surface whose name derives from the number of crosssections in each direction: triangular, square, or multiple boundary surface, as well as a special case of swept surfaces and Nrails. When possible, crosssections are interpolated as isoparms.  
+  
+  If you need more control over tangency in the skin, try using the [[Bridge SOP]].  
+  
+  '''Tip:''' If you have problems with the results being skinned in the wrong order, try inserting a Sort SOP ahead of the Skin SOP, and <span class="tipTextSOP">Sort by Normals</span>.  
+  opLicense=NonCommercial  
+  opFilter=True  
}}  }}  
−  +  {{OPSection  
−  +  sectionName=Types of Surfaces  
+  sectionSummary=<span class="tipTextSOP">Single Boundary Surface</span>  One face, open or closed, is converted into a surface whose boundaries match the shape of the face exactly. Basically, this operation builds an interior area for the face. The surface type will be similar to the type of the face. For example, a NURBS curve yields a NURBS surface. If the curve is highly concave, the result may look less satisfactory than expected.  
−  +  [[Image:TouchGeometry81.gif]]  
−  +  <span class="tipTextSOP">Patch</span>  Two boundary faces define a ruled surface. The arrows on the two faces indicate the required parametric direction, which must be the same for both faces to avoid a bad twist in the surface. Use the Primitive SOP or the modeler to correct the problem. The surface type will be similar to the most complex type between the two crosssections. For example, if a polygon and a NURBS curve are skinned together, the surface type will be NURBS. The surface always contains the two faces as two of its boundaries.  
−  +  [[Image:TouchGeometry178.gif]]  
−  +  <span class="tipTextSOP">Linear Ruled/Skinned Surface</span>  Two or more faces are skinned linearly into a single surface. The arrows on the faces indicate the required parametric direction of each face, which must be the same for all faces to avoid bad twists or flips in the surface. Use the Primitive SOP or the modeler to correct the problem. The surface type will be similar to the most complex type among all crosssections. For example, if a polygon, a Bzier and a NURBS curve are skinned together, the surface type will be NURBS. The surface goes through each crosssection unless "Preserve Shape" if OFF (see parameters below). If the crosssections have repeated points, or share points between them, the result might not look good when shape preservation is enabled.  
−  
−  +  [[Image:TouchGeometry182.gif]]  
−  +  <span class="tipTextSOP">A Special Swept Surface</span>  This case does a bilinear skin and requires two inputs. The U face (1st input) is swept along the V face (second input). The two faces do not need to touch at their endpoints. If their endpoints coincide, though, the two of the surface's boundaries will match the two faces exactly. The surface type will be similar to the most complex type of the two faces. For example, if a polygon and a Bzier curve are skinned together, the surface type will be Bzier.  
−  +  [[Image:TouchGeometry186.gif]]  
−  +  <span class="tipTextSOP">Triangular Surface</span>  This case requires two inputs for the bilinear skin. One input has two faces; the other input, just one. The endpoints of the faces need not coincide, but if they do, the surface boundaries will match the face shapes exactly. Basically, the three faces define an interior area to be filled by a surface. The surface type will be similar to the most complex type among the three boundary faces. For example, if the faces are Bzier and NURBS curves, the surface will be a NURBS primitive.  
−  
−  +  [[Image:TouchGeometry190.gif]]  
−  +  <span class="tipTextSOP">Square Surface</span>  Four faces define the outer boundaries of a surface. This case requires two inputs for the bilinear skin: the two U boundaries (1st input) are crossskinned with the V boundaries (the 2nd input). The endpoints of the faces need not coincide, but if they do, the surface boundaries will match the face shapes exactly. Basically, the four faces define an interior area to be filled by a surface. The surface type will be similar to the most complex type among the four boundary faces. For example, if the faces are polygons and NURBS curves, the surface will be a NURBS primitive.  
−  +  [[Image:TouchGeometry194.gif]]  
−  
−  +  <span class="tipTextSOP">A Special Case of Mrails</span>  One input contains the rails, and the other input the crosssection. The crosssection is swept along the rails to form a surface. The arrows on the faces indicate the required parametric direction of each face, which must be the same for all faces to avoid bad twists or flips in the surface. Use the Primitive SOP or the modeler to correct the problem. The surface type will be similar to the most complex type among both rails and crosssection. For example, if the faces are polygons and NURBS curves, the surface will be a NURBS primitive.  
−  +  [[Image:TouchGeometry198.gif]]  
−  
−  +  <span class="tipTextSOP">MultipleBoundary Surface</span>  Not to be confused with Nary patches. This case generalizes the square surface concept by allowing more interior crosssections both in U and V. If no interior crosssections exist, this case reduces to a square surface. The surface interpolates all the boundaries and the interior crosssections. The result improves when the faces intersect. The arrows on the faces indicate the required parametric direction of each face, which must be the same for all faces to avoid bad twists or flips in the surface. Use the Primitive SOP or the modeler to correct the problem. The surface type will be similar to the most complex type among all faces. For example, if the faces are polygons and NURBS curves, the surface will be a NURBS primitive.  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
+  [[Image:TouchGeometry205.gif]]  
+  opFamily=SOP}}  
+  {{ParameterPage  
+  pageName=  
+  opFamily=SOP  
+  pageSummary=  
+  items=  
+  {{ParameterparItems=  
+  parLabel=U Cross Sections  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=Empty by default, this field provides a way to specify a subset of the first input's faces and surfaces. Do so by selecting one or more primitive groups from this field's popup menu.  
+  parOrder=0  
+  parName=uprims  
+  parType=  
+  parReadOnly=  
+  }}  
+  {{ParameterparItems=  
+  parLabel=V Cross Sections  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=Empty by default, this field provides a way to specify a subset of V faces. If a second input exists, the primitive groups available for selection are taken from the second input. If only the first input is present, the groups listed in the popup menu belong to the first input. This means that two inputs are not always needed for a bilinear skin as long as the first input has both U and V groups in it.  
+  parOrder=1  
+  parName=vprims  
+  parType=  
+  parReadOnly=  
+  }}  
+  {{ParameterparItems=  
+  {{ParameterItemitemName=rows  
+  itemSummary=Creates horizontal lines.  
+  itemLabel=Rows  
+  opFamily=SOP  
+  parName=surftype  
+  }}<!  
+  >{{ParameterItemitemName=cols  
+  itemSummary=Creates vertical lines.  
+  itemLabel=Columns  
+  opFamily=SOP  
+  parName=surftype  
+  }}<!  
+  >{{ParameterItemitemName=rowcol  
+  itemSummary=Both Rows and Columns. Looks like Quads in wire frame display, but all polygons are open (if the primitive type is polygon). Compare them in the Model Editor.  
+  itemLabel=Rows and Columns  
+  opFamily=SOP  
+  parName=surftype  
+  }}<!  
+  >{{ParameterItemitemName=triangles  
+  itemSummary=Build the grid with Triangles.  
+  itemLabel=Triangles  
+  opFamily=SOP  
+  parName=surftype  
+  }}<!  
+  >{{ParameterItemitemName=quads  
+  itemSummary=Generates sides composed of quadrilaterals (default).  
+  itemLabel=Quadrilaterals  
+  opFamily=SOP  
+  parName=surftype  
+  }}<!  
+  >{{ParameterItemitemName=alttriangles  
+  itemSummary=Generates triangles that are opposed; similar to the Triangles option.  
+  itemLabel=Alternating Triangles  
+  opFamily=SOP  
+  parName=surftype  
+  }}  
+  
+  parLabel=Connectivity  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=(Results only viewable for polygons and meshes).  
+  parOrder=2  
+  parName=surftype  
+  parType=  
+  parReadOnly=  
+  }}  
+  {{ParameterparLabel=Preserve Shape  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=This parameter determines the precision of a linear skin (case c in the diagram). If enabled, it ensures that the generated surface goes through each crosssection. Here, a crosssection can be a face or a surface boundary, depending on the types being skinned. If disabled, Preserve Shape produces a surface whose CVs coincide with the CVs of the crosssections (after they have being converted to a common type and an identical number of CVs). The skinning algorithm is faster with shape preservation OFF, but it lacks precision.  
+  
+  Skinning with shape preservation ON may produce unintuitive shapes when the crosssections have many coincident CVs or are very close to each other. In this case try to jitter the CVs, vary the V Order (see below), or simply disable shape preservation.  
+  
+  Preserve shape is deactivated when doing bilinear skinning.  
+  parOrder=3  
+  parName=keepshape  
+  parType=  
+  parReadOnly=  
+  parItems=}}  
+  {{ParameterparItems=  
+  {{ParameterItemitemName=nonewv  
+  itemSummary=  
+  itemLabel=Off  
+  opFamily=SOP  
+  parName=closev  
+  }}<!  
+  >{{ParameterItemitemName=wv  
+  itemSummary=  
+  itemLabel=On  
+  opFamily=SOP  
+  parName=closev  
+  }}<!  
+  >{{ParameterItemitemName=ifprimwv  
+  itemSummary=  
+  itemLabel=If Primitive does  
+  opFamily=SOP  
+  parName=closev  
+  }}  
+  
+  parLabel=V Wrap  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=This menu (menu: Off, On, If primitive does) setting determines whether the surface should be wrapped in the V parametric direction. The options are to open (Off), close (On), or inherit the closure type from the crosssections. V Wrap is ignored when doing bilinear skinning.  
+  parOrder=4  
+  parName=closev  
+  parType=  
+  parReadOnly=  
+  }}  
+  {{ParameterparLabel=Use V Order  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=Enables or disables the use of the <span class="tipTextSOP">V Order</span> parameter. If the flag is <span class="tipTextSOP">OFF</span>, the skinned surface is built as a cubic (order 4) in V, unless fewer than four crosssections for an open V or 3 crosssection for a closed V are given. For example, if the input consists of two faces and the V Wrap flag is <span class="tipTextSOP">OFF</span>, the surface will be linear in V (order 2). The status of the V Order flag is irrelevant when the faces or surfaces are all polygons or meshes respectively, and when doing a bilinear skin.  
+  
+  Here, crosssection refers either to a face or a surface boundary, depending on the types being skinned.  
+  parOrder=5  
+  parName=force  
+  parType=  
+  parReadOnly=  
+  parItems=}}  
+  {{ParameterparLabel=V Order  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=Specifies the order of the skinned surface when the <span class="tipTextSOP">V Order</span> flag is enabled. A NURB surface of order "n" can be constructed with at least n or n1 crosssections, depending on whether the surface is open or closed in V respectively. A Bzier surface of the same order can be constructed with at least M*(n1) + 1 crosssections if open, or M*(n1) crosssections if closed. M is a nonnegative, integer multiplier. The V order is ignored when the faces or surfaces are all polygons or meshes respectively, and when building a bilinear skin.  
+  parOrder=6  
+  parName=orderv  
+  parType=  
+  parReadOnly=  
+  parItems=  
+  }}  
+  {{ParameterparItems=  
+  {{ParameterItemitemName=all  
+  itemSummary=  
+  itemLabel=All Primitives  
+  opFamily=SOP  
+  parName=skinops  
+  }}<!  
+  >{{ParameterItemitemName=group  
+  itemSummary=  
+  itemLabel=Groups of N Primitives  
+  opFamily=SOP  
+  parName=skinops  
+  }}<!  
+  >{{ParameterItemitemName=skip  
+  itemSummary=  
+  itemLabel=Skip Every Nth Primitive  
+  opFamily=SOP  
+  parName=skinops  
+  }}  
+  
+  parLabel=Skin  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=Can optionally skin subgroups of n primitives or every nth primitive in a cyclical manner.  
+  
+  '''For example'''; assume there are six primitives numbered for 0  5, and <span class="tipTextSOP">N</span> = 2. Then,  
+  
+  * Groups will generate 01 23 45  
+  * Skipping will generate 026 and 135.  
+  parOrder=7  
+  parName=skinops  
+  parType=  
+  parReadOnly=}}  
+  {{ParameterparLabel=N  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=Determines the number of primitives to be either grouped or skipped. N2.  
+  parOrder=8  
+  parName=inc  
+  parType=  
+  parReadOnly=  
+  parItems=  
+  }}  
+  {{ParameterparLabel=Keep Primitives  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=Determines whether the input primitives will be preserved (On) or deleted from the output (Off).  
+  parOrder=9  
+  parName=prim  
+  parType=  
+  parReadOnly=  
+  parItems=  
+  }}  
+  {{ParameterparLabel=Output Polygons  
+  opType=skin  
+  opFamily=SOP  
+  parSummary=If set, this flag instructs the program to convert the skinned surface(s) to polygons if the surface type is Mesh.  
+  parOrder=10  
+  parName=polys  
+  parType=  
+  parReadOnly=  
+  parItems=  
}}  }}  
−  +  }}  
−  +  {{InputsPage  
−  +  opFamily=SOP  
−  +  opInputs={{OPInput  
−  +  opFamily=SOP  
−  +  inputIndex=0  
−  +  inputName=  
−  +  inputSummary=  
−  +  }}<!>{{OPInput  
−  +  opFamily=SOP  
−  +  inputIndex=1  
−  +  inputName=  
−  +  inputSummary=  
−  +  }}  
−  +  }}{{History  
−  +  }}  
−  +  {{SOPNavBox  
−  +  opFamily=SOP  
−  +  }}  
−  +  {{#invoke:Category  
−  +  listSOPs}}  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  
−  {{:  
−  
−  
− 
Latest revision as of 18:57, 24 January 2019
Summary[edit]
The Skin SOP takes any number of faces and builds a skin surface over them. If given two or more surfaces, however, the SOP builds four skins, one for each set of boundary curves.
All face and surface types are valid as long as the input(s) contain only faces or only surfaces. Different face types can be skinned together into one surface. For example, it is possible to skin a cubic open NURBS curve with a polygon and a quintic closed Bzier curve even if the three faces have a different number of control vertices. Similarly, this SOP can skin the boundary curves of surfaces of different types, number of rows, columns, etc.
When face types are input, the number of input SOPs and the number of faces in each input establish the skinning method. If only one input exists, a "linearskinning" operation is performed by running a skin across the crosssections. The result is the classic ruled or skinned surface. If a second input exists, a "bilinear skinning" is performed which computes a crossskin between the faces in the first input (U crosssections) and the faces in the second input (V crosssections). The result is a surface whose name derives from the number of crosssections in each direction: triangular, square, or multiple boundary surface, as well as a special case of swept surfaces and Nrails. When possible, crosssections are interpolated as isoparms.
If you need more control over tangency in the skin, try using the Bridge SOP.
Tip: If you have problems with the results being skinned in the wrong order, try inserting a Sort SOP ahead of the Skin SOP, and Sort by Normals.
Types of Surfaces
Single Boundary Surface  One face, open or closed, is converted into a surface whose boundaries match the shape of the face exactly. Basically, this operation builds an interior area for the face. The surface type will be similar to the type of the face. For example, a NURBS curve yields a NURBS surface. If the curve is highly concave, the result may look less satisfactory than expected.
Patch  Two boundary faces define a ruled surface. The arrows on the two faces indicate the required parametric direction, which must be the same for both faces to avoid a bad twist in the surface. Use the Primitive SOP or the modeler to correct the problem. The surface type will be similar to the most complex type between the two crosssections. For example, if a polygon and a NURBS curve are skinned together, the surface type will be NURBS. The surface always contains the two faces as two of its boundaries.
Linear Ruled/Skinned Surface  Two or more faces are skinned linearly into a single surface. The arrows on the faces indicate the required parametric direction of each face, which must be the same for all faces to avoid bad twists or flips in the surface. Use the Primitive SOP or the modeler to correct the problem. The surface type will be similar to the most complex type among all crosssections. For example, if a polygon, a Bzier and a NURBS curve are skinned together, the surface type will be NURBS. The surface goes through each crosssection unless "Preserve Shape" if OFF (see parameters below). If the crosssections have repeated points, or share points between them, the result might not look good when shape preservation is enabled.
A Special Swept Surface  This case does a bilinear skin and requires two inputs. The U face (1st input) is swept along the V face (second input). The two faces do not need to touch at their endpoints. If their endpoints coincide, though, the two of the surface's boundaries will match the two faces exactly. The surface type will be similar to the most complex type of the two faces. For example, if a polygon and a Bzier curve are skinned together, the surface type will be Bzier.
Triangular Surface  This case requires two inputs for the bilinear skin. One input has two faces; the other input, just one. The endpoints of the faces need not coincide, but if they do, the surface boundaries will match the face shapes exactly. Basically, the three faces define an interior area to be filled by a surface. The surface type will be similar to the most complex type among the three boundary faces. For example, if the faces are Bzier and NURBS curves, the surface will be a NURBS primitive.
Square Surface  Four faces define the outer boundaries of a surface. This case requires two inputs for the bilinear skin: the two U boundaries (1st input) are crossskinned with the V boundaries (the 2nd input). The endpoints of the faces need not coincide, but if they do, the surface boundaries will match the face shapes exactly. Basically, the four faces define an interior area to be filled by a surface. The surface type will be similar to the most complex type among the four boundary faces. For example, if the faces are polygons and NURBS curves, the surface will be a NURBS primitive.
A Special Case of Mrails  One input contains the rails, and the other input the crosssection. The crosssection is swept along the rails to form a surface. The arrows on the faces indicate the required parametric direction of each face, which must be the same for all faces to avoid bad twists or flips in the surface. Use the Primitive SOP or the modeler to correct the problem. The surface type will be similar to the most complex type among both rails and crosssection. For example, if the faces are polygons and NURBS curves, the surface will be a NURBS primitive.
MultipleBoundary Surface  Not to be confused with Nary patches. This case generalizes the square surface concept by allowing more interior crosssections both in U and V. If no interior crosssections exist, this case reduces to a square surface. The surface interpolates all the boundaries and the interior crosssections. The result improves when the faces intersect. The arrows on the faces indicate the required parametric direction of each face, which must be the same for all faces to avoid bad twists or flips in the surface. Use the Primitive SOP or the modeler to correct the problem. The surface type will be similar to the most complex type among all faces. For example, if the faces are polygons and NURBS curves, the surface will be a NURBS primitive.
Parameters  Page
U Cross Sections uprims
 Empty by default, this field provides a way to specify a subset of the first input's faces and surfaces. Do so by selecting one or more primitive groups from this field's popup menu.
V Cross Sections vprims
 Empty by default, this field provides a way to specify a subset of V faces. If a second input exists, the primitive groups available for selection are taken from the second input. If only the first input is present, the groups listed in the popup menu belong to the first input. This means that two inputs are not always needed for a bilinear skin as long as the first input has both U and V groups in it.
Connectivity surftype
 ⊞  (Results only viewable for polygons and meshes).
 Rows
rows
 Creates horizontal lines.
 Columns
cols
 Creates vertical lines.
 Rows and Columns
rowcol
 Both Rows and Columns. Looks like Quads in wire frame display, but all polygons are open (if the primitive type is polygon). Compare them in the Model Editor.
 Triangles
triangles
 Build the grid with Triangles.
 Quadrilaterals
quads
 Generates sides composed of quadrilaterals (default).
 Alternating Triangles
alttriangles
 Generates triangles that are opposed; similar to the Triangles option.
Preserve Shape keepshape
 This parameter determines the precision of a linear skin (case c in the diagram). If enabled, it ensures that the generated surface goes through each crosssection. Here, a crosssection can be a face or a surface boundary, depending on the types being skinned. If disabled, Preserve Shape produces a surface whose CVs coincide with the CVs of the crosssections (after they have being converted to a common type and an identical number of CVs). The skinning algorithm is faster with shape preservation OFF, but it lacks precision.
Skinning with shape preservation ON may produce unintuitive shapes when the crosssections have many coincident CVs or are very close to each other. In this case try to jitter the CVs, vary the V Order (see below), or simply disable shape preservation.
Preserve shape is deactivated when doing bilinear skinning.
V Wrap closev
 ⊞  This menu (menu: Off, On, If primitive does) setting determines whether the surface should be wrapped in the V parametric direction. The options are to open (Off), close (On), or inherit the closure type from the crosssections. V Wrap is ignored when doing bilinear skinning.
 Off
nonewv

 On
wv

 If Primitive does
ifprimwv

Use V Order force
 Enables or disables the use of the V Order parameter. If the flag is OFF, the skinned surface is built as a cubic (order 4) in V, unless fewer than four crosssections for an open V or 3 crosssection for a closed V are given. For example, if the input consists of two faces and the V Wrap flag is OFF, the surface will be linear in V (order 2). The status of the V Order flag is irrelevant when the faces or surfaces are all polygons or meshes respectively, and when doing a bilinear skin.
Here, crosssection refers either to a face or a surface boundary, depending on the types being skinned.
V Order orderv
 Specifies the order of the skinned surface when the V Order flag is enabled. A NURB surface of order "n" can be constructed with at least n or n1 crosssections, depending on whether the surface is open or closed in V respectively. A Bzier surface of the same order can be constructed with at least M*(n1) + 1 crosssections if open, or M*(n1) crosssections if closed. M is a nonnegative, integer multiplier. The V order is ignored when the faces or surfaces are all polygons or meshes respectively, and when building a bilinear skin.
Skin skinops
 ⊞  Can optionally skin subgroups of n primitives or every nth primitive in a cyclical manner.
For example; assume there are six primitives numbered for 0  5, and N = 2. Then,
 Groups will generate 01 23 45
 Skipping will generate 026 and 135.
 All Primitives
all

 Groups of N Primitives
group

 Skip Every Nth Primitive
skip

N inc
 Determines the number of primitives to be either grouped or skipped. N2.
Keep Primitives prim
 Determines whether the input primitives will be preserved (On) or deleted from the output (Off).
Output Polygons polys
 If set, this flag instructs the program to convert the skinned surface(s) to polygons if the surface type is Mesh.
Operator Inputs
 Input 0 
 Input 1 
TouchDesigner Build:
SOPs 

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 
An Operator Family that reads, creates and modifies 3D polygons, curves, NURBS surfaces, spheres, meatballs and other 3D surface data.
A surface type in SOPs including polygon, curve (NURBS and Bezier), patch (NURBS and Bezier) and other shapes like sphere, tube, and metaball. Points and Primitives are part of the Geometry Detail, which is a part of a SOP.