IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ダッソー システムズの特許一覧

特開2024-83298シングルパスでの3Dメッシュの断面図のレンダリング
<>
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図1
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図2
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図3
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図4
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図5A
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図5B
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図5C
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図6
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図7
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図8
  • 特開-シングルパスでの3Dメッシュの断面図のレンダリング 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024083298
(43)【公開日】2024-06-20
(54)【発明の名称】シングルパスでの3Dメッシュの断面図のレンダリング
(51)【国際特許分類】
   G06T 15/00 20110101AFI20240613BHJP
【FI】
G06T15/00 501
【審査請求】未請求
【請求項の数】15
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023207437
(22)【出願日】2023-12-08
(31)【優先権主張番号】22306827.1
(32)【優先日】2022-12-08
(33)【優先権主張国・地域又は機関】EP
(71)【出願人】
【識別番号】500102435
【氏名又は名称】ダッソー システムズ
【氏名又は名称原語表記】DASSAULT SYSTEMES
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】ニコラ ジャン
(72)【発明者】
【氏名】シリル ドラランドル
(72)【発明者】
【氏名】サミール ガルデ
【テーマコード(参考)】
5B080
【Fターム(参考)】
5B080AA13
5B080AA19
5B080BA00
5B080DA06
5B080FA02
5B080GA00
(57)【要約】
【課題】GPUによるシングルパスで3Dメッシュの断面図をレンダリングするためのコンピュータ実装方法を提供する。
【解決手段】方法は、凸ポリゴンを有する3Dメッシュを取得すること、クリッププレーンを取得すること、及び3Dメッシュの凸ポリゴンをレンダリングすることであって、各凸ポリゴンについて、凸ポリゴンがクリッププレーンと交差するかを決定することと、凸ポリゴンがクリッププレーンと交差する場合クリッププレーンと交差する凸ポリゴンのエッジ上の一対の点を計算することと、GPU書き込み可能バッファに一対の点を格納することとを含むこと、により3Dメッシュの断面図をレンダリングすることを含む。方法はまた、GPU書き込み可能バッファに格納された一対の点を線のセットとしてレンダリングすることであって断面図をレンダリングすることはそれによりレンダリングされた凸ポリゴンおよび線のセットを含むこと、を含む。
【選択図】図2
【特許請求の範囲】
【請求項1】
グラフィカル処理装置(GPU)による、シングルパスで3Dメッシュの断面図をレンダリングするためのコンピュータ実装方法であって、前記方法は、
-3Dメッシュを取得することであって、前記3Dメッシュは、凸ポリゴンを有する、3Dメッシュを取得することと、
-クリッププレーンを取得することと、
-前記3Dメッシュの前記断面図を、
--前記3Dメッシュの前記凸ポリゴンをレンダリングすることであって、前記3Dメッシュの前記凸ポリゴンをレンダリングすることは、各凸ポリゴンについて、
---前記凸ポリゴンが前記クリッププレーンと交差するかを決定することと、
---前記凸ポリゴンが前記クリッププレーンと交差する場合、前記クリッププレーンと交差する前記凸ポリゴンのエッジ上の一対の点を計算することと、
---GPU-書き込み可能バッファに前記一対の点を格納することと、
を備える、前記3Dメッシュの前記凸ポリゴンをレンダリングすることと、
--前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることであって、前記断面図をレンダリングすることはそれによりレンダリングされた前記凸ポリゴンおよびレンダリングされた前記線のセットを備える、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることと、
によってレンダリングすることと、
を備えるコンピュータ実装方法。
【請求項2】
-前記3Dメッシュの前記断面図をレンダリングする前に、前記クリッププレーンに関連付けられた視野方向を取得することと、
-前記クリッププレーンに関連付けられた前記視野方向に沿って位置される凸ポリゴンをレンダリングすること、および、前記視野方向に沿って位置しない凸ポリゴンをレンダリングすることを排除することをさらに備える前記断面図をレンダリングすることと、
をさらに備える請求項1に記載の方法。
【請求項3】
前記凸ポリゴンが前記クリッププレーンと交差するかを決定することは、
-前記凸ポリゴンの頂点の1つのみが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の1つのみが前記凸ポリゴンが交差する前記クリッププレーン上にある場合、残りの頂点が前記視野方向に沿って位置されない場合に前記凸ポリゴンをレンダリングすることを排除するか、を決定すること、および/または、
-前記凸ポリゴンの頂点の2つのみが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の2つのみが前記クリッププレーン上にある場合、残りの頂点が前記視野方向に沿って位置されない場合に前記凸ポリゴンをレンダリングすることを排除するか、を決定すること、および/または、
-前記凸ポリゴンの頂点の全てが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の全てが前記クリッププレーン上にある場合に前記凸ポリゴンをレンダリングするか、を決定すること、
をさらに備える請求項2に記載の方法。
【請求項4】
前記GPU-書き込み可能バッファは、事前割り当てされ、好ましくは、前記GPU-書き込み可能バッファは、動的に事前割り当てされる、
請求項1乃至3のいずれか1項に記載の方法。
【請求項5】
前記GPU-書き込み可能バッファに前記一対の点を格納することは、
-前記GPU-書き込み可能バッファに前記一対の点の1つを開始点として、前記一対の点の他の点を終点として格納することと、
-前記GPU-書き込み可能バッファに格納された値を2ずつインクリメントすることと、
を備える、請求項1乃至4のいずれか1項に記載の方法。
【請求項6】
前記GPU-書き込み可能バッファに前記一対の点を格納することは、
-第1のGPU-書き込み可能バッファに前記一対の点の1つを開始点として、前記一対の点の他の点を終点として格納することと、
-第2のGPU-書き込み可能バッファに格納された値を2ずつインクリメントすることと、
を備える、請求項1乃至4のいずれか1項に記載の方法。
【請求項7】
前記GPU-書き込み可能バッファは、OpenGLに支持されたシェーダーストレージバッファオブジェクトであり、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることは、OpenGL間接的描画コマンドによって実行される、
請求項1乃至6のいずれか1項に記載の方法。
【請求項8】
前記3Dメッシュの前記凸ポリゴンは、三角形を備える、
請求項1乃至7のいずれか1項に記載の方法。
【請求項9】
前記3Dメッシュを取得することは、頂点シェーダーによって実行され、前記クリッププレーンを取得することは、前記頂点シェーダーによって実行される、
請求項1乃至8のいずれか1項に記載の方法。
【請求項10】
前記凸ポリゴンが前記クリッププレーンと交差するかを決定することは、ジオメトリシェーダーによって実行され、前記クリッププレーンと交差する前記凸ポリゴンのエッジ上の前記一対の点を計算および格納することは、前記ジオメトリシェーダーによって実行される、
請求項1乃至9のいずれか1項に記載の方法。
【請求項11】
前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることは、ラスタライザーおよびフラグメントシェーダーによって実行される、
請求項1乃至10のいずれか1項に記載の方法。
【請求項12】
シェーダーパイプラインによる、請求項1乃至8のいずれか1項に記載のレンダリングするための方法の使用方法であって、
-シェーダーパイプラインを取得することであって、
--頂点シェーダーが、前記3Dメッシュおよび前記クリッププレーンを取得すること、
--ジオメトリシェーダーが、
---前記凸ポリゴンが前記クリッププレーンと交差するかを決定することと、
---前記凸ポリゴンが前記クリッププレーンと交差する場合、前記クリッププレーンと交差する前記凸ポリゴンのエッジ上の前記一対の点を計算することと、
---GPU-書き込み可能バッファに前記一対の点を格納することと、
を実行すること、および、
--ラスタライザーおよびフラグメントシェーダーが、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることであって、前記断面図をレンダリングすることはそれによりレンダリングされた前記凸ポリゴンおよびレンダリングされた前記線のセットを備える、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることを実行すること、
を備えるシェーダーパイプラインを取得することと、
-レンダリングされた前記凸ポリゴンおよびレンダリングされた前記線のセットを備える前記断面図をレンダリングすることと、
を備える、使用方法。
【請求項13】
レンダリングされた前記3Dメッシュの前記断面図を表示することを備える、
請求項12に記載の使用方法。
【請求項14】
請求項1乃至11のいずれかに記載の方法および/または請求項12または13に記載の使用方法を実行するための命令を備える、コンピュータプログラム。
【請求項15】
メモリおよびグラフィカルユーザインターフェースに結合されたプロセッサを備えるシステムであって、前記メモリは、請求項14に記載のコンピュータプログラムを記録している、システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンピュータプログラムおよびシステムの分野に関し、より詳細にはグラフィカル処理装置(GPU)による、シングルパスで3Dメッシュの断面図をレンダリングするための方法、使用方法、プログラムおよびシステムに関する。
【背景技術】
【0002】
多くのシステムおよびプログラムが、ソリッド本体をレンダリングするために市場に提供されている。ソリッド本体の断面図は、3次元空間におけるソリッド本体とプレーンとの非空交差である。図1は、断面図を示す。ソリッド本体100および所与のプレーン200について、断面図210は、ソリッド本体100の全てのサーフェスと所与のプレーン200との交差の結果である、線のセットである。
【0003】
しかしながら、断面図をレンダリングすることはコンピュータグラフィックの分野において困難な処理である。この分野で知られているように、断面プロファイルは、所与のクリッププレーンを与えられたソリッド本体を表す3Dメッシュを交差させることにより計算される。しかしながら、この方法は、計算的に高価であり、既知の方法は、まず交差を計算しなければならず、その次に3Dメッシュをレンダリングする。これは、計算的に高価な処理であり、レンダリング時間が遅く(大量の3Dメッシュについてリアルタイム実装は不可能)、メモリ消費量も多い。
【0004】
この文脈において、3Dメッシュの断面図をレンダリングするための改良された方法が依然として必要とされている。
【発明の概要】
【0005】
それゆえ、グラフィカル処理装置(GPU)による、シングルパスで3Dメッシュの断面図をレンダリングするためのコンピュータ実装方法が提供される。方法は、3Dメッシュを取得することを備え、3Dメッシュは、凸ポリゴンを有する。方法はまた、クリッププレーンを取得することを備える。方法はまた、3Dメッシュの凸ポリゴンをレンダリングすることによって3Dメッシュの断面図をレンダリングすることを備える。3Dメッシュの凸ポリゴンをレンダリングすることは、各凸ポリゴンについて、凸ポリゴンがクリッププレーンと交差するかを決定することを備える。凸ポリゴンがクリッププレーンと交差する場合、3Dメッシュの凸ポリゴンをレンダリングすることは、クリッププレーンと交差する凸ポリゴンのエッジ上の一対の点を計算することを備える。3Dメッシュの凸ポリゴンをレンダリングすることはまた、GPU-書き込み可能バッファに一対の点を格納することを備える。方法はまた、GPU-書き込み可能バッファに格納された一対の点を線のセットとしてレンダリングすることを備える。断面図をレンダリングすることはそれによりレンダリングされた凸ポリゴンとレンダリングされた線のセットを備える。
【0006】
方法は、以下のうちの1つまたは複数を備える。
【0007】
・さらに以下を備える。
-前記3Dメッシュの前記断面図をレンダリングする前に、前記クリッププレーンに関連付けられた視野方向を取得することと、
-前記クリッププレーンに関連付けられた前記視野方向に沿って位置される凸ポリゴンをレンダリングすること、および、前記視野方向に沿って位置しない凸ポリゴンをレンダリングすることを排除することをさらに備える前記断面図をレンダリングすること。
・前記凸ポリゴンが前記クリッププレーンと交差するかを決定することは、さらに以下を備える。
-前記凸ポリゴンの頂点の1つのみが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の1つのみが前記凸ポリゴンが交差する前記クリッププレーン上にある場合、残りの頂点が前記視野方向に沿って位置されない場合に前記凸ポリゴンをレンダリングすることを排除するか、を決定すること、および/または、
-前記凸ポリゴンの頂点の2つのみが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の2つのみが前記クリッププレーン上にある場合、残りの頂点が前記視野方向に沿って位置されない場合に前記凸ポリゴンをレンダリングすることを排除するか、を決定すること、および/または、
-前記凸ポリゴンの頂点の全てが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の全てが前記クリッププレーン上にある場合に前記凸ポリゴンをレンダリングするか、を決定すること。
・前記GPU-書き込み可能バッファは、事前割り当てされ、好ましくは、前記GPU-書き込み可能バッファは、動的に事前割り当てされる。
・前記GPU-書き込み可能バッファに前記一対の点を格納することは、以下を備える。
-前記GPU-書き込み可能バッファに前記一対の点の1つを開始点として、前記一対の点の他の点を終点として格納することと、
-前記GPU-書き込み可能バッファに格納された値を2ずつインクリメントすること。
・前記GPU-書き込み可能バッファに前記一対の点を格納することは、以下を備える。
-第1のGPU-書き込み可能バッファに前記一対の点の1つを開始点として、前記一対の点の他の点を終点として格納することと、
-第2のGPU-書き込み可能バッファに格納された値を2ずつインクリメントすること。
・前記GPU-書き込み可能バッファは、OpenGLに支持されたシェーダーストレージバッファオブジェクトであり、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることは、OpenGL間接的描画コマンドによって実行される。
・前記3Dメッシュの前記凸ポリゴンは、三角形を備える。
・前記3Dメッシュを取得することは、頂点シェーダーによって実行され、前記クリッププレーンを取得することは、前記頂点シェーダーによって実行される。
・前記凸ポリゴンが前記クリッププレーンと交差するかを決定することは、ジオメトリシェーダーによって実行され、前記クリッププレーンと交差する前記凸ポリゴンのエッジ上の前記一対の点を計算および格納することは、前記ジオメトリシェーダーによって実行される。
・前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることは、ラスタライザーおよびフラグメントシェーダーによって実行される。
【0008】
シェーダーパイプラインによる、グラフィカル処理装置(GPU)による、シングルパスで3Dメッシュの断面図をレンダリングするための方法の使用方法が提供される。使用方法は、シェーダーパイプラインを取得することを備える。シェーダーパイプラインは、頂点シェーダーが、前記3Dメッシュおよび前記クリッププレーンを取得すること、ジオメトリシェーダーが、前記凸ポリゴンが前記クリッププレーンと交差するかを決定することと、前記凸ポリゴンが前記クリッププレーンと交差する場合、前記クリッププレーンと交差する前記凸ポリゴンのエッジ上の前記一対の点を計算することと、GPU-書き込み可能バッファに前記一対の点を格納することと、を実行することを備える。シェーダーパイプラインはまた、ラスタライザーおよびフラグメントシェーダーが、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすること(上述のレンダンリング方法に従って)であって、前記断面図をレンダリングすることはそれによりレンダリングされた前記凸ポリゴンおよびレンダリングされた前記線のセットを備える、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることを実行することを備える。使用方法はまた、レンダリングされた前記凸ポリゴンおよびレンダリングされた前記線のセットを備える前記断面図をレンダリングする。
【0009】
使用方法はまた、レンダリングされた前記3Dメッシュの前記断面図を表示することを備え得る。
【0010】
方法および/または使用方法を実行するための命令を備えるコンピュータプログラムがさらに提供される。
【0011】
メモリおよびグラフィカルユーザインターフェースに結合されたプロセッサを備えるシステムであって、前記メモリは、コンピュータプログラムを記録している、システムがさらに提供される。
【図面の簡単な説明】
【0012】
図1】先行技術を示す図である。
図2】方法の一例のフローチャートを示す図である。
図3】システムの一例を示す図である。
図4】方法を示す図である。
図5A】方法を示す図である。
図5B】方法を示す図である。
図5C】方法を示す図である。
図6】方法を示す図である。
図7】方法を示す図である。
図8】方法を示す図である。
図9】方法を示す図である。
【発明を実施するための形態】
【0013】
図2のフローチャートを参照すると、グラフィカル処理装置(GPU)による、シングルパスで3Dメッシュの断面図をレンダリングするためのコンピュータ実装方法が提案される。「レンダリングすること」とは、コンピュータ上で後部表示用に3Dメッシュを処理する一連の計算を意味する。方法は、3Dメッシュを取得すること(S10)を含む。3Dメッシュは、凸ポリゴンを有する。方法はまた、クリッププレーンを取得すること(S20)を含む。
【0014】
方法は、3Dメッシュの凸ポリゴンをレンダリングすることによって(S310)、3Dメッシュの断面図をレンダリングする(S30)。S310において、3Dメッシュの凸ポリゴンをレンダリングすることは、各ポリゴンについて、凸ポリゴンが、クリッププレーンと交差するかを決定する(S3110)。当該凸ポリゴンについて、凸ポリゴンがクリッププレーンを交差する場合、方法は、クリッププレーンと交差する凸ポリゴンのエッジ上の一対の点を計算する(S3120)。当該凸ポリゴンについて、方法は、GPU-書き込み可能バッファに一対の点を格納する(S3130)。
【0015】
3Dメッシュの断面図をレンダリングすることはまた、方法によって、GPU-書き込み可能バッファに格納されている一対の点を、線のセットとしてレンダリングすることを含む(S320)。断面図をレンダリングすることは、それにより、レンダリングされた凸ポリゴンおよびレンダリングされた線のセットを含む。
【0016】
これは、3Dメッシュの断面図をレンダリングすることを改良する。実際、方法は、凸ポリゴンおよび交差の結果(すなわち、計算された一対の点)の両方を、リアルタイムでレンダリングすることができる。レンダリングすることが、GPUにより実行されるので、凸ポリゴンをレンダリングすること、および、一対の点を格納することは、実質的にリアルタイムで実行される計算である(すなわち、シングルパスで)。これは、一連の操作を実行することが制約される、CPUアプローチと比べて、パフォーマンスにおいて大きな利益を獲得する。特に、獲得されたパフォーマンス利益は、方法が、凸ポリゴンがクリッププレーンと交差するかを決定する場合、GPU-書き込み可能バッファ(これは早いアクセスタイムを有する)に一対の点が格納されるという事実により、獲得される。
【0017】
レンダリング方法の使用方法がここで説明される。使用方法は、シェーダーパイプラインを取得することを含み得る。シェーダーパイプラインは、断面図をレンダンリングすることを実行する際に、GPUにより実行される一連のステップであり得る。使用方法は、レンダンリング方法のステップのいずれかを実行する場合にシェーダーパイプラインを開始し得る。シェーダーパイプラインは、任意の方法で、例えば、GPUコマンドを実行することにより、あるいはOpenGLなどのAPIを読み出すことにより、取得され得る。この場合、シェーダーパイプラインは、レンダリング操作を実行する際に開始され得る。
【0018】
シェーダーパイプラインは、3Dメッシュおよびクリッププレーンを取得するための頂点シェーダーを含み得る。
【0019】
シェーダーパイプラインはまた、凸ポリゴンがクリッププレーンと交差するかを決定することを実行するためのジオメトリシェーダーを含み得る。凸ポリゴンがクリッププレーンと交差する場合、シェーダーパイプラインは、クリッププレーンと交差する凸ポリゴンのエッジ上の一対の点を計算することを実行し得る。シェーダーパイプラインは、GPU-書き込み可能バッファに一対の点を格納することを実行し得る。
【0020】
シェーダーパイプラインはまた、GPU-書き込み可能バッファに線のセットとして格納されている一対の点をレンダンリングすることを実行するためのラスタライザーおよびフラグメントシェーダーを含み得る。断面図をレンダリングすることは、それにより、レンダリングされた凸ポリゴンおよびレンダリングされた線のセットを含む。
【0021】
使用方法は、レンダリングされた凸ポリゴンおよびレンダリングされた線のセットを含む断面図をレンダリングし得る。
【0022】
使用方法は、レンダリングされた3Dメッシュの断面図を表示することを含み得る。言い換えると、方法は、ユーザへ、例えば、グラフィカルユーザインターフェースを介して、断面図(すなわち、レンダリング方法の結果)を出力し得る。
【0023】
使用方法がレンダリングパイプラインでレンダリング方法を実行するため、使用方法は、GPUで、ジオメトリシェーダーならびにラスタライザーおよびフラグメントシェーダーの両方を同時に使用し得る。それゆえ、使用方法は、シェーダーパイプラインを使用して凸ポリゴンがレンダリングされるのと同時に、交差を計算することに焦点を当てる。これは、例えば、ユーザが断面図の表示を更新することを必要とする場合など、表示のリアルタイム実行を維持することを助け、それゆえ、ユーザエクスペリエンスが向上する。
【0024】
方法は、コンピュータ実装方法である。これは、レンダリング方法または使用方法のステップ(実質的に全てのステップ)が、少なくとも1つのコンピュータ、あるいは任意のシステムなどで実行されることを意味する。それゆえ、レンダリング方法または使用方法のステップは、コンピュータにより、場合により完全に自動的に、あるいは半自動的に、実行される。例では、レンダリング方法または使用方法のステップの少なくともいくつかをトリガーすることは、ユーザとコンピュータの相互作用を通じて実行され得る。要求されるユーザとコンピュータの相互作用のレベルは、予測される自動化のレベルに依り、ユーザの希望を実現する必要性とのバランスに依り得る。例では、このレベルは、ユーザ定義および/または事前定義であり得る。
【0025】
レンダリング方法または使用方法のコンピュータ実装の典型的な例は、この目的に適合されたシステムでレンダリング方法または使用方法を実行することである。システムは、メモリおよび/またはグラフィカルユーザインターフェース(GUI)に結合されたプロセッサ、方法を実行するための命令を含むコンピュータプログラムを記録しているメモリを含み得る。メモリはまたデータベースであり得る。メモリは、そのようなストレージ、場合により、いくつかの物理的に異なる部品(例えば、プログラムのためのもの、場合によりデータベースのためのもの)、に適合された任意のハードウェアである。
【0026】
図3は、システムの例を示しており、システムは、クライアントコンピュータシステム、例えば、ユーザのワークステーションである。
【0027】
例のクライアントコンピュータは、内部通信バス3000に接続された中央処理装置(CPU)3010と、やはりバスに接続されたランダムアクセスメモリ(RAM)3070とを備える。クライアントコンピュータは、バスに接続されたビデオランダムアクセスメモリ2100と関連付けられたグラフィカル処理装置(GPU)3110をさらに提供される。ビデオRAM3100は、当技術分野では、フレームバッファとしても知られている。大容量記憶デバイスコントローラ3020は、ハードドライブ3030などの、大容量記憶デバイスへのアクセスを管理する。コンピュータプログラム命令およびデータを有形に実施するのに適した大容量記憶デバイスは、全ての形態の不揮発性メモリを含み、例として、EPROM、EEPROM、およびフラッシュメモリデバイスなどの半導体メモリデバイス、内蔵ハードディスクおよび着脱可能ディスクなどの磁気ディスク、光磁気ディスクを含む。上記のいずれも、特別に設計されたASIC(特定用途向け集積回路)によって補完され得、またはそれに組み込まれ得る。ネットワークアダプタ3050は、ネットワーク3060へのアクセスを管理する。クライアントコンピュータは、カーソル制御デバイス、キーボードなどの触覚デバイス3090も含み得る。カーソル制御デバイスは、ユーザが、ディスプレイ3080上の任意の所望の位置にカーソルを選択的に位置付けることを可能にするために、クライアントコンピュータにおいて使用される。加えて、カーソル制御デバイスは、ユーザが、様々なコマンドを選択すること、および制御信号を入力することを可能にする。カーソル制御デバイスは、システムに制御信号を入力するための数々の信号生成デバイスを含む。典型的には、カーソル制御デバイスは、マウスであり得、マウスのボタンが、信号を生成するために使用される。代替的に、または追加的に、クライアントコンピュータシステムは、センシティブパッド、および/またはセンシティブスクリーンを備え得る。
【0028】
コンピュータプログラムは、コンピュータによって実行可能な命令を含み得、命令は、上述のシステムに方法を実行させるための手段を含む。プログラムは、システムのメモリを含む、任意のデータ記憶媒体上に記録可能であり得る。プログラムは、例えば、デジタル電子回路で、またはコンピュータハードウェア、ファームウェア、ソフトウェア、もしくはそれらの組み合わせで実装され得る。プログラムは、装置として、例えば、プログラム可能なプロセッサによる実行のために機械可読記憶デバイス内で有形に実施される製品として実装され得る。方法ステップは、入力データを操作し、出力を生成することによって、方法の機能を実行するために、命令からなるプログラムを実行する、プログラム可能なプロセッサによって実行され得る。プロセッサはそれゆえ、データ記憶システム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受信し、それらにデータおよび命令を送信するように、プログラム可能であり、結合され得る。アプリケーションプログラムは、高水準手続きプログラミング言語またはオブジェクト指向プログラミング言語で、またはそれが望ましければ、アセンブリ言語もしくは機械語で実装され得る。いずれの場合も、言語は、コンパイラ言語またはインタープリタ言語であり得る。プログラムは、完全インストールプログラムまたは更新プログラムであり得る。システム上でのプログラムの適用は、いずれの場合も、方法を実行するための命令をもたらす。コンピュータプログラムは、代替的に、クラウドコンピューティング環境のサーバに記憶および実行され得、サーバは、1つまたは複数のクライアントとネットワークを介して通信している。このような場合、処理装置は、プログラムによって構成される命令を実行し、それにより、クラウドコンピューティング環境上で方法が実行される。
【0029】
「シングルパス」とは、方法のステップのうちの1つ以上が、GPUで、実質的に同時に実行されることを意味する。方法は、ステップS30に含まれる全てのステップ、特に、ステップ3120およびステップ3130を単一の並列計算で実行し得る。
【0030】
3Dメッシュは、ツーバイツー(two-by-two)で頂点にリンクし、メッシュのいわゆるフェース(すなわち、エッジの最も小さいサイクル)を形成する、頂点(3D位置)およびエッジ(例えば、セグメント)で、任意のグラフ構造を設計する。3Dメッシュは、凸ポリゴンを有する。すなわち、3Dメッシュのフェースは、凸形状を形成するようにリンクされた頂点から形成され得る。すなわち、3Dメッシュのフェースは、少なくとも3つの頂点(例えば、3つ以上、4つ以上)から形成され得、凸形状にリンクされる。
【0031】
3Dメッシュの凸ポリゴンは、三角形(例えば、三角形から構成される)を含み得る。すなわち、3Dメッシュの凸ポリゴンは、エッジにリンクされた3つの頂点から形成されるフェースを含み得る。追加的におよび/または代替的に、ベースメッシュはまた、四角形のメッシュを含み得る。すなわち、四角形のベースメッシュのフェースの各々は、エッジにリンクされた4つの頂点で形成され得る。
【0032】
S10において、3Dメッシュは、方法による3Dメッシュの検索または取得を可能にさせる任意のタイプのデータ獲得により、取得され得る。3Dメッシュを取得すること(S10)は、例えば、(離れている)これらのデータが格納されているメモリもしくはサーバまたは不揮発性ストレージから、当該3Dメッシュをダウンロードすること/読み出すこと(ネットワークを通じて)を含む。代替的に、3Dメッシュは、グラフィカルユーザインターフェースを通じてゼロから設計され得る。
【0033】
3Dメッシュは、任意の機械部品であり得る工業製品(例えば、シーン内に表現された)、地上車の部品(例えば、自動車および軽トラックの機器、レーシングカー、オートバイ、トラックおよびモータの機器、トラックおよびバス、電車を含む)、飛行機の部品(例えば、機体機器、航空宇宙機器、推進機器、防衛製品、航空機器、宇宙機器を含む)、海軍車の部品(例えば、海軍機器、商船、海上機器、ヨットおよび作業船、海洋機器を含む)、一般的な機械部品(例えば、工業製造機械、移動重機または機器、設置された機器、産業機器製品、組立金属製品、タイヤ製造製品を含む)、電気機械部品または電子部品(例えば、家電、セキュリティおよび/または制御および/または計測製品、コンピューティングおよび通信機器、半導体、医療装置および機器を含む)、消費財(例えば、家具、家庭および園芸製品、レジャー用品、ファッション製品、耐久諸費材小売製品、織物小売製品を含む)、パッケージング(例えば、食品および飲料およびたばこ、美容および身の回りの手入れ、家庭用品パッケージングを含む)などのオブジェクトの表現を含み得る。
【0034】
クリッププレーンは2Dサーフェスである。S20において、クリッププレーンは、方法によるクリッププレーンの検索または取得を可能にさせる任意のタイプのデータ獲得により、取得され得る。クリッププレーンを取得すること(S20)は、例えば、(離れている)これらのデータが格納されているメモリもしくはサーバまたは不発性ストレージから、当該クリッププレーンをダウンロードすること/読み出すこと(ネットワークを通じて)を含む。代替的に、クリッププレーンは、グラフィカルユーザインターフェースを通じてユーザにより提供され得る。
【0035】
S30において、方法は、3Dメッシュの断面図をレンダリングする、すなわち、方法は、少なくとも、S10において取得された3Dメッシュの凸ポリゴンとS20において取得されたクリッププレーンとの非空交差をレンダリングする。非空交差は、任意の方法で、例えば、交差が非空であるように、クリッププレーンが任意の方法で位置される(グラフィカルユーザインターフェース上で手動または自動で)方法で、定義され得る。例えば、非空交差を定義するための手動相互作用がある場合、方法は、クリッププレーンを有限次元の2Dサーフェスとして表示し得、ユーザは、方法が断面図をレンダリングする非空交差を取得するように、所望に応じて(例えば、マウスやタッチパッドなどのグラフィカル対話ツールを使用して)3Dメッシュ上にクリッププレーンを配置し得る。これは、実装の詳細であることを理解されたい。
【0036】
断面図をレンダリングすること(S30)がここで説明される。
【0037】
方法は、3Dメッシュの凸ポリゴンをレンダリングし(S310)、次いで、コンピュータ上で、断面図として、後部表示用に3Dメッシュの凸ポリゴン(の各々)を処理する。GPUで計算が実行されるため、方法は、方法S3110-S3130のステップを実行するために、各凸ポリゴンについてスレッドを設定し得る。
【0038】
3Dメッシュの凸ポリゴンをレンダリングすることは、各ポリゴンについて、凸ポリゴンがクリッププレーンと交差するかを決定すること(S3110)を含む。交差は、ポリゴンの少なくとも1つの頂点が、クリッププレーンにあるか(すなわち、幾何学的に重なる)、および/または、ポリゴンの少なくとも1つのエッジがクリッププレーンを横切る、例えば、2つのエッジがクリッププレーンを横切っているかを決定することを含み得る。
【0039】
凸ポリゴンがクリッププレーンと交差する場合(S3120)、方法は、クリッププレーンと交差する凸ポリゴンのエッジ上の一対の点を計算する。言い換えると、方法は、クリッププレーンと交差する凸ポリゴンのエッジの間を横断する線を形成する一対の点(3D空間上で、従って3D座標を有する)を計算し、当該線は、クリッププレーンと共線である。それにより、一対の点により形成される線は、クリッププレーンと交差する凸ポリゴンを「切断」する。
【0040】
方法は、GPU-書き込み可能バッファに一対の点を格納する(S3130)。GPU-書き込み可能バッファは、一時的な記憶域に使用されるGPUメモリの値の配列である。GPU-書き込み可能バッファは、書き込みおよび/またはGPUメモリ領域からの読み出しを可能にさせる。それゆえ、方法は、GPUメモリ領域に割り当てられたデータ構造に一対の点を格納する。方法は、任意の所定の方法、例えば、OpenGL言語などの、この目的のために構成されたシェーディング言語から命令を読み出すことにより、点のセットを格納し得る。方法がGPU-書き込み可能バッファに一対の点を格納するため、方法は、交差の決定(S3110)、一対の点の計算(S3120)、およびシングルパスでの格納(S3130)を実行することができ、すなわち、GPU資源上で全てのステップが実行されるため、CPUによる介入を必要とせず、および/または後処理のために格納された点をCPUに送信することを必要としない。
【0041】
方法は、GPU-書き込み可能バッファに線のセットとして格納された一対の点をレンダリングする(S320)。セットにリンクし得る各線は、それぞれ一対の点にリンクし得る。断面図をレンダリングすることは、レンダリングされた凸ポリゴンおよびレンダリングされた線のセットを含み得る。それゆえ、方法は、クリッププレーンに交差すると決定されたレンダリングされた凸ポリゴン、およびレンダリングされた線のセットの組合せを提示する。
【0042】
方法はそれゆえ、断面図をレンダリングすることの効率性を改良する。方法は、結果として得られる断面図がGPUでレンダリングされている間、断面プロファイルをレンダリングすることを実行する。断面プロファイルを計算するまたはレンダリングするための追加のパスは存しない。計算およびデータ記憶域がGPU上にあるため、パフォーマンスはリアルタイムである。それゆえ、大きなモデルに対しても、アプリケーションは、例えば、クリッププレーンがグラフィカルユーザインターフェースで操作されている間に、断面図をレンダリングすることを可能にさせることにより、断面プロファイル結果をリアルタイムでユーザに提供することが可能である。
【0043】
方法は、3Dメッシュの断面図をレンダリングする前に、クリッププレーンと関連付けられた視野方向、すなわち、クリッププレーンの側面からの方向、を取得することをさらに含み得る。言い換えると、視野方向は、ユーザに表示されることを意図するジオメトリを維持するクリッププレーンの側面を示す。それゆえ、視野方向は、視野方向が関連付けられるクリッププレーンの側面から見られる3D空間の部分の断面図をレンダリングすることを制約する。視野方向は、例えば、クリッププレーンの所定の側面の法線ベクトルを含み得る。視野方向は、任意の方法、例えば、ユーザ相互作用、例えば、クリッププレーンの側面やクリッププレーンの側面の法線ベクトルを選択すること、によって設定され得る。
【0044】
断面図をレンダリングすることは、クリッププレーンと関連付けられた視野方向に沿って位置される凸ポリゴンをレンダリングすることをさらに含み得る。すなわち、方法は、視野方向と関連付けられたクリッププレーンの側面から見られる3D空間の部分に対するレンダリングを制約する。方法は、それゆえ、視野方向に沿って位置される3Dメッシュの部分をレンダリングすることを制限する。方法は、S3110においてクリッププレーンと交差すると決定された凸ポリゴンをクロップし得、視野方向に沿って位置される凸ポリゴンの部分のみをレンダリングし得る。方法は、視野方向に沿って位置されない凸ポリゴ、すなわち、視野方向と関連付けられないクリッププレーンの他の側面上の凸ポリゴンをレンダリングすることを排除し得る。
【0045】
それゆえ、GPUが、表示されるべきでない不必要な凸ポリゴンをロードする必要がないため、メモリ効率性が改良される。さらに、方法がユーザに表示されることが意図されていない凸ポリゴンの部分をクロップするため、方法は、ユーザエクスペリエンスを改良する。それゆえ、レンダリングすることは、ユーザに滑らかなサーフェス(すなわち、断面図)を提供し、これは、表示品質を改良する。
【0046】
凸ポリゴンがクリッププレーンを交差するかを決定することは、凸ポリゴンの頂点の1つのみがクリッププレーン上にあるかを決定することをさらに含み得る。追加的に、凸ポリゴンの頂点の1つのみが、凸ポリゴンが交差するクリッププレーン上にある場合、方法は、残りの頂点が視野方向に沿って位置されない場合に凸ポリゴンをレンダリングすることを排除し得る。
【0047】
追加的または代替的に、凸ポリゴンがクリッププレーンと交差するかを決定することは、凸ポリゴンの頂点の2つのみがクリッププレーン上にあるかを決定することをさらに含み得て、追加的に、凸ポリゴンの頂点の2つが、クリッププレーン上にある場合、方法は、残りの頂点が視野方向に沿って位置されない場合に凸ポリゴンをレンダリングすることを排除し得る。
【0048】
追加的または代替的に、凸ポリゴンがクリッププレーンと交差するかを決定することは、凸ポリゴンの頂点の全てがクリッププレーン上にあるかを決定することをさらに含み得る。追加的に、凸ポリゴンの頂点の全てが、クリッププレーン上にある場合、方法は、凸ポリゴンをレンダリングし得る。言い換えると、方法は、クリッププレーンと共線の凸ポリゴンをレンダリングする。
【0049】
「角」をレンダリングすること、すなわち、クリッププレーン上にありながら断面図のサーフェスを変形させるポリゴンをレンダリングすることを排除するため、方法は、断面図をレンダリングすることの品質を改良する。それゆえ、レンダリングすることは、滑らかなサーフェスを表示することを可能にする。
【0050】
GPU-書き込み可能バッファは、事前割り当てされる。言い換えると、一時的記憶域に使用されるGPUメモリの領域は、事前定義される。好ましくは、GPU-書き込み可能バッファは、動的に事前割り当てされる、すなわち、一時的記憶域に使用されるGPUメモリの領域は、方法によって格納されたデータに適するように適合されたメモリ幅へ変更され得る。
【0051】
これにより、方法は、GPUのメモリにオンザフライで一対の点を格納することを保証する。
【0052】
GPU-書き込み可能バッファに一対の点を格納することは、GPU-書き込み可能バッファに、一対の点の1つを開始点として、一対の点の他の点を終点として格納することを含み得る。追加的に、GPU-書き込み可能バッファに一対の点を格納することは、GPU-書き込み可能バッファに格納された値を2ずつインクリメントし得る。方法は、それゆえ、開始点の3D座標と終点の3D座標との間に線を描くことによって、一対の点を線(線のセット上に)としてレンダリングし得る。方法は、任意の一対の点の1つを開始点として(それぞれ終点として)設定し得、これは、慣例により設定され得る。GPU-書き込み可能バッファに格納された値は、開始点と終了点の数を追跡し、それゆえ、レンダリングを実行するときに、線のセット内の線の数を決定するための方法により使用され得る。
【0053】
GPU-書き込み可能バッファに一対の点を格納することは、第1のGPU-書き込み可能バッファに、一対の点の1つを開始点として、一対の点の他の点を終点として格納することを含み得る。第1のGPUは、GPU内のメモリフットプリント、すなわち、GPUに割り当てられた書き込み可能メモリの量、である。追加的に、GPU-書き込み可能バッファに一対の点を格納することは、第2のGPU-書き込み可能バッファに格納された値を2ずつインクリメントし得る。第2のGPUは、別のメモリフットプリント、すなわち、GPUに割り当てられた書き込み可能メモリの量、である。第1のGPU-書き込み可能バッファおよび第2のGPU-書き込み可能バッファは、GPU内の独立したメモリフットプリントである。
【0054】
これは、方法が間接的に線をレンダリングすることを可能にする、すなわち、方法は、開始点および終点を含む第1のGPU-書き込み可能バッファ、点の数を含む第2のGPU-書き込み可能バッファ上の間接的描画コマンドを実行し得る。
【0055】
GPU-書き込み可能バッファは、OpenGLに支持されたシェーダーストレージバッファオブジェクト(SSBO)であり得る。OpenGLに支持されたシェーダーストレージバッファオブジェクトによって、GPU-書き込み可能バッファ(すなわち、方法による一時的記憶域に使用されるGPUメモリの領域)が、格納し、OpenGLシェーディング言語内からデータを読み出すことに適合されることを意味する。この分野で知られるように、OpenGLに支持されたシェーダーストレージバッファオブジェクトは、OpenGL仕様のバージョン4.3以来提供されている。
【0056】
OpenGL仕様は、SSBOが最大128MBのサイズを有することを可能にする。OpenGL仕様はまた、GPUメモリの限界までSSBOのサイズを割り当てることを可能にする。SSBOは、OpenGL仕様で書き込み可能であり得る、例えば、それぞれのSSBOは、自動的に書き込み可能(すなわち、ビットパービットで書き込み可能)であり得る。OpenGL仕様のSSBO読み出しおよび書き込みは、一貫性のないメモリアクセスを使用する。SSBOは、それぞれのSSBOがバインドされたサイズまで、可変記憶域を有し得る。これは、方法がSSBO内の任意の長さのGPUメモリ内の配列にアクセスし得ることを意味する。
【0057】
GPU-書き込み可能バッファに格納された一対の点を線のセットとしてレンダリングすることは、OpenGL間接的描画コマンドを実行することによる方法によって実行され得る。OpenGL間接的描画コマンドは、OpenGLシェーディング言語で支持されている命令のセットで、SSBOから来るパラメータからデータをレンダリングするように、OpenGLに描画コマンドを発行するために適合されている。言い換えると、コマンド実行時にプリミティブの数が分かっているコマンドである。例えば、OpenGL間接的描画コマンドを使用して、方法は、レンダリングのためにSSBO内に格納されているデータ(例えば、開始点および終点ならびに点の数)を取得する。
【0058】
このストレージの目的は、GPUからCPUへのデータの転送およびその反対を回避することである。これは、CPUによる計算の使用を回避することを可能にする。実際、このストレージおよび一対の点をレンダリングすることは、GPUレベルにおいて実行され、それゆえ、実行のスピードが大いに改良される。
【0059】
3Dメッシュを取得することは、頂点シェーダーによって実行され得る。頂点シェーダーは、GPU上で、個々の頂点を処理することに対処するOpenGLに支持されたプログラム可能なシェーダーである。頂点シェーダーは、3Dメッシュを入力として取り得、3Dメッシュに含まれた凸ポリゴンの個々の頂点の基本的な処理を実行し得る。
【0060】
追加的に、クリッププレーンを取得することは、頂点シェーダーによって実行され得る。頂点シェーダーは、凸ポリゴンとクリッププレーンの交差の決定を可能にするように、クリッププレーンに対する任意のタイプの処理を実行し得る(例えば、クリッププレーンを3D空間の有限領域の2Dサーフェスへ変換する)。
【0061】
これは、GPU上の操作を維持することを可能にし、CPUへの呼び出しが減少するため、方法のスピードが向上する。
【0062】
凸ポリゴンがクリッププレーンと交差するかを決定することは、ジオメトリシェーダーによって実行され得る。ジオメトリシェーダーは、レンダリングされる全てのプリミティブ(すなわち、凸ポリゴン)のためのプログラムである。ジオメトリシェーダーは、プリミティブの処理を規定するOpenGLに支持されたプログラム可能なシェーダーである。言い換えると、ジオメトリシェーダーは、各ポリゴンを入力として取り得、それゆえ、凸ポリゴンのトポロジ、例えば、凸ポリゴンの内側または外側、にアクセスする。この情報により、ジオメトリシェーダーは、凸ポリゴンとクリッププレーンとの交差を検出し得る。追加的に、クリッププレーンと交差する凸ポリゴンのエッジ上にある検出された一対の点を計算および格納すること(SSOB上で)は、ジオメトリシェーダーによって実行され得る。これは、ストレージおよびGPUメモリ上で一対の点を処理することを維持することを可能にする。
【0063】
GPU-書き込み可能バッファに格納された一対の点を線のセットとしてレンダリングすることは、ラスタライザーおよびフラグメントシェーダーによって実行され得る。ラスタライザーは、一対の点をラスタライズされたフォーマット、すなわち、一連の表示可能なピクセル、ドットまたは線を含むフォーマット、へ変換するOpenGLに支持されたプログラムである。ラスタ化の結果は、1つまたは複数のフラグメントのシーケンスであり得る。フラグメントは、出力フレームバッファ内のピクセル(またはマルチサンプリングが可能な場合はサンプル)の最終データを計算するために使用される一連の状態である。フラグメントの状態は、画面空間におけるフラグメントの位置、サンプル範囲(マルチサンプリングが可能な場合)、および凸ポリゴンまたはジオメトリシェーダーから出力された任意のデータのリストを含む。
【0064】
フラグメントシェーダーは、1つまたは複数のフラグメントの各々を入力として取り得、色および単一の深度のセットを含む出力を生成し得る。
【0065】
ラスタライザーおよびフラグメントシェーダーは、それゆえ、メモリに格納された点のセットを入力として、例えば、OpenGL間接的描画コマンドを実行した結果として、取り得、それゆえ、ユーザに表示するのに適合した出力を提供する。
【0066】
一実装では、凸ポリゴンがクリッププレーンと交差するかを決定することは、ジオメトリシェーダーによって実行され、クリッププレーンと交差する凸ポリゴンのエッジ上の一対の点を計算および格納することは、ジオメトリシェーダーによって実行される。この実装では、方法は、第1のGPU-書き込み可能バッファに、一対の点の1つを開始点として、一対の点の他の点を終点として、格納する。方法はまた、第2のGPU-書き込み可能バッファに格納された値を2ずつインクリメントし得る。この実装では、第1および第2のGPU-書き込み可能バッファは、OpenGLに支持されたシェーダーストレージバッファオブジェクトである。方法はそれゆえ、OpenGL間接的描画コマンドを実行することにより、GPU-書き込み可能バッファに格納された一対の点を線のセットとしてレンダリングし得る。それゆえ、OpenGL間接的描画コマンドは、線としてそれぞれの一対の点をレンダリングするために、第1のGPU-書き込み可能バッファのパラメータ(すなわち、開始点および終点のそれぞれ)および第2のGPU-書き込み可能バッファのパラメータ(すなわち、開始点および終点のそれぞれの値)を入力として取り得る。
【0067】
この実装は、CPU呼び出しが最小限となることを維持し、計算がGPUで維持されることを確かにする。それゆえ、点をレンダリングすることがポリゴンをレンダリングすることと同時に実行されるため、凸ポリゴンおよび点のセットの両方をレンダリングすることは、リアルタイムで実行され得る。
【0068】
図4から図9を参照して、方法の例がここで説明される。
【0069】
図4は、レンダリング方法のための入力を示す。方法は、3Dメッシュ410およびクリッププレーン420を取得する。クリッププレーン420は、標準座標430におけるXZプレーンのプレーンである。クリッププレーンは、-Yを指す法線ベクトル(図示せず)を有する。以下に示されるように、方法は、-Yを指す(図4において下向き)クリッププレーン420の下のジオメトリを維持する。
【0070】
図5A図5Dは、3Dメッシュの凸ポリゴン上のレンダリング処理の操作を示す。
【0071】
図5Aでは、3Dメッシュ500は、三角形510-540を含む。
-方法は、第1のSSBOを作成して、間接的描画バッファを保持する。
-方法は、第2のSSBOを作成して、断面プロファイルの結果の線を描くための頂点のリストを格納する。
-方法はまた、ジオメトリシェーダーを可能にする。ジオメトリシェーダーは、三角形-プレーン交差を計算するアルゴリズムを有する。
-第1および第2のSSBOはまた、ジオメトリシェーダーにもアクセス可能である。
【0072】
方法は、まず以下のステップを実行する。
-頂点510-540上の情報が現在の頂点バッファに格納される。
-描画コマンドが発行され、これは、頂点510-540を使用する。
-個々の頂点を処理してジオメトリシェーダーに渡される様々な頂点属性を計算する頂点シェーダー。これらの属性は、変換された位置およびクリッププレーンからの距離を含む。
【0073】
その後、方法は、ジオメトリシェーダーを実行し、ジオメトリシェーダーは、三角形を入力として取り、三角形を出力する。
【0074】
方法は、各入力三角形について、三角形がクリッププレーンと交差するかを決定する。これは、三角形の各頂点について、クリッププレーンとの距離を比較することにより実行される。クリッププレーンの距離は、符号付きfloat値で、線の2つの頂点が反対の符号付き値を有する場合、その線はクリッププレーンを切断することを意味する。
【0075】
方法はまた、入力三角形について、以下の角のケースを決定する。
・三角形の1つの頂点がクリッププレーンにあり、残りの2つの頂点が、
・クリッププレーンの視野方向の同じ側面にある場合、三角形は切断されない、すなわち、レンダリングから排除されない。
・クリッププレーンの視野方向の反対の側面にある場合、三角形は切断される、すなわち、レンダリングから排除される。
・三角形の2つの頂点(すなわち、1つのエッジ)がクリッププレーン上にあり、残りの頂点が、
・クリッププレーンの視野方向の同じ側面にある場合、三角形は切断されない。
・クリッププレーンの視野方向の反対の側面にある場合、三角形は切断される。
・全ての3つの頂点がクリッププレーン上にある場合、三角形は切断されない。
【0076】
これらの角のケースは別にして、他の三角形について、方法は、三角形の側面とクリッププレーンとの交差点を決定し、交差点は頂点座標およびそれらのクリッププレーンからの距離に基づいて計算される。
【0077】
この目的は、線(三角形とクリッププレーンとの交差の結果)を形成するであろう2つの点を発見することにあり、それゆえ、結果としての点は、第1のSSBOに追加される。また、第2のSSBO内の点の数は、2ずつインクリメントされる。1つ以上のクリッププレーンがある場合、この処理は、全てのクリッププレーンに対して繰り返される。
【0078】
ジオメトリシェーダーは、入力として受信された三角形と同じ三角形を出力する。
【0079】
3Dメッシュのポリゴンをレンダリングすることが終わると、方法は、断面プロファイル結果を描くことを開始する。色、線のタイプ、および厚さなど、適切なレンダリングの状態が設定される。間接的描画コマンドが実行され、これは、2つのSSBO、各線の開始点および終点という形態の線のセットを含む第1のSSBOと点の数を含む第2のSSBO、を利用する。
【0080】
図5Bは、図5Aのメッシュ500に適用された方法の結果を示す。レンダリングされた断面図は、レンダリングされた線560、クリッププレーン550から三角形530および520が切り取られたことを含む(説明の便宜上ここに示した)。三角形540は、他の変更なくレンダリングされている。
【0081】
図5Cは、レンダリングされた断面図を、断面図560を有するソリッド本体570として示す。クリッププレーン550も、説明の便宜上表示されている。
【0082】
図6は、方法により取得された、建物を表す、3Dメッシュの断面図600の一例を示す。断面図は、線のセット620を有する三角形610を含む3Dメッシュを含む。図7は、方法により取得された、ボートを表す、3Dメッシュの断面図700の別の例を示す。断面図は、線のセット720を有する三角形710を含む3Dメッシュを含む。図8は、方法により取得された、時計を表す、3Dメッシュの断面図800の別の例を示す。断面図は、線のセット820を有する三角形810を含む3Dメッシュを含む。図9は、方法により取得されたモータを表す3Dメッシュの断面図900の別の例を示す。断面図は、線のセット920を有する三角形910を含む3Dメッシュを含む。
図1
図2
図3
図4
図5A
図5B
図5C
図6
図7
図8
図9
【手続補正書】
【提出日】2024-04-15
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
グラフィカル処理装置(GPU)による、シングルパスで3Dメッシュの断面図をレンダリングするためのコンピュータ実装方法であって、前記方法は、
-3Dメッシュを取得することであって、前記3Dメッシュは、凸ポリゴンを有する、3Dメッシュを取得することと、
-クリッププレーンを取得することと、
-前記3Dメッシュの前記断面図を、
--前記3Dメッシュの前記凸ポリゴンをレンダリングすることであって、前記3Dメッシュの前記凸ポリゴンをレンダリングすることは、各凸ポリゴンについて、
---前記凸ポリゴンが前記クリッププレーンと交差するかを決定することと、
---前記凸ポリゴンが前記クリッププレーンと交差する場合、前記クリッププレーンと交差する前記凸ポリゴンのエッジ上の一対の点を計算することと、
---GPU-書き込み可能バッファに前記一対の点を格納することと、
を備える、前記3Dメッシュの前記凸ポリゴンをレンダリングすることと、
--前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることであって、前記断面図をレンダリングすることはそれによりレンダリングされた前記凸ポリゴンおよびレンダリングされた前記線のセットを備える、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることと、
によってレンダリングすることと、
を備えるコンピュータ実装方法。
【請求項2】
-前記3Dメッシュの前記断面図をレンダリングする前に、前記クリッププレーンに関連付けられた視野方向を取得することと、
-前記クリッププレーンに関連付けられた前記視野方向に沿って位置される凸ポリゴンをレンダリングすること、および、前記視野方向に沿って位置しない凸ポリゴンをレンダリングすることを排除することをさらに備える前記断面図をレンダリングすることと、
をさらに備える請求項1に記載の方法。
【請求項3】
前記凸ポリゴンが前記クリッププレーンと交差するかを決定することは、
-前記凸ポリゴンの頂点の1つのみが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の1つのみが前記凸ポリゴンが交差する前記クリッププレーン上にある場合、残りの頂点が前記視野方向に沿って位置されない場合に前記凸ポリゴンをレンダリングすることを排除するか、を決定すること、および/または、
-前記凸ポリゴンの頂点の2つのみが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の2つのみが前記クリッププレーン上にある場合、残りの頂点が前記視野方向に沿って位置されない場合に前記凸ポリゴンをレンダリングすることを排除するか、を決定すること、および/または、
-前記凸ポリゴンの頂点の全てが前記クリッププレーン上にあるか、および、前記凸ポリゴンの頂点の全てが前記クリッププレーン上にある場合に前記凸ポリゴンをレンダリングするか、を決定すること、
をさらに備える請求項2に記載の方法。
【請求項4】
前記GPU-書き込み可能バッファは、事前割り当てされ
請求項1乃至3のいずれか1項に記載の方法。
【請求項5】
前記GPU-書き込み可能バッファに前記一対の点を格納することは、
-前記GPU-書き込み可能バッファに前記一対の点の1つを開始点として、前記一対の点の他の点を終点として格納することと、
-前記GPU-書き込み可能バッファに格納された値を2ずつインクリメントすることと、
を備える、請求項1記載の方法。
【請求項6】
前記GPU-書き込み可能バッファに前記一対の点を格納することは、
-第1のGPU-書き込み可能バッファに前記一対の点の1つを開始点として、前記一対の点の他の点を終点として格納することと、
-第2のGPU-書き込み可能バッファに格納された値を2ずつインクリメントすることと、
を備える、請求項1記載の方法。
【請求項7】
前記GPU-書き込み可能バッファは、OpenGLに支持されたシェーダーストレージバッファオブジェクトであり、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることは、OpenGL間接的描画コマンドによって実行される、
請求項1記載の方法。
【請求項8】
前記3Dメッシュの前記凸ポリゴンは、三角形を備える、
請求項1記載の方法。
【請求項9】
前記3Dメッシュを取得することは、頂点シェーダーによって実行され、前記クリッププレーンを取得することは、前記頂点シェーダーによって実行される、
請求項1記載の方法。
【請求項10】
前記凸ポリゴンが前記クリッププレーンと交差するかを決定することは、ジオメトリシェーダーによって実行され、前記クリッププレーンと交差する前記凸ポリゴンのエッジ上の前記一対の点を計算および格納することは、前記ジオメトリシェーダーによって実行される、
請求項1記載の方法。
【請求項11】
前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることは、ラスタライザーおよびフラグメントシェーダーによって実行される、
請求項1記載の方法。
【請求項12】
シェーダーパイプラインによる、請求項1記載のレンダリングするための方法の使用方法であって、
-シェーダーパイプラインを取得することであって、
--頂点シェーダーが、前記3Dメッシュおよび前記クリッププレーンを取得すること、
--ジオメトリシェーダーが、
---前記凸ポリゴンが前記クリッププレーンと交差するかを決定することと、
---前記凸ポリゴンが前記クリッププレーンと交差する場合、前記クリッププレーンと交差する前記凸ポリゴンのエッジ上の前記一対の点を計算することと、
---GPU-書き込み可能バッファに前記一対の点を格納することと、
を実行すること、および、
--ラスタライザーおよびフラグメントシェーダーが、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることであって、前記断面図をレンダリングすることはそれによりレンダリングされた前記凸ポリゴンおよびレンダリングされた前記線のセットを備える、前記GPU-書き込み可能バッファに格納された前記一対の点を線のセットとしてレンダリングすることを実行すること、
を備えるシェーダーパイプラインを取得することと、
-レンダリングされた前記凸ポリゴンおよびレンダリングされた前記線のセットを備える前記断面図をレンダリングすることと、
を備える、使用方法。
【請求項13】
レンダリングされた前記3Dメッシュの前記断面図を表示することを備える、
請求項12に記載の使用方法。
【請求項14】
請求項1記載の方法および/または請求項12記載の使用方法を実行するための命令を備える、コンピュータプログラム。
【請求項15】
メモリおよびグラフィカルユーザインターフェースに結合されたプロセッサを備えるシステムであって、前記メモリは、請求項14に記載のコンピュータプログラムを記録している、システム。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0027
【補正方法】変更
【補正の内容】
【0027】
例のクライアントコンピュータは、内部通信バス000に接続された中央処理装置(CPU)010と、やはりバスに接続されたランダムアクセスメモリ(RAM)070とを備える。クライアントコンピュータは、バスに接続されたビデオランダムアクセスメモリ2100と関連付けられたグラフィカル処理装置(GPU)110をさらに提供される。ビデオRAM100は、当技術分野では、フレームバッファとしても知られている。大容量記憶デバイスコントローラ020は、ハードドライブ030などの、大容量記憶デバイスへのアクセスを管理する。コンピュータプログラム命令およびデータを有形に実施するのに適した大容量記憶デバイスは、全ての形態の不揮発性メモリを含み、例として、EPROM、EEPROM、およびフラッシュメモリデバイスなどの半導体メモリデバイス、内蔵ハードディスクおよび着脱可能ディスクなどの磁気ディスク、光磁気ディスクを含む。上記のいずれも、特別に設計されたASIC(特定用途向け集積回路)によって補完され得、またはそれに組み込まれ得る。ネットワークアダプタ050は、ネットワーク060へのアクセスを管理する。クライアントコンピュータは、カーソル制御デバイス、キーボードなどの触覚デバイス090も含み得る。カーソル制御デバイスは、ユーザが、ディスプレイ080上の任意の所望の位置にカーソルを選択的に位置付けることを可能にするために、クライアントコンピュータにおいて使用される。加えて、カーソル制御デバイスは、ユーザが、様々なコマンドを選択すること、および制御信号を入力することを可能にする。カーソル制御デバイスは、システムに制御信号を入力するための数々の信号生成デバイスを含む。典型的には、カーソル制御デバイスは、マウスであり得、マウスのボタンが、信号を生成するために使用される。代替的に、または追加的に、クライアントコンピュータシステムは、センシティブパッド、および/またはセンシティブスクリーンを備え得る。
【手続補正3】
【補正対象書類名】明細書
【補正対象項目名】0070
【補正方法】変更
【補正の内容】
【0070】
図5A図5は、3Dメッシュの凸ポリゴン上のレンダリング処理の操作を示す。

【外国語明細書】