# 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.