使用 ZYNC 自動轉譯圖片

本教學課程說明如何使用 ZYNC 自動進行 3D 轉譯。ZYNC 是一種用來在 Google Cloud Platform (GCP) 上部署 3D 轉譯的服務。本教學課程是自動化 IoT 機器學習的配套課程,其中一些步驟並不適用於其他工作流程。

工程師、架構師、視覺效果設計人員和研究人員都必須處理大量幾何圖形資料。這些資料通常以 OBJ、FBX 及 Alembic 等格式儲存。雖然這些資料集都有視覺化、模擬或機器學習 (ML) 的巨大潛力,但為這些資產建立視覺資料庫是一個非常複雜且耗時的過程。假設有數百個或數千個模型,要確保一致外觀 (如圖 1 所示) 非常困難。

一組轉譯後呈現一致外觀的 3D 資產。
圖 1:一組轉譯後呈現一致外觀的 3D 資產。資料提供:Andrew Averkin

如果您可以使用簡單且可重複的範本轉譯每個資產會怎麼樣?如果您可以將程序自動化,只要變更一個文字檔即可轉譯新的資產又會怎麼樣?

將多個資產的轉譯程序自動化,即可維持一個穩定的動畫和照明環境、強制執行命名慣例,並一致地填入中繼資料。您的資料在產生時即經過妥善整理,這也是自動化機器學習訓練或其他需要加上標籤的結構化資產組合的應用程式的要求。

在本教學課程中,您將瞭解如何 1) 使用檔案範本按部就班地建構 3D 場景,以及 2) 使用 ZYNC Python API 轉譯 3D 場景。ZYNC 轉譯設備可和熱門的數位內容建立 (DCC) 套件搭配運作,也可以使用 Python API 進行存取。

轉譯術語

「轉譯」是視覺效果製作管道中的一般工作單元。 「轉譯作業」是指計算一個場景檔案以產生圖片。「執行轉譯」是指將場景檔案傳送至轉譯設備,轉譯設備中有數台機器,每個機器會轉譯一個影格、計算該影格的資料,並轉譯該影格。

目標

  • 從幾何圖形資料的資料庫按部就班地產生圖片。
  • 提交大量工作至 ZYNC 以在 GCP 上進行轉譯作業。
  • 建構簡單的 YAML 指令碼以執行重複性工作。

費用

本教學課程使用 ZYNC Render,針對所使用的特定軟體、轉譯器和機器類型,適用每分計費。已同步處理的資產和轉譯結果會儲存在 Cloud Storage 中。詳情請參閱 ZYNC 定價頁面

使用 ZYNC Pricing Calculator 可根據您的預測使用量來產生預估費用。此處使用的預設設定使用 Maya/Arnold,在 zync-16vcpu-32gb 類型的先佔執行個體上進行轉譯。新加入 GCP 的使用者可能符合申請免費試用的資格。

使用本教學課程的預設設定、轉譯解析度和軟體選擇,每個部分的轉譯費用約為 $4.00 美元。如要在 ZYNC 上進行轉譯,這三個部分的費用約為 $12.00 美元,如以下費用明細所示:

費用明細

事前準備

本教學課程需要從可以執行 ZYNC 用戶端應用程式並具有圖形顯示器的電腦存取殼層。您可以從本機工作站執行這項作業,如果是 macOS 請使用終端機、如果是 Windows 請使用 PowerShell,如果是 Compute Engine Windows Server 執行個體則請使用遠端桌面通訊協定

Windows 注意事項:本教學課程需要 Linux 或類似 Linux 的環境以及指令列介面。在 Windows 上,請使用 Cygwin 或 PowerShell 這類工具。

設定

  1. 在 GCP Console 的專案選擇器頁面中,選取或建立 GCP 專案。

    前往專案選取器頁面

  2. 請確認您已啟用 Google Cloud Platform 專案的計費功能。瞭解如何確認您已啟用專案的計費功能

  3. 啟用ZYNC and Cloud Storage必要的 API。

    啟用 API

  4. 安裝並初始化 Cloud SDK
  5. 複製本教學課程的 git 存放區,其中包含專案指令碼:
    git clone https://github.com/GoogleCloudPlatform/automating-zync-renders

    所產生的目錄 automating-zync-renders 是您的工作目錄。

  6. 前往您的工作目錄,再繼續執行:
    cd automating-zync-renders
  7. 如要在安裝之前先隔離您的環境,請執行 virtualenv
    virtualenv --python=python2.7 env
    source env/bin/activate

    進一步瞭解 virtualenv

  8. 確保您的環境中已安裝了所有必要的 Python 套件:
    pip install -r requirements.txt
  9. 註冊您的免費 ZYNC 帳戶並保留 ZYNC 網址。
    1. 將在第一步中建立之專案的 ID 用於「Google 專案 ID」欄位。如果您忘記了此號碼,您可以找出 ID
    2. 根據您的姓名、公司名稱或其他唯一識別碼,選擇一個專屬的 ZYNC 網址。系統會為您指派格式為 [NAME].zync.io 的網址。
    3. 註冊後,您的網址需要幾分鐘才能使用。
  10. 將 ZYNC Python API 下載至您的工作目錄。請記下目錄路徑,因為稍後在更新設定檔時將會用到。為確保本教學課程的相容性,此處包含了特定的修訂版本。將 [NAME] 改成您在註冊 ZYNC 帳戶時選擇的專屬網址:
    git clone https://github.com/zync/zync-python
    cd zync-python
    git checkout 927ea857782a0e3245cff3470f749892e572c55c
    echo 'ZYNC_URL = "https://[NAME].zync.io"' > config.py
  11. 在本機工作站上下載、安裝並啟動 ZYNC 用戶端應用程式

您可以前往在 ZYNC 註冊程序中預訂的 https://[NAME].zync.io 網址,在「My Account」(我的帳戶) >「Usage」(使用情形) 下的「Breakdown by jobs」(按工作細分) 面板中追蹤 ZYNC 的使用量。

如要進一步瞭解如何配置和設定 ZYNC 專案,請參閱 ZYNC 的說明文件頁面

解析製作管道

您無需存取 3D 軟體即可完成本教學課程,但如果您沒有這類軟體的存取權限,您將無法編輯資產或環境。本教學課程的存放區包含在 Autodesk Maya 中建立的檔案,這些檔案位於 rigs 目錄中。

如果您要修改轉譯環境或有其他軟體需求,則必須修改管道才能容納應用程式之間的差異。

圖 2 顯示轉譯程序的總覽。

轉譯製作管道
圖 2:轉譯製作管道。

瞭解元件

每個資產都在相同的環境中轉譯,這個環境包含多個範本的組合,稱為「rig」。每個範本檔案都位於 rigs 目錄之下的工作目錄中,格式為 mayaAscii,這是使用者可判讀的 Maya 原生檔案格式。以下是所包含的 rig。

範本或 rig 檔案名稱 說明
基礎範本 base_scene_template.ma 空的 Maya ASCII,可執行字串替代作業以參照攝影機 rig、光源 rig 和每個個別資產。
攝影機 rig cam_rig.ma 包含動畫攝影機的 Maya ASCII 檔案。
光源 rig light_rig.ma 包含無縫環境背景和三個光源的 Maya ASCII 檔案。這個檔案也包含轉譯設定以執行 Arnold 轉譯。

準備模型

在這個範例中,您將使用以一組隨機的機械零件為基礎的 3D 幾何圖形資產 (「零件」) 資料庫,這個資料庫通常稱為 kitbash。 每個模型的 3D (方向、比例和位置) 世界空間位置必須一致,光源和攝影機 rig 才能以相同方式處理每個零件。請參閱圖 3,瞭解三個資產的一致轉譯範例,以及它們在世界空間中的位置。

轉譯製作管道
圖 3:準備好進行轉譯的三個資產。上排:線框視圖。下排:最終轉譯圖片。每個資產都以原點為中心,並具有一致的照明和比例。

如要準備模型以進行轉譯作業,您必須確保每個零件都:

  • 位於自己的檔案中。
  • 遵循一致的命名慣例。
  • 以原點為中心。
  • 相對於所有其他零件進行縮放。

本教學課程中包含的所有檔案都符合這些要求。

在 GCP 上進行驗證

建立服務帳戶金鑰,以便讓本機工作站上的 ZYNC 能夠與 GCP 通訊。

  1. 主控台中,前往「APIs & Services」(API 和服務) >「Credentials」(憑證) 下的「Credentials」(憑證) 頁面。
  2. 選取 [Create Credentials] (建立憑證) > [Service Account Key] (服務帳戶金鑰)

    建立憑證

  3. 輸入下列值。當您填入「Service account name」(服務帳戶名稱) 時,系統會自動填入「Service account ID」(服務帳戶 ID),但您可以編輯成其他值。

    • 服務帳戶New service account
    • 服務帳戶名稱zync-api
    • 角色Storage Admin

      如要設定「Role」(角色),請按一下 [Select a role] (請選取角色),向下捲動清單至 [Storage],然後選取 [Storage Admin] (Storage 管理員)

    • 服務帳戶 IDzync-api

    • 金鑰類型JSON

    憑證值

  4. 按一下 [Create] (建立)。系統隨即會將 JSON 檔案下載至您的本機工作站。請將該 JSON 檔案移至工作目錄的根目錄。

更新設定檔

您的管道會執行 Python 指令碼,讀取工作目錄中的 YAML 設定檔。該設定檔包含所有檔案的路徑,包括驗證檔案及其他 ZYNC 和專案特定的設定。

  1. 在工作目錄中,找到 projectData.config-template 範本設定檔。

  2. 複製工作目錄中的設定檔,並將其重新命名為 projectData.config

    cp projectData.config-template projectData.config
    

瞭解設定檔

您必須使用您的使用者資料、本機路徑和檔案名稱填入範例設定檔中的某些預設值。如要執行本教學課程,您必須修改以下設定的預設值:gcp_projectbase_pathauth_filezync_lib_path

以下清單會依照變數出現在 projectData.config-template 設定檔中的順序來顯示變數:

gcp_project
您在本教學課程中使用的 Cloud 專案 ID。
base_path
工作目錄的絕對路徑。
auth_file
在 GCP 上進行驗證時產生之授權檔案的相對或絕對路徑。
zync_lib_path
設定過程中安裝之 ZYNC Python API 的絕對路徑。
scene_template
base_scene_template.ma 的相對路徑。
camera_rig
cam_rig.ma 的相對路徑。
light_rig
light_rig.ma 的相對路徑。
scene_dir
寫入組合場景檔案之目錄的相對路徑。 產生這些檔案後,系統便會將它們上傳至 ZYNC 進行轉譯。
image_dir
寫入最終轉譯圖片之目錄的相對路徑。
parts_dir
包含個別幾何圖形檔案之目錄的相對路徑。
parts
要進行反覆處理之個別幾何圖形檔案名稱 (只有名稱,不含路徑) 的清單。

執行轉譯

正確填入設定檔後,使用 render.py 指令碼,將第一個轉譯啟動至 ZYNC。從指令列前往專案目錄,然後啟動轉譯:

cd automating-zync-renders
./render.py --config projectData.config

首次執行指令碼時,系統可能會提示您在瀏覽器中驗證您的 Google 帳戶。

render.py 指令碼會產生輸出,並詳細列出解析製作管道中所述的程序。 請注意,預設的記錄層級設為 4 (INFO)。您可以使用 --verbose 標記覆寫預設的記錄層級,提供更多的輸出。 詳情請使用 --help 標記。

監控轉譯作業

執行指令碼後,請前往您在 ZYNC 註冊程序中預訂的 https://[NAME].zync.io 網址,確認工作正在執行。ZYNC 最多可能需要五分鐘才能部署和分配轉譯執行個體。執行個體會列在「Machines」面板中,如圖 4 所示。

ZYNC 主控台
圖 4:ZYNC 主控台。

提交工作進行轉譯後,ZYNC 用戶端應用程式會將檔案從本機工作站上傳至 Cloud Storage。您可以在「工作詳細資料」面板以及 ZYNC 用戶端應用程式中的「Log」分頁下查看上傳進度。

執行 render.py 指令碼後,您將會看到三個 ZYNC 轉譯工作。每個工作都在為不同的零件轉譯第 1–1000 個影格,這些影格是從 projectData.config 中的 parts 之下的 Alembic 檔案清單取得。

ZYNC 可讓您啟動任意數量的工作,然後根據資源可用性和工作優先順序,自動將工作排入佇列。在本教學課程中,您將使用 Python API 提交工作至 ZYNC。您也可以使用其他熱門的 3D 應用程式提交工作。 您可以一次啟動所有工作,也可以一次啟動一個工作。

如要進一步瞭解 ZYNC,請閱讀其說明文件

轉譯您自己的幾何圖形

如要在此管道中轉譯您自己的幾何圖形,您需要存取可以匯出至 Alembic 格式的 3D 應用程式。步驟如下:

  1. 按照準備模型中的說明來準備零件。
  2. 將模型以 Alembic 格式匯出至 parts 目錄。
  3. 按照 part#.abc 命名慣例,重新命名零件目錄中所有的匯出檔案。render.py 指令碼可接受任意長度的零件編號。系統會將小於 1000 的編號填補到四位數。
  4. projectData.config 中將預設的零件清單改成您自己的 Alembic 檔案名稱。
  5. 按照執行轉譯中的操作說明進行。

將最終轉譯結果推送至 Cloud Storage

轉譯完成後,ZYNC 用戶端應用程式會自動將轉譯結果下載至工作目錄的 images/[PART_NAME] 之下。

在提交工作期間,系統會建立一個 Cloud Storage 值區,名為 gs://[PROJECT-ID]-renders


  1. 轉譯完整個影格範圍並下載轉譯結果後,請前往 images 目錄,使用 gsutil 將圖片目錄複製到該值區:

    cd images/
    
    gsutil -m cp -r [PART-NAME] gs://[PROJECT-ID]-renders/
    

    例如:

    gsutil -m cp -r part01 gs://cad-iot-ml-renders
    
  2. 您也可以使用 gsutilrsync 功能,將 images 目錄中的所有目錄上傳至您的轉譯值區:

    gsutil -m rsync -r . gs://[PROJECT-ID]-renders
    

疑難排解

本教學課程依據本機和雲端工作流程進行,因此某些步驟可能無法如預期般運作。本節說明一些常見的挑戰,以及如何解決這些挑戰。

您的工作目錄

本教學課程的大部分內容都是以您在設定的步驟 5 所建立的工作目錄為基礎。 雖然其中部分指令碼可以處理絕對和相對路徑,但 projectData.config 這樣的檔案必須透過相對路徑,才能找到 ZYNC Render 部署所需的檔案和 rig。

您必須確保:

  • 下載後,工作目錄中的所有內容都會保留在工作目錄中。
  • 您擁有工作目錄的讀取和寫入權限,以及在工作目錄中建立新目錄的權限。

確保已安裝 Python 程式庫

render.py 指令碼需要數個 Python 程式庫才能執行。requirements.txt 中將列出程式庫清單,且這些程式庫會在設定的步驟 8 進行安裝。 如要確保這些程式庫已正確安裝,請開啟 Python 殼層並輸入以下內容:

from google.cloud import storage
import yaml

如果未傳回任何錯誤,即表示這些程式庫已存在。如果這些程式庫不存在,您會看到錯誤訊息,例如:

ImportError: No module named yaml
ImportError: cannot import name storage

render.py 中的驗證錯誤

如果您在執行 render.py 指令碼時遇到驗證錯誤,請確保您在 GCP 上進行驗證時建立的金鑰具有不重複的服務帳戶名稱。重複使用服務帳戶名稱會導致驗證失敗。

提交 ZYNC 工作時發生錯誤

如果您在執行 render.py 指令碼時遇到 ZYNC 連線錯誤,例如:

zync.ZyncConnectionError: ZYNC is down at URL: https://[NAME].zync.io

請確認下列事項:

  • 在瀏覽器中前往該網址,以確認您的 ZYNC 網址已建立且正在執行。
  • 檢查 config.pyZYNC_URL 的值是否與 ZYNC 網址完全相同,如設定的步驟 9 中所述。

找不到檔案

如果您在 ZYNC 提交期間遇到 'Files not found' 錯誤,請確保工作目錄中的所有檔案都是可讀取的。

查看轉譯記錄

在 ZYNC 主控台中,每個子工作 (「區塊」) 都會列在「Tasks」面板中:

查看轉譯記錄

在「Log」資料欄之下,按一下「maya」連結即可查看相關聯區塊的記錄輸出。如果轉譯失敗,應先檢查轉譯記錄。

未下載轉譯結果

完成每個區塊後,ZYNC Render 會自動嘗試將經過轉譯的圖片下載至本機工作站。如果您讓電腦進入睡眠模式、登出 Google 帳戶或結束 ZYNC 用戶端應用程式,轉譯工作將會繼續,而轉譯的影格則會儲存在您 ZYNC 帳戶的儲存空間中。當您重新連線、重新登入或啟動 ZYNC 用戶端應用程式時,ZYNC 會重新開始下載影格。

萬一下載工作失敗,您可以透過以下方式強制讓區塊重新下載:

  1. 按一下「Tasks」面板左側資料欄中的核取方塊,選取要下載的區塊。
  2. 按一下右上角的「Task」下的選單,然後選取 [Redownload Task(s)]

    重新下載工作

監控 ZYNC 活動

本機工作站和 ZYNC Render 之間的所有通訊都會經過 ZYNC 用戶端應用程式。您可以選取 ZYNC 用戶端應用程式中的「Log」分頁,來查看 ZYNC 活動記錄:

ZYNC 活動記錄

清除

如要避免系統向您的 Google Cloud Platform 帳戶收取您在本教學課程中使用資源的相關費用:

  1. 前往 GCP Console 中的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源) 頁面

  2. 在專案清單中選取您要刪除的專案,然後按一下「Delete」(刪除) 圖示
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

刪除 ZYNC 資源

當工作完成、刪除或遇到錯誤時,系統會自動刪除 ZYNC 部署的執行個體。您無須執行任何動作即可刪除這些資源。

刪除儲存的資料

已同步處理的資產和已完成的轉譯都會儲存在 Cloud Storage 中,並按月計費。在您刪除資料之前,系統會向您收取儲存費用。如果您不再需要在 ZYNC 上保留專案資料,您可以從 ZYNC 網路主控台中的「My Account page」的「Projects」分頁刪除資料。

結束 virtualenv

如果您使用了 virtualenv,請在殼層中輸入 deactivate 以結束此臨時環境。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
解決方案