(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-01-08
(45)【発行日】2025-01-17
(54)【発明の名称】三次元形状データの処理装置、及び三次元形状データの処理プログラム
(51)【国際特許分類】
G06T 17/10 20060101AFI20250109BHJP
G06F 30/10 20200101ALI20250109BHJP
【FI】
G06T17/10
G06F30/10 100
(21)【出願番号】P 2020147070
(22)【出願日】2020-09-01
【審査請求日】2023-08-23
(73)【特許権者】
【識別番号】000005496
【氏名又は名称】富士フイルムビジネスイノベーション株式会社
(74)【代理人】
【識別番号】110001519
【氏名又は名称】弁理士法人太陽国際特許事務所
(72)【発明者】
【氏名】高橋 智也
(72)【発明者】
【氏名】田中 靖幸
(72)【発明者】
【氏名】東方 良介
(72)【発明者】
【氏名】氷治 直樹
(72)【発明者】
【氏名】横瀬 太郎
【審査官】渡部 幸和
(56)【参考文献】
【文献】特許第4208191(JP,B2)
【文献】特開2017-146938(JP,A)
【文献】国際公開第03/067527(WO,A1)
【文献】ボクセル型背景格子を使用した大規模並列可視化手法,情報処理学会研究報告 Vol.2006 No.87,2006年08月02日
(58)【調査した分野】(Int.Cl.,DB名)
G06T 17/00
G06F 30/00
(57)【特許請求の範囲】
【請求項1】
プロセッサを備え、
前記プロセッサは、
1つ以上の平面及び曲面の少なくとも一方の形成面を用いて構成された三次元形状を含む三次元空間を規定の大きさを有する複数の三次元領域に分割し、
分割した前記三次元領域毎に、前記三次元領域と干渉する前記形成面を特定し、
前記三次元領域の大きさが、干渉する前記形成面によって表される前記三次元形状の箇所における特性を再現するために必要となる大きさに達するまで、
八分木を用いることなく前記三次元領域の各々を再分割する
三次元形状データの処理装置。
【請求項2】
前記プロセッサは、前記三次元領域に干渉する前記形成面の範囲における特性のばらつきが予め定めた許容範囲に収まる場合に、前記三次元領域の大きさが、干渉する前記形成面によって表される前記三次元形状の箇所における特性を再現するために必要となる大きさに達したと判定して、前記三次元領域の再分割を停止する
請求項1記載の三次元形状データの処理装置。
【請求項3】
前記プロセッサは、前記三次元領域に干渉する前記形成面が前記三次元形状の1つの平面を構成する場合、または、前記三次元領域に干渉する前記形成面が存在しない場合、前記三次元領域の大きさが、干渉する前記形成面によって表される前記三次元形状の箇所における特性を再現するために必要となる大きさに達したと判定して、前記三次元領域の再分割を停止する
請求項2記載の三次元形状データの処理装置。
【請求項4】
前記プロセッサは、前記三次元領域に干渉する各々の前記形成面における法線ベクトルの分散が予め定めた閾値以下である場合に、前記形成面の各々が前記三次元形状の1つの平面を構成するとみなす
請求項3記載の三次元形状データの処理装置。
【請求項5】
前記プロセッサは、前記三次元領域の再分割が必要となる状況であったとしても、前記形成面、前記三次元領域、並びに、前記形成面及び前記三次元領域に関する特性の少なくとも1つの状態が予め定めた再分割停止条件を満たす場合には、前記三次元領域の再分割を停止する
請求項1~請求項4の何れか1項に記載の三次元形状データの処理装置。
【請求項6】
前記プロセッサは、前記三次元領域と前記形成面との位置関係に応じて、前記三次元形状の特性の再現に関与する前記三次元領域に対して三次元要素を配置する
請求項1~請求項5の何れか1項に記載の三次元形状データの処理装置。
【請求項7】
前記プロセッサは、再分割を停止した前記三次元領域に予め設定されている基準点が前記三次元形状の内側に存在する場合に、再分割を停止した前記三次元領域に前記三次元要素を配置する
請求項6記載の三次元形状データの処理装置。
【請求項8】
前記プロセッサは、前記三次元領域を再分割する場合、分割した前記三次元領域毎における前記形成面の特定に関する処理、及び前記三次元領域への前記三次元要素の配置に関する処理を再帰的に行う再帰処理を実行する
請求項6または請求項7記載の三次元形状データの処理装置。
【請求項9】
前記プロセッサは、前記三次元領域の再分割を再帰的に行う場合、再分割された前記三次元領域毎に、分割元である前記三次元領域と干渉する前記形成面の中から再分割された前記三次元領域と干渉する前記形成面を特定する
請求項8記載の三次元形状データの処理装置。
【請求項10】
前記プロセッサは、前記再帰処理を実行する毎に前記三次元要素の配置結果を表示する
請求項8または請求項9に記載の三次元形状データの処理装置。
【請求項11】
前記プロセッサは、前記三次元形状を構成するすべての前記形成面を順次選択し、選択した前記形成面毎に、選択した前記形成面と干渉する何れか1つの前記三次元領域を基準三次元領域に設定した上で、前記基準三次元領域と隣接する前記三次元領域である隣接三次元領域の各々について、選択した前記形成面と干渉するか特定し、
選択した前記形成面と干渉する前記隣接三次元領域がなくなるまで、選択した前記形成面と干渉する前記隣接三次元領域を新たな前記基準三次元領域とし、新たな前記基準三次元領域と隣接する前記隣接三次元領域であって、選択した前記形成面との干渉状態が判明済みの前記隣接三次元領域を除いた残りの前記隣接三次元領域の各々について、選択した前記形成面と干渉する前記隣接三次元領域を特定する処理を繰り返し実行することで、前記三次元領域の各々と干渉する前記形成面を特定する
請求項1~請求項10の何れか1項に記載の三次元形状データの処理装置。
【請求項12】
前記プロセッサは、前記三次元領域の基準点に対して設定する干渉範囲を、隣り合う前記三次元領域の基準点を含むように設定し、設定した前記干渉範囲と干渉する前記形成面を前記三次元領域と干渉する前記形成面として特定する
請求項1~請求項11の何れか1項に記載の三次元形状データの処理装置。
【請求項13】
前記プロセッサは、前記三次元領域の各々に対して、それぞれ前記三次元領域と関係する前記形成面及び空間の少なくとも一方の属性を表す属性値を対応付ける
請求項1~請求項12の何れか1項に記載の三次元形状データの処理装置。
【請求項14】
前記プロセッサは、処理を並列に実行するプロセスの各々に、各々の前記三次元領域を再分割する処理を行わせる
請求項1~請求項13の何れか1項に記載の三次元形状データの処理装置。
【請求項15】
コンピュータに、
1つ以上の平面及び曲面の少なくとも一方の形成面を用いて構成された三次元形状を含む三次元空間を規定の大きさを有する複数の三次元領域に分割し、
分割した前記三次元領域毎に、前記三次元領域と干渉する前記形成面を特定し、
前記三次元領域の大きさが、干渉する前記形成面によって表される前記三次元形状の箇所における特性を再現するために必要となる大きさに達するまで、
八分木を用いることなく前記三次元領域の各々を再分割する処理を実行させる
三次元形状データの処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、三次元形状データの処理装置、及び三次元形状データの処理プログラムに関する。
【背景技術】
【0002】
特許文献1には、大きさの異なるボクセルが含まれる撮影画像のスライスデータを積み重ねて、撮影対象の3次元モデルを形成する方法であって、撮影画像のスライスデータを、一つの領域内に所定個数のピクセルが含まれるように複数の領域に分割する第1の工程、分割された1つの領域内に含まれるピクセルが、すべて同じ特徴を有する組織又は物質を表すときは、当該ピクセル同士を結合して1つのボクセルデータに置換する第2の工程、分割された1つの領域内に、異なる特徴を有する組織又は物質を表すピクセルが含まれるときは、当該1つの領域内のピクセルデータを混合ボクセルデータとして定義する第3の工程、第2の工程及び第3の工程を繰り返して、置換されたボクセルデータ及び混合ボクセルデータを含むスライスデータを取得する第4の工程、並びに、第4の工程により取得された複数のスライスデータを多段階に積み重ねる第5の工程、を含む方法が開示されている。
【0003】
特許文献2には、複数の三次元形状全体を、当初は粗い解像度で縦、横、及び高さ方向にそれぞれ同じ数ずつ分割しながら、細かい解像度での処理が必要な領域を絞り込み、互いの三次元形状の差分モデルを生成する情報処理装置が開示されている。
【0004】
特許文献3には、三次元形状を縦、横、及び高さ方向にそれぞれ同じ数ずつ分割したNの3乗木であって、Nの3乗木のトップノード及び中間ノードが、それぞれ各階層でのデータを保持するメモリ位置へのポインタを示すインデックスビットと次階層のサブキューブの有無を示す占有ビットを有するNの3乗木で、三次元形状のデータ構造を表す情報処理装置が開示されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2012-88771号公報
【文献】米国特許第9600929号明細書
【文献】米国特許第9754405号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
物体の三次元形状に関する処理を行う場合、物体が含まれる三次元空間を分割し、分割した三次元領域毎に物体の三次元形状に関する処理を行うことがある。
【0007】
例えば三次元領域毎に物体の特性を対応付けることで物体の特性を詳細に定義するためには、できるだけ三次元空間を細かく分割して三次元領域の大きさを小さくすればよいが、これに伴い三次元領域の数が増大し、処理に用いるデータのデータサイズの増大化及び処理時間の増大化が発生する。
【0008】
したがって、三次元空間を分割する場合に八分木(“Octree”とも呼ばれる)を用いて、物体の内部から物体の表面に近づくほど三次元領域の大きさを小さく分割する手法が用いられることがある。
【0009】
例えば物体の表面が平面で構成されているような場合、当該範囲の特性を1つの三次元領域に対応付けることができる場合がある。しかしながら、三次元空間の分割に八分木を用いた場合、物体の表面が八分木で用いられる最も小さい大きさの三次元領域で分割され、その結果、物体の平面が複数の三次元領域に分割されることがある。また、八分木を用いて三次元空間を分割した場合、配置的に隣り合った三次元領域であったとしても、別の親(分岐点)のサブ木に属することもあるため、その場合、隣り合った三次元領域を選択するには、隣り合った三次元領域に共通の親まで木構造を遡るか、それぞれの三次元領域がどのサブ木に位置するか計算で求めなければならない。また、三次元空間の分割に八分木を用いた場合、物体の大きさが大きくなるほど多くの種類の大きさの三次元領域に分割される。したがって、例えば粗い、中程度、及び細かいといった3種類程度の大きさの三次元領域で物体の三次元形状に関する処理が行えるような場合であっても、物体の大きさに応じて、それ以上の種類の三次元領域に分割されることがある。更に、物体の三次元形状を変更した場合、変更箇所に対応する三次元領域だけでなく、変更箇所に対応する三次元領域が属するサブツリーに対応する他の三次元領域を含めて分割のやり直しを行う必要がある。
【0010】
本発明は、大きさの異なる複数の三次元領域の組み合わせを用いて三次元形状を処理する場合に、三次元形状の処理に必要となる三次元形状の箇所毎の特性にあわせて、三次元形状の各箇所を含む三次元領域の大きさを設定することができる三次元形状データの処理装置、及び処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
第1態様に係る三次元形状データの処理装置は、プロセッサを備え、前記プロセッサは、1つ以上の平面及び曲面の少なくとも一方の形成面を用いて構成された三次元形状を含む三次元空間を規定の大きさを有する複数の三次元領域に分割し、分割した前記三次元領域毎に、前記三次元領域と干渉する前記形成面を特定し、前記三次元領域の大きさが、干渉する前記形成面によって表される前記三次元形状の箇所における特性を再現するために必要となる大きさに達するまで、前記三次元領域の各々を再分割する。
【0012】
第2態様に係る三次元形状データの処理装置は、第1態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域に干渉する前記形成面の範囲における特性のばらつきが予め定めた許容範囲に収まる場合に、前記三次元領域の大きさが、干渉する前記形成面によって表される前記三次元形状の箇所における特性を再現するために必要となる大きさに達したと判定して、前記三次元領域の再分割を停止する。
【0013】
第3態様に係る三次元形状データの処理装置は、第2態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域に干渉する前記形成面が前記三次元形状の1つの平面を構成する場合、または、前記三次元領域に干渉する前記形成面が存在しない場合、前記三次元領域の大きさが、干渉する前記形成面によって表される前記三次元形状の箇所における特性を再現するために必要となる大きさに達したと判定して、前記三次元領域の再分割を停止する。
【0014】
第4態様に係る三次元形状データの処理装置は、第3態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域に干渉する各々の前記形成面における法線ベクトルの分散が予め定めた閾値以下である場合に、前記形成面の各々が前記三次元形状の1つの平面を構成するとみなす。
【0015】
第5態様に係る三次元形状データの処理装置は、第1態様~第4態様の何れかの態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域の再分割が必要となる状況であったとしても、前記形成面、前記三次元領域、並びに、前記形成面及び前記三次元領域に関する特性の少なくとも1つの状態が予め定めた再分割停止条件を満たす場合には、前記三次元領域の再分割を停止する。
【0016】
第6態様に係る三次元形状データの処理装置は、第1態様~第5態様の何れかの態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域と前記形成面との位置関係に応じて、前記三次元形状の特性の再現に関与する前記三次元領域に対して三次元要素を配置する。
【0017】
第7態様に係る三次元形状データの処理装置は、第6態様に係る三次元形状データの処理装置において、前記プロセッサが、再分割を停止した前記三次元領域に予め設定されている基準点が前記三次元形状の内側に存在する場合に、再分割を停止した前記三次元領域に前記三次元要素を配置する。
【0018】
第8態様に係る三次元形状データの処理装置は、第6態様または第7態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域を再分割する場合、分割した前記三次元領域毎における前記形成面の特定に関する処理、及び前記三次元領域への前記三次元要素の配置に関する処理を再帰的に行う再帰処理を実行する。
【0019】
第9態様に係る三次元形状データの処理装置は、第8態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域の再分割を再帰的に行う場合、再分割された前記三次元領域毎に、分割元である前記三次元領域と干渉する前記形成面の中から再分割された前記三次元領域と干渉する前記形成面を特定する。
【0020】
第10態様に係る三次元形状データの処理装置は、第8態様または第9態様に係る三次元形状データの処理装置において、前記プロセッサは、前記再帰処理を実行する毎に前記三次元要素の配置結果を表示する。
【0021】
第11態様に係る三次元形状データの処理装置は、第1態様~第10態様の何れかの態様に係る三次元形状データの処理装置において、前記プロセッサは、前記三次元形状を構成するすべての前記形成面を順次選択し、選択した前記形成面毎に、選択した前記形成面と干渉する何れか1つの前記三次元領域を基準三次元領域に設定した上で、前記基準三次元領域と隣接する前記三次元領域である隣接三次元領域の各々について、選択した前記形成面と干渉するか特定し、選択した前記形成面と干渉する前記隣接三次元領域がなくなるまで、選択した前記形成面と干渉する前記隣接三次元領域を新たな前記基準三次元領域とし、新たな前記基準三次元領域と隣接する前記隣接三次元領域であって、選択した前記形成面との干渉状態が判明済みの前記隣接三次元領域を除いた残りの前記隣接三次元領域の各々について、選択した前記形成面と干渉する前記隣接三次元領域を特定する処理を繰り返し実行することで、前記三次元領域の各々と干渉する前記形成面を特定する。
【0022】
第12態様に係る三次元形状データの処理装置は、第1態様~第11態様の何れかの態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域の基準点に対して設定する干渉範囲を、隣り合う前記三次元領域の基準点を含むように設定し、設定した前記干渉範囲と干渉する前記形成面を前記三次元領域と干渉する前記形成面として特定する。
【0023】
第13態様に係る三次元形状データの処理装置は、第1態様~第12態様の何れかの態様に係る三次元形状データの処理装置において、前記プロセッサが、前記三次元領域の各々に対して、それぞれ前記三次元領域と関係する前記形成面及び空間の少なくとも一方の属性を表す属性値を対応付ける。
【0024】
第14態様に係る三次元形状データの処理装置は、第1態様~第13態様の何れかの態様に係る三次元形状データの処理装置において、前記プロセッサが、処理を並列に実行するプロセスの各々に、各々の前記三次元領域を再分割する処理を行わせる。
【0025】
第15態様に係る三次元形状データの処理プログラムは、コンピュータに、1つ以上の平面及び曲面の少なくとも一方の形成面を用いて構成された三次元形状を含む三次元空間を規定の大きさを有する複数の三次元領域に分割し、分割した前記三次元領域毎に、前記三次元領域と干渉する前記形成面を特定し、前記三次元領域の大きさが、干渉する前記形成面によって表される前記三次元形状の箇所における特性を再現するために必要となる大きさに達するまで、前記三次元領域の各々を再分割する処理を実行させるためのプログラムである。
【発明の効果】
【0026】
第1態様、及び第15態様によれば、大きさの異なる複数の三次元領域の組み合わせを用いて三次元形状を処理する場合に、三次元形状の処理に必要となる三次元形状の箇所毎の特性にあわせて、三次元形状の各箇所を含む三次元領域の大きさを設定することができる、という効果を有する。
【0027】
第2態様によれば、三次元領域に干渉する形成面の範囲における特性のばらつきから、三次元領域の再分割が必要であるか判定することができる、という効果を有する。
【0028】
第3態様によれば、三次元領域と三次元形状の位置関係から、三次元領域の再分割が必要であるか否かを判定することができる、という効果を有する。
【0029】
第4態様によれば、三次元形状がどのような形成面の組み合わせで構成されているかを意識することなく、三次元領域で考慮すべき範囲が三次元形状の平面に相当する箇所であるか否かを判定することができる、という効果を有する。
【0030】
第5態様によれば、三次元領域に対して不要な再分割が実行されることを抑制することができる、という効果を有する。
【0031】
第6態様によれば、三次元領域に三次元領域の大きさに応じた三次元要素を配置し、三次元形状を再現することができる、という効果を有する。
【0032】
第7態様によれば、三次元領域の基準点と三次元形状の位置関係から、三次元要素を配置するか否かを判定することができる、という効果を有する。
【0033】
第8態様によれば、三次元領域の再分割毎に異なる処理ロジックを用意する場合と比較して、三次元領域の再分割を行うための処理ロジックを単純化することができる、という効果を有する。
【0034】
第9態様によれば、三次元領域の再分割を行う際に、三次元形状を構成するすべての形成面の中から三次元領域に干渉する形成面を特定する場合と比較して、三次元領域に干渉する形成面の特定に要する時間を短縮することができる、という効果を有する。
【0035】
第10態様によれば、すべての三次元領域の分割が終了してから三次元要素の最終的な配置結果を表示する場合と比較して、三次元要素の最終的な配置結果が表示されるまでのユーザの体感的な待ち時間を短縮することができる、という効果を有する。
【0036】
第11態様によれば、三次元領域毎に、三次元形状を構成するすべての形成面の中から三次元領域に干渉する形成面を1つずつ特定する場合と比較して、三次元領域に干渉する形成面の特定に要する時間を短縮することができる、という効果を有する。
【0037】
第12態様によれば、隣り合う三次元領域との関係を考慮しない場合と比較して、隣り合う三次元領域の各々の基準点の間を三次元形状が通過するような三次元形状であったとしても、三次元領域の再分割が必要であるかを適切に判定することができる、という効果を有する。
【0038】
第13態様によれば、三次元要素が配置されない三次元領域に対しても、属性毎の属性値を対応付けることができる、という効果を有する。
【0039】
第14態様によれば、三次元領域の再分割に要する時間を短縮するため並列に実行する場合であっても、他の三次元領域の再分割に影響を与えることなく独立して処理することができる、という効果を有する。
【図面の簡単な説明】
【0040】
【
図1】三次元形状データの処理装置の構成例を示す図である。
【
図3】ボクセルで構成した物体の三次元形状の一例を示す図である。
【
図4】単一の大きさのボクセルで構成した物体の三次元形状における断面の一例を示す図である。
【
図5】三次元空間の分割処理の一例を示すフローチャートである。
【
図6】物体の三次元形状を含む三次元空間を初回の分割サイズで分割した一例を示す図である。
【
図7】ポリゴンと干渉する特定の三次元領域に対する隣接領域の一例を示す図である。
【
図8】三次元領域の干渉範囲の設定例について説明した図である。
【
図9】三次元領域の干渉範囲の一例を示す図である。
【
図11】ターゲット領域を変更した後の、隣接領域の一例を示す図である。
【
図12】ターゲット領域を更に変更した後の、隣接領域の一例を示す図である。
【
図13】再分割処理の流れの一例を示すフローチャートである。
【
図14】セルブロック処理の流れの一例を示すフローチャートである。
【
図15】3種類の大きさのボクセルで構成された物体の三次元形状の一例を示す図である。
【
図16】4種類の大きさのボクセルで構成された物体の三次元形状の一例を示す図である。
【
図17】三次元形状の再現に失敗することがある状況例を示す図である。
【
図18】物体から飛び出した突起状の三次元形状の再現例を示す図である。
【
図19】物体から飛び出した突起状の三次元形状を再現する場合に用いられる干渉範囲の一例を示す図である。
【発明を実施するための形態】
【0041】
以下、本実施形態について図面を参照しながら説明する。なお、同じ構成要素及び同じ処理には全図面を通して同じ符号を付与し、重複する説明を省略する。
【0042】
まず、
図1を参照して、本実施形態に係る三次元形状データの処理装置1の構成について説明する。
【0043】
処理装置1は、例えばコンピュータ10で構成される。コンピュータ10は、プロセッサの一例であるCPU(Central Processing Unit)11、ROM(Read Only Memory)12、RAM(Random Access Memory)13、不揮発性メモリ14、及び入出力インターフェース(I/O)15を備える。そして、CPU11、ROM12、RAM13、不揮発性メモリ14、及びI/O15がバス16を介して各々接続されている。
【0044】
不揮発性メモリ14は、不揮発性メモリ14に供給される電力が遮断されても、記憶した情報が維持される記憶装置の一例であり、例えば半導体メモリが用いられるがハードディスクを用いてもよい。不揮発性メモリ14は、必ずしもコンピュータ10に内蔵されている必要はなく、例えばメモリカードのようにコンピュータ10に着脱可能な可搬型の記憶装置であってもよい。
【0045】
一方、I/O15には、操作部17、表示部18、及び通信部19が接続される。
【0046】
操作部17は、処理装置1のユーザから指示を受け付けるユニットであり、例えばキーボード、マウス及びタッチパネル等のポインティングデバイス、並びに、ボタンといった入力デバイスの少なくとも1つを含む。
【0047】
表示部18は、CPU11によって処理された情報を表示するユニットであり、例えば液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイ、及びプロジェクタといった表示デバイスの少なくとも1つを含む。
【0048】
通信部19は、例えばインターネット及びLAN(Local Area Network)といった通信回線に接続され、通信回線に接続された外部装置とデータ通信を行うためのインターフェースを備える。
【0049】
図2は、三次元形状データによって表される物体2の三次元形状の一例を示す図である。物体2の三次元形状を含む三次元空間は、X軸、Y軸、及びZ軸によって表される三次元座標によって定義され、三次元空間の各々の位置は、三次元座標の座標値で表される。なお、X軸に沿った方向を幅、Y軸に沿った方向を奥行き、及びZ軸に沿った方向を高さということがある。
【0050】
物体2の三次元形状を表す三次元形状データのデータフォーマットとして、例えばポリゴン4を組み合わせて物体2の輪郭を構成するデータフォーマットが用いられる場合がある。
【0051】
ポリゴン4とは、物体2の形状を構成する平面または曲面の各々の形成面のことである。ポリゴン4の形状に制約はないが、例えば三角形や四角形といった多角形が用いられ、複数のポリゴン4を組み合わせることによって物体2の形状が構成される。
【0052】
ポリゴン4を用いて物体2の形状を定義した三次元形状データには、物体2の形状に関する情報、及び物体2の属性に関する情報が含まれる。
【0053】
物体2の形状に関する情報には、例えば各々のポリゴン4の形状、位置、及び配置方向、並びに、隣り合うポリゴン4との接続に関する情報のように、物体2の形状を表す情報が含まれる。物体2の属性に関する情報には、各々のポリゴン4によって表される物体2の各々の箇所における性質、例えば物体2の色、材質、及び強度が含まれ、物体2の各々の箇所における性質が該当箇所に配置されるポリゴン4と対応付けられて管理されている。以降では、形状に関する情報、及び属性に関する情報によって表される物事の特徴または傾向を「特性」ということにする。
【0054】
物体2の三次元形状を表す三次元形状データには、ポリゴン4を組み合わせて物体2の輪郭を構成するデータフォーマットのほか、スプライン曲面やベジェ曲面などの関数曲面を組み合わせて物体2の輪郭を構成するデータフォーマットを用いてもよい。また、CAD(Computer-Aided Design)で使用されるB-rep(Boundary Representation)のような関数曲面を、物体2の輪郭を構成するデータフォーマットとして用いてもよい。すなわち、こうした関数曲面も物体2の形状を構成することから形成面の一例となる。以降では一例として、物体2の形成面にポリゴン4が用いられている場合について説明する。
【0055】
隣り合うポリゴン4同士は頂点と辺を共有しながら物体2の形状を表している。したがって、物体2がポリゴン4で構成されたままユーザが変形したい箇所の物体2の形状を変形させると、変形した箇所と隣り合うポリゴン4にも変形の影響が次々波及し、変形させる意図のない箇所まで物体2の形状が変形してしまうことがある。
【0056】
したがって、処理装置1は、例えばポリゴン4で物体2の形状を定義した三次元形状データをボクセル6で定義した三次元形状データに変換し、ボクセル6で構成された三次元形状データを処理することで物体2の形状を変形させることがある。
【0057】
図3は、物体2をボクセル6で構成した場合の物体2の三次元形状の一例を示す図である。
【0058】
ボクセル6とは、物体2の三次元形状を構成する三次元要素の一例であり、例えば立方体が用いられるが、直方体、三角錐、球、及び円柱等の他の三次元要素を用いてもよい。以降では一例として、ボクセル6に立方体を用いる例について説明する。
【0059】
ボクセル6を積み上げることで所望の物体2の三次元形状が表現される。また、各ボクセル6には、例えば色、強度、材質、及び質感等のボクセル6の性質を表す属性を設定してもよい。ボクセル6の有無によって物体2の形状が表され、ボクセル6の属性によって、ボクセル6が配置された箇所の物体2の色や材質といった属性が表現される。
【0060】
なお、「材質」とは、樹脂、金属、及びゴム等の材料のジャンルを表す情報、ABS及びPLA等の材料名を表す情報、市販されている材料の商品名、商品番号等を表す情報、ISO及びJIS等の規格で定められている材料名、略称、番号等の材料を表す情報、並びに、熱伝導率、導電率、及び磁性等の材料特性を表す情報の少なくとも1つの情報を含む。
【0061】
また、「質感」とは、物体2の反射率、透過率、光沢、及び表面性状等の色だけではない物性情報、並びに、触り心地を表す属性を表す。
【0062】
物体2の属性には、周期、数式、及び他の三次元形状データの少なくとも1つの情報を用いて設定される属性パターンを含む。属性パターンとは、一定周期の繰り返し、グラデーション、数式で表される傾斜や極点による表現、他の三次元形状データ等に従って三次元形状データの色、材質、質感等を連続的に変更すること、三次元形状データの指示された範囲を指示された形状で充填すること、並びに、連続的に変更すること、の少なくとも1つを含む。
【0063】
上述したように、物体2の三次元形状は、三次元空間におけるボクセル6の集合によって表されるが、具体的には、例えば三次元空間を定義する三次元座標の座標と各々の座標に対応した要素値によって表される。
【0064】
三次元空間における座標を(X、Y、Z)で表せば、座標(X、Y、Z)にボクセル6が存在する場合は、例えば座標(X、Y、Z)における要素値を1以上に設定する。一方、座標(X、Y、Z)にボクセル6が存在しない場合は、例えば座標(X、Y、Z)における要素値を0に設定する。すなわち、ボクセル6を用いて物体2の三次元形状を定義する三次元形状データは、ボクセル6の有無を示す座標(X、Y、Z)の要素値と、ボクセル6に対応付けられた属性を含む。
【0065】
なお、三次元空間の位置は、必ずしも三次元空間における座標(X、Y、Z)で表される必要はなく、例えば三次元空間を分割することによって三次元空間に仮想的に生じる分割された各々の区画、すなわち、三次元領域のインデックス番号で表してもよい。
【0066】
例えば、物体2を含む三次元空間がX軸、Y軸、及びZ軸方向に沿ってそれぞれ100区画に分割されている場合、三次元領域に対して、X軸、Y軸、及びZ軸方向に沿ってそれぞれ“0”~“99”のインデックス番号を対応付ける。X軸、Y軸、及びZ軸方向におけるそれぞれのインデックス番号の組み合わせを[IX、IY、IZ]とすれば、100×100×100に分割された三次元空間に存在する1000000個の三次元領域は、インデックス番号[0、0、0]~インデックス番号[99、99、99]で表される。この場合、例えばインデックス番号[IX、IY、IZ]に対応付けられた値が1以上であれば、インデックス番号で表される位置にボクセル6が存在することを表し、0であれば、インデックス番号で表される位置にボクセル6が存在しないことを表す。
【0067】
なお、三次元空間の座標系は、3次元の直交座標に限定するものではなく、例えば原点からの距離rと角度θを用いた極座標で表してもよい。この場合、三次元空間が座標(X、Y、Z)のピッチごとに1、2、3...とインデックス番号で表せるのと同様に、距離r及び角度θのピッチごとにインデックス番号を対応付け、インデックス番号で表される位置に1以上の値を指定してボクセル6が存在することを表せばよい。
【0068】
なお、1以上の値にそれぞれ異なる形状のボクセル6を対応付けておけば、設定した値に対応する形状のボクセル6が三次元空間の指定した位置に配置される。
【0069】
物体2に含まれる凹凸や幅の狭い面などの微細形状をボクセル6で表す場合、できるだけ小さいボクセル6を用いた方が、物体2の三次元形状を詳細に表すことができる。例えば、物体2に含まれる微細形状が0.5mmである場合、1mm四方の立方体のボクセル6を用いるよりも、物体2の微細形状より小さい0.2mm四方の立方体のボクセル6を用いて微細形状を表した方が、物体2の三次元形状が詳細に表される。
【0070】
図4は、0.5mmの微細形状を有する
図2に示した物体2の三次元形状を、0.2mm四方の立方体のボクセル6を用いて表現した
図3の三次元形状に対して、切断面3で切断した場合の断面の一例を示す図である。
【0071】
微細形状より短い辺を有するボクセル6を用いて物体2の三次元形状を表しているため、
図4に示す物体2の三次元形状は、微細形状を含めて物体2の本来の三次元形状に近づいたものになる。
【0072】
しかしながら、物体2をすべて同じ大きさのボクセル6で表した場合、例えば
図4に示した物体2の内部も0.2mm四方の立方体のボクセル6で表されることになる。一方、
図4に示す物体2の内部は微細形状部分に比べて体積が大きいことから、物体2の内部は、例えば1cm四方の立方体のボクセル6で構成しても、物体2の三次元形状を表す上で支障はない。
【0073】
このように、物体2の三次元形状をボクセル6で表す場合、物体2のすべての箇所を予め定めた同じ大きさのボクセル6で構成してしまうと、物体2の三次元形状を表す上で必要以上に小さいボクセル6で構成される箇所が発生してしまうことがある。このようにボクセル6の数が必要以上に増大すると、物体2の三次元形状に関する処理の処理時間が長くなったり、物体2の三次元形状を表すボクセル6のデータサイズが増大し、物体2の三次元形状を扱うのに必要となる記憶容量が足りなくなったりする弊害が発生しやすくなる。
【0074】
したがって、本実施形態に係る三次元形状データの処理装置1は、物体2の三次元形状の処理に必要となる、物体2の三次元形状における箇所毎の特性にあわせて、配置するボクセル6の大きさを設定する。
【0075】
図5は、ポリゴン4を用いて物体2の形状を定義した三次元形状データを、ボクセル6を用いて定義した三次元形状データに変換する場合に、処理装置1のCPU11によって実行される三次元空間の分割処理の一例を示すフローチャートである。
【0076】
図5に示す三次元空間の分割処理を規定する処理プログラムは、例えば処理装置1のROM12に予め記憶されている。処理装置1のCPU11は、ROM12に記憶される処理プログラムを読み込み、三次元空間の分割処理を実行する。
【0077】
なお、CPU11は、三次元空間の分割処理を実行する前に、予め分割対象となる物体2の三次元形状を分析し、物体2の三次元形状のうち、例えば輪郭の曲率が最も大きい箇所のように、他の箇所に比べて形状の変化度合いが大きい箇所(「凹凸箇所」という)を特定する。その上で、CPU11は、凹凸箇所の三次元形状を表現できるようなボクセル6が配置される三次元領域の大きさ、すなわち、三次元領域の最終到達サイズを設定し、例えば不揮発性メモリ14に記憶しておく。
【0078】
CPU11は、例えば凹凸箇所に表現されている三次元形状の最小寸法の半分を三次元領域の最終到達サイズの一辺とするというように、三次元形状の寸法を用いた演算によって三次元領域の最終到達サイズを設定してもよい。例えば最小の微細形状が0.5mmである
図4に示した物体2の三次元形状の場合、微細形状より小さい0.2mm四方の大きさを三次元領域の最終到達サイズに設定し、三次元領域の最終到達サイズと同じ大きさのボクセル6を三次元領域に配置すればよい。
【0079】
三次元領域の最終到達サイズはCPU11の演算によって設定される場合に限られず、ユーザが指定した値を三次元領域の最終到達サイズとして使用してもよい。
【0080】
なお、三次元領域の最終到達サイズを予め設定するか否かは選択可能であり、CPU11は、必ずしも三次元領域の最終到達サイズを設定しなくてもよい。
【0081】
ステップS10において、CPU11は、輪郭がポリゴン4によって構成された物体2が配置された三次元空間を、例えばX軸、Y軸、及びZ軸の各軸方向に沿って予め定めた間隔で分割し、三次元空間に複数の三次元領域を生成する。
【0082】
図6は、三次元空間に配置された
図2に示した物体2の三次元形状を、X軸、Y軸、及びZ軸の各軸方向に沿って予め定めた間隔で分割した例を示す図である。説明の便宜上、
図6では、XZ平面と直交する方向から眺めた場合の物体2の分割状態を二次元的に示している。実際には、Y軸方向に物体2の奥行きがあり、物体2はY軸方向にもXZ平面に沿った平面で分割されていることに注意する。以降では、分割された各々の三次元領域を「領域8」と表すことにする。
【0083】
最初に三次元空間を分割する場合に用いられる、各軸方向に沿った規定の分割間隔を「初回の分割サイズ」という。例えば領域8の最終到達サイズが設定されている場合、CPU11は、領域8の最終到達サイズから逆算することで初回の分割サイズを設定してもよい。例えば、CPU11は、領域8の最終到達サイズにおける1辺の長さのN倍(Nは1より大きい実数)を初回の分割サイズに設定すればよい。
【0084】
ステップS10では、CPU11は、物体2が配置された三次元空間を初回の分割サイズで複数の領域8に分割する。
【0085】
後ほど説明するように、CPU11は、三次元空間を階層的に分割する。したがって、CPU11は、領域8の最終到達サイズの他、三次元空間を分割する階層数、及び各階層で分割された領域8を更に分割する場合の領域8の各軸方向に沿った分割数のことである領域8の分割数を考慮して、初回の分割サイズを含む各階層における分割サイズを、物体2の分割を開始する前に予め設定する。
【0086】
例えば、領域8の各辺の最終到達サイズが0.2mmで、分割対象となる三次元空間の大きさがX軸、Y軸、及びZ軸の各軸方向に沿ってそれぞれ1000mmである場合、三次元空間に対する分割の階層数を4階層とすれば、CPU11は、例えば初回の分割サイズを100mm、2回目の分割サイズを20mm、及び3回目の分割サイズを2mmに設定する。その上で、CPU11は、第1階層では初回の分割サイズに従い、物体2を含む三次元空間を各辺100mmの立方体で表される領域8に分割し、第2階層では2回目の分割サイズに従い、各辺100mmの立方体で表される領域8を各辺20mmの立方体で表される領域8に分割する。更に、CPU11は、第3階層では3回目の分割サイズに従い、各辺20mmの立方体で表される領域8を各辺2mmの立方体で表される領域8に分割し、第4階層では領域8の最終到達サイズに従い、各辺2mmの立方体で表される領域8を各辺0.2mmの立方体で表される領域8に分割する。
【0087】
また、領域8の各辺の最終到達サイズが同じ0.2mmであっても、分割の階層数を5とすれば、CPU11は、初回の分割サイズを200mm、2回目の分割サイズを50mm、3回目の分割サイズを10mm、及び4回目の分割サイズを1mmに設定する。その上で、CPU11は、第1階層では初回の分割サイズに従い、物体2を含む三次元空間を各辺200mmの立方体で表される領域8に分割し、第2階層では2回目の分割サイズに従い、各辺200mmの立方体で表される領域8を各辺50mmの立方体で表される領域8に分割する。更に、CPU11は、第3階層では3回目の分割サイズに従い、各辺50mmの立方体で表される領域8を各辺10mmの立方体で表される領域8に分割し、第4階層では4回目の分割サイズに従い、各辺10mmの立方体で表される領域8を各辺1mmの立方体で表される領域8に分割する。最後に、CPU11は、領域8の最終到達サイズに従い、各辺1mmの立方体で表される領域8を各辺0.2mmの立方体で表される領域8に分割する。
【0088】
各階層では同じ大きさの領域8が得られるように、CPU11は、分割対象となる三次元空間の分割前の大きさを、各階層に対応した分割サイズで割り切れるような大きさに設定しておくことが好ましい。
【0089】
なお、CPU11は、必ずしも三次元空間を分割する階層数、及び各階層における分割サイズを、三次元空間の分割を開始する前に予め設定しておく必要はなく、領域8の分割毎に階層数、及び各階層における分割サイズを設定するようにしてもよい。
【0090】
例えば分割対象となる三次元空間の大きさがX軸、Y軸、及びZ軸の各軸方向に沿ってそれぞれ1000mmである場合、1000mmを予め定めた比率(例えば1/10)で縮小したもの(比率が1/10であれば100mm)を初回の分割サイズとして設定する。CPU11は、領域8の分割毎に予め定めた比率で領域8を分割し、分割された領域8の大きさが物体2の凹凸箇所に表現されている三次元形状の最小寸法より小さくなった場合に、分割された領域8の大きさが物体2の凹凸箇所を表すことができる大きさに達したとみなして分割を終了すればよい。この場合、分割を終了した時点における領域8の大きさが最終到達サイズということになる。
【0091】
ここでは一例として、領域8の形状が立方体となるように三次元空間を分割する例について説明したが、領域8の形状は立方体に限られない。領域8の形状はボクセル6と同じく直方体、三角錐、球、及び円柱等の他の形状であってもよい。X軸、Y軸、及びZ軸の各軸方向に沿って三次元空間を分割する際の間隔を軸毎に異なるように設定すれば、三次元空間が例えば幅1mm×奥行き2mm×高さ0.5mmといった直方体の領域8に分割される。また、CPU11は、X軸、Y軸、及びZ軸の各軸方向に沿った領域8の分割数を、例えばX軸方向には5分割、Y軸方向には4分割、及びZ軸方向には2分割というように、異なる分割数に設定してもよい。また、CPU11は、各階層の分割毎に異なる形状の領域8に分割してもよい。
【0092】
なお、CPU11は、三次元空間を幅、奥行き、及び高さの少なくとも1つが異なる領域8に分割する場合、分割対象となる三次元空間の大きさを、予め各階層に対応した分割サイズで割り切れるような大きさに設定しておくことが好ましい。
【0093】
ステップS20において、CPU11は分割した領域8毎に、領域8に干渉するポリゴン4を特定する。
【0094】
ポリゴン4に領域8が干渉するとは、物体2の表面、すなわち輪郭を表すポリゴン4が領域8に対して設定される予め定めた範囲(「干渉範囲」という)に接触または含まれる状態をいう。例えば、領域8自体を干渉範囲に設定した場合、ポリゴン4の少なくとも一部が領域8に接触または含まれる状態を、ポリゴン4が領域8に干渉するという。
【0095】
領域8と、領域8に干渉するポリゴン4の対応付けにはインデックス番号を用いた手法が用いられる。例えば、物体2の三次元形状が5000枚のポリゴン4で構成されているとする。また、物体2を含む三次元空間が初回の分割、すなわち第1階層の分割で、X軸、Y軸、及びZ軸の各軸方向に沿ってそれぞれ100分割され、三次元空間が1000000個の領域8に分割されているとする。
【0096】
この場合、CPU11は、各々のポリゴン4に対してインデックス番号P1~P5000を対応付けると共に、各々の領域8に対してインデックス番号[0、0、0]~インデックス番号[99、99、99]を対応付ける。CPU11は、領域8毎に領域8と干渉するすべてのポリゴン4を特定し、領域8のインデックス番号と当該領域8に干渉するすべてのポリゴン4のインデックス番号を対応付けてRAM13に記憶する。
【0097】
なお、物体2の輪郭がポリゴン4ではなく関数曲面で表されている場合、領域8と干渉する関数曲面の範囲がわかりくいことがある。したがって、CPU11は、関数曲面を複数の部分曲面(「パッチ」とも呼ばれる)に分割し、領域8と干渉する関数曲面をパッチ単位で特定してもよい。
【0098】
次に、領域8と干渉するポリゴン4の特定方法について具体的に説明する。
【0099】
図7は、物体2の輪郭を構成するポリゴン4のうち何れか1つのポリゴン4を選択し、選択したポリゴン4を含むように、選択したポリゴン4の周囲に存在する特定範囲の複数の領域8を三次元空間から抽出した一例を示す図である。説明の便宜上、
図7では、XZ平面と直交する方向から眺めた場合の選択したポリゴン4と複数の領域8の配置を二次元的に示している。また、
図7では、複数の領域8の中から特定の領域8を指定するため、複数の領域8に対してX軸方向に沿って1~5の位置番号を付与すると共に、Z軸方向に沿ってα~δの位置番号を付与している。以降では、この位置番号を用いて、例えば位置番号αの行と位置番号1の列とが交差する箇所にある左上の角に位置する領域8を「位置番号α1の領域8」というように指定する。
【0100】
まず、CPU11は、選択したポリゴン4と干渉する何れか1つの領域8をターゲット領域8Aとして特定する。具体的には、ポリゴン4を構成する三次元頂点Pの何れか1つを選出し、その三次元頂点Pが含まれる領域8を特定する。三次元頂点Pの座標Px、Py、 Pzを領域8のサイズDx、Dy、Dz で割った時の余りを含まない商が、三次元頂点Pを含むターゲット領域8Aのインデックスとして特定できる。なお、Dxは領域8の幅、Dyは領域8の奥行き、及びDzは領域8の高さを表す。
【0101】
CPU11は、例えば
図8に示すように、領域8の各々の頂点から等距離に位置する領域8の中心を基準点Qに設定し、基準点Qを中心とし、基準点Qから領域8の頂点までの距離th(「閾値th」という)を半径とする球9(
図9参照)に、選択したポリゴン4が接触または含まれるかによって、領域8に選択したポリゴン4が干渉しているか否かの特定を行う。
【0102】
なお、CPU11は、必ずしも基準点Qを領域8の中心に設定する必要はなく、領域8の内外を含め、何れの位置を領域8の基準点Qとしてもよい。この場合、基準点Qを中心とし、基準点Qから予め定めた距離を半径とする球9に、選択したポリゴン4が接触または含まれるかによって、領域8に選択したポリゴン4が干渉しているか否かの特定を行えばよい。また、基準点Qは一つの領域8に対して1箇所に限らず、複数設定してもよい。例えば、領域8の各々の頂点を基準点Qに設定し、各々の基準点Qを中心とする閾値thの半径を有する何れか1つの球9に選択したポリゴン4が接触または含まれる場合に、CPU11は、領域8に選択したポリゴン4が干渉していると特定してもよい。
【0103】
図9に示した領域8の干渉範囲の例では、干渉範囲を領域8より広い範囲に設定した。これに対してCPU11は、領域8そのものを干渉範囲に設定し、領域8に選択したポリゴン4が衝突するかを判定する公知の衝突判定を行い、領域8に選択したポリゴン4が衝突する場合に、領域8に選択したポリゴン4が干渉すると特定してもよい。
【0104】
なお、領域8の中心を基準点Qとすれば、閾値thは(1)式によって表される。なお、“√”は平方根を表し、“*”は乗算を表す。
【0105】
<数1>
th=√(Dx2+Dy2+Dz2))*0.5 ・・・(1)
【0106】
すなわち、領域8が直方体の場合、CPU11は、直方体に対する外接球の範囲を干渉範囲に設定する。CPU11は、領域8の形状が立方体及び直方体に限らず、如何なる形状であったとしても、領域8に対して仮想立方体を対応付け、仮想立方体に対する外接球の範囲を領域8の干渉範囲に設定してもよい。当然のことながら、CPU11は、領域8の形状に関係なく、領域8そのものの範囲を干渉範囲に設定してもよい。
【0107】
なお、領域8と干渉するポリゴン4の特定方法は上記の方法に限られない。例えば、CPU11は、基準点Qから最も近いポリゴン4までのベクトルと、領域8を形成する各頂点までのベクトルとの内積を取り、符号が一致しているか否かによって領域8と干渉するポリゴン4を特定してもよい。また、ポリゴン4上に点群を発生させ、点が含まれる領域8をポリゴン4に干渉している領域8として特定してもよい。
【0108】
図7において、CPU11は、選択したポリゴン4と干渉する複数の領域8のうち、二重枠で表されている位置番号β2の領域8をターゲット領域8Aとする。ターゲット領域8Aは基準三次元領域の一例である。
【0109】
CPU11は、ターゲット領域8Aの周囲を取り囲むように位置し、ターゲット領域8Aに隣接するすべての領域8を隣接領域8Bとして設定する。
図7に示す例の場合、斜線で影を付けた影付きの領域8が隣接領域8Bに含まれる。なお、実際の領域8は三次元的に配置されているため、Y軸に沿ってターゲット領域8Aと影付きの領域8の各々の前後に隣接するそれぞれ9個の領域8、すなわち、合計18個の領域8も隣接領域8Bとなる。したがって、
図7に示す例の場合、1つのターゲット領域8Aに対して26個の隣接領域8Bが設定される。隣接領域8Bは隣接三次元領域の一例である。
【0110】
CPU11は、隣接領域8Bの各々について、選択したポリゴン4が干渉しているか否かを特定する。
【0111】
図10は、
図7に示した隣接領域8Bの各々について、選択したポリゴン4と干渉しているか否かを特定した特定結果の一例を示す図である。
図10において、“○”は選択したポリゴン4と干渉していることを表しており、“×”は選択したポリゴン4と干渉していないことを表している。ターゲット領域8Aが選択したポリゴン4と干渉していることは明らかであるため、ターゲット領域8Aにも“○”が記載されている。
【0112】
CPU11は、選択したポリゴン4が干渉している領域8に、選択したポリゴン4を対応付ける。具体的には、ターゲット領域8Aのインデックス番号に選択したポリゴン4のインデックス番号を対応付けてRAM13に記憶する。
【0113】
ターゲット領域8A、及び、一度でも選択したポリゴン4との干渉状態を特定した隣接領域8Bは、選択したポリゴン4との干渉状態が判明済みであるため、ターゲット領域8A及び隣接領域8Bには、選択したポリゴン4との干渉状態が判明済みであることを表す終了情報を対応付ける。
【0114】
図11は、
図10に示した特定結果を受けて、ターゲット領域8A及び隣接領域8Bに終了情報を対応付けた状態の一例を示す図である。
図11では終了情報が対応付けられた領域8に「済」の文字を記載している。
【0115】
CPU11は、位置番号β2のターゲット領域8Aに対する隣接領域8Bのうち、選択したポリゴン4と干渉する隣接領域8Bを新たなターゲット領域8Aに設定する。
図11の例では、位置番号β3の隣接領域8Bと、位置番号γ3の隣接領域8Bが新たなターゲット領域8Aに設定される。
【0116】
CPU11は、新たなターゲット領域8Aの各々に対して隣接領域8Bを設定し、設定した隣接領域8Bのうち、終了情報が対応付けられた隣接領域8Bを除いた残りの隣接領域8Bの各々について、選択したポリゴン4が干渉しているか否かを特定する。
【0117】
図11に示すように、新たなターゲット領域8Aが複数存在する場合、CPU11は、何れか1つの新たなターゲット領域8Aに対して隣接領域8Bを設定し、選択したポリゴン4が干渉しているか否かを特定した後、他の新たなターゲット領域8Aに対して順次同じ処理を行えばよい。
【0118】
図11に示す例のように、CPU11は、位置番号β3のターゲット領域8Aと、位置番号γ3のターゲット領域8Aにおけるそれぞれの隣接領域8Bのうち、位置番号γ4と位置番号δ4の隣接領域8Bに選択したポリゴン4が干渉していると特定する。
【0119】
CPU11は、選択したポリゴン4と干渉する隣接領域8Bがなくなるまで、新たなターゲット領域8Aの隣接領域8Bのうち、選択したポリゴン4と干渉する隣接領域8Bを特定し、選択したポリゴン4と干渉する隣接領域8Bを新たなターゲット領域8Aに設定する処理を繰り返し実行する。選択したポリゴン4と干渉する隣接領域8Bがなくなるとは、すべての隣接領域8Bに終了情報が対応付けられているか、または終了情報が対応付けられた隣接領域8Bを除いた残りの何れの隣接領域8Bにも選択したポリゴン4が干渉していない状態をいう。
【0120】
次に、
図12に示すように、位置番号γ4の隣接領域8Bと位置番号δ4の隣接領域8Bが新たなターゲット領域8Aに設定されると、これらの新たなターゲット領域8Aの各々によって位置番号β5、位置番号γ5、及び位置番号δ5の領域8が隣接領域8Bに設定される。設定された隣接領域8Bのうち、位置番号δ5の隣接領域8Bが選択したポリゴン4と干渉していると特定された場合、今度は位置番号δ5の隣接領域8Bが新たなターゲット領域8Aに設定される。しかしながら、新たなターゲット領域8Aには選択したポリゴン4と干渉する隣接領域8Bが存在しないことから、選択したポリゴン4と干渉する領域8の特定が終了する。
【0121】
以上により、位置番号β2、位置番号β3、位置番号γ3、位置番号γ4、位置番号δ4、及び位置番号δ5に、選択したポリゴン4が干渉していると特定される。
【0122】
したがって、CPU11は、物体2の輪郭を構成するすべてのポリゴン4を選択し終えるまで物体2の輪郭を構成するポリゴン4を順次選択し、上記に示した方法により、各々のポリゴン4と干渉するすべての領域8を特定する。これにより、領域8のインデックス番号に干渉するすべてのポリゴン4のインデックス番号が領域8毎に対応付けられるため、領域8毎に干渉するポリゴン4が特定される。領域8に干渉するポリゴン4の個数は0個若しくは1個の場合もあれば、複数の場合もある。
【0123】
CPU11は、領域8毎に干渉するポリゴン4を特定した後、
図5に示した三次元空間の分割処理のステップS30において、領域8の大きさが、干渉するポリゴン4によって表される物体2の三次元形状の箇所における特性を再現するために必要となる大きさに達するまで、領域8の各々を再分割する再分割処理を行う。
【0124】
図13は、
図5のステップS30における再分割処理の流れの一例を示すフローチャートである。
【0125】
各々の領域8には、領域8に干渉するポリゴン4がそれぞれ特定されているため、ここでは一例として、CPU11が領域8毎に
図13に示す再分割処理を並列に実行する例について説明する。すなわち、CPU11は、初回の分割サイズで分割された各々の領域8を、分割された領域8の数と同じ数だけ用意したプロセスで実行されるそれぞれの再分割処理に1つずつ入力とすることで、分割した領域8毎に再分割処理を並列に実行する。
【0126】
なお、再分割処理を各々のプロセスで並列に実行するか否かはユーザの設定により選択され、再分割処理を並列に実行しない場合、例えば1つのプロセスで再分割処理が実行される。具体的には、CPU11は領域8を選択し、すべての領域8を選択し終えるまで、選択した領域8に対して再分割処理を順次実行する。
【0127】
ステップS100において、CPU11は、入力された領域8の再分割が必要であるか否かを判定する。領域8の再分割の必要性に関する判定は、例えば領域8が物体2の三次元形状における何れの箇所を再現しようとしているのかといった、物体2の形状に関する情報に基づいて行われる。
【0128】
領域8に干渉するポリゴン4が存在しない場合、領域8は、物体2の輪郭を表す箇所に配置された領域8ではなく、物体2の外部または物体2の内部に配置された領域8と考えられる。すなわち、領域8を再分割して領域8の大きさを小さくしても、物体2の三次元形状を現時点よりも詳細に表すことにつながりにくい。したがって、CPU11は、領域8の大きさが、領域8に対応した物体2の三次元形状の箇所を再現するために必要となる大きさに達したとみなして、領域8の再分割は不要と判定し、ステップS110に移行する。すなわち、領域8の再分割は停止される。
【0129】
また、領域8に干渉するポリゴン4が存在する場合であっても、領域8に干渉するポリゴン4が表す物体2の三次元形状を現時点の大きさの領域8で定義することができる場合、CPU11は領域8の再分割は不要と判定し、ステップS110に移行する。
【0130】
一方、領域8に干渉するポリゴン4が存在する場合で、領域8に干渉するポリゴン4が表す物体2の三次元形状を現時点の大きさの領域8で定義することができない場合、CPU11は領域8の再分割が必要と判定し、ステップS120に移行する。
【0131】
領域8に干渉するポリゴン4が表す物体2の三次元形状を現時点の大きさの領域8で定義することができるか否かの判定方法の例について具体的に説明する。
【0132】
領域8に干渉するポリゴン4が物体2の三次元形状における平面を表している場合、ポリゴン4によって表される物体2の三次元形状の箇所は、現時点の領域8の大きさで定義することができる。したがって、このような場合、CPU11は、領域8の大きさが、干渉するポリゴン4が表す物体2の三次元形状の箇所を再現するために必要となる大きさに達したとみなして、領域8の再分割は不要と判定する。すなわち、領域8の再分割は停止される。
【0133】
領域8に干渉するポリゴン4が物体2の三次元形状における平面を表しているか否かは、領域8に干渉するポリゴン4の単位法線ベクトルの分散σ2から判定すればよい。領域8に干渉するポリゴン4の単位法線ベクトルの分散σ2が0であれば、領域8に干渉するポリゴン4が複数あったとしても、各々のポリゴン4は物体2の三次元形状における同じ平面を表していることを意味する。なお、ポリゴン4の位置情報、及びポリゴン4の単位法線ベクトルの分散σ2を演算する過程に誤差が含まれることを考慮すれば、CPU11は、領域8に干渉するポリゴン4の単位法線ベクトルの分散σ2が予め定めた閾値σth以下となる場合に、領域8に干渉するポリゴン4が物体2の三次元形状における同じ平面を表していると判定すればよい。この場合の閾値σthは、ポリゴン4が同じ平面を構成しているとみなすことができる分散σ2の最大値に設定すればよい。
【0134】
この他、CPU11は、領域8に干渉するポリゴン4の形状のばらつきが閾値以下である場合に、領域8の再分割は不要と判定してもよい。なお、領域8の再分割の必要性に関する判定は、物体2の形状に関する情報ではなく、物体2の属性に関する情報に基づいて行ってもよい。
【0135】
例えば、領域8に干渉するポリゴン4によって表される物体2の三次元形状の範囲における属性毎の属性値のばらつきが予め定めた許容範囲に収まる場合に、CPU11は領域8の大きさが、干渉するポリゴン4によって表される物体2の三次元形状の箇所における属性を再現するために必要となる大きさに達したと判定して、領域8の再分割は不要と判定する。この場合、ステップS110に移行し、領域8の再分割は停止される。
【0136】
ここで、物体2の属性として物体2の色に注目した例について説明する。領域8に干渉するポリゴン4によって表される物体2の三次元形状の範囲における色に許容範囲を超えるばらつきが生じている場合、1つの領域8には属性毎に1つの属性値しか対応付けることができないため、現時点の大きさの領域8で物体2の色を定義することはできない。許容範囲を超える色のばらつきを表現するためには、現時点の大きさより小さい領域8で該当する範囲の色を表す必要がある。したがって、CPU11は領域8の再分割が必要と判定し、ステップS120に移行する。
【0137】
一方、領域8に干渉するポリゴン4によって表される物体2の三次元形状の範囲における色に許容範囲を超えるばらつきが生じていない場合、現時点の大きさの領域8で該当する範囲の色を表すことができる。したがって、CPU11は領域8の再分割は不要と判定し、ステップS110に移行する。
【0138】
このように、CPU11は、領域8に干渉するポリゴン4によって表される物体2の三次元形状の範囲における物体2の何れかの属性に許容範囲を超える属性値のばらつきが生じているか否かにより、領域8の再分割の必要性を判定してもよい。当然のことながら、物体2の属性に関する情報を用いて領域8の再分割が必要か否かを判定する場合、物体2の色だけでなく、例えば物体2の材質や、領域8に干渉している範囲のポリゴン4の面積のように、物体2の属性として物体2に対応付けられている属性であれば、如何なる種類の属性を用いて行ってもよい。すなわち、CPU11は、領域8及び領域8に干渉するポリゴン4の特性のばらつきに応じて、領域8の再分割の必要性を判定する。領域8に干渉するポリゴン4が物体2の三次元形状における平面を表しているのか、それとも曲面を表しているのかという違いは、領域8に干渉しているポリゴン4の範囲における特性のばらつきの一例を示すものである。
【0139】
また、CPU11は、物体2の形状に関する情報、及び物体2の属性に関する情報を組み合わせて領域8の再分割の必要性を判定してもよい。すなわち、CPU11は、領域8の大きさが、干渉するポリゴン4が表す物体2の三次元形状の箇所における特性を再現するために必要となる大きさに達した場合に領域8の再分割を停止し、ステップS110に移行する。そうでない場合には、ステップS120に移行する。
【0140】
ステップS110において、CPU11は、領域8に対してボクセル6の有無を判定する。領域8に対してボクセル6の有無を判定するとは、ボクセル6を領域8に配置するか否かを判定することをいう。
【0141】
CPU11は、領域8とポリゴン4との位置関係に応じて、領域8にボクセル6を配置するか否かを判定する。
【0142】
例えば、CPU11は、領域8に1つ以上のポリゴン4が干渉している場合、領域8が物体2の輪郭を表す箇所に対応するとみなし、領域8にボクセル6を配置してもよい。領域8にボクセル6を配置するとは、分割後の領域8と同じ大きさで、かつ、同じ形状のボクセル6を領域8に配置することをいう。
【0143】
領域8に干渉するポリゴン4が存在しない場合、領域8は物体2の輪郭に干渉しない距離まで離れた物体2の外部か、または、物体2の輪郭に干渉しない距離まで離れた領域8の内部を表す箇所に対応した領域8ということになる。領域8が物体2の外部を表す箇所に対応していれば領域8にボクセル6を配置する必要はないが、領域8が物体の内部を表す箇所に対応していれば領域8にボクセル6を配置した方がよい。
【0144】
したがって、CPU11は、領域8に干渉するポリゴン4が存在しない場合、すべての領域8に対するボクセル6の有無の判定が終了した後、領域8の隣接領域8Bにおけるボクセル6の有無の判定結果から、領域8に対するボクセル6の有無を判定してもよい。
【0145】
具体的には、ポリゴン4の法線ベクトルの逆側に位置する隣接領域8Bがポリゴン4で輪郭が定義された三次元形状の内側であり、次にボクセル有と判定された領域8に隣接するまで、隣接領域8Bに更に隣接するすべての領域8は内側と判定される(Region Growing)。逆に、三次元形状を含む三次元空間の端部に位置する三次元領域のうち、いずれのポリゴン4とも干渉していない領域8は明らかに三次元形状の外側であると判定できる。この領域8の隣接領域8Bは、次にボクセル有と判定された領域8に隣接するまで、隣接領域8に更に隣接するすべての領域8は外側と判定される。この両方の処理を実施してもよいし、内側の判定処理が完了したのちに、それ以外の残った領域8をすべて外側と見なしてもよい。なお、領域8に干渉するポリゴン4の有無は、領域8に干渉しているポリゴン4の範囲における特性のばらつきの一例を示すものである。
【0146】
また、CPU11は、
図5のステップS20で、領域8にポリゴン4が干渉しているか否かを特定するために領域8に設定した基準点Qから最も近くにあるポリゴン4までの符号付距離場(Signed Distance Field:SDF)を算出し、SDFの符号に応じて領域8に対するボクセル6の有無を判定してもよい。上述したように、基準点Qの位置に制約はなく、基準点Qは、例えば領域8の中心や領域8の頂点等に設定される。基準点Qが複数存在する場合には、例えば何れか1つの基準点Qを領域8のSDFを算出するための基準点Qとして選択してもよく、また、各基準点Qの位置を平均した位置を新たな基準点Qとして領域8のSDFの算出に利用してもよい。
【0147】
SDFの符号は、基準点Qが物体2の内部に含まれる場合にはプラスが設定され、物体2の外部に含まれる場合にはマイナスが設定される。SDFの絶対値(「距離値」ともいう)は、基準点Qから最も近くにあるポリゴン4までの距離を表す。すなわち、領域8のSDFが0以上であれば領域8が物体2の内部の箇所に対応し、領域8のSDFが0未満であれば領域8が物体2の外部の箇所に対応することを表している。なお、CPU11は、符号の意味を逆に定義付けてもよく、また、距離値と物体2の外側及び内側といった情報を個別に管理してもよい。
【0148】
領域8のSDFが0以上であれば領域8が物体2の内部の箇所に対応しているため、CPU11は、領域8にボクセル6を配置する必要があると判定する。
【0149】
CPU11は、ボクセル6が必要と判定した各々の領域8に対して、ボクセル6を配置し、物体2の三次元形状を構成する。その上で、CPU11は、配置したボクセル6に、ボクセル6が配置された領域8と干渉するポリゴン4の属性、及びボクセル6が配置された領域8と関連付けられている属性の少なくとも一方の属性及び属性値を対応付ける。
【0150】
ボクセル6に対応付ける属性の種類には、例えばSDF、領域8と干渉するポリゴン4の材質、領域8における物体2の構造解析結果、及び物体2における熱の伝わり方を表す解析結果等が含まれる。ボクセル6と対応付けられる属性値は、ボクセル6が配置される領域8内の属性値の平均値または代表値であってもよい。
【0151】
なお、ここでは一例として、ボクセル6が必要と判定した各々の領域8にボクセル6を配置したが、CPU11は、ボクセル6の配置が必要と判定した領域であっても、必ずしもボクセル6を配置する必要はない。例えば、CPU11は領域8にボクセル6を配置する代わりに、ボクセル6が配置された領域8と干渉するポリゴン4の属性、及びボクセル6が配置された領域8と関連付けられている属性の少なくとも一方の属性及び属性値を対応付けてもよい。
【0152】
また、CPU11は、ボクセル6は不要と判定した領域8、すなわち、三次元形状の外側を意味する各々の領域8にも、領域8と干渉するポリゴン4の属性、及び領域8と関連付けられている属性の少なくとも一方の属性及び属性値を対応付けてもよい。ボクセル6は不要と判定した領域8と関連付けられている属性には、例えば三次元空間の温度分布、及び風洞実験によって得られた物体2の周囲を流れる空気の流体解析結果等が含まれる。
【0153】
次に、
図13のステップS100の判定処理によって領域8の再分割が必要と判定された場合の移行先であるステップS120のセルブロック処理について説明する。
【0154】
図14は、
図13のステップS120におけるセルブロック処理の流れの一例を示すフローチャートである。
【0155】
以降の説明では、分割前の領域8と分割された領域8が混在するため、説明の便宜上、分割前の領域8を「領域8」といい、分割前の領域8を分割して得られた各々の領域8のことを「セル8」ということにする。また、分割された領域8の集合をセルブロックという。
【0156】
セルブロック処理の対象となった領域8の大きさでは、領域8に干渉するポリゴン4が表す物体2の三次元形状の箇所における特性を再現することができない。したがって、ステップS200において、CPU11は、予め定めていた2回目の分割サイズで領域8を複数のセル8に分割する。ステップS200は、領域8の分割に関する処理の一例である。
【0157】
ステップS210において、CPU11は、ステップS200で分割された複数のセル8の中から、何れか1つのセル8を選択する。説明の便宜上、ステップS210で選択したセル8を「選択セル8」ということにする。
【0158】
ステップS220において、CPU11は、選択セル8の大きさが予め定めていた最終到達サイズに達したか否かを判定する。なお、セル8の大きさが最終到達サイズに達するとは、セル8の大きさが最終到達サイズ以下の大きさになることをいう。
【0159】
選択セル8の大きさが最終到達サイズに達している場合には、現時点での選択セル8の大きさで、選択セル8が表す物体2の三次元形状の箇所における特性を再現することができる。したがって、CPU11は、最終到達サイズに達した選択セル8に対して、選択セル8に干渉するポリゴン4を特定するステップS230の処理や、選択セル8の再分割が必要か否かを判定するステップS240の処理を行わずに、ステップS250に移行する。選択セル8の再分割が必要なければ、再分割の判定に用いる情報である、選択セル8に干渉するポリゴン4の情報は不要となる。したがって、CPU11は、ステップS250に移行する前に、選択セル8のインデックス番号と選択セル8に干渉するすべてのポリゴン4のインデックス番号とを対応付けた情報をRAM13から消去して、RAM13の空き容量を増やしてもよい。また、CPU11は、ステップS250に移行する前に、選択セル8を再分割するために予め確保していたRAM13内の記憶領域を解放してもよい。
【0160】
ステップS250では、
図13のステップS110で説明した処理と同じ処理を行い、選択セル8にボクセル6を配置するか否かを判定し、ボクセル6の配置が必要と判定した場合に、選択セル8にボクセル6を配置する。ステップS110で説明したボクセル6の配置に関する様々な形態は、ステップS250にも適用される。ステップS250は、セル8へのボクセル6の配置に関する処理の一例である。
【0161】
一方、ステップS220の判定処理で選択セル8の大きさが最終到達サイズに達していないと判定された場合には、ステップS230に移行する。
【0162】
ステップS230において、CPU11は、選択セル8に干渉するポリゴン4を特定する。選択セル8は領域8を分割したものであるため、選択セル8に干渉するポリゴン4は必然的に領域8と干渉するポリゴン4の中に含まれる。したがって、CPU11は、物体2の輪郭を表すすべてのポリゴン4の中からではなく、領域8と干渉するポリゴン4の中から、
図5のステップS20で説明した手法を用いて、セル8と干渉するポリゴン4を特定すればよい。
【0163】
具体的には、CPU11は、領域8と干渉するポリゴン4のうち、選択セル8の基準点Qからの距離が閾値th以下であるポリゴン4のインデックス番号を選択セル8に干渉するポリゴン4として、選択セル8のインデックス番号と対応付ければよい。
【0164】
なお、分割の階層毎に閾値thの値やポリゴン4と選択セル8の衝突判定の範囲を変化させることで、ポリゴン4の干渉条件を1つ前の階層における干渉条件より緩めたり、きつくしたりしてもよい。また、例えば1つ前の階層では、選択セル8の基準点Qからポリゴン4までの距離と閾値thとの関係によって、選択セル8に干渉するポリゴン4を判定し、次の階層では、選択セル8とポリゴン4の衝突判定によって選択セル8に干渉するポリゴン4を判定するというように、1つ前の階層における干渉条件とは異なる干渉条件で、選択セル8に干渉するポリゴン4を特定してもよい。このように、ステップS230は、セル8に干渉するポリゴン4の特定に関する処理の一例である。
【0165】
ステップS240において、CPU11は、選択セル8の再分割が更に必要であるか否かを判定する。
【0166】
選択セル8の再分割が必要であるか否かの判定には、
図13のステップS100で説明した手法が用いられる。この場合、分割の階層毎に、例えば選択セル8に干渉するポリゴン4の法線ベクトルの分散σ
2と比較する閾値σ
thの値を変化させて、再分割が必要となる分割条件を1つ前の階層の分割条件より緩めたり、きつくしたりしてもよい。また、分割の階層毎に、選択セル8に対応する範囲におけるポリゴン4や三次元空間の属性毎の属性値のばらつきと比較する許容範囲を変更してもよい。また、分割の階層毎に、分割条件を変更したり、再分割の判定に用いる分割条件の数を増減したりしてもよい。
【0167】
選択セル8の再分割は必要ないと判定した場合、既に説明したステップS250に移行し、CPU11は、ボクセル6の配置が必要と判定した選択セル8にボクセル6を配置する。
【0168】
なお、CPU11は、分割の階層毎に、ボクセル6を選択セル8に配置するか否かを決定する判定基準を変更してもよい。
【0169】
一方、選択セル8の再分割が必要であると判定した場合、ステップS260に移行する。
【0170】
ステップS260において、CPU11は、
図14に示すセルブロック処理を実行する。すなわち、CPU11は、選択セル8を新たな領域8とみなして、
図14のステップS200の処理から順にセルブロック処理を再帰的に行う再帰処理を実行する。
【0171】
ステップS260を実行する前の三次元空間の分割の階層が第M階層であれば、ステップS260のセルブロック処理では第(M+1)階層の三次元空間の分割が実行される。ここで、“M”は1以上の整数を表す。
【0172】
なお、セルブロック処理の再帰処理において、上述したステップS200の説明における「初回の分割サイズ」は「M回目の分割サイズ」となり、「2回目の分割サイズ」は「(M+1)回目の分割サイズ」となる。セルブロック処理の再帰処理は、すべての選択セル8に対して再分割は必要ないと判定されるまで行われる。
【0173】
ステップS250の処理、及びステップS260の処理が終了した場合、ステップS270に移行する。
【0174】
ステップS270において、CPU11は、ステップS200で領域8を分割して生成した各々のセル8を、ステップS210ですべて選択したか否かを判定する。まだ選択していないセル8が存在する場合には、ステップS210に移行し、ステップS210において、CPU11は、まだ選択していないセル8の中から、何れか1つのセル8を選択する。すなわち、各々のセル8に対して、これ以上再分割を行わずにボクセル6の有無の判定結果に従ってセル8にボクセル6を配置するか、それとも、セル8の再分割がこれ以上必要ないと判定されるまでセルブロック処理を再帰的に呼び出してセル8を再分割し、ボクセル6の有無の判定結果に従って再分割後の各々のセル8にボクセル6を配置する処理が終了するまで、ステップS210~ステップS260の処理を繰り返し実行する。
【0175】
この場合、CPU11は、セルブロック処理を再帰的に実行する毎に、各セル8に対するボクセル6の有無の判定結果に従ってセル8にボクセル6を配置した配置結果を表示してもよい。セルブロック処理が再帰的に呼び出される毎に、物体2の三次元形状が、大きなボクセル6から次第に小さなボクセル6で構成されていく過程が表示部18に順次表示されるようになる。
【0176】
例えば領域8の最終到達サイズを予め設定していない場合や、分割の階層数及び分割される領域8の数が基準よりも多くなることが予め判明している場合に、ボクセル6で構成した物体2の三次元形状を階層毎に段階的に表示することは、三次元空間の分割処理が終了してから分割結果を表示する場合に比べて、三次元空間の分割処理が終了するまでのユーザの体感的な待ち時間の短縮につながる。
【0177】
ステップS270の判定処理において、ステップS200で領域8を分割して生成した各々のセル8は、ステップS210ですべて選択済みであると判定された場合には、
図14に示すセルブロック処理を終了する。
【0178】
なお、選択セル8の大きさが最終到達サイズに達したセル8はそれ以上再分割されないことが確定している。したがって、CPU11は、セル8の大きさが最終到達サイズに達する1つ前の分割の階層における
図14に示したセルブロック処理で、次の分割の階層によってセル8の大きさが最終到達サイズに達するか否かを判定し、セル8の大きさが最終到達サイズに達する場合には、例えば
図14のステップS230及びS240の処理を省略してステップS260のセルブロック処理を行い、三次元空間の分割処理の処理時間を短縮するようにしてもよい。
【0179】
図14に示すセルブロック処理の例では、セル8を順次選択してセル8の再分割が必要か否かを判定したが、ステップS270の処理を削除し、ステップS210でセル8を選択する代わりに、分割されたセル8の数と同じ数のプロセスを生成してもよい。各々のプロセスは、ステップS220~S260の処理を実行する。CPU11は、各々のプロセスに1つずつ分割されたセル8を入力することで、分割されたセル8毎にステップS220~S260の処理が、ステップS260で再帰的に呼び出されたセルブロック処理を含めて並列に実行されることになる。
【0180】
図15及び
図16は、
図5に示した三次元空間の分割処理を実行した実行結果の一例を示す図であり、
図4に示した物体2と同じ箇所における物体2の三次元形状をボクセル6で表したものである。
【0181】
図15は、物体2に対して3階層の分割が行われ、初回の分割サイズに対応する3.2mm四方の立方体で表されるボクセル6Aと、2回目の分割サイズに対応する0.8mm四方の立方体で表されるボクセル6Bと、3回目の分割サイズに対応する0.2mm四方の立方体で表されるボクセル6Cの3種類の大きさのボクセル6で構成されている物体2の例を示している。
【0182】
図16は、物体2に対して4階層の分割が行われ、初回の分割サイズに対応する3.2ボクセル6Aと、2回目の分割サイズに対応する0.8mm四方の立方体で表されるボクセル6Bと、3回目の分割サイズに対応する0.2mm四方の立方体で表されるボクセル6Cと、4回目の分割サイズに対応する0.05mm四方の立方体で表されるボクセル6Dの4種類の大きさのボクセル6で構成されている物体2の例を示している。
【0183】
例えば領域8の最終到達サイズ、三次元空間を分割する階層数、領域8の分割サイズ、領域8にポリゴン4が干渉しているか否かを規定するポリゴン4の干渉条件、及び領域8の再分割が必要か否かを規定する領域8の分割条件といった、領域8の大きさに影響を与える諸条件の少なくとも1つを変更することで、
図15及び
図16に示すように、物体2を構成するボクセル6の大きさが変化する。したがって、物体2の三次元形状における箇所毎の特性に応じて、領域8の大きさに影響を与える諸条件を設定すれば、各箇所を含む領域8の大きさが、各箇所における物体2の特性を再現するために必要となる大きさに設定される。
【0184】
図4に示した領域8の再分割処理では、CPU11は、領域8の再分割が不要であると判定した場合に、領域8に対してボクセル6の有無を判定した。しかしながら、ボクセル6の有無の判定タイミングは、領域8の再分割が不要と判定された後に限られない。
【0185】
例えば再分割が必要であると判定された領域8は、再分割が不要であると判定された領域8よりも物体2の輪郭を表す箇所に対応した領域8である蓋然性が高い。したがって、CPU11は、再分割が必要であると判定された領域8にはボクセル6を配置すると判定してもよい。また、CPU11は、再分割が必要であると判定した領域8に対して即座にボクセル6を配置すると判定するのではなく、領域8を再分割して生成したセル8のうち、ボクセル6を配置すると判定したセル8の数に応じて、再分割が必要であると判定した領域8にボクセル6を配置するか否かを判定してもよい。具体的には、CPU11は、ボクセル6を配置すると判定したセル8の数が基準値を超えた場合、または、領域8から分割されたセル8に対して、ボクセル6を配置すると判定したセル8の割合が基準割合を超えた場合に、セル8の分割元である領域8にボクセル6を配置すると判定してもよい。
【0186】
また、CPU11は、例えば予め定めた階層までに分割された領域8に対してはすべてボクセル6が不要と判定し、予め定めた階層の次の階層から、領域8に対するボクセル6の有無を判定するようにしてもよい。
【0187】
図13のステップS100、及び
図14のステップ240では、個々の領域8の状態のみに基づき領域8の再分割が必要であるか否かを判定したが、他の領域8との分割に関する連続性に基づき、領域8の再分割が必要であるか否かを判定した方がよい場合が存在する。
【0188】
例えば特定の領域8に対する隣接領域8Bでは第2階層で再分割は不要であると判定されたにもかかわらず、特定の領域8だけが第10階層まで再分割が行われるという状況は、再分割の判定に影響を与えるノイズが特定の領域8に重畳していると考えられる。したがって、CPU11は、特定の領域8に対する再分割が必要であると判定した場合であっても、特定の領域8における分割の階層数が隣接領域8Bの階層数のうちで最大の階層数以上に設定された許容階層数を超えるような場合には、特定の領域8における分割の階層数を許容階層数に抑えるといった制限を加えてもよい。
【0189】
図5に示した三次元空間の分割処理では、分割条件を満たした場合に領域8の再分割を行ったが、CPU11は、領域8が分割条件を満たした場合であっても、領域8と干渉するポリゴン4、領域8、並びに、ポリゴン4及び領域8の少なくとも1つの状態が予め定めた再分割停止条件を満たす場合には、領域8の再分割を停止してもよい。
【0190】
例えば領域8に干渉しているポリゴン4の曲率、領域8に干渉しているポリゴン4と領域8との交差状況、隣接するポリゴン4同士の接続角度、並びに、隣接するポリゴン4との属性に関する連続性といった各種情報を、領域8に配置されるボクセル6の属性として設定することで、このボクセル6の属性からボクセル6が配置された領域8と干渉するポリゴン4を再現できるような場合には、CPU11は、再分割停止条件を満たしていると判定し、領域8の再分割を停止してもよい。また、ポリゴン4の反転や不連続といたポリゴン4のつながりに関する特定のエラーが検出された場合にも、CPU11は、再分割停止条件を満たしていると判定し、領域8の再分割を停止してもよい。
【0191】
なお、例えばSDFの符号によって物体2の内部であると判定された箇所に対応する領域8にボクセル6を配置する場合、次のような状況に注意する必要がある。
【0192】
図17は、物体2の輪郭を表す平面のポリゴン4A、4Bを含んだ三次元空間を立方体に分割することで生成された複数の領域8の一例を示す図である。説明の便宜上、
図17、並びに、後ほど説明する
図18及び
図19では、XZ平面と直交する方向から三次元空間を眺めた場合の三次元空間の状態を二次元的に示している。
【0193】
ポリゴン4A、4Bは物体2から飛び出した突起状の箇所を表しており、ポリゴン4A、4Bで囲まれた閉領域が物体2の内部を表し、基準点Qは領域8の中心に設定されている。また、領域8のうち、斜線で影を付けた影付きの領域8は、ボクセル6が配置されている領域8である。
【0194】
球9Cは、領域8Cの基準点Qを中心とし、半径が(1)式で表される閾値thに設定された領域8Cの外接球を表している。球9Cは領域8Cの干渉範囲であり、ポリゴン4Aのうち、球9Cと干渉するポリゴン4Aの範囲を点線で表している。同様に、球9Dは、領域8Dの基準点Qを中心とし、半径が(1)式で表される閾値thに設定された領域8Dの外接球を表している。球9Dは領域8Dの干渉範囲であり、ポリゴン4Bのうち、球9Dと干渉するポリゴン4Bの範囲を点線で表している。
【0195】
こうした状況において、領域8Cに対して
図13に示した再分割処理を行った場合、球9Cに干渉するポリゴン4はポリゴン4Aのみであるため、ステップS100の判定処理で領域8Cは、物体2の輪郭のうち平面に対応した箇所の領域8であると判定される。したがって、領域8Cの再分割は必要ないと判定され、ステップS110に移行することになる。
【0196】
一方、ステップS110では、領域8Cの基準点Qは物体2の内部に含まれないため、領域8CのSDFの符号はマイナスとなり、領域8Cにボクセル6が配置されない。
【0197】
したがって、本来は
図18に示すように物体2の三次元形状に近づくように領域8Cが再分割され、ポリゴン4A、4Bで囲まれた閉領域に対応する領域8にボクセル6が配置されて欲しいにもかかわらず、
図17に示すように、領域8Cにはボクセル6が配置されないため、
図18に示すような三次元形状が再現されないことになる。同様のことは領域8Dに対しても発生する。
【0198】
こうした状況は、隣り合う領域8における各々の基準点Qの間をポリゴン4が通過する場合に発生する。したがって、CPU11は、分割対象となる領域8の基準点Qに対して設定する干渉範囲を、分割対象となる領域8と隣り合う領域8の基準点Qを含むように設定し、設定した干渉範囲と干渉するポリゴン4を分割対象となる領域8と干渉するポリゴン4として特定する。
【0199】
図19は、
図17に示した領域8Cに対して、領域8Dの基準点Qを含む球9Aの範囲を干渉範囲として設定した場合の一例を示す図である。
図19の例では、干渉範囲の設定に(2)式で定義した閾値thを用いている。
【0200】
<数2>
th=√(Dx2+Dy2+Dz2)*(0.5+Ratio) ・・・(2)
【0201】
(2)式のRatioは、閾値thによって表される干渉範囲を調整するための調整率である。
図19の例において、CPU11は、領域8Cの干渉範囲が領域8Cと隣り合う領域8Dの基準点Qを含むように、Ratioを0.5に設定しているが、Ratioは隣り合う領域8の基準点Q間の距離に応じて大きさを設定すればよい。
【0202】
図19に示すように領域8Cの干渉範囲を拡大することで、領域8Cに干渉するポリゴン4はポリゴン4Aとポリゴン4Bの2つとなり、ポリゴン4A、4Bの法線ベクトルの分散σ
2が閾値σ
thを超えることで、領域8Cに干渉するポリゴン4A、4Bが物体2の平面以外の箇所を表していると判定される。したがって、CPU11は、領域8Cの再分割が必要であると判定する。領域8Dについても(2)式に従った領域8Cと同様の干渉範囲を設定すれば、領域8Dの再分割が必要であると判定される。
【0203】
したがって、領域8C、8Dに対して
図18に示したような再分割が行われ、ポリゴン4A、4Bで囲まれた閉領域に対応する領域8にボクセル6が配置される。
【0204】
なお、
図13のステップS120に示したセルブロック処理を再帰的に実行する毎に、ボクセル6で構成した物体2の三次元形状を段階的に表示する手法について既に説明したが、こうしたボクセル6で構成した物体2を段階的に表示する手法は、物体2のLevel of Detail(LOD)処理に適用してもよい。
【0205】
例えばボクセル6で構成した物体2の位置をコンピュータ10の表示部18上で移動させる操作中は、物体2の三次元形状を領域8の大きさが初回の分割サイズにおけるボクセル6の配置結果に基づいた三次元形状で表示し、操作が終了した後に、物体2の三次元形状を領域8の大きさが最終到達サイズに達した最終階層におけるボクセル6の最終配置結果に基づいた三次元形状で表示する。
【0206】
これにより、物体2に対して何らかの操作が行われているか否かにかかわらず、常に物体2の三次元形状をボクセル6の最終配置結果に基づいた三次元形状で表示する場合よりも、コンピュータ10での物体2の描画速度や各種処理時間が短縮されることになる。
【0207】
また、CPU11は、領域8に特定の属性に対する属性値を対応付ける場合、例えば領域8の分割元となった分割前の領域8、または領域8を再分割した後のセル8に対応付けられた特定の属性に対する属性値から、領域8に対応付ける属性値を補間してもよい。
【0208】
例えば特定の領域8が第M階層、第(M+1)階層、及び第(M+2)階層というように、親、子、及び孫の関係で表される3階層の領域8に分割された構造を有する場合、CPU11は、親の領域8自体には属性値を対応付けずに、子及び孫の領域8に属性値を対応付ける。その上で、CPU11は、親の領域8に対して特定の属性に対する属性値を要求された場合、子または孫の領域8に対応付けられている特定の属性に対する属性値の平均値及び中央値といった基本統計量を用いて、親の領域8における特定の属性に対する属性値を設定してもよい。
【0209】
逆に、子及び孫の階層まで分割されなかった領域8に対して、例えば子や孫の階層に対応する分割が行われた場合の分割範囲に相当する領域8内の特定の箇所における、特定の属性に対する属性値を要求された場合、CPU11は、親の領域8に対応付けられている特定の属性に対する属性値が親の領域8全体に亘って対応付けられているとみなし、親の領域8に対応付けられている特定の属性に対する属性値を領域8内の特定の箇所の属性値として用いてもよい。
【0210】
以上、実施形態を用いて三次元形状データの処理装置1の一態様について説明したが、開示した処理装置1の形態は一例であり、処理装置1の形態は実施形態に記載の範囲に限定されない。本開示の要旨を逸脱しない範囲で実施形態に多様な変更又は改良を加えることができ、当該変更又は改良を加えた形態も開示の技術的範囲に含まれる。例えば、本開示の要旨を逸脱しない範囲で、
図5、
図13、及び
図14にそれぞれ示した三次元空間の分割処理、再分割処理、及びセルブロック処理の順序を変更してもよい。
【0211】
また、本開示では、一例として三次元空間の分割処理、再分割処理、及びセルブロック処理をソフトウェアで実現する形態について説明した。しかしながら、
図5、
図13、及び
図14に示したフローチャートと同等の処理を、例えばASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、又はPLD(Programmable Logic Device)に実装し、ハードウェアで処理させるようにしてもよい。この場合、三次元空間の分割処理、再分割処理、及びセルブロック処理をソフトウェアで実現した場合と比較して処理の高速化が図られる。
【0212】
このように、処理装置1のCPU11を例えばASIC、FPGA、PLD、GPU(Graphics Processing Unit)、及びFPU(Foating Point Unit)といった特定の処理に特化した専用のプロセッサに置き換えてもよい。
【0213】
また、処理装置1の処理は、1つのCPU11によって実現される形態の他、複数のCPU11、又はCPU11とFPGAとの組み合わせというように、同種又は異種の2つ以上のプロセッサの組み合わせで実行してもよい。更に、処理装置1の処理は、処理装置1の筐体の外部に位置する、物理的に離れた場所に存在するプロセッサの協働によって実現されるものであってもよい。
【0214】
実施形態では、処理装置1のROM12に処理プログラムが記憶されている例について説明したが、処理プログラムの記憶先はROM12に限定されない。本開示の処理プログラムは、コンピュータ10で読み取り可能な記憶媒体に記録された形態で提供することも可能である。例えば処理プログラムをCD-ROM(Compact Disk Read Only Memory)及びDVD-ROM(Digital Versatile Disk Read Only Memory)のような光ディスクに記録した形態で提供してもよい。また、処理プログラムを、USB(Universal Serial Bus)メモリ及びメモリカードのような可搬型の半導体メモリに記録した形態で提供してもよい。ROM12、不揮発性メモリ14、CD-ROM、DVD-ROM、USB、及びメモリカードは非一時的(non-transitory)記憶媒体の一例である。
【0215】
更に、処理装置1は、通信部19を通じて外部装置から処理プログラムをダウンロードし、ダウンロードした処理プログラムを、例えば不揮発性メモリ14に記憶してもよい。この場合、処理装置1のCPU11は、外部装置からダウンロードした処理プログラムを不揮発性メモリ14から読み込んで三次元空間の分割処理、再分割処理、及びセルブロック処理を実行する。
【符号の説明】
【0216】
1 処理装置、2 物体、3 切断面、4(4A、4B) ポリゴン、6(6A~6D) ボクセル、8(8C、8D) 領域(セル、選択セル)、8A ターゲット領域、8B 隣接領域、9(9A、9C、9D) 球、10 コンピュータ、11 CPU、12 ROM、13 RAM、14 不揮発性メモリ、15 I/O、16 バス、17 操作部、18 表示部、19 通信部、Q 基準点、th 閾値