座標系とスケール単位
※ 翻訳には「Google AI Studio」を利用し、「Gemini Experimental 1206」のモデルを使用しています。
このガイドラインは、Khronos Groupの「3DC-Asset-Creation」で公開されている「Coordinate System and Scale Unit」を日本語に翻訳したものです。
原文のライセンス: Creative Commons Attribution 4.0 International License
座標系とスケール単位
バージョン 1.0.0 最終更新日: 2020年10月20日
ワールドの上方向、前方向、スケール単位
使用する3Dソフトウェアによって、座標系と測定単位の解釈が異なります。一部のソフトウェアでは、+Z
軸をワールドの上方向とし、右手座標系を使用していますが、他のソフトウェアでは+Y
をワールドの上方向とし、左手/右手座標系を使用しています。また 、ソフトウェアが右手座標系を使用しているか、左手座標系を使用しているかも重要です。スケール単位については、特定の制作ワークフローや、ソフトウェアで定義されているデフォルトの環境(インチ、センチメートル、メートルベースの単位など)に基づいて違いが生じる可能性があります。
制作プロセス中に、さまざまな座標系とスケール単位を扱う必要があるのが一般的です。幸い、ランタイムファイル形式のglTFとUSDZに変換する場合、どちらの形式も、アセットが準拠する必要がある標準化された設定を備えています。glTFとUSDZはどちらも、+Y
ワールドの上方向、+Z
ワールドの前方向、右手座標系を使用し、どちらもメートルベースのスケール標準です。
glTF
glTF2.0の仕様に関する詳細はこちら:
https://github.com/KhronosGroup/glTF/tree/master/specification/2.0
座標系と単位
glTFは右手座標系を使用します。つまり、+X
と+Y
の外積は+Z
になります。glTFでは+Y
がワールドの上方向であり、glTFアセットの正面は+Z
を向いています。すべての線形距離の単位はメートルです。すべての角度はラジアンで、正の回転は反時計回りです。こちらのBoomBoxの例をご覧ください(図1.1)。
ライセンス: CC BY 4.0 International ソースから変更: https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoomBox 図2.1: 座標系
法線マップとglTF
GLTF2.0の仕様によると、法線ベクトルはOpenGLの規則を使用し、+X
は右、+Y
は上です。+Z
はビューアーの方を向いています。
USDZ
USDZに関する詳細はこちら:
https://graphics.pixar.com/usd/docs/Usdz-File-Format-Specification.html
Apple ARKitのドキュメントによると、「ARKitは、右手規則に従ってワールド座標系とカメラ座標系を使用します。y軸は上を向き、(関連する場合は)z軸はビューアーの方を向き、x軸はビューアーの右を向いています。」
法線マップとUSDZ
USDzでは、法線ベクトルはOpenGLの規則を使用し、+X
は右、+Y
は上です。+Z
はビューアーの方を向いています。
USD
USDに関する詳細はこちら:
https://graphics.pixar.com/usd/docs/index.html
https://graphics.pixar.com/usd/docs/api/group___usd_geom_up_axis__group.html
「ステージの上方向軸は、ステージのメタデータ_upAxis_としてエンコードされ、その有効な値はUsdGeomTokens
-> y
とUsdGeomTokens
-> z
で表されるY
とZ
です。もちろん、シーンの正しいカメラビューを構築するには、上方向軸だけでなく、座標系の利き手にも依存します。OpenGLと**UsdGeomGprim::GetOrientationAttr()
のフォールバックと同様に、UsdGeom
は右手座標系を規定しています。したがって、UsdStage
をY
上方向軸で表示する場合、ステージのZ
軸は画面の外側を向き、UsdStage
**をZ
上方向軸で表示する場合、ステージのY
軸は画面の内側を向いています。」
要約すると、以下の形式に関する概要は次のとおりです。
形式 | glTF | USDZ | USD |
---|---|---|---|
座標系 | 右手 | 右手 | 右手 |
ワールドの上方向 | +Y | +Y | +Yまたは+Z |
ワールドの前方向 | +Z | +Z | +Zまたは+Y |
スケール単位 | メートル | メートル(metersPerUnit = meter、それ以外はセンチメートル) | メートル(シーンの線形単位をエンコードされた単位あたりのメートル数としてエンコードするステージレベルのメタデータ) |