(57)【特許請求の範囲】
【請求項１】
グラフィックスパイプラインを遂行する方法において、
ディスプレイのスクリーンピクセルに係わる情報を獲得する段階と、
前記スクリーンピクセルそれぞれに、レンダリングされるイメージを表現するためのパターンに基づいた１以上のサンプリングポイントの位置を決定する段階と、
前記サンプリングポイントのうち、ラスタライジングされるプリミティブにオーバーラップされるサンプリングポイントの位置において、前記プリミティブに対応するピクセルを生成する段階と、を含み、
前記グラフィックスパイプラインは、前記生成されたピクセルを利用して、前記イメージをレンダリングする方法。
【請求項２】
前記パターンは、
原本イメージを変形するための歪曲パターンを含み、
前記レンダリングされるイメージは、
前記原本イメージが、前記歪曲パターンによって変形された歪曲イメージを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記決定する段階は、
格子パターンの前記スクリーンピクセルが、前記歪曲パターンによって変形された場合、前記変形されたスクリーンピクセルそれぞれの中心位置に基づいて、前記１以上のサンプリングポイントの位置を決定することを特徴とする請求項２に記載の方法。
【請求項４】
前記獲得された情報は、
前記ディスプレイの前記スクリーンピクセルの解像度を含み、
前記決定する段階は、
前記パターンに基づいて、前記解像度によって定義されたスクリーンピクセルの位置を、サンプリングポイントの位置に変換する段階と、
前記レンダリングされるイメージのピクセルの位置と、前記変換されたサンプリングポイントの位置と、をマッピングする段階と、を含むことを特徴とする請求項１ないし３のうちの何れか１項に記載の方法。
【請求項５】
前記決定する段階は、
ユーザ設定によって、前記パターンの種類、及び前記サンプリングポイントの位置を変更して定義することが可能なシェーダソースコードを処理するプログラマブル・ステージであることを特徴とする請求項１ないし４のうちの何れか１項に記載の方法。
【請求項６】
前記決定する段階は、
マルチサンプリングがイネーブルされた場合、１つのスクリーンピクセルに対して、２以上のサンプリングポイントの位置を決定し、前記マルチサンプリングがディセーブルされた場合、前記１つのスクリーンピクセルに対して１つのサンプリングポイントの位置を決定し、
前記マルチサンプリングがイネーブルされた場合、前記スクリーンピクセルそれぞれに対して決定された前記２以上のサンプリングポイントの配置は、前記パターンによって、前記スクリーンピクセルそれぞれが歪曲された程度に比例することを特徴とする請求項１に記載の方法。
【請求項７】
前記決定する段階は、
前記グラフィックスパイプライン内で、ラスタライジング・ステージ以前に、バーテックスシェーディング・ステージ、クリッピング・ステージ及びプロジェクション・ステージが遂行される間に、並列して遂行されることを特徴とする請求項１ないし６のうちの何れか１項に記載の方法。
【請求項８】
前記生成する段階は、
前記サンプリングポイントが属する領域を区分するクアッドツリーアルゴリズムを利用して、前記プリミティブにオーバーラップされる前記サンプリングポイントの位置を探索する段階を含むことを特徴とする請求項１ないし７のうちの何れか１項に記載の方法。
【請求項９】
前記決定する段階は、
カラー成分ごとに、サンプリングポイントの位置に、互いに異なるオフセットを適用させ、前記サンプリングポイントの位置を決定することを特徴とする請求項１ないし８のうちの何れか１項に記載の方法。
【請求項１０】
前記決定する段階は、
前記グラフィックスパイプラインが、タイル基盤レンダリングのためのグラフィックスパイプラインである場合、タイルビニングのためのパスで遂行されることを特徴とする請求項１ないし９のうちの何れか１項に記載の方法。
【請求項１１】
請求項１ないし１０のうちいずれか１項に記載の方法をコンピュータに実行させるコンピュータプログラム。
【請求項１２】
グラフィックスパイプラインを遂行する装置において、
ディスプレイのスクリーンピクセルに係わる情報を獲得し、前記スクリーンピクセルそれぞれに、レンダリングされるイメージを表現するためのパターンに基づいた１以上のサンプリングポイントの位置を決定するシェーダと、
前記サンプリングポイントのうち、ラスタライジングされるプリミティブにオーバーラップされるサンプリングポイントの位置において、前記プリミティブに対応するピクセルを生成するラスタライザと、を含み、
前記グラフィックスパイプラインは、前記生成されたピクセルを利用して、前記イメージをレンダリングする装置。
【請求項１３】
前記パターンは、
原本イメージを変形するための歪曲パターンを含み、
前記レンダリングされるイメージは、
前記原本イメージが、前記歪曲パターンによって変形された歪曲イメージを含むことを特徴とする請求項１２に記載の装置。
【請求項１４】
前記シェーダは、
格子パターンの前記スクリーンピクセルが、前記歪曲パターンによって変形された場合、前記変形されたスクリーンピクセルそれぞれの中心位置に基づいて、前記１以上のサンプリングポイントの位置を決定することを特徴とする請求項１３に記載の装置。
【請求項１５】
前記獲得された情報は、
前記ディスプレイの前記スクリーンピクセルの解像度を含み、
前記シェーダは、
前記パターンに基づいて、前記解像度によって定義されたスクリーンピクセルの位置を、サンプリングポイントの位置に変換し、前記レンダリングされるイメージのピクセルの位置と、前記変換されたサンプリングポイントの位置と、をマッピングすることを特徴とする請求項１２ないし１４のうちの何れか１項に記載の装置。
【請求項１６】
前記シェーダは、
ユーザ設定によって、前記パターンの種類、及び前記サンプリングポイントの位置を変更して定義することが可能なシェーダソースコードを処理するプログラマブルシェーダを含むことを特徴とする請求項１２ないし１５のうちの何れか１項に記載の装置。
【請求項１７】
前記シェーダは、
マルチサンプリングがイネーブルされた場合、１つのスクリーンピクセルに対して、２以上のサンプリングポイントの位置を決定し、前記マルチサンプリングがディセーブルされた場合、前記１つのスクリーンピクセルに対して１つのサンプリングポイントの位置を決定し、
前記マルチサンプリングがイネーブルされた場合、前記スクリーンピクセルそれぞれに対して決定された前記２以上のサンプリングポイントの配置は、前記パターンによって、前記スクリーンピクセルそれぞれが歪曲された程度に比例することを特徴とする請求項１２に記載の装置。
【請求項１８】
前記シェーダは、
前記グラフィックスパイプライン内で、前記ラスタライザによって遂行されるラスタライジング・ステージ以前に、前記決定を遂行することを特徴とする請求項１２ないし１７のうちの何れか１項に記載の装置。
【請求項１９】
前記ラスタライザは、
前記サンプリングポイントが属する領域を区分するクアッドツリーアルゴリズムを利用して、前記プリミティブにオーバーラップされる前記サンプリングポイントの位置を探索し、探索結果に基づいて、前記ピクセルを生成することを特徴とする請求項１２ないし１８のうちの何れか１項に記載の装置。
【請求項２０】
前記シェーダは、
カラー成分ごとに、サンプリングポイントの位置に、互いに異なるオフセットを適用させ、前記サンプリングポイントの位置を決定することを特徴とする請求項１２ないし１９のうちの何れか１項に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフィックスパイプラインを遂行する方法及びその装置に係わる。
【背景技術】
【０００２】
ＧＰＵ（graphics  processing  unit）のようなグラフィックプロセッシング装置は、コンピュータ装置において、グラフィックスデータをレンダリングする役割を担当する。一般的に、グラフィックプロセッシング装置は、二次元または三次元の客体に該当するグラフィックスデータを二次元ピクセル表現に変換し、ディスプレイのためのフレームを生成する。「客体」は「オブジェクト」又は「対象」等と言及されてもよい。ＧＰＵを駆動させるためのＡＰＩ（application  program  interface）を開発する多様な開発社は、ＡＰＩ上に自身固有のグラフィックスパイプラインを定義し、定義されたグラフィックスパイプラインを利用して、ＧＰＵの処理性能及び処理効率を高めるための多くの研究を進めている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】日本特許公開第２０１２−０１４７１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、グラフィックスパイプラインを遂行する方法及びその装置を提供するところにある。本実施形態がなそうとする技術的課題は、前述のような技術的課題に限定されるものではなく、以下の実施形態から他の技術的課題が類推されるのである。
【課題を解決するための手段】
【０００５】
一側面によれば、グラフィックスパイプラインを遂行する方法は、ディスプレイのスクリーンピクセルに係わる情報を獲得する段階と、前記スクリーンピクセルそれぞれに、レンダリングされるイメージを表現するためのパターンに基づいた１以上のサンプリングポイントの位置を決定する段階と、前記サンプリングポイントのうち、ラスタライジングされるプリミティブにオーバーラップされるサンプリングポイントの位置において、前記プリミティブに対応するピクセルを生成する段階と、を含み、前記グラフィックスパイプラインは、前記生成されたピクセルを利用して、前記イメージをレンダリングする。
【０００６】
また、前記パターンは、原本イメージを変形するための歪曲パターンを含み、前記レンダリングされるイメージは、前記原本イメージが前記歪曲パターンによって変形された歪曲イメージを含む。
【０００７】
また、前記決定する段階は、格子パターンの前記スクリーンピクセルが、前記歪曲パターンによって変形された場合、前記変形されたスクリーンピクセルそれぞれの中心位置に基づいて、前記１以上のサンプリングポイントの位置を決定する。
【０００８】
また、前記獲得された情報は、前記ディスプレイの前記スクリーンピクセルの解像度を含み、前記決定する段階は、前記パターンに基づいて、前記解像度によって定義されたスクリーンピクセルの位置を、サンプリングポイントの位置に変換する段階と、前記レンダリングされるイメージのピクセルの位置、及び前記変換されたサンプリングポイントの位置をマッピングする段階と、を含む。
【０００９】
また、前記決定する段階は、ユーザ設定によって、前記パターンの種類、及び前記サンプリングポイントの位置を変更して定義することが可能なシェーダソースコード（shader  source  code）を処理するプログラマブル・ステージ（programmable  stage）である。
【００１０】
また、前記決定する段階は、マルチサンプリング（multisampling）がイネーブルされた（enabled）場合、１つのスクリーンピクセルに対して２以上のサンプリングポイントの位置を決定し、前記マルチサンプリングがディセーブルされた（disabled）場合、前記１つのスクリーンピクセルに対して１つのサンプリングポイントの位置を決定し、前記マルチサンプリングがイネーブルされたとき、前記スクリーンピクセルそれぞれに対して決定された前記２以上のサンプリングポイントの配置は、前記パターンによって、前記スクリーンピクセルそれぞれが歪曲された程度に比例する。
【００１１】
また、前記決定する段階は、前記グラフィックスパイプライン内で、ラスタライジング（rasterizing）・ステージ以前に、バーテックスシェーディング（vertex  shading）・ステージ、クリッピング（clipping）・ステージ及びプロジェクション（projection）・ステージが遂行される間に並列して遂行される。
【００１２】
また、前記生成する段階は、前記サンプリングポイントが属する領域を区分するクアッドツリー（quadtree）アルゴリズムを利用して、前記プリミティブにオーバーラップされる前記サンプリングポイントの位置を探索する段階を含む。
【００１３】
また、前記決定する段階は、カラー成分ごとに、サンプリングポイントの位置に、互いに異なるオフセットを適用させ、前記サンプリングポイントの位置を決定する。
【００１４】
また、前記決定する段階は、前記グラフィックスパイプラインがタイル基盤レンダリングのためのグラフィックスパイプラインである場合、タイルビニングのためのパス（pass）で遂行される。
【００１５】
他の一側面によれば、前記方法をコンピュータで実行させるためのプログラムを記録したコンピュータで読み取り可能な記録媒体を提供する。
【００１６】
さらに他の一側面によれば、グラフィックスパイプラインを遂行する装置は、ディスプレイのスクリーンピクセルに係わる情報を獲得し、前記スクリーンピクセルそれぞれに、レンダリングされるイメージを表現するためのパターンに基づいた１以上のサンプリングポイントの位置を決定するシェーダ（shader）と、前記サンプリングポイントのうち、ラスタライジングされるプリミティブにオーバーラップされるサンプリングポイントの位置において、前記プリミティブに対応するピクセルを生成するラスタライザ（rasterizer）と、を含み、前記グラフィックスパイプラインは、前記生成されたピクセルを利用して、前記イメージをレンダリングする。
【００１７】
また、前記パターンは、原本イメージを変形するための歪曲パターンを含み、前記レンダリングされるイメージは、前記原本イメージが前記歪曲パターンによって変形された歪曲イメージを含む。
【００１８】
また、前記シェーダは、格子パターンの前記スクリーンピクセルが、前記歪曲パターンによって変形された場合、前記変形されたスクリーンピクセルそれぞれの中心位置に基づいて、前記１以上のサンプリングポイントの位置を決定する。
【００１９】
また、前記獲得された情報は、前記ディスプレイの前記スクリーンピクセルの解像度を含み、前記シェーダは、前記パターンに基づいて、前記解像度によって定義されたスクリーンピクセルの位置を、サンプリングポイントの位置に変換し、前記レンダリングされるイメージのピクセルの位置、及び前記変換されたサンプリングポイントの位置をマッピングする。
【００２０】
また、前記シェーダは、ユーザ設定によって、前記歪曲パターンの種類、及び前記サンプリングポイントの位置を変更して定義することが可能なシェーダソースコード（shader  source  code）を処理するプログラマブルシェーダ（programmable  shader）を含む。
【００２１】
また、前記シェーダは、マルチサンプリングがイネーブルされた場合、１つのスクリーンピクセルに対して、２以上のサンプリングポイントの位置を決定し、前記マルチサンプリングがディセーブルされた場合、前記１つのスクリーンピクセルに対して１つのサンプリングポイントの位置を決定し、前記マルチサンプリングがイネーブルされたとき、前記スクリーンピクセルそれぞれに対して決定された前記２以上のサンプリングポイントの配置は、前記パターンによって、前記スクリーンピクセルそれぞれが歪曲された程度に比例する。
【００２２】
また、前記シェーダは、前記グラフィックスパイプライン内で、前記ラスタライザによって遂行されるラスタライジング・ステージ以前に、前記決定を遂行する。
【００２３】
また、前記ラスタライザは、前記サンプリングポイントが属する領域を区分するクアッドツリーアルゴリズムを利用して、前記プリミティブにオーバーラップされる前記サンプリングポイントの位置を探索し、前記探索結果に基づいて、前記ピクセルを生成する。
【００２４】
また、前記シェーダは、カラー成分ごとに、サンプリングポイントの位置に、互いに異なるオフセットを適用させ、前記サンプリングポイントの位置を決定する。
【発明の効果】
【００２５】
本発明によれば、歪曲イメージのレンダリングのために、グラフィックスパイプラインに、サンプリングポイントに係わる追加的な（extra）プログラマブルシェーディング・ステージが付加されるだけであり、周知の多様なグラフィックスパイプラインをそのまま支援しながら、さらに効率的な歪曲イメージのレンダリングが可能である。
【図面の簡単な説明】
【００２６】
【図１】一実施形態によるコンピュータ装置について説明するための図面である。
【図２Ａ】一実施形態による歪曲イメージの種類について説明するための図面である。
【図２Ｂ】一実施形態による歪曲イメージの種類について説明するための図面である。
【図２Ｃ】一実施形態による歪曲イメージの種類について説明するための図面である。
【図２Ｄ】一実施形態による歪曲イメージの種類について説明するための図面である。
【図３】一実施形態による歪曲イメージの活用に係わる例について説明するための図面である。
【図４Ａ】一般的なグラフィックスパイプラインでサンプリングポイントを利用して、イメージのピクセルを決定する方法について説明するための図面である。
【図４Ｂ】一実施形態によるグラフィックスパイプラインでサンプリングポイントを利用して、イメージのピクセルを決定する方法について説明するための図面である。
【図５】一実施形態による図１のＧＰＵの詳細ハードウェア構造を図示したブロック図である。
【図６】一実施形態による歪曲イメージのレンダリングのためのグラフィックスパイプラインのフローチャートである。
【図７】一実施形態による歪曲イメージの歪曲パターンに基づいたスクリーンピクセルに対応するサンプリングポイントの位置について説明するための図面である。
【図８Ａ】歪曲がない場合、スクリーンピクセルに対応するサンプリングポイントを決定する方法について説明するための図面である。
【図８Ｂ】一実施形態によって、歪曲パターンに基づいて、スクリーンピクセルに対応するサンプリングポイントを決定する方法について説明するための図面である。
【図９】一実施形態による、歪曲がない場合のサンプリングポイントの位置と、歪曲がある場合のサンプリングポイントの位置とを比較して説明するための図面である。
【図１０】一実施形態によって、サンプリングシェーダによって決定されたサンプリングポイントを利用して、ピクセル生成のためのラスタライジングを行う方法について説明するための図面である。
【図１１】一実施形態によって、バレル歪曲パターンに基づいたサンプリングポイントを決定するためのシェーダソースコード（shader  source  code）の例示について説明するための図面である。
【図１２】一実施形態によって、ラスタライザでビューポート上のプリミティブにオーバーラップされたサンプリングポイントを探索する方法について説明するための図面である。
【図１３】他の一実施形態によって、ラスタライザでビューポート上のプリミティブにオーバーラップされたサンプリングポイントを探索する方法について説明するための図面である。
【図１４】一実施形態によって、ピンクッション歪曲パターンに基づいたサンプリングポイントを利用して、レンダリングされた歪曲イメージが、ＨＭＤデバイスで表示された場合について説明するための図面である。
【図１５Ａ】一実施形態によるシングルサンプリングについて説明するための図面である。
【図１５Ｂ】一実施形態によるマルチサンプリングについて説明するための図面である。
【図１６】他の実施形態によって、スクリーンピクセルに対してカラー成分ごとに互いに異なるサンプリングポイントの位置を決定することについて説明するための図面である。
【図１７】一実施形態による、歪曲パターンによって未使用領域（unused  region）が存在する場合の歪曲イメージのレンダリングについて説明するための図面である。
【図１８】一実施形態による、サンプリングシェーダでディザリング（dithering）のためのサンプリングポイントを決定することについて説明するための図面である。
【図１９】他の実施形態によって、タイル基盤レンダリングのためのグラフィックスパイプラインの場合、サンプリングシェーディングが活用される例について説明するための図面である。
【図２０】一実施形態による、歪曲イメージのレンダリングのためのグラフィックスパイプラインを遂行する装置のブロック図である。
【図２１】一実施形態による、歪曲イメージのレンダリングのためのグラフィックスパイプラインを遂行する方法のフローチャートである。
【発明を実施するための形態】
【００２７】
本実施形態で使用される用語は、本実施形態での機能を考慮しながら、可能な限り現在広く使用される一般的な用語を選択したが、それは、当業者の意図、判例または新たな技術の出現などによって異なる。また、特定の場合、出願人が任意に選定した用語もあり、その場合、当該実施形態の説明部分で詳細にその意味を記載する。従って、本実施形態で使用される用語は、単純な用語の名称ではない、その用語が有する意味と、本実施形態の全般にわたった内容とを基に定義されなければならない。
【００２８】
明細書全体において、ある部分が他の部分と連結されているとするとき、それは、直接的に連結されている場合だけではなく、その中間に、他の素子を挟んで電気的に連結されている場合も含む。また、ある部分がある構成要素を含むとするとき、それは、特別に反対となる記載がない限り、他の構成要素を除くものではなく、他の構成要素をさらに含んでもよいということを意味する。また、明細書に記載された「…部」、「モジュール」のような用語は、少なくとも１つの機能や動作を処理する単位を意味し、それは、ハードウェアまたはソフトウェアによって具現されるか、あるいはハードウェアとソフトウェアとの結合によって具現されもする。
【００２９】
本明細書で使用される「構成される」または「含む」というような用語は、明細書上に記載された多くの構成要素、または多くの段階を必ずしもいずれも含むものであると解釈されるものではなく、そのうち一部の構成要素または一部段階は、含まれないこともあり、または追加的な構成要素または段階をさらに含んでもよいと解釈されなければならない。
【００３０】
また、本明細書で使用される「第１」または「第２」のように序数を含む用語は、多様な構成要素についての説明に使用されるが、前記構成要素は、前記用語によって限定されるものではない。前記用語は、１つの構成要素を他の構成要素から区別する目的のみに使用される。
【００３１】
以下、添付された図面を参照しながら、ただ例示のための実施形態について詳細に説明する。下記実施形態の説明は、権利範囲を制限したり限定したりするものではないということは言うまでもない。詳細な説明及び実施形態から、当該技術分野の専門家が容易に類推することができるところは、権利範囲に属すると解釈される。
【００３２】
図１は、一実施形態によるコンピュータ装置について説明するための図面である。図１を参考すれば、コンピュータ装置１は、ＧＰＵ（graphics  processing  unit）１０、ＣＰＵ（central  processing  unit）２０、メモリ３０、ディスプレイ４０及びバス５０を含む。図１に図示されたコンピュータ装置１には、実施形態と係わる構成要素だけが図示されている。従って、図１に図示された構成要素以外に、他の汎用的な構成要素がさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
【００３３】
コンピュータ装置１は、デスクトップコンピュータ、ノート型パソコン、スマートフォン、ＰＤＡ（personal  digital  assistant）、携帯型メディアプレイヤ、ビデオゲーム用コンソール、テレビセットトップボックス、タブレットデバイス、電子書籍リーダ、ウエアラブルデバイス、ＨＭＤ（head  mounted  display）デバイスなどを例として挙げることができるが、それらに制限されるものではない。すなわち、コンピュータ装置１は、コンテンツのディスプレイのためのグラフィックスプロセッシング機能を有する装置であり、コンピュータ装置１の範疇には、多様な装置が含まれてもよい。
【００３４】
ＣＰＵ  ２０は、コンピュータ装置１の全般的な動作及び機能を制御するハードウェアである。例えば、ＣＰＵ  ２０は、運用体制（ＯＳ：operating  system）を駆動し、ＧＰＵ  １０のためのグラフィックスＡＰＩ（application  program  interface）を呼び出し、ＧＰＵ  １０のドライバを実行させることができる。また、ＣＰＵ  ２０は、メモリ３０に保存された多様なアプリケーション、例えば、ウェブブラウジングアプリケーション、ゲームアプリケーション、ビデオアプリケーションなどを実行することができる。
【００３５】
ＧＰＵ  １０は、グラフィックスパイプライン（graphics  pipeline）１００を遂行する装置であり、グラフィック専用プロセッサに該当する。すなわち、ＧＰＵ  １０は、三次元イメージ上の三次元客体を、ディスプレイ用の二次元イメージにレンダリングするために、三次元グラフィックスパイプラインを実行するように具現されたハードウェアでもある。例えば、ＧＰＵ  １０は、シェーディング、ブレンディング、イルミネーティングのような多様な機能、及びディスプレイされるピクセルに対するピクセル値を生成するための多様な機能を遂行することもできる。一方、ＧＰＵ  １０は、タイル基盤レンダリング（ＴＢＲ：tile-based  rendering）のためのタイル基盤（tile-based）グラフィックスパイプラインも遂行することができる。
【００３６】
図１を参照すれば、ＧＰＵ  １０によって処理されるグラフィックスパイプライン１００は、多様なバージョンのDirectＸ、OpenＧＬ  ＡＰＩのようなグラフィックスＡＰＩによって定義されたグラフィックスパイプラインに該当する。すなわち、本実施形態によるグラフィックスパイプライン１００は、いずれか１つのバージョン、またはいずれか１つのＡＰＩ種類によって制限されるものではなく、多様なＡＰＩに適用される。
【００３７】
メモリ３０は、コンピュータ装置１内で処理される各種データを保存するハードウェアであり、例えば、メモリ３０は、ＧＰＵ  １０及びＣＰＵ  ２０で処理されたデータ、及び処理されるデータを保存することができる。また、メモリ３０は、ＧＰＵ  １０及びＣＰＵ  ２０によって駆動されるアプリケーション、ドライバなどを保存することができる。メモリ３０は、ＤＲＡＭ（dynamic  random  access  memory）及びいＳＲＡＭ（static  random  access  memory）のようなＲＡＭ（random  access  memory）、ＲＯＭ（read  only  memory）、ＥＥＰＲＯＭ（electrically  erasable  and  programmable  read  only  memory）、ＣＤ（compact  disc）−ＲＯＭ、ブルーレイ（（登録商標）Blu-ray）、他の光学ディスクストレージ、ＨＤＤ（hard  disk  drive）、ＳＳＤ（solid  state  drive）またはフラッシュメモリを含み、さらに、コンピュータ装置１にアクセスされる外部の他のストレージデバイスを含んでもよい。
【００３８】
ディスプレイ４０は、ＧＰＵ  １０によって処理されたイメージを表示するハードウェアである。例えば、ディスプレイ４０は、ＧＰＵ  １０によってレンダリングされた歪曲イメージを表示することができる。ディスプレイ４０は、所定の解像度のスクリーンピクセルを具備しており、ＧＰＵ  １０は、その解像度に該当するイメージをレンダリングする。ディスプレイ４０は、ＬＣＤ（liquid  crystal  display）、ＯＬＥＤ（organic  light  emitting  diode）のような多種のディスプレイパネルによって具現される。
【００３９】
バス５０は、コンピュータ装置１内のハードウェア間でデータを送受信することができるように、ハードウェアを連結させるハードウェアであり、バス５０は、例えば、ＰＣＩ  bus、ＰＣＩ  Express  busのような多種を含んでもよい。
【００４０】
コンピュータ装置１、特に、ＧＰＵ  １０は、原本（original）イメージを変形し（modify）、歪曲（distorted）イメージをレンダリングするためのグラフィックスパイプライン１００を遂行することができる。歪曲イメージの種類については、図２Ａないし図２Ｄを参照して説明する。
【００４１】
図２Ａないし図２Ｄは、一実施形態による歪曲イメージの種類について説明するための図面である。
【００４２】
図２Ａを参照すれば、歪曲イメージ２１５は、原本イメージ２１０の中心ピクセルを基準に、中心ピクセルと残りのピクセルとの距離がだんだんと増加するように広がる形態のバレル歪曲（barrel  distortion）によるものでもある。バレル歪曲は、魚眼レンズ（fisheye  lens）によって撮影された歪曲効果でもある。図２Ｂを参照すれば、バレル歪曲と反対に、歪曲イメージ２１５は、原本イメージ２１０の中心ピクセルを基準に、中心ピクセルと残りのピクセルとの距離がだんだんと減少するように集まる形態のピンクッション歪曲（pincushion  distortion）によるものでもある。一方、それ以外にも、バレル歪曲とピンクッション歪曲とが混合したマスタッシュ歪曲（mustache  distortion）もあるが、別途に図示されていない。
【００４３】
図２Ｃを参照すれば、ユーザの操作による歪曲イメージ２３５が図示されている。歪曲イメージ２３５は、原本イメージ２３０上でユーザが変形しようとする地点の位置を任意に操作することによって歪曲されたものでもある。すなわち、前述の図２Ａ及び図２Ｂとは異なり、歪曲イメージ２３５は、ユーザの好みによって多様な形態に、非線形的に歪曲されたものでもある。図２Ｄを参照すれば、１６：９解像度の原本イメージ２４０が、４：３解像度の歪曲イメージ２４５に変更されるところが図示されている。そのとき、解像度変更の歪曲は、原本イメージ２４０のピクセル格子２４３が、非線形的な歪曲パターンによって、歪曲格子２４７に変化することによるものでもある。図２Ｄの歪曲イメージ２４５も、図２Ｃと類似して、ユーザが変形しようとする領域を任意に指定することによって歪曲されたものでもある。
【００４４】
本実施形態で説明する歪曲イメージの種類は、線形的な歪曲パターンによるものだけではなく、ユーザの任意的な操作による非線形的な歪曲パターンによるものが含まれてもよい。すなわち、本実施形態で説明する歪曲イメージは、いずれか一つによって制限されるものではない。図１のコンピュータ装置１、特に、ＧＰＵ  １０は、原本イメージが前述のような多様な歪曲パターンによって変形された歪曲イメージをレンダリングすることができる。
【００４５】
図３は、一実施形態による歪曲イメージの活用に係わる例について説明するための図面である。
【００４６】
図３を参照すれば、前述の図２Ａで説明されたバレル歪曲による歪曲イメージ２１５は、ＨＭＤ（head  mounted  display）デバイス３００のために活用される。ＨＭＤデバイス３００は、めがねのようにユーザが頭に着用して目前でイメージを視聴することができるイメージディスプレイデバイスの一種である。ＨＭＤデバイス３００の内部には、１対のレンズ３２０と、ディスプレイパネル３３０とが具備されている。ユーザは、レンズ３２０を介して、ディスプレイパネル３３０に表示された画面を視聴することができる。そのとき、ディスプレイパネル３３０上には、バレル歪曲によって変形された１対の歪曲イメージ３４０が表示される。たとえディスプレイパネル３３０上には、歪曲イメージ３４０が表示されたとしても、ユーザの目には、レンズ３２０を透過した歪曲イメージ３１０が、歪曲がない（no  distortion）イメージ３１０として見られる。
【００４７】
図１のコンピュータ装置１（特に、ＧＰＵ  １０）で処理されるグラフィックスパイプライン１００を介してレンダリングされた歪曲イメージは、例えば、前述のようなＨＭＤデバイス３００のために利用されるが、それに制限されるものではない。
【００４８】
図４Ａは、一般的なグラフィックスパイプラインにおいて、サンプリングポイントを利用して、イメージのピクセルを決定する方法について説明するための図面である。
【００４９】
図４Ａを参照すれば、三角形客体４０１をイメージのピクセルで描くために、ビューポート（viewport）上のサンプリングポイント４０２の位置（location）が利用される。ビューポート上のサンプリングポイント４０２の位置は、グラフィックスパイプラインの固定されたマッピング（fixed  mapping）アルゴリズムによって、ディスプレイ画面上にレンダリングされるイメージのいずれか１つのピクセル４０３に１：１にマッピングされる。そして、グラフィックスパイプラインの固定された機能のラスタライジング（fixed  mapping）アルゴリズムによって、ビューポート上のサンプリングポイント４０２の位置での客体情報（または、プリミティブ情報）で、対応するピクセル４０３がいかようにラスタライジングされるかということが決定される。そのような方法は、歪曲がないイメージをレンダリングするための一般的なグラフィックスパイプラインで遂行される方法でもある。または、歪曲イメージをレンダリングする一般的なグラフィックスパイプラインであるとしても、サンプリングポイント４０２の位置については、全く変更を加えていないので、そのような方法は、歪曲イメージをレンダリングする一般的なグラフィックスパイプラインで遂行される方法でもある。すなわち、一般的なグラフィックスパイプラインでは、サンプリングポイント４０２の位置と、ディスプレイ画面上にレンダリングされるイメージのピクセル４０３とのマッピングは、固定されたマッピングアルゴリズムによって処理されるのみである。
【００５０】
図４Ｂは、一実施形態によるグラフィックスパイプラインにおいて、サンプリングポイントを利用して、イメージのピクセルを決定する方法について説明するための図面である。
【００５１】
図４Ｂを参照すれば、図４Ａのサンプリングポイント４０２と異なり、ビューポート上のサンプリングポイント４１２は、三角形客体４１１内に位置する。しかし、最終的にレンダリングされた、サンプリングポイント４１２に対応するピクセル４１３の位置は、図４Ａのピクセル４０３の位置と同一になる。三角形客体４１１が任意の歪曲パターンによって歪曲された三角形客体４１４に変形される場合、三角形客体４１１内に位置するサンプリングポイント４１２の位置は、歪曲された三角形客体４１４内のいずれか１つのピクセル４１３の位置に対応しなければならない。そのようなサンプリングポイント４１２と、ピクセル４１３とのマッピングは、図１のグラフィックスパイプライン１００内のサンプリングシェーダ４１０によって行われる。図４Ａで説明された固定されたマッピング（fixed  mapping）アルゴリズムによっては、サンプリングポイント４０２の位置と、ピクセル４０３の位置とのマッピング関係が固定されているために、三角形客体４０１が歪曲されても、ピクセル４０３の位置は変更され難い。従って、図４Ａで説明された一般的なグラフィックスパイプラインは、サンプリングポイント４０２とピクセル４０３とのマッピング関係を変更せず、グラフィックスパイプライン内の他のステージ（stages）で歪曲を処理する。それとは異なり、本実施形態によるグラフィックスパイプライン１００は、固定されたマッピングアルゴリズムを代替するサンプリングシェーダ４１０によるステージを追加し、歪曲イメージをレンダリングすることができる。以下では、サンプリングシェーダ４１０が含まれたグラフィックスパイプライン１００についてさらに詳細に説明する。
【００５２】
図５は、一実施形態による、図１のＧＰＵの詳細ハードウェア構造を図示したブロック図である。
【００５３】
図５を参照すれば、ＧＰＵ  １０は、グラフィックスパイプライン１００を遂行するバーテックスシェーダ（vertex  shader）１１０、テッセレーションコントロールシェーダ（tessellation  control  shader）１２１、テッセレーションプリミティブジェネレータ（tessellation  primitive  generator）１２３、テッセレーションエバリュエーションシェーダ（tessellation  evaluation  shader）１２５、ジオメトリシェーダ（geometry  shader）１２７、クリッパ（clipper）１３０、プロジェクタ（projector）１４０、サンプリングシェーダ（sampling  shader）１５０、ラスタライザ（rasterizer）１６０、ピクセルシェーダ（pixel  shader）１７０及びラスタオペレータ（raster  operator）１８０を含んでもよい。また、ＧＰＵ  １０は、コントローラ１９１及びバッファ１９２をさらに含んでもよい。一方、ＧＰＵ  １０内において、グラフィックスパイプライン１００を遂行する前述の構成は、以下の説明による機能に基づいて分類されたものでもある。従って、グラフィックスパイプライン１００を遂行する前述の構成それぞれは、以下で説明する機能それぞれを実行させるプログラムロジックまたはソフトウェアモジュールによって具現される。また、グラフィックスパイプライン１００を遂行する前述の構成は、ＧＰＵ  １０内に具備されたサブプロセッシングユニット（または、プロセッサコア）それぞれ、または１つのプロセッシングユニットでも具現される。すなわち、グラフィックスパイプライン１００を遂行する前述の構成の具現形態は、いずれか一つによって制限されるものではない。さらに、グラフィックスパイプライン１００を遂行する前述の構成の名称は、以下で説明する機能に基づいて付与されたものでもあるが、そのような名称は、多様に変更されるということは、当該技術分野の当業者であるならば、理解することができるであろう。
【００５４】
一方、本明細書によれば、ＧＰＵ  １０でグラフィックスパイプライン１００を遂行する構成の名称は、説明の便宜のために、OpenＧＬ（Open  Graphics  Library）４．５で定義された名称を一部使用したが、その構成の名称は、それらに制限されるものではない。すなわち、ＧＰＵ  １０でグラフィックスパイプライン１００を遂行する構成は、他のバージョンのOpenＧＬ、またはMicrosoft社のＤＸ（DirectＸ）、ＣＵＤＡ（Compute  Unified  Device  Architecture）のような他種のＡＰＩで定義された類似の構成にも対応する。例えば、テッセレーションエバリュエーションシェーダ１２５は、ＤＸで使用されるドメインシェーダ（domain  shader）に対応し、ＧＰＵ  １０内の他の構成も、同様にＤＸ、ＣＵＤＡのような他のＡＰＩで使用される構成に対応するということは、当該技術分野の当業者であるならば、理解することができるであろう。一方、図５で点線によって表示された構成、テッセレーションコントロールシェーダ１２１、テッセレーションプリミティブジェネレータ１２３、テッセレーションエバリュエーションシェーダ１２５、ジオメトリシェーダ１２７は、オプション的な（optional）構成でもある。
【００５５】
図６は、一実施形態による歪曲イメージのレンダリングのためのグラフィックスパイプラインのフローチャートである。以下では、図５及び図６を連繋させ、ＧＰＵ  １０で遂行されるグラフィックスパイプライン１００について説明する。
【００５６】
６１０段階において、ＧＰＵ  １０は、メモリ３０（図１）に保存された、ディスプレイ４０（図１）のスクリーンピクセル（screen  pixels）についての場面情報（scene  description）を獲得する。スクリーンピクセルについての場面情報は、ディスプレイ４０のスクリーン解像度、各スクリーンピクセルの行列位置などの情報を含んでもよい。また、ＧＰＵ  １０は、メモリ３０（図１）に保存された、客体を構成するバーテックス（vertices）に係わる場面情報も獲得することができる。
【００５７】
６２０段階において、バーテックスシェーダ１１０は、場面情報に含まれたバーテックスの位置バーテックスの属性（attribute）などに係わる情報を利用して、各バーテックスに対する三次元空間上の座標を決定する。
【００５８】
６３０段階において、クリッパ１３０は、バーテックスシェーダ１１０から出力されたバーテックスで構成されたプリミティブのうち、カメラの視野（すなわち、ビューポート）に含まれたプリミティブを除いた残りのプリミティブをクリッピング（clipping）及びカリング（culling）する。カメラの視野に属するプリミティブの位置は、ＮＤＣ（normalized  device  coordinate）座標系上の座標でもって指定される。
【００５９】
６４０段階において、プロジェクタ１４０は、ＮＤＣ座標系上に位置したプリミティブの座標を、スクリーン空間（screen  space）上のスクリーン座標に変換する。６４０段階が完了した場合、プロジェクタ１４０は、ビューポート上で、スクリーン座標を有するプリミティブに係わる情報をラスタライザ１６０に出力する。
【００６０】
６５１段階において、サンプリングシェーダ１５０は、ディスプレイのスクリーンピクセルに係わる情報を獲得する。すなわち、サンプリングシェーダ１５０は、スクリーン解像度、各スクリーンピクセルの行列位置などに係わるスクリーンピクセルの場面情報を獲得する。その後、サンプリングシェーダ１５０は、スクリーンピクセルそれぞれごとに、レンダリングされるイメージを表現するためのパターンに基づいた１以上のサンプリングポイントの位置を決定する。言い換えれば、サンプリングシェーダ１５０は、スクリーンピクセルそれぞれごとに、原本イメージの歪曲パターンに基づいた１以上のサンプリングポイントの位置を決定する。すなわち、サンプリングシェーダ１５０は、スクリーン解像度によって定義された個数のスクリーンピクセルそれぞれに対して、サンプリングポイントを決定する。ここで、歪曲パターンは、前述の図２Ａないし図２Ｄで説明した歪曲イメージのパターンでもあるが、それらに制限されるものではない。
【００６１】
サンプリングシェーダ１５０は、格子パターンの前記スクリーンピクセルが、前記歪曲パターンによって変形されたときの前記変形されたスクリーンピクセルそれぞれの中心位置に基づいて、１以上のサンプリングポイントの位置を決定する。サンプリングシェーダ１５０は、歪曲パターンに基づいて、解像度によって定義されたスクリーンピクセルの位置を、サンプリングポイントの位置に変換する。例えば、サンプリングシェーダ１５０の入力は、あるスクリーンピクセルの位置座標である「pixelPosition．ｘ，pixelPosition．ｙ」の値でもあり、サンプリングシェーダ１５０の出力は、あるサンプリングポイントの位置座標である「samplePosition．ｘ，samplePosition．ｙ」の値でもある。すなわち、サンプリングシェーダ１５０は、歪曲パターンを定義するアルゴリズムを介して「pixelPosition．ｘ，pixelPosition．ｙ」の値を「samplePosition．ｘ，samplePosition．ｙ」の値に変換する演算を行うことができる。歪曲パターンを定義するアルゴリズムは、前述のバレル歪曲、ピンクッション歪曲のような線形的な演算を行うアルゴリズムであるか、またはユーザ任意による非線形的演算を行うアルゴリズムでもある。
【００６２】
すなわち、グラフィックスパイプライン１００内のステージのうち、サンプリングシェーダ１５０は、ユーザ設定によって、歪曲パターンの種類、及びサンプリングポイントの位置を自由に変更して定義することが可能なシェーダソースコード（shader  source  code）を処理するプログラマブルシェーダ（programmable  shader）でもある。従って、６５１段階のサンプリングシェーディングは、プログラマブル・ステージ（programmable  stage）でもある。
【００６３】
６５２段階において、サンプリングシェーダ１５０は、レンダリングされる歪曲イメージのピクセルの位置、及びサンプリングポイントの位置をマッピングする。レンダリングされる歪曲イメージのピクセルの位置と、サンプリングポイントの位置とのマッピング関係は、ルックアップ（lookup）テーブルの形態でバッファ１９２に保存される。
【００６４】
一方、サンプリングシェーダ１５０によって遂行される６５１段階及び６５２段階は、６２０段階ないし６４０段階（バーテックスシェーディング・ステージ、クリッピング・ステージ及びプロジェクション・ステージ）が遂行される間、並列して遂行される。すなわち、サンプリングシェーダ１５０によって遂行される６５１段階及び６５２段階は、６６１段階のラスタライジング・ステージ以前に遂行される。
【００６５】
６６１段階において、ラスタライザ１６０は、サンプリングシェーダ１５０によって決定されたサンプリングポイントにおいて、ラスタライジングされるプリミティブにオーバーラップされるサンプリングポイントの位置において、プリミティブに対応するピクセルを決定する。まず、ラスタライザ１６０は、サンプリングポイントの座標のうち、プリミティブを構成するバーテックスの座標内に存在するサンプリングポイントを探索する。その後、ラスタライザ１６０は、バッファ１９２に保存されたルックアップテーブルを参照し、プリミティブにオーバーラップされると探索されたサンプリングポイントに対応する、レンダリングされる歪曲イメージのピクセルを決定する。
【００６６】
６６２段階において、ラスタライザ１６０は、決定されたピクセルに対する属性値（attribute  value）を決定する。それにより、ラスタライザ１６０は、サンプリングポイントそれぞれに対するイメージピクセルを生成することができる。
【００６７】
６７０段階において、ピクセルシェーダ１７０は、生成されたイメージピクセルに対するピクセルカラー値を決定することにより、歪曲イメージのピクセルをシェーディングする。
【００６８】
６８０段階において、ラスタオペレータ１８０は、ピクセルごとに、ステンシル（stencil）、ｚテスト、ブレンディング（blending）のような追加的な、既定義の（pre-defined）ピクセルオペレーションを遂行する。
【００６９】
６９０段階において、ＧＰＵ  １０は、ラスタオペレーション・ステージ（６８０段階）が完了した場合、歪曲イメージのレンダリングを完了し、レンダリングされた歪曲イメージをディスプレイ４０に出力する。
【００７０】
前述のように、本実施形態による歪曲イメージのレンダリングは、１パス（１−pass）のグラフィックスパイプライン１００内で遂行される。従って、単にサンプリングポイント決定のためのサンプリングシェーディング・ステージだけが追加されるのみ、歪曲イメージのレンダリングだけのための別途の追加的なパス（pass）が要求されないので、歪曲イメージのレンダリングのための追加的なパス（pass）によるＧＰＵ  １０の演算量及び性能負担を軽減させることができる。
【００７１】
一方、コントローラ１９１は、グラフィックスパイプライン１００の各構成要素（バーテックスシェーダ１１０ないしラスタオペレータ１８０）とバッファ１９２との全般的な機能及び動作を制御する。
【００７２】
バッファ１９２は、ＧＰＵ  １０内で処理される情報、例えば、サンプリングポイントに係わる情報などを保存することができる。また、バッファ１９２は、メモリ３０（図１）から、ＧＰＵ  １０によって処理されなければならない情報、例えば、場面情報、バーテックス情報などを受信し、臨時的に保存することができる。
【００７３】
テッセレーションコントロールシェーダ１２１、テッセレーションプリミティブジェネレータ１２３及びテッセレーションエバリュエーションシェーダ１２５は、プリミティブのテッセレーションのためのオプション的な構成に該当する。ジオメトリシェーダ１２７は、１つの（single）プリミティブに対して、１以上の追加的な出力プリミティブを生成するためにも使用されるオプション的な構成である。
【００７４】
図７は、一実施形態による歪曲イメージの歪曲パターンに基づいたスクリーンピクセルに対応するサンプリングポイントの位置について説明するための図面である。
【００７５】
図７を参照すれば、歪曲パターンは、ピンクッション歪曲であることを仮定して説明する。ピンクッション歪曲は、中心に行くほどイメージがだんだん縮小される傾向を示す歪曲パターンを意味する。従って、サンプリングポイントのグリッドは、格子パターンのスクリーンピクセル７１０に対応する規則的な（regular）形態のグリッドではない、中心に向けて集まるピンクッション歪曲パターンに対応する変形された（modified）形態のグリッドでもある。それゆえ、あるピクセル７１５に対応するサンプリングポイント７２５の位置は、ビューポート７２０上において、中心方向に集められたある位置に決定される。サンプリングシェーダ１５０（図５）は、ピンクッション歪曲パターンに基づいて、スクリーンピクセル７１０それぞれに対応するサンプリングポイントの位置をそれぞれ決定する。
【００７６】
図８Ａは、歪曲がない場合、スクリーンピクセルに対応するサンプリングポイント（ＳＰ）決定する方法について説明するための図面である。
【００７７】
図８Ａを参照すれば、歪曲がない場合、スクリーンピクセルに対応するサンプリングポイントの位置は、ビューポート上において、スクリーンピクセルの中心位置に対応する位置に決定される。例えば、スクリーンピクセル２に対応するサンプリングポイントＳＰ２の位置は、ビューポート上において、スクリーンピクセル２の領域に対応する領域の中心位置と決定される。ただし、対応するサンプリングポイントの位置は、グラフィックスパイプライン１００の設定によって、スクリーンピクセルの中心位置の代わりに、中心位置から一定オフセットほど離れた位置に決定されもする。または、対応するサンプリングポイントの位置は、ユーザが任意に設定した位置に決定される。すなわち、本実施形態においては、説明の便宜のために、対応するサンプリングポイントの位置は、スクリーンピクセルの中心位置に対応するとして説明するが、本実施形態は、それに制限されるものではない。
【００７８】
図８Ｂは、一実施形態によって、歪曲パターンに基づいて、スクリーンピクセルに対応するサンプリングポイントを決定する方法について説明するための図面である。
【００７９】
図８Ｂを参照すれば、歪曲パターンは、ピンクッション歪曲であるということを仮定して説明する。格子パターン８１０のスクリーンピクセルは、歪曲パターン（ピンクッション歪曲パターン）８２０によって変形されたと仮定することができる。従って、スクリーンピクセル２に対応するサンプリングポイントＳＰ１２の位置は、ビューポート上において、スクリーンピクセル２の領域に対応する領域の中心位置から、左上端方向に若干離れた位置に決定される。また、スクリーンピクセル４に対応するサンプリングポイントＳＰ１４の位置も、ビューポート上において、スクリーンピクセル４の領域に対応する領域の中心位置から、左上端方向に若干離れた位置に決定される。
【００８０】
すなわち、シェーディングシェーダ１５０は、グラフィックスパイプライン１００内のサンプリングシェーディング・ステージ（６５１段階（図６））を介して、歪曲パターンに基づいて、スクリーンピクセルに対応するサンプリングポイント（または、サンプリングポイントの位置）を決定する。従って、シェーディングシェーダ１５０は、歪曲イメージのレンダリングのために、サンプリングポイントの位置を、歪曲がない場合と比較し、歪曲パターンが反映された位置に異なって決定することができる。
【００８１】
図９は、一実施形態による、歪曲がない場合のサンプリングポイントの位置と、歪曲がある場合のサンプリングポイントの位置とを比較して説明するための図面である。
【００８２】
図９を参照すれば、サンプリングポイントＳＰ１，ＳＰ２，ＳＰ３及びＳＰ４の位置は、歪曲がない場合に決定された位置でもある。サンプリングポイントＳＰ１，ＳＰ２，ＳＰ３及びＳＰ４の位置は、図８Ａで説明したように、いずれもスクリーンピクセルそれぞれに対応するビューポート上の領域の中心位置に該当する。それとは異なり、サンプリングポイントＳＰ１１，ＳＰ１２，ＳＰ１３及びＳＰ１４の位置は、歪曲がある場合、サンプリングシェーダ１５０によって決定された位置でもある。すなわち、サンプリングポイントＳＰ１１，ＳＰ１２，ＳＰ１３及びＳＰ１４の位置は、歪曲パターン（ピンクッション歪曲パターン）に基づいて決定されたために、サンプリングポイントＳＰ１，ＳＰ２，ＳＰ３及びＳＰ４の位置と比較し、スクリーンピクセルそれぞれに対応するビューポート上の領域の中心位置から、若干離れたところに決定される。図８Ｂ及び図９では、ピンクッション歪曲パターンを例として挙げてサンプリングポイントの位置について説明したが、本実施形態は、それに制限されるものではなく、他の多様な歪曲パターンの場合にも、類似した方式でサンプリングポイントの位置が決定される。
【００８３】
図１０は、一実施形態によって、サンプリングシェーダによって決定されたサンプリングポイントを利用して、ピクセル生成のためのラスタライジングを行う方法について説明するための図面である。
【００８４】
図１０を参照すれば、歪曲パターンによって、ビューポート１０１０上において、全てのサンプリングポイントのサンプリンググリッドは、規則的なグリッドの形態ではない、変形されたグリッドの形態でもある。ビューポート１０１０上において、三角形のプリミティブ１０１１が含まれた場合、ラスタライザ１６０（図５）は、全てのサンプリングポイントのうち、プリミティブ１０１１にオーバーラップされた一部サンプリングポイント１０１５だけがピクセル生成に必要なものであると決定する。その後、ラスタライザ１６０は、バッファ１９２（図５）に保存されたサンプリングポイントと、ピクセルとのマッピング関係に係わる情報に基づいて、一部サンプリングポイント１０１５に対応するピクセル１０２５の位置を決定し、ピクセル生成を行うことができる。全体イメージピクセル１０２０のうち一部ピクセル１０２５の位置において、客体１０２１は、プリミティブ１０１１の三角形とは異なり、歪曲パターンによって変形された形態を有するように描かれる（レンダリングされる）。
すなわち、本実施形態による、歪曲イメージをレンダリングするためのグラフィックスパイプライン１００（図５）は、サンプリングシェーダ１５０（図５）を利用して、図７及び図１０で説明したように、歪曲パターンに基づいたサンプリングポイントの位置を決定し、そのサンプリングポイントの位置に基づいたピクセル位置で客体をレンダリングすることにより、歪曲イメージをレンダリングすることができる。
【００８５】
図１１は、一実施形態によって、バレル歪曲パターンに基づいたサンプリングポイントを決定するためのシェーダソースコード（shader  source  code）の例示について説明するための図面である。
【００８６】
図１１に図示されたシェーダソースコード１１２０を参照すれば、「in  vec2  pix_pos;  //  NDC  coordinate  [-1,  1]」は、サンプリングシェーダ１５０（図５）の入力を示すコードであり、ＮＤＣ座標系上のスクリーンピクセルの位置ｐｉｘ＿ｐｏｓが、サンプリングシェーダ１５０の入力に該当するという点を意味する。「out  vec2  sampling_pos;  //  NDC  coordinate  [-1,  1]」は、サンプリングシェーダ１５０の出力を示すコードであり、ＮＤＣ座標系上のサンプリングポイントの位置sampling＿ｐｏｓが、サンプリングシェーダ１５０の出力に該当するという点を意味する。
【００８７】
「uniform  float  BarrelPower;  vec2  Distort(vec2  p)  {float  theta  =  atan(p.y,  p.x);  float  radius  =  length(p);  radius  =  pow(radius,  BarrelPower);  p.x  =  radius  *  cos(theta);  p.y  =  radius  *  sin(theta);  return  p;}」のコードは、バレル歪曲を定義するための関数を意味する。
【００８８】
「void  main()  {float  d  =  length(pix_pos,  xy);  if  (d  <  1.0)  {sampling_pos  =  Distort(pix_pos);}  else  {discard();}」のコードは、ビューポート上の中心から、距離１未満のサンプリングポイントだけピクセルに生成され、ビューポート上の中心から、距離１以上のサンプリングポイントは、捨てられるということを定義した関数を意味する。
【００８９】
バレル歪曲パターンに基づいたサンプリンググリッド１１１０は、規則的な格子パターンではない。すなわち、バレル歪曲パターンに基づいたサンプリンググリッド１１１０は、中心方向に集められる形態を有する。サンプリングポイントの位置は、それぞれの格子の中心位置と決定される。結局、サンプリングシェーダ１５０（図５）のためのシェーダソースコード１１２０が実行された場合、魚眼レンズ（fisheye  lens）によって撮影されたイメージのような歪曲イメージ１１３０がレンダリングされる。
【００９０】
一方、前述のところのように、サンプリングシェーダ１５０は、プログラマブルシェーダであるので、図１１のシェーダソースコード１１２０以外にも、ユーザは、多様な歪曲パターン、または多様なサンプリングポイントの位置を定義する多種のシェーダソースコードをプログラミングし、サンプリングシェーダ１５０を動作させることができる。
【００９１】
図１２は、一実施形態によって、ラスタライザにおいて、ビューポート上のプリミティブにオーバーラップされたサンプリングポイントを探索する方法について説明するための図面である。
【００９２】
図１２を参照すれば、サンプリングシェーダ１５０（図５）によって決定されたサンプリングポイントＳＰ１〜ＳＰ１１の位置情報は、バッファ１９２（図５）またはメモリ３０（図１）に保存される。ラスタライザ１６０（図５）は、ビューポート１２００上のプリミティブ１２１０にオーバーラップされたサンプリングポイントを探索するために、バッファ１９２またはメモリ３０から、全てのサンプリングポイントＳＰ１〜ＳＰ１１の位置情報を読み取ることができる。その後、ラスタライザ１６０は、プリミティブ１２１０の位置情報と、サンプリングポイントＳＰ１〜ＳＰ１１の位置情報とを比較することにより、プリミティブ１２１０にオーバーラップされたサンプリングポイントＳＰ８，ＳＰ９及びＳＰ１０を決定することができる。
【００９３】
図１３は、他の一実施形態によって、ラスタライザにおいて、ビューポート上のプリミティブにオーバーラップされたサンプリングポイントを探索する方法について説明するための図面である。
【００９４】
図１３を参照すれば、ラスタライザ１６０は、クアッドツリー（quadtree）アルゴリズムを利用して、ビューポート１３００上のプリミティブにオーバーラップされたサンプリングポイントを探索することができる。図１２で説明したように、サンプリングシェーダ１５０（図５）によって決定されたサンプリングポイントＳＰ１〜ＳＰ１１の位置情報は、バッファ１９２（図５）またはメモリ３０（図１）に保存される。ただし、図１２と異なり、ＧＰＵ（図５の１０）は、クアッドツリーアルゴリズムを利用して、サンプリングポイントＳＰ１〜ＳＰ１１の位置が属した領域Area  １ないしArea  ４に係わる情報も、共にバッファ１９２またはメモリ３０に保存することができる。「Area」は領域を表す。
【００９５】
さらに詳細に説明すれば、ＧＰＵ  １０は、所定の最大個数（例えば、２個）を設定し、各領域に属したサンプリングポイントの個数が２個以下になるまで領域を継続的に４等分する。すなわち、ビューポート１３００の全体領域には、総１１個のサンプリングポイントＳＰ１〜ＳＰ１１が存在するので、ＧＰＵ  １０は、ビューポート１３００の全体領域を、Area  １、Area  ２、Area  ３及びArea  ４に４等分する。Area  １には、総２個のサンプリングポイントＳＰ１及びＳＰ３だけが存在するので、ＧＰＵ  １０は、Area  １については、それ以上領域を分けない。Area  ２には、総４個のサンプリングポイントＳＰ２，ＳＰ４，ＳＰ５及びＳＰ６が存在するので、ＧＰＵ  １０は、Area  ２を、Area  ２−１、Area  ２−２、Area  ２−３及びArea  ２−４に４等分する。Area  ２−１には、１個のサンプリングポイントＳＰ２だけが存在するので、ＧＰＵ  １０は、Area  ２−１については、それ以上領域を分けない。また、残りのArea  ２−２ないしArea  ２−４にも、２個以下のサンプリングポイントが存在するので、ＧＰＵ  １０は、Area  ２−２ないしArea  ２−４についても、それ以上領域を分けない。同様に、ＧＰＵ  １０は、Area  ３−１、Area  ３−２−１、Area  ３−２−２、Area  ３−２−３、Area  ３−２−４、Area  ３−３及びArea  ３−４に分ける。
【００９６】
ＧＰＵ  １０は、クアッドツリーアルゴリズムによって区分された領域Area  １ないしArea  ４それぞれに属したサンプリングポイントに係わる情報、Area  １ないしArea  ４それぞれの位置情報を、バッファ１９２またはメモリ３０に保存する。
【００９７】
ラスタライザ１６０は、プリミティブにオーバーラップされたサンプリングポイントを探索するために、バッファ１９２またはメモリ３０から、区分された領域Area  １ないしArea  ４と係わる情報を読み取る。すなわち、図１２と異なり、図１３の実施形態によれば、ラスタライザ１６０は、全てのサンプリングポイントについての位置情報を読み取る必要がない。ラスタライザ１６０は、プリミティブの位置情報と、Area  １ないしArea  ４の位置情報とを比較することにより、プリミティブ１２１０にオーバーラップされた領域Area  １、Area  ３−２−１、Area  ３−２−２、Area  ３−２−３、Area  ３−２−４、Area  ４を決定することができる。その後、ラスタライザ１６０は、オーバーラップされた領域Area  １、Area  ３−２−１、Area  ３−２−２、Area  ３−２−３、Area  ３−２−４、Area  ４に属したサンプリングポイントＳＰ１，ＳＰ３，ＳＰ７，ＳＰ８，ＳＰ９，ＳＰ１０の位置情報と、プリミティブの位置情報とを比較することにより、プリミティブにオーバーラップされたサンプリングポイントＳＰ８，ＳＰ９及びＳＰ１０を決定することができる。
【００９８】
図１３の実施形態によれば、ラスタライザ１６０は、クアッドツリーアルゴリズムを介して、不要なサンプリングポイントＳＰ２，ＳＰ４，ＳＰ５，ＳＰ６及びＳＰ１１の位置情報を読み取らないのである。
【００９９】
ただし、本実施形態によるラスタライザ１６０の探索方式は、いずれか一つによって制限されるものではない。
【０１００】
図１４は、一実施形態によって、ピンクッション歪曲パターンに基づいたサンプリングポイントを利用して、レンダリングされた歪曲イメージがＨＭＤデバイスで表示された場合について説明するための図面である。
【０１０１】
図１４を参照すれば、ＨＭＤデバイス３００（図３）のレンズ３２０が凸レンズである場合、ディスプレイパネル３３０には、ピンクッション歪曲パターンによる歪曲イメージが表示される。ＨＭＤデバイス３００のためのＧＰＵ  １０（図１）は、ピンクッション歪曲パターンに基づいて、サンプリングポイントのサンプリンググリッド１４００を決定し、それを利用して、歪曲イメージ１４１０をレンダリングする。ピンクッション歪曲パターンに基づいた歪曲イメージ１４１０が、ＨＭＤデバイス３００のディスプレイパネル３３０に表示される場合、ユーザは、ＨＭＤデバイス３００のレンズ３２０を介して、歪曲がないイメージ１４２０を視聴することができる。すなわち、歪曲イメージ１４１５上において、サンプリングポイント１４１５の位置が歪曲されたピクセルは、レンズ３２０を通過することにより、規則的な格子パターンのスクリーンピクセル１４２５に対応するものと見られる。
【０１０２】
図１５Ａ及び図１５Ｂは、一実施形態による、シングルサンプリング及びマルチサンプリングについて説明するための図面である。
【０１０３】
ＧＰＵ  １０（図５）は、グラフィックスパイプライン１００で処理されるサンプリングポイントのためのマルチサンプリング（multisampling）をイネーブル（enable）したりディセーブル（disable）したりすることができる。
【０１０４】
図１５Ａを参照すれば、マルチサンプリングがディセーブルされた（disabled）（すなわち、シングルサンプリング）場合、サンプリングシェーダ１５０（図５）は、１スクリーンピクセル１５１０に対して１つの（single）サンプリングポイント１５１５だけを決定する。しかし、図１５Ｂを参照すれば、マルチサンプリングがイネーブルされた（enabled）（すなわち、マルチサンプリング）場合、サンプリングシェーダ１５０は、１スクリーンピクセル１５２０に対して、２以上のマルチサンプリングポイント１５２５を決定することができる。マルチサンプリングがイネーブルされたとき、スクリーンピクセルそれぞれに対して決定された２以上のサンプリングポイントの配置は、歪曲パターンによって、スクリーンピクセルそれぞれが歪曲された程度に比例する。
【０１０５】
図１６は、他の実施形態によって、スクリーンピクセルに対して、カラー成分ごとに互いに異なるサンプリングポイントの位置を決定することについて説明するための図面である。
【０１０６】
先に、サンプリングシェーダ１５０（図５）は、カラー成分による影響を考慮せず、サンプリングポイントの位置を決定する（１６１０）と説明した。しかし、他の実施形態として、サンプリングシェーダ１５０（図５）は、カラー成分を考慮し、サンプリングポイントの位置を決定することもできる。
【０１０７】
カラー成分ごとに波長が異なるために、レンズを通過した各カラー成分に対応する光の屈折は、互いに異なる。カラー成分が、Ｒ（red）、Ｇ（green）及びＢ（blue）である場合（１６００）を例として挙げれば、Ｒの屈折度、Ｇの屈折度及びＢの屈折度は、互いに異なる。そのような自然な現象を考慮し、サンプリングシェーダ１５０は、各カラー成分ごとに、互いに異なるオフセットを補償し、サンプリングポイントの位置を決定することができる。すなわち、各カラー成分のためのサンプリンググリッド１６２０を参照すれば、サンプリングシェーダ１５０は、カラー成分Ｂに対応するサンプリングポイント間の間隔は、カラー成分Ｇに対応するサンプリングポイント間の間隔より狭く、カラー成分Ｇに対応するサンプリングポイント間の間隔は、カラー成分Ｒに対応するサンプリングポイント間の間隔より狭いと決定することができる。サンプリングシェーダ１５０は、１スクリーンピクセルに対して、カラー成分Ｂに対応するサンプリングポイントの位置、カラー成分Ｇに対応するサンプリングポイントの位置、及びカラー成分Ｒに対応するサンプリングポイントの位置を別途に決定することができる。それにより、ピクセルシェーダ１７０（図５）は、あるピクセルにシェーディングされるカラー成分の分布に適するカラー成分別サンプリングポイントを選択し、当該ピクセルに対するピクセルシェーディングを行う。
【０１０８】
図１７は、一実施形態による歪曲パターンによって、未使用領域（unused  region）が存在する場合の歪曲イメージのレンダリングについて説明するための図面である。
【０１０９】
図１７を参照すれば、ディスプレイが原本イメージではない歪曲イメージ１７００を表示する場合、未使用領域１７１０が存在することができる。ＧＰＵ  １０（図５）は、図１１で説明したように、未使用領域１７１０については、ラスタライジング、ピクセルシェーディングのような処理をスキップすることにより、演算量を減らしながら、演算速度を増加させることができる。
【０１１０】
図１８は、一実施形態による、サンプリングシェーダにおいて、ディザリング（dithering）のためのサンプリングポイントを決定することについて説明するための図面である。
【０１１１】
図１８を参照すれば、歪曲イメージ１８００のレンダリングのために、ディザリングアルゴリズムが利用される。歪曲イメージ１８００の一部領域１８０５を拡大すれば、ディザリングアルゴリズムによってディザリングされたピクセルがランダムに分布される。サンプリングシェーダ１５０（図５）は、一部領域１８０５に対するディザリングアルゴリズム適用のために、一部領域１８０５については、サンプリンググリッド１８２０と共に、サンプリングポイントの位置をがランダムに決定することができる。
【０１１２】
図１９は、他の実施形態によって、タイル基盤レンダリングのためのグラフィックスパイプラインである場合、サンプリングシェーディングが活用される例について説明するための図面である。
【０１１３】
図１９を参照すれば、グラフィックスパイプライン１００がタイル基盤レンダリングのための場合、グラフィックスパイプライン１００は、タイルビニング（tile  binning）のためのビニングパイプライン１００−１、及びレンダリングのためのレンダリングパイプライン１００−２の２パス（２−pass）を含んでもよい。
【０１１４】
ビニングパイプライン１００−１は、場面情報（scene  description）を獲得するステージ（１９１１）、入力アセンブリング（input  assembling）（１９１２）、バーテックスシェーディング（１９１３）、ＣＣＶ（culling，cliping，viewport  transform）（１９１４）、ビニング（binning）（１９１７）、ビニング（１９１７）によって決定された各タイルに属したプリミティブに係わる情報をタイルビットストリームに保存するステージ（１９１８）を含む。
【０１１５】
レンダリングパイプライン１００−２は、場面情報を獲得するステージ（１９２１）、入力アセンブリング（１９２２）、バーテックスシェーディング（１９２３）、ＣＣＶ（１９２４）、ラスタライジング（１９２５）、ピクセルシェーディング（１９２６）、ラスタオペレーティング（１９２７）及びレンダリングイメージを出力するステージ（１９２８）を含む。
【０１１６】
サンプリングシェーダ１５０（図５）によって、サンプリングポイント（または、サンプリングポイントの位置）が決定されるサンプリングシェーディング（１９１５）、及び歪曲イメージのピクセルと、サンプリングポイントとをマッピングするステージ（１９１６）は、ビニングパイプライン１００−１でのみ遂行される。さらに詳細には、図６に図示されたところと類似して、サンプリングシェーディング（１９１５）及びステージ（１９１６）は、ビニング（１９１７）が行われる以前に、入力アセンブリング（１９１２）、バーテックスシェーディング（１９１３）、ＣＣＶ（１９１４）と並列して行われる。
【０１１７】
図２０は、一実施形態による歪曲イメージのレンダリングのためのグラフィックスパイプラインを遂行する装置のブロック図である。図２０を参照すれば、グラフィックスパイプラインを遂行する装置は、前述のＧＰＵ  ２０００である。ＧＰＵ  ２０００は、シェーダ２０１０及びラスタライザ２０２０を含む。ＧＰＵ  ２０００のシェーダ２０１０は、図５で説明したＧＰＵ  １０のサンプリングシェーダ１５０に対応し、ＧＰＵ  ２０００のラスタライザ２０２０は、図５のＧＰＵ  １０のラスタライザ１６０に対応する。すなわち、ＧＰＵ  ２０００は、図５のＧＰＵ  １０の構成のうち一部構成のみを含むとも図示されているが、それに制限されるものではなく、ＧＰＵ  ２０００は、図５のＧＰＵ  １０の他の構成も含んでもよい。
【０１１８】
シェーダ２０１０は、ディスプレイ４０（図１）のスクリーンピクセルに係わる情報を獲得する。その後、シェーダ２０１０は、スクリーンピクセルそれぞれごとに、レンダリングされるイメージを表現するためのパターン（すなわち、歪曲イメージの歪曲パターン）に基づいた１以上のサンプリングポイントの位置を決定する。
【０１１９】
ラスタライザ２０２０は、決定されたサンプリングポイントのうち、ラスタライジングされるプリミティブにオーバーラップされるサンプリングポイントの位置において、プリミティブに対応するピクセルを生成する。
【０１２０】
結局、ＧＰＵ  ２０００によって遂行されるグラフィックスパイプラインは、前述のように、ラスタライザ２０２０によって生成されたピクセルを利用して、イメージ（歪曲イメージ）をレンダリングする。
【０１２１】
図２１は、一実施形態による、歪曲イメージのレンダリングのためのグラフィックスパイプラインを遂行する方法のフローチャートである。図２１を参照すれば、グラフィックスパイプラインの遂行方法は、前述のコンピュータ装置１（ＧＰＵ  １０またはＧＰＵ  ２０００）内で、時系列的に処理される過程であるので、以下で省略された内容であるとしても、前述のコンピュータ装置１（ＧＰＵ  １０またはＧＰＵ  ２０００）について説明した内容は、図２１のグラフィックスパイプラインの遂行方法にも適用される。
【０１２２】
２１０１段階において、シェーダ２０１０（または、サンプリングシェーダ１５０）は、ディスプレイのスクリーンピクセルに係わる情報を獲得する。
【０１２３】
２１０２段階において、シェーダ２０１０（または、サンプリングシェーダ１５０）は、スクリーンピクセルそれぞれごとに、レンダリングされるイメージを表現するためのパターンに基づいた１以上のサンプリングポイントの位置を決定する。
【０１２４】
２１０３段階において、ラスタライザ２０２０（または、ラスタライザ１６０）は、サンプリングポイントのうち、ラスタライジングされるプリミティブにオーバーラップされるサンプリングポイントの位置において、プリミティブに対応するピクセルを生成する。
【０１２５】
２１０４段階において、ＧＰＵ  ２０００（または、ＧＰＵ  １０）は、生成されたピクセルを利用して、イメージ（歪曲イメージ）をレンダリングする。
【０１２６】
一方、前述の本発明の実施形態は、コンピュータで実行されるプログラムに作成可能であり、コンピュータで読み取り可能な記録媒体を利用して、前記プログラムを動作させる汎用デジタルコンピュータで具現される。また、前述の本発明の実施形態で使用されたデータの構造は、コンピュータで読み取り可能な記録媒体に、多くの手段を介して記録される。前記コンピュータで読み取り可能な記録媒体は、マグネチック記録媒体（例えば、ＲＯＭ（read  only  memory）、フロッピー（登録商標）ディスク、ハードディスクなど）、光学的判読媒体（例えば、ＣＤ（compact  disc）−ＲＯＭ、ＤＶＤ（digital  versatile  disc）など）のような記録媒体を含む。
【０１２７】
以上、本発明について、その望ましい実施形態を中心に説明した。本発明が属する技術分野で当業者であるならば、本発明が、本発明の本質的な特性から外れない範囲で変形された形態に具現されるということを理解することができるであろう。従って、開示された実施形態は、限定的な観点ではなく、説明的な観点から考慮されなければならない。本発明の範囲は、前述の説明ではなく、特許請求の範囲に示されており、それと同等な範囲内にある全ての差異は、本発明に含まれるものであると解釈されなければならないのである。
【産業上の利用可能性】
【０１２８】
本発明のグラフィックスパイプラインを遂行する方法及びその装置は、例えば、グラフィックス関連の技術分野に効果的に適用可能である。
【符号の説明】
【０１２９】
１      コンピューティング装置
１０    ＧＰＵ
２０    ＣＰＵ
３０    メモリ
４０    ディスプレイ
５０    バス
１００  グラフィックスパイプライン
【図１】
0006749151.tif 000002
【図２Ａ】
0006749151.tif 000003
【図２Ｂ】
0006749151.tif 000004
【図２Ｃ】
0006749151.tif 000005
【図２Ｄ】
0006749151.tif 000006
【図３】
0006749151.tif 000007
【図４Ａ】
0006749151.tif 000008
【図４Ｂ】
0006749151.tif 000009
【図５】
0006749151.tif 000010
【図６】
0006749151.tif 000011
【図７】
0006749151.tif 000012
【図８Ａ】
0006749151.tif 000013
【図８Ｂ】
0006749151.tif 000014
【図９】
0006749151.tif 000015
【図１０】
0006749151.tif 000016
【図１１】
0006749151.tif 000017
【図１２】
0006749151.tif 000018
【図１３】
0006749151.tif 000019
【図１４】
0006749151.tif 000020
【図１５Ａ】
0006749151.tif 000021
【図１５Ｂ】
0006749151.tif 000022
【図１６】
0006749151.tif 000023
【図１７】
0006749151.tif 000024
【図１８】
0006749151.tif 000025
【図１９】
0006749151.tif 000026
【図２０】
0006749151.tif 000027
【図２１】
0006749151.tif 000028