3D オブジェクトの忠実な再現に欠かせない照明技術

Arction 社の LightningChart 製品において、光と影の組み合わせは 2D スクリーン上で写真のように現実的な 3D オブジェクトを表示するために必要不可欠です。影は光の量によって左右されるため、まずは光源について説明します。

光源

通常、シーンは複数の独立した光源を含みます。ピクセルの輝度はそれぞれの光源ごとに別々に計算され、カメラに向かって反射される光の量を取得するために総計されます。今回は、5 つの光源について説明します。

  1. 環境光
    環境光は、空間全体をまんべんなく満たします。サーフェスの位置と方向が最終結果に影響を与えることはありません。シーンに環境光しかない場合、影は存在せず、すべてが平坦に見えます。環境光の一部は、本影のサーフェスに細部の描写を追加するため、フィル ライトとして使用できます。
  2. 平行光源
    平行光源は、影を生成可能な最もシンプルな光の種類です。一方向の光源と照らされたサーフェスの位置が考慮されます。実際にはこのようなケースはありませんが、多くの場合、特定の照明効果のシミュレーションに使用されます。非常に強力で遠隔に配置された光源のシミュレーションに適しています。
  3. 点光源
    点光源は、中心から全方向に光を放射します。輝度は、サーフェスの位置と光源の関係によって定義されます。現実世界における点光源に最も近い例は太陽です。
  4. スポット ライト
    スポット ライトは、制限付きの点光源です。スポット ライトは、特定の角度でのみ光ります。現実世界におけるスポット ライトに最も近い例はランプです。これは、写真のように現実的なイメージの生成に最も頻繁に使用されます。
  5. 面光源
    面光源は、点光源の高度なバージョンです。この場合、点ではなく、任意の形状から光を放射します。現実世界における面光源のテクノロジに最も近い例はネオン ライトです。

光とサーフェスの相互作用

光源は、最終イメージを生成するためにオブジェクトと相互作用しなくてはいけません。相互作用には、いくつかの手法があります。

放射照明 (Emission Lighting) は、最もシンプルな照明の種類です。すべての光源を無視し、オブジェクトの最低輝度を定義します。単一のオブジェクトに焦点を当てる環境光にある程度似ています。高度なレンダリング エンジンにより、放射照明を持つオブジェクトを面光源として扱うことができます。

拡散照明 (Diffuse Lighting) は、理想的な「マット」なサーフェスから反射される光の一部です。これは、正確な形状知覚のために最も重要な照明の種類です。法線ベクトルと光線ベクトルとのドット積として計算されます。法線ベクトルは、特定の点でサーフェスに垂直なベクトルです。

鏡面照明 (Specular Lighting) は、光源の鏡のような反射を表します。これにより、ビューアーに対してサーフェスの滑らかさを伝えることができます。鏡面照明は、光沢のあるオブジェクトのレンダリングにとって不可欠です。サーフェスの法線ベクトルと光線ベクトルに加え、鏡面照明の計算にはカメラの位置に関する情報が必要です。ヒットポイントの光線ベクトルがカメラに向かって直接反射されると、鏡面ハイライトが発生します。

特定のオブジェクトのシェーディングに対する照明の種類の影響のレベルは、係数によって定義されます。テクスチャとともに、サーフェスの外観と反射特性を表すために使用される材料を形成します。

GPU による計算

照明の計算は、レンダリングにおいて負荷のかかる処理ため、効率的な手法を理解することが重要になります。また、照明の計算に関するプロセスの最適化とトレードオフのための積極的なアプローチを考慮することが重要です。

GPU アクセラレーターを使用した計算には、フラグメント/ピクセル シェーダーまたは頂点シェーダーがあります。シェーダーに関する詳細は、「データ視覚化向けにグラフの描画速度を向上するシェーダー」をご覧ください。

ラスタライズの過程で発生した誤りにより、頂点シェーダーで計算された輝度が不正確になる可能性があります。ハイライトの形状の正確な移行を行うことができないため、鏡面照明の計算には特に悪影響を及ぼします。さらに、頂点ごとの照明では、ポリゴンの中心に位置する小さなハイライトは完全に失われてしまいます。そのため、現代の 3D エンジンにはフラグメントごとの照明が最も一般的なソリューションとなっています。これにより、より正確でなめらかな結果を得ることができます。それでも、フラグメント/ピクセル シェーダーに位置された計算はより頻繁に実行されるため、アプローチは比較的遅くなります。そこでのパフォーマンスが写真のように現実的であることよりもはるかに重要なため、徹底的なエンジニアリングや科学的な視覚化には、頂点ごとの照明が優先されます。

まとめ

照明の計算は、GPU で並列実行することで効率的に加速される計算集約的プロセスです。特に、膨大な数の光源を備えたシーンでプロセスを加速するためのより高度な技術は、近日紹介予定です。

Arction 製品の詳細は、弊社製品ページをご覧ください。
製品に関する便利な情報は、リソース ページにて紹介しています。

記事参照:
2017 年 8 月 14 日 Arction チーム
© Arction Ltd 2017
Lighting

タイトルとURLをコピーしました