実施例を詳細に説明する前に実施例の概要を説明する。現実空間を複数台のカメラで撮影し、複数台のカメラが出力した撮影画像を合成等することにより、現実空間の外観(様子)を点の集合により表した点群を生成することが行われている。また、その点群を用いて現実空間を示す画像を生成することが行われている。点群における点の数が増えるほど、点群から生成される画像の品質は向上するが、その反面、描画処理等の負荷も高まる。
近年では、1億個を超える点のデータを含む点群が生成されることもある。例えば、1つのフレームに対応する点群では、各点のデータとして、空間座標を表すデータとして12バイト(XYZの座標値各4バイト)、色彩を表現するデータとして4バイト(RGBAの各1バイト)を含み、合計16バイトのデータを含むことがある。16バイト×1億点は、約1.6ギガバイトに達する。このように、点群に大量の点のデータが含まれる場合、点群の通信時間や処理時間が非常に長くなってしまい、描画処理に遅延が生じることがある。
そこで実施例では、点群内の各点に対して優先順位付けを行い、重要な点の情報ほど優先的に処理するデータ処理方法を提案する。これにより、点群内の大量の点を効率的に処理することを実現する。
図1の(a)(b)は、実施例における点群処理方法の原理を示す。図1の(a)で示すように、実施例の点群10は複数の領域(以下「ブロック」とも呼ぶ。)に分割される。実際の点群10は、複数台のカメラにより撮影された3次元空間の外観を示すものであり、点群10が示す3次元空間を分割した個々のブロックも3次元空間となるが、図ではこれを簡素化し、2次元のブロックを示している。ブロック12は5個の点を含み、ブロック14は7個の点を含み、ブロック16は4個の点を含み、ブロック18は2個の点を含む。
点群には点の局所性(偏在性)があり、空間を分割することで、点の数が相対的に少ないブロック(例えばブロック18)が生じる。本発明者は、点の数が相対的に少ないブロックは、空間全体に対する重要度が低いと考えた。また本発明者は、空間に相当数の点が存在する場合、少量の点の情報が画像に反映されなくても、画像全体への影響は少なく、ユーザに違和感を抱かせにくいと考えた。そこで、実施例の画像処理システムでは、内包する点の数が少ないブロックに関する通信または処理の優先度を低くし、具体的には通信または処理の順番を後回しにする。
図1の管理装置20は、点群10が示す空間から複数のブロックを切り出し、処理装置22は、管理装置20により切り出された複数のブロックに基づいて所定のデータ処理(例えば描画処理)を実行する。図1の(b)で示すように、管理装置20は、複数のブロックを処理装置22へ順次送信し、点の個数が多いブロックほど早いタイミングで送信する。管理装置20は、図1の(a)で示すブロックを切り出した場合、ブロック14、ブロック12、ブロック16、ブロック18の順に処理装置22へ提供する。
図2は、変形例における点群処理方法の原理を示す。処理装置22は、複数のブロックに基づいて所定のデータ処理を実行する場合に、点の個数が多いブロックほど早いタイミングでデータ処理を実行する。例えば図1の(a)で示す4つのブロックに対して、処理装置22は、ブロック14、ブロック12、ブロック16、ブロック18の順に、各ブロックに基づくデータ処理を実行する。ブロックに基づくデータ処理は、ブロック内の点のデータに基づいて当該ブロックの外観を示す画像を生成する描画処理を含み、また、ブロックに含まれる点のデータに基づく衝突判定等、種々の演算処理を含む。
図1および図2で示した点群処理方法によると、処理装置22において、相対的に重要度が高いブロックの処理を先に実行させることができ、相対的に重要度が高いブロックの処理における遅延の発生を回避しやすくなる。また、点群の処理を、ブロック単位で、かつ、優先順位をつけて実行することにより、大量の点を含む点群を効率的に処理することを実現できる。
なお、図1および図2で示した点群処理方法では、内包する点の個数が多いブロックほど高い優先順位を付与することとした。変形例として、点の密度(例えば点の個数/ブロックの体積)が高いブロックほど高い優先順位を付与してもよい。また、点群内(撮影空間内)の点の総数に占めるブロック内の点の個数の割合(例えばブロック内の点の個数/点群内の点の総数)が大きいブロックほど高い優先順位を付与してもよい。
以下、実施例の構成を詳細に説明する。図3は、実施例の画像処理システムの構成を示す。画像処理システム30は、マスタノード32、描画ノード34で総称される描画ノード34a、描画ノード34b、描画ノード34c、表示制御ノード36、表示デバイス38を備える。これらの各装置は、LAN・WAN・インターネット等を含む通信網を介して接続される。マスタノード32および描画ノード34は、第1の外部装置(不図示)から入力された点群に基づいて画像を生成し、生成した画像データを第2の外部装置(表示制御ノード36に相当する装置等)へ提供するクラウドシステムを構成してもよい。
マスタノード32は、図1(b)の管理装置20に対応するデータ処理装置である。マスタノード32は、点群10が示す空間を複数のブロックに分割し、点群10に含まれる各点のデータをブロック単位で描画ノード34a、描画ノード34b、描画ノード34cのそれぞれへ送信する。
描画ノード34a、描画ノード34b、描画ノード34cのそれぞれは、図1(b)および図2の処理装置22に対応するデータ処理装置である。描画ノード34は、既知の方法により、点群内の各点のデータに基づいてビットマップ画像のデータを生成する。なお、画像処理システム30における描画ノード34の台数に制限はない。例えば1台であってもよく、4台以上であってもよい。
描画ノード34a、描画ノード34b、描画ノード34cは、マスタノード32から受信したブロック単位の点データ(各ブロックに含まれる点のデータ)に基づいて、ブロックの外観を示す画像(以下「個別画像」とも呼ぶ。)を生成する。同一の空間から切り出された複数のブロックに基づく複数の個別画像は、表示デバイス38において同時に表示されるべき画像である。言い換えれば、ある時点で表示デバイス38に表示される画像(例えば1つのフレームの画像)における異なる部分を構成する画像である。
表示制御ノード36は、描画ノード34a、描画ノード34b、描画ノード34cの各々で描画された個別画像を合成することにより、表示デバイス38に表示させるべき画像(以下「フレーム画像」とも呼ぶ。)を生成する。表示制御ノード36は、生成したフレーム画像を表示デバイス38に表示させる。表示制御ノード36は、据置型のデータ処理装置(例えばPC、ゲーム機)であってもよく、表示デバイス38は、ヘッドマウントディスプレイ(HMD)であってもよい。また、表示制御ノード36と表示デバイス38は、携帯型のゲーム機等として同一筐体に統合されてもよい。
図4は、図3のマスタノード32の機能構成を示すブロック図である。マスタノード32は、制御部40、記憶部42、通信部44を備える。制御部40は、点群を用いた画像生成を管理するためのデータ処理を実行する。記憶部42は、制御部40により参照または更新されるデータを記憶する記憶領域である。通信部44は、所定の通信プロトコルにしたがって外部装置と通信する。制御部40は、通信部44を介して複数の描画ノード34のそれぞれとデータを送受する。
本明細書のブロック図において示される各ブロックは、ハードウェア的には、コンピュータのCPU・メモリをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
例えば、制御部40の各ブロックの機能がコンピュータプログラム(点群管理プログラム)として実装され、点群管理プログラムがマスタノード32のストレージにインストールされてもよい。そしてマスタノード32のCPUが、点群管理プログラムをメインメモリへ読み出して実行することにより制御部40内の各ブロックの機能が発揮されてもよい。また、記憶部42は、マスタノード32のメインメモリやストレージにより実現されてもよい。
記憶部42は、空間データ記憶部46、ブロックデータ記憶部48、優先度記憶部50を含む。空間データ記憶部46は、複数のカメラにより撮影された空間であり、言い換えれば、描画ノード34により描画対象となり得る空間(以下「撮影空間」とも呼ぶ。)のデータを保持する。実施例における撮影空間のデータは、撮影空間の外観(様子、内容とも言える)を複数の点の集合によって表した点群のデータを含み、点群を構成する各点のデータをさらに含む。
点群を構成する各点のデータは、撮影空間内での位置を示す3次元の座標データと、色彩を示すデータを含む。3次元の座標データは、例えば、撮影空間内における絶対位置を示す横方向(X軸方向)の座標値、縦方向(Y軸方向)の座標値、奥行き方向(Z軸方向)の座標値の組み合わせであってもよい。また、色彩を示すデータは、例えばRGBAカラーモデルの値であってもよい。
なお、点群を構成する各点のデータは、法線に関するデータ(向き等)と表面の材質に関するデータ(テクスチャデータ等)をさらに含んでもよい。法線に関するデータを含むことで、描画ノード34のレンダリング処理における光の入射角や反射角の計算を支援できる。それとともに、描画ノード34は、表と裏を区別でき、裏側の描画処理をスキップすることができる。また、表面の材質に関するデータを含むことで、描画ノード34のレンダリング処理における光の反射率や吸収率等の計算を支援できる。
ブロックデータ記憶部48は、撮影空間を分割した結果としての複数のブロック(個別領域)であり、互いに撮影空間の一部を構成する複数のブロックのデータを保持する。各ブロックのデータは、ブロックの識別情報と、ブロックの境界情報(例えばブロックの頂点の座標値)、ブロックに属する1個以上の点のデータ(上述の座標データ、色彩データ等)を含む。優先度記憶部50は、複数のブロックのそれぞれに対して付与された優先順位を示すデータを保持する。
制御部40は、空間分割部52、点群取得部54、可視判定部56、優先度決定部58、点群処理部60を備える。空間分割部52は、空間データ記憶部46に保持された撮影空間の点群データを読み出し、予め定められた分割アルゴリズムにしたがって撮影空間を分割する。空間分割部52は、分割の結果を示すデータとして、複数のブロックのデータであり、各ブロックに属する点のデータをブロックデータ記憶部48へ格納する。空間分割部52は、分割アルゴリズムとして、8分木(octree)、k−d木(k-d tree)等、公知のアルゴリズムを使用してもよい。
点群取得部54は、撮影空間を分割した複数のブロックのいずれかに各点が属するように設定された点群のデータを取得する。実施例では、点群取得部54は、複数のブロックのデータであって、複数のブロックのそれぞれに属する点のデータをブロックデータ記憶部48から読み込む。
可視判定部56は、ユーザの視点位置や視線方向、姿勢、画角等に応じて、撮影空間内の複数のブロックのうちどのブロックがユーザから視認されるかを判定する。ここでのユーザは、表示デバイス38(例えばHMD)を装着したユーザであってもよく、また、ユーザの視点位置に仮想的に配置された仮想カメラであってもよい。言い換えれば、可視判定部56は、撮影空間内の複数のブロックのうち描画処理の対象となるブロック(以下「描画対象ブロック」)を特定する。典型的には複数の描画対象ブロックを特定する。
優先度決定部58は、可視判定部56により特定された複数の描画対象ブロックのそれぞれに属する点の数に基づいて、各描画対象ブロックの優先度を決定する。実施例の優先度決定部58は、複数の描画対象ブロックのそれぞれに属する点の数を計数し、内包する点の数が多い描画対象ブロックほど高い優先順位を付与する。例えば、図1(a)の4つのブロックに対して、優先度決定部58は、ブロック14、ブロック12、ブロック16、ブロック18の順に高い優先順位を付与する。
点群処理部60は、優先度決定部58により決定された優先度に応じた順序で複数の描画対象ブロックを処理し、複数のブロックのうち優先度が高いブロックの処理を、優先度が低いブロックの処理より優先的に実行する。実施例の点群処理部60は、複数の描画対象ブロックのうち優先順位が相対的に高い描画対象ブロックの点に基づくデータ処理を、優先順位が相対的に低いブロックの点に基づくデータ処理より優先的に実行する。例えば、図1(a)の4つのブロックに対して、点群処理部60は、ブロック14の点データを最優先で処理し、以降、ブロック12、ブロック16、ブロック18の順に点データを処理する。
点群処理部60は、予め定められたタイミングまでに、複数の描画対象ブロックのうち一部の描画対象ブロックの処理を未完了である場合、それら一部の描画対象ブロックの処理をスキップする。言い換えれば、それら一部の描画対象ブロックの処理を未完了のまま、描画対象ブロックに対する処理を終了する。
実施例の点群処理部60は点群配信部62を含む。点群配信部62は、複数の描画対象ブロックうち第1の描画対象ブロックの点データを描画ノード34aへ送信し、第1の描画対象ブロックとは異なる第2の描画対象ブロックの点データを描画ノード34bへ送信する。さらに点群配信部62は、第1および第2の描画対象ブロックとは異なる第3の描画対象ブロックの点データを描画ノード34cへ送信する。ただし、点群配信部62は、複数の描画対象ブロックを順次送信し、その際に優先順位が高いブロックほど早いタイミングで送信する。
点群配信部62は、点群に基づく画像が表示される画面の複数の領域(個々の領域は画面の一部を構成する)と、複数の描画ノード34(例えば描画ノード34a、描画ノード34b、描画ノード34c)との対応関係を保持する。点群配信部62は、複数の描画ノード34のそれぞれに対して、各ノードが対応付けられた画面領域で表示される描画対象ブロックの点データを送信する。言い換えれば、点群配信部62は、複数の描画ノード34のそれぞれに対して、各ノードが対応付けられた画面領域に少なくとも一部が含まれる描画対象ブロックの点データを送信する。
例えば、図1のブロック12(点の個数は5)の送信先が描画ノード34a、図1のブロック14(点の個数は7)の送信先が描画ノード34b、図1のブロック16(点の個数は4)の送信先が描画ノード34cであるとする。この場合、点群配信部62は、まずブロック14の点データを描画ノード34bへ送信し、次にブロック12の点データを描画ノード34aへ送信し、次にブロック16の点データを描画ノード34cへ送信する。
点群配信部62は、予め定められた配信タイミング(または描画タイミング)までに、複数の描画対象ブロックのうち一部の描画対象ブロックを描画ノード34へ未送信の場合、それら一部の描画対象ブロックの送信をスキップする。言い換えれば、それら一部の描画対象ブロックを描画ノード34へ送信しないまま描画対象ブロックに対する処理を終了する。この結果、マスタノード32と描画ノード34の通信状態によっては、優先度が低い描画対象ブロックに基づく画像は生成されない。
以上の構成による画像処理システム30の動作を説明する。図5は、実施例の画像処理システム30の動作を示すフローチャートである。実施例では、複数台のカメラ(不図示)および点群生成装置(不図示)が画像処理システム30の外部に設けられることとするが、画像処理システム30の内部に設けられてもよい。複数台のカメラは、同一空間を異なる向き、角度から並行して撮像する。点群生成装置は、複数台のカメラから出力された複数の画像に基づいて公知の手法により点群のデータを生成する。ここでは、1つの点群のデータが、表示デバイス38に表示される1フレームに対応することとする。
マスタノード32の空間データ記憶部46は、撮影空間を示すデータとして、点群生成装置により生成された点群のデータを保持する。すなわち空間データ記憶部46は、表示デバイス38に表示される複数のフレームに対応する複数の点群のデータを保持する。なお、点群生成装置は、複数台のカメラから出力された複数の画像に基づいて撮影空間の現在の様子を示す点群のデータをリアルタイムに生成し、生成した点群のデータを即時にマスタノード32の空間データ記憶部46へ格納してもよい。
図6は、撮影空間の分割を模式的に示す。マスタノード32の空間分割部52は、空間データ記憶部46に格納された撮影空間70を示す点群データを読み出し、所定の分割アルゴリズムにしたがって撮影空間70を複数のブロックに分割する(S10)。空間分割部52は、各ブロックの点データをブロックデータ記憶部48へ格納する。マスタノード32の点群取得部54は、ブロックデータ記憶部48に格納された各ブロックの点データを読み出す。図7は、撮影空間に対する可視判定を模式的に示す。マスタノード32の可視判定部56は、ユーザ71(または仮想カメラ)の視点位置や姿勢、視線方向にしたがって、撮影空間70内の複数のブロックの中でどのブロックがユーザ71から視認されるかを判定する。可視判定部56は、ユーザ71から視認される複数のブロックを描画対象ブロック72として特定する(S12)。
マスタノード32の優先度決定部58は、複数の描画対象ブロックのそれぞれに対して、内包する点の数が相対的に多いほど高い優先順位を付与する(S14)。図8は、マスタノード32から描画ノード34へのデータの送信態様を示す。マスタノード32の点群配信部62は、複数の描画対象ブロック72のそれぞれを対応する描画ノード34へ順次送信し、その際に、内包する点の個数が多い描画対象ブロック72ほど先に送信する(S16)。予め定められたフレームの描画タイミングに至ってなければ(S18のN)、S16に戻り、優先順位が低い描画対象ブロック72の送信を継続する。描画タイミングに至ると(S18のY)、以降の描画対象ブロック72の送信を中止する。
図5のS10〜S18で示したマスタノード32の処理は、1つのフレームの描画に係る処理である。マスタノード32は、複数のフレームに対応する複数の点群データに対して、S10〜S18の処理を繰り返す。マスタノード32は、S18のYが成立するとそれまでのフレームの処理を終了し、次のフレームの処理へ移行する。
複数の描画ノード34は、マスタノード32から受信した描画対象ブロック72に基づいて、撮影空間の一部の外観を示すビットマップ画像(以下「個別画像」とも呼ぶ。)を並行して生成する(S20)。例えば、フレーム画像を表示する画面を左上領域、左下領域、右下領域、右上領域の4領域に分割する場合、描画ノード34aは、画面の左上領域に該当するブロックの点データを受信して、画面の左上領域に表示すべき個別画像のデータを生成してもよい。また描画ノード34bは、画面の左下領域に該当するブロックの点データを受信して、画面の左下領域に表示すべき個別画像のデータを生成してもよい。また描画ノード34cは、画面の右下領域に該当するブロックの点データを受信して、画面の右下領域に表示すべき個別画像のデータを生成してもよい。複数の描画ノード34のそれぞれは、生成した個別画像のデータを表示制御ノード36へ送信する。
表示制御ノード36は、複数の描画ノード34と画面内の複数領域との対応関係にしたがって、複数の描画ノード34で分散して生成された個別画像を合成することにより、フレーム全体の画像(以下「フレーム画像」とも呼ぶ。)を生成する(S22)。図9は、フレーム画像の生成を模式的に示す。表示制御ノード36は、描画ノード34aで生成された個別画像74aを左上領域に配置し、描画ノード34bで生成された個別画像74bを左下領域に配置し、描画ノード34cで生成された個別画像74cを右下領域に配置し、他の描画ノード(不図示)で生成された個別画像74dを右上領域に配置したフレーム画像76を生成してもよい。表示制御ノード36は、フレーム画像のデータを表示デバイス38へ出力し、表示デバイス38にフレーム画像を表示させる(S24)。
既述したように、描画処理の対象となる点群は億単位の点を含むことがあり、通常のPC等のデバイス1台ではリアルタイムの描画が困難という問題があった。実施例の画像処理システム30では、複数の描画ノード(GPU)により描画処理を分散実行することで、大量の点データに基づく画像描画を実現できる。また、実施例の画像処理システム30によると、点群が示す撮影空間を分割した複数のブロックのうち点の数が少ないブロックについては、その通信または処理の優先度を低くし、例えば、通信または処理の順番を後回しにする。これにより、点群が大量の点データを含む場合でも、通信負荷を低減でき、また、処理負荷(描画処理の負荷等)を抑制できる。
また、実施例の画像処理システム30によると、点群全体に対する重要度が高いと考えられる、点の数が多いブロックの通信または処理を優先的に実行し、重要度が高いブロックの通信または処理の遅延を抑制できる。実施例の画像処理システム30では、ユーザの注目を集めやすいブロックを優先的に描画し、その一方、ユーザに気付かれにくいブロックについてはベストエフォートで描画することで効率化を実現する。
以上、本発明を実施例をもとに説明した。この実施例は例示であり、各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下変形例を説明する。
第1変形例を説明する。上記実施例の画像処理システム30では、図3のマスタノード32が、撮影空間を構成する複数のブロックに対する優先順位を決定し、優先順位が高いブロックのデータを優先的に描画ノード34へ送信した。変形例として、図2で示したように、図3の描画ノード34(描画ノード34a、描画ノード34b、描画ノード34cのうち少なくとも1つ)が、撮影空間を構成する複数のブロックに対する優先順位を決定し、優先順位が高いブロックのデータに基づく画像を優先的に生成してもよい。すなわち、複数のブロックの優先度に応じたデータ処理を、マスタノード32に代わって描画ノード34が実行してもよく、または、マスタノード32とともに描画ノード34が実行してもよい。
この変形例におけるマスタノード32は、点群により表された撮影空間を複数のブロックに分割して、複数のブロックの中からユーザにより視認されるブロックを描画対象ブロックとして検出してもよい。そして、優先順位を付与することなく、複数の描画対象ブロックの点データを1つの描画ノード34へ送信してもよい。また、マスタノード32は、複数の描画ノード34に対して、各ノードが描画を担当する領域に該当する描画対象ブロックの点データを順次もしくは並行して送信してもよい。
図10は、変形例の描画ノード34の機能構成を示すブロック図である。図10に示す制御部80、記憶部82、通信部84は、図4の制御部40、記憶部42、通信部44に対応する。また、図10に示す点群取得部90、優先度決定部92、点群処理部94は、図4の点群取得部54、優先度決定部58、点群処理部60に対応する。
点群取得部90は、マスタノード32から送信された複数の描画対象ブロックの点データを取得する。優先度決定部92は、複数の描画対象ブロックのそれぞれに属する点の数に基づいて、各描画対象ブロックの優先度を決定する。例えば、優先度決定部92は、複数の描画対象ブロックのそれぞれに属する点の数を計数し、内包する点の数が多い描画対象ブロックほど高い優先順位を付与する。
点群処理部94は描画部96を含む。描画部96は、マスタノード32から送信された複数の描画対象ブロックの点データに基づいて、複数の個別画像を順次生成する。その際に、描画部96は、優先順位が高い描画対象ブロックほど先に個別画像を生成する。画像提供部98は、描画部96により生成された個別画像のデータを表示制御ノード36へ送信する。
描画部96は、予め定められた描画タイミングまでに、複数の描画対象ブロックのうち一部の描画対象ブロックに基づく個別画像を未生成の場合、それら一部の描画対象ブロックに基づく個別画像の生成処理をスキップする。言い換えれば、それら一部の描画対象ブロックに基づく個別画像を生成しないまま描画対象ブロックに対する処理を終了する。この結果、描画処理の負荷によっては、優先度が低い描画対象ブロックに基づく画像が生成されないことがある。
本変形例の描画ノード34によると、点群が示す撮影空間を分割した複数のブロックのうち点の数が少ないブロックについては、そのブロックに基づく描画処理の優先度を低くする。これにより、点群が大量の点データを含む場合でも、描画処理の負荷を抑制できる。なお、本変形例の描画ノード34は、実施例ではマスタノード32の機能とした空間データ記憶部46、空間分割部52、可視判定部56をさらに備えてもよい。また、本変形例では描画ノード34の機能とした優先度決定部92はマスタノード32の機能とし、描画ノード34の描画部96は、マスタノード32が決定した優先順位にしたがって複数のブロックに基づく複数の個別画像を生成してもよい。
第2変形例を説明する。上記実施例のマスタノード32は、複数の描画ノード34のそれぞれに対して、各ノードが対応付けられた画面領域で表示される描画対象ブロックの点データを送信した。例えば、フレーム画像が表示される画面を4分割し、左上領域に該当する描画対象ブロックのデータを描画ノード34aへ送信し、左下領域に該当する描画対象ブロックのデータを描画ノード34bへ送信し、右下領域に該当する描画対象ブロックのデータを描画ノード34cへ送信した。
ここで撮影空間には点の偏在性があるため、常時同じ態様で画面を分割して描画対象ブロックの送信先を決定すると、特定の描画ノードに負荷が偏ることがある。例えば、ある描画ノードでは描画負荷が許容値を大幅に超える一方、別の描画ノードでは描画負荷が許容値を大幅に下回ると言う状況が生じうる。結果、負荷が集中した描画ノードでは、描画処理が遅延しやすくなる。そこで、変形例のマスタノード32は、各描画ノードの負荷ができるだけ均等になるように、各描画ノードの担当範囲を動的に調整する調整部(不図示)をさらに備える。調整部は、各描画ノードの負荷の分散が所定値以下になるように、各描画ノードの担当範囲を調整してもよい。
図11は、複数の描画ノードの負荷を平準化する方法を模式的に示す。ここでは、図3の描画ノード34a、描画ノード34b、描画ノード34cに加えて、第4の描画ノードとして描画ノード34d(不図示)が存在する。図11(a)に示すように、調整部は、フレーム画像を表示させる画面を4分割する。デフォルトでは、描画ノード34aが領域100の描画を担当し、描画ノード34bが領域102の描画を担当し、描画ノード34cが領域104の描画を担当し、描画ノード34dが領域106の描画を担当する。各領域の数字は、描画処理の負荷の大きさを示す。具体的には、各領域に含まれるブロック数を示すこととする。別の態様として、各領域の数字は、各領域に含まれる点の個数の比率を示すものでもよい。図11(a)の例では、素朴に画面を4等分すると、描画ノード34aに負荷が集中することになる。
各描画ノードにおいて許容される負荷の大きさ(例えば許容されるブロック数であり、以下「許容負荷」と呼ぶ。)が、予め「5」に定められたこととする。いずれかの領域の負荷が「5」を超える場合、調整部は、図11の(b)で示すように、負荷が最大の領域(該当するブロック数が最大の領域)を、その長辺軸に沿って2分割する。例えば、長辺の中点を結んで半分に分割してもよい。図11の(b)に示す1回目の分割では1つの領域の負荷が依然として「5」を超えるため、調整部は、図11の(c)で示すように、再度、負荷が最大の領域を2分割する。
各領域の負荷が許容負荷以下になった場合、調整部は、各領域の負荷と許容負荷との差を計算する。図11の(d)は、この計算結果を示している。図11の(e)で示すように、調整部は、許容負荷との差が所定値(ここでは4)以上の領域を、隣接する領域と統合する。図11の(f)は領域を統合した結果を示している。調整部は、各領域の負荷の分散が所定値(例えば「1.6」)以下になった場合に調整処理を終了する。マスタノード32の点群配信部62は、例えば、領域110に該当する描画対象ブロックのデータを描画ノード34aへ送信し、領域112に該当する描画対象ブロックのデータを描画ノード34bへ送信する。また、領域114に該当する描画対象ブロックのデータを描画ノード34cへ送信し、領域116に該当する描画対象ブロックのデータを描画ノード34dへ送信する。
図11の(a)における領域100〜領域106の分散は「13.5」である一方、図11の(f)における領域110〜領域116の分散は「1.5」に低下している。このように本変形例の態様によると、各描画ノードの負荷を平準化でき、特定のノードに負荷が集中すること、またその特定のノードで描画が遅延することを抑制できる。
第3変形例として、実施例の画像処理システム30の利用例を説明する。画像処理システム30に対する外部装置(外部システム)は、スタジアム等でなされるスポーツの様子を撮影して点群のデータを生成する。この外部装置は、生成した点群のデータを、通信網を介して、クラウドシステムとしての画像処理システム30へ送信する。画像処理システム30(ここではマスタノード32)は、実施例と同様に、点群のデータが示す空間を複数のブロックに分割し、内包する点の個数に基づいて各ブロックに優先度を付与する。画像処理システム30は、点群のデータをブロック単位にクライアント装置(進行中のスポーツの画像を表示するユーザ装置等)へ送信し、その際に、優先度が高いブロックのデータを先に送信する。
点の個数が多いブロックを先にクライアント装置へ届けるため、仮に通信に遅延が発生しても、点の個数が多いブロック、言い換えれば、情報が多い部分が所定のタイミングまでにクライアント装置へ配信される可能性を高めることができる。なお、点群のデータを生成する外部装置は、複数のブロックへの分割をさらに実行して、各ブロックの点データを画像処理システム30へ送信してもよい。この場合、画像処理システム30は、優先度付け以降の処理を実行してもよい。
第4変形例として、実施例の画像処理システム30の別の利用例を説明する。ここでは、サーバ内に保存されている点群のデータをクライアント装置が取得し、処理(描画等)を実行する。このサーバは、実施例のマスタノード32の機能を備え、点群のデータが示す空間を分割し、内包する点の個数に基づいて各ブロックに優先度を付与し、優先度が高いブロックのデータを先にクライアント装置へ送信する。この変形例でも、点の個数が多いブロックを先にクライアント装置へ届けるため、仮に通信に遅延が発生しても、点の個数が多いブロック、言い換えれば、情報が多い部分がクライアント装置で処理(描画等)される可能性を高めることができる。
上記実施例に記載の技術は、現実空間の様子を示す点群データを処理(描画等)することに制限されず、仮想空間の様子を示す点群データを処理(描画等)する場合にも適用可能であり、実施例と同様に効率的な点群処理を実現できる。
上述した実施例および変形例の任意の組み合わせもまた本発明の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる実施例および変形例それぞれの効果をあわせもつ。
請求項に記載の各構成要件が果たすべき機能は、上述した実施例および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。