(57)【要約】【課題】好適な精度のハードシャドウの描画に要する演算量及び演算時間を低減する。【解決手段】プログラムは、シーンを描画する視点の情報に基づき、該視点からの投影において描画されるスクリーンの各ピクセルについて、影が生じるか否かを判定するシェーディング点を設定させ、シーンについて定義される光源を示す光源情報とシーンに配置される描画オブジェクトの情報とに基づいて、光源からの投影にて描画オブジェクトの深度を示す深度バッファをコンピュータに生成させる。またプログラムは、設定されたシェーディング点群と生成された深度バッファとに基づいて、照明状態が確定するシェーディング点を特定して判定対象から除外させ、除外後のシェーディング点群の各々について、シーンに配置される描画オブジェクトに起因する照明状態をコンピュータに判定させる。【選択図】図６
2019121193.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、シーンに配置される描画オブジェクトについての、影が生じるか否かを示す影情報を生成させるプログラムであって、
前記シーンを描画する視点の情報に基づき、該視点からの投影において描画されるスクリーンの各ピクセルについて、影が生じるか否かを判定するシェーディング点を設定する処理と、
前記シーンについて定義される光源を示す光源情報と前記シーンに配置される描画オブジェクトの情報とに基づいて、前記光源からの投影の２次元テクスチャである、前記シーンに配置される描画オブジェクトの深度を示す深度バッファを生成する処理と、
前記設定されたシェーディング点群と前記生成された深度バッファとに基づいて、照明状態が確定するシェーディング点を特定する処理と、
前記シェーディング点群から、前記照明状態が確定したシェーディング点を除外する処理と、
前記除外後のシェーディング点群の各々について、前記光源からの投影において前記シーンに配置される描画オブジェクトに起因する照明状態を判定する処理と、
前記照明状態が確定したシェーディング点と、前記照明状態が判定されたシェーディング点とに基づいて、前記視点からの投影における前記影情報を生成する処理と、
を有するプログラム。
【請求項２】
前記深度バッファは、互いに深度値の導出基準が異なる第１の深度バッファ及び第２の深度バッファの少なくともいずれかを含む請求項１に記載のプログラム。
【請求項３】
前記深度バッファが前記第１の深度バッファである場合に、前記特定する処理において、影が生じることが確定するシェーディング点が特定され、
前記除外する処理において、前記影が生じることが確定したシェーディング点が除外される
請求項２に記載のプログラム。
【請求項４】
前記第１の深度バッファの１テクセルの深度値は、前記光源と該１テクセルとで定まる空間を完全に遮断する描画オブジェクトのうちの、光源に最も近接している描画オブジェクトに基づいて決定される請求項２または３に記載のプログラム。
【請求項５】
前記第１の深度バッファの１テクセルの深度値は、前記完全に遮断する描画オブジェクトが存在する場合に、前記光源から該１テクセルの四隅に向かう光線と該完全に遮断する描画オブジェクトの面との交点のうち、最奥の交点の深度値に決定される請求項４に記載のプログラム。
【請求項６】
前記特定する処理において、前記第１の深度バッファのテクセルに対応するシェーディング点のうち、前記光源からの深度が該テクセルの深度値よりも奥の値を示すシェーディング点について、照明状態が確定する請求項５に記載のプログラム。
【請求項７】
前記第１の深度バッファの１テクセルの深度値は、前記完全に遮断する描画オブジェクトが存在しない場合に、初期値に決定され、
前記特定する処理において、前記初期値を有する前記第１の深度バッファのテクセルに対応するシェーディング点については、照明状態は確定しない
請求項４乃至６のいずれか１項に記載のプログラム。
【請求項８】
前記深度バッファが前記第２の深度バッファである場合に、前記特定する処理において、影が生じないことが確定するシェーディング点が特定され、
前記除外する処理において、前記影が生じないことが確定したシェーディング点が除外される
請求項２乃至７のいずれか１項に記載のプログラム。
【請求項９】
前記第２の深度バッファの１テクセルの深度値は、前記光源と該１テクセルとで定まる空間の少なくとも一部を遮断する描画オブジェクトであって、影生成において前面カリングが行われる描画オブジェクトのうちの、光源に最も近接している描画オブジェクトに基づいて決定される請求項２乃至８のいずれか１項に記載のプログラム。
【請求項１０】
前記第２の深度バッファの１テクセルの深度値は、前記少なくとも一部を遮断する描画オブジェクトが存在する場合に、前記光源から該１テクセルの四隅に向かう光線と該少なくとも一部を遮断する描画オブジェクトのメントの背面との交点のうち、光源に最も近接している交点の深度値に決定される請求項９に記載のプログラム。
【請求項１１】
前記特定する処理において、前記第２の深度バッファのテクセルに対応するシェーディング点のうち、前記光源からの深度が該テクセルの深度値より手前の値を示すシェーディング点について、照明状態が確定する請求項１０に記載のプログラム。
【請求項１２】
前記第２の深度バッファの１テクセルの深度値は、前記少なくとも一部を遮断する描画オブジェクトが存在しない場合に、初期値に決定され、
前記特定する処理において、前記初期値を有する前記第２の深度バッファのテクセルに対応するシェーディング点については、照明状態は確定しない
請求項８乃至１１のいずれか１項に記載のプログラム。
【請求項１３】
請求項１乃至１２のいずれか１項に記載のプログラムを記録した、コンピュータ読み取り可能な記録媒体。
【請求項１４】
シーンに配置される描画オブジェクトについて、影が生じるか否かを示す影情報を生成して描画を行う描画方法であって、
前記シーンを描画する視点の情報に基づき、該視点からの投影において描画されるスクリーンの各ピクセルについて、影が生じるか否かを判定するシェーディング点を設定する設定工程と、
前記シーンについて定義される光源を示す光源情報と前記シーンに配置される描画オブジェクトの情報とに基づいて、前記光源からの投影の２次元テクスチャである、前記シーンに配置される描画オブジェクトの深度を示す深度バッファを生成する第１の生成工程と、
前記設定工程において設定されたシェーディング点群と前記第１の生成工程において生成された前記深度バッファとに基づいて、照明状態が確定するシェーディング点を特定する特定工程と、
前記シェーディング点群から、前記特定工程において照明状態が確定したシェーディング点を除外する除外工程と、
前記除外工程における除外後のシェーディング点群の各々について、前記光源からの投影において前記シーンに配置される描画オブジェクトに起因する照明状態を判定する判定工程と、
前記照明状態が確定したシェーディング点と、前記判定工程において照明状態が判定されたシェーディング点とに基づいて、前記視点からの投影における前記影情報を生成する第２の生成工程と、
前記第２の生成工程において生成された前記影情報に基づいて、前記視点からの投影において前記シーンに配置される描画オブジェクトに影を付して描画する描画工程と、
を有する描画方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、記録媒体、及び影描画方法に関し、特に３次元シーンの描画における影描画技術に関する。
【背景技術】
【０００２】
レイトレーシングのような非リアルタイム演算を行うことなく、高精細なハードシャドウを高速に描画する技術がある（非特許文献１）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】クリス・ワイマン（Chris Wyman）、外２名著、"Frustum-Traced Raster Shadows: Revisiting Irregular Z-Buffers"、i3D 2015 ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games、2015年2月27日
【発明の概要】
【発明が解決しようとする課題】
【０００４】
非特許文献１の技術（Frustum Traced Shadows）では、視点情報に基づくシーンの描画に先立って、各ピクセルに描画される描画オブジェクト（シェーディング点）に影が生じるか否かを判定した可視性マスク（visibility mask）を生成している。より詳しくは、視点からシーンを捉える視点空間（eye-space）について深度バッファを生成し、該深度バッファに基づき特定されるシェーディング点を光源からシーンを捉える光源空間（light-space）に変換することで生成した２次元テクスチャ（irregular z-buffer）に基づいて、影が生じるか否かの判定が行われる。ここで、irregular z-bufferは、光源から観たシェーディング点の情報をグリッドの対応するセルに格納するデータ構造であり、セルに対応する空間に複数のシェーディング点が存在する場合には、それらをリンクリストとして格納する。
【０００５】
Frustum Traced Shadowsでは、シェーディング点の全てについて、シーンに存在する描画オブジェクトのポリゴン（三角形）の、光源空間に係るピクセルシェーダを実行し、該ポリゴンによってシェーディング点への光線が遮られるのであれば、該シェーディング点に影が生じるものとして判定する。より詳しくは、ポリゴンに光源から照射される光線の方向の長さを持たせることで形成される三角柱の空間（frustum）に、各シェーディング点が含まれるかを判定することで、影が生じるか否かの判定が行われる。このFrustumとシェーディング点との交差判定をFrustum Tracingという。
【０００６】
一方で、Frustum Tracingを用いた影が生じるか否かの判定は、シェーディング点よりも光源寄りに存在するポリゴンについてのみ行えればよいものであるため、シーンに存在する全てのポリゴンに行う必要はない。このため、非特許文献１の技術では、判定にかかる演算量を低減すべく、irregular z-bufferに格納されている、図２（ａ）に示されるような、光源２００から最も遠方のシェーディング点２０１の深度値を上限として定め、該深度値よりも手前にあるポリゴンとirregular z-bufferに含まれる全シェーディング点と、を対象として判定を行なっていた。換言すれば、光源空間のirregular z-bufferの各セルについて、最奥のシェーディング点２０１の深度値をもって、判定対象とするポリゴンのカリング（depth culling）を行い、演算量の低減を行なっていた。
【０００７】
しかしながら、非特許文献１のようなdepth cullingの手法は、図２（ａ）のような最奥のシェーディング点よりも奥に存在する描画オブジェクトが多いシーンでは好適な演算量の低減が見込めるが、図２（ｂ）のような最奥のシェーディング点２０１よりも手前に存在する描画オブジェクト２０２が多いシーンでは演算量の低減が見込めない可能性があった。即ち、Frustum Tracingにおけるシェーディング点に影が生じるか否かの処理は、シェーディング点の数に対し、カリング後のポリゴンについて起動するピクセルシェーダの数を乗じた分の演算が必要となるため、上記のようなシーンでは、高速化が困難であった。
【０００８】
本発明の少なくとも１つの実施形態は、上述の問題点に鑑みてなされたものであり、好適な精度のハードシャドウの描画に要する演算量及び演算時間を低減するプログラム、記録媒体及び描画方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
前述の目的を達成するために、本発明の少なくとも１つの実施形態に係るプログラムは、コンピュータに、シーンに配置される描画オブジェクトについて、影が生じるか否かを示す影情報を生成させるプログラムであって、シーンを描画する視点の情報に基づき、該視点からの投影において描画されるスクリーンの各ピクセルについて、影が生じるか否かを判定するシェーディング点を設定する処理と、シーンについて定義される光源を示す光源情報とシーンに配置される描画オブジェクトの情報とに基づいて、光源からの投影の２次元テクスチャである、シーンに配置される描画オブジェクトの深度を示す深度バッファを生成する処理と、設定されたシェーディング点群と生成された深度バッファとに基づいて、照明状態が確定するシェーディング点を特定する処理と、シェーディング点群から、照明状態が確定したシェーディング点を除外する処理と、除外後のシェーディング点群の各々について、光源からの投影においてシーンに配置される描画オブジェクトに起因する照明状態を判定する処理と、照明状態が確定したシェーディング点と、照明状態が判定されたシェーディング点とに基づいて、視点からの投影における影情報を生成する処理と、を有する。
【発明の効果】
【００１０】
このような構成により本発明の少なくとも１つの実施形態によれば、好適な精度のハードシャドウの描画に要する演算量及び演算時間を低減することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態及び変形例に係るＰＣ１００の機能構成を示したブロック図
【図２】従来技術及び本発明の課題を説明するための図
【図３】従来技術の影描画を説明するための図
【図４】本発明の実施形態及び変形例に係る第１の前処理及びカリング処理を説明するための図
【図５】本発明の実施形態及び変形例に係る第１の前処理及びカリング処理を説明するための別の図
【図６】本発明の実施形態１に係るＰＣ１００で実行される、画面生成処理を例示したフローチャート
【図７】本発明の実施形態２及び変形例に係る第２の前処理及びカリング処理を説明するための図
【図８】本発明の実施形態２及び変形例に係る第２の前処理及びカリング処理を説明するための別の図
【図９】本発明の実施形態２に係るＰＣ１００で実行される、画面生成処理を例示したフローチャート
【図１０】本発明の実施形態及び変形例に係る第１の前処理をハードウェア実装する例を説明するための図
【発明を実施するための形態】
【００１２】
［実施形態１］
以下、本発明の例示的な実施形態について、図面を参照して詳細に説明する。なお、以下に説明する一実施形態は、描画方法を実現するコンピュータの一例としての、シーンに配置される描画オブジェクトに影が生じるか否かを示す影情報を生成し、該影情報を用いてシーンの描画を行うＰＣに、本発明を適用した例を説明する。しかし、本発明は、影情報を生成することが可能な任意の機器に適用可能である。
【００１３】
また、本明細書において「影情報」とは、視点からの投影において描画されるスクリーンの各ピクセルに、ハードシャドウ（影）を生じさせるか否かを示した２次元テクスチャであり、各テクセルがシェーディング点と対応するものとして説明する。しかしながら、本発明の実施はこれに限られるものではなく、影情報はスクリーンの各ピクセルに影を生じさせるか否かを判別可能に構成された情報であれば、２次元テクスチャの態様である必要はない。
【００１４】
《ＰＣ１００の構成》
図１は、本発明の実施形態に係るＰＣ１００の機能構成を示すブロック図である。
【００１５】
制御部１０１は、例えばＣＰＵ等であり、ＰＣ１００が有する各ブロックの動作を制御する。制御部１０１は、記録媒体１０２に記憶されている各ブロックの動作プログラムを読み出し、メモリ１０３に展開して実行することにより各ブロックの動作を制御する。
【００１６】
記録媒体１０２は、例えば書き換え可能なＲＯＭやＨＤＤ、あるいは所定の光学ドライブに装填されることにより読み取り可能になる光学メディア等の着脱可能な記録媒体を含む、恒久的にデータを保持可能に構成された不揮発性の記憶装置である。記録媒体１０２は、ＰＣ１００が有する各ブロックの動作プログラムに加え、各ブロックの動作において必要なパラメータ、及び影描画を伴うアプリケーション（描画アプリケーション）のデータやプログラム等を格納する。ここで、描画アプリケーションは、影情報の生成を行い、シーンに配置された描画オブジェクトを視点について描画した画面を生成する際に、該影情報に基づいて影の適用を行う処理を伴うアプリケーションである。
【００１７】
メモリ１０３は、例えばＲＡＭ等の揮発性の記憶装置である。メモリ１０３は、各ブロックの動作プログラムの展開領域としてだけでなく、各ブロックの動作において出力された中間データ等を一時的に記憶する格納領域として用いられる。
【００１８】
前処理部１０４は、本発明に係る影描画に際し、シーンに定義される光源からの投影において、該シーンに配置される描画オブジェクトについての影判定用深度バッファを生成する第１の前処理を行う。詳細は後述するが、本実施形態のＰＣ１００では、後述の判定部１０６において、Frustum Tracingを用いて各シェーディング点に影が生じるか否かの判定を行う。一方で、上述したように非特許文献１に記載の手法で行うFrustum Tracingは、シーンにおける描画オブジェクトの配置や視点の設定によっては演算量が増大し得る。このため、本実施形態の描画アプリケーションでは、本前処理部１０４によって深度バッファを生成することで、そもそもFrustum Tracingの対象としなくてもよいシェーディング点を除外し、対象数を低減することを実現する。
【００１９】
カリング部１０５は、前処理部１０４により生成された影判定用深度バッファに基づき、上述した通り、スクリーンの全ピクセルの各々について定められたシェーディング点群のうちから、Frustum Tracingの対象としないシェーディング点を除外するカリング処理を行う。
【００２０】
判定部１０６は、カリング部１０５によるカリング後のシェーディング点群の各々について、Frustum Tracingを行い、影が生じるか否かの判定を行う。
【００２１】
生成部１０７は、カリング部１０５によるカリング結果及び判定部１０６による判定結果に基づき、影情報の生成を行う。当該影情報は、定められた視点についてシーンを描画する際に参照され、スクリーンの各ピクセルのピクセルシェーダにおいて、影を反映した色変化を生じさせるかの判断に用いられる。上述したように、影情報は、視点からの投影において、各シェーディング点にハードシャドウが生じるか否かを示す２次元テクスチャであり、描画する画面と同一の画素数を有する。
【００２２】
描画部１０８は、例えばＧＰＵ等のゲーム画面に係る描画処理を行う描画装置である。描画部１０８は、ゲームに係る処理の結果生成された描画命令に応じてゲーム画面の描画を行う。また、ＧＰＵは複数処理の並行演算処理能力に長けているため、描画部１０８は前処理部１０４、カリング部１０５、判定部１０６、生成部１０７及び制御部１０１の少なくともいずれかが実行する処理を代替して行ってもよい。
【００２３】
表示制御処理部１０９は、描画部１０８により描画されたスクリーン（画面）を、ＰＣ１００に接続された表示装置に所定の頻度（フレームレート）で出力する表示制御を行う。表示装置は、ＰＣ１００に外部接続するものであってもよいし、ＰＣ１００と同一の筐体に内蔵されるものであってもよい。
【００２４】
操作入力部１１０は、例えばアナログスティックやボタン、キーボード、マウス、タッチ検出センサ等の、ＰＣ１００が有する操作入力を行うためのユーザインタフェースである。操作入力部１１０は、なされた操作入力を検出すると該操作入力を識別するための情報を制御部１０１に伝送する。本実施形態のＰＣ１００では、操作入力部１０８により受け付けられた操作入力に応じて、表示出力される画面の描画内容が変化し得るため、毎フレームの画面描画に際し、操作入力に応じた各種処理がなされる。本実施形態では簡単のため、操作入力部１１０は、シーンを描画する視点の移動に係る操作入力を受け付けるものとする。
【００２５】
《影情報の生成》
次に、本実施形態の描画アプリケーションにおいて、画面の描画に際して生成される影情報の詳細について説明する。
【００２６】
〈第１の前処理（Depth Prepass）〉
上述したように、本実施形態の描画アプリケーションでは、Frustum Tracingに係る演算量を低減すべく、前処理部１０４が、本発明の第１の深度バッファとしての、光源からの投影の２次元テクスチャである影判定用深度バッファを生成する。影判定用深度バッファの生成は、光源からの投影において、該深度バッファの各テクセルについて、光源からシーンに配置される描画オブジェクトのポリゴンまでの深度値を導出し、格納する。
【００２７】
ところで、従来のシャドウマップの生成において参照される、光源からの投影の深度バッファでは、光源から該テクセルの中心に向かうレイ（光線）をキャストした際に、該レイが最初に交差するポリゴンまでの深度値が、各テクセルに格納される。しかしながら、このような深度バッファは、Frustum Traced Shadowsが解決しようとしている通り、図３に示されるような、光源からの投影のテクセルの範囲に含まれるシェーディング点３０１〜３０３のうち、厳密にはポリゴン３００による影３０４が生じないシェーディング点３０１についても影が生じるものとして判断されることになるため、視点からの投影の画面を描画した場合に、ハードシャドウにアーティファクトが発生し得る。
【００２８】
このため、非特許文献１のFrustum Tracingでは、光源からの投影において、図４に示されるような光源と各ポリゴンとで規定される空間範囲（Frustum）に、各シェーディング点が含まれるか否かを判定している。ここで、図４（ａ）の例では光源は平行光源（directional light）であり、光源からの投影におけるポリゴン４０１の正射影４０２を断面とする三角柱４０３で規定される空間範囲について、シェーディング点が含まれるか否かの判定が行われる。
【００２９】
即ち、非特許文献１の手法では、光源からの投影に係る２次元テクスチャ（Irregular z-buffer）の各テクセルに含まれるシェーディング点群に、該テクセルに係る空間範囲を部分的に遮断するポリゴンの存在によって、影の発生有無に違いが生じることが考慮されている。このため、光源からの投影において、各テクセルに対応するポリゴンについてのピクセルシェーダで上記判定をシェーディング点ごとに行う。ここで、テクセルに係る空間範囲を遮断するとは、該範囲に進入してポリゴンが配置された場合に、該ポリゴンよりも奥に存在する領域に対して、光源からの光線が到達しなくなることを示しているものとする。
【００３０】
一方で、上述したような光源からの投影の１テクセルの範囲に含まれるシェーディング点の全てについて、より光源に近い位置に存在するポリゴンによって影が生じると判断することが可能なケースも存在する。即ち、図４（ｂ）のようにシェーディング点との比較対象であるポリゴン４１１が、光源と１テクセル４１２とで定まる空間４１３を完全に遮断しているのであれば、該テクセル４１２に含まれるシェーディング点（より詳しくはポリゴン４１１よりも光源から遠離しているシェーディング点４１４）については、Frustum Tracingの判定を行わずとも、影が生じるものと照明状態を判定することができる。
【００３１】
従って、本実施形態の描画アプリケーションにおいて前処理部１０４が生成する影判定用深度バッファは、シーンに配置される描画オブジェクトのポリゴンによって完全に遮断されるテクセルについてのみ、該ポリゴンに係る深度値を格納するように構成される。このとき、１つのテクセルについて、光源と該テクセルとで定まる空間を完全に遮断するポリゴンが複数存在する場合、このうちの光源に最も近接しているポリゴンに係る深度値が格納される。また、完全に遮断するポリゴンが存在しないその他のテクセルについては、深度値の初期値（例えば最奥を示す値）が入力されればよい。
【００３２】
より詳しくは、前処理部１０４が行う第１の前処理では、シーンに配置される描画オブジェクトのポリゴンが、光源からの投影における影判定用深度バッファのテクセルと光源とで定まる空間を完全に遮断する場合、次のように該テクセルの深度値が確定される。例えば図５に示されるように、光源とテクセル５００で定まる空間範囲５０１が存在し、この空間範囲に対して光源から照射される光線をポリゴン５０２が遮るよう配置される場合について考える。
【００３３】
本実施形態ではシーンに提供される光源は平行光源であり、空間範囲５０１は、光線方向に延びる四角柱（直方体）であるものとする。前処理部１０４は、１つのテクセル５００についての空間範囲を規定するため、光源から該テクセル５００の四隅に向かう光線（レイ）５０３ａ〜ｄをキャストする。このとき、ポリゴン５０２が空間範囲５０１を完全に遮断しているのであれば、４つのレイ５０３ａ〜ｄはポリゴン５０２の面と交点５０４ａ〜ｄを有する。本実施形態では、該ポリゴン５０２上の、テクセル５００に係る範囲にシェーディング点が存在した場合であっても正しく判定が可能なよう、これら交点５０４ａ〜ｄのうちの最奥の交点（図では５０４ｃ）の深度値を、テクセル５００の深度値として影判定用深度バッファに格納する。
【００３４】
従って、第１の前処理により生成された影判定用深度バッファは、対応する空間範囲を完全に遮断するポリゴンが存在するテクセルには、該ポリゴン上の交点に基づく深度値が格納されている。また、対応する空間範囲にポリゴンが存在しない、またはあったとしても空間範囲を完全には遮断しないテクセルには、影判定用深度バッファ初期化時の初期値（最奥）が格納されている。
【００３５】
〈シェーディング点のカリング〉
次に、このように生成された影判定用深度バッファに基づき、Frustum Tracingによる判定を行う必要がないシェーディング点のカリングを行う。
【００３６】
より詳しくは、まず描画部１０８はカリングに先立ち、視点からの投影の深度バッファが取得され、視点情報及び該深度バッファに基づいて、描画する画面に係るシェーディング点群を決定する。ここで、視点からの投影の深度バッファは、生成する画面と同一の画角を捉え、同一の画素数を有して構成される２次元テクスチャであってよく、例えば遅延レンダリング（Deferred Rendering）の描画プリパスにおいて生成されるＧバッファから取得されるものであってよい。深度バッファでは、視点からの距離（深度値）が取得可能であるため、視点情報に基づき、描画する画面の、各テクセルと対応する位置に存在する描画オブジェクトについて定義するシェーディング点の３次元座標を特定することが可能である。
【００３７】
なお、本実施形態では画面描画に遅延レンダリングが用いられるものとし、生成されたＧバッファに含まれる深度バッファをシェーディング点群の定義に流用するものとして説明するが、本発明の実施はこれに限られるものではない。即ち、前方レンダリング（Forward Rendering）を用いて画面描画が行われる態様であっても、深度バッファを描画に先行して生成すれば、同様に適用可能である。また、後述の影情報が生成された後は、視点や光源が動かないのであれば当該影情報は再利用可能であり、深度バッファの生成、シェーディング点の定義は必ずしも毎フレーム実行が必須の処理ではない。
【００３８】
また描画部１０８は、シェーディング点群の３次元座標を特定すると、これを光源からの投影での２次元座標に変換する。即ち、上述した影判定用深度バッファと同じ２次元座標系のいずれの位置（テクセル）に各シェーディング点が配置されるかが導出される。当該変換において、描画部１０８は、各シェーディング点と光源との距離（深度値）も導出するものとする。
【００３９】
カリング部１０５は、このように光源からの投影の２次元座標系及び深度値に変換されたシェーディング点群を、前処理部１０４により生成された影判定用深度バッファに基づいてカリングする。即ち、図４（ｂ）について上述したように、光源からの投影において、テクセルに係る空間を遮断するポリゴンが存在するのであれば、該ポリゴンよりも奥に存在するシェーディング点については、該ポリゴンによって確実に影が生じることになる。このため、該当のシェーディング点については、Frustum Tracingを行うまでもなく照明状態が確定することになる。
【００４０】
従って、カリング部１０５は、影判定用深度バッファにおいて初期値以外の深度値が格納されているテクセルが存在している場合、座標変換により該テクセルに係る空間に存在することが判明したシェーディング点を、その深度値に応じてFrustum Tracingの対象とするか否かを決定する。より詳しくは、該当のシェーディング点の深度値と、影判定用深度バッファのテクセルの深度値とを比較し、前者が後者よりも光源から奥の値を示す場合に、カリング部１０５は該シェーディング点をFrustum Tracingの対象から除外（カリング）する。
【００４１】
描画部１０８は、このようなカリング処理がなされた後、カリング後のシェーディング点に基づいて、影判定用深度バッファのテクセルごとに、該テクセルに対応付けられるシェーディング点のリンクリストを生成する。該リンクリストは、非特許文献１におけるirregular z-bufferと対応するが、深度に基づくシェーディング点のカリングを行っている点で内容が異なっている。
【００４２】
また生成部１０７は、カリングを行ったシェーディング点については、影が生じることが確定したため、影情報の対応するテクセルに影が生じることを示す値を格納する。本実施形態では影情報は、ハードシャドウを描画するピクセルを特定するための情報であるため、各テクセルに格納される情報は論理型の情報であってよく、初期値では影が生じないことを示す情報が格納されているものとする。
【００４３】
〈Frustum Tracingによる照明状態の判定〉
判定部１０６は、カリング後のシェーディング点について、シーンに配置される描画オブジェクトのポリゴンによる影が生じるか否かの判定を、Frustum Tracingを用いて行う。詳細は省略するが、判定部１０６は、シーンに配置される描画オブジェクトのポリゴンの各々について、該ポリゴンによって空間の少なくとも一部が遮断され得る影判定用深度バッファのテクセルを特定する。そして判定部１０６は、該テクセルに対応するシェーディング点のリンクリストに含まれるシェーディング点の各々について、対象ポリゴンとの間でFrustum Tracingを行い、影が生じるか否かの判定を行う。
【００４４】
また、本発明に必須の構成ではないが、演算量を低減するため、影判定用深度バッファのテクセルのうちの、描画オブジェクトのポリゴンにより完全に遮断されると判断されていないテクセルについては、非特許文献１と同様に最遠のシェーディング点の深度値が格納されてもよい。この場合、影判定用深度バッファを参照して、テクセルに係るシェーディング点との判定を行うポリゴンの深度値が、該テクセルの深度値よりも奥を示す場合には、該ポリゴンについてはFrustum Tracingを行わないものとしてよい。
【００４５】
〈影情報の生成〉
各シェーディング点について判定部１０６による判定がなされると、生成部１０７は判定結果に応じて影情報の更新を行う。影情報の各テクセルの値は、いずれかのポリゴンについて影が生じるものと判定された場合に、影が生じていることを示す値に変更され、以降は他のポリゴンについて影が生じていると判定されても値の更新は行われないものとしてもよい。換言すれば、描画オブジェクトのポリゴンごとにFrustum Tracingを行う過程において、既に影が生じるものとして判定されたシェーディング点は、判定対象から除外するものとしてもよい。
【００４６】
このように生成された影情報は、視点からの投影にてシーンの描画オブジェクトを描画して画面を生成する際に参照され、影が生じるピクセルについては、該ピクセルに係るピクセルシェーダにおいて影を反映した色値で描画オブジェクトの描画がなされる。
【００４７】
なお、本実施形態では、カリングされたシェーディング点に係るテクセルの影情報は、カリング部１０５における処理の時点で更新されるものとして説明したが、更新のタイミングはこれに限られるものではない。即ち、影情報は、視点についてシーンを描画する処理が行われる際に参照できればよいため、Frustum Tracingによる判定が行われた際に、カリングされたシェーディング点についての影情報の更新も行われて生成されるものとしてもよい。
【００４８】
《画面生成処理》
上述の構成をもつ本実施形態のＰＣ１００にて、描画アプリケーションに係り実行される画面生成処理について、図６のフローチャートを用いて具体的な処理を説明する。該フローチャートに対応する処理は、制御部１０１が、例えば記録媒体１０２に記憶されている描画アプリケーションのプログラムを読み出し、メモリ１０３に展開して実行することにより実現することができる。なお、本画面生成処理は、例えば描画アプリケーションが実行された際に開始されるものとして説明する。
【００４９】
Ｓ６０１で、制御部１０１は、シーンを描画する視点の情報を決定する。描画する視点は、上述したようになされた操作入力に応じて変更されるものであってよく、制御部１０１は、例えばなされた操作入力に応じて視点の情報を決定すればよい。
【００５０】
Ｓ６０２で、前処理部１０４は、シーンに配置される描画オブジェクトのポリゴンの情報に基づいて、影判定用深度バッファを生成する第１の前処理を実行する。即ち、各ポリゴンについて、光源からテクセルの四隅に向かうレイをキャストし、全てのレイがポリゴンに交差するのであれば、このうちの最奥の交点の深度値を影判定用深度バッファに格納する。上述した通り、本ステップにおける影判定用深度バッファへの深度値の格納は、光源とテクセルとで定まる空間を完全に遮断するポリゴンが存在するテクセルについてのみ行われる。
【００５１】
Ｓ６０３で、描画部１０８は、視点について描画する範囲の深度バッファを生成し、シェーディング点群を決定する。このとき、描画部１０８は視点情報と深度情報とに基づいて、各シェーディング点の３次元位置を示す位置情報を導出する。また描画部１０８は、導出したシェーディング点群の位置情報を、光源からの投影の座標系（光源座標系）に変換する。
【００５２】
Ｓ６０４で、カリング部１０５は、光源座標系に変換されたシェーディング点群の位置情報と影判定用深度バッファとに基づいて、影が生じることが確定しているシェーディング点を除外するカリング処理を行う。即ち、カリング部１０５は、第１の前処理において影判定用深度バッファに深度値が格納されたテクセルの範囲（光源からの投影の２次元空間）に変換後の位置情報が含まれるシェーディング点について、深度値の比較を行う。そしてカリング部１０５は、影判定用深度バッファに格納された深度値よりも奥の深度値を有する（光源から遠離する）シェーディング点をカリングし、Frustum Tracingの判定対象から除外する。
【００５３】
Ｓ６０５で、生成部１０７は、Ｓ６０４においてカリングされたシェーディング点に対応する影情報のテクセルを、影が生じることを示す情報に更新する。
【００５４】
Ｓ６０６で、判定部１０６は、Ｓ６０４におけるカリング後に残ったシェーディング点について、シーンに配置された描画オブジェクトのポリゴンによる影が生じるか否かの判定をFrustum Tracingを用いて行う。
【００５５】
Ｓ６０７で、生成部１０７は、Ｓ６０６において行われた判定結果に基づき、影が生じると判定されたシェーディングに対応する影情報のテクセルを、影が生じることを示す情報に更新する。
【００５６】
Ｓ６０８で、描画部１０８は、視点情報と影情報とに基づいてシーンの描画処理を行い、描画アプリケーションにより提供される画面を生成する。本ステップの描画処理では、影情報において影が生じることを示す情報が格納されているテクセルに対応するピクセルには、該当の描画オブジェクトのピクセルシェーダにおいて、ハードシャドウに応じた状態となるよう色情報の変更が行われる。生成された画面は、表示制御処理部１０９に伝送され、描画アプリケーションの提供画面として接続された表示装置（不図示）に送出され、表示される。
【００５７】
このようにすることで、判定が不要なシェーディング点をFrustum Tracingの対象から除外することができるため、非特許文献１の手法に比べて演算量を低減し、シーンに依らず好適な精細なハードシャドウを適用した画面を生成することができる。
【００５８】
なお、本実施形態ではソフトウェアとして本発明の手法を実装する例について説明したが、本発明の実施はこれに限られるものではない。上述したように、前処理部１０４、カリング部１０５、判定部１０６、生成部１０７の処理はハードウェア（ＧＰＵ）を用いて行われるものであってもよい。
【００５９】
例えば前処理部１０４における影判定用深度バッファの生成において、テクセルがポリゴンによって完全に遮断されているか否かの判定処理は、ＧＰＵのＨＷラスタライザに固定機能として組み込まれていることがある。この場合、ピクセルシェーダでレイキャストを行わずとも遮断の判定が可能である。また、深度値をピクセルシェーダを用いて導出すると、演算コストが高いため、ＧＰＵのＨＷラスタライザのslope scaled depth biasを利用して導出させるものとしてもよい。例えば図１０のような態様（光源から観て最近が深度値１で、最奥が深度値０の態様）においてslope scaled depth biasの値をｄとしたとき、ＨＷラスタライザが出力する深度値は以下の式の左辺となる。
2019121193.tif 000003
右辺はレイキャストによって得られる深度値であり、この不等式を満たすｄを用いて影判定用深度バッファに格納する深度値を得るものとしてもよい。この不等式を満たすｄとして例えばｄ＝１がある。
【００６０】
［実施形態２］
上述した実施形態１では、光源からの投影にて生成された影判定用深度バッファのテクセルについて、光源と該テクセルとで定まる空間を完全に遮断するポリゴンが存在する場合に、該ポリゴンよりも奥に存在するシェーディング点には必ず影が生じるとして、Frustum Tracingの判定対象から除外する態様について説明した。即ち、光源と描画オブジェクトとの関係に基づき、光線を遮断することが確定するシェーディング点を特定して判定対象から除外することで、演算量を低減させる態様について説明した。本実施形態では、描画に採用される方式や描画するシーンを考慮して、照明状態が確定するシェーディング点をさらに特定し、これを判定対象から除外することで演算量を低減させる態様について説明する。
【００６１】
《照明状態を確定可能なシーン》
上述した実施形態では、カリング後のシェーディング点を判定対象として、シーンに配置される描画オブジェクトのポリゴンとシェーディング点とについて、判定部１０６がFrustum Tracingを行って影が生じるか否かの判定を行うものとして説明した。ところで、図７（ａ）に示されるように、シーンに配置される描画オブジェクトのうち、閉じた（全周の面が形成された）３次元モデルが存在する場合、光源からの投影において、奥行き方向に１つの描画オブジェクトの前面（front-face）と背面（back-face）が並ぶことになる。
【００６２】
このように、１つの光線（テクセル）上に同一の描画オブジェクトの複数のポリゴン（前面と背面）が存在する場合、該オブジェクトによる影が生じるかを判定する、他の描画オブジェクト上のシェーディング点について、判定部１０６は各ポリゴンのピクセルシェーダを実行するため、前面と背面の双方について判定を行うことになる。しかしながら、閉じた描画オブジェクトであれば、照明条件にもよるが、いずれか一方の面のみについて判定を行っても結果への影響は少ない。故に、影描画に係る処理において、前面と背面のいずれかをカリングして処理対象から除外する、front-face culling（図７（ｂ））やback-face culling（図７（ｃ））が従来使用されている。
【００６３】
本実施形態では、このうち前面のポリゴンをカリングするfront-face cullingが使用される場合に、照明状態を判定するための新たな深度バッファを生成し、これに基づいて、照明状態が確定するシェーディング点をさらにカリングする。
【００６４】
front-face cullingを用いるか否かは、主として描画されるシーンの条件に応じて定まる。例えば、屋外シーンのように、光源が上空に存在し、配置される描画オブジェクトの大半が上向きの面を有するようなシーンでは、特に閉じていない地面などを演算対象から除外できるため、front-face cullingの採用が効果的である。故に、front-face cullingが採用されるようなシーンでは、カリングされた前面については所謂「日向」であり、影が生じないものとして照明状態が確定する可能性がある。
【００６５】
従って、本実施形態の描画アプリケーションでは、front-face cullingを採用して影が生じるか否かの判断を行う態様において、そもそも影が生じないことが確定するシェーディングをさらにカリングした後に、判定部１０６における判定を行う態様について説明する。
【００６６】
《影情報の生成》
本実施形態では、実施形態１において説明した影判定用深度バッファに加えて、本発明の第２の深度バッファとしての日向判定用深度バッファを生成し、シェーディング点のカリングを行う。このため、以下では、影情報の生成にあたり、実施形態２に特有の処理について説明する。
【００６７】
〈第２の前処理（Depth Prepass）〉
第１の前処理では影判定用深度バッファを生成したが、第２の前処理では、光源からの投影の２次元テクスチャである日向判定用深度バッファを生成する。本実施形態では、簡単のため、日向判定用深度バッファの生成は前処理部１０４が行うものとして説明するが、本発明の実施はこれに限られるものではなく、影判定用深度バッファとは異なる構成により行われるものであってもよい。
【００６８】
図７（ｂ）に示したように、front-face cullingを採用すれば、地面オブジェクト７０１のように閉じていない描画オブジェクトは、基本的には他の描画オブジェクト上に定義されるシェーディング点に対して影を生じさせるポリゴンから除外される。一方で、地面オブジェクト７０１よりも光源寄りに配置される上方オブジェクト７０２については背面のポリゴンはカリングされずに残る。即ち、該背面のポリゴンは、地面オブジェクト７０１上に定義されるシェーディング点に対して影を生じさせ得る。
【００６９】
これらを考慮すると、シーンに配置される描画オブジェクトのポリゴンのうち、front-face culling後に残るポリゴンであって、光線方向において光源に最も近接しているポリゴンを基準とすることで、必ず日向となる（影が生じない）シェーディング点を特定することができる。即ち、図７（ｂ）の例でば、上方オブジェクト７０２のカリングされた前面ポリゴン上に定義されるシェーディング点７０３は、日向であることが確定する。つまり、シーンに配置される描画オブジェクトをfront-face cullingした後に存在する背面ポリゴンが、光源とテクセルとで定まる空間の少なくとも一部を遮断しているのであれば、該背面ポリゴンよりも手前に定義されるシェーディング点については、Frustum Tracingの判定を行わずとも、影が生じないと照明状態を判定することができる。
【００７０】
従って、本実施形態の描画アプリケーションでは前処理部１０４は、シーンに配置される描画オブジェクトのfront-face culling後のポリゴンに基づいて、日向判定用深度バッファをさらに生成する。より詳しくは、前処理部１０４が行う第２の前処理では、シーンに配置される描画オブジェクトの背面ポリゴンが、光源からの投影における日向判定用深度バッファのテクセルと光源とで定まる空間の少なくとも一部を遮断する場合、次のように該テクセルの深度値が確定され、日向判定用深度バッファの生成が行われる。
【００７１】
例えば図８（ａ）に示されるように、光源とテクセル８００ａ〜ｃで定まる空間範囲８０１ａ〜ｃが存在し、この空間範囲に対して光源から照射される光線の少なくとも一部を、オブジェクト８０２ａ〜ｃの背面のポリゴン群が遮るよう配置される場合について考える。なお、シーンに提供される光源は、実施形態１と同様に平行光源であるものとし、空間範囲８０１の各々は同様に光線方向に延びる四角柱であり、図８（ｂ）に示されるように、光源から各テクセルの四隅に向かうレイ８０３ａ〜ｄをキャストすることで規定されるものとする。
【００７２】
日向判定用深度バッファのテクセルの深度値は、影判定用深度バッファとは異なり、ポリゴンが空間範囲８０１を完全に遮断していることを要件としない。これは、日向判定用深度バッファが、確実に日向であるシェーディング点を特定可能であればよいことに依る。換言すれば、ある描画オブジェクトの背面が空間範囲８０１の少なくとも一部を遮断し、かつ光源に最も近接しているのであれば、該オブジェクトの前面に定義されたシェーディング点については、日向である（影が生じない）と照明状態を確定できるからである。
【００７３】
従って、前処理部１０４は日向判定用深度バッファの生成において、各テクセルに係る空間に配置されている背面を形成するポリゴンに対してレイをキャストし、その交点の深度値を格納する。より詳しくは、背面に定義されるシェーディング点の照明状態は確定するものではないため、前処理部１０４は、４つの交点のうちの光源に最も近接している交点の深度値を、テクセルの深度値として日向判定用深度バッファに格納する。
【００７４】
ここで、日向判定用深度バッファに深度値を格納するテクセルは、該テクセルに係る空間の少なくとも一部を背面のポリゴンが遮断していることを条件としているため、光源に対するポリゴンの正射影がテクセルよりも小さい面積を有する場合、４つの交点が得られない。このため、前処理部１０４は、日向判定用深度バッファについての深度値を導出する際には、ポリゴンを含む平面（ポリゴンを延長して形成される平面）に対してレイをキャストして４つの交点を特定すればよい。このとき、深度値は、テクセルの空間内に含まれる背面のポリゴンが有する最大の深度値（光源が１、最奥が０にて深度が定義される態様）に設定されるものとする。
【００７５】
例えば、図８（ａ）の例において光源とテクセル８００ｂとで定まる空間範囲８０１ｂには、オブジェクト８０２ｂの背面の一部のポリゴンが含まれる。このとき、背面のポリゴンの各々について、該ポリゴンを延ばした平面と光源からキャストされたレイ８０３との交点を導出することで、結果的に交点８０４が光源に最も近接している交点となる。故に、前処理部１０４は、交点８０４の深度値をテクセル８００ｂの深度値として日向判定用深度バッファに格納する。
【００７６】
また例えば、光源とテクセル８００ｃとで定まる空間範囲８０１ｃには、オブジェクト８０２ｂの背面の一部のポリゴン、及びオブジェクト８０２ｃの背面の一部のポリゴンが含まれる。このとき、もっと光源に最も近接しているポリゴンはオブジェクト８０２ｃの背面に含まれる。オブジェクト８０２ｃの背面のポリゴンを延ばした平面に対して光源からキャストされたレイ８０３との交点を導出すると、背面のポリゴンが有する最大の深度値を超える位置となる。この場合、前処理部１０４は、点８０５の深度値をテクセル８００ｃの深度値として日向判定用深度バッファに格納してもよい。
【００７７】
このようにすることで、シェーディング点が日向であるものとしてより判断可能な深度値を日向判定用深度バッファに格納することができる。日向判定用深度バッファは影判定用深度バッファと同様に、front-face culling後の残りの背面のポリゴンが対応する空間内に存在するテクセルについてのみ、その光源に最も近接しているとする点の深度値を格納するものであってよく、背面のポリゴンが存在しないテクセルについては、初期値（例えば最奥）が格納されるものであってよい。
【００７８】
なお、front-face culling後に背面のポリゴンが存在しない領域についても、初期値として最奥の深度値が格納されているのであれば、必ず日向となるシェーディング点を特定することができ、Frustum Tracingに要する処理を低減することが可能である。
【００７９】
〈シェーディング点のカリング〉
本実施形態の描画アプリケーションにおいてカリング部１０５が行うシェーディング点のカリングは、実施形態１において影判定用深度バッファに基づいて行うカリングに加え、日向判定用深度バッファに基づいて行うカリングを含む。即ち、カリング部１０５は、影判定用深度バッファに基づいて、影が生じることが確定するシェーディング点をカリングするとともに、日向判定用深度バッファに基づいて、日向である（影が生じない）ことが確定するシェーディング点をカリングする。
【００８０】
日向判定用深度バッファのテクセルに格納されている深度値よりも、光源に近接する深度値を示すシェーディング点については、Frustum Tracingを行うまでもなく、照明状態が日向であることが確定する。従って、カリング部１０５は、日向判定用深度バッファにおいて初期値以外の深度値が格納されているテクセルが存在している場合、光源座標系への変換により、該テクセルに係る空間に存在することが判明したシェーディング点を、その深度値に応じてFrustum Tracingの対象とするか否かを決定する。より詳しくは、該当のシェーディング点の深度値と、日向判定用深度バッファのテクセルの深度値とを比較し、前者が後者よりも光源に近接している値を示す場合に、カリング部１０５は該シェーディング点をFrustum Tracingの対象から除外する。
【００８１】
従って、描画部１０８は、このような影判定用深度バッファ及び日向判定用深度バッファを用いたカリング処理がなされた後、カリング後のシェーディング点に基づいて、テクセルに対応付けられるシェーディング点のリンクリストを生成する。故に、本実施形態の描画アプリケーションで生成されるリンクリストは、実施形態１で生成される同リンクリストよりも、さらに影が生じないことが確定するシェーディング点のカリングを行っている点で内容が異なっている。
【００８２】
また生成部１０７は、日向判定用深度バッファに基づくカリングを行ったシェーディング点については、影が生じないことが確定したため、影情報の対応するテクセルに影が生じないことを示す値を格納する。実施形態１では、影情報の各テクセルは、影が生じないことを初期値とし、影が生じるか否かを示す論理型の情報を格納しているものとして説明したが、本実施形態では、格納する値は初期値と同じなので格納処理を省略することも可能である。あるいは、影情報は照明状態が確定した（影が生じることが確定した、影が生じないことが確定した）ことを示す論理型の情報をさらに関連付けて有する構成としてもよい。
【００８３】
《画面生成処理》
以下、本実施形態のＰＣ１００にて、描画アプリケーションに係り実行される画面生成処理について、図９のフローチャートを用いて具体的な処理を説明する。該フローチャートに対応する処理は、制御部１０１が、例えば記録媒体１０２に記憶されている描画アプリケーションのプログラムを読み出し、メモリ１０３に展開して実行することにより実現することができる。なお、本画面生成処理は、例えば描画アプリケーションが実行された際に開始されるものとして説明する。また本実施形態の画面生成処理において、実施形態１と同様の処理を行うステップには同一の参照番号を付して説明を省略し、以下では本実施形態の画面生成処理に特徴的な処理を行うステップの説明に留める。
【００８４】
Ｓ６０１において視点の情報が決定されると、制御部１０１はＳ９０１で、シーンの影描画についてfront-face cullingを用いるか否かを判断する。当該判断は、シーンについて予めデザイナ等により設定された情報を参照することにより行われるものであってもよいし、シーンの照明条件やシーンに配置される描画オブジェクトの属性（例えばオブジェクトの３次元モデルが閉じているか否か等）に基づいて行われるものであってもよい。制御部１０１は、シーンの影描画についてfront-face cullingを用いると判断した場合は処理をＳ９０２に移し、用いないと判断した場合は処理をＳ６０２に移す。
【００８５】
Ｓ９０２で、前処理部１０４は、シーンに配置される描画オブジェクトのポリゴンの情報に基づいて、影判定用深度バッファを生成する第１の前処理と、日向判定用深度バッファを生成する第２の前処理とを実行する。即ち、第１の前処理では、各ポリゴンについて、光源からテクセルの四隅に向かうレイをキャストし、全てのレイがポリゴンに交差するのであれば、このうちの最奥の交点の深度値を影判定用深度バッファに格納する。また第２の前処理では、front-face culling後の背面ポリゴンを含む平面について、光源からのテクセルの四隅に向かうレイをキャストし、全てのレイと該平面の交点のうちの光源に最も近接している交点の深度値を日向判定用深度バッファに格納する。
【００８６】
Ｓ６０３においてシェーディング点群の決定と光源座標系への変換がなされると、カリング部１０５はＳ９０３で、該変換されたシェーディング点群の位置情報と、影判定用深度バッファ及び日向判定用深度バッファとに基づいて、照明状態が確定しているシェーディング点を除外するカリング処理を行う。即ち、カリング部１０５は、第１の前処理において影判定用深度バッファに深度値が格納されたテクセルの範囲に変換後の位置情報が含まれるシェーディング点について、深度値の比較を行う。そしてカリング部１０５は、影判定用深度バッファに格納された深度値よりも奥の深度値を有する（光源から遠離する）シェーディング点をカリングし、Frustum Tracingの判定対象から除外する。
【００８７】
またカリング部１０５は、第２の前処理において日向判定用深度バッファに深度値が格納されたテクセルの範囲に変換後の位置情報が含まれるシェーディング点についても、深度値の比較を行う。そしてカリング部１０５は、日向判定用深度バッファに格納された深度値よりも手前の深度値を有する（光源に近接する）シェーディング点をカリングし、Frustum Tracingの判定対象から除外する。
【００８８】
このようにすることで、照明状態が確定するシェーディング点をさらに判別可能とし、シーンの影描画に採用されるカリング方式によっては、さらに好適に演算量を低減し、精細なハードシャドウを適用した画面を生成することができる。
【００８９】
［変形例］
上述した実施形態２では、影判定用深度バッファと日向判定用深度バッファの両方を用いて、Frustum Tracingの対象となるシェーディング点を削減する態様について説明した。しかしながら、シェーディング点を削減するとの観点では、いずれかの深度バッファを用いたカリング処理でもその効果は実現される。即ち、実施形態１のように影判定用深度バッファのみを用いてカリングを行っても、Frustum Tracingの対象となるシェーディング点は削減可能であるし、日向判定用深度バッファのみを用いてカリングを行っても同様である。
【００９０】
換言すれば、本発明は、シェーディング点の照明状態を、光源からの投影で生成した深度バッファに基づいて照明状態を特定し、シーンに配置される描画オブジェクトに起因する照明状態の判定対象から除外するものであればよく、深度バッファの生成基準や特定に使用する深度バッファの数等は上述した態様に限られるものではない。
【００９１】
［その他の実施形態］
本発明は上記実施の形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。また本発明に係る描画方法は、１以上のコンピュータに描画方法の各工程を実行させるプログラムによっても実現可能である。該プログラムは、コンピュータが読み取り可能な記録媒体に記録されることにより、あるいは電気通信回線を通じて、提供／配布することができる。
【符号の説明】
【００９２】
１００：ＰＣ、１０１：制御部、１０２：記録媒体、１０３：メモリ、１０４：前処理部、１０５：カリング部、１０６：判定部、１０７：生成部、１０８：描画部、１０９：表示制御処理部、１１０：操作入力部
【図１】
2019121193.tif 000004
【図２】
2019121193.tif 000005
【図３】
2019121193.tif 000006
【図４】
2019121193.tif 000007
【図５】
2019121193.tif 000008
【図６】
2019121193.tif 000009
【図７】
2019121193.tif 000010
【図８】
2019121193.tif 000011
【図９】
2019121193.tif 000012
【図１０】
2019121193.tif 000013
【手続補正書】
【提出日】平成31年2月5日(2019.2.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、シーンに配置される描画オブジェクトについての、影が生じるか否かを示す影情報を生成させるプログラムであって、
前記シーンを描画する視点の情報に基づき、該視点からの投影において描画されるスクリーンの各ピクセルについて、影が生じるか否かを判定するシェーディング点を設定する処理と、
前記シーンについて定義される光源を示す光源情報と前記シーンに配置される描画オブジェクトの情報とに基づいて、前記光源からの投影の２次元テクスチャである、前記シーンに配置される描画オブジェクトの深度を示す深度バッファを生成する処理と、
前記設定されたシェーディング点群と前記生成された深度バッファとに基づいて、照明状態が確定するシェーディング点を特定する処理と、
前記シェーディング点群から、前記照明状態が確定したシェーディング点を除外する処理と、
前記除外後のシェーディング点群の各々について、前記光源からの投影において前記シーンに配置される描画オブジェクトに起因する照明状態を判定する処理であって、前記光源と前記深度バッファの各テクセルとで定まる空間を部分的に遮断する描画オブジェクトに起因する、前記除外後のシェーディング点群の各々の照明状態を判定する処理と、
前記照明状態が確定したシェーディング点と、前記照明状態が判定されたシェーディング点とに基づいて、前記視点からの投影における前記影情報を生成する処理と、
を有するプログラム。
【請求項２】
前記深度バッファは、互いに深度値の導出基準が異なる第１の深度バッファ及び第２の深度バッファの少なくともいずれかを含む請求項１に記載のプログラム。
【請求項３】
前記深度バッファが前記第１の深度バッファである場合に、前記特定する処理において、影が生じることが確定するシェーディング点が特定され、
前記除外する処理において、前記影が生じることが確定したシェーディング点が除外される
請求項２に記載のプログラム。
【請求項４】
前記第１の深度バッファの１テクセルの深度値は、前記光源と該１テクセルとで定まる空間を完全に遮断する描画オブジェクトのうちの、光源に最も近接している描画オブジェクトに基づいて決定される請求項２または３に記載のプログラム。
【請求項５】
前記第１の深度バッファの１テクセルの深度値は、前記完全に遮断する描画オブジェクトが存在する場合に、前記光源から該１テクセルの四隅に向かう光線と該完全に遮断する描画オブジェクトの面との交点のうち、最奥の交点の深度値に決定される請求項４に記載のプログラム。
【請求項６】
前記特定する処理において、前記第１の深度バッファのテクセルに対応するシェーディング点のうち、前記光源からの深度が該テクセルの深度値よりも奥の値を示すシェーディング点について、照明状態が確定する請求項５に記載のプログラム。
【請求項７】
前記第１の深度バッファの１テクセルの深度値は、前記完全に遮断する描画オブジェクトが存在しない場合に、初期値に決定され、
前記特定する処理において、前記初期値を有する前記第１の深度バッファのテクセルに対応するシェーディング点については、照明状態は確定しない
請求項４乃至６のいずれか１項に記載のプログラム。
【請求項８】
前記深度バッファが前記第２の深度バッファである場合に、前記特定する処理において、影が生じないことが確定するシェーディング点が特定され、
前記除外する処理において、前記影が生じないことが確定したシェーディング点が除外される
請求項２乃至７のいずれか１項に記載のプログラム。
【請求項９】
前記第２の深度バッファの１テクセルの深度値は、前記光源と該１テクセルとで定まる空間の少なくとも一部を遮断する描画オブジェクトであって、影生成において前面カリングが行われる描画オブジェクトのうちの、光源に最も近接している描画オブジェクトに基づいて決定される請求項２乃至８のいずれか１項に記載のプログラム。
【請求項１０】
前記第２の深度バッファの１テクセルの深度値は、前記少なくとも一部を遮断する描画オブジェクトが存在する場合に、前記光源から該１テクセルの四隅に向かう光線と該少なくとも一部を遮断する描画オブジェクトのメントの背面との交点のうち、光源に最も近接している交点の深度値に決定される請求項９に記載のプログラム。
【請求項１１】
前記特定する処理において、前記第２の深度バッファのテクセルに対応するシェーディング点のうち、前記光源からの深度が該テクセルの深度値より手前の値を示すシェーディング点について、照明状態が確定する請求項１０に記載のプログラム。
【請求項１２】
前記第２の深度バッファの１テクセルの深度値は、前記少なくとも一部を遮断する描画オブジェクトが存在しない場合に、初期値に決定され、
前記特定する処理において、前記初期値を有する前記第２の深度バッファのテクセルに対応するシェーディング点については、照明状態は確定しない
請求項９乃至１１のいずれか１項に記載のプログラム。
【請求項１３】
請求項１乃至１２のいずれか１項に記載のプログラムを記録した、コンピュータ読み取り可能な記録媒体。
【請求項１４】
シーンに配置される描画オブジェクトについて、影が生じるか否かを示す影情報を生成して描画を行う描画方法であって、
前記シーンを描画する視点の情報に基づき、該視点からの投影において描画されるスクリーンの各ピクセルについて、影が生じるか否かを判定するシェーディング点を設定する設定工程と、
前記シーンについて定義される光源を示す光源情報と前記シーンに配置される描画オブジェクトの情報とに基づいて、前記光源からの投影の２次元テクスチャである、前記シーンに配置される描画オブジェクトの深度を示す深度バッファを生成する第１の生成工程と、
前記設定工程において設定されたシェーディング点群と前記第１の生成工程において生成された前記深度バッファとに基づいて、照明状態が確定するシェーディング点を特定する特定工程と、
前記シェーディング点群から、前記特定工程において照明状態が確定したシェーディング点を除外する除外工程と、
前記除外工程における除外後のシェーディング点群の各々について、前記光源からの投影において前記シーンに配置される描画オブジェクトに起因する照明状態を判定する判定工程であって、前記光源と前記深度バッファの各テクセルとで定まる空間を部分的に遮断する描画オブジェクトに起因する、前記除外後のシェーディング点群の各々の照明状態を判定する判定工程と、
前記照明状態が確定したシェーディング点と、前記判定工程において照明状態が判定されたシェーディング点とに基づいて、前記視点からの投影における前記影情報を生成する第２の生成工程と、
前記第２の生成工程において生成された前記影情報に基づいて、前記視点からの投影において前記シーンに配置される描画オブジェクトに影を付して描画する描画工程と、
を有する描画方法。