# SimplygonPipeline
command
# Description
The SimplygonPipeline command is responsible for creating, modifying, importing and exporting of Pipelines / settings. It is recommended to read Pipeline concepts before proceeding.
# Syntax
# Flags and args
Short flag | Long flag | Argument(s) | Description |
---|---|---|---|
c | Create | string pipelineType | Creates a pipeline of the specified type. ( ReductionPipeline , AggregationPipeline , RemeshingPipeline ) |
d | Delete | <none> | Deletes the pipeline. |
cl | Clear | <none> | Clears all pipelines that has been loaded or created by Create . |
l | Load | string inputPath | Loads a pipeline-file. |
s | Save | string outputPath | Saves pipeline to file. |
ss | SetSetting | string parameterPath <T> parameterValue | Sets the value of the specified pipeline parameter. ( string , bool , int , double , float ) |
gs | GetSetting | string parameterPath | Gets the value of the specified pipeline parameter. |
v | Value | <T> value | Sets the value of the specified pipeline parameter. Should be used in combination with SetSetting . ( string , bool , int , double , float ) |
t | Type | <none> | Gets the type of the specified pipeline. ( ReductionPipeline , AggregationPipeline , RemeshingPipeline , ...) |
a | All | <none> | Gets all pipeline ids that are loaded or created by Create . |
amc | AddMaterialCaster | string casterType | Adds a material-caster to the specified pipeline. ( ColorCaster , NormalCaster , ...) |
acp | AddCascadedPipeline | int pipelineToAdd | Adds a cascaded pipeline to the specified pipeline. |
gcp | GetCascadedPipeline | int childIndex | Gets the child handle of the specified pipeline. |
gcc | GetCascadedPipelineCount | <none> | Gets the child count of the specified pipeline. |
# Examples
This section contains various Pipeline examples written in MEL and Python. We've left out some parts of the scripts to keep things as simple as possible.
import maya.cmds as cmds
must be declared at the top of each Python script.reductionPipeline
settings-path must be declared for both MEL and Python scripts where it makes sense.- a scene-selection is made before each
Simplygon
-command.
# Create a Pipeline object
Creates a ReductionPipeline
, other supported pipelines are AggregationPipeline
, RemeshingPipeline
and RemeshingV2Pipeline
.
# Load / save a Pipeline object
Loads a Pipeline object from file and then saves it.
Note: Pipeline files should only be used as intermediate and are not intended to be used as presets or templates. Pipeline files are not guaranteed to be compatible with different versions of Simplygon. It is recommended to script Pipelines that saves out Pipeline files rather than loading Pipelines from file.
# Cascaded Pipelines (LOD-chain)
Cascaded pipelines means that each LOD is based on the previous LOD, instead of the original asset which is the standard behavior. In this example we will load two pipelines, one with reduction (LOD1) and one with reduction and baking (LOD2). LOD1 will be based on the original asset and LOD2 will be based on LOD1.
If cascaded pipelines are used in combination with processing from/to file the output scene names will be appended with "_LOD" prefix and then indexed from 1 to *, where the index increments for each cascaded level. The output texture folder for each cascaded scene will be "Textures/LOD1" for LOD1, "Textures/LOD2" for LOD2 and so on. The output file names can be fetched with GetProcessedOutputPaths (gpp) which can then be used at import.
Creates cascaded Pipelines.
# Get / Set Pipeline settings
Currently we support four Pipelines: ReductionPipeline
, AggregationPipeline
, RemeshingPipeline
and RemeshingLegacyPipeline
. These Pipelines can be created by the c
-flag (Create
) in combination with the type name of the Pipeline.
Each Pipeline has settings which reflects the settings for the specific Processor in the Simplygon API. ReductionPipeline contains a ReductionProcessor which contains ReductionSettings while for example the RemeshingProcessor has RemeshingSettings.
MaterialCaster
is a separate object that is located inside the Pipelines, which contains the settings for material baking.
To set a reduction setting for a ReductionPipeline
, let's say ReductionTargetTriangleRatio
, we will have to pinpoint the path to the specific setting. SimplygonPipeline
is the command we use to work with settings, to set a setting we use the ss
-flag (SetSetting
). The first input is the Pipeline-object, the second is the settings-path and the third is the value we want to set. Fetching a value of a setting works the same way, except that it returns the value of the given settings-path instead of setting it, the flag for fetching a settings value is gs
(GetSetting
).
A settings-path can start with a Processor, MaterialCaster, or any other first level object. In this case we want to set a setting in the ReductionProcessor
, which is the first part of the path, the second part is the settings-object which in this case is ReductionSettings
. And at last, the parameter we want to set is named ReductionTargetTriangleRatio
. Let's set the value of ReductionTargetTriangleRatio
to 50% (0.5).
The same goes for TextureWidth
and TextureHeight
, which are part of the MappingImage
settings-object. In most cases we only use one mapping image, thus Output0
which is allocated by default. Let's set them to 512x512 pixels.
For material baking the initial object is MaterialCaster
, and as there aren't any casters by default they will have to be created with the amc
(AddMaterialCaster
) flag. There after we can use the index and settings of the caster to access its parameters.
Note: The material channels for the MaterialCaster in this example are intended for standard materials in Maya such as Blinn, Phong and Lambert, and might not work for other materials. Additional channels such as incandescence and transparency can be added for baking, for incandescence the ColorCaster is recommended, for transparency the OpacityCaster is recommended (for correct baking of transparent surfaces).
# Cascaded Pipeline settings
Cascaded pipelines are pipelines that depends on other pipelines, let's say that you want to create two LODs where the second LOD (child) uses the first LOD (parent) as reference when optimizing.
If we wish to update a setting deeper down in the hierarchy of pipelines we can use the Cascaded
keyword followed by the index of the child Pipeline, then use the regular settings path for the target pipeline.
Below is an example on how to get / set the TriangleRatio for the first child of the Pipeline, let's assume that the first child is a ReductionPipeline.
We also provide helper flags for fetching the pipeline handle of a cascaded pipeline (first level). This handle is identical to the handle returned by create and load and can be used in same way.
Cascaded Pipelines
Use "GetCascadedPipelineCount" to detect if there are cascaded pipelines and take the appropriate actions. If an error pops up that states that a setting does not exist when trying to read or write values then the pipeline(s) might be structured in a cascaded approach, thus the need to update the setting paths or loop each pipeline individually.
An example of where the pipeline structure might be confusing is when creating pipelines on the same level in the Simplygon UI, all LODs will be based on the original asset and not the previous LOD. In this case we automatically create something called a PassthroughPipeline and then hook in the pipelines specified in the UI as children. So technically this means that there is a hierarchy of pipelines, therefor cascaded and should be treated as such when accessing settings.
# Next steps
For more information about Pipelines, visit the links below.