説明

画像処理プログラムおよび画像処理装置

【課題】3次元空間の画像において輪郭を検出する際において、状況によって処理付加が増大することを防止する。
【解決手段】ゲーム装置は、オブジェクトが配置された3次元仮想空間を所定の視点から見た画像を生成する。次に、ゲーム装置は、3次元仮想空間における視点からの視線方向への奥行きを表す奥行値(Z値)を画像の画素毎に取得する。さらに、ゲーム装置は、オブジェクトの輪郭に対応する画素を奥行値に基づいて検出する。具体的には、複数の画素を参照画素として特定し、対象画素および複数の参照画素についての画素間の奥行値の差の変化度に基づいて、当該対象画素が輪郭に対応するか否かを判定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像処理プログラムおよび画像処理装置に関し、より特定的には、3次元仮想空間の画像を生成する画像処理を実行するための画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【0002】
従来、3次元画像処理において劇画風(アニメ風)の画像を生成するために、ポリゴンによって構成されるモデルにアウトライン(輪郭)を描くための処理が提案されている。例えば、特許文献1〜3に記載された画像処理装置は、キャラクタ等を表すモデル(基本モデル)と、アウトラインを描くための拡大モデルとを用いている。拡大モデルは、基本モデルを拡大したもので、基本モデルを内包するように配置される。また、拡大モデルを構成するポリゴンの法線ベクトルは、基本モデルの法線ベクトルに比べて法線ベクトルが反転されており、基本モデルの法線ベクトルがモデルの外側を向くように設定されるのに対して、拡大モデルの法線ベクトルはモデルの内側を向くように設定される。これによれば、陰面処理等を用いた3次元画像処理によって基本モデルおよび拡大モデルを描画する際には、拡大モデルは、視点から見て基本モデルの後方で、かつ基本モデルの縁よりも外側の部分のみが描画されることになる。したがって、当該拡大モデルを例えば黒等で塗りつぶすことにより、基本モデルの外側にアウトラインが付された画像を生成することができる。
【特許文献1】特開2000−251094号公報
【特許文献2】特開2001−126086号公報
【特許文献3】特開2001−084404号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
特許文献1に記載の画像処理装置では、1つのキャラクタを描画するために基本モデルおよび拡大モデルという2つのモデルが必要となるので、1つのキャラクタで1つのモデルを利用する場合に比べて処理が増加する。このため、1つのモデルを構成するポリゴン数が多くなるほど処理負担が増加し、また描画対象のモデルの数が多くなるほど処理負荷が増大するという問題がある。
【0004】
また、特許文献1に記載の画像処理装置では、基本モデルの外側にある拡大モデルの部分がアウトラインとなるので、生成される画像においては始点からモデルまでの距離によってアウトラインの太さが変わる。したがって、カメラからモデルまでの距離が遠いとアウトラインが視認できないほど細くなったり、逆に距離が近すぎるとアウトラインが太くなりすぎたりするという問題がある。
【0005】
それ故、本発明の目的は、3次元空間の画像において輪郭を検出する際において、状況によって処理負荷が増大し過ぎることを防止し、安定した負荷で処理することができる画像処理プログラムおよび画像処理装置を提供することである。
【課題を解決するための手段】
【0006】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【0007】
第1の発明は、3次元仮想空間の画像を生成する処理をコンピュータ(CPU10および/またはGPU11b)に実行させる画像処理プログラム(ゲームプログラム60)である。画像処理プログラムは、画像生成ステップ(S2)と、奥行値取得ステップ(S11)と、輪郭検出ステップ(S3)とをコンピュータに実行させる。画像生成ステップにおいて、コンピュータは、オブジェクトが配置された3次元仮想空間を所定の視点から見た画像を生成する。奥行値取得ステップにおいて、コンピュータは、3次元仮想空間における視点からの視線方向への奥行きを表す奥行値(Z値)を画像の画素毎に取得する。輪郭検出ステップにおいて、コンピュータは、オブジェクトの輪郭に対応する画素を奥行値に基づいて検出する。
【0008】
第2の発明においては、画像処理プログラムは、画像の各画素のうちから、輪郭に対応するか否かを判定する処理の処理対象となる対象画素を選択する対象画素選択ステップ(S21)をさらにコンピュータに実行させてもよい。このとき、輪郭検出ステップは、参照画素特定ステップ(S22)と、輪郭判定ステップ(S13,S14)とを含む。参照画素特定ステップにおいて、コンピュータは、対象画素に対して所定の位置関係にある少なくとも1つの参照画素を特定する。輪郭判定ステップにおいて、コンピュータは、対象画素の奥行値と参照画素の奥行値との差(Zdif1)に基づいて、当該対象画素が輪郭に対応するか否かを判定する。
【0009】
第3の発明においては、参照画素特定ステップにおいて、コンピュータは、複数の画素を参照画素として特定してもよい。このとき、輪郭判定ステップにおいて、コンピュータは、対象画素および複数の参照画素に関する奥行値の差の変化度(Zdif2)に基づいて、当該対象画素が輪郭に対応するか否かを判定する。
【0010】
第4の発明においては、参照画素特定ステップにおいて、コンピュータは、対象画素を中心に点対称な位置にある少なくとも2つの画素を参照画素として特定してもよい。このとき、輪郭判定ステップにおいて、コンピュータは、対象画素の奥行値と各参照画素の奥行値とのそれぞれの差の変化度に基づいて、当該対象画素が輪郭に対応するか否かを判定する。
【0011】
第5の発明においては、輪郭判定ステップにおいて、コンピュータは、参照画素の奥行値の平均と対象画素の奥行値との差を変化度として用いてもよい。
【0012】
第6の発明においては、輪郭判定ステップにおいて、コンピュータは、参照画素の奥行値の平均から対象画素の奥行値を引いた差が所定値よりも大きい場合、当該対象画素が輪郭に対応すると判定してもよい。
【0013】
第7の発明においては、輪郭判定ステップにおいて、コンピュータは、対象画素の奥行値から参照画素の奥行値の平均を引いた差が所定値よりも大きい場合、当該対象画素が輪郭に対応すると判定してもよい。
【0014】
第8の発明においては、輪郭判定ステップにおいて、コンピュータは、参照画素の奥行値の平均と対象画素の奥行値との差の絶対値が所定値よりも大きい場合、当該対象画素が輪郭に対応すると判定してもよい。
【0015】
第9の発明においては、輪郭判定ステップにおいて、コンピュータは、参照画素の奥行値の平均と対象画素の奥行値との比を変化度として用いてもよい。
【0016】
第10の発明においては、輪郭判定ステップにおいて、コンピュータは、輪郭に対応する画素について、輪郭の濃さを表す輪郭値(第1〜第3輪郭値)を変化度の大きさに応じて算出してもよい。このとき、画像処理プログラムは、輪郭判定ステップにおいて輪郭に対応すると判定された画素に対して、輪郭値に応じた濃さで輪郭を描画する輪郭画像描画ステップ(S5)をコンピュータにさらに実行させる。
【0017】
第11の発明においては、参照画素特定ステップにおいて、コンピュータは、対象画素を中心に点対称な位置にある2個1組の画素を複数組、当該対象画素から各組の画素への方向が異なるように特定してもよい。このとき、輪郭判定ステップにおいて、コンピュータは、変化度を画素の組毎に算出し、算出された各変化度に基づいて、対象画素が輪郭に対応するか否かを判定する。
【0018】
第12の発明においては、参照画素特定ステップにおいて、コンピュータは、対象画素を中心に点対称な位置にあり、画像の縦方向に並ぶ2個の画素と、対象画素を中心に点対称な位置にあり、当該画像の横方向に並ぶ2個の画素とを少なくとも参照画素として特定してもよい。
【0019】
第13の発明においては、参照画素特定ステップにおいて、コンピュータは、対象画素を中心に点対称な位置にあり、画像の斜め方向に並ぶ2個の画素を少なくとも参照画素として特定してもよい。
【0020】
第14の発明においては、輪郭判定ステップは、第1判定ステップ(S13,S14)と、第2判定ステップ(S15)とを含んでいてもよい。第1判定ステップにおいて、コンピュータは、変化度を画素の組毎に算出し、算出された各変化度に基づいて、対象画素が輪郭に対応するか否かを当該組毎に予備的に判定する。第2判定ステップにおいて、コンピュータは、第1判定ステップによる判定結果に基づいて、対象画素が輪郭に対応するか否かを判定する。
【0021】
第15の発明においては、第1判定ステップにおいて、コンピュータは、対象画素が輪郭に対応するか否かを予備的に判定するための判定条件として、参照画素の組毎に異なる条件を用いてもよい。
【0022】
第16の発明においては、参照画素特定ステップにおいて、コンピュータは、対象画素から参照画素までの距離(幅w)が参照画素の組毎に異なるように参照画素を特定してもよい。
【0023】
第17の発明においては、画像生成ステップにおいて生成された画像を描画するとともに、輪郭検出ステップによって検出された画素に対して所定の色で描画処理を行う輪郭画像描画ステップ(S5)をコンピュータにさらに実行させてもよい。
【0024】
第18の発明においては、輪郭検出ステップによって検出された輪郭のみの画像を生成する輪郭画像生成ステップをコンピュータにさらに実行させてもよい。
【0025】
第19の発明においては、輪郭検出ステップによって検出された画素に従って決められる領域内の画素を対象として、アンチエイリアシング処理を実行する処理実行ステップをコンピュータにさらに実行させてもよい。
【0026】
第20の発明においては、奥行値取得ステップにおいて、コンピュータは、Zバッファに記憶されているZ値を奥行値として取得してもよい。
【0027】
第21の発明においては、奥行値は、視点から画素に描画されるオブジェクトまでの仮想空間における奥行方向の位置を表すものであってもよい。
【0028】
第22の発明においては、奥行値取得ステップにおいて、コンピュータは、Zバッファに記憶されているZ値を変換する(ステップS12)ことによって奥行値を取得してもよい。
【0029】
第23の発明においては、奥行値取得ステップにおいて、コンピュータは、Wバッファに記憶されている値を奥行値として取得してもよい。
【発明の効果】
【0030】
第1の発明によれば、3次元空間の画像において輪郭を検出する処理を、当該画像を用いて行うことができる。これによれば、従来の方法のように輪郭付加用に3次元のオブジェクト(モデル)を用意する必要がなく、画像から輪郭を検出することができる。すなわち、第1の発明によれば、従来の方法のようにオブジェクトの数等の状況によって処理量が増大することを防止することができ、コンピュータの処理付加を安定することができる。
【0031】
第2の発明によれば、対象画素と参照画素との奥行値の差に基づいて、対象画素が輪郭に対応するか否かを判定するので、輪郭を簡易な方法で高速に検出することができる。
【0032】
第3の発明によれば、対象画素および複数の参照画素に関する奥行値の差の変化度に基づいて、当該対象画素が輪郭に対応するか否かを判定するので、単に奥行値の差をそのまま用いて判定を行う場合よりも、さらに正確に判定を行うことができる。
【0033】
第4の発明によれば、対象画素を中心に点対称な位置にある少なくとも2つの画素を参照画素として特定することにより、対象画素の両側にある画素と対象画素とについて奥行値の差の変化度を算出することができる。これによれば、対象画素が輪郭に対応するか否かをより正確に判定することができる。
【0034】
第5の発明によれば、参照画素の奥行値の平均と対象画素の奥行値との差を変化度とするので、変化度を容易に算出することができる。
【0035】
第6の発明によれば、対象画素が輪郭に対応すると判定するための条件として、参照画素の奥行値の平均から対象画素の奥行値を引いた差が所定値よりも大きいことを条件とする。これによれば、対象画素の部分でオブジェクトの断面が凸になっている場合に、当該部分を輪郭として検出することができる。
【0036】
第7の発明によれば、対象画素が輪郭に対応すると判定するための条件として、対象画素の奥行値から参照画素の奥行値の平均を引いた差が所定値よりも大きいことを条件とする。これによれば、対象画素の部分でオブジェクトの断面が凹になっている場合に、当該部分を輪郭として検出することができる。
【0037】
第8の発明によれば、対象画素が輪郭に対応すると判定するための条件として、参照画素の奥行値の平均と対象画素の奥行値との差の絶対値が所定値よりも大きいことを条件とする。これによれば、対象画素の部分でオブジェクトの断面が凸または凹になっている場合に、当該部分を輪郭として検出することができる。
【0038】
第9の発明によれば、参照画素の奥行値の平均と対象画素の奥行値との比を変化度とするので、変化度を容易に算出することができる。
【0039】
第10の発明によれば、変化度の大きさに応じて輪郭の濃さに変化を付けて輪郭を描画することができる。ここで、3次元空間内のオブジェクトが移動したり、仮想カメラが移動・回転したりすることによって、仮想カメラの視線に対するオブジェクトの向きが変化することがある。第10の発明によれば、このような場合、3次元の画像が新たに生成される度に輪郭画像描画ステップを実行することによって、上記向きの変化に応じて変化度の値が変わり、輪郭の色の濃さを変化させることができる。したがって、オブジェクトの向きが変化する結果新たな輪郭が表示される場合には、最初は薄い色の輪郭が表示され、その後輪郭は次第に濃くなっていくように表示される。つまり、第10の発明によれば、新たに輪郭が描かれる場合には、急に輪郭が現れるのではなく、次第に輪郭が浮かび上がってくるように表現することができ、輪郭を自然に表示させることができる。
【0040】
第11〜第13の発明によれば、3次元の画像における複数の方向に関して輪郭検出処理を行うので、様々な方向に延びる輪郭を検出することができる。
【0041】
第14の発明によれば、3次元の画像における複数の方向に関して別々に輪郭検出処理を行うので、様々な方向に延びる輪郭をより正確に検出することができる。
【0042】
第15および第16の発明によれば、参照画素の組によって輪郭判定ステップの判定結果が異なることになるので、画素における各方向によって輪郭が検出されやすかったり、検出されにくかったりすることになる。これによれば、ある方向に関しては太く、他の方向に関しては細くなるように輪郭を検出することができる。したがって、例えば、検出した輪郭を描画する場合には、マーカペンのような、描く方向によって太さが異なるペンで描かれたような輪郭を表現することができる。
【0043】
第17の発明によれば、3次元空間の画像に輪郭が付された画像を生成して表示することができる。また、第18の発明によれば、3次元空間の画像の輪郭のみを表す画像を生成して表示することができる。さらに、第17および第18の発明によれば、輪郭付加用の3次元のオブジェクトを用いるわけではないので、検出される輪郭の太さは視点とオブジェクトとの間の距離に依存しない。したがって、第17および第18の発明によれば、カメラからオブジェクトまでの距離が遠いために輪郭が視認できないほど細くなったり、逆に距離が近すぎるために輪郭が太くなりすぎたりすることを防止することができ、距離に依存しない線幅で輪郭を描くことができる。
【0044】
第19の発明によれば、輪郭に対応するとして検出された画素に従って決められる領域を対象として、アンチエイリアシング処理を行うので、アンチエイリアシング処理を効率良く行うことができ、画像における輪郭の部分におけるエイリアシングを改善することができる。
【0045】
第20、第22および第23の発明によれば、Zバッファに記憶されているZ値や、Wバッファに記憶されている値を奥行値とすることにより、奥行値を容易に取得することができる。また、第21の発明によれば、奥行値は、視点から画素に描画されるオブジェクトまでの仮想空間における距離を表すので、奥行値を用いた輪郭の検出処理を正確に行うことができる。
【発明を実施するための最良の形態】
【0046】
(ゲームシステムの全体構成)
図1を参照して、本発明の一実施形態に係る画像処理装置の一例として、ゲーム装置を含むゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置3、光ディスク4、コントローラ5、およびマーカ部6を含む。本システムは、コントローラ5を用いたゲーム操作に基づいてゲーム装置3でゲーム処理を実行するものである。
【0047】
本発明に係る情報処理装置の一例であるゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられ、データの読み取りが可能な情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置3において実行されるためのゲームプログラム(本発明に係る画像処理プログラムの一例)が記憶されている。ゲーム装置3の前面には光ディスク4の挿入口が設けられている。ゲーム装置3は、挿入口に挿入された光ディスク4に記憶されているゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【0048】
ゲーム装置3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2は、ゲーム装置3において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ2の画面の周辺(図1では画面の上側)には、マーカ部6が設置される。マーカ部6は、その両端に2つのマーカ6Rおよび6Lを備えている。マーカ6R(マーカ6Lも同様)は、具体的には1以上の赤外LEDであり、テレビ2の前方に向かって赤外光を出力する。マーカ部6はゲーム装置3に接続されており、ゲーム装置3はマーカ部6が備える各赤外LEDの点灯を制御することが可能である。
【0049】
コントローラ5は、自機に対して行われた操作の内容を示す操作データをゲーム装置3に与える入力装置である。コントローラ5とゲーム装置3とは無線通信によって接続される。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは有線で接続されてもよい。
【0050】
(ゲーム装置3の内部構成)
次に、図2を参照して、ゲーム装置3の内部構成について説明する。図2は、ゲーム装置3の構成を示すブロック図である。ゲーム装置3は、CPU10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
【0051】
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSIの内部構成について後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
【0052】
また、システムLSI11には、入出力プロセッサ11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRAM11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
【0053】
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。
【0054】
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
【0055】
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、画像がテレビ2に表示されるとともに音がスピーカ2aから出力される。
【0056】
入出力プロセッサ(I/Oプロセッサ)11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
【0057】
入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
【0058】
また、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
【0059】
さらに、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
【0060】
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置3の各構成要素に対して、図示しないACアダプタを経て電源が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
【0061】
(コントローラ5の構成)
次に、図3〜図6を参照して、コントローラ5について説明する。図3および図4は、コントローラ5の外観構成を示す斜視図である。図3は、コントローラ5の上側後方から見た斜視図であり、図4は、コントローラ5を下側前方から見た斜視図である。
【0062】
図3および図4において、コントローラ5は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ5に設けられたボタンを押下すること、および、コントローラ5自体を動かしてその位置や姿勢を変えることによってゲーム操作を行うことができる。
【0063】
ハウジング31には、複数の操作ボタンが設けられる。図3に示すように、ハウジング31の上面には、十字ボタン32a、1番ボタン32b、2番ボタン32c、Aボタン32d、マイナスボタン32e、ホームボタン32f、プラスボタン32g、および電源ボタン32hが設けられる。一方、図4に示すように、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはBボタン32iが設けられる。これらの各操作ボタン32a〜32iには、ゲーム装置3が実行するゲームプログラムに応じた機能が適宜割り当てられる。また、電源ボタン32hは遠隔からゲーム装置3本体の電源をオン/オフするためのものである。ホームボタン32fおよび電源ボタン32hは、その上面がハウジング31の上面に埋没している。これによって、プレイヤがホームボタン32fまたは電源ボタン32hを誤って押下することを防止することができる。
【0064】
ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、コントローラ5に他の機器(例えば、他のコントローラ)を接続するために利用される。
【0065】
ハウジング31上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5には、他のメインコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ5の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
【0066】
また、コントローラ5は撮像情報演算部35(図5B)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
【0067】
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、コントローラ5に内蔵されるスピーカ49(図5A)からの音を外部に放出するための音抜き孔31aが形成されている。
【0068】
次に、図5Aおよび図5Bを参照して、コントローラ5の内部構造について説明する。図5Aおよび図5Bは、コントローラ5の内部構造を示す図である。なお、図5Aは、コントローラ5の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bは、コントローラ5の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bに示す斜視図は、図5Aに示す基板30を裏面から見た斜視図となっている。
【0069】
図5Aにおいて、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ49等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図5B参照)に接続される。本実施形態では、加速度センサ37は、X軸方向に関してコントローラ5の中心からずれた位置に配置されている。これによって、コントローラ5をZ軸回りに回転させたときのコントローラ5の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z軸方向)に関してコントローラ5の中心よりも前方に配置されている。また、無線モジュール44(図6)およびアンテナ45によって、コントローラ5がワイヤレスコントローラとして機能する。
【0070】
一方、図5Bにおいて、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ5の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
【0071】
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ48が設けられている。バイブレータ48は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ48が作動することによってコントローラ5に振動が発生する。これによって、コントローラ5を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ48は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ48がコントローラ5の中心よりも端側に配置することによって、バイブレータ48の振動によりコントローラ5全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5Aおよび図5Bに示す他、コントローラ5は、マイコン42の基本クロックを生成する水晶振動子、スピーカ49に音声信号を出力するアンプ等を備えている。
【0072】
なお、図3〜図5A、図5Bに示したコントローラ5の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はZ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【0073】
図6は、コントローラ5の構成を示すブロック図である。コントローラ5は、操作部32(各操作ボタン32a〜32i)、コネクタ33、撮像情報演算部35、通信部36、および加速度センサ37を備えている。コントローラ5は、自機に対して行われた操作内容を示すデータを操作データとしてゲーム装置3へ送信するものである。
【0074】
操作部32は、上述した各操作ボタン32a〜32iを含み、各操作ボタン32a〜32iに対する入力状態(各操作ボタン32a〜32iが押下されたか否か)を示す操作ボタンデータを通信部36のマイコン42へ出力する。
【0075】
撮像情報演算部35は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ5の動きでも追跡して解析することができる。
【0076】
撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ5の前方から入射する光から赤外線のみを通過させる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ入射させる。撮像素子40は、例えばCMOSセンサやあるいはCCDセンサのような固体撮像素子であり、レンズ39が集光した赤外線を受光して画像信号を出力する。ここで、テレビ2の表示画面近傍に配置されるマーカ部6のマーカ6Rおよび6Lは、テレビ2の前方に向かって赤外光を出力する赤外LEDで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、マーカ6Rおよび6Lの画像をより正確に撮像することができる。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象(マーカ6Rおよび6L)の位置を算出する。画像処理回路41は、算出された位置を示す座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ5自体の向き(姿勢)や位置に対応して変化するので、ゲーム装置3はこのマーカ座標を用いてコントローラ5の向きや位置を算出することができる。
【0077】
加速度センサ37は、コントローラ5の加速度(重力加速度を含む)を検出する、すなわち、コントローラ5に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、3軸または2軸の加速度センサは、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能である種類のものでもよい。なお、加速度センサ37は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
【0078】
本実施形態では、加速度センサ37は、コントローラ5を基準とした上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ5を基準に設定されるXYZ座標系における3次元のベクトル(AX,AY,AZ)として表される。以下では、加速度センサ37によって検出される3軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
【0079】
加速度センサ37が検出した加速度を示すデータ(加速度データ)は、通信部36へ出力される。なお、加速度センサ37が検出した加速度は、コントローラ5自体の向き(姿勢)や動きに対応して変化するので、ゲーム装置3は加速度データを用いてコントローラ5の向きや動きを算出することができる。本実施形態では、ゲーム装置3は、加速度データに基づいてコントローラ5の姿勢を判断する。
【0080】
なお、加速度センサ37から出力される加速度の信号に基づいて、ゲーム装置3のプロセッサ(例えばCPU10)またはコントローラ5のプロセッサ(例えばマイコン42)等のコンピュータが処理を行うことによって、コントローラ5に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ37を搭載するコントローラ5が静止状態であることを前提としてコンピュータ側の処理が実行される場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合)、コントローラ5が現実に静止状態であれば、検出された加速度に基づいてコントローラ5の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ37の検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサ37の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ37からの出力に基づいてコントローラ5の傾き角度を算出してもよいし、当該傾き角度を算出せずに、コントローラ5の傾き方向を算出するようにしてもよい。このように、加速度センサ37をプロセッサと組み合わせて用いることによって、コントローラ5の傾きまたは姿勢を判定することができる。
【0081】
一方、コントローラ5が動的な状態(コントローラ5が動かされている状態)であることを前提とする場合には、加速度センサ37は重力加速度に加えてコントローラ5の動きに応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ5の動き方向を知ることができる。また、コントローラ5が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの動きに応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ5の傾きを知ることが可能である。なお、他の実施例では、加速度センサ37は、内蔵の加速度検出手段で検出された加速度信号をマイコン42に出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ37が静的な加速度(例えば、重力加速度)を検出するために用いられる場合、加速度信号を傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
【0082】
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。
【0083】
操作部32、撮像情報演算部35、および加速度センサ37からマイコン42へ出力されたデータは、一時的にメモリ43に格納される。これらのデータは、上記操作データとしてゲーム装置3へ送信される。すなわち、マイコン42は、ゲーム装置3無線コントローラモジュール19への送信タイミングが到来すると、メモリ43に格納されている操作データを無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ5から送信される。微弱電波信号はゲーム装置3側の無線コントローラモジュール19で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、取得した操作データとゲームプログラムとに基づいてゲーム処理を行う。なお、通信部36から無線コントローラモジュール19への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ5の通信部36は、例えば1/200秒に1回の割合で各操作データをゲーム装置3の無線コントローラモジュール19へ出力する。
【0084】
上記コントローラ5を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ5によって画面上の任意の位置を指示する操作、および、コントローラ5自体を動かす操作を行うことができる。図7は、コントローラ5を用いてゲーム操作を行うときの様子を示す図解図である。本実施形態では、プレイヤは、図7に示すように、コントローラ5を動かすゲーム操作、および、コントローラ5によってテレビ2の画面上の位置Pを指し示すゲーム操作を行うことができる。
【0085】
(ゲーム装置における処理の概要)
以下、ゲーム装置3で実行される処理の概要について説明する。以下では、3次元仮想空間の画像に対して輪郭を付す画像処理について主に説明する。この処理は、例えば、ゲーム空間に登場するプレイヤキャラクタ等のオブジェクトを劇画風(アニメ風)に表現する等の目的で行われる。
【0086】
図8は、3次元空間の画像の一例を示す図である。図8では、3次元の仮想空間(ゲーム空間)に地面オブジェクト51が配置され、地面オブジェクト51の上に第1オブジェクト52および第2オブジェクト53が配置されている。第1オブジェクト52は、球体を2つ接続したひょうたん型の形状であり、図8では、小さい方の球体の側から見たときの第1オブジェクト52が示されている。第2オブジェクト53は三角柱である。図8に示すような3次元空間の画像は、周知の方法により、3次元空間に配置される仮想カメラに基づいて生成される。すなわち、ゲーム装置3は、3次元空間に対して仮想カメラの位置を基準として例えば透視変換を行うことによって、仮想カメラの位置(視点位置)から仮想カメラの方向(視線方向)に見た3次元空間の画像を生成する。なお、3次元空間の画像が生成される際、画像の画素毎に、当該画素として表示される対象の3次元空間における(視点から視線方向への)奥行きを表すZ値が算出される。後述する輪郭検出処理では、このZ値を用いて、輪郭に対応する画素(輪郭を描画すべき画素)が検出される。
【0087】
図9は、図8に示す画像に対して輪郭を付した画像の一例を示す図である。なお、図9においては、本ゲーム装置3による処理によって付される輪郭を太線で表している。また、図8および図9においては、実際の画像とは異なるが、図面をわかりやすくする目的で、あるオブジェクトと他のオブジェクトとの境界部分やオブジェクトの尖っている部分等を示す線を細線で表している。本実施形態では、ゲーム装置3は、図8に示す画像から、図9のように輪郭が付された画像を生成する処理を行う。なお、以下では、図8に示すような輪郭が付される前の画像を元画像と呼び、図9に示すような元画像に輪郭が付された画像を輪郭画像と呼ぶ。
【0088】
本実施形態では、ゲーム装置3は、従来手法のように3次元の拡大モデルを新たに用意することによって輪郭を描くのではなく、元画像および元画像の各画素について設定されるZ値を用いて輪郭画像を生成する。すなわち、ゲーム装置3は、元画像の各画素のうちで輪郭に対応する画素をZ値を用いて検出し、検出された画素に輪郭の色(例えば黒色)を描画することによって輪郭画像を得る。これによれば、新たなモデルを用意する必要がなく、輪郭の描画自体には描画するオブジェクトの数やオブジェクトのデータ量等に負荷が依存せず、変動のない画素数に応じた安定した処理量で輪郭画像を生成することができる。以下、輪郭に対応する画素を検出する処理(輪郭検出処理)について説明する。
【0089】
輪郭検出処理においては、ゲーム装置3は、元画像の各画素について、その画素と所定の位置関係にある画素とのZ値の差分に基づいて、その画素が輪郭に対応する画素であるか否かを判定する判定処理を実行することによって、輪郭に対応する画素を検出する。以下では、上記判定処理の処理対象となる画素を「対象画素」と呼ぶ。また、対象画素と所定の位置関係にある画素を「参照画素」と呼ぶ。参照画素は、上記判定処理においてZ値が参照される画素である。以上のように、本実施形態では、対象画素と参照画素とのZ値の差を用いて、対象画素が輪郭に対応するか否かを判定する。
【0090】
図10は、3次元空間内のオブジェクトが描画される画素と、画素に設定されるZ値との関係を示す図である。図10は、仮想カメラの視線方向に垂直な方向から第1および第2オブジェクト52および53を見たときの3次元空間の所定位置での断面を模式的に示している。すなわち、1列分の画素に相当する3次元空間を表している。図10では説明を容易にする目的でマス目を付しており、縦方向のマス目は画素の単位を表し、横方向のマス目はZ値の単位を表している。すなわち、縦方向の1マスは1つの画素を表しており、図10では、上から順に画素P1から画素P30まで30個の画素が表されている。これらの画素P1〜P30は、画像上においては縦または横に一列に並ぶ画素である。また、横方向の1マスはZ値の最小単位を表している。また、図10において、斜線で描かれているマス目は、画素に描かれるオブジェクトの部分を示している。例えば、上から3つ目の画素P3には、第1オブジェクト52の縁の部分が描かれることになり、画素P3のZ値は、基準(図10の左端)から13マス分の大きさとなる。なお、ここでは、各オブジェクトは透明でないものとする。また、オブジェクトが描かれない画素には背景が描画されることとなり、当該画素のZ値は、Z値の取り得る最大値となる。以下では、図10に示すような、画素とZ値との関係を示す図を用いて輪郭検出処理を説明する。
【0091】
図11は、輪郭検出処理の第1の方法を説明する図である。図11は、図10に示す図と同様、3次元空間の所定位置での断面を模式的に示す図である。なお、図11では、画素3つ分の領域のみを示している。第1の方法では、対象画素に対して所定方向の側で隣接する(1つの)画素が参照画素とされる。図11を例にとって説明すると、画素Paを対象画素とした場合、所定方向の側(図では上側)で隣接する画素Pbが参照画素となる。第1の方法では、ゲーム装置3は、対象画素PaのZ値Zaと、参照画素PbのZ値Zbとの差(差の絶対値)Zdif1を算出する。そして、差Zdif1が所定の閾値Zsよりも大きい場合、対象画素Paは輪郭に対応すると判定される(輪郭であるとして検出される)。ここで、差Zdif1が閾値Zsよりも大きい場合には、対象画素Paに描画されるオブジェクトと参照画素P2に描画されるオブジェクトとは、奥行が相当程度離れていることから、連続していないオブジェクト(異なるオブジェクト)と推測することができる。つまり、第1の方法では、差Zdif1が閾値Zsよりも大きいか否かを判定することによって、対象画素Paが連続していないオブジェクトの境界であるか否かを判断し、輪郭を検出している。
【0092】
図12は、第1の方法で輪郭を検出した結果を示す図である。図12は、図10から、輪郭として検出された画素のマス目を黒く塗りつぶした図である。なお、図12では、上記閾値Zcを“3(マス)”としている、すなわち、対象画素のZ値と参照画素(上隣の画素)のZ値との差が横方向に3マス分よりも大きい場合、対象画素が輪郭に対応すると判断するようにしている。
【0093】
図12に示されるように、第1の方法による輪郭検出処理によって、第1オブジェクト52の大きい方の球体の縁に対応する画素P3およびP15が輪郭と検出され、また、第1オブジェクト52の小さい方の球体の縁に対応する画素P6およびP12が輪郭と検出される。このように、第1オブジェクト52については、第1の方法による輪郭検出処理によって、輪郭を検出できることがわかる。したがって、第1の方法によって、2つの画素のZ値の差を算出するという簡易な方法で、元画像から輪郭を検出することができる。
【0094】
ここで、第1の方法では、仮想カメラの視線方向に対して角度が小さい面(視線方向に対して平行に近い面)については、輪郭を正しく検出することができないおそれがある。例えば図12の例では、三角柱である第2オブジェクト53の側面が描画される画素P22,P23,P25,およびP26が輪郭として検出されてしまう。上記側面のように視線方向に対して角度が小さい面については、対象画素と参照画素とのZ値の差が大きくなるので、差が閾値Zsよりも大きくなるからである。
【0095】
また、第1の方法では、対象画素に対していずれの方向の画素を参照画素とするかによって、検出される輪郭に若干のずれが生じる。すなわち、図12の例では、対象画素に対して上側で隣接する画素を参照画素としているので、第1オブジェクト52について言えば画素P3,P6,P12,およびP15が輪郭として検出される。しかし、対象画素に対して下側で隣接する画素を参照画素とした場合には、第1オブジェクト52については画素P2,P5,P11,およびP14が輪郭として検出される。つまり、対象画素に対していずれの方向の画素を参照画素とするかによって、輪郭として検出される画素が1画素分ずれてしまう。また、第1の方法では、第1オブジェクト52のように対称な図形であっても、輪郭として検出される画素が1画素分ずれてしまい、検出される輪郭は対称にならなくなる。通常の画像では画素数が大きいので問題にならない場合もあるが、以上のように、上記第1の方法では、検出される輪郭にずれが生じることから、正確に輪郭を検出することができないおそれがある。
【0096】
上記第1の方法は、検出が簡単ではあるものの、以上の点を考慮して、必要に応じて、輪郭検出処理として第2の方法を用いる。図13は、輪郭検出処理の第2の方法を説明する図である。図13は、図11と同様、図10の一部を拡大した図である。第2の方法では、対象画素の両隣の画素をそれぞれ参照画素とする。図13を例にとって説明すると、画素Paが対象画素とした場合、両隣の画素PbおよびPcが参照画素となる。第2の方法では、ゲーム装置3はまず、2つの参照画素PbおよびPcのZ値の平均値Zavを算出する。次に、対象画素PaのZ値Zaから平均値Zavを引いた差Zdif2を算出する。そして、差Zdif2が所定の閾値Zs(>0)よりも大きい場合、対象画素Paは輪郭に対応すると判定する。
【0097】
ここで、第2の方法において、差Zdif2は、次の式(1)のように表される。
Zdif2=Za−(Zb+Zc)/2 …(1)
さらに、上式(1)は、次式(2)のように変換することができる。
Zdif2={(Zb−Za)−(Za−Zc)}/2 …(2)
上式(2)から明らかなように、差Zdif2は、一方の参照画素PbのZ値Zbから対象画素PaのZ値Zaを引いた差(Zb−Za)と、対象画素PaのZ値Zaから他方の参照画素PcのZ値Zcを引いた差(Za−Zc)との変化量(差)の1/2の値となる。したがって、差Zdif2は、対象画素のZ値と参照画素のZ値との差の変化の度合い(変化度)を表していることがわかる。ここで、上記変化度が所定の値より大きい場合、対象画素Paに描画されるオブジェクトと、それに隣接する参照画素PbまたはPcのいずれかに描画されるオブジェクトとは、連続していないオブジェクト(異なるオブジェクト)と推測することができる。第2の方法では、上記変化度の大きさを判定することによって、対象画素Paが連続していないオブジェクトの境界であるか否かを判定し、輪郭を検出している。
【0098】
図14は、第2の方法で輪郭を検出した結果を示す図である。図14は、図12と同様、図10から、輪郭として検出された画素のマス目を黒く塗りつぶした図である。第2の方法によれば、両隣の画素のZ値との差の変化度を用いるので、例えば画素P22や画素P23では差Zdif2=0となる。そのため、図14に示されるように、これらの画素P22およびP23は輪郭として検出されない。このように、第2の方法によれば、視線方向に対して角度が小さい面が輪郭として検出されることがなく、正確に輪郭を検出することができる。また、第2の方法によれば、対象画素に対して両側の画素を参照画素とするので、参照画素の設定の仕方によって、検出される輪郭にずれが生じることもない。したがって、図14に示されるように、第1オブジェクト52のように対称な図形に関しては、検出される輪郭も対称になり、正確に輪郭を付すことができる。
【0099】
なお、上記第2の方法では、上記変化度として、対象画素のZ値Zaから平均値Zavを引いた差Zdif2を用いた。この場合、対象画素のZ値Zaが平均値Zavよりもある程度大きい場合にのみ輪郭が付されるので、図14に示すように、断面が凹となる箇所に輪郭が付される。また、この場合、図14に示すように、断面が凸となる箇所には輪郭が付されない。例えば、三角柱の側面の辺に対応する画素P24は輪郭として検出されない。この場合、上述した図9に示されるような画像が輪郭画像として生成される。
【0100】
本実施形態において、断面が凸となる箇所に輪郭を付す場合には、上記変化度として、平均値Zavから対象画素のZ値Zaを引いた差Zdif2’(=−Zdif2)を用いればよい。図15は、差Zdif2’を変化度として用いた場合における輪郭の検出結果を示す図である。この場合、図15に示すように、対象画素のZ値Zaが平均値Zavよりもある程度大きい場合に輪郭が付されるので、断面が凸となる箇所に輪郭が付されることとなる。図16は、図15に示した場合に得られる輪郭画像の一例を示す図である。図16に示すように、差Zdif2’を変化度として用いることによって、第2オブジェクト53における断面が凸の箇所(三角柱の辺)にも輪郭を付すことができる。なお、図14および図15を比較するとわかるように、差Zdif2を用いる場合と差Zdif2’を用いる場合とでは、輪郭として検出される画素が1画素分ずれている。例えば第1オブジェクト52について言えば、差Zdif2を用いる場合(図14)では画素P2,P5,P12,P15が検出されるのに対して、差Zdif2’を用いる場合(図15)では画素P3,P6,P11,P14が検出される。ただし、いずれの場合でも、輪郭の形状に大きな歪みが生じるわけではない(例えば対称なオブジェクトの輪郭は対称に付される)ので、格別大きな問題はない。なお、変化度として、Zdif2’を用いることに代えて、Zdif2が所定の閾値Zs(<0)よりも小さいことを条件として判定を行うようにしても、当然に同様の結果が得られる。
【0101】
本実施形態においては、さらに、上記変化度として、上記差Zdif2(または差Zdif2’)の絶対値を用いてもよい。このとき、対象画素のZ値Zaが平均値Zavよりも大きい場合、および、平均値Zavが対象画素のZ値Zaよりも大きい場合の両方の場合において輪郭が付されるので、断面が凸となる箇所と凹となる箇所との両方に輪郭を付すことができる。このように、第2の方法によれば、変化度として用いる差を変更することで、輪郭を付したい箇所を容易に変更することができる。
【0102】
また、他の実施形態においては、上記差Zdif2に代えて、平均値Zavと対象画素のZ値Zaとの比を変化度として用いてもよい。例えば、“Za/Zav”(もしくはZav/Za)の値が所定の閾値以上(もしくは以下)であれば、対象画素は輪郭に対応すると判定するようにしてもよい。
【0103】
なお、以上に説明した第1および第2の方法においては、元画像の縦方向または横方向のいずれかについて、対象画素に隣接する参照画素を特定して輪郭検出処理を実行する場合について説明した。ここで、本実施形態では、ゲーム装置3は、縦方向および横方向の両方について輪郭検出処理を行う。縦方向の場合も横方向の場合も、対象画素に縦方向に隣接する画素を参照画素とするか、対象画素に横方向に隣接する画素を参照画素とするかという点を除いては、輪郭検出処理の内容は同様である。詳細は後述するが、ゲーム装置3は、縦方向および横方向の両方について輪郭検出処理を行った後、それぞれの検出結果に基づいて対象画素が輪郭に対応する画素であるか否かを最終的に判定する。
【0104】
(ゲーム装置における処理の詳細)
以下、図17〜図22を参照して、本実施形態における画像生成処理の詳細について説明する。なお、以下では、上記第1および第2の方法のうち、第2の方法を用いて変化度を算出する場合について説明する。図17は、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図17に示すように、メインメモリには、ゲームプログラム60および画像処理用データ61等が記憶される。なお、メインメモリには、図17に示すデータの他、コントローラ5から送信されてくる操作データや、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
【0105】
ゲームプログラム60は、本実施形態に係る画像処理プログラムの一例であり、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。ゲームプログラム60には、図18に示す画像生成処理をCPU10に実行させるプログラムの他、所定のゲーム処理をCPU10に実行させるプログラムが含まれている。
【0106】
画像処理用データ61は、後述する画像生成処理(図18)において用いられるデータである。画像処理用データ61は、元画像データ62、Z値データ63、変化度データ64、第1輪郭値データ65、第2輪郭値データ66、第3輪郭値データ67、および輪郭画像データ68を含む。
【0107】
元画像データ62は、上記元画像のデータであり、3次元空間を表すための2次元の画像のデータである。上述のように、元画像データ62は、輪郭が付される前の画像である。Z値データ63は、元画像を生成する際に元画像の各画素について算出されるZ値を示すデータである。Z値データ63は、通常、Zバッファと呼ばれるメモリ領域に記憶される。
【0108】
変化度データ64は、対象画素について算出される上記変化度を示すデータである。以下では、上述した(図13参照)、対象画素のZ値Zaから平均値Zavを引いた差Zdif2を変化度として用いる。なお、変化度データ64は、対象画素として選択される各画素それぞれの変化度の値を示す。本実施形態では、元画像の全ての画素を対象として輪郭検出処理を行うので、変化度データ64は、元画像の各画素それぞれについて設定される変化度の値を示す。
【0109】
各輪郭値データ65〜67は、元画像の各画素に対して設定される輪郭値を示す。輪郭値は、画素に描画される輪郭の色の濃さを表す。本実施形態では、輪郭値eは0≦e≦1の範囲で表され、輪郭値が大きいほど輪郭の色が濃いことを表す。したがって、本実施形態では、輪郭の濃さは必ずしも一定ではなく、画素によって濃さを変えて輪郭を描画することが可能である。また、輪郭に対応しないと判定された画素(輪郭として検出されなかった画素)については、輪郭値は“0”に設定される。
【0110】
第1輪郭値データ65は第1輪郭値を示し、第2輪郭値データ66は第2輪郭値を示し、第3輪郭値データ67は第3輪郭値を示す。このように、本実施形態では、第1〜第3輪郭値という3つの輪郭値が用いられる。第1輪郭値は、画像の横方向に関して輪郭検出処理を行った結果得られる各画素の輪郭値を示し、第2輪郭値は、画像の縦方向に関して輪郭検出処理を行った結果得られる各画素の輪郭値を示す。第3輪郭値は、第1および第2輪郭値に基づいて算出され、最終的に得られる輪郭画像における各画素の輪郭の濃さを示す。
【0111】
輪郭画像データ68は、上記輪郭画像のデータである。詳細は後述するが、輪郭画像データ68は、元画像データ62と第3輪郭値データ67とを用いて生成される。
【0112】
次に、ゲーム装置3において行われる画像生成処理の詳細を、図18〜図20を用いて説明する。図18は、ゲーム装置3において実行される処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入され、ゲームプログラムが記憶された光ディスク4がゲーム装置3に挿入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図18に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。なお、図18に示す処理は、CPU10およびGPU11bの協働動作として行われる。
【0113】
図18に示すステップS1において、まずCPU10は、3次元空間の画像を生成するために必要な情報を計算する。具体的には、仮想の3次元空間に配置される各オブジェクトの位置を算出したり、仮想カメラの位置および向きを算出したりする。本実施形態では、例えば、コントローラ5に対して行われた操作に従ってプレイヤキャラクタを移動させたり、プレイヤキャラクタの位置に基づいて仮想カメラの位置および向きを算出したりする。なお、本実施形態においては、ステップS1〜S7の処理ループは、テレビ2に表示される画像が更新される時間間隔、すなわち、1フレーム時間(例えば1/60秒)に1回の割合で実行される。
【0114】
続くステップS2において、CPU10は、3次元空間の画像(元画像)を生成する。すなわち、ステップS1で設定された仮想カメラに基づいて例えば透視変換を行うことによって、仮想カメラの位置(視点位置)から仮想カメラの方向(視線方向)に見た3次元空間の画像を生成する。なお、元画像を生成する処理において、メインメモリのZバッファ領域には元画像の各画素について算出されたZ値が記憶される。
【0115】
続くステップS3において、CPU10は、輪郭検出処理を実行する。輪郭検出処理は、元画像の各画素のうちで、輪郭に対応する画素を検出する処理である。以下、図19を参照して、輪郭検出処理の詳細を説明する。
【0116】
図19は、図18に示す輪郭検出処理(ステップS3)の流れを示すフローチャートである。輪郭検出処理においては、まずステップS11において、CPU10は、3次元空間の画像の各画素に設定される各Z値をZバッファからそれぞれ取得する。なお、描画精度を向上させる等の目的でWバッファが用いられる場合があるが、この場合には、ステップS11において、Z値に代えてWバッファの値を取得するようにしてもよい。また、それ以外であっても、奥行を表す値であれば適宜利用することが可能である。
【0117】
続くステップS12において、CPU10は、3次元空間の距離に比例するように、ステップS11で取得された各Z値をそれぞれ変換する。ここで、Zバッファから取得されたZ値そのままの値では、3次元空間における距離とZ値の大きさとが比例関係にないことがある。具体的には、一般的なZバッファのZ値の精度は、手前ほど詳細であって、奥ほど粗くなっている。したがって、同じZの値であっても、手前側の方が実際の長さは短いものとなっている。これは、一般的に、画面の手前側の方がデータの精度を要求されるためである。本実施形態においては、3次元空間における距離をより正確に表す奥行情報を得るために、3次元空間の距離に比例するようにZ値を変換する。具体的には、CPU10は、取得されたZ値に対して逆射影変換を行う。変換後の各Z値を示すデータは、Z値データ63としてメインメモリに記憶される。なお、当該Z値データ63は、Zバッファに上書きされてもよいし、他の処理においてZバッファのデータが必要となる場合等、Zバッファのデータを保持しておきたい場合には、Zバッファとは別のメモリ領域に記憶されてもよい。なお、Zバッファの値そのままであっても、前後関係自体は維持されているため、処理の軽減のためにZバッファのZ値をそのまま利用してもよい。
【0118】
なお、本実施形態においては、上記ステップS12において、Zバッファに記憶されるZ値を変換する処理を行ったが、他の実施形態においてはこの変換処理を実行しなくてもよい。すなわち、他の実施形態においては、ステップS13以降の輪郭検出処理において、Zバッファに記憶されるZ値をそのまま用いるようにしてもよい。
【0119】
ステップS13において、CPU10は、第1輪郭値算出処理を実行する。第1輪郭値算出処理は、第1輪郭値を算出するための処理であり、具体的には、画像の横方向に関して輪郭検出処理を行う処理である。以下、図20を参照して、輪郭検出処理の詳細を説明する。
【0120】
図20は、図19に示す第1輪郭値算出処理(ステップS13)の流れを示すフローチャートである。第1輪郭値算出処理においては、まずステップS21において、CPU10は、元画像の各画素のうちから対象画素を選択する。本実施形態においては、元画像の全ての画素のうちで、今回の第1輪郭値算出処理においてまだ選択されていない画素から対象画素が選択される。たとえば、全画素を左上から順番に選択していくような選択方法でもよいし、他の選択の仕方でもよい。
【0121】
ステップS22において、CPU10は、ステップS21で選択した対象画素に対して所定の位置関係にある参照画素を特定する。図21は、画像上における対象画素と参照画素との関係を示す図である。本処理例においては、上述した第2の方法を採用する。すなわち、対象画素の両隣の画素が参照画素として特定される。第1輪郭値算出処理においては、図21に示されるように、横方向(x方向)に関して対象画素Paの両隣、すなわち、対象画素Paの左側で隣接する画素Pdと右側で隣接する画素Peとが参照画素として特定される。また、後述する第2輪郭値算出処理(ステップS14)においては、縦方向(y方向)に関して対象画素Paの両隣、すなわち、対象画素Paの上側で隣接する画素Pbと下側で隣接する画素Pcとが参照画素として特定される。
【0122】
なお、ステップS22において、対象画素が画像の端である場合、隣接する画素が存在しないので、2つの参照画素のうち一方の参照画素が特定されないこととなる。この場合、CPU10は、特定されない参照画素のZ値の代わりに対象画素のZ値の値を用いて後述するステップS23の処理を実行する。つまり、対象画素が画像の端である場合には、その隣に対象画素のZ値と同じZ値が設定された画素が存在すると仮定して変化度を算出する。なお、他の実施形態においては、ステップS21において、画像の端である画素を対象画素として選択しないようにしてもよい。
【0123】
図20の説明に戻り、ステップS23において、CPU10は、対象画素についてZ値の差分の変化度を算出する。変化度は、メインメモリに記憶されているZ値データ63により示される、対象画素のZ値および各参照画素のZ値を用いて算出される。すなわち、CPU10は、対象画素のZ値および各参照画素のZ値を上述した式(1)に代入することによって変化度(対象画素のZ値から2つの参照画素のZ値の平均値を引いた差)Zdif2を算出する。算出された変化度を示すデータは、変化度データ64としてメインメモリに記憶される。
【0124】
なお、上記ステップS23では、上記第2の方法を用いて変化度を算出する場合について説明したが、CPU10は、上記第1の方法を用いて変化度を算出するようにしてもよい。なお、第1の方法を用いる場合、ステップS22において特定される画素は1つでよい。そして、ステップS23では、CPU10は、対象画素のZ値と参照画素のZ値との差を変化度として算出する。
【0125】
ステップS24において、CPU10は、ステップS23において算出された変化度に基づいて第1輪郭値を算出する。図22は、変化度と輪郭値との関係を示す図である。本実施形態においては、第1輪郭値は、図22に示す関係に従って変化度から算出される。図22に示されるように、変化度Zdif2が所定の閾値Zs以下の場合、第1輪郭値e1は“0”と算出される。すなわち、変化度Zdif2が所定の閾値Zs以下の場合、対象画素は輪郭とは検出されない。一方、変化度Zdif2が所定の閾値Zsよりも大きい場合、対象画素は輪郭として検出され、第1輪郭値e1は0よりも大きい値として算出される。ここで、本実施形態においては、変化度Zdif2がZs<Zdif2<Zs’の範囲である場合、第1輪郭値e1は、変化度Zdif2が大きいほど大きい値となるように算出される。また、変化度Zdif2が所定値Zs’以上である場合には第1輪郭値e1は最大値(=1)となるように算出される。ステップS24で算出された第1輪郭値e1を示すデータは、第1輪郭値データ65としてメインメモリに記憶される。
【0126】
なお、本実施形態においては、図22に示す関係に従って変化度から第1輪郭値を算出するようにしたが、他の実施形態においては、輪郭値は“0”または“1”の2値で表されてもかまわない。つまり、他の実施形態においては、変化度Zdif2が所定の閾値Zs以下の場合、第1輪郭値e1は“0”と算出され、変化度Zdif2が当該閾値Zsよりも大きい場合、第1輪郭値e1は“1”と算出されるようにしてもよい。
【0127】
図20の説明に戻り、ステップS25において、CPU10は、元画像の全ての画素について第1輪郭値を算出したか否かを判定する。ステップS25の判定結果が否定である場合、ステップS21の処理が再度実行される。以降、ステップS25で全ての画素について第1輪郭値を算出したと判定されるまで、ステップS21〜S25の処理が繰り返し実行される。一方、ステップS25の判定結果が肯定である場合、CPU10は、図20に示す第1輪郭値算出処理を終了する。
【0128】
図19の説明に戻り、ステップS13の次のステップS14において、CPU10は、第2輪郭値算出処理を実行する。第2輪郭値算出処理は、第2輪郭値を算出するための処理であり、具体的には、画像の縦方向に関して輪郭検出処理を行う処理である。第2輪郭値算出処理の内容は、ステップS22において特定する参照画素が異なる他は、第1輪郭値算出処理と同じである。第2輪郭値算出処理においては、図21に示されるように、縦方向に関して対象画素Paの両隣、すなわち、対象画素Paの上側で隣接する画素Pbと下側で隣接する画素Pcとが参照画素として特定される。ステップS14の結果、元画像の各画素について第2輪郭値がそれぞれ算出され、算出された各第2輪郭値を示すデータは、第2輪郭値データ66としてメインメモリに記憶される。
【0129】
ステップS15において、CPU10は、ステップS12およびS13で算出された第1および第2輪郭値に基づいて第3輪郭値を算出する。ここで、ある画素に設定される第3輪郭値e3は、当該ある画素に設定される第1輪郭値e1と第2輪郭値e2とを加算することによって算出される。つまり、CPU10は、各画素について第1輪郭値e1と第2輪郭値e2とを加算することによって各画素の第3輪郭値e3を得る。ここで、加算によって得られる第3輪郭値e3は、0〜2の範囲の値をとることになるため、後述の処理のために0〜1の範囲となるように正規化する。算出された各第3輪郭値を示すデータは、第3輪郭値データ67としてメインメモリに記憶される。以上のステップS15の後、CPU10は輪郭検出処理を終了する。なお、第3輪郭値e3は、第2輪郭値算出処理において、対象画素ごとの第2輪郭値e2が算出される直後に算出しておくようにしてもよい。また、対象画素ごとに第1輪郭値e1および第2輪郭値e2を算出し、それらから第3輪郭値e3を算出する順番であっても構わない。
【0130】
なお、本実施形態においては、第3輪郭値e3を、第1輪郭値e1と第2輪郭値e2との和としたが、第3輪郭値e3は、第1輪郭値e1および第2輪郭値e2を用いて算出されるものであれば、他の方法で算出されてもよい。例えば、他の実施形態においては、ある画素に設定される第3輪郭値e3は、当該ある画素に設定される第1輪郭値e1と第2輪郭値e2とのうちの大きい方の値として算出してもよい。また、第1輪郭値e1と第2輪郭値e2の積であってもよい。
【0131】
なお、横方向に関して(対象画素の横方向にある参照画素を特定して)輪郭値を算出する第1輪郭値算出処理(ステップS13)では、縦方向に平行に延びる輪郭を検出することはできない。また、縦方向に関して(対象画素の縦方向にある参照画素を特定して)輪郭値を算出する第2輪郭値算出処理(ステップS14)では、横方向に平行に延びる輪郭を検出することはできない。つまり、第1輪郭値算出処理または第2輪郭値算出処理のいずれかのみでは、特定の方向に延びる輪郭を検出することができない。そこで、本実施形態においては、ゲーム装置3は、第1輪郭値算出処理と、第2輪郭値算出処理とをそれぞれ実行する。そして、第1輪郭値算出処理および第2輪郭値算出処理の処理結果(第1輪郭値および第2輪郭値)に基づいて対象画素の最終的な輪郭値(第3輪郭値)を算出する。これによって、どの方向に延びる輪郭であっても検出することができ、正確に輪郭を検出することができる。
【0132】
第1輪郭値算出処理および第2輪郭値算出処理で算出される第1輪郭値および第2輪郭値は、対象画素の最終的な輪郭値である第3輪郭値を算出するために用いられる。また、輪郭値は、その値が“0”であるか否かによって、対象画素が輪郭に対応するか否かを示すものである。以上より、第1輪郭値算出処理および第2輪郭値算出処理は、対象画素が輪郭に対応するか否かを予備的に判定する処理であると言える。そして、ステップS15の処理は、第1および第2輪郭値に基づいて、対象画素が輪郭に対応するか否かを最終的に示す第3輪郭値を算出する処理である。つまり、ステップS15の処理は、ステップS13およびS14における予備的な判定結果に基づいて、対象画素が輪郭に対応するか否かを判定する処理である。このように、本実施形態においては、画像の縦方向と横方向とのそれぞれについて予備的な判定処理を行った後で、対象画素が輪郭に対応するか否かを最終的に判定することによって、縦方向および横方向の両方を考慮した最終的な判定結果を得ることができる。
【0133】
図18の説明に戻り、ステップS3の次のステップS4において、CPU10は、元画像に輪郭が付された輪郭画像を生成する。輪郭画像は、元画像と、上記第3輪郭値とに基づいて算出される。具体的には、輪郭画像のある画素の色値C3は、元画像における当該画素の色値C1と、当該画素に設定される第3輪郭値e3とを用いて、以下の式(3)に従って算出される。
C3=C1×(1−e3)+C2×e3 …(3)
上式(3)において、定数C2は、輪郭の色を示す色値であり、予め定められている。各画素について上式(3)の計算を行うことによって、輪郭画像の各画素の色値を算出することができる。上式(3)によれば、輪郭と検出されない画素(すなわち、第3輪郭値e3=0の画素)では、元画像の色値C1がそのまま輪郭画像の色値C3となる。一方、輪郭と検出された画素では、第3輪郭値e3の値が大きいほど、元画像の色の割合が低く、輪郭の色の割合が高くなる。つまり、第3輪郭値e3の値が大きいほど輪郭の色が濃くなるように輪郭画像の色値C3が決定される。したがって、本実施形態によれば、変化度の値に応じて輪郭の色の濃さを変化させて輪郭を描くことができる。上式(3)に従って算出された輪郭画像の各画素の色値を示すデータは、輪郭画像データ68としてメインメモリに記憶される。
【0134】
ステップS5において、CPU10は、輪郭画像をテレビ2の画面に表示させる。すなわち、ステップS4の処理で得られた輪郭画像データ68を、VRAM11dに設けられるフレームバッファに書き込み、書き込まれた輪郭画像がテレビ2に出力される。
【0135】
ステップS6において、CPU10は、ステップS1〜S5の処理を終了するか否かを判定する。この判定処理は、例えば、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS6の判定結果が否定である場合、ステップS1の処理が再度実行される。以降、ステップS6で画像生成処理を終了すると判定されるまで、ステップS1〜S6の処理が繰り返し実行される。一方、ステップS6の判定結果が肯定である場合、CPU10は、図18に示す処理を終了する。
【0136】
以上に説明した処理によれば、毎フレーム生成される元画像に基づいて輪郭を検出して輪郭画像を生成する処理が毎フレーム繰り返される。ここで、上記処理においては、ステップS1においてオブジェクトが移動したり、仮想カメラが移動・回転したりするので、仮想カメラの視線に対するオブジェクトの向きが変化することがある。このとき、ある画素における上記変化度の値がフレーム毎に変化し、それまで検出されなかった新たな輪郭が、ある時点のフレームから検出されるようになる場合がある。すなわち、ある画素の変化度の値がオブジェクトや仮想カメラの移動につれて次第に大きくなっていき、当該変化度の値が閾値を超える結果、当該画素が輪郭として検出される場合がある。この場合、変化度は次第に大きくなるので、輪郭値(第3輪郭値)は0から次第に大きくなる。ここで、本実施形態においては、上記ステップS4で述べたように、輪郭値が大きいほど輪郭の色は濃くなる。したがって、上記のようにオブジェクトの向きが変化する結果新たな輪郭が表示される場合には、最初は薄い色の輪郭が表示され、その後輪郭は次第に濃くなっていくように表示される。このように、本実施形態によれば、新たに輪郭が描かれる場合には、急に輪郭が現れるのではなく、次第に輪郭が浮かび上がってくるように表現することができる。すなわち、急に輪郭が現れることによって見る者が違和感を感じることがなく、輪郭を自然に表示させることができる。
【0137】
以上に説明したように、本実施形態によれば、3次元空間の画像において輪郭を検出する処理を当該画像を用いて行うことができる。これによれば、輪郭付加用に3次元のオブジェクトを新たに生成しなくとも画像に輪郭を付加することができ、検出に関連した処理の回数は画素数に依存するため、オブジェクトの数やデータ量に起因して検出の処理量が増大することがなく、コンピュータの処理付加を軽減することができる。
【0138】
また、本実施形態で用いた第2の方法によれば、対象画素に対して複数の参照画素を特定し、対象画素および複数の参照画素について画素間のZ値の差の変化度に基づいて、対象画素が輪郭に対応するか否かを判定した。これによれば、上述した第1の方法、すなわち、対象画素と1つの参照画素との間のZ値の差に基づいて判定を行う方法に比べて輪郭を正確に検出することができる。
【0139】
(参照画素に関する変形例)
上記実施形態では、ゲーム装置3は、対象画素の変化度を算出するために用いられる参照画素として、対象画素の両側で隣接する2個1組の画素を複数組特定することとした。具体的には、対象画素から各組の参照画素への方向が異なるように、縦方向に並ぶ2個の画素(上側および下側で隣接する2個の画素)を1組として特定するとともに、横方向に並ぶ2個の画素(右側および左側で隣接する2個の画素)を1組として特定した。ここで、2個1組として特定される2つの参照画素は、2つの参照画素の中心に対象画素が位置するように、換言すれば、2つの参照画素が対象画素を中心に点対称となる位置にくるように特定されることが好ましい。これによれば、対象画素と2つの参照画素とが一直線に並ぶことになり、かつ、対象画素から各参照画素まで距離が等距離となるので、対象画素のZ値と参照画素のZ値との差から変化度を正確に算出することができる。なお、対象画素を中心に点対称となる位置にある2個1組の画素を参照画素として特定する場合の具体例としては、上記実施形態の他に、以下に説明する例が考えられる。
【0140】
図23は、他の実施形態における対象画素と参照画素との関係を示す図である。上記実施形態においては、縦方向に並ぶ2個の画素を1組の参照画素として特定するとともに横方向に並ぶ2個の画素を1組の参照画素として特定したが、他の実施形態においては、図23に示すように、(対象画素を中心に点対称となる位置にあり)斜め方向に並ぶ2個の画素を参照画素としてもよい。具体的には、図23の例においては、対象画素Paに対して斜めの位置にある画素Pe,Pf,Pg,およびPhを参照画素としている。このとき、ゲーム装置3は、画素PeおよびPfを1組の参照画素として輪郭値(第4輪郭値)を算出するとともに、画素PgおよびPhを1組の参照画素として輪郭値(第5輪郭値)を算出する。さらにこのとき、上記ステップS15で算出される第3輪郭値は、第4および第5輪郭値に基づいて算出されてもよいし、第1、第2、第4および第5輪郭値に基づいて算出されてもよい。つまり、2個1組として特定される参照画素の組の数は、いくつであっても構わない。
【0141】
また、上記実施形態では、ゲーム装置3は、対象画素の両隣の画素を1組の参照画素として特定したが、他の実施形態においては、参照画素は、対象画素に隣接していなくてもよい。図24は、他の実施形態における対象画素と参照画素との関係を示す図である。図24に示すように、参照画素は、対象画素から複数個の画素分だけ離れた(図24では2画素分だけ離れた)画素であってもよい。
【0142】
ここで、対象画素と参照画素との幅wは輪郭の太さに対応する。たとえば、図24の画素Paが丁度元のオブジェクトの輪郭部分であった場合には、画素Paの両隣の画素も判定のための条件を満たす場合が多くなるため、画素Paとその両隣の画素がすべて輪郭の画素と判定されることになる。つまり、対象画素からw画素分だけ離れた画素を参照画素として特定する場合、wの大きさに応じた太さの輪郭が描かれることになる。図25および図26は、上記実施形態による処理によって生成された輪郭画像の例を示す図である。図25は、上記幅w=1である場合の輪郭画像を示し、図26は、上記幅wを1より大きくした場合の輪郭画像を示している。なお、図25に示す画像と図26に示す画像とでは、仮想カメラの位置がやや異なっている。図25および図26からわかるように、幅wを大きくすることによって、輪郭が太くなることがわかる。したがって、本実施形態によれば、対象画素と参照画素との幅wを調整することにより、輪郭の太さを容易に変更することができる。
【0143】
また、他の実施形態においては、参照画素の組に応じて幅wの大きさを変えてもよい。すなわち、1組に含まれる2つの参照画素の並ぶ方向に応じて幅wの大きさを変えてもよい。図27は、他の実施形態における対象画素と参照画素との関係を示す図である。図27においては、対象画素Paに対して右上および左下方向については、対象画素Paから1画素分離れている画素PeおよびPfを1組の参照画素としているのに対して、対象画素Paに対して左上および右下方向については、対象画素Paから2画素分離れている画素PkおよびPlを1組の参照画素としている。図28は、参照画素の並ぶ方向に応じて幅wの大きさを変えた場合に生成される輪郭画像の例を示す図である。図28に示すように、上記方向に応じて幅wの大きさを変えた場合、描かれる輪郭の太さは、右上および左下方向に関しては細く、左上および右下方向に関しては太くなる。このように、本実施形態によれば、幅wを調整することによって、マーカペンのような、描く方向によって太さが異なるペンで描かれたような輪郭を表現することが可能である。
【0144】
また、他の実施形態においては、対象画素が輪郭に対応するか否かを判定する条件を、参照画素の組に応じて異ならせるようにしてもよい。例えば、縦方向に並ぶ2個の画素を1組の参照画素とし、横方向に並ぶ2個の画素を1組の参照画素として特定する場合、縦方向に関する輪郭値を算出する処理と、横方向に関する輪郭値を算出する処理とで、上記閾値Zsの値を異ならせてもよい。より具体的には、縦方向に並ぶ参照画素を用いて輪郭値を算出する処理については上記閾値Zsを相対的に大きく設定し、横方向に並ぶ参照画素を用いて輪郭値を算出する処理については上記閾値Zsを相対的に小さく設定してもよい。これによっても、上記幅wを調整する場合と同様、方向に応じて太さが異なる輪郭を表現することが可能である。
【0145】
以上においては、対象画素を中心に点対称となる位置にある2個1組の画素を参照画素として特定する場合について説明したが、他の実施形態においては、1つの輪郭値を算出するために用いる参照画素の数は2つに限らない。ゲーム装置3は、例えば、対象画素に隣接する上下左右の4つの画素(または、対象画素の斜め方向にある画素を含む8つの画素)を参照画素として特定し、当該4つの画素のZ値の平均値と対象画素のZ値との差を用いて変化度を算出してもよい。このとき、ゲーム装置3は、第1輪郭値および第2輪郭値を算出せずに、算出された変化度に基づいて算出される輪郭値を上記第3輪郭値とすればよい。
【0146】
(元画像の一部に対して輪郭を付す変形例)
上記実施形態では、ゲーム装置3が画像の全体に輪郭を付す処理を行う場合を例として説明したが、他の実施形態においては、画像の一部(例えば、特定のオブジェクト)にのみ輪郭を付す処理を行うことも可能である。例えば、オブジェクトAには輪郭を付け、オブジェクトBには輪郭を付けない場合を考える。この場合、ゲーム装置3はまず、オブジェクトAを描画し、オブジェクトAのみが描画された画像に対して、上記実施形態と同様の輪郭を付す処理を実行する。これによって、輪郭が付されたオブジェクトAの画像が生成されるので、ゲーム装置3は、当該画像に重ねてオブジェクトBを描画する。これによって、オブジェクトAのみに輪郭が付された画像を生成することができる。なお、ゲーム装置3は、輪郭が付されたオブジェクトAの画像と、オブジェクトBの画像とを合成することによって、オブジェクトAのみに輪郭が付された画像を生成してもよい。
【0147】
ここで、輪郭が付されたオブジェクトAの画像に重ねてオブジェクトBを描画する際において、例えばオブジェクトAよりも奥側にオブジェクトBが存在する場合には、オブジェクトAの輪郭がオブジェクトBによって消されてしまうことがある。すなわち、輪郭がオブジェクトAより外側に付されている場合には、オブジェクトBが描画される画素では、オブジェクトAの輪郭がオブジェクトBによって上書きされて消されてしまう。これを防止するためには、輪郭が付されたオブジェクトAの画像を生成する際に、輪郭に対応する画素のZ値を変更しておけばよい。具体的には、ゲーム装置3は、対象画素が輪郭に対応すると判定された場合、当該対象画素についての参照画素のZ値のうちで最小の値を、対象画素のZ値とする。これによって、オブジェクトAの輪郭に対応する画素のZ値は、オブジェクトAのZ値と同程度の値となるので、当該画素の色値は、オブジェクトBが描画される際にも変更されず、輪郭が正しく残ることになる。
【0148】
(輪郭検出の応用例)
上記実施形態においては、ゲーム装置3は、元画像の各画素のうちから輪郭に対応する画素を検出する処理(輪郭検出処理)を行い、さらに、検出された画素に輪郭の色を付すことによって輪郭画像を生成する(ステップS4)ものであった。ここで、本実施形態における輪郭検出処理は、輪郭画像を生成する他に、種々の目的に利用することが可能である。例えば、輪郭検出処理の検出結果に基づいて、輪郭のみの画像を生成することも可能である。具体的には、ステップS4において、上式(3)における変数C1を、背景の色値とすることによって、輪郭のみが描かれた画像を生成することができる。
【0149】
また、輪郭検出処理の検出結果に基づいて、元画像に対してアンチエイリアシング処理を行うことも可能である。具体的には、ゲーム装置3は、元画像の画素のうちで輪郭と検出された画素に従って決められる領域内の画素を対象として、画像をぼかす処理を行う。なお、ぼかし処理を行う対象となる画素領域は、例えば、輪郭と検出された画素のみを含む領域であってもよいし、輪郭と検出された画素と当該画素から所定距離内にある画素とからなる領域であってもよい。これによれば、元画像の輪郭の部分(または輪郭の周辺の部分)についてのみぼかし処理を行うことで、当該部分についてのエイリアシングを解消することができる。以上のように、本実施形態において実行される輪郭検出処理は、輪郭画像を生成する目的の他にも種々の目的に利用することが可能である。
【0150】
なお、上記実施形態においては、輪郭画像を生成する画像生成処理がゲーム装置3におけるゲーム処理中に実行される場合を例として説明したが、本発明は、ゲーム用途に用いられる場合に限定されず、3次元の仮想空間の画像に対して輪郭を検出する処理を実行する種々の画像処理装置に適用することが可能である。
【産業上の利用可能性】
【0151】
以上のように、本発明は、3次元空間の画像において輪郭を検出する際において、状況によって処理付加が増大することを防止すること等を目的として、例えば、ゲームキャラクタ等の画像に輪郭を付して表示するゲーム装置やゲームプログラムとして利用することが可能である。
【図面の簡単な説明】
【0152】
【図1】ゲームシステム1の外観図
【図2】ゲーム装置3の機能ブロック図
【図3】コントローラ5の外観構成を示す斜視図
【図4】コントローラ5の外観構成を示す斜視図
【図5A】コントローラ5の内部構造を示す図
【図5B】コントローラ5の内部構造を示す図
【図6】コントローラ5の構成を示すブロック図
【図7】コントローラ5を用いてゲーム操作を行うときの様子を示す図解図
【図8】3次元空間の画像の一例を示す図
【図9】図8に示す画像に対して輪郭を付した画像の一例を示す図
【図10】3次元空間内のオブジェクトが描画される画素と、画素に設定されるZ値との関係を示す図
【図11】輪郭検出処理の第1の方法を説明する図
【図12】第1の方法で輪郭を検出した結果を示す図
【図13】輪郭検出処理の第2の方法を説明する図
【図14】第2の方法で輪郭を検出した結果を示す図
【図15】差Zdif2’を変化度として用いた場合における輪郭の検出結果を示す図
【図16】図15に示した場合に得られる輪郭画像の一例を示す図
【図17】ゲーム装置3のメインメモリに記憶される主なデータを示す図
【図18】ゲーム装置3において実行される処理の流れを示すメインフローチャート
【図19】図18に示す輪郭検出処理(ステップS3)の流れを示すフローチャート
【図20】図19に示す第1輪郭値算出処理(ステップS13)の流れを示すフローチャート
【図21】画像上における対象画素と参照画素との関係を示す図
【図22】変化度と輪郭値との関係を示す図
【図23】他の実施形態における対象画素と参照画素との関係を示す図
【図24】他の実施形態における対象画素と参照画素との関係を示す図
【図25】本実施形態による処理によって生成された輪郭画像の例を示す図
【図26】本実施形態による処理によって生成された輪郭画像の他の例を示す図
【図27】他の実施形態における対象画素と参照画素との関係を示す図
【図28】参照画素の並ぶ方向に応じて幅wの大きさを変えた場合に生成される輪郭画像の例を示す図
【符号の説明】
【0153】
1 ゲームシステム
2 テレビ
3 ゲーム装置
4 光ディスク
5 コントローラ
6 マーカ部
10 CPU
11c GPU
11e 内部メインメモリ
12 外部メインメモリ
51,52,53 オブジェクト

【特許請求の範囲】
【請求項1】
3次元仮想空間の画像を生成する処理をコンピュータに実行させる画像処理プログラムであって、
オブジェクトが配置された3次元仮想空間を所定の視点から見た画像を生成する画像生成ステップと、
前記3次元仮想空間における前記視点からの視線方向への奥行きを表す奥行値を前記画像の画素毎に取得する奥行値取得ステップと、
前記オブジェクトの輪郭に対応する画素を前記奥行値に基づいて検出する輪郭検出ステップと、を前記コンピュータに実行させる、画像処理プログラム。
【請求項2】
前記画像処理プログラムは、前記画像の各画素のうちから、輪郭に対応するか否かを判定する処理の処理対象となる対象画素を選択する対象画素選択ステップをさらに前記コンピュータに実行させ、
前記輪郭検出ステップは、
前記対象画素に対して所定の位置関係にある少なくとも1つの参照画素を特定する参照画素特定ステップと、
前記対象画素の奥行値と前記参照画素の奥行値との差に基づいて、当該対象画素が輪郭に対応するか否かを判定する輪郭判定ステップとを含む、請求項1に記載の画像処理プログラム。
【請求項3】
前記参照画素特定ステップにおいて、前記コンピュータは、複数の画素を参照画素として特定し、
前記輪郭判定ステップにおいて、前記コンピュータは、前記対象画素および前記複数の参照画素に関する奥行値の差の変化度に基づいて、当該対象画素が輪郭に対応するか否かを判定する、請求項2に記載の画像処理プログラム。
【請求項4】
前記参照画素特定ステップにおいて、前記コンピュータは、前記対象画素を中心に点対称な位置にある少なくとも2つの画素を参照画素として特定し、
前記輪郭判定ステップにおいて、前記コンピュータは、前記対象画素の奥行値と各参照画素の奥行値とのそれぞれの差の変化度に基づいて、当該対象画素が輪郭に対応するか否かを判定する、請求項3に記載の画像処理プログラム。
【請求項5】
前記輪郭判定ステップにおいて、前記コンピュータは、前記参照画素の奥行値の平均と前記対象画素の奥行値との差を前記変化度として用いる、請求項3または請求項4に記載の画像処理プログラム。
【請求項6】
前記輪郭判定ステップにおいて、前記コンピュータは、前記参照画素の奥行値の平均から前記対象画素の奥行値を引いた差が所定値よりも大きい場合、当該対象画素が輪郭に対応すると判定する、請求項5に記載の画像処理プログラム。
【請求項7】
前記輪郭判定ステップにおいて、前記コンピュータは、前記対象画素の奥行値から前記参照画素の奥行値の平均を引いた差が所定値よりも大きい場合、当該対象画素が輪郭に対応すると判定する、請求項5に記載の画像処理プログラム。
【請求項8】
前記輪郭判定ステップにおいて、前記コンピュータは、前記参照画素の奥行値の平均と前記対象画素の奥行値との差の絶対値が所定値よりも大きい場合、当該対象画素が輪郭に対応すると判定する、請求項5に記載の画像処理プログラム。
【請求項9】
前記輪郭判定ステップにおいて、前記コンピュータは、前記参照画素の奥行値の平均と前記対象画素の奥行値との比を前記変化度として用いる、請求項3または請求項4に記載の画像処理プログラム。
【請求項10】
前記輪郭判定ステップにおいて、前記コンピュータは、輪郭に対応する画素について、輪郭の濃さを表す輪郭値を前記変化度の大きさに応じて算出し、
前記輪郭判定ステップにおいて輪郭に対応すると判定された画素に対して、前記輪郭値に応じた濃さで輪郭を描画する輪郭画像描画ステップを前記コンピュータにさらに実行させる、請求項3から請求項9のいずれかに記載の画像処理プログラム。
【請求項11】
前記参照画素特定ステップにおいて、前記コンピュータは、前記対象画素を中心に点対称な位置にある2個1組の画素を複数組、当該対象画素から各組の画素への方向が異なるように特定し、
前記輪郭判定ステップにおいて、前記コンピュータは、前記変化度を前記画素の組毎に算出し、算出された各変化度に基づいて、前記対象画素が輪郭に対応するか否かを判定する、請求項4に記載の画像処理プログラム。
【請求項12】
前記参照画素特定ステップにおいて、前記コンピュータは、前記対象画素を中心に点対称な位置にあり、前記画像の縦方向に並ぶ2個の画素と、前記対象画素を中心に点対称な位置にあり、当該画像の横方向に並ぶ2個の画素とを少なくとも参照画素として特定する、請求項11に記載の画像処理プログラム。
【請求項13】
前記参照画素特定ステップにおいて、前記コンピュータは、前記対象画素を中心に点対称な位置にあり、前記画像の斜め方向に並ぶ2個の画素を少なくとも参照画素として特定する、請求項11に記載の画像処理プログラム。
【請求項14】
前記輪郭判定ステップは、
前記変化度を前記画素の組毎に算出し、算出された各変化度に基づいて、前記対象画素が輪郭に対応するか否かを当該組毎に予備的に判定する第1判定ステップと、
前記第1判定ステップによる判定結果に基づいて、前記対象画素が輪郭に対応するか否かを判定する第2判定ステップとを含む、請求項11に記載の画像処理プログラム。
【請求項15】
前記第1判定ステップにおいて、前記コンピュータは、前記対象画素が輪郭に対応するか否かを予備的に判定するための判定条件として、参照画素の組毎に異なる条件を用いる、請求項14に記載の画像処理プログラム。
【請求項16】
前記参照画素特定ステップにおいて、前記コンピュータは、前記対象画素から参照画素までの距離が参照画素の組毎に異なるように参照画素を特定する、請求項14に記載の画像処理プログラム。
【請求項17】
前記画像生成ステップにおいて生成された画像を描画するとともに、前記輪郭検出ステップによって検出された画素に対して所定の色で描画処理を行う輪郭画像描画ステップを前記コンピュータにさらに実行させる、請求項1から請求項4のいずれかに記載の画像処理プログラム。
【請求項18】
前記輪郭検出ステップによって検出された輪郭のみの画像を生成する輪郭画像生成ステップを前記コンピュータにさらに実行させる、請求項1から請求項4のいずれかに記載の画像処理プログラム。
【請求項19】
前記輪郭検出ステップによって検出された画素に従って決められる領域内の画素を対象として、アンチエイリアシング処理を実行する処理実行ステップを前記コンピュータにさらに実行させる、請求項1から請求項4のいずれかに記載の画像処理プログラム。
【請求項20】
前記奥行値取得ステップにおいて、前記コンピュータは、Zバッファに記憶されているZ値を前記奥行値として取得する、請求項1から請求項4のいずれかに記載の画像処理プログラム。
【請求項21】
前記奥行値は、前記視点から画素に描画されるオブジェクトまでの前記仮想空間における奥行方向の位置を表す、請求項1から請求項4のいずれかに記載の画像処理プログラム。
【請求項22】
前記奥行値取得ステップにおいて、前記コンピュータは、Zバッファに記憶されているZ値を変換することによって前記奥行値を取得する、請求項21に記載の画像処理プログラム。
【請求項23】
前記奥行値取得ステップにおいて、前記コンピュータは、Wバッファに記憶されている値を前記奥行値として取得する、請求項1から請求項3のいずれかに記載の画像処理プログラム。
【請求項24】
3次元仮想空間の画像を生成する処理を実行する画像処理装置であって、
オブジェクトが配置された3次元仮想空間を所定の視点から見た画像を生成する画像生成手段と、
前記3次元仮想空間における前記視点からの視線方向への奥行きを表す奥行値を前記画像の画素毎に取得する奥行値取得手段と、
前記オブジェクトの輪郭に対応する画素を前記奥行値に基づいて検出する輪郭検出手段とを備える、画像処理装置。
【請求項25】
前記画像の各画素のうちから、輪郭に対応するか否かを判定する処理の処理対象となる対象画素を選択する対象画素選択手段をさらに備え、
前記輪郭検出手段は、
前記対象画素に対して所定の位置関係にある少なくとも1つの参照画素を特定する参照画素特定手段と、
前記対象画素の奥行値と前記参照画素の奥行値との差に基づいて、当該対象画素が輪郭に対応するか否かを判定する輪郭判定手段とを含む、請求項24に記載の画像処理装置。
【請求項26】
前記参照画素特定手段は、複数の画素を参照画素として特定し、
前記輪郭判定手段は、前記対象画素および前記複数の参照画素に関する奥行値の差の変化度に基づいて、当該対象画素が輪郭に対応するか否かを判定する、請求項25に記載の画像処理装置。
【請求項27】
前記参照画素特定手段は、前記対象画素を中心に点対称な位置にある少なくとも2つの画素を参照画素として特定し、
前記輪郭判定手段は、前記対象画素の奥行値と各参照画素の奥行値とのそれぞれの差の変化度に基づいて、当該対象画素が輪郭に対応するか否かを判定する、請求項26に記載の画像処理装置。
【請求項28】
前記輪郭判定手段は、前記参照画素の奥行値の平均と前記対象画素の奥行値との差を前記変化度として用いる、請求項26または請求項27に記載の画像処理装置。
【請求項29】
前記輪郭判定手段は、輪郭に対応する画素について、輪郭の濃さを表す輪郭値を前記変化度の大きさに応じて算出し、
前記輪郭判定手段によって輪郭に対応すると判定された画素に対して、前記輪郭値に応じた濃さの輪郭を示す画像を描画する輪郭画像描画手段をさらに備える、請求項26から請求項28のいずれかに記載の画像処理装置。
【請求項30】
前記参照画素特定手段は、前記対象画素を中心に点対称な位置にある2個1組の画素を複数組、当該対象画素から各組の画素への方向が異なるように特定し、
前記輪郭判定手段は、前記変化度を前記画素の組毎に算出し、算出された各変化度に基づいて、前記対象画素が輪郭に対応するか否かを判定する、請求項27に記載の画像処理装置。
【請求項31】
前記輪郭判定手段は、
前記変化度を前記画素の組毎に算出し、算出された各変化度に基づいて、前記対象画素が輪郭に対応するか否かを当該組毎に予備的に判定する第1判定手段と、
前記第1判定手段による判定結果に基づいて、前記対象画素が輪郭に対応するか否かを判定する第2判定手段とを含む、請求項30に記載の画像処理装置。
【請求項32】
前記第1判定手段は、前記対象画素が輪郭に対応するか否かを予備的に判定するための判定条件として、参照画素の組毎に異なる条件を用いる、請求項31に記載の画像処理装置。
【請求項33】
前記参照画素特定手段は、前記対象画素から参照画素までの距離が参照画素の組毎に異なるように参照画素を特定する、請求項31に記載の画像処理装置。
【請求項34】
前記画像生成手段によって生成された画像を描画するとともに、前記輪郭検出手段によって検出された画素に対して所定の色で描画処理を行う輪郭画像描画手段をさらに備える、請求項24から請求項27のいずれかに記載の画像処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図27】
image rotate

【図25】
image rotate

【図26】
image rotate

【図28】
image rotate


【公開番号】特開2008−302130(P2008−302130A)
【公開日】平成20年12月18日(2008.12.18)
【国際特許分類】
【出願番号】特願2007−154114(P2007−154114)
【出願日】平成19年6月11日(2007.6.11)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】