17. CGシステム

此れまでの章は全てアルゴリズムの話でしたが、此の章では其れを動かす機械とプログラムを見ます。パイプラインを実行するプロセッサ、人が使うソフトウェア、形をコンピュータに取り込み絵を外に出す装置、そして結果を保存するメディアです。

グラフィックスの設計判断の多くは、ハードウェアを知って初めて腑に落ちます。何故ゲームはミリ秒を数えるのか、何故GPUは同じ小さな仕事を何千個も欲しがるのか、何故3Dスキャナーはガラスの花瓶で失敗するのか、何故3Dプリンタは穴の空いたメッシュを受け付けないのか。
検定対策としては、此の章はシラバスの分野8 CGシステムと、其の項目であるCG用ソフトウェア、リアルタイム3次元CGシステム、3次元データ入力装置、3次元データ出力装置、記録メディアを扱います。
第2章のカメラと圧縮、第3章の色と奥行き手がかり、第6章のGPUパイプライン、第7章と第9章のソリッドとメッシュ、そして第10〜12章のレンダリングの上に成り立っています。

ハードウェアの変化は速いです。
此の章の容量、速度、製品の世代は全て「執筆時点(2026年末)」の物として読んで下さい。其の背後にある原理は其れよりずっとゆっくりしか変わらず、検定対策として押さえておきたいのも其方です。
製品名やツール名は例として挙げているだけで、推奨ではありません。

17.1 CGシステムとは

CGシステムとは、CGを作るのに必要な物全て、つまりハードウェア、ソフトウェア、そして其れらを繋ぐ手順の事です。
スマートフォンから映画スタジオまで、同じ4つの部分から成ります:

CGシステムの4つの部分:入力装置、CPU・GPU・ソフトウェアによる処理、出力装置、そして処理と繋がる記録

  • 入力:マウスやペンタブレット、カメラや3Dスキャナー、モーションキャプチャ。
  • 処理:CPUとメインメモリ、GPUと其のメモリ、そして其の上で動くソフトウェア。
  • 出力:ディスプレイ、プロジェクタ、ヘッドマウントディスプレイ、プリンタ、3Dプリンタ。
  • 記録:SSD、ハードディスク、光ディスク、テープ、ネットワークやクラウドのストレージ。

ワークステーションは、かつてはCADやCG向けの特別で高価なコンピュータでしたが、今では普通、プロ向けGPUと大容量メモリを積んだ高性能なPCの事です。
此の章の残りは図の順に進みます。処理(17.2〜17.4節)、入力(17.5節)、出力(17.6節と17.7節)、記録(17.8節)です。

17.2 CPU・GPU・メモリ

2種類のプロセッサ

CPUはOS、アプリケーションのロジック、物理、アニメーション、ファイルの読み込みを実行します。
GPUは第6章(6.5節)の描画パイプラインを実行します。
どちらも数値を計算しますが、正反対の目的の為に作られています:

4つの大きなコアを持ち、各コアに制御部と少数のALU、そして大きなキャッシュを持つCPUと、多数の小さなレーンを持つ8つのブロック、小さめのL2キャッシュ、VRAMを持つGPU

  • CPUは少数の大きなコア(数個から数十個)を持ちます。各コアの多くの部分は制御回路(オレンジ)で、分岐予測やアウトオブオーダー実行を行い、更に大きなキャッシュ(ピンク)があります。低レイテンシの為の設計で、複雑で分岐の多い1つの仕事を出来るだけ早く終わらせます。
  • GPUは多数の小さなレーン(緑)を持ち、其れらはメーカーによってストリーミングマルチプロセッサ(SM)又はコンピュートユニット(CU)と呼ばれるブロックにまとめられています。執筆時点のハイエンドなデスクトップGPUには2万を超えるレーンがあります。各ブロックは1つの制御部を共有します。スループットの為の設計で、1つ1つは待たされても、似た小さな仕事を1フレームに何百万個も終わらせます。

グラフィックスは2つ目の設計にぴったりの仕事です。
1920 × 1080のフレームには2,073,600ピクセルがあり、フラグメントシェーダーは其の全てに、入力だけを変えて同じプログラムを実行します。頂点、レイ、パーティクルでも同じです。
此れがデータ並列、つまり沢山のデータに同時に同じ演算を行う事です。

SIMTと分岐ダイバージェンス

GPUのブロックは、レーンを普通32個(メーカーによっては32又は64個)の組にして足並みを揃えて動かします。此の組をワープ又はウェーブフロントと呼びます。
組の全てのレーンが同じ瞬間に同じ命令を、其々自分のデータに対して実行します。此れがSIMT(single instruction, multiple threads)です。
プログラマーからは各レーンが独立したスレッドに見えますが、裏では32個が1つの命令の流れを共有しています。

其の結果が分岐ダイバージェンスです。組の中でif側に進むレーンとelse側に進むレーンがあると、組は両方の分岐を順番に実行し、其の分岐に進まなかったレーンは止めておきます。

計算例。 経路Aは100サイクル、経路Bは50サイクル掛かるとします。
32レーンの組で、10レーンがA、22レーンがBに進みます。

  • 揃った組なら、100サイクル(全部A)か50サイクル(全部B)で済みます。
  • 此の分かれた組では100+50=150サイクル掛かります。
  • 役に立つ仕事は10×100+22×50=2100レーン・サイクルで、使えるのは32×150=4800なので、効率は2100/4800=43.75%です。

其の為、シェーダーのプログラマーは、ピクセルごとに変わる分岐より、隣のピクセル同士で同じになる分岐(「此のマテリアルは金属か?」)を好みます。
もう1つの大きなコスト、メモリ待ちを、GPUは数の力で隠します。ある組がテクスチャの値を何百サイクルも待っている間に、ブロックは準備の出来た別の組に切り替えるのです。
同じレーンはコンピュートシェーダー(GPGPU)として物理、画像処理、機械学習も実行します。GLSLシリーズの第15章で1つ見られます。

メモリと帯域幅

GPUには専用の高速なメモリ、VRAM(ビデオメモリ)があります。ボード上のGDDRチップか、一部のハイエンドやデータセンター向けGPUではチップの隣に積み重ねたHBMです。執筆時点の一般向けカードは大体8〜32 GBを積んでいます。
VRAMにはフレームバッファ、深度バッファ、テクスチャ、頂点バッファとインデックスバッファ、レイトレーシングの加速構造が入ります。
統合GPU(ノートPC、スマートフォン、ゲーム機)は、代わりにCPUと1つのユニファイドメモリを共有します。コピーが要らない代わりに、帯域幅も分け合います。

リアルタイムのグラフィックスでは、メモリの容量と同じ位、帯域幅(1秒に何バイト読み書き出来るか)が大事です。
執筆時点のハイエンドなカードは、ピンあたり28 Gbit/sの512ビットのメモリバスを持ちます。512×28/8=1792 GB/s、約1.8 TB/sです。

計算例:4K・60 Hzのフレームバッファの通信量。
4K UHDのフレームは3840×2160=8294400ピクセルで、1ピクセル4バイトなら33177600バイト、約33.2 MBです。此れを毎秒60回書くと約1.99 GB/sです。
実際のレンダリングは各ピクセルに何度も触ります。
各ピクセルを3つの面が覆い(オーバードロー3)、其の度に深度テストが深度を4バイト読み、深度を4バイト書き、色を4バイト書き、最後にディスプレイが色を1回読むとします:

3×(4+4+4)+4=40 バイト/ピクセル,8294400×40×60≈19.9 GB/s

此れは1792 GB/sの約1.1 %に過ぎません。
フレームバッファ其の物は安く、帯域幅はテクスチャ(ミップマップ付きの4096 × 4096のRGBA8テクスチャ1枚で40962×4×43≈89.5 MB。第11章参照)、Gバッファとポストプロセス(17.4節)、シャドウマップに使われます。
チップ上のキャッシュは、隣り合うピクセルの為に同じデータを2度取りに行かない為の物です。又、毎フレーム必要なデータはVRAMに置いたままにします。CPUからのバス(PCではPCI Express)はずっと遅いからです。

レンダーファームとスタジオのパイプライン

映画向けのオフラインレンダリング(第12章)は、1フレームに数分から数時間掛かる事があります。
レンダーファームは、多数のコンピュータ(レンダーノード)が別々のフレームを同時にレンダリングするクラスタで、ジョブスケジューラーが仕事を配ります。
フレームは互いに独立なので、殆ど完璧に速くなります。

計算例。 24フレーム/秒で90分の映画は90×60×24=129600フレームです。
1フレーム2時間なら259200ノード時間、1台では30年近く掛かります。1,000ノードなら259200/1000=259.2時間、約10.8日です。
クラウドレンダリングは、此の様なノードを時間単位で借ります。其の為、小さなスタジオでも、持たずに1,000台を1週間使えます。

スタジオではデータが部署から部署へ流れます(モデリング → リギング → アニメーション → ライティング → レンダリング → コンポジット)。其れを2つの道具が管理します:

  • アセット管理:モデル、テクスチャ、リグ、ショットはどれも、バージョン、担当者、依存関係を持つアセットで、データベースで追跡されるので、ツールは「承認済みのバージョン」を見つけられます。
  • バージョン管理:全ての変更が記録され、比べたり元に戻したり出来ます。大きなバイナリのアセットには、巨大なファイルとロックを扱えるシステムが必要です。

検定のポイント

  • CPU:少数の複雑なコア、低レイテンシ、大きなキャッシュ。GPU:多数の単純なレーン、高スループット、データ並列(SIMT)。
  • ワープ内で分かれた分岐は両方の経路を実行する。メモリの待ち時間は多数のスレッドを切り替えて隠す。
  • リアルタイムレンダリングはVRAMの帯域幅に制限される。統合GPUはCPUとメモリを共有する。
  • レンダーファームはフレーム単位で並列化し、クラウドレンダリングは其のノードを借りる。

17.3 CG用ソフトウェア

分類

CG用ソフトウェアは幾つかの系統に分かれます。
表の名前はよく知られた例を順不同で挙げただけで、推奨ではありません。殆どのスタジオは幾つかを組み合わせます。

分類 する事 例
DCCツール(モデリング、アニメーション) ポリゴンとサブディビジョンのモデリング、UV、リギング、キーフレームアニメーション、レンダリング Blender、Maya、3ds Max
プロシージャルツール ノードのネットワークで形状、エフェクト、シミュレーションを生成(第9章) Houdini、BlenderのGeometry Nodes
デジタルスカルプト 何百万ものポリゴンを粘土の様に形作り、法線マップに焼き込む(第11章) ZBrush、Blenderのスカルプトモード
CAD 製造向けの正確なソリッド:B-rep、NURBS、フィーチャー(第7章と第8章) AutoCAD、SolidWorks、FreeCAD
レンダラー 映画向けのオフラインのパストレーシング(第12章) RenderMan、Arnold、V-Ray、Cycles
コンポジット レンダリングしたパスと実写を重ねる(第14章) Nuke、After Effects
画像編集とペイント レタッチ、テクスチャのペイント(第15章) Photoshop、GIMP、Krita、Substance Painter
ゲームエンジン リアルタイムレンダリングに物理、音、スクリプト、エディタを加えた物 Unreal Engine、Unity、Godot

DCCはデジタルコンテンツ制作(digital content creation)の略で、アーティストがアセットを作る汎用ツールの事です。
ゲームエンジンはレンダラーとフレームワークを兼ねています。ゲームのロジックは其の上に書き、エンジンが17.4節のフレームのループを回します。

交換フォーマット

スタジオはツールを組み合わせるので、ファイルをツール間で移す必要があります。
第9章(9.1節)ではOBJ、PLY、STL、glTFを紹介しました。全体像は次の通りです:

フォーマット 保存する物 典型的な用途
OBJ ポリゴン、UV、法線。マテリアルは.mtl 静的なメッシュの単純な交換
FBX メッシュ、マテリアル、スケルトン、スキニング、アニメーション。独自形式(Autodesk) アニメーションするキャラクターをDCCツールとエンジンの間で移す
glTF 2.0 メッシュ、PBRマテリアル、階層、スキン、アニメーション。KhronosとISOのオープンな標準 リアルタイムエンジンとWebへの受け渡し
USD シーン全体を、互いに上書き出来るレイヤーとして保存。オープンソース(Pixar、2016年) 映画とVFXのパイプライン、多くの部署が1つのシーンを扱う
Alembic 焼き込んだジオメトリキャッシュ:毎フレームの頂点位置 シミュレーションや変形済みメッシュをライティングに渡す
STL、3MF 製造用の閉じた三角形メッシュ(17.7節) 3Dプリント
OpenEXR 多チャンネルの浮動小数点HDR画像 レンダリングしたパス、テクスチャ

FBX/glTFとAlembicの違いは知っておく価値があります。前の2つはリグと、アニメーションする関節の値を保存するので、受け取るプログラムが自分で変形を計算しなければなりません。Alembicは結果、つまり毎フレームの全頂点を保存します。大きくなりますが、どのプログラムでも同じに見えます。

殆どのDCCツールは拡張出来ます。スクリプト(普通はPython)は繰り返し作業を自動化し、スタジオのパイプラインの多くも此れで書かれます。プラグイン(普通はツールのSDKに対するC++)はデフォーマー、シェーダー、ファイルフォーマット、更にはレンダラー丸ごとを追加します。

グラフィックスAPIとシェーディング言語

プログラムはグラフィックスAPIと其のドライバを通してGPUと話します:

API プラットフォーム 備考
OpenGL(OpenGL ES、WebGL) デスクトップ、モバイル、Web 古く高水準で、ドライバが多くを暗黙に行う。OpenGLシリーズで学ぶ
Vulkan Windows、Linux、Android等 低水準で明示的:メモリ、同期、コマンドバッファをアプリケーションが管理する
Direct3D 12 Windows、Xbox 低水準で、考え方はVulkanに近い
Metal Apple製品 低水準、Apple独自
WebGPU Webブラウザ Web向けの現代的で明示的なAPI

明示的なAPIはプログラマーの仕事を増やしますが、隠れたドライバのオーバーヘッドが減り、多数のCPUコアを活かしやすくなります。
シェーダーはシェーディング言語で書きます。GLSL(OpenGL、Vulkan)、HLSL(Direct3D、Vulkanでも)、MSL(Metal)、WGSL(WebGPU)、そして其の幾つかにコンパイル出来るSlangです。Slangは2024年からKhronos Groupが管理しています。
VulkanはシェーダーをSPIR-Vという中間的なバイナリ形式で受け取るので、SPIR-Vへのコンパイラがある言語なら何でも使えます。
シェーダーを自分で書くのはGLSLシリーズです。此のシリーズのサンプルはSlang、GLSL、HLSLを並べて示しています。

ミドルウェアは、アプリケーションとプラットフォームの間で1つの問題を上手く解くソフトウェアです(物理、音、アニメーション、UI、動画再生)。ゲームエンジンは、ある意味ではミドルウェアの束にエディタを載せた物です。

17.4 リアルタイム3次元CGシステム

リアルタイム3次元CGシステムは、対話に間に合う速さで1枚1枚の画像を作ります。ゲーム、シミュレーター、VR、CADのビューポートです。
其の中心は第6章のGPUパイプラインです。此処では其の裏のハードウェアと、周りのタイミングを見ます。

GPUの中身

初期のGPUは頂点シェーダーとピクセルシェーダーに別々のハードウェアを持ち、どちらかが遊んでいる事がよくありました。
2000年代半ばからGPUはユニファイドシェーダーアーキテクチャを使っています。同じプログラマブルなレーンが、其の時の仕事に応じて頂点、フラグメント、コンピュートの全てのシェーダーを実行します。
其の周りには、専用ハードウェアの方が速く省電力に出来る程よくある仕事の為の固定機能ユニットがあります:

  • ラスタライザ:三角形をフラグメントに変えます(第6章、6.9節)。
  • テクスチャユニット:テクセルのアドレスを計算し、フィルタリングします(第11章)。
  • ROP(レンダー出力ユニット):深度テストとステンシルテスト、ブレンディング、フレームバッファへの書き込みを行います。
  • キャッシュとメモリコントローラ、動画のエンコーダー/デコーダー、ディスプレイコントローラ。
  • 最近のGPUでは、BVHの走査とレイと三角形の交差判定を行うレイトレーシングユニット(第12章、12.9節)と、AIアップスケーラーやデノイザーの様なニューラルネットワーク用の行列演算ユニット。

フレームレートとフレームタイム

リアルタイムレンダリングはフレームレート(fps、1秒あたりのフレーム数)、又はより実用的にはフレームタイム(1フレームあたりのミリ秒)で測ります。
2つは逆数の関係です。30 fpsは33.3 ms、60 fpsは16.7 ms、120 fpsは8.33 msです。
コストはミリ秒で足し算されるので、ミリ秒の方が設計の単位として向いています。30から60 fpsにするには16.7 msの仕事を削る必要がありますが、120から240 fpsなら8.33−4.17=4.17 msで済みます。どちらも「フレームレートを2倍にする」のにです。
ゲームループが此のフレーム予算をどう分けるかは第14章の話題です。

テアリング・垂直同期・バッファリング

第6章(6.5節)でダブルバッファ、テアリング、垂直同期を説明しました。此処では其れを時間軸の上で見ます。
60 Hzのディスプレイは、16.7 msのリフレッシュごとに画像を上から下へ走査します(短い帰線期間は無視します)。
GPUは12、14、20、12 ms掛かる4つのフレームを描きます:

60 Hzのディスプレイと、12、14、20、12 msのフレームを描くGPUの時間軸:垂直同期なしでは各リフレッシュに2つのフレームが境目付きで映り、垂直同期ありでは各リフレッシュに1つのフレーム全体が映るがフレーム2が2回表示される

垂直同期なしでは、フレームが出来た瞬間にバッファを入れ替えます。12、26、46、58 msです。
12 msの時点でディスプレイは最初のリフレッシュの12/16.7=0.72まで進んでいるので、画面の上72 %はフレーム0、残りはフレーム1になります。1080ラインの画面なら境目はライン0.72×1080≈778付近です。
他の入れ替えは其々のリフレッシュの(26−16.7)/16.7=0.56、(46−33.3)/16.7=0.76、(58−50)/16.7=0.48の位置に来ます。
どのリフレッシュにも境目があり、其の位置が毎回違います。此れがテアリングです。
見返りはレイテンシが最も小さい事です。新しいフレームが出来た瞬間に映るからです。

垂直同期あり(バッファ2つ)では、出来たフレームは次のリフレッシュの区切りを待ち、入れ替えでバッファが空くまでGPUは次のフレームを始められません。
フレーム1は16.7 msに表示されます。フレーム2は16.7〜30.7 msに描かれて33.3 msに表示されます。フレーム3は20 ms(33.3〜53.3 ms)掛かり、50 msのリフレッシュに間に合わず、66.7 msにやっと表示されます。
50 msのリフレッシュはフレーム2をもう1度表示します。
テアリングは起きませんが、リズムが不揃いになり(スタッター)、レイテンシも増えます。フレーム3は完成してから13.3 ms待たされます。

よくある対策は次の2つです:

  • トリプルバッファ:2つ目のバックバッファがあるので、完成したフレームがリフレッシュを待っている間にGPUは次のフレームを始められます。ディスプレイは相変わらず完全なフレームだけを表示します。
  • 可変リフレッシュレート(VRR):逆にディスプレイがGPUを待ち、フレームが出来た時に(対応する範囲内で)リフレッシュを始めます。テアリングが無く、16.7 msの固定の刻みも無くなります。

遅延

対話で大事なのは遅延(レイテンシ)、つまり入力(マウスの移動、ボタン、頭の回転)から、変化した絵が目に届くまでの時間です。「入力から光子まで」とも言います。

計算例。 60 Hzで、典型的なパイプライン化されたエンジンは、フレームの初めに入力を読み、CPUが其のフレーム(16.7 ms)でシミュレーションとコマンドの記録を行い、GPUが次のフレーム(16.7 ms)で其れを描き、リフレッシュの区切りで入れ替えます。其の後ディスプレイが画面の真ん中まで走査するのにリフレッシュの半分(8.3 ms)掛かります。
合計は16.7+16.7+8.3≈41.7 msに、ディスプレイ自身の処理時間が加わります。120 Hzなら同じ流れで約20.8 msです。
エンジンは、入力を出来るだけ遅く読み、CPUがGPUより先に進める量を制限する事で此れを縮めます。

仕事を減らす

一番速い三角形は描かない三角形です:

  • 視錐台カリングと背面除去(第6章、6.4節)。
  • オクルージョンカリング:他の物体の後ろに隠れた物体を飛ばします。例えばバウンディングボックスを粗い深度バッファと比べます。第10章のZバッファの考え方を物体単位に使う訳です。
  • 詳細度(LOD)(第9章、9.1節)とインスタンシング(1つのメッシュの多数のコピーを1回の描画コマンドで描く)。

フォワードレンダリングとディファードレンダリング

  • フォワードレンダリングは、物体を描きながら各フラグメントを完全にシェーディングし、影響する光源をループします。単純で、半透明やMSAAとも相性が良いですが、光源が多くオーバードローも多いと、同じピクセルを無駄に何度もライティングします。
  • ディファードレンダリングは、先ず不透明な形状を全てGバッファに描きます。ピクセルごとの深度、法線、ベースカラー、ラフネス等で、ライティングはしません。2つ目のパスで見えているピクセルを1回ずつライティングするので、コストはオーバードローではなく、ピクセル数と光源数で決まります。

計算例。 32ビットのレンダーターゲット4枚と32ビットの深度から成るGバッファは、1ピクセルあたり20バイトです。1920 × 1080なら1920×1080×20=41472000バイト、約41.5 MBです。
60 fpsで毎フレーム1回書いて1回読むと、41.5 MB×2×60≈5.0 GB/s掛かります。
Gバッファの1ピクセルは1つの面しか持てないので、半透明の物体は後からフォワードで描き、MSAAも高く付きます。
多くのエンジンはタイル/クラスタシェーディングを使います。光源を画面のタイルや3次元のクラスタに振り分け、各ピクセルは自分のクラスタの光源だけをループします。

ハードウェアレイトレーシング

2018年から、GPUはレイの走査とレイと三角形の交差判定の為のユニットを持ち、VulkanとDirect3D 12のレイトレーシング拡張から使えます(第12章、12.9節)。
殆どのゲームはハイブリッドに使います。主な画像は今でもラスタライズで描き、レイで反射、影、大域照明を1ピクセル数サンプルだけ加え、デノイザーで綺麗にします。
動く物体の為の加速構造の更新も、フレーム予算に収めなければなりません。

ゲーム機とモバイルGPU

ゲーム機は固定されたリアルタイムシステムです。どの本体も同じCPU、GPU、ユニファイドメモリを持つので、ゲームを正に其のハードウェアに合わせて調整出来ます。
モバイルGPUは電力と熱に制限され、外部メモリとのデータのやり取りには多くのエネルギーが掛かります。
其の為殆どがタイルベースレンダリングを使います。画面を小さなタイル(例えば32 × 32ピクセル)に分け、GPUは先ずフレームの三角形を其れが触れるタイルに振り分け、次に1タイルずつチップ上の小さなメモリの中で描き切り、完成した色だけを外に書き出します。
深度バッファはチップから一度も出ない事も多いです。
1920 × 1080の画面を32 × 32のタイルに分けると⌈1920/32⌉×⌈1080/32⌉=60×34=2040タイルになり、ライティングのパスが同じタイルを読む様にすれば、先の計算例のGバッファもチップ上に留められます。

VRとARのシステム

ヘッドマウントディスプレイ(HMD)は目の前にディスプレイとレンズを置き、頭の動きに合わせて絵を更新します。
システムへの要求は厳しいです:

  • 6自由度(6DoF:3つの回転と3つの並進)のヘッドトラッキング。今では殆どが、ヘッドセットのカメラと慣性センサーが部屋を見るインサイドアウトで、外部のセンサーがヘッドセットを見るアウトサイドインは減っています。
  • ステレオレンダリング:1フレームに2つの視点(17.6節)。GPUとAPIは2つを1パスで描く機能(マルチビュー)を持ちます。
  • 高いリフレッシュレート:よく使われるのは90 Hzで、両目分で1フレーム1000/90=11.1 msです。
  • 小さなモーション・トゥ・フォトン遅延:目標としてよく挙げられるのは約20 ms以下です。

計算例。 頭を毎秒100°で回し、絵が20 ms遅れると、仮想世界は本来の位置から100×0.020=2°ずれて描かれます。1度あたり20ピクセルのディスプレイなら40ピクセルです。
世界が頭と一緒に泳ぐ様に見え、VR酔いの典型的な原因になります(18.2節)。
ヘッドセットは予測(頭が此れから向く位置に合わせて描く)とリプロジェクション(走査の直前に、最新の頭の姿勢で完成画像を変形し直す)で対抗します。
レンズは糸巻き型の歪みを生むので、レンダラーは最後のパスで逆の樽型に歪めておきます。視線追跡があれば、フォービエイテッドレンダリング(18.5節)で目が見ている所だけに細部を費やせます。
拡張現実(AR)は現実の世界にCGを重ねます。透明なディスプレイ越し(光学シースルー)か、カメラの映像の上(ビデオシースルー)です。ARに特有の問題は位置合わせ、つまり仮想の物体を現実の物体にぴったり留めておく事です。

検定のポイント

  • ユニファイドシェーダー:全てのシェーダー段階を1種類のレーンで実行する。ラスタライズ、テクスチャフィルタリング、ROP、レイトレーシングには固定ユニット。
  • fpsとmsは逆数。予算はmsで足す。
  • 垂直同期なし:テアリング、最小のレイテンシ。ダブルバッファの垂直同期:テアリングは無いが、遅れたフレームは次のリフレッシュを待つ(スタッター。60 fpsが30に落ちる)。トリプルバッファとVRRが此れを和らげる。
  • フォワード:描きながらシェーディング。ディファード:先ずGバッファ、次に各ピクセルを1回ライティング(光源が多いと有利、半透明とMSAAが苦手)。
  • タイルベースレンダリングはタイルをチップ上に置き、帯域幅と電力を節約する。
  • VR:6DoFのトラッキング、ステレオレンダリング、高いリフレッシュレート、小さなモーション・トゥ・フォトン遅延。

17.5 3次元データ入力装置

指す・描く・感じる

CGの日常的な入力装置は2次元です。マウスと、絶対位置、傾き、筆圧を加えたペンタブレットです。
筆圧も他の測定値と同じく量子化されます(第2章、2.5節)。多くのタブレットは8,192段階、つまり213の13ビットの値を返し、其れがブラシの大きさや不透明度を動かします。
3Dマウスは押す、引く、傾ける、捻るが出来るノブで、6自由度で片手でカメラを飛ばせます。
力覚提示装置(ハプティックデバイス)はペンの付いた小さなロボットアームで、仮想の道具が面に触れると押し返します。力覚には速いループが必要で(毎秒約1,000回の更新がよく使われる値です)、遅いと硬い面が柔らかく感じられます。
モーションキャプチャは第13章で扱います。
本物の物体の形をコンピュータに取り込むには、3Dスキャナー(3次元形状計測装置)が必要です。

3Dスキャナーの種類

能動型(アクティブ) 受動型(パッシブ)
考え方 自分で光(レーザー、パターン、パルス)を当てる カメラの様に、其処にある光だけを使う
方式 レーザーによる三角測量、パターン投影、TOF、ライダー ステレオ、フォトグラメトリ
長所 模様の無い無地の面でも測れる。密で正確 安い(カメラだけ)、距離を選ばない、色も取れる
短所 日光に信号がかき消される事がある 対応を探す為に面に模様が必要

もう1つの分け方が接触式と非接触式です。
三次元測定機(CMM)は、精密なアームの先のプローブで物体に触れます。マイクロメートル単位で正確ですが、1点ずつで遅く、触っても良い物にしか使えません。
以下の光学的な方式は全て非接触式で、どれも光沢のある面、透明な面、とても暗い面が苦手です。光が予測出来る形でセンサーに返ってこないからです。

レーザーによる三角測量

レーザーが物体に点や線を当て、レーザーから既知の距離にあるカメラが其れの当たった位置を見ます。
レーザー、カメラ、光った点は、1辺と2角が分かっている三角形を作ります。其れで三角測量と呼びます。レーザーの線を使うスキャナーは光切断法とも呼ばれます。線が物体を「切り」、曲がった線の像が断面の形を示すからです。

レーザーによる三角測量:基線長bの両端にレーザーとカメラがあり、角度アルファのレーザー光と角度ベータのカメラの視線が、基線から高さzの物体の表面上の点Pで交わる

レーザーを原点に、カメラをx軸上の距離b(基線長)に置きます。
光は既知の角度αで出ていき、カメラは光点のピクセル位置から角度βを測ります(第2章、2.2節のピンホールモデル)。
点が(x,z)にあれば、其の下の2つの直角三角形からz=xtanαとz=(b−x)tanβなので:

x=btanβtanα+tanβ,z=btanαtanβtanα+tanβ=bsinαsinβsin(α+β)

(分子と分母にcosαcosβを掛け、sinαcosβ+cosαsinβ=sin(α+β)を使います)。

計算例。 b=100 mm、α=60°、β=70°。

  • tan60°=1.7321、tan70°=2.7475、和は4.4796。
  • x=100×2.7475/4.4796=61.33 mm、z=61.33×1.7321=106.2 mm。
  • 確認:100×0.8660×0.9397/sin130°=81.38/0.7660=106.2 mm。

基線長を長くすると深度は正確になりますが、カメラは物体をより違う方向から見る事になり、レーザーかカメラのどちらかから隠れる点が増えます(オクルージョン:スキャンの穴)。
三角測量は近距離でとても正確で、小さな物体、検査、歯科のスキャンに使われます。

パターン投影法

パターン投影法のスキャナーは、レーザーの代わりにプロジェクタを使い、物体全体に一連のパターンを当ててカメラで撮影します。
プロジェクタの各列に固有の符号を与えるので、カメラの各ピクセルは自分を照らした列が分かり、後は三角測量です。
白黒の縞パターンがn枚あれば、各列はnビットの符号を受け取り、2n本の列を区別出来ます。10枚のパターンで1,024本の縞です。
符号には普通グレイコードを使います。隣り合う縞が丁度1ビットだけ違うので、縞の境目で読み間違えても、ずれは高々1本です:

4枚のグレイコードの縞パターン、各パターンは前の物の2倍細かく、其れらが表す縞の番号0から15

ある列で4枚のパターンを上から読むと(黒 = 0、白 = 1)其の列の符号になります。例えば縞5は0、1、1、1です。
此れを空間コード化法と呼びます。更に細かい精度は位相シフト法で得ます。少しずつずらした正弦波のパターンを数枚使い、各ピクセルに縞の中での連続的な位置を与えます。

TOFとライダー

TOF(Time of Flight)方式のセンサーは、光が物体まで行って帰ってくる時間を測ります。
光の速さはc=299792458 m/s、1ナノ秒で約30 cmで、距離を2回進みます:

TOF:物体から距離dの位置にある発光部と受光部。パルスはデルタt = 20ナノ秒後に返り、dは約3メートル。20メガヘルツで変調した波では、4分の1周期の位相差ファイから約1.87メートル

直接方式は短いパルスの反射が返るまでの時間を測ります:

d=cΔt2

計算例。 Δt=20 ns:d=299792458×20×10−9/2=2.998 m。
1 mmを区別するには、時計が2×0.001/c=6.67ピコ秒を区別しなければなりません。其の為直接方式は、センチメートルで十分な長い距離に向いています。

間接方式は光の明るさを周波数f(数十MHz)で変調し、出した波と受けた波の位相差φを測ります。
1周期は往復c/fに当たるので:

d=cφ4πf

計算例。 f=20 MHz(周期50 ns)、φ=π/2(4分の1周期、12.5 ns):d=299792458×(π/2)/(4π×20×106)=1.874 m。
位相は2πごとに繰り返すので、距離が一意に決まるのはc/(2f)=7.49 mまでです。7.49+1.87=9.37 mの物体も同じ位相になるので、センサーは複数の周波数を組み合わせて範囲を広げます。

ライダー(LiDAR)は走査するレーザーを使うTOFで、遠くまで毎秒何百万点も測ります。航空機やドローンからの測量、自動運転車、建物のスキャン、そして一部のスマートフォンやタブレットの小さな固体式の物まであります。

ステレオと視差からの深度

ステレオ法は受動型の三角測量で、2台のカメラがレーザーとカメラの代わりをします。
1つの点は2枚の画像で少し違う位置に写り、其の差、視差(ディスパリティ)が深度を教えます。私達の両目の両眼視差と同じです(第3章、3.9節)。

ステレオの幾何:基線長Bだけ離れた2台のピンホールカメラと焦点距離fの画像面。深度Zの点Pは左画像のx Lと右画像のx Rに写る

光軸が平行で基線長Bだけ離れた、焦点距離fの同じピンホールカメラを2台考えます。
(左カメラから測った)横の位置X、深度Zの点は、左画像ではxL=fX/Zに、右画像ではxR=f(X−B)/Zに写ります。どちらも其のカメラの画像中心から測ります。
引き算すると:

d=xL−xR=fBZ⇔Z=fBd

深度は視差に反比例します。近い点は視差が大きく、無限遠の点はd=0です。
図ではB=3、f=1.5、P=(1,4.5)です。xL=0.333、xR=1.5×(1−3)/4.5=−0.667、d=1で、確かにfB/d=4.5です。

ピクセル単位の計算例。 4 mmのレンズと4 µmのピクセルならf=4/0.004=1000ピクセルで、基線長はB=0.12 mとします。
視差40ピクセルならZ=1000×0.12/40=3 m、39ピクセルなら120/39=3.08 mです。
Z=fB/dを微分すると、視差の誤差Δdに対する深度の誤差が得られます:

ΔZ≈Z2fBΔd

3 mでは1ピクセルあたり9/120=0.075 m、6 m(視差20)では36/120=0.3 mで、距離が2倍で4倍悪くなります。
ステレオの精度は距離の2乗で落ちます。基線長を広げるか焦点距離を長くすると改善します。

難しいのは対応点探索です。左画像のあるピクセルと同じ点を写しているのは、右画像のどのピクセルでしょうか?
校正した画像を先ず平行化し、対応点が同じ行に来る様にしてから、其の行に沿って小さな窓を比べます。
模様の無い面(白い壁はどこも同じに見えます)、繰り返し模様、光沢のある素材では対応探しが失敗します。アクティブステレオはランダムな点のパターンを投影して、全ての面に模様を与えます。

フォトグラメトリと深度カメラ

フォトグラメトリはステレオを、位置の分からない沢山の写真に広げた物です(第9章、9.5節)。SfM(Structure from Motion)が写真間で特徴点を対応付け、カメラの位置と疎な点群を同時に求め、次に多視点ステレオ(MVS)が密な点群とテクスチャ付きのメッシュを作ります。
カメラだけで済み、色も手に入ります(第12章の12.13節では此れをイメージベーストモデリングと呼びました)。
1つ落とし穴があります。写真だけではスケールが分かりません(近くで撮ったおもちゃの家は、遠くの本物の家と同じに見えます)。其の為スケールバーの様な既知の長さを加えなければなりません。

深度カメラ(デプスカメラ)は、パターン投影、間接方式のTOF、アクティブステレオのどれかの能動型の原理で、深度画像全体を動画の速さで出力します(2010年にゲーム機向けに売られた深度センサーはパターン投影、其の後継機はTOFでした)。
安く速い一方、専用のスキャナーよりノイズが多く、ジェスチャー入力、ロボット、ARの部屋のマッピング、手軽なスキャンに使われます。

点群からメッシュへ

スキャナーが出すのは点群や深度画像で、其の儘では使えるモデルになりません:

  1. 位置合わせ:違う視点からのスキャンを(手作業やマーカーで)大まかに揃え、次にICP(iterative closest point)で精密に合わせます。ICPは各点を相手のスキャンの最も近い点と組にし、組同士を最も近付ける剛体変換を求める事を繰り返します。
  2. 統合と掃除:重なりをまとめ、外れ値とノイズを除きます。
  3. 表面の再構成:例えばポアソン再構成や、符号付き距離のボリュームの0の等値面をマーチングキューブ法で取り出す方法(9.3節)です。
  4. 修復:穴を埋め、プリントするならメッシュを閉じた物にします(17.7節)。
  5. 簡略化とテクスチャ:メッシュを減らすか作り直し、細部を法線マップに焼き込み(第11章)、写真を色のテクスチャにします。

検定のポイント

  • 能動型は光を当てる(レーザーの三角測量、パターン投影、TOF、ライダー)。受動型はカメラだけを使う(ステレオ、フォトグラメトリ)。接触式(三次元測定機)と非接触式。
  • 三角測量:z=bsinαsinβ/sin(α+β)。基線長が長い程正確だが、オクルージョンが増える。
  • パターン投影:n枚のグレイコードで2n本の縞を区別する。隣同士は1ビットだけ違う。
  • TOF:d=cΔt/2(パルス)又はd=cφ/(4πf)(位相。c/2fを超えると曖昧)。
  • ステレオ:Z=fB/d。誤差はZ2で増える。対応探しに模様が必要。フォトグラメトリ:SfMの後にMVS。スケールには既知の長さが必要。

17.6 出力装置:ディスプレイと立体表示

ディスプレイの方式

  • 液晶ディスプレイ(LCD)は、バックライトの前に並んだ光の弁の格子です。液晶が光の偏光を回し、2枚目の偏光板を通る光の量を変え、カラーフィルタがサブピクセルを作ります。バックライトは常に点いているので、黒は完全な黒になりません。ローカルディミング(別々に暗く出来るLEDの区画)がコントラストを改善します。
  • 有機EL(OLED)は自発光です。各サブピクセルが小さな有機発光ダイオードで、黒のピクセルは単に消えています。コントラストがとても高く応答も速いですが、材料が劣化するので、静止画像が焼き付く事があります。
  • マイクロLEDも自発光で、小さな無機LEDを使います。明るく長寿命ですが、執筆時点では大型のモジュール式ビデオウォール以外は製造が難しい技術です。

主な数値は次の通りです:

  • 解像度:1920 × 1080(フルHD)、3840 × 2160(4K UHD)、7680 × 4320(8K)。目に効くのは画素密度で、27インチの4Kモニターは38402+21602/27=4405.8/27≈163 ppi(1インチあたりのピクセル数)です。
  • リフレッシュレート:殆どのテレビや事務用モニターは60 Hz、ゲーム用は120〜240 Hz以上、VRは90 Hz以上です。
  • 応答速度:ピクセルが変わる速さです。遅いピクセルは動きを滲ませます。又、瞬時に変わるピクセルでも、リフレッシュの間ずっと値を保持すると、動く物を追う目にはぼけて見えます(18.3節)。
  • 色域とHDR:広色域のディスプレイはDCI-P3やBT.2020の一部を覆います(第3章、3.4節)。HDRディスプレイはピーク輝度がずっと高く(数百〜数千cd/m²、「nit」とも言います)、黒も深く、3.7節のsRGBの曲線の代わりに、PQ(10,000 cd/m²まで定義)やHLGの様な知覚的な伝達曲線で符号化した10ビットの信号を受け取ります。

プロジェクタは小さな液晶、LCoS、又はDLPのチップに像を作ります。DLPのチップ(DMD、デジタルマイクロミラーデバイス)は何百万もの小さな鏡が毎秒何千回もオンとオフに傾き、「オン」の時間の割合が明るさになります。
建物や物体に、其の形に合わせて歪ませた像を投影するのがプロジェクションマッピングです。

ディスプレイへのケーブルは「解像度 × リフレッシュレート × ビット深度」を制限します。執筆時点では、HDMI 2.1が最大48 Gbit/s、HDMI 2.2(2025年)が最大96 Gbit/s、DisplayPort 2.1が最大80 Gbit/sを運び、其の一部は伝送路の符号化と帰線期間に使われます。
計算例。 チャンネルあたり10ビットの4K・120 Hzは、生の画素データだけで3840×2160×120×30=29.86 Gbit/sで、48 Gbit/sの接続に収まります。4K・240 Hzは59.72 Gbit/sで収まらないので、DSC(Display Stream Compression)か、より速い接続が必要です。

立体表示

両眼視差で奥行きを見せるには、各目に別々の画像を届けなければなりません。此れが立体ディスプレイ(立体視)です。
2枚の画像は、瞳孔間距離(IPD、成人の平均で約63 mm)だけ離れた2台の仮想カメラで描きます。
カメラは平行な方向を向き、其々が同じ画面の長方形を切り取る非対称(オフアクシス)の視錐台を持つべきです(線型代数の第12章の一般の透視投影行列で、左右の面が対称でない物)。2台を1点に向けて回す「トーイン」は、画像の隅に不要な縦の視差を生みます。

画面の上で1つの点は2回写り、其の横の距離がスクリーン視差pです。
両目の間隔がeで画面から距離Dにいる時、見る人から距離Zにある点は、相似な三角形から:

p=eZ−DZ

スクリーン視差:スクリーンの奥の点では左目用の像が右目用の像の左にあり正の視差、スクリーンの手前の点では視線が交差し負の視差

計算例。 e=63 mm、D=2 m。

  • Z=4 m(スクリーンの奥):p=63×(4−2)/4=31.5 mm、正の視差、つまり非交差視差。
  • Z=2 m:p=0で、点はスクリーン上に見えます。
  • Z=1 m(手前):p=63×(1−2)/1=−63 mm、負の視差、つまり交差視差。
  • Z→∞:p→e。eを超える視差は目を外側に開かせる事になるので、立体映像は視差を限度内に収めます。

(図は同じ2つの場合、Z=2DとZ=D/2を、目の間隔を誇張して描いています。)

2つの画像をどう分けるかでディスプレイの種類が決まります:

  • アナグリフ:一方の画像を赤、もう一方をシアンにし、赤/シアンの眼鏡で見ます。どの画面でも紙でも使えますが、色が犠牲になります。シェーダーなら1行です:

// Red-cyan anaglyph: red from the left eye's image, green and blue from the right eye's.
float3 anaglyph(float3 left, float3 right) {
  return float3(left.r, right.g, right.b);
}
// Red-cyan anaglyph: red from the left eye's image, green and blue from the right eye's.
vec3 anaglyph(vec3 left, vec3 right) {
  return vec3(left.r, right.g, right.b);
}
// Red-cyan anaglyph: red from the left eye's image, green and blue from the right eye's.
float3 anaglyph(float3 left, float3 right) {
  return float3(left.r, right.g, right.b);
}

  • 偏光方式(パッシブ):2つの画像を違う偏光で出し(フィルタ付きの2台のプロジェクタ、又はパターン状のフィルタの後ろの交互の行)、眼鏡の左右のレンズが其々一方だけを通します。映画館で一般的です。交互の行を使うと、各目の縦の解像度は半分になります。
  • 液晶シャッター方式(時分割):ディスプレイが左右の画像を交互に表示し、其れに同期した眼鏡の液晶シャッターが反対の目を塞ぎます。解像度は其の儘ですが、各目のフレームは半分で、120 Hzが各目60 Hzになります。
  • 裸眼立体視のディスプレイは眼鏡が要りません。視差バリア(パララックスバリア)は画素の少し手前に置いた細いスリットの層で、左目からは「L」の列だけ、右目からは「R」の列だけが見えます。レンチキュラーレンズはスリットの代わりに小さな円筒形のレンズを使い、光の無駄が少なくなります。

視差バリアとレンチキュラーレンズを上から見た図:表示面はLとRの画素の列が交互に並び、バリアのスリット又はレンズを通して、左目の視線はLの列だけに、右目の視線はRの列だけに届く

1つのスリットを通して、2つの目は列の間隔pcだけ離れた隣同士の列を見なければなりません。
相似な三角形からeg/(D−g)=pcなので、隙間はg=pcDe+pcです。図ではpc=1、e=4、D=15からg=3、スリットの間隔は2pc(D−g)/D=1.6で、2列分より少しだけ短くなります。
列が0.1 mmの実際のパネルでe=63 mm、D=500 mmなら、g=0.1×500/63.1≈0.79 mmです。
代償は、決まった位置からしか正しく見えない事と、各目が列の一部しか貰えない事です。多視点ディスプレイは2つより多い視点を使い、見る人が動くと像が変わる様にします。

  • ヘッドマウントディスプレイ(17.4節)は各目に専用の画像を見せ、ヘッドトラッキングが運動視差を加えます。他のステレオ画面と同じく輻輳調節矛盾(目は仮想の距離に輻輳するのに、ピントは固定された光学的な距離に合わせなければならない)を起こし、其の説明は18.2節にあります。
  • ホログラフィは干渉縞を通して光の波面其の物を記録し再生するので、ピント合わせを含む全ての奥行き手がかりを与えます。計算機ホログラムには光の波長に近い大きさのピクセルが膨大な数必要で、執筆時点では殆どが研究段階です。様々な方向に違う画像を送るライトフィールドディスプレイは、多視点ディスプレイとホログラムの中間にあります。

検定のポイント

  • 液晶:バックライトと光の弁。有機ELとマイクロLED:自発光。
  • リフレッシュレート、応答速度、解像度、画素密度、色域、HDR(ピーク輝度、10ビット、PQ/HLG)。
  • 立体の画像対:IPDだけ離れた2台のカメラ、平行な光軸、オフアクシスの視錐台。p=e(Z−D)/Z:スクリーンの奥で正、上で0、手前で負。
  • 眼鏡あり:アナグリフ(色)、偏光方式(パッシブ)、液晶シャッター方式(時分割)。眼鏡なし:視差バリア、レンチキュラー。HMD:輻輳調節矛盾。ホログラフィは波面を再生する。

17.7 プリンタと3Dプリンタ

2次元のプリンタとハーフトーン

インクジェットプリンタは、第3章(3.3節)の減法混色のCMYKインクの小さな滴を、熱又は圧電素子で押し出して飛ばします。
レーザープリンタはレーザーでドラム上にページを電荷として描き、帯電した部分がトナーを拾い、其れを熱で紙に定着させます。
昇華型プリンタはリボンの染料を熱して、量を連続的に変えながら紙に染み込ませます。本当の連続階調で、写真プリントに使われます。

インクジェットとレーザーのプリンタは、点を打つか紙を白のまま残すかしか出来ません。
灰色や混色はハーフトーン(網点)で作ります。小さな点の平均が紙の正しい割合を覆う様にする訳で、第2章(2.8節)のディザリングと同じ考え方です。

灰色のグラデーションを、45度のスクリーン上の網点が暗さと共に大きくなるAMスクリーンと、同じ大きさの点が密になるFMスクリーンで印刷した物

  • AMスクリーニング:規則的な格子(スクリーン)上の点が大きくなったり小さくなったりします。格子の間隔がスクリーン線数で、lpi(1インチあたりの線数)で表します。
  • FMスクリーニング:全ての点が同じ小さな大きさで、其の密度が変わります。誤差拡散法は其の置き方の1つです。

計算例。 600 dpiのプリンタが、各網点のセルを8 × 8のプリンタの点で作るとします。
スクリーン線数は600/8=75 lpiで、セルの点は0〜64個打てるので、64+1=65階調です。
セルを小さくすると細部は出ますが階調が減ります。此のトレードオフがAMハーフトーンの核心です。
カラー印刷では4色のスクリーンを違う角度に回します(伝統的にはC、M、Y、Kに約15°、75°、0°、45°)。近い角度のスクリーン同士は干渉して、目に見えるモアレになるからです。

3Dプリンタ:積層造形

3Dプリンタは、ディジタルなモデルから立体物を1層ずつ作ります。此れが積層造形(付加製造、additive manufacturing)です。
用語の規格(ISO/ASTM 52900)は工程を7つの分類に分けており、CGの仕事でよく出会うのは次の4つです:

4つの3Dプリントの方式:加熱ノズルがフィラメントのビードを並べる材料押出、液槽の透明な底を通した光で樹脂を硬化させる液槽光重合、リコーターが広げた粉末をレーザーで溶かす粉末床溶融結合、プリントヘッドが噴射した液滴をUVランプで硬化させサポート材も使う材料噴射

分類 よくある名前 仕組み 備考
材料押出 FDM、FFF(熱溶解積層法) 加熱したノズルがプラスチックのフィラメントを溶かし、ビード状に並べる 安く一般的。積層の筋が見える。張り出しにはサポートが必要
液槽光重合 SLA(光造形法)、DLP、LCD 光が液体樹脂を1層ずつ硬化させる。レーザーが各層をなぞる(SLA)か、プロジェクタや液晶が層全体を一度に露光する(DLP) 滑らかで細かい。サポート、洗浄、二次硬化が必要
粉末床溶融結合 SLS(粉末焼結法)、金属ではSLM、DMLS リコーターが粉末を広げ、レーザーが断面を溶かし固める。其の繰り返し 周りの粉末が張り出しを支えるので、樹脂の部品はサポート不要。金属部品も
材料噴射 インクジェット方式の3Dプリント プリントヘッドが光硬化樹脂の滴を噴射し、すぐにUV光で硬化させる 1つの部品に複数の材料やフルカラー。溶かせるサポート材

残りの3つの分類は、結合剤噴射(液体の結合剤で粉末を固める)、指向性エネルギー堆積(送りながら材料を溶かす。金属向け)、シート積層です。

メッシュから層へ

プリンタは本物の立体しか作れないので、モデルは第7章(7.4節)の閉じていて、向きが揃った、多様体のメッシュでなければなりません。穴や自己交差する部分があると「内側」が定まりません。
モデルはSTL(三角形だけで単位も無い。第9章、9.1節)か、より良いのは3MFで書き出します。3MFは単位、色、材料、複数の物体も保存するZIP圧縮されたXMLの形式です。

スライサーは、メッシュを1層ごとに水平な平面で切り、各断面を機械への命令(FDMならG-codeのツールパス)に変えます。外壁、材料を節約する内部のインフィルの模様、張り出しの下のサポートです。
az<h<bzとなる𝐚から𝐛への辺は、平面z=hと次の点で交わります:

𝐩=𝐚+t(𝐛−𝐚),t=h−azbz−az

計算例。 (0,0,0)から(10,0,20) mmへの辺とh=5 mm:t=5/20=0.25、𝐩=(2.5,0,5)。
平面を跨ぐ三角形は其々1本の線分を生み、閉じたメッシュなら線分が繋がって閉じたループ、つまり其の層の輪郭になります。穴があるとループが開いたままになり、スライサーは内と外を区別出来ません。

層の厚さが縦の解像度と時間を決めます。
高さ60 mmの部品を1層0.2 mmで作ると60/0.2=300層です。各層を(剥がす動作を含めて)7.5秒で露光するDLPプリンタなら300×7.5=2250秒 = 37.5分で、プラットフォームに部品が1個でも20個でも同じです。一方FDMやレーザーのSLAは全ての輪郭をなぞるので、時間は材料の量と共に増えます。
斜めの面には、1層分の高さの階段状の段差が現れます。

逆の考え方が除去加工で、ブロックから材料を削り取ります。切削加工(CNCフライス)は、モデルから計算したツールパスに沿って回転する刃物を動かします。3軸か、刃物も傾けられる5軸です。
正確で丈夫な部品が出来ますが、3軸のフライスはアンダーカットや閉じた内部の空洞を削れません。積層造形なら其れらも簡単に作れます。

検定のポイント

  • ハーフトーン:AM(固定のスクリーン上の点の大きさ、lpi)、FM(点の密度)。n×nのセルでn2+1階調、スクリーン線数はdpi / n。
  • FDM/FFF:ノズルから溶かしたフィラメント。SLA:レーザーが樹脂を硬化。DLP:プロジェクタが層全体を硬化。SLS:レーザーが粉末を溶かし、粉末が張り出しを支える。材料噴射:インクジェットの液滴をUVで硬化、複数材料。
  • プリント出来るメッシュは閉じた多様体。STLには単位が無く、3MFには単位と材料がある。スライサーがサポートとインフィルを加える。
  • 積層(層を重ねる)と除去加工(CNCの切削)。

17.8 記録メディア

メディアの種類

記録メディアはビットの保存の仕方が違い、其の為容量、速度、コスト、寿命も違います:

メディア ビットの保存の仕方 容量(執筆時点) 速度とアクセス 典型的な用途
HDD 回転する円盤上の磁化の領域 1台で最大数十TB 連続で精々数百MB/s。シークに数ミリ秒 大容量の保存、サーバー
SSD NANDフラッシュのセルの電荷。可動部品なし PCでは数TB SATAで約0.5 GB/s、NVMeで数GB/s。ランダムアクセスが速い システムとプロジェクトのドライブ
メモリカード NANDフラッシュ(SD系、CFexpress) 規格上、SDHCは32 GB、SDXCは2 TB、SDUCは128 TBまで カードのクラスによる カメラ、スマートフォン
光ディスク レーザーで読むピットや記録マーク CD 700 MB、DVD 4.7 GB(2層8.5 GB)、ブルーレイ25 GB(2層50 GB)、BDXL 100又は128 GB 遅い。交換可能。追記型もある 配布、小規模な保管
磁気テープ(LTO) カートリッジ内の磁気テープ LTO-9は18 TB、LTO-10は30又は40 TB(非圧縮) 連続読み書きは速いが、シーケンシャルアクセスのみ バックアップ、長期保存
クラウドストレージ ネットワーク越しのデータセンター 事実上無制限、GB単位の課金 ネットワークに制限される 共有、遠隔地のバックアップ

光ディスクが高密度になったのは、主に短い波長のレーザーを使う事で、より小さな点に集光出来る様になったからです。CDは約780 nm、DVDは650 nm、ブルーレイは405 nm(青紫)で、其れが名前の由来です。
テープはTBあたりで最も安いメディアで、棚の上で何十年も持ち、其処では電力も使わず、ネットワーク経由の攻撃も届きません。
テープの容量は2.5:1の圧縮を前提にした数字でも書かれます(LTO-10で75又は100 TB)。既に圧縮された画像や動画では、非圧縮の数字が正直な値です。

容量と帯域幅の計算

計算例:非圧縮の4K動画。 3840 × 2160ピクセル、8ビットRGB、24フレーム/秒:

  • 1フレーム:3840×2160×3=24883200バイト、約24.9 MB。
  • 1秒:24883200×24=597196800バイト、約597 MB/s。
  • 1分:597.2 MB×60≈35.8 GB。

従って25 GBのブルーレイには25/0.5972≈41.9秒分しか入らず、18 TBのLTO-9テープには18000/35.83≈502分入ります。
597 MB/sは、HDD 1台やLTO-10のドライブ1台(非圧縮で400 MB/s)が書ける速さを超えるので、リアルタイムの再生には速いSSDか、複数のディスクの並列(RAID)が必要です。
50 Mbit/sで圧縮すると1分は50/8×60=375 MBで、圧縮率は約35831/375≈96:1です。

コーデックとコンテナ

コーデックは動画や音声の圧縮方式です。
動画のコーデックは、各フレームの中では第2章(2.10節)のJPEGの考え方を使い(フレーム内符号化:YCbCr、クロマサブサンプリング、変換、量子化)、更にフレーム間符号化を加えます。フレームの殆どは動き補償によって隣のフレームから予測出来るので、差分だけを保存するのです。
単独で符号化したフレームがIフレーム、予測したフレームがPフレーム(前のフレームから)とBフレーム(前後のフレームから)です。
よく知られた世代は、H.264/AVC(2003年、最も互換性が高い)、H.265/HEVC(2013年、ほぼ半分のビットレートで同程度の画質、4KやHDRに使われる)、AV1(2018年、Alliance for Open Media、ロイヤリティフリー、配信で広く使われる)です。

コンテナは、圧縮された映像、音声、字幕をまとめて入れるファイル形式で、MP4、MOV、MKV等です。
コンテナとコーデックは独立しており、.mp4のファイルにはH.264もHEVCもAV1も入れられます。
制作の現場では、全てのフレームを最高の品質で編集出来る様に、作業用のファイルを連番画像(1フレームごとにOpenEXRやDPXのファイル)か、フレーム内符号化だけのコーデックで保存し、強く圧縮するフレーム間符号化のコーデックは納品用に使います。

長期保存

データを何十年も読める状態に保つのは難しい事です。メディアは劣化し(ビットが知らない間に反転します)、ドライブは消え(フロッピーディスクを思い出して下さい)、ソフトウェアが無くなればフォーマットは読めなくなるので、オープンで文書化されたフォーマット(OpenEXR、PNG、glTF、USD)の方が独自形式より長持ちします。
其の為長期保存(アーカイブ)では、損傷を見つけるチェックサムを保存し、定期的に新しいメディアやフォーマットへ移行し、複数のコピーを持ちます。よく使われる目安が3-2-1ルールで、3つのコピーを、2種類のメディアに、1つは別の場所に置きます。

検定のポイント

  • 磁気(HDD、テープ)、光(CD、DVD、ブルーレイ)、半導体(SSD、メモリカード)、ネットワーク(クラウド)。波長が短い程、光ディスクは高密度。
  • テープ:シーケンシャルでTBあたり安く、バックアップと保管向け。SSD:速いランダムアクセス。
  • 非圧縮動画の大きさ = 幅 × 高さ × 1ピクセルのバイト数 × fps × 秒数。
  • コーデック(圧縮)とコンテナ(ファイル形式)。フレーム内符号化とフレーム間符号化(動き補償)。

17.9 まとめ

  • CGシステムは入力、処理、出力、記録から成る。CPUはレイテンシ重視、GPUはスループット重視のSIMTの機械でメモリ帯域幅に制限される。レンダーファームはフレーム単位で並列化する。
  • ソフトウェア:DCCツール、スカルプト、CAD、レンダラー、コンポジット、画像編集、ゲームエンジン。其れらをOBJ、FBX、glTF、USD、Alembic、STL/3MFが繋ぐ。グラフィックスAPIとシェーディング言語は別物。
  • リアルタイムシステムはミリ秒を数える。垂直同期なしではテアリング、ダブルバッファの垂直同期ではスタッターが起き、トリプルバッファとVRRが助ける。カリング、LOD、ディファードとタイルベースのレンダリングが仕事と帯域幅を減らす。VRには6DoFのトラッキング、ステレオ、高いリフレッシュレート、小さな遅延が加わる。
  • 3次元入力:接触式か非接触式、能動型(三角測量、パターン投影、TOF d=cΔt/2、ライダー)か受動型(ステレオZ=fB/d、フォトグラメトリ)のスキャナー。点群は位置合わせ、再構成、修復を経てメッシュになる。
  • 出力:液晶、有機EL、マイクロLEDのディスプレイ、プロジェクタ、スクリーン視差p=e(Z−D)/Zを使う立体表示(眼鏡、裸眼、HMD)、ハーフトーンのプリンタ、閉じたメッシュをスライスして層を重ねる3Dプリンタ、CNCの切削。
  • メディア:HDD、SSD、メモリカード、光ディスク、LTOテープ、クラウド。動画はコーデックで圧縮しコンテナに入れる。長期保存にはチェックサム、移行、複数のコピーが要る。

17.10 用語

English 日本語
CG system CGシステム
CG software CG用ソフトウェア
real-time 3D CG system リアルタイム3次元CGシステム
3D data input device 3次元データ入力装置
3D data output device 3次元データ出力装置
recording media 記録メディア
latency, throughput レイテンシ(遅延)、スループット
SIMT, warp SIMT、ワープ
branch divergence 分岐ダイバージェンス
VRAM, memory bandwidth VRAM(ビデオメモリ)、メモリ帯域幅
render farm, cloud rendering レンダーファーム、クラウドレンダリング
asset management, version control アセット管理、バージョン管理
DCC tool, game engine DCCツール、ゲームエンジン
plug-in, scripting プラグイン、スクリプト
graphics API, shading language グラフィックスAPI、シェーディング言語
middleware ミドルウェア
unified shader architecture ユニファイドシェーダーアーキテクチャ
frame rate, frame time フレームレート、フレームタイム
tearing, v-sync テアリング、垂直同期
double buffering, triple buffering ダブルバッファ、トリプルバッファ
variable refresh rate (VRR) 可変リフレッシュレート(VRR)
occlusion culling オクルージョンカリング
forward rendering, deferred rendering フォワードレンダリング、ディファードレンダリング
G-buffer Gバッファ
tile-based rendering タイルベースレンダリング
head-mounted display (HMD) ヘッドマウントディスプレイ(HMD)
head tracking, 6DoF ヘッドトラッキング、6自由度(6DoF)
motion-to-photon latency モーション・トゥ・フォトン遅延
foveated rendering フォービエイテッドレンダリング
augmented reality (AR) 拡張現実(AR)
pen tablet, pen pressure ペンタブレット、筆圧
haptic device 力覚提示装置(ハプティックデバイス)
3D scanner 3Dスキャナー(3次元形状計測装置)
contact, non-contact 接触式、非接触式
coordinate measuring machine (CMM) 三次元測定機
active, passive 能動型(アクティブ)、受動型(パッシブ)
triangulation, baseline 三角測量、基線長
light-section method 光切断法
structured light パターン投影法
Gray code, space coding グレイコード、空間コード化法
phase shifting 位相シフト法
time of flight (ToF) TOF(Time of Flight)方式
LiDAR ライダー(LiDAR)
stereo, disparity ステレオ法、視差
correspondence problem, rectification 対応点探索、平行化
structure from motion (SfM), multi-view stereo (MVS) SfM、多視点ステレオ(MVS)
depth camera 深度カメラ(デプスカメラ)
registration (of scans) 位置合わせ
liquid crystal display (LCD), OLED 液晶ディスプレイ、有機EL
refresh rate, response time リフレッシュレート、応答速度
HDR display HDRディスプレイ
projector, projection mapping プロジェクタ、プロジェクションマッピング
stereoscopic display 立体ディスプレイ(立体視)
interpupillary distance (IPD) 瞳孔間距離
screen parallax (crossed, uncrossed) スクリーン視差(交差視差、非交差視差)
anaglyph アナグリフ
polarized glasses, active shutter glasses 偏光方式、液晶シャッター方式
autostereoscopic display 裸眼立体視ディスプレイ
parallax barrier, lenticular lens 視差バリア(パララックスバリア)、レンチキュラーレンズ
holography ホログラフィ
halftoning, AM / FM screening ハーフトーン(網点)、AM/FMスクリーニング
3D printer, additive manufacturing 3Dプリンタ、積層造形(付加製造)
material extrusion (FDM/FFF) 材料押出(熱溶解積層法)
vat photopolymerization (SLA/DLP) 液槽光重合(光造形法)
powder bed fusion (SLS) 粉末床溶融結合(粉末焼結法)
material jetting 材料噴射(マテリアルジェッティング)
slicer, support, infill スライサー、サポート、インフィル
CNC milling 切削加工(CNC)
HDD, SSD, memory card ハードディスク(HDD)、SSD、メモリカード
optical disc (CD, DVD, Blu-ray) 光ディスク(CD、DVD、ブルーレイ)
magnetic tape (LTO) 磁気テープ(LTO)
cloud storage クラウドストレージ
codec, container コーデック、コンテナ
intra-frame, inter-frame coding フレーム内符号化、フレーム間符号化
motion compensation 動き補償
long-term archiving 長期保存(アーカイブ)

17.11 課題

  1. ★ 直接方式のTOFセンサーが40 ns後に反射を受け取りました。物体までの距離と、1 nsの時間誤差が何mに当たるかを求めて下さい。f=15 MHzの間接方式のTOFセンサーがφ=2π/3を測りました。距離と、一意に測れる範囲を求めて下さい。
  2. ★ ステレオカメラがf=800ピクセル、B=0.1 mです。視差40、20、10ピクセルの深度と、其々での視差1ピクセルの誤差に対する深度の誤差を求めて下さい。距離が2倍になると誤差はどうなりますか?
  3. ★ 1920 × 1080、8ビットRGB、60フレーム/秒の非圧縮動画10分は何GBですか?50 GBのブルーレイ何枚分で、18 TBのLTO-9テープの何割ですか?20 Mbit/sならどの位の大きさですか?
  4. ★★ 60 Hzのディスプレイと、0 msから始めて10、18、15、25 ms掛かるフレームを描くGPUがあります。垂直同期なしでは、各入れ替えは画面の高さのどの割合でテアリングしますか?ダブルバッファの垂直同期では、各フレームはいつ表示され、どのリフレッシュが古いフレームを繰り返しますか?
  5. ★★★ 1920 × 1080、60 fpsのディファードレンダラーが、毎フレーム1回書き1回読む1ピクセル20バイトのGバッファを使います。帯域幅を計算し、タイルベースのモバイルGPUが何故其の殆どを避けられるのか、そして何故半透明の物体を単純にGバッファに入れられないのかを説明して下さい。

選択問題

問1 ★ 次のうち、3次元データの入力について正しい物はどれか。

あ TOF方式のセンサーは、レーザー光とカメラの視線の成す角から距離を求める。
い フォトグラメトリは能動型の方式で、物体に縞パターンを投影して撮影する。
う 三次元測定機(CMM)は、レーザーを使い物体に触れずに測定する。
え ステレオ法では深度が視差に反比例するので、視差1ピクセルの誤差に対する深度の誤差は、距離のほぼ2乗で大きくなる。
お ステレオ法では、遠い点程2枚の画像の間の視差が大きい。

問2 ★ 次のうち、テアリングと垂直同期について正しい物はどれか。

あ テアリングは、垂直同期を有効にしたダブルバッファで、GPUの描画が遅すぎる時に起きる。
い 垂直同期は、ディスプレイが画面の真ん中を走査している間にフロントバッファとバックバッファを入れ替える。
う 60 Hzのディスプレイでダブルバッファの垂直同期を使うと、描画に20 ms掛かるフレームは描き始めてから20 ms後に表示される。
え トリプルバッファを使うと、バックバッファが不要になる。
お 可変リフレッシュレートでは、GPUがフレームを描き終えた時に(対応する範囲内で)ディスプレイがリフレッシュを始めるので、テアリングとスタッターの両方が減る。

問3 ★★ 次のうち、3Dプリントについて正しい物はどれか。

あ FDM(熱溶解積層法)は、液体樹脂を紫外線で硬化させて物体を作る。
い 粉末床溶融結合(SLS)では、レーザーが粉末の層を溶かし固め、溶けていない粉末が張り出しを支えるので、樹脂の部品には普通別のサポートが要らない。
う DLPのプリンタはレーザー光で各層を1点ずつなぞるので、造形時間はプラットフォーム上の部品の数と共に増える。
え 材料噴射方式は、加熱したノズルから溶けたプラスチックのフィラメントを押し出す。
お STLファイルは単位、色、材料を保存するので、穴のあるメッシュでも正しくプリント出来る。

17.12 実践課題

此の章の3つの「機械」、レーザースキャナー、ステレオカメラ、3Dプリンタのスライサーを紙の上で作り、其々を正確な答えと照らし合わせます。
方眼紙(1 cmのマス)、定規、分度器、鉛筆、2色のペン、電卓を用意して下さい。

パートA:レーザーによる三角測量。

  1. 長さ10 cmの基線を描きます。レーザーLは(0,0)、カメラCは(10,0)です(単位はcm)。
  2. 表面の3点P1=(4,6)、P2=(6,8)、P3=(5,5)に印を付け、其々にLからのレーザー光とCからのカメラの視線を描きます。
  3. 各点について、LでのαとCでのβを分度器で1度単位で測ります。
  4. 測った角度からz=bsinαsinβ/sin(α+β)とx=z/tanαを計算し、本当の座標と比べます。
  5. P1について、βが1°ずれた場合(大きい方と小さい方)でステップ4を繰り返します。zはどれだけ変わりますか?

パートB:ステレオカメラ。

  1. (0,0)と(6,0)に2つのピンホールを描き(基線長B=6 cm)、其の上に画像の線y=2を描きます(焦点距離f=2 cm。ステレオの図と同じく像はピンホールの前)。其の線上のx=0とx=6に各カメラの画像中心の印を付けます。
  2. X=3で深度Z=4、8、12 cmの3点に印を付け、各点から両方のピンホールへの線を描き、画像の線と交わる所に印を付けます。
  3. 定規でxLとxRを測り(各画像中心から、右が正)、d=xL−xRとZ=fB/dを計算します。

パートC:ピラミッドのスライス。
正四角錐の底面は(0,0,0)から(6,6,0) cmまでで、頂点は(3,3,6) cmにあります。

  1. z=0.5,1.5,2.5,3.5,4.5,5.5(1 cmの層の中心)でスライスします。(0,0,0)から頂点への辺と平面の交点を17.7節の式で求め、対称性を使って正方形の断面を求め、6つの正方形を入れ子にして1枚に描きます。
  2. 体積。 各層を、中心の高さの断面を持つ厚さ1 cmの板と考えて体積を足し合わせ、正確な体積13×底面積×高さと比べます。次に層の底の高さ(z=0,1,…,5)の断面で同じ事をします。

自分で確認する方法:

  • パートA:本当の角度は、P1がα≈56.3°、β=45.0°、P2が53.1°、63.4°、P3が45°、45°です。計算したzは6、8、5 cmから数ミリ以内、xは4、6、5 cmから数ミリ以内に来なければなりません。
  • パートB:どの点でもd×Zは(作図の精度の範囲で)fB=12 cm²になります。視差は3、1.5、1 cmで、距離が3倍になると視差は3分の1になります。
  • パートC:高さzでの辺上の点は(z/2,z/2,z)なので、断面は1辺6−zの正方形です。中心の高さの板の合計は71.5 cm³で、正確な72 cm³との差は1 %以内ですが、底の高さの板では91 cm³と大き過ぎます。層を薄くすると、どちらも72に近付きます。


コメント(0)

まだコメントはありません。