以下、本発明の好適な実施形態について図面を参照して詳細に説明する。
<1.装置構成>
図1は、本発明の一実施形態に係る立体物造形用データ削減装置200を含む立体物造形システムのハードウェア構成図である。本実施形態に係る立体物造形用データ削減装置200は、汎用のコンピュータで実現することができ、図1に示すように、CPU(Central Processing Unit)1と、コンピュータのメインメモリであるRAM(Random Access Memory)2と、CPU1が実行するプログラムやデータを記憶するためのハードディスク、フラッシュメモリ等の大容量の記憶装置3と、キーボード、マウス等のキー入力I/F(インターフェース)4と、3Dプリンタやデータ記憶媒体等の外部装置とデータ通信するためのデータ入出力I/F(インターフェース)5と、液晶ディスプレイ等の表示デバイスである表示部6と、を備え、互いにバスを介して接続されている。
3Dプリンタ7は、汎用の3Dプリンタであり、立体物の三次元形状をポリゴンの集合で表現したポリゴンモデルである立体物造形用データを基に樹脂、石膏等の素材を加工して立体物を造形する立体物造形装置である。3Dプリンタ7は、データ処理部7aと出力部7bを有している。3Dプリンタ7のデータ処理部7aは、データ入出力I/F5に接続されており、データ入出力I/F5から受け取った削減された立体物造形用データを基に、出力部7bが立体物を造形するようになっている。
図1では、立体物造形用データ削減装置200と3Dプリンタ7は分離した形態で示されているが、現在市販されている殆どの3Dプリンタ製品には立体物造形用データ削減装置200の構成要素である、CPU1、RAM2、記憶装置3、キー入力I/F4(汎用コンピュータ向けキーボード・マウスではなく、テンキーレベルの数種のボタン)、データ入出力I/F5、表示部6(数行の文字を表示可能な小型液晶パネル、タッチパネルを重畳させキー入力I/F4を兼ねることも多い)も小規模ながら重複して備えている。従って、3Dプリンタ7自体が外部記憶媒体経由で立体物造形用データを直接受け取り、単独で立体物を造形する運用も可能になっている(特に民生用の3Dプリンタではこちらの形態の方が多い)。すなわち、図1に示した立体物造形システムを1つの筐体に収めて、“3Dプリンタ”という製品として流通することも多い。
図2は、本実施形態に係る立体物造形用データ削減装置の構成を示す機能ブロック図である。図2において、10は制御手段、20はグループ分類手段、30はポリゴンモデル構造化手段、40は頂点重複テーブル定義手段、50は削除対象ポリゴン設定手段、60は頂点座標テーブル更新手段、70は頂点重複テーブル更新手段、80は頂点構成テーブル更新手段、90はポリゴンモデル更新手段、100はグループ合成手段、110はポリゴンモデル合成手段、120は領域別ポリゴンモデル記憶手段、130は合成ポリゴンモデル記憶手段である。図2に示した立体物造形用データ削減装置は、ポリゴンモデル構造化手段30のみを単独で機能させることによりポリゴンモデル構造化装置として機能する。
制御手段10は、立体物造形用データ削減装置全体の制御を行う。グループ分類手段20は、削除対象ポリゴンの選定対象のポリゴンモデルに対して、各グループに属するポリゴンがそのグループ内の他のいずれかのポリゴンと、ポリゴンを構成する辺(2頂点)を共有するようにグループ分類する。ポリゴンモデル構造化手段30は、ポリゴンモデルから、各ポリゴンに含まれる各頂点を、同一座標の頂点を同一値とする頂点IDで表現し、ポリゴンを構成する各頂点を頂点IDで表現してポリゴンと対応付けて記録した頂点構成テーブルと、頂点構成テーブルに付与された頂点IDと座標値を対応付けて記録した頂点座標テーブルを作成する。頂点重複テーブル定義手段40は、頂点座標テーブルに記録されている頂点IDと同一座標となる重複先の頂点IDとの対応関係を記録する頂点重複テーブルを定義する。削除対象ポリゴン設定手段50は、頂点構成テーブルに記録されているポリゴンに対して所定の間隔で一部のポリゴンを削除対象ポリゴンとして設定する。
頂点座標テーブル更新手段60は、頂点構成テーブルを参照して削除対象ポリゴンを構成する複数の頂点IDを削除対象頂点として特定し、削除対象頂点を基に頂点座標テーブルを参照して複数の削除対象頂点の平均点を求め、削除対象頂点の1つを代表頂点とし、代表頂点以外の削除対象頂点の情報を頂点座標テーブルから削除するとともに、代表頂点の頂点IDに、平均点の座標値を対応付けて記録する。頂点重複テーブル更新手段70は、頂点重複テーブルにおいて、代表頂点以外の全ての削除対象頂点の重複先を代表頂点に設定する。頂点構成テーブル更新手段80は、頂点構成テーブルの中で、更新された頂点重複テーブルにおいて更新された頂点IDの値を、更新された重複先に変更し、変更された結果、ポリゴンを構成する同一の値をもつ頂点IDが2つ以上重複する場合、当該ポリゴンを頂点構成テーブルより削除する。ポリゴンモデル更新手段90は、更新された頂点構成テーブルの各頂点IDを、更新された頂点座標テーブルを参照しながら座標値に置換することにより、間引かれたポリゴンの配列で表現されたポリゴンモデルを作成する。
グループ合成手段100は、分類された各グループに対するポリゴンモデル構造化手段30、頂点重複テーブル定義手段40、削除対象ポリゴン設定手段50、頂点座標テーブル更新手段60、頂点重複テーブル更新手段70、頂点構成テーブル更新手段80、ポリゴンモデル更新手段90による一連の処理の実行により作成された複数のグループの更新されたポリゴンモデルを、領域別に単一の領域別ポリゴンモデルに合成する。ポリゴンモデル合成手段110は、複数セットの更新された領域別ポリゴンモデルを単一の合成ポリゴンモデルに合成する。制御手段10、グループ分類手段20、ポリゴンモデル構造化手段30、頂点重複テーブル定義手段40、削除対象ポリゴン設定手段50、頂点座標テーブル更新手段60、頂点重複テーブル更新手段70、頂点構成テーブル更新手段80、ポリゴンモデル更新手段90、グループ合成手段100、ポリゴンモデル合成手段110は、CPU1が、記憶装置3に記憶されているプログラムを実行することにより実現される。
領域別ポリゴンモデル記憶手段120は、領域別ポリゴンモデルを記憶した記憶手段であり、記憶装置3により実現される。領域別ポリゴンモデルとは、1つの領域を1セットとして構成されたポリゴンモデルである。合成ポリゴンモデル記憶手段130は、複数セットの領域別ポリゴンモデルを合成した単一のポリゴンモデルである合成ポリゴンモデルを記憶する記憶手段であり、記憶装置3により実現される。合成ポリゴンモデル記憶手段130に記憶される合成ポリゴンモデルは、3Dプリンタ7への出力に削減された立体物造形用データとなる。領域別ポリゴンモデル記憶手段120に記憶された領域別ポリゴンモデル、合成ポリゴンモデル記憶手段130に記憶される合成ポリゴンモデルは、いずれもポリゴンの集合体であり、ポリゴン単位で各ポリゴンが有する頂点を記録した形式となっている。
図2に示した各構成手段は、現実には図1に示したように、コンピュータおよびその周辺機器等のハードウェアに専用のプログラムを搭載することにより実現される。すなわち、コンピュータが、専用のプログラムに従って各手段の内容を実行することになる。なお、本明細書において、コンピュータとは、CPU等の演算処理部を有し、データ処理が可能な装置を意味し、パーソナルコンピュータなどの汎用コンピュータだけでなく、製品としての“3Dプリンタ”に組み込まれたボードコンピュータも含む。
図1に示した記憶装置3には、CPU1を動作させ、コンピュータを、立体物造形用データ削減装置として機能させるための専用のプログラムが実装されている。この専用のプログラムを実行することにより、CPU1は、制御手段10、グループ分類手段20、ポリゴンモデル構造化手段30、頂点重複テーブル定義手段40、削除対象ポリゴン設定手段50、頂点座標テーブル更新手段60、頂点重複テーブル更新手段70、頂点構成テーブル更新手段80、ポリゴンモデル更新手段90、グループ合成手段100、ポリゴンモデル合成手段110としての機能を実現することになる。また、記憶装置3は、領域別ポリゴンモデル記憶手段120、合成ポリゴンモデル記憶手段130として機能するだけでなく、立体物造形用データ削減装置としての処理に必要な様々なデータを記憶する。
<2.処理動作>
<2.1.前処理>
次に、図1、図2に示した立体物造形用データ削減装置の処理動作について説明する。まず、医療用ボクセルデータからサーフェースデータである領域別ポリゴンモデルを作成する前処理について説明する。サーフェースデータとは、サーフェースモデリングにより立体構造を表面形状として表現したデータであり、多角形のデータであるポリゴンにより構成されるポリゴンモデルである。前処理は、コンピュータが公知のプログラムを実行することにより行われる。ここでは、公知のプログラムとして、米国ハーバード大学が中心に開発したオープンソースソフトウェアである「3D-Slicer」を用いた場合を例にとって説明する。まず、コンピュータが、全体ボクセルデータから、特定臓器領域のボクセルデータを抽出する。次に、コンピュータが、特定臓器領域のボクセルデータをポリゴンモデルであるサーフェースデータに変換する。このようにして得られた領域別ポリゴンモデルは、領域別ポリゴンモデル記憶手段120に格納される。前処理は、図1に示した立体物造形用データ削減装置を実現するコンピュータに、上記プログラムを実行させることにより行ってもよいし、図1に示した立体物造形用データ削減装置を実現するコンピュータとは別のコンピュータにより実行し、得られた領域別ポリゴンモデルを記憶装置3により実現される領域別ポリゴンモデル記憶手段120に格納するようにしてもよい。
本実施形態では、医療用ボクセルデータとして医用画像データ交換に関する国際標準規格であるDICOM形式のボクセルデータを用いる。また、ポリゴンモデルであるサーフェースデータとしてSTL(Standard Triangulated Language)データを用いる。STLデータとは、元来3Dグラフィックス分野におけるモデリングデータ交換に関する業界標準で、最近では3Dプリンタでも標準的に使用されるようになったもので、三次元形状を三角形のポリゴンの集合体で表現したデータである。そして、コンピュータが上記「3D-Slicer」を実行することにより、図3(a)に示すようなDICOM形式ボクセルデータから、図3(b)に示すような領域別のボクセルデータを抽出し、サーフェースモデル変換を行って図3(c)に示すようなポリゴンモデル(STLデータ)が得られる。領域別のボクセルデータの抽出、サーフェースモデル変換には、特許文献3等に記載されたMarching Cube法が用いられている。
図4〜図8に、「3D-Slicer」による処理画面の一例を示す。図4は、「3D-Slicer」の処理対象となるDICOM形式ボクセルデータを、複数のスライス画像として示した図である。図4の例では、人体頭部のサジタル像を256枚のスライス画像で示している。各スライス画像は、512×512画素で構成されている。
図5は、DICOM形式ボクセルデータを、4つの形態で表示した例である。図5において、上部に表示されているのは、ボリュームレンダリング像である。下部に表示されているのは、左側から順にアキシャル像、サジタル像、コロナル像である。
図6は、図5に示したDICOM形式ボクセルデータを「3D-Slicer」により変換して得られたポリゴンモデルのSTLデータを示す図である。図6において、上部に表示されているのは、STLデータのサーフェースレンダリング像である。図6の例では、眼球・脳領域しきい値:626.75以上(MRI撮影でボクセル値10bits幅の場合)、眼球結合組織Lしきい値:298.36-458.74、眼球結合組織Rしきい値:298.36-431.32を設定することにより、領域(組織)別に分類された領域別STLデータをサーフェースレンダリングしたものを示している。
図7は、「3D-Slicer」により得られた領域別STLデータをシェーディングにより陰影表現した図である。図8は、領域別STLデータを合成したポリゴンモデル(STLデータ)のサーフェースレンダリング像を示す図である。図8に示すFront Viewは、図6の上部に示したものと同一である。前処理の後は、図7に示したような領域別ポリゴンモデルが領域別ポリゴンモデル記憶手段120に記憶される。
<2.2.処理概要>
次に、図1、図2に示した立体物造形用データ削減装置の処理動作について説明する。図9は、本発明の一実施形態に係る立体物造形用データ削減装置の処理概要を示すフローチャートである。まず、グループ分類手段20が、領域別ポリゴンモデル記憶手段120から、1つの領域についての領域別ポリゴンモデルを読み込み、複数のグループに分類する(ステップS10)。次に、各グループのポリゴンモデルに対して、ポリゴンモデル構造化手段30、頂点重複テーブル定義手段40、削除対象ポリゴン設定手段50、頂点座標テーブル更新手段60、頂点重複テーブル更新手段70、頂点構成テーブル更新手段80、ポリゴンモデル更新手段90が、ポリゴン削減処理を実行する(ステップS20)。制御手段10が、全グループについてポリゴン削減処理が終了したか否かを判定し(ステップS30)、全グループについて終了していない場合は、未処理のグループに対してステップS20のポリゴン削減処理を実行する。全グループに対するポリゴン削減処理が終了した場合は、グループ合成手段100が、隔離された小体積グループの削除を行う(ステップS40)。続いて、グループ合成手段100は、全グループのポリゴンモデルの合成を行う(ステップS50)。制御手段10が、全領域について処理が終了したか否かを判定し(ステップS60)、全領域について終了していない場合は、未処理の領域に対してステップS10〜S50の処理を実行する。全領域に対する処理が終了した場合は、ポリゴンモデル合成手段110が、全領域の領域別ポリゴンモデルの合成を行う(ステップS70)。
<2.3.グループ分類処理>
まず、ステップS10において、グループ分類手段20がグループ分類処理を行う。具体的には、領域別ポリゴンモデルを、ポリゴンが接続されていない部分から、複数のグループに分類する。グループ分類処理の具体的な手法としては、公知の様々な手法を用いることができる。
<2.4.ポリゴン削減処理>
<2.4.1.ポリゴン単位削除>
次に、ステップS20におけるポリゴンモデル構造化手段30、頂点重複テーブル定義手段40、削除対象ポリゴン設定手段50、頂点座標テーブル更新手段60、頂点重複テーブル更新手段70、頂点構成テーブル更新手段80、ポリゴンモデル更新手段90によるポリゴン削減処理について説明する。ポリゴン削減処理におけるポリゴンの削除の手法として、ポリゴン単位削除と稜線単位削除の2方式が存在する。まず、ポリゴン単位削除について説明する。
図10は、処理対象とするポリゴン群の一例を示す図である。ポリゴンモデルは、図11に示されるように空間における三次元の値をもつポリゴン群であるが、図10の例では、紙面上での説明の便宜上、二次元空間に投影したポリゴン群を示している。図10の例では、削減前、18個の三角形のポリゴンからなるポリゴン群を示している。図10において、大文字のアルファベットA〜Nは特定のポリゴンに属する形式でなく、座標が異なる頂点を識別するために示している。大文字のアルファベットA〜Nは、ポリゴン群全体において頂点を識別するために、便宜上付されたものであり、後述する頂点座標配列データや、頂点構成テーブル、頂点座標テーブル、頂点重複テーブルには記録されていない(一部記載されているものは、理解を容易にするために便宜上用いられている。)。また、図10、図11には、ポリゴンIDP1〜P18、頂点A〜Nを各ポリゴンIDに対応付けて表現されたポリゴン別頂点番号V1a〜V18cが記載されている。ポリゴン別頂点番号V1a〜V18cは、説明の便宜上設けたものであり、頂点座標配列データ、頂点構成テーブル、頂点座標テーブル、頂点重複テーブルには記録されていない。
図11は、図10に示したポリゴン群を実現するための頂点座標配列データを示す図である。頂点座標配列データは、ポリゴンモデルを規定するデータであり、ポリゴンの集合体であるポリゴンモデルを配列構造で定義している。すなわち、図11は、STLデータの構造を示している。図11に示すように、頂点座標配列データは、ポリゴンを識別するポリゴン識別情報であるポリゴンIDP1〜P18に対応付けて、ポリゴンを構成する第1頂点、第2頂点、第3頂点の3つの頂点別に各座標値が記録されている。
ポリゴン別頂点番号は、その頂点が属するポリゴンのIDが特定される形式で頂点を表現したものである。具体的には、図10に示すように、頂点を示すVの後に、対応するポリゴンIDに含まれる数字、そして第1頂点、第2頂点、第3頂点の別を示すa、b、cのいずれかの小文字のアルファベットで表現する。例えば、図11の1行目に示すように、ポリゴンID“P1”のポリゴン(ポリゴンP1)の第1頂点は、“V1a”と表現される。頂点番号“V1a”に数字“1”が入っているため、ポリゴンP1の頂点であることが明確になっている。このポリゴン別頂点番号は、実際に頂点座標配列データに記録されているものではなく、図10との対応関係、頂点がどのポリゴンに所属するかを明らかにするため、便宜上図面に掲載したものである。また、図11の頂点座標配列データにおいて、各頂点の座標は、図10で示したA〜Nのいずれかに対応するため、各頂点の座標値にA〜Nを識別するアルファベットの小文字を添えて表現している。例えば、図11の1行目に示すように、ポリゴンP1の第1頂点V1aの座標値は、図10において“D”と表示されているので、“(Xd,Yd,Zd)”と表現される。各ポリゴンごとに、構成される3つの頂点に対応付けて3つの頂点の座標値が記録されている。
上記のような規則に従って作成されるため、頂点座標配列データにおいては、同一座標の頂点が複数箇所に重複して記録されることになる。例えば、図10に示した頂点Dは、6つのポリゴンP1,P2,P4,P5,P6,P7に共有されるため、座標値“(Xd,Yd,Zd)”は、頂点V1a,V2a,V4b,V5c,V6c,V7cとして6箇所に記録される。
図12は、ポリゴン単位削除の場合におけるポリゴン削減処理の詳細を示すフローチャートである。まず、ポリゴンモデル構造化手段30が、ポリゴンモデルの構造化を行う(ステップS22)。ポリゴンモデルの構造化とは、ポリゴンモデルを実現するデータである頂点座標配列データを、頂点構成テーブルおよび頂点座標テーブルで構成される構造に変換することにより、ポリゴンモデルにおける頂点関係(トポロジー・位相情報)が座標値(数値データ)から分離され、あるポリゴンの頂点の修正により影響を受ける周辺のポリゴンの頂点の探索が容易になり、編集し易い構造に組み替えることを意味する。
図13は、ステップS22のポリゴンモデルの構造化の詳細を示すフローチャートである。ステップS22のポリゴンモデルの構造化は、ポリゴンモデル構造化手段30により行われる。まず、頂点構成テーブル、頂点座標テーブル、頂点IDの初期化を行う(S101)。頂点構成テーブルは、各ポリゴンに含まれる各頂点を、同一座標の頂点を同一値とする頂点IDで表現し、ポリゴンを構成する各頂点を頂点IDで表現してポリゴンと対応付けて記録したテーブルである。頂点IDは、頂点を識別するための頂点識別情報であり、頂点を一意に特定することができれば、どのようなものを用いてもよいが、演算処理の効率化のため、本実施形態では、0から始まるシリアルな整数値を用いている。頂点座標テーブルは、頂点構成テーブルに付与された頂点IDと座標値を対応付けて記録したテーブルである。頂点構成テーブル、頂点座標テーブルの初期化は、各項目が記録されていない状態にすることを意味する。また、頂点IDの初期化として現在の頂点ID=0に設定する。さらに、ハッシュ値とリンク先頂点IDを対応付けた先頭位置テーブルも初期化する。先頭位置テーブルの初期化は、リンク先頂点IDを全て“−1”に設定することにより行われる。頂点座標テーブルと先頭位置テーブルの2つのテーブルによりハッシュ値別頂点座標テーブルを実現する。
次に、頂点座標配列データよりポリゴンIDと、そのポリゴンIDに対応する1つの頂点座標値を抽出する(S102)。例えば、図11に示した頂点座標配列データからは、ポリゴンID“P1”と第1頂点の頂点座標値(Xd,Yd,Zd)が抽出される。
続いて、抽出された頂点座標値(Xd,Yd,Zd)よりハッシュ値を算出する(S103)。具体的には、まず、ポリゴンモデル内の全てのポリゴンの3次元座標値x,y,zの最大値Xmax,Ymax,Zmax、最小値Xmin,Ymin,Zminを求める。これは、図11に示したような頂点配列データの座標ごとの最大値、最小値を求めることになる。そして、座標値x,y,zの値を均等なS段階に分類し、整数値hx,hy,hz(0≦hx,hy,hz≦S−1)に変換する。整数Sとしては、例えばS=32を設定することができる。具体的には、以下の〔数式1〕に従った処理を実行することにより、hx,hy,hzを算出する。ただし、〔数式1〕に従った処理の後、小数点以下を切り捨てた値を、整数値hx,hy,hzとして得るものとする。
〔数式1〕
hx=(x−Xmin)・S/(Xmax−Xmin)
hy=(y−Ymin)・S/(Ymax−Ymin)
hz=(z−Zmin)・S/(Zmax−Zmin)
そして、以下の〔数式2〕に従った処理を実行することにより、ハッシュ値hを算出する。
〔数式2〕
h=hx+hy・S+hz・S2(0≦h≦S3−1)
次に、算出されたハッシュ値を用いて先頭位置テーブルを参照する(S104)。そして、そのハッシュ値に対応するリンク先頂点IDが先頭位置テーブルに登録されているか否かを判定する(S105)。ハッシュ値に対応するリンク先頂点ID(図中“リンク頂点ID”と表示)が“−1”、すなわち初期状態である場合は、そのハッシュ値に対応するリンク先頂点IDが未登録、すなわち既登録でないことを意味する。
この場合、先頭位置テーブルに頂点IDの記録を行う(S106)。具体的には、先頭位置テーブルのハッシュ値に対応するリンク先頂点IDに、現在の頂点ID(初期状態では“0”)を書き込む。続いて、頂点座標テーブルの現在の頂点IDの位置にステップS102で抽出した座標値を書き込む。この時、頂点座標テーブルにもリンク先頂点IDを書き込む欄があるが、初期状態の“−1”のままにする。また、頂点構成テーブルにステップS102で抽出したポリゴンIDと、現在の頂点IDを書き込む。ここでは、新規な頂点IDとして記録されることになる。そして、現在の頂点IDをインクリメントする(S107)。
一方、ステップS105において、ハッシュ値に対応するリンク先頂点IDが“−1”でない場合は、そのハッシュ値に対応するリンク先頂点IDが既登録であることを意味する。この場合、ステップS102で抽出した座標値と、頂点座標テーブルにおける既登録のリンク先頂点IDに対応する座標値が一致するか否かを判定する(S108)。判定の結果、両座標値が一致する場合は、頂点構成テーブルのポリゴンID、頂点順の位置に、現在の頂点IDを記録する(S109)。ステップS108における判定の結果、両座標値が異なる場合は、頂点座標テーブルのリンク先頂点IDを参照し、リンク先頂点IDが0以上であるか否かを判定する(S110)。判定の結果、リンク先頂点IDが0以上である場合は、その値を頂点IDとし、ステップS108に戻って、その頂点IDに対応する座標値とステップS102で抽出した座標値を照合する。ステップS110における判定の結果、リンク先頂点IDが負値(例えば“−1”)である場合は、頂点座標テーブルのその頂点IDに対応するリンク先頂点IDに現在の頂点IDを記録し、ステップS107に戻って、頂点座標テーブルの現在の頂点IDの位置にステップS102で抽出した座標値を記録する。この時、頂点座標テーブルの現在の頂点IDにおけるリンク先頂点IDについては、初期状態の“−1”のままにする。また、頂点構成テーブルにステップS102で抽出したポリゴンIDと頂点IDを記録する。そして、頂点IDをインクリメントする。
ステップS107またはS109の処理を終えたら、全ポリゴンに対して処理を終えたか否かを判定する(S111)。具体的には、まず、頂点順をインクリメントし、頂点順が“2”を超えたら、ポリゴンIDをインクリメントして頂点順を“0”にする。ポリゴンIDがポリゴン総数を超えていなければ、ステップS102に戻って処理を繰り返す。ポリゴンIDがポリゴン総数を超えていれば、全ポリゴンに対して処理を終えたと判定して処理を終了する。
ポリゴンモデル構造化手段30は、ハッシュ値算出手段、座標値照合手段、頂点構成テーブル処理手段、頂点座標テーブル処理手段を備えており、図13に示したポリゴンモデルの構造化処理は、これらの手段が連携することにより実現される。
図13に示したステップS22のポリゴンモデルの構造化処理の具体例について説明する。図10に示したポリゴン群が、その頂点の座標値により図14に示すようなハッシュ値をとる場合を例にとって説明する。図14の例では、説明の都合上2次元で表現し、上記〔数式2〕においてS=2とすると、h=hx+hy・2となり、頂点A,B,D,Eのハッシュ値がh=0、頂点C,Fのハッシュ値がh=1、頂点G,H,J,L,Mのハッシュ値がh=2、頂点I,K,Nのハッシュ値がh=3であることを示している。実際には上記〔数式2〕において、S=32に設定し、h=hx+hy・32+hz・1024となり、ハッシュ値hは、0〜32767の値をとるが、以下では、説明を簡略化するため、ハッシュ値は前述の0〜3の値をとるものとして説明していく。
図15は、S101における初期化時の各テーブルの状態を示す図である。図15(a)は頂点構成テーブル、図15(b)は先頭位置テーブル、図15(c)は頂点座標テーブルを示している。先頭位置テーブルには、ハッシュ値に頂点IDが対応付けられてリンク先頂点IDとして記録されている。ここでは、図14に示したようにハッシュ値が0〜3の値をとるため、先頭位置テーブルには、全てのハッシュ値0〜3に対応付けてリンク先頂点IDとして“−1”が記録されている。頂点座標テーブルには、頂点IDに対応付けられて頂点座標が記録されるとともに、リンク先頂点IDが記録されている。
図15(a)に示すように、頂点構成テーブルは、ポリゴンIDに対応付けて3つの頂点IDが記録されるようになっているが、頂点順は、左から0,1,2となっており、図11に示した第1頂点、第2頂点、第3頂点に対応している。ステップS101における初期化の際、頂点順=0に初期化される。ステップS102において、頂点座標配列データより、ポリゴンP1の第1頂点の座標値(Xd,Yd,Zd)を抽出して、ステップS103において、ハッシュ値“0”が算出されたものとする。ステップS104において、ハッシュ値“0”で先頭位置テーブルを参照すると、ステップS105において、リンク先の頂点IDが登録されていないため、先頭位置テーブルのハッシュ値“0”に対応付けて、ステップS106において、現在の頂点ID“0”をリンク先として記録する。
そして、ステップS107において、頂点座標テーブルにおける現在の頂点ID“0”の位置に、ステップS102において抽出した座標値(Xd,Yd,Zd)を記録し、リンク先頂点IDとして“−1”を記録する。さらに、ステップS107において、現在のポリゴンID“P1”の現在の頂点順“0”の位置に、現在の頂点ID“0”を記録する。この結果、各テーブルは、図16に示すような状態となる。そして、頂点IDをインクリメントして現在の頂点IDを“0”→“1”とする。また、頂点順をインクリメントして現在の頂点順を“0”→“1” とする。現在のポリゴンIDは“P1”であり、“P13”を超えていないため、ステップS111において、全ポリゴンに対して処理終了していないと判断され、ステップS102に戻る。
ステップS102において、頂点座標配列データより、現在のポリゴンID“P1”、現在の頂点順“1”に基づき、ポリゴンP1の第2頂点の座標値(Xb,Yb,Zb)を抽出する。そして、ステップS103において、座標値(Xb,Yb,Zb)に対してハッシュ値“0”が算出されたものとする。ステップS104において、ハッシュ値“0”で先頭位置テーブルを参照すると、ステップS105において、リンク先の頂点IDとして“0”が既登録であるため、ステップS108において、既登録の頂点ID“0”に対応する頂点座標テーブルの座標値(Xd,Yd,Zd)と、ステップS102で抽出した座標値(Xb,Yb,Zb)を照合する。照合の結果、不一致であるので、ステップS110において、頂点座標テーブルのリンク先の頂点IDが0以上であるか負の値であるかを判定する。
図16に示すように、リンク先の頂点IDが“−1”であるので、ステップS107において、頂点座標テーブルの現在の頂点ID“1”の位置に、ステップS102において抽出した座標値(Xb,Yb,Zb)を記録し、リンク先頂点IDとして“−1”を記録する。さらに、ステップS107において、頂点構成テーブルの、現在のポリゴンID“P1”の現在の頂点順“1”の位置に、現在の頂点ID“1”を記録する。この結果、各テーブルは、図17に示すような状態となる。そして、頂点IDをインクリメントして現在の頂点IDを“1”→“2”とする。また、頂点順をインクリメントして現在の頂点順を“1”→“2” とする。現在のポリゴンIDは“P1”であり、“P13”を超えていないため、ステップS111において、全ポリゴンに対して処理終了していないと判断され、ステップS102に戻る。
ポリゴンID“P1”、頂点ID“2”、頂点順“2”の場合は、ポリゴンID“P1”、頂点ID“1”、頂点順“1”の場合と同様に処理され、各テーブルは、図18に示すような状態となる。そして、頂点IDをインクリメントして現在の頂点IDを“2”→“3”とする。また、頂点順は、1つのポリゴンについて“0”“1”“2”の3つの値のみをとるため、ポリゴンIDをインクリメントして“P1”→“P2”とし、頂点順をリセットして現在の頂点順を“2”→“0” とする。現在のポリゴンIDは“P2”となり、“P18”を超えていないため、ステップS111において、全ポリゴンに対して処理終了していないと判断され、ステップS102に戻る。
ステップS102において、頂点座標配列データより、現在のポリゴンID“P2”、現在の頂点順“0”に基づき、ポリゴンP2の第1頂点の座標値(Xd,Yd,Zd)を抽出する。そして、ステップS103において、座標値(Xd,Yd,Zd)に対してハッシュ値“0”が算出されたものとする。ステップS104において、ハッシュ値“0”で先頭位置テーブルを参照すると、ステップS105において、リンク先の頂点IDとして“0”が既登録であるため、ステップS108において、既登録の頂点ID“0”に対応する頂点座標テーブルの座標値(Xd,Yd,Zd)と、ステップS102で抽出した座標値(Xd,Yd,Zd)を照合する。照合の結果、一致するので、ステップS109において、頂点座標テーブルの座標値が一致した頂点ID“0”を、頂点構成テーブルの、現在のポリゴンID“P2”の現在の頂点順“0”の位置に記録する。この結果、各テーブルは、図19に示すような状態となる。
上記のようにして、ポリゴンP18まで処理を行ってステップS111の判定により処理を終了する。このとき、各テーブルは、図20に示すような状態となる。すなわち、ハッシュ値が同一の他の座標値を頂点IDより最近傍に記録した単一の頂点IDがリンク先として対応付けられているものとなる。上記説明のように、ポリゴンモデルの構造化処理においては、ステップS108において座標値の照合を行い、不一致であれば頂点座標テーブルに登録するが、一致している場合は、次々に照合を繰り返していく。この処理は、頂点座標テーブルが大きくなり、既登録の座標値が多くなる程、負荷が高くなることになる。本実施形態では、ハッシュ値を用いてハッシュ値別頂点座標テーブルを参照することにより、頂点座標テーブルの全ての座標値の照合を行うことなく、ハッシュ値が異なる座標値とは一致しないことが自明なため照合対象から除外することができ、同一ハッシュ値の頂点座標テーブルのみを参照すればよいことになる。頂点座標テーブルの中で同一ハッシュ値をもつ座標値は、本実施形態では高々1/4程度であるが、前述の通り実際には上記〔数式2〕において、S=32に設定することが多く、そうすると頂点座標テーブルの中で同一ハッシュ値をもつ座標値は1/32767程度に削減され、全件と照合する場合に比べ照合時間も1/32767程度に短縮されることになる。このため、ポリゴンモデルの構造化処理を桁違いに高速に行うことが可能となる。
図20の例で、ハッシュ値が“0”の場合、図20(c)の頂点座標テーブルでは、リンク先頂点IDに従って、頂点ID“0”“1”“2”“6”のものだけ照合すれば、頂点座標の登録が可能となる。図20(b)に示した先頭位置テーブルを削除し、図20(c)に示した頂点座標テーブルよりリンク先頂点IDの欄を削除することにより、図21に示したような頂点構成テーブルと頂点座標テーブルを得ることができ、ポリゴンモデルの構造化は完了する。
次に、頂点重複テーブル定義手段40が、頂点重複テーブルを初期化する(ステップS23)。頂点重複テーブルは、頂点IDと重複先を対応付けたテーブルであり、初期値として、重複先がないことを示す“−1”が設定される。重複先がないことを示すことができれば、初期値として、“−1”以外を設定してもよい。図22に、頂点重複テーブルの初期化時点における頂点構成テーブル、頂点座標テーブル、頂点重複テーブルを示す。
頂点重複テーブルの初期化が行われたら、削除対象ポリゴンを設定し、頂点座標テーブルおよび頂点重複テーブルの更新を行う(ステップS24)。まず、削除対象ポリゴン設定手段50が、削除対象ポリゴンを設定する。削除対象ポリゴンの設定は、様々な手法で行うことができる。例えば、頂点構成テーブルに記録されたポリゴンから所定の間隔で間引くように設定することができる。例えば、4個ごとに間引く指定がなされている場合、4つの間隔で1つ間引く。すなわち3つ間を空けて1つ削除する設定を行う。ここでは、図23に示すように、削除対象ポリゴン設定手段50が、ポリゴンP6とポリゴンP16の2つのポリゴンを削除対象ポリゴンとして設定した場合を例にとって説明する。この例は、10個ごとに間引く指定がなされている場合に対応する。この場合、削除対象ポリゴン設定手段50は、ポリゴンP6から9個間を空けてポリゴンP16を削除する設定を行う。図23において、O、PはそれぞれポリゴンP6、ポリゴンP16の3頂点の平均座標を有する平均点を示している。削除対象ポリゴン設定手段50は、設定された削除対象ポリゴンを頂点構成テーブルから削除する。具体的には、図24に示すように、頂点構成テーブルからポリゴンP6の頂点IDを削除する。
続いて、頂点座標テーブル更新手段60が、削除された頂点IDに含まれていた頂点IDの内容を変更することにより頂点座標テーブルを更新する。具体的には、削除された頂点IDに含まれていた全ての頂点IDの平均座標を算出し、平均座標をもつ平均点を求める。そして、削除された頂点IDに含まれていた頂点のうち1つを代表頂点とし、代表頂点の頂点IDの座標値を平均座標の値で更新する。代表頂点は、削除された頂点IDに含まれていた頂点のいずれとしてもよいが、頂点IDが最小の値とすることが好ましい。特に、頂点IDが数字のみの場合、効率的に処理を行うことが可能となる。そして、他の頂点IDの頂点座標を頂点座標テーブルから削除する。この結果、図24に示すように、頂点座標テーブルの頂点ID“0”の頂点座標として、平均点Oを示す平均座標値(Xo,Yo,Zo)が記録され、頂点ID“6”“7”の頂点座標としてNULL値(図では空白)が記録される。
次に、頂点重複テーブル更新手段70が、代表頂点以外の頂点IDの重複先を代表頂点の頂点IDに設定する。代表頂点の頂点IDが“0”で、他の頂点の頂点IDが“6”“7”である場合、図24に示すように、頂点重複テーブルの頂点ID“6”“7”の重複先として、それぞれ“0”が記録される。
図25〜図27を用いて、2つ目の削除対象ポリゴンであるポリゴンP16を削除する場合について説明する。ポリゴンP6の場合と同様に、まず、削除対象ポリゴン設定手段50が、頂点構成テーブルから削除対象ポリゴンP16を削除する。具体的には、図25に示すように、頂点構成テーブルからポリゴンP16の頂点IDを削除する。
続いて、頂点座標テーブル更新手段60が、削除されたポリゴンP16の頂点IDに含まれていた全ての頂点IDの平均座標を算出し、平均座標をもつ平均点を求める。そして、削除された頂点IDに含まれていた頂点IDのうち1つの頂点IDを代表頂点の頂点IDとして“9”の座標値を平均座標の値で更新する。そして、他の頂点ID“10”“13”の頂点座標を頂点座標テーブルから削除する。この結果、図25に示すように、頂点座標テーブルの頂点ID“9”の頂点座標として、平均点Pを示す頂点IDの平均座標値(Xp,Yp,Zp)が記録され、頂点ID“10”“13”の頂点座標としてNULL値(図では空白)が記録される。
次に、頂点重複テーブル更新手段70が、代表頂点以外の頂点IDの重複先を代表頂点の頂点IDに設定する。代表頂点の頂点IDが“9”で、他の頂点の頂点IDが“10”“13”である場合、図25に示すように、頂点重複テーブルの頂点ID“10”“13”の重複先として、それぞれ“9”が記録される。
2つの削除対象ポリゴンが頂点構成テーブルから削除されたら、頂点構成テーブル更新手段80が、頂点重複テーブルを参照し、頂点構成テーブルの頂点IDの中で頂点重複テーブルにおいて重複先が設定されている頂点IDを変更する(ステップS25)。具体的には、頂点重複テーブルの重複先が初期値“−1”以外であるものについて、頂点構成テーブル上の頂点IDを、重複先の頂点IDに変更する。この結果、図26に示すように、ポリゴンP5,P7,P8,P9,P10,P11,P15,P17,P18に対応する頂点IDが変更される。
頂点IDの変更後、頂点構成テーブル更新手段80は、頂点IDに同一の値をもつ頂点IDが複数含まれるポリゴンを頂点構成テーブルから削除する。これは、ポリゴンが三角形である場合、3つの頂点中2つ以上の頂点が同一であれば、ポリゴンとして成り立たないためである。図26の例では、頂点構成テーブルにおいて、ポリゴンP5,P7,P10,P11,P15,P17の頂点IDに同一頂点IDが含まれている。例えば、ポリゴンP5の頂点構成には、頂点ID“0”が2つ含まれている。頂点IDに同一頂点IDが複数含まれるポリゴンを頂点構成テーブルから削除した結果、頂点構成テーブルは図27に示すような状態に更新される。図27に示すように、当初の頂点構成テーブルからはポリゴンP5,P6,P7,P10,P11,P15,P16,P17が削除されている。
頂点構成テーブルが更新されたら、ポリゴンモデル更新手段90が、頂点座標配列データを更新する(ステップS26)。具体的には、頂点座標テーブルを参照して、頂点構成テーブルの各頂点IDを頂点座標に置き換える。図27に示した頂点構成テーブル、図27に示した頂点座標テーブルからは図28に示したような頂点座標配列データが得られることになる。これを図11に示した元の頂点座標配列データと置き換える。この結果、図23に示したポリゴン群は、図29に示すようなポリゴン群に変更されることになる。図23に示したポリゴン群において設定された削除対象ポリゴンP6,P16だけでなく、ポリゴンP5,P7,P11,P15,P16,P17が削除されていることがわかる。
頂点座標配列データが更新されたら、制御手段10が、削減後の全ポリゴン数が、設定された目標値以下となっているか否かを判定する(ステップS27)。目標値としては、事前に任意の値を設定することができる。判定の結果、全ポリゴン数が目標値以下となっていない場合は、ステップS24に戻って、削除対象ポリゴン設定手段50が、残っているポリゴンの中から、他のポリゴンを削除対象ポリゴンとして設定する。ステップS27における判定の結果、全ポリゴン数が目標値以下である場合は、ポリゴン削減処理を終了する。図12のフローチャートに従った処理を実行することにより、各グループについて設定された目標値以下になるように、ポリゴン数が削減されることになる。ポリゴンモデルの構造化処理が行われていなければ、削除対象ポリゴンの3つの補正対象頂点と同一座標となる頂点の探索に大きな処理負荷を要することになる。ポリゴンモデルの構造化処理を行うことにより、処理負荷を大幅に削減することが可能となる。
<2.4.2.稜線単位削除>
次に、稜線単位削除について説明する。ここで、稜線とは、ポリゴンの辺を意味する。図30は、処理対象とするポリゴン群の一例を示す図である。図30に示したポリゴン群は、図23に示したものと同一のポリゴン構成となっており、ポリゴンを構成する全ての頂点の平均点でなく、削除対象辺の中点をO,Pとしている点のみが異なっている。稜線単位削除の場合も、ポリゴン単位削除の場合と同様、頂点座標配列データは、図11に示したようなものとなっている。
上記のような規則に従って作成されるため、頂点座標配列データにおいては、同一座標の頂点が複数箇所に記録されることになる。例えば、図10、図11に示した頂点Dは、6つのポリゴンP1,P2,P4,P5,P6,P7に共有されるため、座標“(Xd,Yd,Zd)”は、頂点V1a,V2a,V4b,V5c,V6c,V7cとして6箇所に記録される。
稜線単位削除の場合におけるポリゴン削減処理の概要は、図12に示したフローチャートと同様であり、ポリゴン単位削除の場合と比較して、ステップS24の処理が大きく異なるだけである。まず、ポリゴン単位削除の場合と同様に、ポリゴンモデル構造化手段30が、ポリゴン構造化テーブルの作成を行う(ステップS22)。具体的には、ポリゴン単位削除の場合と同様にして、頂点リンクテーブルを用いて、頂点構成テーブルおよび頂点座標テーブルを作成する。
さらに、頂点重複テーブル定義手段40が、ポリゴン単位削除の場合と同様にして頂点重複テーブルを初期化する(ステップS23)。この結果。図22に示したような、頂点構成テーブル、頂点座標テーブル、頂点重複テーブルが得られる。
頂点重複テーブルの初期化が行われたら、削除対象ポリゴンを設定し、頂点座標テーブルおよび頂点重複テーブルの更新を行う(ステップS24)。まず、削除対象ポリゴン設定手段50が、ポリゴン単位削除の場合と同様にして削除対象ポリゴンを設定する。ここでは、図30に示すように、ポリゴンP6とポリゴンP16の2つのポリゴンが削除対象ポリゴンとして設定されている場合を例にとって説明する。ここからは、ポリゴン単位削除の場合と異なる処理が行われる。削除対象ポリゴンが設定されると、さらに、削除対象ポリゴン設定手段50は、削除対象ポリゴンの1辺を削除対象辺として選定する。削除対象辺の選定は、様々な手法により行うことができるが、本実施形態では、削除対象ポリゴンを構成する全ての辺のうち最短のものを選定している。図30において、O、PはそれぞれポリゴンP6、ポリゴンP16の削除対象辺の両端2頂点の平均座標を有する平均点(削除対象辺の中点)を示している。次に、削除対象ポリゴン設定手段50は、頂点構成テーブルから削除対象ポリゴンを削除する。具体的には、図31に示すように、頂点構成テーブルからポリゴンP6の全ての頂点IDを削除する。
続いて、頂点座標テーブル更新手段60が、削除された頂点IDに含まれていた頂点IDのうち、削除対象辺の両端の2頂点の頂点IDの内容を変更することにより頂点座標テーブルを更新する。具体的には、削除された頂点IDに含まれていた削除対象辺の両端の2頂点の頂点IDの平均座標を算出し、平均座標をもつ平均点を求める。削除対象辺の2頂点の平均点は、削除対象辺の中点でもある。そして、削除された頂点IDに含まれていた頂点IDのうち1つの頂点IDを代表頂点として、代表頂点の頂点IDの座標値を平均座標の値で更新する。そして、他の頂点IDの頂点座標を頂点座標テーブルから削除する。この結果、図31に示すように、頂点座標テーブルにおいて代表頂点である頂点ID“0”の頂点座標として、平均点Oを示す平均座標値(Xo,Yo,Zo)が記録され、もう一方の頂点ID“6”の頂点座標としてNULL値(図では空白)が記録される。
次に、頂点重複テーブル更新手段70が、代表頂点以外の頂点IDの重複先を代表頂点の頂点IDに設定する。代表頂点の頂点IDが“0”で、他の頂点の頂点IDが“6”である場合、図31に示すように、頂点重複テーブルの頂点ID“6”の重複先として“0”が記録される。
図32〜図34を用いて、2つ目の削除対象ポリゴンであるポリゴンP16を削除する場合について説明する。ポリゴンP6の場合と同様に、まず、削除対象ポリゴン設定手段50が、頂点構成テーブルから削除対象ポリゴンP16を削除する。具体的には、図32に示すように、頂点構成テーブルからポリゴンP16の全ての頂点IDを削除する。
続いて、頂点座標テーブル更新手段60が、削除されたポリゴンP16の頂点IDに含まれていた頂点IDのうち、削除対象辺の両端の2頂点の頂点IDの平均座標を算出し、平均座標をもつ平均点を求める。そして、削除された頂点IDに含まれていた頂点IDのうち、削除対象辺の1つの頂点を代表頂点として代表頂点である頂点ID“9”の座標値を平均座標の値で更新する。そして、他の頂点ID“10”の頂点座標を頂点座標テーブルから削除する。この結果、図32に示すように、頂点座標テーブルの頂点ID“9”の頂点座標として、平均点Pを示す頂点IDの平均座標値(Xp,Yp,Zp)が記録され、頂点ID“10”の頂点座標としてNULL値(図では空白)が記録される。
次に、頂点重複テーブル更新手段70が、代表頂点以外の頂点IDの重複先を代表頂点の頂点IDに設定する。代表頂点の頂点IDが“9”で、他の頂点の頂点IDが“10”である場合、図32に示すように、頂点重複テーブルの頂点ID“10”の重複先として“9”が記録される。
2つの削除対象ポリゴンが頂点構成テーブルから削除されたら、頂点構成テーブル更新手段80が、頂点重複テーブルを参照し、頂点構成テーブルの頂点構成の中で、頂点重複テーブルに重複先が設定されている各頂点IDを変更する(ステップS25)。具体的には、頂点重複テーブルの重複先が初期値“−1”以外であるものについて、頂点構成テーブル上の頂点IDを、重複先の頂点IDに変更する。この結果、図33に示すように、ポリゴンP5,P9,P10,P11,P17に対応する頂点IDが変更される。
頂点IDの変更後、頂点構成テーブル更新手段は、頂点IDに同一の値をもつ頂点IDが複数含まれるポリゴンを頂点構成テーブルから削除する。これは、ポリゴンが三角形である場合、3つの頂点中2つ以上の頂点が同一であれば、ポリゴンとして成り立たないためである。図33の例では、頂点構成テーブルにおいて、ポリゴンP5,P10の頂点IDに同一の値をもつ頂点IDが含まれている。例えば、ポリゴンP5の頂点構成には、頂点ID“0”が2つ含まれている。頂点IDに同一の値をもつ頂点IDが複数含まれるポリゴンを頂点構成テーブルから削除した結果、頂点構成テーブルは図34に示すような状態に更新される。図34に示すように、当初の頂点構成テーブルからはポリゴンP5,P6,P10,P16が削除されている。
頂点構成テーブルが更新されたら、ポリゴンモデル更新手段90が、頂点座標配列データを更新する(ステップS26)。具体的には、頂点座標テーブルを参照して、頂点構成テーブルの各頂点IDを頂点座標に置き換える。図34に示した頂点構成テーブル、図34に示した頂点座標テーブルからは図35に示したような頂点座標配列データが得られることになる。これを図11に示した元の頂点座標配列データと置き換える。この結果、図30に示したポリゴン群は、図36に示すようなポリゴン群に変更されることになる。図30に示したポリゴン群において設定された削除対象ポリゴンP6,P16だけでなく、ポリゴンP5,P16が削除されていることがわかる。
頂点座標配列データが更新されたら、制御手段10が、削減後の全ポリゴン数が、設定された目標値以下となっているか否かを判定する(ステップS27)。目標値としては、事前に任意の値を設定することができる。判定の結果、全ポリゴン数が目標値以下となっていない場合は、ステップS24に戻って、削除対象ポリゴン設定手段50が、残っているポリゴンの中から、他のポリゴンを削除対象ポリゴンとして選定する。ステップS27における判定の結果、全ポリゴン数が目標値以下である場合は、ポリゴン削減処理を終了する。図12のフローチャートに従った処理を実行することにより、各グループについて設定された目標値以下になるように、ポリゴン数が削減されることになる。ポリゴンモデルの構造化処理が行われていなければ、削除対象ポリゴンの削除対象辺の2つの補正対象頂点と同一座標となる頂点の探索に大きな処理負荷を要することになる。ポリゴンモデルの構造化処理を行うことにより、処理負荷を大幅に削減することが可能となる。
<2.5.小体積グループ削除処理>
次に、ステップS40におけるグループ合成手段100による隔離された小体積グループの削除処理について説明する。ここで、隔離された小体積グループの削除処理の説明に先立ち、隔離された小体積グループの削除処理を行う理由について説明しておく。図37は、ポリゴン削減処理により生じる問題を説明するための図である。図37(a)は、ステップS10のグループ分類処理を終えた直後の2グループのポリゴン群を示している。図37(a)の例では、頂点D、E、Kを含む左側のグループと、頂点D’、E’、K’を含む右側のグループが存在する。頂点DとD’、頂点EとE’、頂点KとK’がそれぞれ3Dプリンタの解像度以下である場合、この2グループのポリゴン群を3Dプリンタで出力すると、頂点DとD’、頂点EとE’、頂点KとK’は樹脂等により連結され、2グループは連結した物体として出力される。すなわち、2グループは物理的には接着されている。
図37(a)に示した右側のグループのポリゴン群に対して、ステップS20におけるポリゴン削減処理を実行すると、図37(b)に示すように、ポリゴンE’FK’が削除対象ポリゴンとして選定される。さらに、図37(c)に示すように、削除対象ポリゴンE’FK’の最短辺E’Fが削除対象辺として選定され、辺E’Fの中点Oが算出される。そして、図37(d)に示すように、削除対象ポリゴンE’FK’と、削除頂点共有ポリゴンD’E’Fが削除される。
図37(a)と図37(d)を比較するとわかるように、左右の2つのグループは、ポリゴン削減処理前に比べて、ポリゴン削減処理後には、より離れてしまっている。図37(d)に示した2グループの距離が、3Dプリンタの解像度を超えると、2グループのポリゴン群を3Dプリンタで出力した場合、2グループは別の物体として出力される。2つのグループがともに大きな物体となれば、問題はない。しかし、一つが非常に小さな物体となる場合、例えば、一方のグループが本体であって、他方のグループが本体に付属するヒゲのようなものである場合、本体と別に出力されたヒゲは、3Dプリンタ内に紛れ込み、機械詰まり等の問題を引き起こす恐れがある。このような問題を除去するため、上述のヒゲのような隔離された小体積グループの削除処理を行うのである。
図38は、グループ合成手段100による隔離された小体積グループの削除処理(ステップS40)の詳細を示すフローチャートである。グループ合成手段100は、まず、グループごとに全ポリゴンの全頂点を対象として、X、Y、Zぞれぞれの方向の最大値および最小値を算出する(ステップS41)。この結果、グループgに対して、最小値Xmin(g)、最大値Xmax(g)、最小値Ymin(g)、最大値Ymax(g)、最小値Zmin(g)、最大値Zmax(g)が得られる。次に、グループ合成手段100は、グループごとに外接直方体の体積を算出する(ステップS42)。具体的には、以下の〔数式3〕に従った処理を実行することにより、グループgの外接直方体の体積V(g)を算出する。
〔数式3〕
V(g)=(Xmax(g)−Xmin(g))×(Ymax(g)−Ymin(g))×(Zmax(g)−Zmin(g))
グループ合成手段100は、全グループに対してステップS41、S42の処理を実行する。これにより、全グループについて、外接直方体の体積が得られる。次に、グループ合成手段100は、全グループの中で外接直方体の体積が最小となるグループを特定する(ステップS43)。そして、グループ合成手段100は、特定したグループと他の全てのグループとの最小間隔を算出する(ステップS44)。ステップS44における最小間隔の算出処理の詳細については後述する。
続いて、グループ合成手段100は、ステップS44において算出された最小間隔が所定のしきい値以上か否かを判定する(ステップS45)。最小間隔と比較するための所定のしきい値としては、3Dプリンタ出力時に0.2mmに相当する数値とすることが好ましい。判定の結果、最小間隔が所定のしきい値以上である場合は、体積最小のグループが、最も近いグループとも所定の距離以上離れていることになるので、グループ合成手段100は、体積最小のグループを削除する処理を行う(ステップS46)。ステップS45における判定の結果、最小間隔が所定のしきい値未満である場合は、体積最小のグループが、最も近いグループと3Dプリンタの解像度以下に近接していることになるので、グループ合成手段100は、体積最小のグループを削除する処理を行わない。
ステップS46におけるグループの削除を行った場合、削除を行わなかった場合のいずれにおいても、そのグループについては処理済みとする。そして、ステップS43に戻って、未処理のグループの中で外接直方体の体積が最小となるグループを特定する。ステップS43〜ステップS46の処理を繰り返し、全てのグループに対する処理を終えたら、隔離された小体積グループの削除処理を終了する。
ステップS44における最小間隔の算出処理の詳細について説明する。図39は、図38のステップS44における最小間隔の算出処理の詳細を示すフローチャートである。グループ合成手段100は、初期値として、最小間隔を示す変数dminに所定以上の値を設定する。dminに与える初期値としては、グループ間の最小間隔としてあり得ない大きな値を設定しておけばよい。そして、グループ合成手段100は、全グループの中から、グループgより体積が大きい1つのグループhを抽出する(ステップS47)。この結果、グループhについて、最小値Xmin(h)、最大値Xmax(h)、最小値Ymin(h)、最大値Ymax(h)、最小値Zmin(h)、最大値Zmax(h)が得られる。次に、グループ合成手段100は、X、Y、Zの各方向別に2グループ間の差分の最小値を算出する(ステップS48)。具体的には、以下の〔数式4〕に従った処理を実行することにより、X方向の差分の最小値dx、Y方向の差分の最小値dy、Z方向の差分の最小値dzを算出する。
〔数式4〕
dx=Min{|Xmax(g)−Xmin(h)|,|Xmin(g)−Xmax(h)|}
dy=Min{|Ymax(g)−Ymin(h)|,|Ymin(g)−Ymax(h)|}
dz=Min{|Zmax(g)−Zmin(h)|,|Zmin(g)−Zmax(h)|}
続いて、グループ合成手段100は、算出された方向別最小値のうち最大のものをグループ間最小値とし、グループ間最小値を、既に処理済みの他のグループ間における全グループ間最小値と比較し、小さい方を全グループ間最小値とする処理を行う(ステップS49)。具体的には、ステップS48において算出された3つの方向別最小値dx、dy、dzのうち、最大の値をとるグループ間最小値Max(dx、dy、dz)とdminを比較し、Max(dx、dy、dz)<dminの場合、dmin=Max(dx、dy、dz)とする。これにより、dminには、グループ間最小値の中で最小の値となる全グループ間最小値が記録されることになる。
ステップS47、S48、S49の処理を繰り返して実行し、グループgより体積が大きい全てのグループに対する処理を終えたら、図39に示した最小間隔の算出処理を終了し、図38のステップS45に進んで、最小間隔dminとしきい値との比較を行うことになる。
<2.6.ポリゴンモデルの合成>
図9の処理概要に示したように、ステップS50においては、グループ合成手段100が、全グループのポリゴンモデルの合成を行って更新された領域別ポリゴンモデルを得る。また、ステップS70においては、ポリゴンモデル合成手段110が、全領域の領域別ポリゴンモデルの合成を行って合成ポリゴンモデルを得る。いずれの合成処理も、ヘッダ部を除く領域別ポリゴンモデルを単純に結合し、ヘッダ部に合算されたポリゴン数を記録することにより行われる(ただし、これはバイナリ形式のSTLフォーマットの場合で、ASCII形式のSTLフォーマットではヘッダ部を除く領域別ポリゴンモデルを単純に結合するだけである)。合成ポリゴンモデル記憶手段130に記憶された合成ポリゴンモデルを3Dプリンタ7に出力することにより、3Dプリンタ7は効率的に立体物を造形することができる。造形された立体物については、ほとんど劣化は見られなかった。
<3.変形例等>
以上、本発明の好適な実施形態について説明したが、本発明は上記実施形態に限定されず、種々の変形が可能である。例えば、上記実施形態では、処理対象のポリゴンを三角形としたが、四角形以上の多角形であってもよい。
また、上記実施形態では、図1に示したようなハードウェア構成に専用のプログラムを組み込むことにより、立体物造形用データ削減装置を実現したが、図1に示したようなハードウェア構成に、ポリゴンモデル構造化手段を実現するプログラムを組み込むことにより、ポリゴンモデル構造化装置を実現するようにしてもよい。
また、上記実施形態では、複数のグループの更新されたポリゴンモデルに対して、外接直方体の体積が所定のしきい値未満であるものを削除するようにしたが、削除しないようにすることも可能である。