Amazon Web Services ブログ

CAD アセットを glTF に変換して AWS IoT TwinMaker で使用する方法

このブログは、Jeremiah Habets によって書かれた How to convert CAD assets to glTF for use with AWS IoT TwinMaker を翻訳したものです。

お客様は、AWS IoT TwinMaker で使用したい既存の 3D CAD (コンピューター支援設計) アセットを持っていることがよくあります。CAD ファイルは、独自のアプリケーションで使用するために最適化された独自の形式か、あるアプリケーションから別のアプリケーションに CAD データを移動するために設計された交換形式のいずれかです。これらは通常、 glTF 形式をサポートする AWS IoT TwinMaker で使用されるようなリアルタイム WebGL ビューポートと互換性がありません。CAD アセットを AWS IoT TwinMaker にインポートする前に、CAD アセットを glTF 形式に変換する必要があります。この記事では、 Pixyz Scenario Processor を使用して STEP 形式の CAD ファイルを glTF 形式のリアルタイム 3D ファイルに変換するワークフローを紹介します。Pixyz Scenario Processor は、 Pixyz が提供するソリューションで、AWS Marketplace で入手できます。いくつかの異なるシナリオに合わせて構成できます。この例では、GenericPolygonTarget シナリオを使用します。このシナリオでは、ゲームエンジンや WebGL ビューで使用するために、CAD アセットをリアルタイムアセットに変換するための最も一般的な設定を使用します。目的のポリゴン数を設定するオプション、オブジェクトをマージする必要があるかどうかを決定するオプション、非表示のオブジェクトを削除する必要があるかどうかを決定するオプションがあります。

ソリューションの概要

このウォークスルーでは、Amazon Elastic Container Service (ECS) をセットアップして、Amazon Simple Storage Service (Amazon S3) に保存されたファイルで Pixyz Scenario Processor を実行します。

Amazon S3 バケットを作成し、CAD ファイルをアップロードして変換します。また、Pixyz Scenario Composer コンテナ イメージを使用して CAD ファイルを glTF に変換する AWS Fargate タスクを作成して実行します。タスクを実行した後、結果のファイルを Amazon S3 からダウンロードして、glTF 互換ビューアーで検査します。

ウォークスルー

このウォークスルーでは、S3 バケットから CAD ファイルを取得し、それを GLB (バイナリ glTF 形式) ファイルに変換して、その S3 バケットに戻す AWS Fargate タスクの作成について説明します。Fargate タスクは、AWS Marketplace の Pixyz Scenario Processor を使用します。これには、Amazon ECS でタスクを実行するためのデフォルトの IAM ポリシーを調整して、AWS Marketplace ソリューションの使用量を測定できるようにする必要があります。

次の手順を実行します:

  1. ソースファイルを S3 バケットにアップロードする
  2. Pixyz Scenario Processor で Amazon ECS タスクを実行するための IAM ロールを作成する
  3. ネットワークのみのクラスターを作成する
  4. タスク定義を作成する
  5. Fargate タスクを実行する
  6. ログを調べる
  7. (オプション) glTF ファイルをダウンロードして表示する

前提条件

このチュートリアルの前提条件は次のとおりです:

  • AWS アカウント
  • CAD ファイルを保存するための Amazon S3
  • AWS IAM
  • Amazon ECS と AWS Fargate
  • AWS Marketplace の Pixyz Scenario Processor へのサブスクリプション
    • この例では、使用量ベースの価格設定で Pixyz Scenario Processor の使用に対して課金されます。現在の価格情報は、AWS Marketplace にある Pixyz Scenario Processor 製品ページで入手できます。この演習を完了するための推定コストは、$0.25 ~ $1.00 です。
  • 変換する CAD ファイル。 Waste_Container.step ファイルを使用しますが、独自のビジュアル アセットを使用することもできます。

Image of the asset Waste_Container.step, a large green metal waste container.

Waste_Container.step のレンダリング

ステップ 1: ソースファイルを S3 バケットにアップロードする

  1. Amazon S3 コンソールに移動します。
  2. 使用する新しいバケットを作成します。この例では、us-west-2 リージョンを使用します。
    バケット名は pixyz-example-20211117 です。
  3. バケット内に input フォルダーと output フォルダーを作成します。
  4. 変換したい CAD ファイルを input フォルダーにアップロードします。
    STEP ファイル: Waste_Container.step を使用しています。

Screenshot of AWS S3 Console page

Amazon S3 にアップロードされた Waste_Container.step

ステップ 2: Pixyz Scenario Processor で Amazon ECS タスクを実行するための IAM ロールを作成する

  1. AWS IAM コンソール ページに移動します。
  2. Roles セクションを選択し、Create Role ボタンを押します。
  3. Elastic Container ServiceElastic Container Service Task の順に選択し、Next:Permissions ボタンを選択します。
  4. 次のアクセス許可をアタッチします:
    1. AWSMarketplaceMeteringRegisterUsage (AWS Marketplace が使用量を測定できるようにします)
    2. AmazonS3FullAccess (Amazon ECS が S3 バケットにアクセスできるようにします)
    3. AmazonECSTaskExecutionPolicy (Amazon ECS がタスクを実行できるようにする)
  5. Next:Tags ボタンを選択します。
  6. Next:Review ボタンを選択します。
  7. ロールに名前を付けます。pixyz-example-role-20211117 と入力しました。
  8. 説明を追加します。「Role created for Pixyz Scenario Processor example.」と入力しました。 Create role ボタンを選択します。

次のようなロールが作成されます:

Screenshot of the AWS IAM Console

IAM ロール pixyz-example-role-20211117 に適用されるアクセス許可ポリシー

ステップ 3: ネットワークのみのクラスターを作成する

  1. Amazon ECS コンソール に移動します。
  2. Clusters セクションに移動し、Create Cluster ボタンを選択します。
  3. Networking Only を選択し、Next step ボタンを選択します。
  4. クラスターを構成する:
    1. name: pixyz-example-cluster
    2. Create a new VPC for this cluster を有効にします。
    3. デフォルトの CIDR とサブネットブロックを使用します。
    4. Cloudwatch Container Insights を有効にします。
  5. Create ボタンを選択

ステップ 4: タスク定義を作成する

  1. Amazon ECS コンソールに移動します。
  2. Task Definition セクションに移動し、Create new Task Definition ボタンを選択します。
  3. Fargate オプションを選択し、Next step ボタンを選択します。
  4. タスクを構成する:
    1. 名前を付けます。例: pixyz-example-task
    2. Task ロールには、上記で作成した IAM ロールを使用します: pixyz-example-role-20211117
    3. Operating system family: Linux.
    4. タスク実行ロールについても、作成した IAM ロールを使用します: pixyz-example-role-20211117
    5. Task Memory: 4 GB
    6. Task CPU (vCPU): 1 vCPU
    7. Add container ボタンでコンテナーを作成し、次のように構成します:
      1. name: pixyz-example-container
      2. image url: 709825985650.dkr.ecr.us-east-1.amazonaws.com/pixyz-software/scenario-processor:2021.1.0.79
      3. ポートマッピングを削除します
      4. Environment Command:
        GenericPolygonTarget,s3File_with_arguments,"pixyz-example-20211117","us-west-2","input/Waste_Container.step",False,"pixyz-example-20211117","us-west-2","output/Waste_Container.glb",10000,False,False,False

        Pixyz Scenario Processor Quick-Start で提供されるコマンド テンプレートは次のとおりです:

        GenericPolygonTarget,s3File_with_arguments,"my-input-bucket-name", "my-input-bucket-region", "input/inputFile.step",False,"my-output-bucket-name","my-output-bucket-region","outputFolder/resultFile.xxx",10000,False,False,False

        私たちのバージョンでは、以下を置き換えました:
        my-input-bucket-name を pixyz-example-20211117
        my-input-bucket-region us-west-2
        input/inputFile.step input/Waste_Container.step
        my-output-bucket-name pixyz-example-20211117
        my-output-bucket-region us-west-2
        outputFolder/resultFile.xxx output/Waste_Container.glb

ステップ 5: Fargate タスクを実行する

  1. Amazon ECS コンソールに移動します。
  2. Task Definition セクションに移動します。
  3. タスク定義を選択し、Actions ボタンから Run Task を選択します。
  4. 実行タスクを構成する:
    1. Launch Type: Fargate
    2. Operating System Family: Linux
    3. Cluster: pixyz-example-cluster
    4. 使用可能な両方のサブネットをクラスター VPC に追加します。
  5. Run Task ボタンを押して、タスクを実行します。

ステップ 6: ログを調べる

Amazon CloudWatch コンソールを使用して、進行中の Fargate タスクを監視できます。 Pixyz Scenario Processor が実行されると、CloudWatch ロググループにログが出力されます。

  1. Amazon CloudWatch コンソールに移動します。
  2. Log Groups セクションに移動し、ecs/pixzy-example-task ロググループを選択します。
  3. ecs/pixyz-example-container… のような Log Stream を選択します。
  4. タスクによって生成されたログを読みます。

一般的なエラーは次のとおりです:

  1. Register error: AccessDenied Exception. 使用されている IAM ロールに適切なポリシーがありません。タスクは、上記で作成した IAM ロールの代わりに、自動生成された ecsTaskExecutionRole を使用しています。正しいロールでタスク定義を更新する必要があります。
  2. Bucket Not Found. コマンド文字列で定義されたバケットとファイルが存在しない Environment Command にタイプミスがあります。正しいバケット名、input および output フォルダー/ファイル名でタスク定義を更新する必要があります。

ステップ 7: (オプション) glTF ファイルをダウンロードして表示する

  1. Amazon S3 コンソールに移動します。
  2. バケット pixyz-example-20211117output フォルダーに移動します。
  3. タスクによって生成されたファイル (私の場合は Waste_Container.glb) を選択し、Download ボタンを押します。

ローカルコンピューターで glTF ファイルと GLB ファイルを表示するには、Visual Studio CodeglTF Tools 拡張機能を使用します。

Screenshot of Waste_Container.glb viewed in Visual Studio Code

Visual Studio Code でレンダリングされた Waste_Container.glb

クリーンアップ

Amazon S3 のオブジェクトまたは Amazon CloudWatch のログに対して継続的なストレージ料金が発生しないようにするには、このチュートリアルで作成したリソースを削除する必要があります。IAM ロール、AWS Fargate タスク定義、およびクラスターも削除する必要があります。最後に、Pixyz Scenario Processor の登録を解除して、このウォークスルーのクリーンアップを完了します。

S3 バケット、フォルダー、およびファイルを削除する

  1. Amazon S3 コンソールとバケット pixyz-example-20211117 に移動します。
  2. S3 オブジェクトの input/Waste_Container.stepoutput/WasteContainer.glb を削除します。
  3. inputoutput フォルダーを削除します。
  4. S3 バケット pixyz-example-20211117 を削除します。

IAM ロールを削除する

  1. AWS IAM コンソールに移動します。
  2. Roles セクションを選択し、pixyz-example-role-20211117 を削除します。

AWS Fargate タスク定義とクラスターを削除する

  1. Amazon ECS コンソールに移動します。
  2. Task Definitions セクションで、Actions ボタンを使用して、タスク pixyz-example-task の登録を解除します。
  3. Clusters セクションで、Delete Cluster ボタンを使用して、クラスター pixyz-example-cluster を削除します。

Amazon CloudWatch からログを削除する

  1. Amazon CloudWatch コンソールに移動します。
  2. Log Groups セクションで、Actions ボタンを使用して、Delete log group(s)ecs/pixzy-example-task に対してします。

Pixyz Scenario Processor サブスクリプションの登録を解除する

  1. AWS Marketplace コンソールに移動します。
  2. Pixyz Scenario Processor を選択し、Actions ボタンを使用してサブスクリプションをキャンセルします。

まとめ

このチュートリアルでは、Pixyz Scenario Processor を使用して、CAD アセットを AWS IoT TwinMaker ですぐに使用できる glTF ファイルに変換しました。AWS Fargate タスクを変更して、AWS IoT TwinMaker で使用する他の CAD ファイルを変換できます。

glTF アセットができたので、それを AWS IoT TwinMaker で使用して、運用を最適化する実世界のシステムのデジタルツインを作成できます。

著者について

Jeremiah Habets は、アマゾンウェブサービス (AWS) プロフェッショナルサービスのシニア空間コンサルタントです。Jeremiah は、リアルタイム 3D テクノロジーを使用して、顧客が AR/VR、シミュレーション、ビジュアライゼーションの問題を解決するのを支援します。

このブログは、ソリューションアーキテクトの戸塚智哉が翻訳しました。