Skip to content

petrbroz/forge-extra-derivatives-aws

Repository files navigation

forge-extra-derivatives-aws

Experimental AWS serverless architecture for post-processing 3D models from Autodesk Forge to additional formats such as glTF, glb, or Usdz.

Screenshot

Experimental Usage

REST API

  1. Use the POST https://m5ey85w3lk.execute-api.us-west-2.amazonaws.com/Prod/jobs/{urn}/{guid} request to process a specific Forge model viewable.
  2. Use the GET https://m5ey85w3lk.execute-api.us-west-2.amazonaws.com/Prod/jobs/{urn}/{guid} request to check the status of the processing.
  3. Use the POST https://m5ey85w3lk.execute-api.us-west-2.amazonaws.com/Prod/jobs/{urn}/{guid}/signedurl to generate temporary, read-only signed URLs for downloading the different artifacts.

In all the requests listed above, replace {urn} with the Model Derivative URN of your model, and {guid} with the GUID of the specific viewable you want to process, and provide an Authorization header with the same token you would use in requests to the Model Derivative service.

Tip: viewables are listed in the Model Derivative manifest with "mime": "application/autodesk-svf".

Demo App

Go to http://forge-extra-derivs-client.s3-website-us-west-2.amazonaws.com, log in with your Autodesk account, browse through your hubs, projects, and designs. After selecting a specific viewable of a design, start the conversion process (unless you have already done so in the past), wait for it to complete, and then download or preview the conversion outputs.

Architecture

Architecture diagram

Here's a quick description of the different resources used in the AWS SAM template:

  • JobsTable - DynamoDB table storing the status of conversion jobs and their artifacts
  • ArtifactsBucket - S3 bucket storing the conversion artifacts
  • RestApi - REST API definition with CORS settings
  • GetJobFunction - Lambda function (Node.js) handling GET requests
  • PostJobFunction - Lambda function (Node.js) handling POST requests
  • GenerateArtifactUrlsFunction - Lambda function (Node.js) handling POST requests that generate temporary signed URLs for artifacts
  • ConversionStateMachine - Step Function orchestrating individual steps of the conversion
  • DownloadSvfFunction - Lambda function (Node.js) handling the downloading of SVF assets from Forge
  • ConvertSvfToGltfFunction - Lambda function (Node.js) converting SVF assets to glTF
  • ConvertGltfToGlbFunction - Lambda function (Node.js) converting glTF to glb
  • ConvertGltfToDracoFunction - Lambda function (Node.js) converting glTF to glb with Draco compression
  • ConvertGltfToUsdzFunction - Lambda function (Python) using a custom Docker image to convert glb to usdz
  • SharedLayer - Lambda layer with shared code and dependencies for all Node.js-based Lambda functions

The ConversionStateMachine consists of the following states:

Conversion state machine