companynameJ

3DにおけるJPEGとは?

STLファイルフォーマットを解きほぐす

 

はじめに

 
3次元(以下3D)画像の分野で、3DにおけるJPEGという表現を目にします。
 
例えば、

・「glTF (GL Transmission Format) はJSONによって3Dモデルやシーンを表現するフォーマットである。「3DにおけるJPEG」と表現されることもある。」
 引用:glTF
・「普及度で言えばダントツ1位、3Dデータ形式のJPEG的存在、それが「STL」だ。」
 引用:2020年代に注目すべき3Dデータファイル形式
・「誰でも3Dアバターを持てる時代にPNGやJPEGとなるのがVRMであり、VR時代のアバターフォーマットとして、世界を獲れる日本発のデファクトスタンダードになれる」 
 引用:「VRMコンソーシアム」13社合同で設立

などの記事があります。
 
JPEGは周知の通り2次元(以下2D)画像ファイルでありカメラで撮影される写真の画像ファイルとして広く普及しています。
 
JPEGはデータサイズを小さくする圧縮方式を採っており、2D画像ファイルとしては他にもBMPやTIFFやPNGなど数多く存在します。
 
カメラで撮影して作られるJPEGなどの2D画像ファイルは、被写体が2次元の面に投影されて得られる2D画像データを格納しているファイルです。
 
そのため、被写体の位置や照明光の違いや投影時のボケ具合などの影響を受けて同じ被写体であっても2D画像の中身は変化します。
 
これに対して、「3DにおけるJPEG」と位置付けられる3D画像ファイルとはどういうものなのでしょうか?
 
この意味合いを探るべく、先ずは3Dプリントを中心に既に広く普及しているSTLファイルフォーマットを出来るだけ具体的に解きほぐしてみることにしました。

 

STLファイルフォーマットの仕様

 
STLファイルフォーマットの仕様については、The StL FormatSTLファイルフォーマットなどに書かれています。
 
このフォーマットは、

・3D物体の表面形状(サーフェスモデル)を複数の多角形(ポリゴン)で分割し、そのポリゴンを三角形だけに限定している。
・それらポリゴンの法線ベクトルを格納する。
・それらポリゴンの3頂点の座標(任意単位)を格納する。

ことを特徴にしています。
 
このフォーマットのデータ構成は、
1.ヘッダ(任意領域) 80Byte
2.ポリゴン枚数     4Byte
3.各ポリゴンのデータ
 (1)法線ベクトル値 12Byte
 (2)頂点1の座標値 12Byte
 (3)頂点2の座標値 12Byte
 (4)頂点3の座標値 12Byte
(5)未使用データ   2Byte  
となっていて、立方体であれば12個のポリゴンで構成されて80+4+12×(12+12+12+12+2)=計684Byteの容量になります。
 

STLファイルフォーマットの具体例

 
著名なオープンソースの3DCGソフトであるBlenderから出力された、単純な立方体モデルのSTLファイル(バイナリ)を拝借してその構造を説明します。
 

対象物

 
対象となる立体物は立方体です。物体であることを示すために灰色にしておりますが、6個の面がある単なる立方体です。
 
STLファイルの尺度単位は任意となっており、この具体例では縦横高さがそれぞれ±1.0の大きさ内に位置する構造になっています。下記データとの対応を示すために便宜的にいわゆる右手座標系を使って図示しています。

imgP3_1
imgP3_2

 
 
 

 
立方体の中心OがXYZ座標軸の原点(0,0,0)で8個ある頂点の座標が
A(-1,+1,-1)
B(+1,+1,-1)
C(+1,+1,+1)
D(-1,+1,+1)
E(-1,-1,-1)
F(+1,-1,-1)
G(+1,-1,+1)
H(-1,-1,+1)
に位置しています。これらの頂点の記号の名称や順番は適当に割り当てています。
 

ファイルデータの説明

 
ファイルデータは後段に記しています。そのファイルデータの内容をここにまとめておきます。
 

ポリゴン構成

ポリゴンは三角形で、立方体の6個の面を2等分して計12枚のポリゴンにしています。
ポリゴン1は三角形CDH
ポリゴン2は三角形CHG
ポリゴン3は三角形FGH
ポリゴン4は三角形FHE
ポリゴン5は三角形EHD
ポリゴン6は三角形EDA
ポリゴン7は三角形ABF
ポリゴン8は三角形AFE
ポリゴン9は三角形BCG
ポリゴン10は三角形BGF
ポリゴン11は三角形ADC
ポリゴン12は三角形ACB
に対応しています。
 

imgP3_3

 
 
 
 

法線ベクトル

法線ベクトルはポリゴンの面の表裏を定めるために設定されています。面が向いている方向を特定するには面に直交する方向とするのが理にかなっており、方向であるのでベクトルで表現する方法が古くから用いられてきています。裏面にも法線ベクトルは当然にあって表面の法線ベクトルとは反対側の方向を向いています。ここでの法線ベクトルは表面の法線ベクトルで、中心から大きさ1の単位法線ベクトルで表現されています。
 
尚、法線ベクトルは面上に位置する3点から外積演算で求めることができるので、ポリゴンの頂点座標が分かれば法線ベクトルが計算できることになります。しかし、表裏の区別が必要なので、頂点123の登録順を表面から見て反時計回りに設定することが必要になります。STLファイルフォーマットにはそのような反時計回りの頂点123の設定についてが記されています。この規定に従うのであれば法線ベクトルの記載は不要になりますが、法線ベクトルがあればその演算処理が不要になるなど何かと便利になります。
 
三角形CDHのポリゴン1と三角形CHGのポリゴン2を例にとると、これら2つのポリゴンは同一面にあるので、ポリゴン1の法線ベクトルとポリゴン2の法線ベクトルは同一のN1f(裏面の法線ベクトルはN1b)で、(0,0,1)になっています。これはz軸のベクトルと一致しています。
 

imgP3_4

 
 
 

ファイルデータ

 

ヘッダ(任意領域)

バイト数 データ型
80Byte ASCII 
データ
Exported from Blender-3.4.1
 

ポリゴン枚数

バイト数 データ型
4Byte unsigned long integer 
データ
12
 

・リトルエンディアン形式で12と記載されていて、ポリゴン枚数が12枚であることを示している。

 

ポリゴンの共通データ構造

バイト数 データ型 
 ※以下のポリゴンで共通      
48Byte float × 12
2Byte unsigned integer
 

・リトルエンディアン形式で4Byteのfloat(浮動小数点)の値が記載されている。

 

ポリゴン1のデータ

データ
法線ベクトル値 (0,0,1)
頂点1座標値  (1,1,1)
頂点2座標値  (-1,1,1)
頂点3座標値  (-1,-1,1)
未使用データ  (0)

・ポリゴン三角形CDHに対応。

 

ポリゴン2のデータ

データ
法線ベクトル値 (0,0,1)
頂点1座標値  (1,1,1)
頂点2座標値  (-1,-1,1)
頂点3座標値  (-1,1,1)
未使用データ  (0)

・ポリゴン三角形CHGに対応。

 

ポリゴン3のデータ

データ
法線ベクトル値 (0,-1,0)
頂点1座標値  (1,-1,-1)
頂点2座標値  (1,-1,1)
頂点3座標値  (-1,-1,1)
未使用データ  (0)

・ポリゴン三角形FGHに対応。

 

ポリゴン4のデータ

データ
法線ベクトル値 (0,-1,0)
頂点1座標値  (1,-1,-1)
頂点2座標値  (-1,-1,1)
頂点3座標値  (-1,-1,-1)
未使用データ  (0)

・ポリゴン三角形FHEに対応。

 

ポリゴン5のデータ

データ
法線ベクトル値 (-1,0,0)
頂点1座標値  (-1,-1,-1)
頂点2座標値  (-1,-1,1)
頂点3座標値  (-1,1,1)
未使用データ  (0)

・ポリゴン三角形EHDに対応。

 

ポリゴン6のデータ

データ
法線ベクトル値 (-1,0,0)
頂点1座標値  (-1,-1,-1)
頂点2座標値  (-1,1,1)
頂点3座標値  (-1,1,-1)
未使用データ  (0)

・ポリゴン三角形EDAに対応。

 

ポリゴン7のデータ

データ
法線ベクトル値 (0,0,-1)
頂点1座標値  (-1,1,-1)
頂点2座標値  (1,1,-1)
頂点3座標値  (1,-1,-1)
未使用データ  (0)

・ポリゴン三角形ABFに対応。

 

ポリゴン8のデータ

データ
法線ベクトル値 (0,0,-1)
頂点1座標値  (-1,1,-1)
頂点2座標値  (1,-1,-1)
頂点3座標値  (-1,-1,-1)
未使用データ  (0)

・ポリゴン三角形AFEに対応。

 

ポリゴン9のデータ

データ
法線ベクトル値 (1,0,0)
頂点1座標値  (1,1,-1)
頂点2座標値  (1,1,1)
頂点3座標値  (1,-1,1)
未使用データ  (0) 

・ポリゴン三角形BCGに対応。

 

ポリゴン10のデータ

データ
法線ベクトル値 (1,0,0)
頂点1座標値  (1,1,-1)
頂点2座標値  (1,-1,1)
頂点3座標値  (1,-1,-1)
未使用データ  (0)

・ポリゴン三角形BGFに対応。

 

ポリゴン11のデータ

データ
法線ベクトル値 (0,1,0)
頂点1座標値  (-1,1,-1)
頂点2座標値  (-1,1,1)
頂点3座標値   (1,1,1)
未使用データ  (0)

・ポリゴン三角形ADCに対応。

 

ポリゴン12のデータ

データ
法線ベクトル値 (0,1,0)
頂点1座標値  (-1,1,-1)
頂点2座標値  (1,1,1)
頂点3座標値  (1,1,-1)
未使用データ  (0)

・ポリゴン三角形ACBに対応。

 

 

おわりに

 

・今回は3Dファイルで基礎的であるが今も広く使われているSTLファイルフォーマットを調べてみました。
「STLはテッセレーションと呼ばれるとても単純なアプローチで3Dモデルのジオメトリを保存している。」という前出引用:
2020年代に注目すべき3Dデータファイル形式
の表現が的確に言い表しています。

 

・今回の単純な立方体モデルのデータからも

・三角形ポリゴンに限定しているため、同一面のポリゴン同士では同一の法線ベクトルが重複して記録されている。
・立方体の頂点は8個であるのに、計36個の頂点座標が重複して記録されている。
・リトルエンディアンになっているが、ByteOrderのデータは記録されていない。

 などの知見が得られます。

 

・STLファイルはカラー化など拡張の試みがなされ、他の3Dファイルフォーマットも数多く登場して普及し始めており、群雄割拠の状態にありますが、どれもポリゴン、テッセレーションの技術を使っているようです。

 

・私見ですが、3D画像とは究極にはホログラムのように全方向から立体的に見える画像だろうと思います。しかし、2Dモニターや紙媒体で画像を見るのが普通である現代にあっては、全方向から視線方向に投影された2D画像を見ることができる画像を指すと考えることもできます。ジオメトリを記録すれば全方向から視線方向に投影された2D画像を作り出すことが可能であるので、STLファイルのような画像の情報はなくても3D画像ファイルとして扱われることが理解されます。

 

・今後JPEGファイルのように気軽に書類やメールに添付できる3D画像ファイルが普及していくことを期待しています。

 
 

sub1title

closeicon

サンシャインブルー工房創設者、管理人の 青木ガンバロ と申します。
団塊世代の一技術者としてかつては開発業務に没頭しておりました。今はたそがれ期に入り、世間では簡単なことであっても、自分にとっては知らない、経験していないことが山ほどあると気付かされます。
限りある時間に、少しでもそういう未経験のテーマに挑戦してみようと思い、本工房を立ち上げることにしました。
 
いろいろな分野の学習を続けていると、何度も躓いてしまいます。素朴な疑問が湧いてくるのですが、その解答を得るのに手こずります。
膨大な情報の中から欲しい情報を探るのが難しくなっていると感じます。
 
技術を中心としたさまざまな課題を解きほぐし、より本質的な内容を明らかにすることによって、同じように学ぼうとする方々が、素早く答にたどり着けるような情報を発信していければと考えております。
 
このホームページもその挑戦の一つとして独学で制作してきました。
Web技術の多岐にわたる学習が必要であったり、関連する規格やツールなどの仕組みも進化して更新されていくので、最善解に近づくのは容易ではありません。
当初から躓きの連続でありましたが、多くの親切な方々の的確な記事にも助けられて進めてきました。
まだ多くの疑問点が残っております。逐次改善していくつもりです。
 
これまで多くの友人、先輩方の支えがあったお陰で何とか過ごしてくることができました。
人びとの繋がりの大切さを痛感しております。
どこまで頑張れるか分かりませんが、残る力を絞って進んでまいります。
これからも、皆さまのご援助、ご協力をよろしくお願い申し上げます。

sub2title

closeicon

2019-  4-16

・サンシャインブルー工房の個人事業開業

2022-12-22

・ホームページを公開

・ブログ「立方体に写真を貼り付けるツールを作りました」を公開

・ブログ「球体に写真を貼り付けるツールを作りました」を公開

2023-  2-  3

・ブログ「3DにおけるJPEGとは?」を公開

2023-  3-  1

・ブログ「3D画像ファイルの画像とは?」を公開

2023-  4-16

・ブログ「3D画像ファイルのカメラデータとは?」を公開

2023-  5-22

・ブログ「3D画像ファイルの点群とは?」を公開

2023-  6-28

・ブログ「3D画像ファイルのGeoTIFFとは?」を公開

2023-  7-28

・「役立つーる」ページを新設し、最初のオンラインツールGeoTIFFリーダーを公開

・ブログ「GeoTIFFリーダーを作りました」を公開

2023-  8-16

・ブログ「点群におけるLASとは?」を公開

2023-  9- 1

・ブログ「Googleアースに使われるKMLとは?」を公開

2024-  1-16

・ブログ「3D画像ファイルのアニメーションとは?」を公開

2024-  2- 8

・ブログ「ボーンアニメーションのオフセット行列とは?」を公開

2024-  7- 13

・ブログ「3D画像モデルの回転表示とは?」を公開

sub3title

closeicon






    皆さまからの、ご要望、ご依頼、ご質問、ご意見、ご提案などをお待ちしております。
    当方の事情や、お問い合わせの内容によりましては、返信を差し上げることができない場合もあります。あらかじめご了承ください。

    姓 例)日本

    名 例)太郎

    せい 例)にほん

    めい 例)たろう

    例)xxx@abcde.co,jp

    例)いろはに会社


     

    お問い合わせをいただき、ありがとうございます。

    messageOKこのお問い合わせの送信が完了しました。

    お問い合わせがエラーになりました。再度お試しください。

    messageNGこのお問い合わせの送信が失敗しました。

    sub4title

    closeicon
    1.著作権について
    当サイトは、お客さまご自身の画像が貼り付けられてダウンロードされた画像の情報を除き、当サイトに掲載されている、文章・画像・動画等の著作物の情報を無断転載することを禁止致します。
    当サイトは、ブラウザがFirefoxである場合に動画ファイルの生成のためにLPGLv3ライセンスのFFmpegライブラリを使用しています。
    2.リンクについて
    以下の場合を除き、当サイトを他のWebサイトに自由にリンクすることができます。
    (リンクをお断りするWebサイト)
    違法または反社会的な情報を提供するWebサイト
    当サイトの関係者や提供する情報に対して誹謗、中傷する内容を有するWebサイト
    当サイトであることが不明確であるWebサイト
    sub5title

    closeicon
    1.個人情報保護方針
    当サイトは、お客様からお預かりする個人情報の重要性個人情報の重要性を認識し、個人情報の保護に関する法律、その他の関係法令を遵守し、個人情報を安全かつ適切に取り扱います。
    2.個人情報の取得と利用目的
    個人情報を取得させていただくにあたっては、取得情報と利用目的を以下に定め、必要な個人情報のみを、適法かつ公正な手段により取得させていただきます。
     2.1.お問い合わせやご注文時の情報
    (取得情報)
    お客様ご自身によるお問い合わせやご依頼のための入力情報
    (利用目的)
    お客様へのご依頼に対応するため。
     2.2.ご利用履歴情報
    (取得情報)
    アクセス解析ツールGoogle Analyticsを用いた個人を特定しないトラフィックデータ
    (利用目的)
    ご利用状況の分析により当サイトの一層の改善や拡充を図るため
    このGoogle Analyticsの規約に関する詳細は、ここをクリックしてください。
     2.3.広告管理情報
    (取得情報)
    広告表示ツールGoogle AdSenseを用いた個人を特定しない広告管理データ
    (利用目的)
    お客様の興味に応じた商品やサービスの広告配信のため
    このGoogle AdSenseの規約に関する詳細は、ここをクリックしてください。
    3.個人情報の第三者への開示
    当サイトは、お客様からお預かりした個人情報を、個人情報保護法その他の法令に基づき開示が認められる場合、または、お客様からの同意を得た場合を除き、第三者に提供することはありません。
    4.クッキー(Cookie)について
    クッキー(Cookie)とは、当サイトにアクセスした際にお客様のブラウザに送信され、お客様のコンピューターに保存される情報のことです。
    当サイトでは、利用履歴の収集および広告の管理のためにそのクッキーを使用しています。
    当サイトが使用するクッキーのデータは、個人情報を含むものではありませんが、お客様がブラウザを操作することにより、クッキーの使用を制限(オプトアウト)することや、保存されたクッキーの情報を削除することも可能です。ただし、そのブラウザの設定によっては、当サイト一部の機能が使用できなくなる恐れがありますのでご注意ください。
    5.個人情報保護方針の変更
    当サイトは、法令の制定、改正等により、本個人情報保護方針を適宜見直し、予告なく変更する場合があります。本個人情報保護方針の変更は、変更後の内容が閲覧可能となった時点で有効になります。
    6.免責事項
    当サイトは、正確な情報を掲載するよう努めておりますが、誤情報の混入、情報の陳腐化が起こることがあります。当サイトに掲載された内容や、他のサイトに移動された場合の移動先サイトで提供される情報によって生じた損害等の一切の責任を負いかねますのでご了承ください。