(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023178519
(43)【公開日】2023-12-15
(54)【発明の名称】ゲームプログラム、ゲームシステム、ゲーム処理方法、およびゲーム装置
(51)【国際特許分類】
A63F 13/52 20140101AFI20231208BHJP
G06T 15/60 20060101ALI20231208BHJP
【FI】
A63F13/52
G06T15/60
【審査請求】有
【請求項の数】24
【出願形態】OL
【公開請求】
(21)【出願番号】P 2023149297
(22)【出願日】2023-09-14
(71)【出願人】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】110001276
【氏名又は名称】弁理士法人小笠原特許事務所
(74)【代理人】
【識別番号】100130269
【弁理士】
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】嶺田 直樹
(72)【発明者】
【氏名】中利 和弘
(72)【発明者】
【氏名】前川 脩平
(57)【要約】
【課題】正射影で2D風の影を描画できるゲームプログラム、ゲームシステム、ゲーム処理方法、ゲーム装置を提供すること。
【解決手段】プレイヤキャラクタと、これより奥側に背面オブジェクトとが少なくとも配置された仮想空間を、正射影によって、かつデプステストを行って、フレームバッファに描画させる。SSAOに基づいた遮蔽判定方法であって、かつ画素ごとに、当該画素に対応する仮想空間内の位置の周辺に設定される複数のサンプル点の奥行値と、対応するデプスバッファ内の位置のデプスとの比較をする際に、サンプル点の位置に第1のオフセットを加えて比較を行う遮蔽判定方法に基づいて、画素ごとの遮蔽度合いを判定させる。そして、遮蔽度合いが高い部分に対応する画素に影を更に描画させる。
【選択図】
図24
【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータに、
プレイヤキャラクタオブジェクトと、当該プレイヤキャラクタオブジェクトよりも奥側に背面オブジェクトとが少なくとも配置された仮想空間内において、前記プレイヤキャラクタオブジェクトと仮想カメラを少なくとも制御させ、
正射影によって、かつデプステストを行って、前記仮想空間をフレームバッファに描画させ、
SSAO(Screen Space Ambient Occlusion)に基づいた遮蔽判定方法であって、かつ画素ごとに、当該画素に対応する前記仮想空間内の位置の周辺に設定される複数のサンプル点の奥行値と、対応するデプスバッファ内の位置のデプスとの比較をする際に、前記サンプル点の位置に所定方向の第1のオフセットを加えて比較を行う遮蔽判定方法に基づいて、前記画素ごとの遮蔽度合いを判定させ、
前記遮蔽度合いが高いと判定された部分に対応する前記フレームバッファ内の画素に影を更に描画させる、
ゲームプログラム。
【請求項2】
前記仮想空間内において、前記背面オブジェクトは、それぞれ異なる奥行となる位置に多層に複数配置され、
前記遮蔽判定方法は、前記比較において、前記デプスの差に基づいた前記遮蔽度合いの減衰をさせない遮蔽判定方法である、請求項1記載のゲームプログラム。
【請求項3】
前記仮想空間内には、前記背面オブジェクトよりも更に奥側に背景オブジェクトが配置され、
前記コンピュータに、
前記背景オブジェクトに対応する画素を対象外として、前記影の描画を行わせる、請求項2記載のゲームプログラム。
【請求項4】
前記コンピュータに更に、
前記仮想空間の前記フレームバッファへの描画において、所定のオブジェクトについて、法線ベクトルを前記仮想カメラのある位置を向く方向に近づけるように変形させて描画を行わせる、請求項1記載のゲームプログラム。
【請求項5】
前記コンピュータに、
前記法線ベクトルについて、奥行方向の成分を所定の倍率でスケーリングした上で、当該法線ベクトルの長さを正規化することで、前記仮想カメラのある位置を向く方向に近づけるように変形させる、請求項4記載のゲームプログラム。
【請求項6】
前記コンピュータに更に、
前記仮想空間内に配置された、前記プレイヤキャラクタオブジェクトを含む複数のキャラクタオブジェクトについて、前記フレームバッファへの描画の際に、キャラクタオブジェクト毎に異なる奥行値となるように第2のオフセットを加えて描画させる、請求項2記載のゲームプログラム。
【請求項7】
コンピュータを備えたゲームシステムであって、
前記コンピュータは、
プレイヤキャラクタオブジェクトと、当該プレイヤキャラクタオブジェクトよりも奥側に背面オブジェクトとが少なくとも配置された仮想空間内において、前記プレイヤキャラクタオブジェクトと仮想カメラを少なくとも制御し、
正射影によって、かつデプステストを行って、前記仮想空間をフレームバッファに描画し、
SSAO(Screen Space Ambient Occlusion)に基づいた遮蔽判定方法であって、かつ画素ごとに、当該画素に対応する前記仮想空間内の位置の周辺に設定される複数のサンプル点の奥行値と、対応するデプスバッファ内の位置のデプスとの比較をする際に、前記サンプル点の位置に所定方向の第1のオフセットを加えて比較を行う遮蔽判定方法に基づいて、前記画素ごとの遮蔽度合いを判定し、
前記遮蔽度合いが高いと判定された部分に対応する前記フレームバッファ内の画素に影を更に描画する、
ゲームシステム。
【請求項8】
前記仮想空間内において、前記背面オブジェクトは、それぞれ異なる奥行となる位置に多層に複数配置され、
前記遮蔽判定方法は、前記比較において、前記デプスの差に基づいた前記遮蔽度合いの減衰をさせない遮蔽判定方法である、請求項7記載のゲームシステム。
【請求項9】
前記仮想空間内には、前記背面オブジェクトよりも更に奥側に背景オブジェクトが配置され、
前記コンピュータは、
前記背景オブジェクトに対応する画素を対象外として、前記影の描画を行う、請求項8記載のゲームシステム。
【請求項10】
前記コンピュータは更に、
前記仮想空間の前記フレームバッファへの描画において、所定のオブジェクトについて、法線ベクトルを前記仮想カメラのある位置を向く方向に近づけるように変形させて描画を行う、請求項7記載のゲームシステム。
【請求項11】
前記コンピュータは、
前記法線ベクトルについて、奥行方向の成分を所定の倍率でスケーリングした上で、当該法線ベクトルの長さを正規化することで、前記仮想カメラのある位置を向く方向に近づけるように変形させる、請求項10記載のゲームシステム。
【請求項12】
前記コンピュータは更に、
前記仮想空間内に配置された、前記プレイヤキャラクタオブジェクトを含む複数のキャラクタオブジェクトについて、前記フレームバッファへの描画の際に、キャラクタオブジェクト毎に異なる奥行値となるように第2のオフセットを加えて描画する、請求項8記載のゲームシステム。
【請求項13】
情報処理装置のコンピュータに実行させるゲーム処理方法であって、
前記コンピュータに、
プレイヤキャラクタオブジェクトと、当該プレイヤキャラクタオブジェクトよりも奥側に背面オブジェクトとが少なくとも配置された仮想空間内において、前記プレイヤキャラクタオブジェクトと仮想カメラを少なくとも制御させ、
正射影によって、かつデプステストを行って、前記仮想空間をフレームバッファに描画させ、
SSAO(Screen Space Ambient Occlusion)に基づいた遮蔽判定方法であって、かつ画素ごとに、当該画素に対応する前記仮想空間内の位置の周辺に設定される複数のサンプル点の奥行値と、対応するデプスバッファ内の位置のデプスとの比較をする際に、前記サンプル点の位置に所定方向の第1のオフセットを加えて比較を行う遮蔽判定方法に基づいて、前記画素ごとの遮蔽度合いを判定させ、
前記遮蔽度合いが高いと判定された部分に対応する前記フレームバッファ内の画素に影を更に描画させる、
ゲーム処理方法。
【請求項14】
前記仮想空間内において、前記背面オブジェクトは、それぞれ異なる奥行となる位置に多層に複数配置され、
前記遮蔽判定方法は、前記比較において、前記デプスの差に基づいた前記遮蔽度合いの減衰をさせない遮蔽判定方法である、請求項13記載のゲーム処理方法。
【請求項15】
前記仮想空間内には、前記背面オブジェクトよりも更に奥側に背景オブジェクトが配置され、
前記コンピュータに、
前記背景オブジェクトに対応する画素を対象外として、前記影の描画を行わせる、請求項14記載のゲーム処理方法。
【請求項16】
前記コンピュータに更に、
前記仮想空間の前記フレームバッファへの描画において、所定のオブジェクトについて、法線ベクトルを前記仮想カメラのある位置を向く方向に近づけるように変形させて描画を行わせる、請求項13記載のゲーム処理方法。
【請求項17】
前記コンピュータに、
前記法線ベクトルについて、奥行方向の成分を所定の倍率でスケーリングした上で、当該法線ベクトルの長さを正規化することで、前記仮想カメラのある位置を向く方向に近づけるように変形させる、請求項16記載のゲーム処理方法。
【請求項18】
前記コンピュータに更に、
前記仮想空間内に配置された、前記プレイヤキャラクタオブジェクトを含む複数のキャラクタオブジェクトについて、前記フレームバッファへの描画の際に、キャラクタオブジェクト毎に異なる奥行値となるように第2のオフセットを加えて描画させる、請求項14記載のゲームプログラム。
【請求項19】
コンピュータを備えたゲーム装置であって、
前記コンピュータは、
プレイヤキャラクタオブジェクトと、当該プレイヤキャラクタオブジェクトよりも奥側に背面オブジェクトとが少なくとも配置された仮想空間内において、前記プレイヤキャラクタオブジェクトと仮想カメラを少なくとも制御し、
正射影によって、かつデプステストを行って、前記仮想空間をフレームバッファに描画し、
SSAO(Screen Space Ambient Occlusion)に基づいた遮蔽判定方法であって、かつ画素ごとに、当該画素に対応する前記仮想空間内の位置の周辺に設定される複数のサンプル点の奥行値と、対応するデプスバッファ内の位置のデプスとの比較をする際に、前記サンプル点の位置に所定方向の第1のオフセットを加えて比較を行う遮蔽判定方法に基づいて、前記画素ごとの遮蔽度合いを判定し、
前記遮蔽度合いが高いと判定された部分に対応する前記フレームバッファ内の画素に影を更に描画する、
ゲーム装置。
【請求項20】
前記仮想空間内において、前記背面オブジェクトは、それぞれ異なる奥行となる位置に多層に複数配置され、
前記遮蔽判定方法は、前記比較において、前記デプスの差に基づいた前記遮蔽度合いの減衰をさせない遮蔽判定方法である、請求項19記載のゲーム装置。
【請求項21】
前記仮想空間内には、前記背面オブジェクトよりも更に奥側に背景オブジェクトが配置され、
前記コンピュータは、
前記背景オブジェクトに対応する画素を対象外として、前記影の描画を行う、請求項20記載のゲーム装置。
【請求項22】
前記コンピュータは更に、
前記仮想空間の前記フレームバッファへの描画において、所定のオブジェクトについて、法線ベクトルを前記仮想カメラのある位置を向く方向に近づけるように変形させて描画を行う、請求項19記載のゲーム装置。
【請求項23】
前記コンピュータは、
前記法線ベクトルについて、奥行方向の成分を所定の倍率でスケーリングした上で、当該法線ベクトルの長さを正規化することで、前記仮想カメラのある位置を向く方向に近づけるように変形させる、請求項22記載のゲーム装置。
【請求項24】
前記コンピュータは更に、
前記仮想空間内に配置された、前記プレイヤキャラクタオブジェクトを含む複数のキャラクタオブジェクトについて、前記フレームバッファへの描画の際に、キャラクタオブジェクト毎に異なる奥行値となるように第2のオフセットを加えて描画する、請求項20記載のゲーム装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ゲーム処理における画像処理に関する。
【背景技術】
【0002】
従来から、ゲーム処理等で、仮想3次元空間における影を表現することが行われている。また、その中でも、シャドウボリューム技法を用いた影を表現手法も知られている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記の技術は、透視投影による表現を想定した技術であった。そのため、2D風ゲームのように、正射影でゲーム画像を表現する場合においては、適さない場合があった。
【課題を解決するための手段】
【0005】
上記の点に鑑みて、例えば以下のような構成例が挙げられる。
【0006】
(構成1)
構成1は、情報処理装置のコンピュータに、プレイヤキャラクタオブジェクトと、当該プレイヤキャラクタオブジェクトよりも奥側に背面オブジェクトとが少なくとも配置された仮想空間内において、プレイヤキャラクタオブジェクトと仮想カメラを少なくとも制御させ、正射影によって、かつデプステストを行って、仮想空間をフレームバッファに描画させる。また、SSAOに基づいた遮蔽判定方法であって、かつ画素ごとに、当該画素に対応する仮想空間内の位置の周辺に設定される複数のサンプル点の奥行値と、対応するデプスバッファ内の位置のデプスとの比較をする際に、サンプル点の位置に所定方向の第1のオフセットを加えて比較を行う遮蔽判定方法に基づいて、画素ごとの遮蔽度合いを判定させる。そして、遮蔽度合いが高いと判定された部分に対応するフレームバッファ内の画素に影を更に描画させる。
【0007】
上記構成例によれば、背面オブジェクトにプレイヤキャラクタオブジェクトの影を描画する際、2D風の影を描画できる。
【0008】
(構成2)
構成2は、上記構成1において、仮想空間内において、背面オブジェクトは、それぞれ異なる奥行となる位置に多層に複数配置されていてもよい。そして、上記遮蔽判定方法は、比較において、デプスの差に基づいた遮蔽度合いの減衰をさせない遮蔽判定方法であってもよい。
【0009】
上記構成例によれば、正射影による見た目とは異なるデプス(奥行き位置)に背面オブジェクトが配置されている場合であっても、2Dゲームをして見た場合に違和感のない影を描画できる。
【0010】
(構成3)
構成3は、上記構成2において、仮想空間内には、前記背面オブジェクトよりも更に奥側に背景オブジェクトが配置されていてもよい。そして、コンピュータに、背景オブジェクトに対応する画素を対象外として、上記影の描画を行わせてもよい。
【0011】
上記構成例によれば、背面オブジェクトよりも遠方にある背景オブジェクト上には影が描画されないようにすることができ、背面オブジェクトと背景オブジェクトとを区別可能なように表現できる。
【0012】
(構成4)
構成4は、上記構成1において、コンピュータに更に、仮想空間のフレームバッファへの描画において、所定のオブジェクトについて、法線ベクトルを仮想カメラのある位置を向く方向に近づけるように変形させて描画を行わせてもよい。
【0013】
上記構成例によれば、影だけでなく、オブジェクト本体も2D風の描画を行うことができる。これにより、見た目の統一感を持たせることができる。
【0014】
(構成5)
構成5は、上記構成4において、コンピュータに、上記法線ベクトルについて、奥行方向の成分を所定の倍率でスケーリングした上で、当該法線ベクトルの長さを正規化することで、仮想カメラのある位置を向く方向に近づけるように変形させてもよい。
【0015】
上記構成例によれば、簡易な計算手法で法線ベクトルを変形できるため、処理負荷を抑えることができる。
【0016】
(構成6)
構成6は、上記構成2において、コンピュータに更に、仮想空間内に配置された、プレイヤキャラクタオブジェクトを含む複数のキャラクタオブジェクトについて、フレームバッファへの描画の際に、キャラクタオブジェクト毎に異なる奥行値となるように第2のオフセットを加えて描画させてもよい。
【0017】
上記構成例によれば、仮想空間において同軸上に複数のキャラクタオブジェクトが配置されている場合であっても、描画の際にキャラクタオブジェクト同士がめり込んでいるような表現が発生しないようにできる。また、デプスの差で遮蔽度合いを減衰させないことから、奥行値を異ならしたとしても、上記影の描画方法に影響を与えることはない。
【発明の効果】
【0018】
本開示によれば、正射影による画像を用いるゲームにおいて、2Dゲーム風の影を描画できる。
【図面の簡単な説明】
【0019】
【
図1】ゲーム装置2のハードウェア構成を示すブロック図
【
図2】3Dモデルの押しつけ表現について説明するための図
【
図3】3Dモデルの押しつけ表現について説明するための図
【
図4】3Dモデルの押しつけ表現について説明するための図
【
図5】3Dモデルの押しつけ表現について説明するための図
【
図6】3Dモデルの押しつけ表現について説明するための図
【
図7】キャラクタの奥行き値の調整について説明するための図
【
図8】キャラクタの奥行き値の調整について説明するための図
【
図9】キャラクタの奥行き値の調整について説明するための図
【
図10】SSAO関連処理について説明するための図
【
図11】SSAO関連処理について説明するための図
【
図12】SSAO関連処理について説明するための図
【
図13】SSAO関連処理について説明するための図
【
図14】SSAO関連処理について説明するための図
【
図15】SSAO関連処理について説明するための図
【
図16】SSAO関連処理について説明するための図
【
図17】SSAO関連処理について説明するための図
【
図18】SSAO関連処理について説明するための図
【
図19】SSAO関連処理について説明するための図
【
図20】SSAO関連処理について説明するための図
【
図21】SSAO関連処理について説明するための図
【
図22】ゲーム装置2の記憶部22に記憶される各種データの一例を示すメモリマップ
【
図24】ピクセルシェーダ処理の詳細を示すフローチャート
【
図25】ポストプロセスの詳細を示すフローチャート
【発明を実施するための形態】
【0020】
以下、本発明の一実施形態について説明する。
【0021】
[ゲーム装置2のハードウェア構成]
図1は、本実施形態に係るゲーム装置2のハードウェア構成の一例を示すブロック図である。
図1において、ゲーム装置2は、プロセッサ21を備える。プロセッサ21は、ゲーム装置2において実行される各種の情報処理を実行する情報処理部である。本実施形態では、プロセッサ21は、CPU(Central Processing Unit)機能、および、GPU(Graphics Processing Unit)機能を少なくとも含むSoC(System-on-a-chip)から構成されている。なお、他の実施形態では、CPUとGPUは別々の構成であってもよい。また、GPUを有さずCPUにてグラフィックス処理を行う構成であっても、本開示の内容は適用可能である。プロセッサ21は、記憶部22に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。なお、記憶部22は、例えば、フラッシュメモリやDRAM(Dynamic Random Access Memory)等の内部記憶媒体であってもよいし、図示しないスロットに装着される外部記憶媒体等を利用する構成でもよい。
【0022】
また、ゲーム装置2は、他のゲーム装置や所定のサーバと通信を行うための通信部23を備える。
【0023】
また、ゲーム装置2は、ゲーム装置2がコントローラ26と有線または無線通信を行うためのコントローラ通信部24を備える。
【0024】
また、ゲーム装置2には、画像音声出力部25を介して表示部27(例えば、テレビ等)が接続される。プロセッサ21は、例えば、上記の情報処理の実行によって生成した画像や音声を、画像音声出力部25を介して表示部27に出力する。
【0025】
[本実施形態で想定する処理について]
次に、本実施形態で想定する処理の概要について説明する。本実施形態では、仮想空間を正射影で撮像したゲーム画像を用いるゲームを想定する。例えば、いわゆるサイドビュー型のゲームを想定する。本ゲームでは、プレイヤは、上記コントローラ26を用いてプレイヤキャラクタを移動させることができる。また、プレイヤキャラクタの移動に伴って画面が横スクロール(または縦スクロール)するように仮想カメラも移動制御される。そして、本実施形態では、このような正射影によるゲーム画像における表現として、2Dゲーム風の見栄えとなるように、描画処理に関する各種の工夫を行っている。つまり、レンダリング自体は3DCGの手法で行うが、その見栄えがより2Dゲーム風の見栄えとなるような工夫を行っている。2Dゲーム風の見栄えとは、例えば、3Dモデルのキャラクタについて、通常の処理で描画した場合よりも立体感・奥行き感が弱く見えるような見せ方である。本実施形態では、具体的には、以下のような処理について工夫を行っている。これらの処理の相乗効果によって、より2Dゲーム風の見せ方をすることができる。
(1)3Dモデルの押しつけ表現
(2)デプステストにおけるキャラクタの奥行き値の調整
(3)キャラクタの影の表現についてのSSAO関連処理
以下、各処理の概要について説明する。
【0026】
[3Dモデルの押しつけ表現]
本実施形態では、各キャラクタは3Dモデルとして作成されている。そのため、特に工夫せずに描画すると、モデルの凹凸に基づいた陰影がついた画像ができあがり、立体的な表現となる。この点、本実施形態では、頂点シェーダにおける処理において、頂点法線を変形させることで、3Dモデルを画面に押しつけたような表現を行う。
図2に、ある3Dモデルの一部について、頂点法線を変形する前と変形した後の一例を示す。
図2では、左側が変形前、右側が変形後の例を示している。
図2は、仮想空間を俯瞰した模式図であり、3Dモデルの一部分であって曲面を有する部分を、Z軸に水平な断面で示した図である。
図2において、仮想カメラ側(視点から見て手前側)の面における頂点法線は略放射状に広がるような向きとなっている。本実施形態では、頂点シェーダにおける処理で、
図2に示すように、各頂点法線の向きを仮想カメラの位置を向く方向(仮想カメラの正面方向と水平となるような向き)に近づけるように変形する処理を行う。より具体的には、Z軸成分を所定倍率でスケーリングし、長さを正規化する、という処理を行っている。例えば、
図3に示すような法線ベクトルがあるとする。これを、
図4に示すようにZ軸成分を例えば2倍にし、更に、
図5に示すように、長さを正規化する。このようにして、頂点法線を変形することで、結果的に、法線ベクトルの向きを仮想カメラ側に近づけるという処理を行っている。これにより、ライティング処理が行われても陰影があまりつかなくなり、より平面的な感じの見栄えとすることができる。また、この場合、仮想カメラから見ると、3Dモデルがあたかも
図6に示すような平べったい形状であるかのように見えることになる。なお、当該法線変形は、3Dモデルの全体に適用してもよいし、一部分にのみ適用してもよい。例えば、3Dモデルの頭部については法線変形を行うが、胴体部分には法線変形を行わないようにしてもよい。この例の場合、比較的小さなサイズの3Dモデルであって、顔の表情の変化を見易くしたいため、頭部にはあまり陰影をつけたくない、というような場合に有用である。
【0027】
[デプステストにおけるキャラクタの奥行き値(Z座標)の調整]
上記のように、本実施形態のゲームでは、3次元仮想空間を正射影で表現する。そのため、仮想空間内では同じ奥行き方向の軸上に並んでいるモデルについて、そのまま描画すると、あるモデルの一部が他のモデルの一部にめり込んでいるような表現が発生する可能性がある。例えば、4人のプレイヤによるマルチプレイゲームを想定する。そして、
図7のように、4体のプレイヤキャラクタが、奥行き方向(仮想カメラの撮像方向)となるZ軸上で同じ座標に位置しており、左右方向の軸上(
図7ではX軸)では密接するような距離で並んでいる場合を想定する。この場合、あるプレイヤキャラクタの一部が他のプレイヤキャラクタの一部にめり込んだような表現になる可能性がある(例えば
図8参照)。そこで、本例では、いわゆるデプステスト(深度テスト、Zテストとも呼ばれる)の際に、プレイヤキャラクタの奥行き値(Z座標)がそれぞれ異なる値となるようなオフセット値を加えてデプスバッファ(Zバッファとも呼ばれる)に書き込むようにする。以下の説明では、当該デプステストの際に用いるオフセット値のことを「デプステスト用オフセット値」と呼ぶ。これにより、
図9に示すように、Z軸上での各プレイヤキャラクタの位置が重ならないような位置関係を構築したうえでピクセルへの描画処理が行われることになり、上述したようなめり込み表現の発生を回避する。なお、当たり判定処理等のゲーム処理については、オフセットを加える前の、仮想空間におけるZ軸の位置を基準にして処理される。つまり、主要なゲーム処理は仮想空間内での実際のZ軸位置を基準に行われ、そのゲーム処理の結果となるゲーム画像を描画するときに、上記のようなオフセット値を加えて奥行き値を異ならせてから描画する、ということになる。
【0028】
また、上記デプステスト用オフセット値の利用については、プレイヤキャラクタだけでなく、その他のキャラクタオブジェクトに対して用いられていてもよい。例えば、ゲーム中に登場する全てのキャラクタオブジェクトについて、それぞれの奥行き値が異なるようなデプステスト用オフセット値を予め設定しておいてもよい。そして、デプステストの際に、各キャラクタに設定されているデプステスト用オフセット値を用いてデプスバッファに書き込むようにしてもよい。
【0029】
[キャラクタの影表現についてのSSAO関連処理]
次に、本実施形態におけるSSAO(スクリーンスペース・アンビエント・オクルージョン)に関する処理の概要を説明する。SSAO自体は既知の手法であるため、詳細な説明は省くが、これは、ある注目点に対して、その周辺の遮蔽物によって環境光の光量がどの程度減衰しているのかを示すAO(アンビエント・オクルージョン)を、スクリーンスペース(画面の範囲)に限定して、計算する手法である。つまり、各ピクセルに対応する仮想空間内の位置について、その周辺環境の遮蔽度合いを近似的に計算する手法である。SSAOの具体的アルゴリズムとしては複数のアルゴリズムが知られてはいるが、基本的なアルゴリズムは、以下のようなものである。まず、SSAOはポストプロセスとして行われるところ、その前準備として、所定のシーンをレンダリングする際、深度情報(デプスバッファや深度マップ)を作成しておく。SSAOの処理においては、各ピクセルについて、以下のような処理を行う。まず、注目点とするピクセルを決め、その周辺の位置をランダムでサンプリングする。サンプリング数については任意であるが、サンプリング数が多いほど精度は上がる一方で、計算負荷も高くなる。次に、サンプリング点の深度値を求める。例えば、サンプリング点の位置を投影したクリッピング空間上での位置を算出する。そして、サンプリング点の深度値と、上記作成済みの深度情報における、当該サンプリング点に対応する座標の深度値とを比較する。この比較により、サンプリング点が遮蔽されている位置であるか否かを判定することができる。例えば、サンプリング点の深度値が上記深度情報における深度値より小さい場合は、そのサンプリング点は遮蔽されていないと考えることができる。このような比較を各サンプリング点について行い、遮蔽されているサンプリング点の数の割合に基づいて、「遮蔽係数」を決定する。そして、当該遮蔽係数に基づいて、上記注目点に影を描画するか否かや、注目点における影の強さを決定する。
【0030】
本実施形態では、例えば、
図10に示すような位置関係を想定し、プレイヤキャラクタの後ろ側にある背面オブジェクトにプレイヤキャラクタの影を描画する場合を想定する。このような場合におけるプレイヤキャラクタの影を表現する際、上記のようなSSAOの処理について、更に以下のような制御を行って、2Dゲーム風の影の描画を行う。
(A)サンプリング点のオフセット制御
(B)奥行き方向の距離による光量減衰を無視する制御
【0031】
[サンプリング点のオフセット制御について]
本実施形態では、上記注目点の周辺のサンプリング点を取った後、深度情報の深度値と比較する際に、サンプリング点の位置に所定のオフセット値を加えた上で比較を行う。以下では、当該SSAOの処理で用いるオフセット値のことを「SSAO用オフセット値」と呼ぶ。例えば、
図11に示すような位置でサンプリング点が決定されたとする。
図11は、仮想空間において、注目点とサンプリング点と光源との位置関係を模式的に示した図である。
図11では、Z軸が画面の奥行き方向に相当する。本実施形態では、上記サンプリング点について、
図12に示すように、光源方向に向けてSSAO用オフセット値を加える。そして、オフセット後のサンプリング点に基づいて、深度情報の深度値との比較を行う。そのため、
図12の例の場合では、サンプリング点をオフセットした結果、サンプリング点が遮蔽物(例えば
図10のプレイヤキャラクタ)により近い位置にあるものとして比較されることになる。その結果として、
図11の場合よりも、「遮蔽されている」と扱われるサンプリング点の割合が大きくなるという結果が得られることになる。これにより、通常のSSAOによる処理では影が描画されないような注目点(ピクセル)について、影を描画することができる。特に、上記のようなプレイヤキャラクタと背面オブジェクトとの位置関係を想定した場合に、通常のSSAOの処理では遮蔽係数が低く設定される注目点について、遮蔽係数をより高く設定することができるようになる。その結果、背面オブジェクトに映るプレイヤキャラクタの影をよりはっきりさせるような見せ方ができ、2Dゲーム風の影が描画できる。例えば、通常のSSAOの処理では、
図13に示すようなプレイヤキャラクタの影の付き方になると想定する。
図13では、プレイヤキャラクタの影の例と、その左上に、頭部周辺を拡大した拡大図とを示している。当該拡大図で示すように、
図13の例では、注目点となるピクセルには影が描画されていない結果となっている。これに対し、本実施形態のようにサンプリング点をオフセットしてSSAOの処理を行うことで、
図14に示すような影の付け方が可能となる。
図14では、注目点のピクセルにも影が描画される結果となっている。これは、当該注目点に関するサンプリング点について「遮蔽されている」割合が高いと判定され、結果、この注目点に対する遮蔽係数が高く設定されたことによる。このような処理によって、通常の描画手法による影の場合に比べ、影の幅が厚くなっているような表現ができ、プレイヤキャラクタについて、より2Dゲーム風の見栄えとすることができる。
【0032】
[奥行き方向の距離による遮蔽度合いの減衰を無視する制御について]
次に、奥行き方向の距離による遮蔽度合いの減衰を無視する制御について説明する。上記のように、本実施形態では、正射影で3次元空間を描画するため、ゲーム画像は遠近感のあるパースが掛からない表現となる。そのため、例えば、画面上では、
図15のように同じ奥行きの位置に平面的に重なっているように見える画像でも、当該仮想空間を俯瞰して見ると、
図16のように、奥行き(撮像)方向軸上の位置としては異なる位置に配置されていることもある。2つの背面オブジェクトが横に並んでいるように見える画像でも同様である。これは、例えば、ゲームの開発のし易さ(レベルデザインやマップデザインの効率等)やゲーム処理上の都合等で、正射影を前提としたゲームの仮想空間の構成として、
図16のような背面オブジェクトの配置の仮想空間が用いられることもある。
【0033】
ここで、例えば上記仮想空間について、
図17に示すような位置関係で、2体のプレイヤキャラクタが存在している場合を想定する。
図17では、プレイヤキャラクタBと背面オブジェクトBとは、奥行き方向の距離については近接しており、プレイヤキャラクタBのすぐ後ろに背面オブジェクトBがあるような位置関係となっている。一方、プレイヤキャラクタAと背面オブジェクトAとは、奥行き方向上の距離としてみると、離れている位置関係となっている。このような位置関係において、正射影で通常のレンダリング処理(通常のSSAO処理)を行うと、プレイヤキャラクタの影は、例えば
図18に示すような表現になることが考えられる。すなわち、プレイヤキャラクタBについては、すぐ後ろにある背面オブジェクトBに影が映るような表現がなされる。つまり、背面オブジェクトBの一部はプレイヤキャラクタBによって遮蔽度合いが高い状態とされているものとして扱われている。その一方で、プレイヤキャラクタAについては、背面オブジェクトAとの奥行き方向の距離がある。通常のSSAO処理においては、サンプル点と遮蔽物との奥行の差が大きいと遮蔽度合いを減衰させることで、距離が離れているオブジェクトの遮蔽の影響を受けにくくすることが一般的であることから、背面オブジェクトAはプレイヤキャラクタBに遮蔽されていないという扱いとなる。その結果、背面オブジェクトAにはプレイヤキャラクタAの影が描画されていない画像になる。つまり、一般的なSSAOの処理では、遮蔽物となる物体の位置と、その遮蔽物の影になる位置との奥行きの差も考慮して、遮蔽度合いを減衰させて影の表現が行われている。
【0034】
この点、本実施形態では、このような奥行きの差に基づいた遮蔽度合いの減衰をさせない、換言すれば、奥行きの差を無視するようにして、SSAOに係る処理を行わせる。その結果、
図19に示すような影の表現ができる。
図19では、仮想空間内での実際の奥行き方向の差に関わらず、背面オブジェクトAに対してもプレイヤキャラクタAの影を描画されていることを示している。なお、
図19では上述のサンプリング点に対するオフセットも加えられた結果を示している。これにより、2Dゲームとして考えた場合に違和感のない影の表現が可能となる。また、上記背面オブジェクトは、多層となるように(奥行き方向上の位置が異なるように)、仮想空間内に複数配置されていてもよい。この場合でも、各背面オブジェクトに影を描画することができ、これら複数の背面オブジェクトがあたかも同じ層にあるかのように見せかけることができる。
【0035】
なお、上記SSAOに基づく影の描画に関して、本実施形態では、更に、影の描画対象を限定するような処理も行っている。例えば、
図20に示すように、プレイヤキャラクタ、背面オブジェクト、および背景オブジェクトが配置されている場合を想定する。この場合、背面オブジェクトについてはプレイヤキャラクタのすぐ後ろにあるように見せつつ、背景オブジェクトのほうは、プレイヤキャラクタのすぐ後ろではなく、遠方にあるように見せたいとする。この場合、背面オブジェクトには(プレイヤキャラクタの)影を描画するが、背景オブジェクトには当該影は描画しないようにすることで、このような遠近感を感じられる見せ方が可能となる。このような場合を例とすると、上記奥行きの差を無視する制御を行うだけでは、背景オブジェクトにも影が描画されてしまう。そこで、本実施形態では、背景オブジェクトに対応するピクセルを、上記SSAOに基づく影の描画対象外とするような制御を更に行う。本実施形態では、影を描画したくないピクセルを「マスク」するという形で、このような制御を行っている。すなわち、影を描画したいピクセル(
図20の場合、背面オブジェクトが描画されるピクセル)以外の部分が覆われたマスク画像を用意する。そして、SSAOに基づき決定された影を描画する際に、このマスク画像を用いることで、マスクされた部分については影を描画しないようにする。
図21に、背景部分に影が描画されないようにした画面の例を示す。
図21では、プレイヤオブジェクトの影が背面オブジェクト(に対応するピクセル)には描画されているが、背景オブジェクト(に対応するピクセル)には描画されていないことが示されている。
【0036】
[本実施形態の処理の詳細]
次に、
図22~
図26を参照して、本実施形態における描画処理についてより詳細に説明する。
【0037】
[使用データについて]
まず、本実施形態の処理で用いられる各種データに関して説明する。
図22は、ゲーム装置2の記憶部22に記憶される各種データの一例を示すメモリマップである。記憶部22には、ゲームプログラム601、オブジェクトデータ602が記憶される。ゲームプログラム601は、本実施形態に係る画像処理を含むゲーム処理を実行するためのプログラムである。オブジェクトデータ602は、上記プレイヤキャラクタ、背面オブジェクト、背景オブジェクト等の、ゲーム内に登場する各種のオブジェクトのデータである。例えば、各オブジェクトの3Dモデルのデータ等が含まれている。
【0038】
また、記憶部22には、画像処理専用のメモリ領域として用いられるフレームバッファ603も設けられる。フレームバッファ603には、プライマリバッファ604、バックバッファ605、デプスバッファ606、ステンシルバッファ607等が記憶され得る。プライマリバッファ604には、最終的にゲーム画像として出力される画像が格納される。バックバッファ605には、描画処理(レンダリングパイプライン)の過程におけるゲーム画像が格納され得る。つまり、あるシーンを描画する際、その描画過程ではバックバッファ605に対して画像が書き込まれ、最終的に完成したバックバッファ605の画像がプライマリバッファ604に転送されてゲーム画像として出力されることになる。デプスバッファ606は、ゲーム画像の各ピクセルの奥行きデータを保持するための一時メモリ領域である。デプスバッファ606は、各ピクセルに対して仮想カメラからの距離を表現した深度情報としても利用できる。ステンシルバッファ607は、上述したようなSSAOに基づくキャラクタの影を描画する、または描画しないピクセルを特定するための上記マスク画像に相当するデータを保持するための一時メモリ領域である。
【0039】
次に、本実施形態における処理の詳細を説明する。ここでは、主に上述したような描画処理に関して説明し、その他のゲーム処理の詳細については説明を省略する。なお、本実施形態では、1以上のプロセッサが1以上のメモリに記憶されたプログラムを読み込んで実行することにより、以下に示すフローチャートが実現される。また、当該フローチャートは、処理過程の単なる一例にすぎない。そのため、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判定ステップで利用される閾値も、単なる一例であり、必要に応じて他の値を採用してもよい。
【0040】
図23は、本実施形態に係る描画処理の詳細を示すフローチャートである。当該処理は、各種オブジェクトが配置されている仮想空間を仮想カメラで撮像した画像を描画するための処理であり、フレームレートに応じて1秒間に複数回繰り返される。
【0041】
まず、ステップS1で、プロセッサ21は、頂点シェーダ処理を実行する。当該処理では、ポリゴンの各頂点をゲーム画像のどの位置に描画するのかを決める座標変換処理(本例では、正射影行列が用いられる)、各頂点の色を決定する処理(ライティング処理)、貼り付けるテクスチャの位置を決定する処理等が行われる。そして、本実施形態では、当該頂点シェーダの処理において、所定のオブジェクトについて、上記
図2~
図6を用いて説明したような頂点法線を変形する処理も実行される。すなわち、所定のオブジェクトについて、頂点法線のZ成分をスケーリングして、正規化するという処理が行われる。なお、当該頂点シェーダ処理ではライティング処理も行われるが、この時点では、上記デプステスト用オフセット値を加えていない、本来の奥行き値を用いてのライティング処理が行われる。
【0042】
次に、ステップS2で、プロセッサ21は、ラスタライザの処理を実行する。ラスタライザの処理は既知の処理であるため、詳細説明は割愛するが、頂点シェーダから渡された加工済み頂点データからポリゴンを構成する三角形を生成して、ピクセルで塗りつぶす処理が行われる。
【0043】
次に、ステップS3で、プロセッサ21は、ピクセルシェーダの処理を実行する。
図24は、当該ピクセルシェーダ処理の詳細を示すフローチャートである。
図24において、まず、ステップS11で、プロセッサ21は、デプステスト処理を実行する。当該処理では、ピクセル毎に設定されている奥行き値(深度値)に基づいて、他のピクセルの影に隠れるピクセルを描画しないようにする処理が行われる。そして、デプステスト処理では、隠れているか否かの判定のために、デプスバッファ606にピクセルの奥行き値を書き込む処理が行われる。この際、本実施形態では、上記
図7~
図9を用いて説明したような、キャラクタオブジェクトの奥行き値に上記デプステスト用オフセット値を加えてからデプスバッファ606に書き込むという制御が行われる。
【0044】
次に、ステップS12で、プロセッサ21は、その他のピクセルシェーダの処理を実行する。例えば、プロセッサ21は、テクスチャマッピング、アルファテスト等のピクセルシェーダの各種処理を実行する。その後、プロセッサ21は、ピクセルシェーダ処理を終了する。
【0045】
図23に戻り、次に、ステップS4で、プロセッサ21は、ポストプロセスを実行する。ポストプロセスでは、上記ピクセルシェーダ処理の結果生成された画像に対して、各種の画像エフェクトを加える処理が行われる。
図25は、当該ポストプロセスの詳細を示すフローチャートである。
【0046】
図25において、まず、ステップS21で、プロセッサ21は、SSAO処理を実行する。上記のように、SSAOのアルゴリズムは複数種類知られているが、本実施形態では、一例として、Alchemy AOと呼ばれる手法をベースにした処理の一例を示す。
図26は、当該SSAO処理の詳細を示すフローチャートである。
図26において、まず、ステップS31で、プロセッサ21は、注目点とするピクセルを決定する。
【0047】
次に、ステップS32で、プロセッサ21は、注目点に基づき、サンプリング点を複数決定する。例えば、注目点の法線方向の半球を考え、この半球内でランダムで選ばれた位置がサンプリング点として決定される。なお、当該サンプリング点は、ワールド空間(クリッピング空間でもよい)内において決定される。
【0048】
次に、ステップS33で、プロセッサ21は、上記決定した各サンプリング点を、上記ピクセルシェーダの処理で生成されたデプスバッファ606(つまり、深度情報)を用いて投影する。これにより、スクリーン空間上のサンプリング点の位置が決定される。
【0049】
次に、ステップS34で、プロセッサ21は、スクリーン空間上で、各サンプリング点に、光源方向に向けての上記SSAO用オフセット値を加える。具体的なSSAO用オフセット値の値は任意の値でよい。例えば、予め定められた値でもよいし、所定の数式を用いてその都度自動的に算出された値でもよい。
【0050】
次に、ステップS35で、プロセッサ21は、注目点から各サンプリング点へのベクトルAをそれぞれ算出する。
【0051】
次に、ステップS36で、プロセッサ21は、注目点の法線ベクトルBと、上記算出された各ベクトルAとの内積をそれぞれ算出する。
【0052】
次にステップS37で、プロセッサ21は、上記算出した内積の平均値を算出する。そして、プロセッサ21は、当該平均値に基づいて、遮蔽係数を決定する。
【0053】
ここで、通常のSSAOの処理では、上記内積に基づいて遮蔽係数を決定する際に、奥行き方向の距離による遮蔽度合いの減衰(光量の減衰)を考慮するために、「ベクトルAの長さで割る」という計算も行われる。しかし、本実施形態では、上記
図15~
図19を用いて説明したように、奥行きの差に基づいた遮蔽度合いの減衰をさせないようにして、キャラクタの影を描画したい。そのために、上記内積を算出した後、「ベクトルAの長さで割る」という計算は行わずに、そのまま平均値の算出を行うようにしている。
【0054】
次に、ステップS38で、プロセッサ21は、上記決定された遮蔽係数に基づいて、上記注目点に対しての影の濃さ(強さ)を決定する。なお、本実施形態では、当該SSAO処理に基づいて決まる影の濃さは一定であるとする。つまり、本例の場合、結果的には、単純に、影を付けるか付けないかの、2者択一の判定となる。
【0055】
次に、ステップS39で、プロセッサ21は、当該SSAOの処理で決定された影(以下、SSAO影と呼ぶ)の画像を示すテクスチャ画像であるSSAO影画像を生成する。注目点に対して影を描画する場合は、当該注目点に対応するテクセルが黒色で描画されることになる。そのため、SSAO影画像では、例えばSSAO影のつく部分のみが黒色で塗られているようなテクスチャ画像ができあがる。
【0056】
次に、ステップS40で、プロセッサ21は、全てのピクセルに対して、上記ステップS31~S39の処理を行ったか否かが判定される、まだ未処理のピクセルがある場合は(ステップS40でNO)、上記ステップS31に戻り、処理が繰り返される。すべてのピクセルについて上記処理が終われば(ステップS40でYES)、プロセッサ21は、SSAO処理を終了する。
【0057】
図25に戻り、次に、ステップS22で、プロセッサ21は、上記背面オブジェクト以外をマスクするような内容のステンシルバッファ607を生成する。続くステップS23で、プロセッサ21は、上記SSAO影画像を、上記ピクセルシェーダの結果生成された画像に合成する。この際、上記ステンシルバッファ607を用いて、SSAO影画像の合成が行われる。これにより、例えば背面オブジェクトにはSSAO影は描画されているが、背景オブジェクトにはSSAO影が描画されていないような画像が生成され得る。
【0058】
次に、ステップS24で、プロセッサ21は、その他のポストプロセスに係る各種の処理(各種エフェクトをかける処理)を実行する。例えば、プロセッサ21は、上記ピクセルシェーダの結果生成された画像に対して、被写界深度を適用する処理や、アンチエイリアスやブルームをかける処理等を適宜実行する。その後、プロセッサ21は、ポストプロセスを終了する。
【0059】
図23に戻り、次に、ステップS5で、プロセッサ21は、上記ポストプロセスの結果生成された、最終的なレンダリング画像(本例ではバックバッファ605に格納されている)をプライマリバッファ604に転送する。
【0060】
次に、ステップS6で、プロセッサ21は、プライマリバッファ604の画像を表示部27に出力する。
【0061】
その後、プロセッサ21は、描画処理を終了する。
【0062】
以上で、本実施形態の描画処理の詳細説明を終了する。
【0063】
このように、本実施形態では、SSAO処理の際、サンプリング点を光源側にオフセットして、奥行き値の比較を行っている。更に、本実施形態では、奥行き差に基づいた遮蔽度合いの減衰を無視するような制御も行っている。これにより、プレイヤキャラクタの影を背面オブジェクトに描画する際に、当該背面オブジェクトに映る影が描画される範囲を拡げ、2Dゲーム風の影の表現が可能となる。
【0064】
また、本実施形態では、頂点シェーダにおいて、3Dモデルのキャラクタの所定の部分について、頂点法線が光源方向を向くような変形を加えている。これにより、当該変形した部分について、より平面的な表現ができる。また、上記のSSAO処理によるキャラクタの影の表現と併せることで、3Dモデルのキャラクタおよびその影について、2Dゲーム風の画像として統一感のある表現ができる。
【0065】
また、本実施形態では、デプステストの際に、キャラクタオブジェクト毎に異なる奥行き値となるように上記デプステスト用オフセット値を加えてデプスバッファに書き込んでいる。上記のように、SSAOの処理では奥行き方向の差を無視するようにして影を描画するため、このようにデプステストの際に奥行き値を変化させたとしても、その変化の影響を受けずにキャラクタの影の描画が行われることになる。これにより、正射影によるゲームにおいて、2Dゲーム風の見栄えとしつつ、キャラクタ同士のめり込み表現等も発生しないゲーム画像が描画でき、より高い相乗効果が得られる。
【0066】
[変形例]
なお、上記実施形態では、SSAOの処理の一例としてAlchemy AOをベースにした処理の一例を示した。これに限らず、他のアルゴリズムのSSAOにおいて、上記のようにサンプリング点をオフセットしてから深度値を比較するような処理を行ってもよい。
【0067】
また、他の実施形態では、上記サンプリング点を直接オフセットする代わりに、注目点自体をオフセットし、オフセット後の注目点に基づいて決定したサンプリング点を用いてもよい。
【0068】
また、上記実施形態では、描画処理が単一のゲーム装置2で実行される場合を説明した。他の実施形態においては、これらの処理は複数の情報処理端末からなる情報処理システムにおいて実行されてもよい。例えば、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記描画処理のうちの一部の処理がサーバ側装置によって実行されてもよい。また、上記情報処理システムにおいて、サーバ側のシステムは、複数の情報処理端末によって構成され、サーバ側で実行するべき処理を複数の情報処理端末が分担して実行してもよい。
【符号の説明】
【0069】
2 ゲーム装置
21 プロセッサ
22 記憶部
26 コントローラ
27 表示部