Nodes
From SOuP wiki
[edit] Example files
All example file can be downloaded here
[edit] converters
[edit] arrayDataContainer
- Details:
- Usage: arrayDataContainer can create interesting effects like wetmaps or accumulated damage. Generated data can be used to drive blendShapes and texture maps.
[edit] arrayToArray
- Details:
- Usage:
- Examples:
- Example Files:
[edit] arrayToDynArrays
- Details:
- Usage: Using arrayToDynArrays nodes we can build kDynArrayAttrsData structures to control the geometry instancer nodes in a procedural manner, without the need to go through particles and expressions.
[edit] arrayToMulti
- Details:
- Usage:
- Examples:
- Example Files:
[edit] arrayToPointColor
converts an array to point colors.
- Details:
- Usage:
- Examples:
- Example Files:
- pointCloudField_textureToArray_arrayToPointColor_pointAttributeToArray.ma
- pointCloudField_textureToArray_point_arrayToPointColor.ma
- pointCloudFluidEmitter_attributeTransferMode_arrayToPointColor_1.ma
[edit] fluidAttributeToArray
extracts the voxel properties from a fluid (ex position, density, etc).
- Details:
- Usage:
- Examples:
- Example Files:
- fluidAttributeToArray_1.ma
- fluidAttributeToArray_2.ma
[edit] multiToArray
- Details:
- Usage:
- Examples:
- Example Files:
[edit] reMapArray
set range, and clamping for arrays.
- Details:
- Usage: Similar to the “set range” node for textures, with an added clamping function.
- Examples:
- Example Files:
- group_attributeTransfer_remapArray_changingPointCountWithProperMotionBlur_1.ma
- group_attributeTransfer_remapArray_changingPointCountWithProperMotionBlur_2.ma
[edit] textureToArray
converts texture to point colors.
- Details:
- Usage:
- Examples:
- Example Files:
- pointCloudField_textureToArray_arrayToPointColor_pointAttributeToArray.ma
- pointCloudField_textureToArray_point_arrayToPointColor.ma
- textureToArray_attributeTransfer_peak.ma
- textureToArray_attributeTransfer_pointCloudFluidEmitter.ma
- textureToArray_peak.ma
[edit] pfxToArray
extracts paintFX L-System data for further modification and custom usage.
- Details:
- Usage:
- Examples:
- Example Files:
- pfxHairToArray1.ma
- pfxToArray.ma
- pfxToArray1.ma
- pfxToArray2.ma
- pfxToArray3.ma
[edit] pointAttributeToArray
- Details:
- Usage:
- Examples:
- Example Files:
[edit] rgbaToColorAndAlpha
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files:
[edit] constraints
[edit] vertexConstraint
creates locator(s) locked to selected vertex(ices)
- Details: The node locks a locator(s) to the selected vertices, the locator does not effect the position of the vertex, and is mainly used to parent object to deforming geometry when normal joint or other techniques won’t work, or b/c this method is quicker than locating the correct joint.
- Usage: Select a vertex or a number of vertices on a mesh
click the shelf button and every selected vertices will have a locator
locked to the surface.
- Video Tutorial:
- Examples:
- Example Files:
[edit] deformers
[edit] peak
A deformer that offsets points along their averaged normal.
- Details:
- Usage:
- This effect can be used for many things - static or animated wrinkles, liquidish looking deformations, bulging flesh, etc.
- Video Tutorial:
- Examples:
- Example Files:
- peak_attributeTransfer_organic_stuff.ma
- peak_watersim.ma
- textureToArray_peak.ma
[edit] rayProject
projects point clouds (meshes, curves, surfaces and particles) onto mesh objects.
- Details:
- Usage: There are multiple options for precise control
over what gets projected, where and how. A subset of the effects that
can be produced with this node are also known as shrink-wrapping.
- Video Tutorial:
- Examples:
- Example Files:
- rayProject_1.ma
- rayProject_2.ma
- rayProject_3.ma
- rayProject_3a.ma
- rayProject_4.ma
- rayProject_5.ma
- rayProject_collisions_with_history.ma
[edit] retarget
relatively transfer the shape of one geometry object onto another.
- Details:
- Usage: There are multiple build-in methods that solve
many general and specific cases. The node can be used as standard or
"relative" wrap deformer, uvBlendShaper, or mixture of both.
- Video Tutorial:
- Examples:
- Example Files:
- retarget1.ma
[edit] smooth
mesh smoothing with volume preservation.
- Details:
- Usage: There are 2 methods for smoothing, fast and
accurate. Fast method is useful for objects with "simple" topology -
some verts starting to misbehave on complex meshes. The accurate method
will take care of that, but on the price of additional calculations.
- Video Tutorial:
- Examples:
- Example Files:
- smooth_1.ma
- Authors: David Corral & Peter Shipkov
[edit] emitters
[edit] pointCloudFluidEmitter
emits fluid properties in the voxel grid from the input point positions.
- Details: Like the maya fluid emitter the pointCloudFluidEmitter can emit, density, heat, fuel along with per-point radius and color(from specified colorSet). The node can use pointCloud (arrays), swept geometry or regular mesh, surface, curve or particles as input.
- Basic Emitter Attributes
- Emission Type
- Point: uses radius PP for size
- Omni: uses emitter radius PP
- Surface: emit from many points scattered across the surface
- Point Cloud
- inputPositionPP: use the point array coming from the .inPositionPP attribute
- surface scatter: this utilizes the standard maya surface emission pipeline, but instead of scattering points on the surface of the object it directly uses the original points to emit fluid from.(formally called swept geometry)
- Emission Type
- Basic Emitter Attributes
- Point Cloud Colors
- Input RGBA PP: if you have something connected to the inRgbaPP attribute that will be used to emit color into the voxels.
- Vertex Color: if you use use mesh object as surface emitter you can directly use these colors to emit into the voxels.(formally called swept geometry)
- Rate: is useful ramp up or down all of the emitted fluid attributes from one place.
- Randomize Input Rate PP: This is similar to the "jitter" option, but applied to the emission rate. Basically a repeatable random states that will be the same if you play the simulation over and over again.
- Jitter
- Attribute Transfer Mode: When check there is no simulation remaining in the fluid container after the current simulation step is finished. The result is "hard" transfering of attributes from something to the fluid container. Intended for voxelizing geometry, not for simulating fluids.
- Point Cloud Colors
- Fluid Attributes
- Fluid Density Emission: amount of Density to emit per second.
- Fluid Heat Emission: amount of Heat to emit per second.
- Fluid Fuel Emission: amount of Fuel to emit per second.
- Fluid Dropoff: like the fluid emitter this fades/attenuates the edges of the emitted shape.
- Emit Fluid Color: weather or not to emit color from the emitter side, dynamic color needs to be set on the fluid as well.
- Color Set: We can assign mulitple color sets to the same mesh object and each set may contain different point colors. This field allows us to pick which one we want to use. If empty - use the default one.
- Fluid Color: if the fluid is set to dynamic color and the emitter has emit color check it will override the "color" shader attribute in the fluid shader with the emitted color.
- Fluid Attributes
- Omni Emitter Specific
- Min Distance: The minimum distance the emitter emits from the input particle.
- Max Distance: The maximum distance the emitter emits from the input particle.
- Omni Emitter Specific
- Surface Emitter Specific
- Texture Rate:
- Surface Emitter Specific
- Usage: Selected fluids will be automatically assigned this emitter if the shelf button is used, if the right click is used then you have to manually connect it in the dynamic relationship editor. You have to connect a point cloud with the "connect" shelf button.
- Video Tutorial:
- Examples:
- http://www.soup-dev.com/videos/scatter_pointCloudFluidEmitter_fillObject_1.mov
- http://www.soup-dev.com/videos/scatter_pointCloudFluidEmitter_fillObject_2.mov
- http://www.soup-dev.com/videos/pointCloudFluidEmitter_flamethrower.mov
- http://www.soup-dev.com/videos/pointCloudFluidEmitter_pointCloudField_flamethrower.mov
- http://www.soup-dev.com/videos/pointCloudFluidEmitter_attributeTransferMode_arrayToPointColor_1.mov
- http://www.soup-dev.com/videos/pointCloudFluidEmitter_pointColors_2.mov
- http://www.soup-dev.com/videos/textureToArray_attributeTransfer_pointCloudFluidEmitter.mov
- Example Files:
- computeVelocity_arrayToPointColor_attributeTransfer_pointCloudFluidEmitter.ma
- pointCloudFluidEmitter_attributeTransfer_fluidAttrToArray_editVoxelProperties.ma
- pointCloudFluidEmitter_attributeTransferMode_2.ma
- pointCloudFluidEmitter_attributeTransferMode_3.ma
- pointCloudFluidEmitter_attributeTransferMode_arrayToPointColor_1.ma
- pointCloudFluidEmitter_flamethrower.ma
- pointCloudFluidEmitter_particles_1.ma
- pointCloudFluidEmitter_pointCloudField_flamethrower.ma
- pointCloudFluidEmitter_pointColors_1.ma
- pointCloudFluidEmitter_pointColors_2.ma
- pointCloudFluidEmitter_pointColors_3.ma
- pointCloudFluidEmitter_scatter_fillObject.ma
- scatter_pointCloudFluidEmitter_fillObject_1.ma
- scatter_pointCloudFluidEmitter_fillObject_2.ma
- textureToArray_attributeTransfer_pointCloudFluidEmitter.ma
[edit] fields
[edit] pointCloudField
radius per-point fields from the input point positions.
- Details:
- Usage: pointCloudFields we can use any geometry or
custom arrays to control dynamic objects in ways that are hard to
achieve otherwise.
- Video Tutorial:
- Examples:
- Example Files:
- pointCloudField_1.ma
- pointCloudField_2.ma
- pointCloudField_displayComponents_tornado.ma
- pointCloudField_textureToArray_arrayToPointColor_pointAttributeToArray.ma
- pointCloudField_textureToArray_point_arrayToPointColor.ma
- pointCloudFluidEmitter_pointCloudField_flamethrower.ma
[edit] generators
[edit] attributeTransfer
Transfers attributes from one object to another.
- Details:
- Usage:
- Video Tutorial:
- Examples:
- http://www.soup-dev.com/videos/textureToArray_attributeTransfer_pointCloudFluidEmitter.mov
- http://www.soup-dev.com/videos/textureToArray_attributeTransfer_peak.mov
- http://www.soup-dev.com/videos/pointCloudFluidEmitter_attributeTransferMode_arrayToPointColor_1.mov
- http://www.soup-dev.com/videos/attributeTransfer_point_voronoiPattern.mov
- http://www.soup-dev.com/videos/computeVelocity_arrayToPointColor_attributeTransfer_pointCloudFluidEmitter.mov
- http://www.soup-dev.com/videos/group_attributeTransfer_remapArray_changingPointCountWithProperMotionBlur_1_render.mov
- http://www.soup-dev.com/videos/group_attributeTransfer_pointCloud_animatedComponentsList__acidRain.mov
- http://www.soup-dev.com/videos/attributeTransfer_pointCloud_pointPositions_pointColors.mov
- http://www.soup-dev.com/videos/attributeTransfer_pointColors_2.mov
- Example Files:
- _attributeTransferFromParticleToParticle_1.ma
- _attributeTransferFromParticleToParticle_2.ma
- _attributeTransferFromParticleToParticle_3_oldSolver.ma
- _attributeTransferFromParticleToParticle_4_emitFromTextured.ma
- _attributeTransferFroSurfaceToParticle_0.ma
- _attributeTransferFroSurfaceToParticle_1_halfPipe.ma
- attributeTransfer_convex_wrap_1.ma
- attributeTransfer_convex_wrap_2.ma
- attributeTransfer_curveCvColors.ma
- attributeTransfer_point_voronoiPattern.ma
- attributeTransfer_pointCloud_pointColors.ma
- attributeTransfer_pointCloud_voronoiPattern.ma
- attributeTransfer_pointColors_1.ma
- attributeTransfer_pointColors_2.ma
- attributeTransfer_pointNormals.ma
- attributeTransfer_pointPositions_1.ma
- attributeTransfer_pointPositions_2.ma
- attributeTransfer_pointPositions_pointColors.ma
- attributeTransfer_pointRadius.ma
- attributeTransfer_weightMap.ma
- computeVelocity_arrayToPointColor_attributeTransfer_pointCloudFluidEmitter.ma
- group_attributeTransfer_pointCloud_animatedComponentsList__acidRain.ma
- group_attributeTransfer_remapArray_changingPointCountWithProperMotionBlur_1.ma
- group_attributeTransfer_remapArray_changingPointCountWithProperMotionBlur_2.ma
- multiAttributeTransfer_1.ma
- multiAttributeTransfer_2.ma
- multiAttributeTransfer_3.ma
- multiAttributeTransfer_blendShapeTargets.ma
- multiAttributeTransfer_skinCluster.ma
- peak_attributeTransfer_organic_stuff.ma
- pointCloudFluidEmitter_attributeTransfer_fluidAttrToArray_editVoxelProperties.ma
- pointCloudFluidEmitter_attributeTransferMode_2.ma
- pointCloudFluidEmitter_attributeTransferMode_3.ma
- pointCloudFluidEmitter_attributeTransferMode_arrayToPointColor_1.ma
- textureToArray_attributeTransfer_peak.ma
[edit] pointCloudToCurve
creates a curve from the input point cloud.
- Details: It creates a pointCloudToCurve node which based on bunch of points on the input generates nurbs curve. You have to create a nurbsCurve shape and connect the pointCloudToCurve output to it in order to see it in the viewport, otherwise you can simply query the output of the pointCloutToCurve node to get the curve data as MObject.
- Unlike the built in scatter node points to Cruve button this does not bake the results to a final curve but keeps history with changing point counts.
- Usage:
- create the node from the shelf
- connect points to ~.outPositionPP to pointCloudToCurve.inArray
- create NURBS curve (circle works, but I opened it for good measure)
- connect pointCloudToCurve to the NURBS curve pointCloudToCurve.outCurve to nurbsShape.create
- Select a point cloud or scatter node (which has this command built into it) select shelf icon create. The result is a baked curve that is not connected to the graph with history.
- Video Tutorial:
- Examples:
- Example Files:
- pointCloudToCurve_pointAttributeToArray_group.ma
[edit] scatter
generates point clouds within an objects volume and/or across its surface.
- Details: scatter shelf icon creates a scatter (transform)
and a scatterShape. The shape node (scatterShape1) is the main
functioning node, for all intensive purposes you can forget about the
transform.
- Global:
- Scatter Mode: will select how to scatter the points, surfacae, volume or both.
- Point Density: is really the number of itterations the scatter node will perform in order to fill the volume, which really means the higher you go the slower it will get.
- Max Number of Points: the maximun number of calculated points, which may not be the max number of displayed points.
- Seed: random number to help randomly distribute the points. Change this only randomly changes where the points are distributed.
- Use Vertex Color as Mask: Allows you to paint out points based on vertex b/w colors.
- Bake Points to nurbsCurve: this button will bake the points to a unconnected to the graph curve. So if you have an animated rigged character and bake the points they will not be bound or in any way accociated with the points from the scatter node or character.
- Volume Scatter:
- Tolerance: Sets how closely to the volume the particles will adhere. Higher value the closer the particles match the shape, but also the higher the chance that they miscalculate the objects shape, and appear outside the volume.
- Surface offset: Pushes points further inside or ourside the calculated volume.
- Max distance from Surface: Mixed surface and volume by seeting how far from the surface the volume calulation will project. -1 is no max distance.
- Min Point to Point Disance: sets the minimum distance points can be from each other.
- Output Distance From Surface: This check box allows the passing of the volume sampled inforation on to other nodes.
- Texture Based Distribution
- UV Based:
- active: enabled or disabled
- Uv Set: defaults to Map1 but alternative Uv Sets can be used and set here.
- texture: input texture map for surface distribution. It should be noted that this only removes/hides points on the surface based on a texture. All points are still calculated even hidden ones.
- Projection Based: Consecutive projections by default multiply the removal of points.
- active: enabled or disabled
- create new projection plane: Create a new projection plane to remove particles in volume and/or surface. It will project in both the forward and backward direction.
- texture: a b/w texture where black = no points and white = full point count.
- contained: ?
- UV Based:
- Inputs:
- Input Geometry: meshObject.worldMesh
- Input Position PP: (see usage below)
- Global:
- Usage: Connect polyObject.worldMesh > scatterShape.inGeometry will scatter points in/on the geometry. Since geometry shape nodes have no transformation the transforms will not connect by default or even with the connect tool. You have to manually connect in the connection editor object.worldMatrix > scatterShape1.inWorldMatrix to get transforms to effect the scattered points. The nice thing is onec you select worldMatrix there are very few things on the scatter node not grayed out, so its easy to find. Often times this is why you won't see any points right from the start, b/c there is a large transform on your shape and the scatter node doesn't calculate any (or just 1) points.
- Input Position PP Usage: set Point Density to 1, and max point count to 1 since it will explicity tell the points where to be it doens't need to calculate extra times on top of that. We need to get the position PV (per Voxel) to position PP (per point) since a fluidShape cannot know position PP we must transfer those attributes with a fluidAttributeToArray node. Create a fluidAttributeToArray node and set the Position Check box. Select the fluid and the fluidAttributeToArray node "connect" the only option. Select the fluidAttributeToArray and the scatterShape and "connect" the fluidAttributeToArray1.outPositionPV > scatterShape1.inPositionPP;
- Video Tutorial:
- Examples:
- http://www.soup-dev.com/videos/scatter_volume.mov
- http://www.soup-dev.com/videos/scatter_surface_mask.mov
- http://www.soup-dev.com/videos/scatter_volume_maxDistanceFromSurface.mov
- http://www.soup-dev.com/videos/scatter_volume_maxDistanceFromSurface_fluidEmission.mov
- http://www.soup-dev.com/videos/scatter_baked_directParticlesControl_mud.mov
- http://www.soup-dev.com/videos/arrayToDynArrays_simpleSprites.mov
- Example Files:
- _passNormals_soupVolumeScatter.ma
- pointCloudFluidEmitter_scatter_fillObject.ma
- scatter_baked_directParticlesControl_mud.ma
- scatter_pointCloudFluidEmitter_fillObject_1.ma
- scatter_pointCloudFluidEmitter_fillObject_2.ma
- scatter_surface.ma
- scatter_surface_mask.ma
- scatter_textureBasedDistribution.ma
- scatter_textureBasedDistribution1.ma
- scatter_textureBasedDistribution2.ma
- scatter_textureBasedDistribution3.ma
- scatter_textureBasedDistribution4.ma
- scatter_volume.ma
- scatter_volume_maxDistanceFromSurface.ma
- scatter_volume_maxDistanceFromSurface_fluidEmission.ma
[edit] tensionMap
measures how much the geometry stretches or contracts.
- Details:
- Usage: There are two modes - Distance and Angle.
Distance measures the space between points (edge lengths), Angle
measures the degree between edges. Angle can be useful when there are
deformations without stretching/contraction, for example, bending of
skinny elbow. When points get closer, but their edges keep same length.
- Video Tutorial:
- Examples:
- Example Files:
- tensionMap.ma
[edit] upresFluid
increases the container resolution of cached fluid simulation and adds details by implementing wavelet turbulence.
- Details:
- Usage: Fluid dynamic simulation strictly depends on the container resolution. If we change the resolution the fluid will behave differently. This is not good in production because as we design our fluid, we want to use low resolutions for fast turnarounds while working out the dynamics. But later, when we have figured out the dynamic aspect and start tweaking the look of the fluid, we often want to increase the resolution to get more detail (or the opposite) and if we often have to start again, tweaking the simulation to accomodate for the new resolution.
- The upresFluid node effectively eliminates the dependency between resolution+simulation and shading+look. For this purpose we use two containers. In the first one we focus on the fluid motion. There we can keep changing the fluid resolution in order to to achieve the best motion, without worrying about the shading part. Once we are happy with that we focus on the second container used as a static display driver for shading and rendering purposes.
- The best part of all this is that now we can change the resolution of the display driver container on the fly - at any point. It will inherit the basic data from the source container and will interpolate it to fit it's own resolution set by the upresFluid node.
- As a final we can turn on the wavelet turbulence feature to add plenty of additional detail that is impossible or at least extremely hard to achieve otherwise.
- The new version of the node provides two passes of uprezing + wavelet turbulence. This way we can apply big scale "billowing" and then add small scale details to it, or add small scale detail first and then smear it with big scale noise. Check videos 2 and 3 on the left to see that in action.
- The current version of the upresFluid node does not fully
support auto-resizing of fluids. Technically it works but sometimes the
wavelet turbulence pattern gets offset
- Video Tutorials:
- Examples:
- Example Files:
- _upresFluid_v08.ma
- upresFluid2.ma
- upresFluid4.ma
- upresFluid5.ma
[edit] computeVelocity
calculates point velocities and stores them in array.
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files:
- computeVelocity_arrayToPointColor_attributeTransfer_pointCloudFluidEmitter.ma
- computeVelocity_pointColors_1.ma
- computeVelocity_pointColors_2.ma
[edit] group
collects the object components face, edge, point ids and passes them on to orther nodes for component specific control.
- Details:
- Usage: group node is often used with bounding objects to collect object components within a volume.
- Video Tutorial:
- Examples:
- Example Files:
- group_1.ma
- group_2.ma
- group_animatedComponentsList.ma
- group_attributeTransfer_pointCloud_animatedComponentsList__acidRain.ma
- group_attributeTransfer_remapArray_changingPointCountWithProperMotionBlur_1.ma
- group_attributeTransfer_remapArray_changingPointCountWithProperMotionBlur_2.ma
- group_componentsShaderAttachment.ma
- group_displayComponents.ma
- group_displayComponents_mirror.ma
- pointCloudToCurve_pointAttributeToArray_group.ma
[edit] multiAttributeTransfer
allows for localized control over deformer weightsMaps.
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files:
- multiAttributeTransfer_1.ma
- multiAttributeTransfer_2.ma
- multiAttributeTransfer_3.ma
- multiAttributeTransfer_blendShapeTargets.ma
- multiAttributeTransfer_skinCluster.ma
[edit] bound
creates sparse voxel grid around static or deforming geometry with consistent or changing point count and order.
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files:
- bound_pointCloud.ma
- bound_wrap.ma
[edit] modifiers
[edit] cage
removes all polygons of one object that are outside of another one.
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files:
- cage_1.ma
- cage_2.ma
- cage_3.ma
[edit] point
contains many types of controls and utilities for operations on points.
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files:
- point_inNormalPP_override.ma
- point_pointNormals.ma
- point_pointPositions_pointColors_1.ma
- point_pointPositions_pointColors_2.ma
- point_pointPositions_pointNormals_1.ma
[edit] shatter
input points are center points for a voronoi cell cuts on a static or deforming mesh.
- Details:
- Usage:
- Video Tutorial:
- Examples:
- http://www.soup-dev.com/videos/shatter_volume.mov
- http://www.soup-dev.com/videos/shatter_postPointCloudInfluence.mov
- http://www.soup-dev.com/videos/shatter_surface_deformingPointCloud.mov
- http://www.soup-dev.com/videos/shatter_rbd_sim.mov
- http://www.soup-dev.com/videos/shatter_localized_accumulated.mov
- Example Files:
- shatter_localized_accumulated.ma
- shatter_postPointCloudInfluence.ma
- shatter_rbd_sim.ma
- shatter_surface.ma
- shatter_surface_deformingPointCloud.ma
- shatter_surface_mask.ma
- shatter_surface_mask_deformingPointCloud.ma
- shatter_surfaceAndVolume.ma
- shatter_volume.ma
[edit] timeOffset
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files:
- timeOffset.ma
[edit] textures
[edit] arrayToTexture2D
converts any points mapped array to 2D texture that can be directly used to drive anything on the shading side.
- Details: converts on the fly array data to standard 2D texture that can be plugged directly into any shading network. This gives us the ability to drive shaders interactivelly and make them react on events happening at geometry level.
- Usage:
- Examples:
- Example Files:
[edit] voronoiTexture3D
procedural voronoi 3D texture.
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files:
- voronoi_texture_1.ma
- voronoi_texture_2.ma
- attributeTransfer_point_voronoiPattern.ma
- attributeTransfer_pointCloud_voronoiPattern.ma
[edit] helpers
[edit] bounding Object
creates a shape that can tell other nodes whats either inside or not inside itself
- Details:
- Usage:
- Video Tutorial:
- Examples:
- Example Files: