(57)【特許請求の範囲】
【請求項１】
画像に境界線を引く処理をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記憶媒体であって、
前記画像の各画素の深度値をメモリから読み出す読み出しステップと、
画素の深度値と、その画素の周辺にある画素の深度値との差を算出し、算出された差に基づいて各画素がオブジェクトの縁であるかどうかを判別する判別する判別ステップと、
縁上にある画素の色を前記差に基づいて変更する変更ステップとを前記コンピュータに実行させるためのプログラムを記録した記憶媒体。
【請求項２】
前記判別ステップにおいて、コンピュータは、画素の深度値と、その画素に隣接する画素の深度値との差を算出し、算出された差に基づいてオブジェクト縁であるかどうかを判別する、請求項１に記載の記憶媒体。
【請求項３】
前記変更ステップでは、前記差が大きいほど前記縁上にある画素の色を予め定められた所定の色に近付くように変更する、請求項１又は２に記載の記憶媒体。
【請求項４】
画像に境界線を引く処理を実行する画像処理装置であって、
前記画像の各画素の深度値をメモリから読み出す読み出し手段と、
画素の深度値と、その画素の周辺にある画素の深度値との差を算出し、算出された差に基づいて各画素がオブジェクトの縁であるかどうかを判別する判別手段と、
縁上にある画素の色を前記差に基づいて変更する変更手段とを備える、画像処理装置。
【請求項５】
前記判別手段は、画素の深度値と、その画素に隣接する画素の深度値との差を算出し、算出された差に基づいてオブジェクト縁であるかどうかを判別する、請求項４に記載の画像処理装置。
【請求項６】
前記変更手段は、前記差が大きいほど前記縁上にある画素の色を予め定められた所定の色に近付くように変更する、請求項４又は５に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、三次元コンピュータグラッフィクスに関し、より特定的には、非写実的な三次元画像化に関する。さらに特定すれば、本発明は、コンピュータによる三次元対象物の陰影上の線およびその他その縁に見られる境界の生成・表示方法および装置に関する。
【背景技術】
【０００２】
コンピュータグラッフィックスに関する研究の多くは、リアルな画像の生成に注目する傾向にあり、これまでかなりの成功を収めてきている。今では、コンピュータの作り出す画像は非常にリアルなものとなってきており、写真と見分けることができないほどである。たとえば、コンピュータによって作り出された特殊効果による、非常に写実的で本物であるかのような恐竜、異星人などを映画やテレビで見かけることも多い。新人のパイロットが訓練を受けているコンピュータによるフライトシミュレータは、非常にリアルで、実際の飛行状態をほぼ再現している。低価格な家庭用ビデオゲームシステムにおいても、驚くべきレベルのリアリズムが実現されており、ゲームのプレーヤは、たとえば、本物のレースカーでトラックを走行しているような、雪や氷に覆われたスロープをスキーで滑っているような、中世の城の中を歩いているような錯覚を覚えるほどである。大抵のゲームでは、このリアリズムによる錯覚がゲームプレイ体験を非常にすばらしいものにしている。
【０００３】
しかし、場合によってはリアルでない画像の方が好ましいこともある。たとえば、対話型ビデオやコンピュータゲームなどにおいて、現実の（または空想上の）世界をリアルにシミュレートするのではなく、わざと非現実的なパロディー調の漫画キャラクタが、たくさん登場する漫画の世界を創造して表示すれば、娯楽的価値を持たせることができる。例えば、このようなゲームでは、動き、音声、および対話性をもたせながら、手描きの漫画本を再現するように努めている。
【０００４】
このような三次元コンピュータシステムにおいて、望ましい視覚効果の１つとしては、表示対象物の陰影の線やその他その縁にみられる境界をはっきりと、確かなものにすることである。このような境界線によって、ある種の画像は鮮明になる。たとえば、漫画キャラクタの輪郭、風景の丘や山、壁の縁など、それぞれ異なる面をユーザがよりはっきり区別しやすくなる。さらに、このような境界線によって、漫画家による手描きであるかのような望ましい印象が生まれやすくなる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、キャラクタなどの対象物の縁周りの境界線のような、リアルでない効果を付与する方法の一つに、ある対象物を形成するポリゴンの縁に隣接した別の対象物と区別するラインをはっきり示す方法がある。
【０００６】
しかし、別の対象物とのボーダをはっきり示すと、画像処理が極めて複雑化する。その結果、リソースの限られたシステムにおいて、この方法は画像生成の遅延や効率の低下を招く。対話型三次元ゲームシステムなどの低価格の三次元グラッフイックスシステムにおいては、効率は極めて重要である。より効率のよい技術を用いて視覚効果を生成する方が、乏しいシステムリソースにかかる負担を軽減し、さらには、速度やその他の性能にそれほど影響を及ぼすことなく、視覚効果を総合的に向上させることができる。
【課題を解決するための手段】
【０００７】
本発明は、家庭用ビデオゲームコンソールなどの、三次元グラフィックスシステムにおいて、陰影の線やその縁における境界線を表示するための効率的な技術を提供することによって、この問題を解決する。
【０００８】
第１の発明によれば、画像がフレームバッファにおいて描画された後、境界線を生成する。本発明では、フレームバッファに記憶された数値を用いて、対象物の輪郭またはその他、縁にどの画素が位置しているかを求め、ボーダカラーをこれら画素に選択的にブレンドして表示する。
【０００９】
また、或る実施例によれば、輪郭の縁は、ある画素の深度値とその周辺画素の深度値とを比較して配置される。たとえば、「距離」値が或る画素の深度とその周辺画素の深度との間の距離の絶対値を基に計算される。その後、この距離値を基に、望ましい境界線のカラーがその画素のカラー値にブレンドされる。たとえば、距離値は画素のアルファ値を計算するために用いられ、このアルファ値は画素のカラーにブレンドされるボーダカラーの量を制御するのに用いられる。
【００１０】
別の例では、さらに深度変化を利用する。たとえば、距離値と、画素深度の関数であるさらに設けられた値とを基に画素のアルファ値を計算して、画素の深度値によって変化したアルファ値を求める。この深度によって変化させたアルファ値を基に、ボーダカラーを画素カラーにブレンドする。
【００１１】
さらなる実施例では、対象物の輪郭上ではなく、漫画家が境界線を引くであろう或る内部の縁の上に境界線を引く。例えば、漫画キャラクタが身体の前で腕を曲げている状態を考える。この場合、漫画家は、キャラクタの腕の輪郭の周りに境界線を引くと思われる。たとえ、このキャラクタが、腕の輪郭の縁が全体の輪郭の内部に位置するように胴体の前部で腕を曲げていても、である。本発明のさらなる特徴によれば、画像の画素にはそれぞれ異なる識別値が割り当てられる。この識別値は、典型的にはアルファ値のために用意されたフレームバッファメモリ領域等に格納される。これらの識別値は、境界線のある縁と、境界線が付与されない縁とを識別するのに用いられる。
【図面の簡単な説明】
【００１２】
【図１】本発明を具体化するための三次元ビデオグラフィックスシステムの例を示す図である。
【図２】本発明を実施しうるインタラクティブ三次元コンピュータグラフィックスシステム１００５全体のより詳細な模式図である。
【図３】コプロセッサ１０２０内の構成要素例のブロック図である。
【図４】三次元グラフィックスプロセッサ１１０７と、それに関連するコプロセッサ１０２０内の構成要素のより詳細な図である。
【図５】本発明におけるスクリーン効果を例示的に示す図である。
【図６】エミュレーション処理全体の一例を示した図である。
【図７】エミュレータ１３０３と共に用いるのに適した、パーソナルコンピュータに基づくホストを示した図である。
【図８】好ましい実施例に係る画素フィルタリングルーチン１００の一例を示すフローチャートである。
【図９】画素フィルタルーチン１００が隣接画素２つの深度値を読み出す例を示した模式図である。
【図１０】遠くに画素ＰｉｘＡ、近くに画素ＰｉｘＢがある場合の遠近処理を示した模式図である。
【図１１】図８に示すフローチャ−トを変更して、ｌｏｇ２（ｎ）のレンジ変換式を加えたフローチャートである。
【図１２】ブレンディングを制御するのに用いられる、アルファ値の深度変調を行う後処理画素フィルタ２００の一例である。
【図１３】境界線効果の無い、風景シーンの一例を示す。
【図１４】ホワイトキャンバスのカラーにブレンドされた結果得られた境界線を示す図である。
【図１５】図１３の風景に、黒の境界線をブレンドした図である。
【図１６】アドベンチャーゲームにおける空想上の風景の一例を示した図である。
【図１７】ホワイトキャンバスのカラーにブレンドした結果、得られた境界線を示した図である。
【図１８】図１６の風景に黒の境界線をブレンドした図である。
【図１９】漫画的な輪郭線処理による漫画キャラクターの一例を示す図である。
【図２０】漫画的な輪郭線処理による漫画キャラクターの別例を示す図である。
【図２１】漫画的な輪郭線処理の境界線の箇所を特定するための対象物識別値を用いた、本発明のさらなる実施形態を示す図である。
【図２２】本実施例において、境界線を付与するための画素後処理ルーチンの一例を示すフローチャートである。
【図２３】ルーチン３５０の変形例を示した模式図である。
【図２４】漫画的な輪郭線効果を得るために行う、対象物識別値コーディングの一例を示す図である。
【図２５】漫画的な輪郭線効果を得るために行う、対象物識別値コーディングの別例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明における実施の形態について、図面を参照しながら説明する。図１は、本発明に係る、境界線を表示するための三次元ビデオグラフィックスシステム１００５の例を示す。
【００１４】
システム１００５は、たとえば、ゲームコントローラ１００７および／または他の手入力装置からの対話型リアルタイム入力に応答し、表示装置１００９（たとえば、家庭用カラーテレビ受像機、ビデオモニタ、または他のディスプレイなど）に映像表示を行う。システム１００５は、外部記憶媒体１０１１（たとえば、交換可能なビデオゲームカートリッジ、ＣＤ−ＲＯＭ、または他の光ディスクなど）に記憶されたビデオゲームプログラムなどのコンピュータプログラムの制御によって動作する。
【００１５】
本例においては、システム１００５は、プロセッサ１０１０，三次元グラフィックスコプロセッサ１０２０およびメモリ１０３０を含む。プロセッサ１０１０は、三次元グラフィックスコマンドをグラフィックスコプロセッサ１０２０に与える。グラフィックスコプロセッサ１０２０は、三次元グラフィックスコマンドに従って、三次元の世界における二次元ビューをインタラクティブに生成する。たとえば、グラフィックスコプロセッサ１０２０は、ハードウェアによる三次元グラフィックスパイプラインを含む。このパイプラインは、三次元空間において規定されたポリゴンなどのグラフィックスプリミティブを操作して、任意に選ばれた視点に基づく視野面に投影された三次元空間の二次元画像を表す画素を生成する。本例において、ユーザは、ゲームコントローラ１００７を用いて、リアルタイムでインタラクティブに視点を変更することができる。
【００１６】
グラフィックスコプロセッサ１０２０は、生成した表示画素を、メモリ装置１０３０内のフレームバッファ１０４０に記憶する。フレームバッファ１０４０は、カラーフレームバッファ１０４２と、深度（Ｚ）バッファ１０４４とを備える。本例において、カラーフレームバッファ１０４２は、赤、緑、青（ＲＧＢ）のカラー値の二次元アレイ、および対応するアルファ（Ａ）値を記憶する。記憶されたＲＧＢカラー値と表示装置１００９上に表示される画素との間は一対一の関係であってもよい。または、フレームバッファ１０４２は、副サンプルを記憶してもよい。Ｚバッファ１０４４は、カラーフレームバッファに記憶されている各画素または副画素についての深度値（たとえば、視点に対するｚ方向の距離）を記憶する。よく知られているように、Ｚバッファ１０４４は、グラッフィクスパイプラインが画像を「構築」する際に、さまざまな目的に用いられる（たとえば、見えない面の除去など）。
【００１７】
好ましい実施例において、カラーフレームバッファ１０４２および／またはｚバッファ１０４４の内容は、ボーダカラーを、カラーフレームバッファ４２に記憶されている画素カラー値に選択的にブレンドして、対象物の境界線を規定する役割も果たす。具体的には、システム１００５は、画素フィルタ５０を備えていても良い。画素フィルタ５０は、三次元グラフィックスコプロセッサ１０２０によって描画される画像の画素値を処理して、境界線カラーを表示する対象物の輪郭線、および／または他の縁の上に選択的に付与する。好ましい実施例における画素フィルタ５０は、画像データがフレームバッファ１０４０または他の画素メモリにおいて描画された後に、画素後処理の段階で動作する。たとえば、画素フィルタ５０は、グラフィックスコプロセッサからの画像データと、メモリ１０３０への画像データとの結合処理中に、三次元グラフィックスコプロセッサ１０２０で描画されてバッファされた画像データに、境界線などの非写実的な画像要素を付与してもよい。
【００１８】
図２は、本発明を実施しうるインタラクティブ三次元コンピュータグラフィックスシステム１００５全体のより詳細な模式図である。システム１００５は、魅力的なステレオ音声を伴うインタラクティブ三次元ビデオゲームを行うために用いることができる。光ディスク１０１１などの適切な記憶媒体を光ディスク再生装置１１３４に挿入することによって、いろいろなゲームを行うことができる。ゲームを行う者は、手動コントローラ１００７などの入力装置を操作することによって、システム１００５とリアルタイムに対話することができる。このコントローラ１００７は、ジョイスティック、ボタン、スイッチ、キーボード、キーパッドなど、さまざまな操作器が含まれる。
【００１９】
本例において、メインプロセッサ１０１０が、手動コントローラ１００７（および／または他の入力装置）からの入力を受ける。メインプロセッサ１０１０は、インタラクティブにこのようなユーザ入力に応答し、たとえば外部記憶装置１０１１から提供される、ビデオゲームや他のグラフィックスプログラムを実行する。たとえば、メインプロセッサ１０１０は、衝突検出や動画処理のほかにも、様々なリアルタイムでインタラクティブな制御機能を行うことが可能である。
【００２０】
メインプロセッサ１０１０は、三次元グラフィックスコマンドや音声コマンドを生成し、これらをグラフィックスおよび音声コプロセッサ１０２０に送信する。グラフィックスおよび音声コプロセッサ１０２０は、これらのコマンドを処理して、魅力的な画像を表示装置１００９に表示し、ステレオ音声をステレオスピーカ１１３７Ｒ、１１３７Ｌ、または適切な音声生成装置において生成する。
【００２１】
システム１００５は、ＴＶエンコーダ１１４０を含む。ＴＶエンコーダは、画像信号をコプロセッサ１０２０から受信し、標準的な表示装置１００９（たとえば、コンピュータモニタや家庭用カラーテレビ受像機）での表示に適するように合成ビデオ信号に変換する。また、システム１００５は、オーディオコーデック（圧縮器／伸長器）１１３８を含む。
【００２２】
オーディオコーデック１１３８は、デジタル化された音声信号を圧縮／伸長する（さらに、デジタルアナログ音声信号形式間の変換を行ってもよい）。オーディオコーデック１１３８は、バッファ１１４１を介して音声入力を受信し、コプロセッサ１０２０に送信する（コプロセッサ１０２０における処理には、コプロセッサが生成する他の音声信号、および／または、光ディスク装置１１３４のストリーミング音声出力を介して受信した他の音声信号とのミキシングなどがある）。
【００２３】
コプロセッサ１０２０は、音声関連情報を音声タスク専用のメモリ１１４４に記憶させる。コプロセッサ１０２０は、処理後の音声出力信号をオーディオコーデック１１３８に与えて、圧縮および（たとえば、バッファ増幅器１１４２Ｌおよび１１４２Ｒを介して）アナログ信号への変換を行い、スピーカ１１３７Ｌおよび１１３７Ｒによって再生できるようにする。
【００２４】
コプロセッサ１０２０は、システム１００５内の様々な周辺機器と通信することができる。たとえば、パラレルデジタルバス１１４６は、光ディスク装置１１３４との通信に用いられてもよい。シリアル周辺バス１１４８は、様々な周辺機器との通信に用いられてもよい。この周辺機器の例としては、ＲＯＭおよび／またはリアルタイムクロック１１５０，モデム１１５２，フラッシュメモリ１１５４などが挙げられる。さらなる外部シリアルバス１１５６は、拡張メモリ１１５８（たとえば、メモリカード）との通信に用いられてもよい。
【００２５】
図３は、コプロセッサ１０２０内の構成要素例のブロック図である。コプロセッサ１０２０は、１つの集積回路であって、三次元グラフィックスプロセッサ１１０７と、プロセッサインターフェース１１０８と、メモリインターフェース１１１０と、オーディオディジタル信号プロセッサ（ＤＳＰ）１１６２と、オーディオメモリインターフェース（Ｉ/Ｆ）１１６４と、オーディオインターフェースおよびミキサ１１６６と、周辺制御器１１６８と、表示制御器１１２８とを含む。
【００２６】
三次元グラフィックスプロセッサ１１０７は、グラフィックス処理タスクを行い、オーディオディジタル信号プロセッサ１１６２は、オーディオ処理タスクを行う。表示制御器１１２８は、メモリ１０３０から画像情報をアクセスして取り出し、表示装置１００９に表示するためにＴＶエンコーダ１１４０へ与える。オーディオインターフェースおよびミキサ１１６６は、オーディオコーデック１１３８とのインターフェースとなり、発生源の異なる音声（たとえば、ディスク１０１１からのストリーミングオーディオ入力、オーディオＤＳＰ１１６２の出力、オーディオコーデック１１３８を介して受信した外部オーディオ入力など）を混合することも可能である。プロセッサインターフェース１１０８は、メインプロセッサ１０１０およびコプロセッサ１０２０間のデータや制御に関するインターフェースとなる。メモリインターフェース１１１０は、コプロセッサ１０２０およびメモリ１０３０間のデータや制御に関するインターフェースとなる。本例において、メインプロセッサ１０１０は、プロセッサインターフェース１１０８とコプロセッサ１０２０の一部であるメモリインターフェース１１１０とを介して、メインメモリ１１０８にアクセスする。周辺制御器１１６８は、コプロセッサ１０２０および上述の様々な周辺機器（たとえば、光ディスク装置１１３４、コントローラ１００７、ＲＯＭおよび／またはリアルタイムクロック１１５０、モデム１１５２、フラッシュメモリ１１５４、およびメモリカード１１５８）間のデータや制御に関するインターフェースとなる。オーディオメモリインターフェース１１６４は、オーディオメモリ１１４４とのインターフェースを提供する。
【００２７】
図４は、三次元グラフィックスプロセッサ１１０７と、それに関連するコプロセッサ１０２０内の構成要素のより詳細な図である。三次元グラフィックスプロセッサ１１０７は、コマンドプロセッサ１１１４と、三次元グラフィックスパイプライン１１１６とを含む。メインプロセッサ１０１０は、グラフィックスデータのストリームをコマンドプロセッサ１１１４とやり取りする。コマンドプロセッサ１１１４は、このような表示コマンドを受信し、（メモリ１０３０から処理に必要な追加のデータを取得して）解析を行い、三次元処理および描画のために頂点コマンドのストリームをグラフィックスパイプライン１１１６に与える。グラフィックスパイプライン１１１６は、これらのコマンドに基づいた三次元画像を生成する。処理後の画像情報は、メインメモリ１０３０に転送され、表示制御器１１２８によってアクセスできるようにしてもよい。表示制御器１１２８は、表示装置１００９にパイプライン１１１６のフレームバッファ出力を表示する。メモリ要求アービトレーション回路１３０は、グラフィックスパイプライン１１１６と、コマンドプロセッサ１１１４と、表示部１２８とにおけるメモリアクセスを調停する。
【００２８】
図４に示すように、グラフィックスパイプライン１１１６は、変換部１１１８と、セットアップ／ラスタライザ１１２０と、テクスチャ部１１２２と、テクスチャ環境部１１２４と、画素エンジン１１２６とを含んでもよい。グラフィックスパイプライン１１１６において、変換部１１１８は、様々な三次元変換動作を行い、さらに、照明効果やテクスチャ効果を行ってもよい。変換部１１１８の行う処理は、たとえば、頂点毎に入力される形状のオブジェクト空間からスクリーン空間への変換、入力されるテクスチャ座標の変換、射影テクスチャ座標の計算、ポリゴンクリッピング、頂点毎の照明度計算、バンプマッピングテクスチャ座標の生成などがある。セットアップ／ラスタライザ１１２０は、セットアップ部を含む。セットアップ部は、変換部１１１８から頂点データを受信し、三角形のセットアップ情報を複数のラスタライザに送信する。ラスタライザは、縁のラスタ化、テクスチャ座標のラスタ化、カラーのラスタ化を行う。テクスチャ部１１２２は、テクスチャリングに関連して様々なタスクを行う。このタスクには、マルチテクスチャ処理、キャッシュ後のテクスチャ伸長処理、テクスチャフィルタリング、浮き出しバンプマッピング、射影テクスチャを用いた陰影付け、およびアルファ透明度および深度を用いたＢＬＩＴなどがある。テクスチャ部１１２２は、フィルタリングされたテクスチャ値をテクスチャ環境部１１２４に出力する。テクスチャ環境部１１２４は、ポリゴンカラーとテクスチャカラーとをブレンドし、テクスチャフォグやその他の環境関連機能を行う。画素エンジン１１２６は、ｚバッファリングやブレンドを行い、データを集積回路上のフレームバッファメモリに記憶する。
【００２９】
図５に示すように、グラフィックスパイプライン１１１６は、フレームバッファ情報を局所的に記憶するＤＲＡＭメモリ１１２６ａを搭載してもよい。集積回路上のフレームバッファ１１２６ａは、集積回路上には備えられていないメインメモリ１０３０に定期的に書き込まれ、集積回路上の表示部１１２８がアクセスできるようにする。たとえば、画素フィルタ５０は、この書き込み処理中に境界線などの輪郭を漫画に付与するよう動作する。グラフィックスパイプライン１１１６のフレームバッファ出力（最終的にはメインメモリ１０３０に記憶される）は、表示部１１２８によってフレーム毎に読み出される。表示部１１２８は、表示装置１００９における表示のために、ディジタルＲＧＢ画素値を提供する。
【００３０】
上述したビデオゲームシステムの構成要素の或るものは、上述の家庭用ビデオゲームコンソール構成以外のものとして実現することも可能である。一般的に、家庭用ビデオゲームソフトウェアは、特定の家庭用ビデオゲームシステム上で実行されるように記述されている。このビデオゲームソフトウェアは、異なるシステムのハードウェアやソフトウェア構成を考慮に入れて、その異なるシステムに「移植される」（変換される）ことも、場合によっては可能である。このような「移植」には、ビデオゲームのソースコードにアクセスする必要があることが多い。この他に、構成の異なるシステムにおいてゲームソフトウェアを実行させるための方法としては、第２のシステムに第１のシステムをエミュレートさせる方法がある。第２のシステムが第１のシステムのハードウェアおよびソフトウェア資源をうまくエミュレートまたはシミュレートすることができれば、第２のシステムはビデオゲームソフトウェアのバイナリで実行可能な画像をうまく実行することができ、ゲームソフトウェアのソースコードにアクセスする必要はなくなる。
【００３１】
家庭用ビデオゲームにおいて、エミュレータは、ゲームプログラム用のシステム、すなわちゲームプログラムを実行することができるように設計されているシステムとは異なるシステムである。一例として、エミュレータシステムは、ゲームソフトウェア用のシステムのものとは異なるハードウェアおよび／またはソフトウェア構成（プラットフォーム）を提供する。エミュレータシステムは、ゲームソフトウェア用のシステムのソフトウェアおよび／またはハードウェア構成要素を模倣するソフトウェアおよび／またはハードウェア構成要素を含む。たとえば、エミュレータシステムは、当該ゲームソフトウェア用システムのハードウェアおよび／またはファームウェアをシミュレートするソフトウェアエミュレータプログラムを実行するパーソナルコンピュータなどの汎用ディジタルコンピュータを備えてもよい。
【００３２】
エミュレータソフトウェアは、コンソールを用いた図１ないし図４に示すような家庭用ビデオゲームシステム用のゲームをパーソナルコンピュータやその他の汎用ディジタルコンピュータ上で実行できるように開発されてもよい。このような汎用ディジタルコンピュータ（たとえば、ＩＢＭやマッキントッシュのパーソナルコンピュータやその互換機）には、ＤｉｒｅｃｔＸや他の標準三次元グラフィックスコマンドアプリケーションプログラムインターフェース（ＡＰＩ）に対応する三次元グラフィックスパイプラインを提供する三次元グラフィックスカードを搭載しているものがある。また、サウンドコマンドの標準セットに基づいて、高品質のステレオサウンドを提供するステレオサウンドカードを搭載しているものもある。エミュレータソフトウェアを実行するこのようなマルチメディアハードウェア搭載パーソナルコンピュータは、専用の家庭用ビデオゲームコンソールハードウェア構成におけるグラフィックス性能やサウンド性能に近づくのに十分な性能を有することもある。エミュレータソフトウェアは、パーソナルコンピュータプラットフォーム上のハードウェア資源を制御して、家庭用ビデオゲームコンソールプラットフォームが行う処理（このプラットフォームのためにゲームプログラマはゲームソフトウェアを書いたのであるが）、三次元グラフィックス、サウンド、周辺機器、および他の機能をシミュレートする。
【００３３】
図６は、エミュレーション処理全体の一例を示す。本エミュレーション処理の例は、ホストプラットフォーム１２０１と、エミュレータ要素１３０３と、ＲＯＭまたは光ディスク１３０５などの記憶媒体や他の記憶装置上のバイナリ画像を実行可能なゲームソフトウェアとを用いる。ホスト１２０１は、たとえばパーソナルコンピュータや他の型のゲームコンソールのような汎用または専用のディジタルコンピューティング装置であってもよい。
【００３４】
エミュレータ１３０３は、ホストプラットフォーム１２０１において実行されて、記憶媒体１３０５からのコマンド、データおよび他の情報をホスト１２０１によって処理可能な形式へリアルタイムで変換する。たとえば、エミュレータ１３０３は、図１ないし図４に示すような家庭用ビデオゲームプラットフォーム用のプログラム命令を取り出し、このプログラム命令をホスト１２０１が実行または処理できるような形式に変換する。一例として、ゲームプログラムがＺ−８０、ＭＩＰＳ、ＩＢＭ  ＰｏｗｅｒＰＣを用いたプラットフォームまたは他の特定の処理装置上で実行されるように書かれたものであって、かつホスト１２０１が異なる（たとえば、インテル社）の処理装置を用いたパーソナルコンピュータである場合に、エミュレータ１３０３は、記憶媒体１３０５から１つまたは一連のプログラム命令を取り出し、１つまたはそれ以上のインテル社のプログラム命令に変換する。
【００３５】
同様に、エミュレータ１３０３は、図３に示すグラフィックスおよびオーディオコプロセッサによる処理用のグラフィックスコマンドやオーディオコマンドを取り出し、ホスト１２０１において利用可能なグラフィックスハードウェアおよび／またはソフトウェアならびにオーディオ処理資源が処理できるような形式に変換する。一例として、エミュレータ１３０３は、このようなコマンドを、ホスト１２０１の特定のグラフィックスおよび／またはサウンドカードが（たとえば、標準のＤｉｒｅｃｔＸやサウンドアプリケーションプログラムインターフェース（ＡＰＩ）を用いて）処理できるようなコマンドに変換してもよい。
【００３６】
上述のようなビデオゲームシステムの機能の一部または全部を提供するために用いられるエミュレータ１３０３は、エミュレータを用いて実行されるゲーム用の様々な選択肢や画面モードの選択を簡略化または自動化するグラフィックユーザインターフェース（ＧＵＩ）を備えていてもよい。一例として、このようなエミュレータ１３０３は、当該ビデオゲームソフトウェアが元来想定していたホストプラットフォームに比して高い機能性をさらに有していてもよい。
【００３７】
図７は、エミュレータ１３０３と共に用いるのに適した、パーソナルコンピュータに基づくホスト１２０１を示す。パーソナルコンピュータシステム１２０１は、処理部１２０３と、システムメモリ１２０５とを含む。システムバス１２０７は、システムメモリ１２０５などの様々なシステム要素と、処理部１２０３とを接続する。システムバス１２０７は、メモリバスまたはメモリコントローラ、周辺バス、ローカルバスなど、数種のバス構造（各々のバス構造には様々なバスアーキテクチャのうちのいずれかが用いられる）のいずれであってもよい。
【００３８】
システムメモリ１２０７は、読み出し専用メモリ（ＲＯＭ）１２５２と、ランダムアクセスメモリ（ＲＡＭ）１２５４とを含む。ＲＯＭ１２５２には、ベーシック入出力システム（ＢＩＯＳ）１２５６が記憶されており、これには、立ち上げ時などにパーソナルコンピュータシステム１２０１内の要素間の情報伝達を助ける基本ルーチンが含まれている。
【００３９】
パーソナルコンピュータシステム１２０１は、様々なドライブおよび関連するコンピュータが読み出し可能な媒体をさらに含む。ハードディスクドライブ１２０９は、（典型的には固定の）磁気ハードドライブ１２１１に対して、読み出しや書き込みを行う。磁気ディスクドライブ１２１３は、着脱可能な「フロッピー（登録商標）」や他の磁気ディスク１２１５に対して、読み出しや書き込みを行う。光ディスクドライブ１２１７は、ＣＤ−ＲＯＭや他の光学媒体などの着脱可能な光ディスク１２１９に対して読み出しを行い、構成によっては書き込みも行う。ハードディスクドライブ１２０９、磁気ディスクドライブ１２１３、および光ディスクドライブ１２１７は、それぞれ、ハードディスクドライブインターフェース１２２１、磁気ディスクドライブインターフェース１２２３、および光ドライブインターフェース１２２５によって、システムバス１２０７に接続されている。これらドライブおよび関連するコンピュータが読み出し可能な媒体は、コンピュータが読み出し可能な命令、データ構造、プログラムモジュール、ゲームプログラム、およびパーソナルコンピュータシステム１２０１のための他のデータを不揮発的に記憶する。
【００４０】
また、他の構成においては、コンピュータがアクセス可能なデータを保存することができる、コンピュータが読み出し可能な他の媒体（たとえば、磁気カセット、フラッシュメモリカード、ディジタルビデオディスク、ベルヌーイ（ｂｅｒｎｏｕｌｌｉ）カートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）など）が用いられてもよい。
【００４１】
エミュレータ１３０３を含む多くのプログラムモジュールが、システムメモリ１２０５のハードディスク１２１１、着脱可能な磁気ディスク１２１５、光ディスク１２１９および／またはＲＯＭ１２５２および／またはＲＡＭ１２５４に記憶されてもよい。このようなプログラムモジュールは、グラフィックスおよびサウンドＡＰＩ、１つ以上のアプリケーションプログラム、他のプログラムモジュール、プログラムデータ、およびゲームデータを提供するオペレーティングシステムを含んでもよい。ユーザは、キーボード１２２７やポインティングデバイス１２２９などの入力装置を用いて、パーソナルコンピュータシステム１２０１に対して、コマンドや情報を入力する。他の入力装置としては、マイクロフォン、ジョイスティック、ゲームコントローラ、衛星放送用アンテナ、スキャナなどがある。このような入力装置は、システムバス１２０７に接続しているシリアルポートインターフェース１２３１を介して、処理装置１２０３に接続される場合が多いが、たとえばパラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースによって接続されてもよい。また、システムバス１２０７には、モニタ１２３３や他の型の表示装置が、ビデオアダプタ１２３５などのインターフェースを介して接続されている。
【００４２】
パーソナルコンピュータ１２０１は、インターネットなどのワイドエリアネットワーク１１５２と通信を行うためのモデム１１５４などの手段をさらに含んでもよい。モデム１１５４は、内蔵でも外付けでもよく、シリアルポートインターフェース１２３１を介してシステムバス１２０７に接続される。パーソナルコンピュータ１２０１は、ネットワークインターフェース１１５６をさらに備えていてもよく、これによって遠隔計算装置１１５０（たとえば、他のパーソナルコンピュータ）とローカルエリアネットワーク１１５８を介して通信することができる（このような通信は、ワイドエリアネットワーク１１５２、または他の通信路、たとえばダイアルアップ方式や他の通信手段などを介して行われてもよい）。パーソナルコンピュータシステム１２０１は、典型的には、プリンタなどの標準周辺機器のような他の周辺出力装置を含む。
【００４３】
たとえば、ビデオアダプタ１２３５は、三次元グラフィックスパイプラインチップセットを含んでもよい。このチップセットは、マイクロソフト社のＤｉｒｅｃｔＸのような標準三次元グラフィックスアプリケーションプログラマインターフェースに基づいて出された三次元グラフィックスコマンドに応答して、三次元グラフィックス描画を高速に行う。さらに、一連のステレオスピーカ１２３７が、システムバス１２０７に接続されており、この接続は、バス１２０７によって与えられるサウンドコマンドに基づく高品質ステレオサウンド生成に対応したハードウェアおよび内蔵ソフトウェアを提供する従来の「サウンドカード」などのサウンド生成インターフェースを介して行われる。このようなハードウェアの性能により、ホスト１２０１は、記憶媒体１３０５に記憶されたビデオゲームを行うのに充分な速度のグラフィックスおよびサウンド性能を提供することができる。
【００４４】
（本発明による非写実的な漫画的な輪郭線処理法の例）
本発明による漫画の輪郭線／境界線処理は、ハードウエアおよび／またはソフトウエアで有利に実行され得る。時間が充分にあると仮定すると、グラッフィクスコプロセッサ１０２０が画像をフレームバッファにおいて描画した後であってその画像が表示される前に、プロセッサ１０１０は、フレームバッファ１０４０にアクセスして画素後処理を行い、境界線カラーをカラーフレームバッファ１０４２にブレンドする。あるいは、グラフィックスコプロセッサ１０２０内にハードウエアおよび／またはソフトウエアを備えて、この機能を行わせる。上述のように、コプロセッサ１０２０は、グラッフィクスパイプライン内のアルファブレンディングおよびｚバッファ演算回路などの既存のハードウエアサポートを利用して、画素後処理／フィルタリングを行い、対象物の縁周りに境界線を付与してもよい。あるいは、プロセッサ１０１０および／または表示部１１２８が、フレームバッファ１０４０の内容を基に画素フィルタリング処理を行うこともできる。
【００４５】
コプロセッサ１０２０がこの画素後処理を完了すると、変更された画素値はフレームバッファメモリ１０３０に書き戻される。このフレームバッファメモリ１０３０から、コプロセッサ内のビデオ生成回路によって内容がアクセスされて、表示装置１００９上に映像が生成される。あるいは、変更された値は他の場所へ（たとえば、直接、表示装置１００５へ）送られる。この伝送効率を高めるために、フレームバッファ１０４０のデータをダブルバッファしてもよく、ＤＭＡを使用してもよい。フレームバッファ１０４０が１ラインずつ読み出され、かつ処理される場合、前に位置するラインのＺ値を保持するためにラインバッファを使用してもよい。
【００４６】
図８は、好ましい実施例に係る画素フィルタリングルーチン１００の一例を示すフローチャートであって、画素フィルタ５０に対して画素後処理境界線を行う。図８の画素フィルタルーチン１００は、フレームバッファ１０４０（ブロック１０２）内に記憶された画素[ｘ][ｙ]のそれぞれに対して行われる。この画素フィルタ１００は画素のカラー値（画素Ｒ[ｘ][ｙ]、画素Ｇ[ｘ][ｙ]、画素Ｂ[ｘ][ｙ]）を読み出し、さらに画素の深度値（Ｚ[ｘ][ｙ]）を読み出す（ブロック１０４）。加えて、この画素フィルタルーチン１００は、画素[ｘ][ｙ]周辺にある画素の深度値も読み出す（同じくブロック１０４）。本例において、画素フィルタルーチン１００は隣接画素２つの深度値を読み出す。つまり、ｘ−ｙアレイ内の所定の画素の「左」隣にある周辺画素における深度値Ｚ[ｘ][ｙ]、およびｘ−ｙアレイ内の所定の画素の真「下」にある周辺画素における深度値Ｚ[ｘ][ｙ−１]である。以上は、図９を参照のこと。フレームバッファ１０４０が１ラインずつ読み出され、かつ処理された場合、ラインバッファは前に位置するラインのＺ値を保持するのに使用され得る。
【００４７】
画素フィルタルーチン１００は、たとえば以下のＤｚ演算（ブロック１０６参照）によって、画素[ｘ][ｙ]が対象物の縁であるかどうかを判別する、たとえば、画素の深度値（Ｚ[ｘ][ｙ]）と１つ以上の周辺の（本例においては隣接する）画素の深度値との差を判別する。
ＤｚＤｘ  ＝  ｜Ｚ[ｘ][ｙ]−Ｚ[ｘ−１][ｙ]｜
ＤｚＤｙ  ＝  ｜Ｚ[ｘ][ｙ]−Ｚ[ｘ][ｙ−１]｜
Ｄｚ  ＝  ｍａｘ（ＤｚＤｘ，ＤｚＤｙ）
上記演算を行う際、画素フィルタ１００は画素の深度と、２つの隣接画素それぞれとの差を判別する、つまりこれらの差の絶対値をとり（ある対象物は別の対象に近いか遠いかのどちらかであることを利用する）、得られた２つの絶対値のうち大きい方を選択する。この結果が距離値Ｄｚであって、ある画素がｚ方向において、ある周辺画素からどれだけ離れているかをはかる値である。この演算は、画素が対象物の縁上にあるかどうかをテストするために行われる。たとえば、画素が対象物の縁上にある場合、Ｄｚは一般に大きくなり（典型的に、周辺画素はそれぞれ異なる深度を有しているため）、画素が対象物の縁上にない場合は、Ｄｚは一般に小さくなる（周辺画素は深度が相似するためである）。
【００４８】
別の例においては、２つの周辺画素の距離値の総計をとることで距離値Ｄｚを演算することができる。たとえば、下式が例である。
Ｄｚ  ＝  ＤｚＤｘ＋ＤｚＤｙ
また、その他の方法でも可能である（たとえば、演算方法を変えたり、使用する周辺画素を変更したり、または周辺画素数を変更するなど）。
【００４９】
本例における画素フィルタルーチン１００は、上述のように演算された距離値Ｄｚに比例してカラーを変化させる。たとえば、画素フィルタ１００は、得られた距離値Ｄｚの係数をスケーリング／修正して変更し、その結果得られた値をクランプして、たとえば以下のような画素ブレンドファクタを成立させる（ブロック１０８参照）。
アルファ  ＝  クランプ（（スケール係数＊Ｄｚ＋ベース係数），０，１）
ここで、クランプは、クランプ（ｘ，０，１）とした場合において、ｘが０以下のときには０を返し、ｘが１以上のときには１を返し、０＜ｘ＜１のときにはｘを返す関数である。
【００５０】
スケール係数が正の値であると仮定すると、得られたアルファ値はＤｚが大きいと大きくなり（たとえば、ほぼ１、または１になるようにクランプされる）、Ｄｚが小さいとアルファ値も小さくなる（たとえば、ほぼ０、または０になるようにクランプされる）。画素ブレンドファクタを成立させるには、方法は問わない。たとえば、画素ブレンドファクタを演算する別の方法を以下に示す。
グレイ  ＝  クランプ（（Ｄｚ−係数Ａ）＊係数Ｂ，０，１）
【００５１】
本例における画素フィルタ１００は、ブレンド処理（たとえば、アルファブレンディング）で得られた画素ブレンド係数を用いて、選択的に所定の境界線カラー（たとえばラインＲ、ラインＧ、ラインＢ）を、カラーフレームバッファ１０４２から得られた画素のカラー値（画素Ｒ[ｘ][ｙ]、画素Ｇ[ｘ][ｙ]、画素Ｂ[ｘ][ｙ]）とブレンドする。このブレンドを行うための演算の例は、以下の通りである。
新画素．Ｒ[ｘ][ｙ] ＝  旧画素．Ｒ[ｘ][ｙ]＊（１−アルファ）＋ライン．Ｒ＊アルファ
新画素．Ｇ[ｘ][ｙ] ＝  旧画素．Ｒ[ｘ][ｙ]＊（１−アルファ）＋ライン．Ｇ＊アルファ
新画素．Ｂ[ｘ][ｙ] ＝  旧画素．Ｒ[ｘ][ｙ]＊（１−アルファ）＋ライン．Ｂ＊アルファ
これら演算に従って、ブレンドされた（「新」）画素カラー値は、距離値Ｄｚが小さいと、ほとんどの場合、初期値になり、距離値Ｄｚが大きいと境界線カラーになる。
【００５２】
上記のブレンド演算は、境界線カラーを黒（たとえばライン．Ｒ＝０、ライン．Ｇ＝０、ライン．Ｂ＝０）に限定し、および／またはホワイトキャンバスのカラー（ライン．Ｒ＝２５５，ライン．Ｇ＝２５５，ライン．Ｂ＝２５５）だけを用いることで簡略化が可能である（たとえば、さらなる最適化のために行われる）。より最適化するためには、ＲＧＢカラーでないフォーマット、たとえばＹＵＶ（この場合、境界線が鮮明に見えるよう、確実に付与するために明るさＹを制御する）などを用いる。
【００５３】
ブレンド後、ブレンドされた画素をバッファして表示装置１００９（ブロック１１２）に表示する。たとえば、画素フィルタルーチン１００を、フレームバッファ１０４０内の画素すべてに対して行い、その結果得られるブレンドされたフレームバッファの内容を表示装置１００９に表示する。
【００５４】
遠近処理は、場合によっては上記処理で得られる結果に影響を及ぼす。図１０に示すように、遠くに画素ＰｉｘＡ、近くに画素ＰｉｘＢがある場合について考える。変換により、遠くにある画素ＰｉｘＡのＤｚＤｙは、近くにある画素ＰｉｘＢのＤｚＤｙよりも大きくなる。この結果、未処理のＤｚＤｘおよびＤｚＤｙ値を用いた画像全体における、境界線の検知がさらに難しくなる。この問題を克服するためには、Ｚレンジに応じてＺ値に修正を加えるとよい。修正には、たとえばレンジ変換するため、以下のようにｌｏｇ２（ｎ）関数を用いる。
ＤｚＤｘ＝｜ｌｏｇ２（Ｚ[ｘ][ｙ]）−ｌｏｇ２（Ｚ[ｘ−１][ｙ]）｜
ＤｚＤｙ＝｜ｌｏｇ２（Ｚ[ｘ][ｙ]）−ｌｏｇ２（Ｚ[ｘ][ｙ−１]）｜
プロセッサ１０１０に浮動小数点計算機能があり、Ｚ値が例えば以下のような浮動小数点フォーマットで記憶されている場合、ｌｏｇ２（ｎ）関数の計算は非常に都合がよい。
[３ビット指数][１１ビット仮数]
【００５５】
図１１は、図８に示すフローチャ−トを変更して、このｌｏｇ２（ｎ）のレンジ変換式を加えたものである。
【００５６】
図１２は、ブレンディングを制御するのに用いられる、アルファ値の深度変調を行う後処理画素フィルタ２００のもう一つの例である。図１２に示す、ブロック２０４、２０６、および２０８は、図８（レンジ修正が適用される場合は図１１）に示す対応するブロック１０４、１０６、および１０８と同一である。図１２のブロック２１０は、ブロック２０８で計算された値、および画素深度ｚの関数であるさらなる値の関数（たとえば、積）としてアルファＡを計算するために付加されたものである。たとえば、
アルファ＝アルファＤｚ＊アルファＺ
この結果得られたアルファ値、つまり図８のブロック２１０に関連して説明した、ブレンディングの制御（ブロック２１２参照）に用いられるアルファ値も、画素の深度に左右される。
【００５７】
図１３ないし図１８は、実現可能な、境界線によるスクリーン効果を例示したものである。図１３は、境界線効果の無い、風景シーンの一例を示す。図１４は、ホワイトキャンバスのカラーにブレンドされた結果得られた境界線を示し、これにより、図１３の風景シーンに効果的な線とは何かを示す。図１５は、図１３の風景に、黒の境界線をブレンドしたものである。
【００５８】
図１６は、アドベンチャーゲームにおける空想上の風景の一例を示す。図１７は、ホワイトキャンバスのカラーにブレンドした結果、得られた境界線を示す。図１８は、図１６の風景に黒の境界線をブレンドしたものである。
上述のように、画素後処理フィルタ１００は様々な方法で実現することができる。以下は、画素後処理フィルタをコンピュータソースコードで実現した一例である。
cfb#PixelProc#1:
add sys0, cptr, cbuf#width
sub sys1, sys0, cbuf#size
lqv depth00[0], 0(sys0)
lsv depth10[0], 32+14(zero)
lqv depth10[2], 0(sys0)
lqv depth01[0], 0(sys1)
lqv color00[0], 0(cptr)
sqv depth00[0], 0(sys1)
sqv depth00[0], 32(zero)
vnxor depth00, depth00, #0x7fff
vnxor depth10, depth10, #0x7fff
vnxor depth01, depth01, #0x7fff
vsub depthDX, depth00, depth10 # X
vsub depthDY, depth00, depth01 # Y
vabs depthDX, depthDX, depthDX
vabs depthDY, depthDY, depthDY
vor color00, vzero, #0xffff
vadd depthDX, depthDX, depthDY
vadd depthDX, depthDX, Coeff#A
vmudh depthDX, depthDX, Coeff#B
vge depthDX, depthDX, #0x0000
vmud1 color0r, color00, #0x0020
vand color0g, color00, v0x07c0
vand color0b, color00, v0x003e
vmulf color0r, color0r, depthDX
vmulf color0g, color0g, depthDX
vmulf color0b, color0b, depthDX
vand color00, color0g, v0x07c0
vmadn color00, color0b, #0x0001
vmadn color00, color0r, v0x0800
vor color00, color00, #0x0001
addi cptr, cptr, 16
bne cptr,cptr#end, cfb#PixelProc#1
sqv color00[0], -16(cptr)
jr return#sv
nop
【００５９】
（漫画的な輪郭線処理のさらなる実施例）
演算方法によっては、上記境界線の応用アルゴリズムでは、漫画的な輪郭線処理において、満足のいく結果が得られないことがある。図１９においてそのような例を示す。図１９における漫画キャラクタ３００には、上記のように陰影の縁３０２に境界線が付与されている。図１９から、この漫画キャラクタ３００は右手、手首を有しており、腕を前部で曲げている様子がわかる。上記の手法では、場合によって（キャラクタの腕が胴体部からどれだけ離れているかによるが）、右の手、手首、および腕の周りの縁は陰影の縁ではなく内部だと判断されるため、それらの箇所には境界線を付与しない。図１９では、漫画的な輪郭線処理がキャラクタの陰影の縁３０２だけに施された場合、漫画キャラクタ３００が部分的に消滅する、あるいはやや鮮明でなくなる様子を示す。ところが、ユーザは（塗り絵、手描きのアニメ漫画、および／または漫画本などの記憶から）手、手首および腕がはっきり示されるような境界線を期待している。
【００６０】
漫画キャラクタ３００が手描きであるかのように見せるには、内部の縁３０４にも境界線を付すとよい。本例においては、内部の縁は、キャラクタが自身の前部で曲げている手、手首および腕を規定している。図２０では、このキャラクタ３００の内部の縁３０４に境界線が付与されている。この内部の縁３０４は、キャラクタ３００が腕を外に向けて延ばしている場合は輪郭線の縁になるが、図２０に示す腕の位置では内部の縁になる。
【００６１】
本発明に係る別の局面によれば、図２０に示すような内部の縁においては、漫画的な輪郭線処理は自動的に行われる。つまり、対象物の部分によって、画素にはそれぞれ異なる識別値が付与される。たとえば、通常はアルファ情報をエンコードするのに用いられるフレームバッファ１０４０および／またはＤＲＡＭ１１２６ａ内に、ビット割り当てを行うことにより、この識別値を指定する。この指定された識別値を用いて、その画素の位置に境界線を付すかどうかを決定してもよい。たとえば、ある画素の識別値と、その画素の近辺にある（隣接した）画素の識別値とを比較する。これら２つの画素の識別値間にある所定の関係が認められた場合、境界線は付与されない。たとえば、識別値が同一の場合、これら２つの画素は同一面上にあるため、境界線は付さない。しかし、これら２つの画素の識別値が、別の所定の関係にある場合は、境界線を付与する。
【００６２】
図２１（Ａ）〜（Ｃ）では一例を示す。図２１（Ａ）は、３つの部分３２０、３２２および３２４に大別される対象物３１９の斜視図である。図２１（Ｂ）は、同じ対象物３１９の平面図である。対象部分３２０は四角形であり、対象部分３２２は円形であり、対象部分３２４は円錐である。ここで、グラフィックスアーチストが、円錐３２４が四角形３２０に視覚的に接触するが、円形３２２には接触しない部分、または円形が四角形に接触する部分に境界線３３０（図２１（Ａ）参照）を引こうとしていると仮定する。この場合、四角形３２０、円形３２２および円錐３２４内の画素は、それぞれ異なる識別値でコーディングされる。たとえば、四角形３２０内の画素は識別値「１」でコーディングされ、円形３２２内の画素は識別値「２」でコーディングされ、さらに円錐３２４内の画素は識別値「３」でコーディングされる。図２１（Ｃ）は、コーディング情報を記憶するフレームバッファ１０４０および／または１１２６ａのアルファ部の一例を示す（斜線を付したセルが境界線カラーを付与するセルである）。
【００６３】
画素後処理の段階においては、フレームバッファ内の様々な識別値に対してテストを行う。隣接する画素のように同一の識別値を有する画素（このような画素はすべて同一面上に存在する）に対しては、境界線を付与しない。また、或る画素の識別値が隣接画素のそれと、ある基準を下回って異なっている場合は境界線を付与しない（たとえば、画素ｋの識別値が画素ｋ＋１の識別値から２以上違わない場合、境界線は付与しない）。しかし、ある画素の識別値が隣接画素のそれと、ある基準を上回って異なっている場合は境界線を付与する（たとえば、画素ｋの識別値が画素ｋ＋１の識別値から２以上違う場合、境界線を画素ｋに付与する）。
【００６４】
図２２は、本実施例において、境界線を付与するための画素後処理ルーチンの一例を示すフローチャートである。ルーチン３５０は、ループ（ブロック３５２−３６２）を含み、このループはフレームバッファ１０４０および／または１１２６ａに記憶される画像における画素[ｉ][ｊ]それぞれに対して行われる。上述のように、画像生成処理においては、フレームバッファで画像を描画する際、通常はアルファ値を記憶するためにビットが割り当てられているフレームバッファ内にある対象物の部分毎に識別値を設定する。ルーチン３５０において、これらアルファ値（ここではＩＤ値）をテストして境界線を引くかどうかを決定する。本例において、ルーチン３５０では、画素[ｉ][ｊ]のアルファ（ＩＤ）値および隣接画素（たとえば、画素[ｉ−１][ｊ]および画素[ｉ][ｊ−１]）のアルファ（ＩＤ）値を検索する（ブロック３５２）。その後、ルーチン３５２では、以下の演算を行い（ブロック３５４）画素[ｉ][ｊ]のアルファ（ＩＤ）値と隣接画素のアルファ（ＩＤ）値との差を求める。
ｄｉｆｆＸ＝｜（アルファ[ｉ][ｊ]−アルファ[ｉ−１][ｊ]）｜
ｄｉｆｆＹ＝｜（アルファ[ｉ][ｊ]−アルファ[ｉ][ｊ−１]）｜
【００６５】
その後ルーチン３５０では、演算して得られた差の値、ｄｉｆｆＸとｄｉｆｆＹとをテストして、どちらかが所定の差の値を超えているかどうかを判別する（たとえば任意に固定の、または１のようなプログラム可能閾値）（ブロック３５６）。差の値のうち、少なくとも１つが所定の差の値を超えている場合、ルーチン３５０は画素[ｉ][ｊ]のカラーを境界線カラーに設定する（ブロック３５８）。これにより本例においては、アルファスロープが−１から＋１の場合、画素は同一面上にあるとされる。ステップ３５２から３５８は、画像内にある画素それぞれに対して順に行われる（ブロック３６０、３６２）。
【００６６】
ルーチン３５０の変形例として、対象物をある特別なアルファ識別値（たとえば０ｘ００）でコーディングして、境界線を付与するために無視すべき対象物内の画素を特定する（図２３参照）。境界線が付与されていない対象物をビットマップとして描画する際に有用である（例えば、爆発のアニメーション等）。
【００６７】
図２４は、上記ルーチン３５０を用いて、図１９および図２０に示す対象物３００にいかに効率良く境界線を引くかを示す。本例において、対象物は部分毎にそれぞれ異なるアルファ（ＩＤ）値でコーディングされている。たとえば、対象物３００は２本の腕３１１ａ、３１１ｂおよび胴体３０９を備える。腕はそれぞれ手３１３、手首部３１５、下腕部３１２、肘部３０８、上腕部３１０、および肩部３１７を備える。これら部位は、以下のようにそれぞれ異なるアルファＩＤでコーディングされる。
身体部 アルファＩＤ
左手３１３ａ １
左手首３１５ａ ２
左下腕３１２ａ ３
左肘３０８ａ ４
左上腕３１０ａ ５
左肩３１７ａ ６
胴体３０９ ７
右肩３１７ｂ ８
右上腕３１０ｂ ９
右肘３１１ｂ １０
右下腕３１２ｂ １１
右手首３１５ｂ １２
右手３１３ｂ １３
上記アルファＩＤコーディングの例によれば、ルーチン３５０では、図２４に太線で示されているような境界線を引く。しかし、部位の区切り部分（点線で示す）には境界線を引かない。
【００６８】
上記コーディングは、同じ対象物３００の部位の区切り部分に境界線を引くのにも用いることができる。従来の塗り絵や手描きアニメ漫画などでは、このような区切り部分にも漫画的な輪郭線処理を施して、さらに関節を規定したり、筋肉の発達を想像させたりしている。図２５（Ａ）〜（Ｃ）では、キャラクタ３００の上腕３１０と下腕とをつなぐ関節３０８（つまり肘）を特に示す。上記コーディングを用いて、図２５（Ｂ）および（Ｃ）に示すように、関節３０８を曲げることで上腕３１０と３１２とが互いに隣接（接触）して位置した場合、ルーチン３５０では（下腕３１０のアルファＩＤと、上腕３１２のアルファＩＤとの差が１より大きいかどうかに基づいて）、部位３１０と３１２との間に境界線セグメント３１６を付与する。
【００６９】
これにより、本発明は、三次元コンピュータグラフィックスにおいて、漫画的な輪郭線のような非写実的な効果を付与するための効果的な手法を提供する。これら手法は、画素後処理の段階で（すなわち、三次元グラフィックスパイプラインが画像をフレームバッファにおいて描画されてから）用いられ、三次元グラフィックスパイプラインによって与えられる以外の画素情報を必要としない（すなわち、色、深度およびアルファ画素情報）。このように、本発明における画素後処理の手法は、フレームバッファ（たとえば、回路上のバッファの一部から回路外のバッファへ、エリアシングまたは他の後処理動作）の「ダウンストリーム」で効果的に、かつ効率良く行われ、これによって三次元グラフィックスパイプラインまたはシステムの他の構成要素が実質的に複雑化することもない。
【００７０】
本発明は、現在最も現実的で好ましい実施例と思われるものに関連して説明されてきたが、本発明は、開示された実施例に限定されるものではなく、様々な変形例や均等な構成を含むことを想定していると解釈される。
【符号の説明】
【００７１】
５０  画素フィルタ
１００  画素フィルタ
１３０  メモリ要求アービトレーション回路
２００  後処理画素フィルタ
３００  漫画キャラクタ
３０２  輪郭線の縁
３０４  内部の縁
３０８  肘部
３０９  胴体
３１０  上腕部
３１２  下腕部
３１３  手
３１５  手首部
３１６  境界線セグメント
３１７  肩部
３３０  境界線
１００５  三次元ビデオグラフィックスシステム
１００７  コントローラ
１００９  表示装置
１０１０  プロセッサ
１０１１  記憶装置
１０２０  グラッフィクスコプロセッサ
１０３０  メモリ
１０４０  フレームバッファ
１０４２  カラーフレームバッファ
１０４４  深度フレームバッファ
１１０７  三次元グラフィックスプロセッサ
１１０８  プロセッサインターフェース
１１１０  メモリインターフェース
１１１４  コマンドプロセッサ
１１１６  グラフィックスパイプライン
１１１８  変換部
１１２０  ラスタライザ
１１２２  テクスチャ部
１１２４  テクスチャ環境部
１１２６  画素エンジン
１１２８  表示制御器
１１３４  外部記憶装置
１１３７Ｒ  スピーカ
１１３７Ｌ  スピーカ
１１３８  オーディオコーデック
１１４０  エンコーダ
１１４１  バッファ
１１４２Ｒ  バッファ増幅器
１１４２Ｌ  バッファ増幅器
１１４４  メモリ
１１４６  パラレルバス
１１４８  シリアル周辺バス
１１５０  リアルタイムクロック
１１５０  遠隔計算装置
１１５２  モデム
１１５４  フラッシュメモリ
１１５６  ネットワークインターフェース
１１５８  メモリカード
１１６２  オーディオディジタル信号プロセッサ
１１６４  オーディオメモリインターフェース
１１６６  ミキサ
１１６８  周辺制御器
１２０１  パーソナルコンピュータ
１２０３  処理部
１２０５  システムメモリ
１２０７  システムバス
１２０９  ハードディスクドライブ
１２１１  磁気ハードドライブ
１２１３  磁気ディスクドライブ
１２１５  磁気ディスク
１２１７  光ディスクドライブ
１２１９  光ディスク
１２２１  ハードディスクドライブインターフェース
１２２３  磁気ディスクドライブインターフェース
１２２５  光ドライブインターフェース
１２２７  キーボード
１２２９  ポインティングデバイス
１２３１  シリアルポートインターフェース
１２３３  モニタ
１２３５  ビデオアダプタ
１２３７  ステレオスピーカ
１２３９  サウンドカード
１２５２  ＲＯＭ
１２５４  ＲＡＭ
１３０３  エミュレータ
１３０５  光ディスク
【図１】
0004672072.tif 000002
【図２】
0004672072.tif 000003
【図３】
0004672072.tif 000004
【図４】
0004672072.tif 000005
【図５】
0004672072.tif 000006
【図６】
0004672072.tif 000007
【図７】
0004672072.tif 000008
【図８】
0004672072.tif 000009
【図９】
0004672072.tif 000010
【図１０】
0004672072.tif 000011
【図１１】
0004672072.tif 000012
【図１２】
0004672072.tif 000013
【図１３】
0004672072.tif 000014
【図１４】
0004672072.tif 000015
【図１５】
0004672072.tif 000016
【図１６】
0004672072.tif 000017
【図１７】
0004672072.tif 000018
【図１８】
0004672072.tif 000019
【図１９】
0004672072.tif 000020
【図２０】
0004672072.tif 000021
【図２１】
0004672072.tif 000022
【図２２】
0004672072.tif 000023
【図２３】
0004672072.tif 000024
【図２４】
0004672072.tif 000025
【図２５】
0004672072.tif 000026