(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024017898
(43)【公開日】2024-02-08
(54)【発明の名称】画像処理プログラム、画像処理システム、画像処理装置、および画像処理方法
(51)【国際特許分類】
G06T 15/50 20110101AFI20240201BHJP
G06T 19/00 20110101ALI20240201BHJP
【FI】
G06T15/50 300
G06T19/00 A
【審査請求】有
【請求項の数】26
【出願形態】OL
(21)【出願番号】P 2022120844
(22)【出願日】2022-07-28
(11)【特許番号】
(45)【特許公報発行日】2024-01-18
(71)【出願人】
【識別番号】391041718
【氏名又は名称】株式会社ハル研究所
(71)【出願人】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】100158780
【弁理士】
【氏名又は名称】寺本 亮
(74)【代理人】
【識別番号】100121359
【弁理士】
【氏名又は名称】小沢 昌弘
(72)【発明者】
【氏名】加藤 歩
【テーマコード(参考)】
5B050
5B080
【Fターム(参考)】
5B050BA09
5B050EA07
5B050EA30
5B050FA02
5B050FA05
5B080CA01
5B080FA02
5B080FA15
5B080GA13
(57)【要約】
【課題】オブジェクトの接続部分が自然に見えるような画像を生成することが可能な画像処理プログラムを提供する。
【解決手段】画像処理システムの一例は、まず、第1のオブジェクトについて、法線情報及び色情報をGバッファに書き込むとともに、深度情報を深度バッファに書き込む。次に、画像処理システムの一例は、第2のオブジェクトについて、法線情報をGバッファに書き込む際に、第1のオブジェクトの深度情報と第2のオブジェクトの深度情報との差分を計算し、当該差分に基づいて、第1のオブジェクトの法線情報と第2のオブジェクトの法線情報とをブレンドし、当該ブレンドした法線情報をGバッファに書き込む。そして、画像処理システムの一例は、Gバッファに記憶された情報及び光源情報に基づいて、フレームバッファに画像をレンダリングする。
【選択図】
図9
【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータに、ディファードレンダリングに基づいて仮想空間内のオブジェクトの画像を生成させる画像処理プログラムであって、前記コンピュータに、
前記仮想空間内の第1のオブジェクトについて、深度バッファへの深度情報の書き込みと、第1のバッファへの法線情報の書き込みと、第2のバッファへの色情報の書き込みとを少なくとも含む第1処理を行わせ、
前記第1処理の後、前記仮想空間内の第2のオブジェクトについて、深度テストを行わせるとともに、前記深度バッファへの深度情報の書き込みと、前記第1のバッファへの法線情報の書き込みと、前記第2のバッファへの色情報の書き込みとを少なくとも含む第2処理を行わせ、
前記第2処理における前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの深度情報と前記深度バッファに既に記憶された深度情報との差に基づいて、当該差が小さい部分について前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とがブレンドされるように、前記第2のオブジェクトの法線情報を前記第1のバッファに書き込ませ、
少なくとも前記第1のバッファ及び前記第2のバッファに記憶された情報に基づいてレンダリングを行わせることにより画像を生成させる、画像処理プログラム。
【請求項2】
前記コンピュータに、
前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを前記差に応じたブレンド率でブレンドした法線情報を、前記第1のバッファに書き込ませる、請求項1に記載の画像処理プログラム。
【請求項3】
前記ブレンド率は、前記差が小さいほど、前記第1のバッファに既に記憶された法線情報の割合が高くなるように設定される、請求項2に記載の画像処理プログラム。
【請求項4】
前記コンピュータに、
前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記差が所定範囲内の画素について、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを所定の比率でブレンドした法線情報を、前記第1のバッファに書き込ませる、請求項1に記載の画像処理プログラム。
【請求項5】
前記コンピュータにさらに、
前記第2のオブジェクトの前記第2のバッファへの色情報の書き込みにおいて、前記差に基づいて、当該差が小さい部分について前記第2のオブジェクトの色情報と前記第2のバッファに既に記憶された色情報とがブレンドされるように、前記第2のオブジェクトの色情報を前記第2のバッファに書き込ませる、請求項2から4の何れかに記載の画像処理プログラム。
【請求項6】
前記第1のオブジェクトは、キャラクタの第1の部位であり、
前記第2のオブジェクトは、前記キャラクタの第2の部位である、請求項2から4の何れかに記載の画像処理プログラム。
【請求項7】
情報処理装置のコンピュータに、仮想空間内のオブジェクトの画像を生成させる画像処理プログラムであって、前記コンピュータに、
前記仮想空間内の第1のオブジェクトについて、深度バッファへの深度情報の書き込みと、法線バッファへの法線情報の書き込みと、フレームバッファへの描画とを少なくとも含む第1処理を行わせ、
前記第1処理の後、前記仮想空間内の第2のオブジェクトについて、深度テストを行わせるとともに、前記フレームバッファへの描画を含む第2処理を行わせ、
前記第2処理における前記第2のオブジェクトの前記フレームバッファへの描画において、前記第2のオブジェクトの深度情報と前記深度バッファに既に記憶された深度情報との差に基づいて、当該差が小さい部分について前記第2のオブジェクトの法線情報と前記法線バッファに既に記憶された法線情報とがブレンドされるように法線情報を算出させ、当該算出された法線情報に基づくレンダリングを行わせる、画像処理プログラム。
【請求項8】
プロセッサを備え、ディファードレンダリングに基づいて仮想空間内のオブジェクトの画像を生成する画像処理システムであって、前記プロセッサは、
前記仮想空間内の第1のオブジェクトについて、深度バッファへの深度情報の書き込みと、第1のバッファへの法線情報の書き込みと、第2のバッファへの色情報の書き込みとを少なくとも含む第1処理を行い、
前記第1処理の後、前記仮想空間内の第2のオブジェクトについて、深度テストを行うとともに、前記深度バッファへの深度情報の書き込みと、前記第1のバッファへの法線情報の書き込みと、前記第2のバッファへの色情報の書き込みとを少なくとも含む第2処理を行い、
前記第2処理における前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの深度情報と前記深度バッファに既に記憶された深度情報との差に基づいて、当該差が小さい部分について前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とがブレンドされるように、前記第2のオブジェクトの法線情報を前記第1のバッファに書き込み、
少なくとも前記第1のバッファ及び前記第2のバッファに記憶された情報に基づいてレンダリングを行うことにより画像を生成する、画像処理システム。
【請求項9】
前記プロセッサは、
前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを前記差に応じたブレンド率でブレンドした法線情報を、前記第1のバッファに書き込む、請求項8に記載の画像処理システム。
【請求項10】
前記ブレンド率は、前記差が小さいほど、前記第1のバッファに既に記憶された法線情報の割合が高くなるように設定される、請求項9に記載の画像処理システム。
【請求項11】
前記プロセッサは、
前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記差が所定範囲内の画素について、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを所定の比率でブレンドした法線情報を、前記第1のバッファに書き込む、請求項8に記載の画像処理システム。
【請求項12】
前記プロセッサはさらに、
前記第2のオブジェクトの前記第2のバッファへの色情報の書き込みにおいて、前記差に基づいて、当該差が小さい部分について前記第2のオブジェクトの色情報と前記第2のバッファに既に記憶された色情報とがブレンドされるように、前記第2のオブジェクトの色情報を前記第2のバッファに書き込む、請求項9から11の何れかに記載の画像処理システム。
【請求項13】
前記第1のオブジェクトは、キャラクタの第1の部位であり、
前記第2のオブジェクトは、前記キャラクタの第2の部位である、請求項9から11の何れかに記載の画像処理システム。
【請求項14】
プロセッサを備え、仮想空間内のオブジェクトの画像を生成する画像処理システムであって、前記プロセッサは、
前記仮想空間内の第1のオブジェクトについて、深度バッファへの深度情報の書き込みと、法線バッファへの法線情報の書き込みと、フレームバッファへの描画とを少なくとも含む第1処理を行い、
前記第1処理の後、前記仮想空間内の第2のオブジェクトについて、深度テストを行うとともに、前記フレームバッファへの描画を含む第2処理を行い、
前記第2処理における前記第2のオブジェクトの前記フレームバッファへの描画において、前記第2のオブジェクトの深度情報と前記深度バッファに既に記憶された深度情報との差に基づいて、当該差が小さい部分について前記第2のオブジェクトの法線情報と前記法線バッファに既に記憶された法線情報とがブレンドされるように法線情報を算出し、当該算出した法線情報に基づくレンダリングを行う、画像処理システム。
【請求項15】
プロセッサを備え、ディファードレンダリングに基づいて仮想空間内のオブジェクトの画像を生成する画像処理装置であって、前記プロセッサは、
前記仮想空間内の第1のオブジェクトについて、深度バッファへの深度情報の書き込みと、第1のバッファへの法線情報の書き込みと、第2のバッファへの色情報の書き込みとを少なくとも含む第1処理を行い、
前記第1処理の後、前記仮想空間内の第2のオブジェクトについて、深度テストを行うとともに、前記深度バッファへの深度情報の書き込みと、前記第1のバッファへの法線情報の書き込みと、前記第2のバッファへの色情報の書き込みとを少なくとも含む第2処理を行い、
前記第2処理における前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの深度情報と前記深度バッファに既に記憶された深度情報との差に基づいて、当該差が小さい部分について前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とがブレンドされるように、前記第2のオブジェクトの法線情報を前記第1のバッファに書き込み、
少なくとも前記第1のバッファ及び前記第2のバッファに記憶された情報に基づいてレンダリングを行うことにより画像を生成する、画像処理装置。
【請求項16】
前記プロセッサは、
前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを前記差に応じたブレンド率でブレンドした法線情報を、前記第1のバッファに書き込む、請求項15に記載の画像処理装置。
【請求項17】
前記ブレンド率は、前記差が小さいほど、前記第1のバッファに既に記憶された法線情報の割合が高くなるように設定される、請求項16に記載の画像処理装置。
【請求項18】
前記プロセッサは、
前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記差が所定範囲内の画素について、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを所定の比率でブレンドした法線情報を、前記第1のバッファに書き込む、請求項15に記載の画像処理装置。
【請求項19】
前記プロセッサはさらに、
前記第2のオブジェクトの前記第2のバッファへの色情報の書き込みにおいて、前記差に基づいて、当該差が小さい部分について前記第2のオブジェクトの色情報と前記第2のバッファに既に記憶された色情報とがブレンドされるように、前記第2のオブジェクトの色情報を前記第2のバッファに書き込む、請求項16から18の何れかに記載の画像処理装置。
【請求項20】
前記第1のオブジェクトは、キャラクタの第1の部位であり、
前記第2のオブジェクトは、前記キャラクタの第2の部位である、請求項16から18の何れかに記載の画像処理装置。
【請求項21】
ディファードレンダリングに基づいて仮想空間内のオブジェクトの画像を生成する画像処理方法であって、
前記仮想空間内の第1のオブジェクトについて、深度バッファへの深度情報の書き込みと、第1のバッファへの法線情報の書き込みと、第2のバッファへの色情報の書き込みとを少なくとも含む第1ステップを行い、
前記第1ステップの後、前記仮想空間内の第2のオブジェクトについて、深度テストを行うとともに、前記深度バッファへの深度情報の書き込みと、前記第1のバッファへの法線情報の書き込みと、前記第2のバッファへの色情報の書き込みとを少なくとも含む第2ステップを行い、
前記第2ステップにおける前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの深度情報と前記深度バッファに既に記憶された深度情報との差に基づいて、当該差が小さい部分について前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とがブレンドされるように、前記第2のオブジェクトの法線情報を前記第1のバッファに書き込み、
少なくとも前記第1のバッファ及び前記第2のバッファに記憶された情報に基づいてレンダリングを行うことにより画像を生成するステップを行う、画像処理方法。
【請求項22】
前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを前記差に応じたブレンド率でブレンドした法線情報が、前記第1のバッファに書き込まれる、請求項21に記載の画像処理方法。
【請求項23】
前記ブレンド率は、前記差が小さいほど、前記第1のバッファに既に記憶された法線情報の割合が高くなるように設定される、請求項22に記載の画像処理方法。
【請求項24】
前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記差が所定範囲内の画素について、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを所定の比率でブレンドした法線情報が、前記第1のバッファに書き込まれる、請求項21に記載の画像処理方法。
【請求項25】
前記第2のオブジェクトの前記第2のバッファへの色情報の書き込みにおいて、前記差に基づいて、当該差が小さい部分について前記第2のオブジェクトの色情報と前記第2のバッファに既に記憶された色情報とがブレンドされるように、前記第2のオブジェクトの色情報が前記第2のバッファに書き込まれる、請求項22から24の何れかに記載の画像処理方法。
【請求項26】
前記第1のオブジェクトは、キャラクタの第1の部位であり、
前記第2のオブジェクトは、前記キャラクタの第2の部位である、請求項22から24の何れかに記載の画像処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想空間内のオブジェクトの画像を生成することが可能な画像処理プログラム、画像処理システム、画像処理装置、および画像処理方法に関する。
【背景技術】
【0002】
従来より、例えば突起を有するオブジェクトを仮想空間内に配置し、当該オブジェクトの画像を生成する画像処理システムがある(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
このような突起を有するオブジェクトの画像を生成する場合に、突起の接続部分が目立つことがあり、当該接続部分が自然に見えるようにするためには改善の余地があった。
【0005】
それ故、本発明の目的は、オブジェクトの接続部分が自然に見えるような画像を生成することが可能な画像処理プログラム、画像処理システム、画像処理装置、および画像処理方法を提供することである。
【課題を解決するための手段】
【0006】
上記の課題を解決すべく、本発明は、以下の構成を採用した。
【0007】
(第1の構成)
第1の構成の画像処理プログラムは、情報処理装置のコンピュータに、ディファードレンダリングに基づいて仮想空間内のオブジェクトの画像を生成させる。前記画像処理プログラムは、前記コンピュータに、前記仮想空間内の第1のオブジェクトについて、深度バッファへの深度情報の書き込みと、第1のバッファへの法線情報の書き込みと、第2のバッファへの色情報の書き込みとを少なくとも含む第1処理を行わせる。前記第1処理の後、前記画像処理プログラムは、前記コンピュータに、前記仮想空間内の第2のオブジェクトについて、深度テストを行わせるとともに、前記深度バッファへの深度情報の書き込みと、前記第1のバッファへの法線情報の書き込みと、前記第2のバッファへの色情報の書き込みとを少なくとも含む第2処理を行わせ、前記第2処理における前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの深度情報と前記深度バッファに既に記憶された深度情報との差に基づいて、当該差が小さい部分について前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とがブレンドされるように、前記第2のオブジェクトの法線情報を前記第1のバッファに書き込ませる。そして、前記画像処理プログラムは、前記コンピュータに、少なくとも前記第1のバッファ及び前記第2のバッファに記憶された情報に基づいてレンダリングを行わせることにより画像を生成させる。
【0008】
上記によれば、第1のオブジェクトと深度情報が近い部分について、第1のオブジェクトの法線情報と第2のオブジェクトの法線情報とがブレンドされるように、第2のオブジェクトの法線情報が第1のバッファに書き込まれる。これにより、第1のオブジェクトと第2のオブジェクトとの接続部分が目立たず、自然に見える画像を生成することができる。
【0009】
(第2の構成)
第2の構成では、上記第1の構成において、前記コンピュータに、前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを前記差に応じたブレンド率でブレンドした法線情報を、前記第1のバッファに書き込ませてもよい。
【0010】
上記によれば、上記深度情報の差に応じてブレンド率が設定されるため、より自然に第1のオブジェクトの法線情報と第2のオブジェクトの法線情報とをブレンドすることができる。
【0011】
(第3の構成)
第3の構成では、上記第2の構成において、前記ブレンド率は、前記差が小さいほど、前記第1のバッファに既に記憶された法線情報の割合が高くなるように設定されてもよい。
【0012】
上記によれば、上記深度情報の差が小さいほど、第1のバッファに既に記憶された法線情報の割合が高くなるため、上記深度情報の差が小さい部分について第2のオブジェクトの法線情報を第1のオブジェクトの法線情報に近づけて第1のバッファに書き込むことができる。これにより、第2のオブジェクトを第1のオブジェクトに馴染ませることができる。
【0013】
(第4の構成)
第4の構成では、上記第1の構成において、前記コンピュータに、前記第2のオブジェクトの前記第1のバッファへの法線情報の書き込みにおいて、前記差が所定範囲内の画素について、前記第2のオブジェクトの法線情報と前記第1のバッファに既に記憶された法線情報とを所定の比率でブレンドした法線情報を、前記第1のバッファに書き込ませてもよい。
【0014】
上記によれば、上記深度情報の差が所定範囲内の画素について、第2のオブジェクトの法線情報と第1のオブジェクトの法線情報とを所定の比率でブレンドすることができる。
【0015】
(第5の構成)
第5の構成では、上記第1から第4の構成の何れかにおいて、前記コンピュータにさらに、前記第2のオブジェクトの前記第2のバッファへの色情報の書き込みにおいて、前記差に基づいて、当該差が小さい部分について前記第2のオブジェクトの色情報と前記第2のバッファに既に記憶された色情報とがブレンドされるように、前記第2のオブジェクトの色情報を前記第2のバッファに書き込ませてもよい。
【0016】
上記によれば、第2のオブジェクトの色情報と第1のオブジェクトの色情報とをブレンドすることができる。
【0017】
(第6の構成)
第6の構成では、上記第1から第5の構成の何れかにおいて、前記第1のオブジェクトは、キャラクタの第1の部位であってもよく、前記第2のオブジェクトは、前記キャラクタの第2の部位であってもよい。
【0018】
上記によれば、キャラクタの第1の部位と第2の部位との接続部分を目立たないようにすることができる。
【0019】
(第7の構成)
第1の構成の画像処理プログラムは、情報処理装置のコンピュータに、仮想空間内のオブジェクトの画像を生成させる。前記画像処理プログラムは、前記コンピュータに、前記仮想空間内の第1のオブジェクトについて、深度バッファへの深度情報の書き込みと、法線バッファへの法線情報の書き込みと、フレームバッファへの描画とを少なくとも含む第1処理を行わせる。前記第1処理の後、前記画像処理プログラムは、前記コンピュータに、前記仮想空間内の第2のオブジェクトについて、深度テストを行わせるとともに、前記フレームバッファへの描画を含む第2処理を行わせ、前記第2処理における前記第2のオブジェクトの前記フレームバッファへの描画において、前記第2のオブジェクトの深度情報と前記深度バッファに既に記憶された深度情報との差に基づいて、当該差が小さい部分について前記第2のオブジェクトの法線情報と前記法線バッファに既に記憶された法線情報とがブレンドされるように法線情報を算出させ、当該算出された法線情報に基づくレンダリングを行わせる。
【0020】
上記によれば、第1のオブジェクトと深度情報が近い部分について、第1のオブジェクトの法線情報と第2のオブジェクトの法線情報とがブレンドされ、ブレンドされた法線情報に基づいて画像がレンダリングされる。これにより、第1のオブジェクトと第2のオブジェクトとの接続部分が目立たないような画像を生成することができる。
【0021】
また、他の実施形態は、画像処理システムであってもよいし、画像処理装置であってもよいし、画像処理方法であってもよい。
【発明の効果】
【0022】
本発明によれば、第1のオブジェクトと第2のオブジェクトとの接続部分が目立たず、自然に見える画像を生成することができる。
【図面の簡単な説明】
【0023】
【
図1】本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図
【
図2】本体装置2の内部構成の一例を示すブロック図
【
図3】仮想空間に配置される仮想オブジェクト100を表す3次元モデルの一例を示す図
【
図5】
図4のステップ2において腕部102をGバッファに書き込む際の処理を概念的に表した図
【
図6】ブレンド処理が行われない場合の仮想オブジェクト100の画像と、ブレンド処理が行われる場合の仮想オブジェクト100の画像とを概念的に示した図
【
図7】ゲーム処理の実行中に本体装置2のメモリに記憶されるデータの一例を示す図
【
図8】本体装置2のプロセッサ81によって実行されるゲーム処理の一例を示すフローチャート
【
図9】ステップS104の画像生成処理の一例を示すフローチャート
【発明を実施するための形態】
【0024】
(システム構成)
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
【0025】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0026】
左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0027】
本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
【0028】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
【0029】
図2は、本体装置2の内部構成の一例を示すブロック図である。
【0030】
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、CPU(Central Processing Unit)と、GPU(Graphics Processing Unit)とを含む。プロセッサ81は、CPU機能及びGPU機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。なお、CPUとGPUとがそれぞれ別々のプロセッサとして構成されてもよい。また、プロセッサ81の内部には、一時的にデータを記憶するメモリが設けられる。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0031】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0032】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
【0033】
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0034】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。
【0035】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0036】
プロセッサ81は、左側端子17、右側端子21、および下側端子27に接続される。プロセッサ81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、プロセッサ81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、プロセッサ81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0037】
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
【0038】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
【0039】
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
【0040】
(画像生成処理の概要)
次に、本実施形態の画像生成処理について説明する。本実施形態のゲームシステム1(画像処理システムの一例)は、3次元の仮想空間に仮想オブジェクトを配置し、当該仮想オブジェクトを用いてゲームを行う。ゲームシステム1は、仮想カメラに基づいて仮想オブジェクトを含む仮想空間の画像を生成し、生成した画像をディスプレイ12又は据置型モニタ(以下、これらを「表示装置」という)に出力する。以下、本実施形態のゲームシステム1において行われる画像生成処理の概要について説明する。
【0041】
図3は、仮想空間に配置される仮想オブジェクト100を表す3次元モデルの一例を示す図である。仮想オブジェクト100は、仮想空間内のキャラクタオブジェクトである。例えば、ユーザによって制御されるプレイヤキャラクタである。なお、仮想オブジェクト100は、プロセッサ81によって自動で制御されるノンプレイヤキャラクタであってもよい。
【0042】
仮想オブジェクト100は、胴体部101と、胴体部101に接続された腕部102とを備える。胴体部101は、複数の頂点V1(
図3の黒色の丸印)を有し、これら複数の頂点V1によって略球形状を形成している。また、腕部102は、複数の頂点V2(
図3の白色の丸印)を有する。腕部102は、例えば、長楕円体を半分に切り取ったような形状であり、その先端部は丸みを帯びてやや尖った形状となっている。腕部102の根元部分は、胴体部101の球面に接触するように接続される。なお、
図3では、一方の腕部102のみが示されているが、胴体部101の反対側には他方の腕部102が設けられる。仮想オブジェクト100は、胴体部101及び腕部102の他にも、他の部位(脚部等)を備えてもよいが、ここでは説明のために省略する。
【0043】
仮想オブジェクト100は、例えばユーザの操作により、仮想空間内で移動したり、所定のアクションを行ったりする。例えば、仮想オブジェクト100の腕部102は、ユーザの操作等に応じたアニメーションに基づいて動作する。具体的には、腕部102の根元部分が胴体部101の球面に接触したまま、腕部102が胴体部101の球面上を移動したり、腕部102の姿勢が胴体部101に対して変化したりする。
【0044】
図3に示される仮想オブジェクト100が仮想空間に配置される。仮想空間には、仮想カメラ、1又は複数の光源、仮想オブジェクト100、及び、その他のオブジェクト(例えば、仮想空間に固定されたオブジェクト、仮想空間を移動可能な敵オブジェクト等)が配置される。プロセッサ81によって画像生成処理が行われることで、仮想カメラから仮想オブジェクト100を見た画像が生成されて、表示装置に表示される。画像生成処理では、仮想空間に設定された光源に基づく陰影が付加される。
【0045】
図4は、本実施形態の画像生成処理の概要を示す図である。
図4では、プロセッサ81(具体的にはGPU)が、胴体部101と腕部102とを備える仮想オブジェクト100をフレームバッファにレンダリングする場合の処理の流れが示されている。本実施形態では、レンダリングの方法として、例えばディファードレンダリング(ディファードシェーディングともいう)が用いられる。
【0046】
図4に示されるように、プロセッサ81は、Gバッファ(Geometry Buffer)と深度バッファとを用いて画像を生成する。Gバッファ及び深度バッファは、例えば、プロセッサ81内部のメモリ又はDRAM85の一部の記憶領域である。Gバッファは、法線情報を記憶する第1のGバッファと、色情報を記憶する第2のGバッファとを含む。第1のGバッファには、画像として生成されるときの画素毎の法線情報が記憶される。すなわち、仮想空間に配置された仮想オブジェクト100の表面上の点Pを画像平面上に投影した場合に、当該仮想オブジェクト100上の点Pは画像平面上の特定の画素Epに対応付けられるが、当該画素Epに対して、点Pの法線情報が記憶される。具体的には、法線情報として、法線の方向を示すx、y、z座標値が記憶される。
【0047】
また、第2のGバッファには、画素毎の色情報が記憶される。また、Gバッファには、これらの他にも、反射情報(スペキュラ)、ラフネス等が記憶される。
【0048】
また、深度バッファには、画素毎の深度値(仮想カメラから見たときの奥行きを示す値)を示す深度情報が記憶される。
【0049】
具体的には、プロセッサ81は、ステップ1において、胴体部101をGバッファに書き込む。より具体的には、プロセッサ81は、胴体部101の法線情報を第1のGバッファに書き込むとともに、胴体部101の色情報を第2のGバッファに書き込む。
図4では、胴体部101の法線情報として、モノクロの円形の画像が示されているが、これは、各画素の法線方向をその画素の濃淡で表したものである。なお、この画像は、第1のGバッファに記憶された法線情報をあくまでも概念的に画像として表したものであるため、各画素における法線方向を正確にその画素の濃淡で表したものではない。
【0050】
また、第2のGバッファに書き込まれる胴体部101の色情報は、胴体部101に予め設定された色の情報であり、光源や反射等に関係なく定められる色に関する情報である。色情報は、ベースカラー(アルベド、拡散反射光とも言う)に関する情報を含む。色情報は、例えばRGB値であってもよい。第2のGバッファには、画素毎の色情報が書き込まれる。例えば、胴体部101が球形であって赤色である場合、第2のGバッファには、赤色の円が胴体部101の色情報として書き込まれる。また、胴体部101が球形であり、球面に模様(テクスチャ)が付される場合、第2のGバッファには、模様を有する円が胴体部101の色情報として書き込まれる。
【0051】
また、プロセッサ81は、ステップ1において、胴体部101の深度情報を深度バッファに書き込む。胴体部101の深度情報は、画素毎の深度値に関する情報である。プロセッサ81は、胴体部101の表面上の各点の位置と仮想カメラの位置とに基づいて、胴体部101の画素毎の深度値を算出し、算出した各画素の深度値を深度バッファに書き込む。なお、
図4では、胴体部101の深度情報として、モノクロの円形の画像が示されているが、これは、深度バッファに記憶された各画素の深度値の大きさをその画素の濃淡で表したものである。例えば、仮想カメラからの距離が遠いほど深度値が大きくなる場合において、
図4では、深度値が大きい画素の色を明るく、深度値が小さい画素の色を暗く表している。
【0052】
次に、プロセッサ81は、ステップ2において、腕部102をGバッファに書き込む。具体的には、プロセッサ81は、腕部102の色情報を第2のGバッファに書き込む。また、プロセッサ81は、腕部102の法線情報を第1のGバッファに書き込む。また、プロセッサ81は、腕部102の深度情報を深度バッファに書き込む。ここで、プロセッサ81は、ステップ2において第1のGバッファに腕部102の法線情報を書き込む際に、深度情報に基づくブレンド処理を行う。ステップ2の詳細については後述する。
【0053】
次に、プロセッサ81は、ステップ3において、Gバッファに書き込まれた情報と、光源情報とに基づいて、フレームバッファにレンダリングを行う。ステップ3では、これらの情報の他にも、反射情報やラフネスを用いて、レンダリングが行われる。そして、フレームバッファにレンダリングされた画像が表示装置に出力されて表示される。
【0054】
ここで、上記ステップ2の詳細について説明する。
図5は、
図4のステップ2において腕部102をGバッファに書き込む際の処理を概念的に表した図である。
【0055】
図5に示されるように、腕部102の法線情報をGバッファに書き込む際には、プロセッサ81は、まず、ステップ2-1として、胴体部101の深度値と腕部102の深度値との差を算出する。具体的には、プロセッサ81は、画素毎に、既に深度バッファに記憶された深度値(すなわち、胴体部101の深度値)と、新たに書き込む腕部102の深度値との差を算出する。なお、
図5では、分かりやすさのため、新たに深度バッファに書き込む腕部102の輪郭を破線で示している。
図5に示されるように、腕部102の根元部分は胴体部101と接続されているため、当該接続部分の深度値は、胴体部101と腕部102とで近い。すなわち、接続部分(
図5の実線の長方形の部分)の近傍においては、胴体部101の深度値と腕部102の深度値との差は小さい。接続部分から離れるほど、胴体部101の深度値と腕部102の深度値との差は大きくなる。
【0056】
次に、プロセッサ81は、ステップ2-2において、第1のGバッファに腕部102の法線情報を書き込む。具体的には、プロセッサ81は、ステップ2-1で算出した深度値の差に応じて、既に第1のGバッファに記憶されている法線情報(すなわち、胴体部101の法線情報)と、新たに書き込む腕部102の法線情報とをブレンドするブレンド処理を行う。プロセッサ81は、各画素について深度値の差に基づくブレンド処理を行う。
【0057】
具体的には、プロセッサ81は、深度値の差が小さいほど、既に第1のGバッファに記憶されている法線情報の割合が大きくなるように、既に第1のGバッファに記憶されている法線情報と腕部102の法線情報とをブレンドし、ブレンドした法線情報を第1のGバッファに書き込む。例えば、プロセッサ81は、深度値の差が「0」の画素については、既に第1のGバッファに記憶されている法線情報の割合が100%となるようにブレンド後の法線情報を算出する。すなわち、深度値の差が「0」である画素については、既に第1のGバッファに記憶されている法線情報が保持される。また、深度値の差が「0」から所定値の間である画素については、深度値の差が小さいほど、既に記憶された胴体部101の法線情報に近づくように、ブレンド後の法線情報を算出する。深度値の差が所定値を超える画素については、腕部102の法線情報の割合が100%になる。すなわち、深度値の差が所定値を超える画素については、既に第1のGバッファに記憶されている法線情報が、腕部102の法線情報に上書きされる。
【0058】
例えば、プロセッサ81は、以下に示す式1に基づいて、各画素の法線情報を算出し、算出した法線情報を第1のGバッファに書き込んでもよい。
法線情報=胴体部の法線情報×w+腕部の法線情報×(1-w) (式1)
【0059】
ここで、wは、ブレンド率であり、胴体部101の法線情報の割合を示す。wは、0から1までの値を取り得る。wは、例えば、深度値の差が0の場合には1になり、深度値の差が0~所定値の範囲では当該差に応じて線形的に変化し、深度値の差が所定値を超える場合には0になる。また、法線情報は、法線方向を表すx、y、z各軸の座標値である。したがって、深度値の差が比較的小さい画素については、既に第1のGバッファに記憶されている胴体部101の法線情報と腕部102の法線情報とをブレンドした法線情報が、第1のGバッファに書き込まれる。深度値の差が小さいほど、算出される法線方向は、既に第1のGバッファに記憶されている胴体部101の法線方向に近づく。
【0060】
なお、「胴体部101の法線情報と腕部102の法線情報とをブレンドする」とは、胴体部101の法線情報と腕部102の法線情報との間の値を算出することを意味し、例えば、胴体部101の法線情報と腕部102の法線情報との線形補間を算出することを含む。なお、2つの値をブレンドする方法として、線形補間に限らず、任意の方法が用いられてもよい。例えば、所定の関数に基づいて、深度値の差に応じて胴体部101の法線情報と腕部102の法線情報とがブレンドされてもよい。また、例えば、深度値の差に応じて予め複数のブレンド率が定められており、当該予め定められたブレンド率で胴体部101の法線情報と腕部102の法線情報とがブレンドされてもよい。
【0061】
このように、画素毎に深度値の差を算出し、当該差に基づいて胴体部101の法線情報と腕部102の法線情報とをブレンドするブレンド処理が行われる。これにより、胴体部101と腕部102との接続部分の法線方向の差が小さくなる。
図5は、第1のGバッファに書き込まれる法線方向が、仮想空間内で横から見た場合にどのような方向を示すものであるかを説明する図である。
図5の(a)では、胴体部101の法線情報と腕部102の法線情報とのブレンド処理が行われない場合について示されている。この場合、腕部102は胴体部101の表面から突出するように設けられているため、胴体部101と腕部102との接続部分では、胴体部101の法線方向と腕部102の法線方向とは大きく異なり、これらの角度は例えば約90度となる。
【0062】
一方、ブレンド処理が行われる場合は、
図5の(b)に示されるように、胴体部101と腕部102との接続部分において、新たに第1のGバッファに書き込まれる腕部102の法線方向が、既に第1のGバッファに記憶されている胴体部101の法線方向に近づく。接続部分から離れるほど、新たに第1のGバッファに書き込まれる法線情報は、本来の腕部102の法線情報に近くなる。
【0063】
フレームバッファに画像が描画される際には、光源の位置及び方向と、Gバッファに記憶された法線情報とに基づいて陰影に関する計算が行われ、陰影が付加された画像が生成される。本実施形態の画像生成処理では、胴体部101と腕部102との接続部分近傍において、胴体部101の法線情報と腕部102の法線情報とがブレンドされる。このため、接続部分近傍においては、胴体部101と腕部102の法線方向が近くなり、当該接続部分の陰影が近くなる。これにより、胴体部101と腕部102との接続部分を目立たないようにすることができ、腕部102を胴体部101に馴染ませることができる。
【0064】
なお、法線情報に加えて、色情報に対して上記と同様の方法によりブレンド処理が行われてもよい。具体的には、腕部102の色情報を第2のGバッファに書き込む際に、腕部102の深度値と深度バッファに記憶された胴体部101の深度値との差を算出し、当該差に応じて、既に第2のGバッファに記憶された胴体部101の色情報と、腕部102の色情報とをブレンドした色情報を、第2のGバッファに書き込む。具体的には、深度値の差が小さいほど、既に記憶された胴体部101の色情報の割合が大きくなるように、胴体部101の色情報と腕部102の色情報とをブレンドする。これにより、胴体部101と腕部102との接続部分の色情報が近くなり、腕部102を胴体部101に馴染ませることができる。
【0065】
例えば、プロセッサ81は、以下に示す式2に基づいて、各画素の色情報を算出し、算出した色情報を第2のGバッファに書き込んでもよい。
色情報=胴体部の色情報×w2+腕部の色情報×(1-w2) (式2)
【0066】
ここで、w2は、ブレンド率であり、胴体部101の色情報の割合を示す。w2は、例えば、深度値の差が0の場合には1になり、深度値の差が0~所定値の範囲では当該差に応じて線形的に変化し、深度値の差が所定値を超える場合には0になる。
【0067】
図6は、ブレンド処理が行われない場合の仮想オブジェクト100の画像と、ブレンド処理が行われる場合の仮想オブジェクト100の画像とを概念的に示した図である。
図6の左側は、法線情報のブレンド処理が行われない場合の仮想オブジェクト100の画像を示し、
図6の右側は、法線情報のブレンド処理が行われる場合の仮想オブジェクト100の画像を示す。
図6に示されるように、法線情報のブレンド処理が行われない場合、光源の位置や方向にもよるが、胴体部101と腕部102との接続部分が比較的はっきりする。これは、光源の位置や方向によって、胴体部101の陰影と腕部102の陰影とが異なるからである。一方、法線情報のブレンド処理が行われる場合、胴体部101と腕部102との接続部分近傍の法線方向が近くなる。このため、光源の位置や方向によらず、胴体部101と腕部102との接続部分がぼやけ、これらが滑らかに繋がっているような画像となる。これにより、胴体部101と腕部102との接続部分が目立たない自然な画像を生成することができる。腕部102が胴体部101に対して動く場合でも、胴体部101と腕部102との接続部分を目立たないようにすることができ、腕部102を胴体部101に馴染ませることができる。すなわち、ゲーム中に腕部102が胴体部101に対して動く場合、腕部102と胴体部101との角度が鋭角から鈍角に変化することがあるが、これらの相対的な位置や姿勢がどのように変化しても、画像生成処理において上記のように法線情報のブレンド処理が行われる。このため、胴体部101と腕部102との接続部分近傍の法線方向が近くなり、胴体部101と腕部102との接続部分が目立たないような画像を生成することができる。
【0068】
なお、腕部102以外の部位(例えば脚部や頭部)が胴体部101に接続される場合も、同様の処理が行われる。例えば、胴体部101がGバッファに書き込まれた後、脚部をGバッファに書き込む際に、胴体部101の深度情報と脚部の深度情報との差が算出される。当該差に応じて、既に第1のGバッファに記憶された胴体部101の法線情報と脚部の法線情報とをブレンドした法線情報が、第1のGバッファに書き込まれる。そして、Gバッファに書き込まれた情報、光源情報、反射情報、ラフネス等に基づいて、レンダリングが行われる。
【0069】
(画像生成処理の詳細)
次に、画像生成処理の詳細について説明する。まず、本体装置2のメモリ(プロセッサ81内のメモリ、DRAM85、フラッシュメモリ84、又は外部記憶媒体等)に記憶されるデータについて説明する。
図7は、ゲーム処理の実行中に本体装置2のメモリに記憶されるデータの一例を示す図である。
【0070】
図7に示されるように、本体装置2のメモリ(プロセッサ81内のメモリ、DRAM85、フラッシュメモリ84、又は外部記憶媒体等)には、プログラムと、操作データと、仮想オブジェクトデータと、光源情報とが記憶される。また、メモリ(例えば、プロセッサ81内のメモリ)は、Gバッファと、深度バッファと、フレームバッファとを含む。Gバッファには、法線情報を記憶する第1のGバッファと、色情報を記憶する第2のGバッファとがある。また、Gバッファには、反射情報を記憶する領域がある。
【0071】
プログラムは、後述するゲーム処理を実行するためのプログラムである。プログラムは、後述する画像生成処理を行うための画像処理プログラムを含む。プログラムは、スロット23に装着される外部記憶媒体又はフラッシュメモリ84に予め記憶されており、ゲームの実行時にDRAM85に読み込まれる。なお、プログラムは、ネットワーク(例えばインターネット)を介して他の装置から取得されてもよい。
【0072】
操作データは、左コントローラ3及び右コントローラ4から取得された操作に関するデータである。例えば、操作データは、左コントローラ3及び右コントローラ4から所定の時間間隔(例えば、1/200秒間隔)で本体装置2に送信され、メモリに記憶される。
【0073】
仮想オブジェクトデータは、仮想オブジェクト100に関するデータであり、仮想オブジェクト100の形状等外観に関するデータを含む。具体的には、仮想オブジェクトデータは、仮想オブジェクト100の胴体部101の形状に関するデータ、腕部102の形状に関するデータ、胴体部101の色に関するデータ、腕部102の色に関するデータ等を含む。また、仮想オブジェクトデータは、胴体部101及び腕部102の反射情報に関するデータを含む。また、仮想オブジェクトデータは、仮想空間における仮想オブジェクト100の位置や向きに関するデータと、胴体部101に対する腕部102の位置や姿勢に関するデータとを含む。
【0074】
光源情報は、仮想空間に設定される光源に関する情報である。光源情報は、光源の数、各光源の種類、位置、方向に関する情報を含む。なお、本実施形態では、ゲームのシーンに応じて、光源の数、各光源の種類、位置、方向が異なる。
【0075】
Gバッファは、上記法線情報を記憶する第1のGバッファと、上記色情報を記憶する第2のGバッファとを含む。また、Gバッファには、反射情報が記憶される。また、深度バッファには深度情報が記憶される。また、フレームバッファには、表示装置に出力される画像が記憶される。
【0076】
(本体装置2におけるゲーム処理の詳細)
次に、本体装置2において行われるゲーム処理の詳細について説明する。
図8は、本体装置2のプロセッサ81によって実行されるゲーム処理の一例を示すフローチャートである。
【0077】
図8に示されるように、プロセッサ81は、まず、初期処理を実行する(ステップS100)。具体的には、プロセッサ81は、3次元の仮想空間を設定し、仮想空間に仮想オブジェクト100、仮想カメラ、光源、その他のゲームに用いられる各種オブジェクトを配置する。プロセッサ81は、初期処理を実行した後、次のステップS101~ステップS106の処理を所定のフレーム時間間隔(例えば、1/60秒間隔)で繰り返し実行する。
【0078】
ステップS101において、プロセッサ81は、コントローラからの操作データを取得する。
【0079】
次に、プロセッサ81は、取得した操作データに基づいて、仮想オブジェクト100の制御を行う(ステップS102)。ここでは、プロセッサ81は、操作データに基づいて、仮想オブジェクト100を仮想空間内において移動させたり、所定のアクションを行わせたりする。また、プロセッサ81は、操作データに基づいて、仮想オブジェクト100の胴体部101を動作させたり、腕部102を動作させたりする。また、プロセッサ81は、仮想オブジェクト100の制御に応じた処理(例えば、所定のアクションに応じた処理)を行う。
【0080】
次に、プロセッサ81は、仮想カメラの制御を行う(ステップS103)。プロセッサ81は、仮想カメラの視野内に仮想オブジェクト100が含まれるように、仮想カメラを制御する。例えば、プロセッサ81は、仮想オブジェクト100の移動に応じて、仮想カメラを仮想空間内で移動させたり、仮想カメラの姿勢を変化させたりする。また、プロセッサ81は、操作データに基づいて、仮想カメラの位置および姿勢を変化させてもよい。
【0081】
次に、プロセッサ81は、画像生成処理を行う(ステップS104)。ここでは上述した方法により画像が生成されてフレームバッファに記憶される。ステップS104の画像生成処理の詳細については後述する。
【0082】
次に、プロセッサ81は、画像出力処理を行う(ステップS105)。具体的には、プロセッサ81は、ステップS104でフレームバッファに記憶した画像を表示装置(ディスプレイ12又は外部の表示装置)に出力する。また、プロセッサ81は、ステップS102の処理の結果に応じた音声を出力する。
【0083】
次に、プロセッサ81は、ゲーム処理を終了するか否かを判定する(ステップS106)。例えば、プレイヤによってゲームの終了が指示された場合、プロセッサ81は、ゲーム処理を終了すると判定し(ステップS106:YES)、
図8に示すゲーム処理を終了する。プロセッサ81は、ゲーム処理を終了しないと判定した場合(ステップS106:NO)、ステップS101の処理を再び実行する。以上で、
図8に示すゲーム処理の説明を終了する。
【0084】
(画像生成処理)
次に、上記ステップS104の画像生成処理の詳細について説明する。
図9は、ステップS104の画像生成処理の一例を示すフローチャートである。なお、
図9では、胴体部101及び腕部102を有する仮想オブジェクト100の画像を生成する場合を例にして説明するが、仮想オブジェクト100は、胴体部101及び腕部102以外にも部位を有してもよい。また、仮想カメラの撮像範囲に含まれる他のオブジェクトについても、仮想オブジェクト100と同様の処理が行われるが、他のオブジェクトについての処理については省略する。
【0085】
ステップS121において、プロセッサ81は、胴体部101の法線情報及び色情報をGバッファに書き込む。具体的には、プロセッサ81は、まず、深度テストを行って、オブジェクト同士の前後関係を判定する。胴体部101の手前側(仮想カメラ側)に他のオブジェクトが存在しない場合、プロセッサ81は、胴体部101の法線情報を第1のGバッファに書き込むとともに、胴体部101の色情報を第2のGバッファに書き込む。また、プロセッサ81は、胴体部101の深度情報を深度バッファに書き込む(ステップS122)。
【0086】
次に、プロセッサ81は、腕部102の深度値を算出して深度テストを実行する(ステップS123)。深度テストの結果、腕部102の深度値が胴体部101の深度値よりも小さい場合(腕部102の方が胴体部101よりも仮想カメラ側に位置している場合)、プロセッサ81は、次のステップS124に処理を進める。
【0087】
ステップS124において、プロセッサ81は、深度バッファに書き込まれている胴体部101の深度値を読み取り、当該胴体部101の深度値とステップS123で算出した腕部102の深度値との差分dを計算する。ここではプロセッサ81は、各画素の深度値の差分dを算出する。
【0088】
次に、プロセッサ81は、深度値の差分dに基づいて、既に第1のGバッファに記憶されている胴体部101の法線情報と、腕部102の法線情報とをブレンドした法線情報を、第1のGバッファに書き込む(ステップS125)。具体的には、プロセッサ81は、差分dが小さいほど、既に第1のGバッファに記憶されている胴体部101の法線情報の割合が高くなるように、胴体部101の法線情報と腕部102の法線情報とをブレンドした法線情報を算出する。例えば、プロセッサ81は、上述した式1に基づいて、各画素の法線情報を算出する。そして、プロセッサ81は、算出した法線情報を第1のGバッファに書き込む。
【0089】
次に、プロセッサ81は、腕部102の色情報を第2のGバッファに書き込む(ステップS126)。ここで、プロセッサ81は、上記深度値の差分dに基づいて、既に第2のGバッファに記憶されている胴体部101の色情報と、腕部102の色情報とをブレンドした色情報を、第2のGバッファに書き込む。具体的には、プロセッサ81は、差分dが小さいほど、既に第2のGバッファに記憶されている胴体部101の色情報の割合が高くなるように、胴体部101の色情報と腕部102の色情報とをブレンドした色情報を算出し、算出した色情報を第2のGバッファに書き込む。なお、プロセッサ81は、ステップS126において上記ブレンド処理を行わず、腕部102の色情報を第2のGバッファに書き込んでもよい。
【0090】
次に、プロセッサ81は、腕部102の深度情報を深度バッファに書き込む(ステップS127)。
【0091】
そして、プロセッサ81は、Gバッファに記憶された情報と光源情報とに基づく描画処理を行う(ステップS128)。具体的には、プロセッサ81は、Gバッファに記憶された法線情報、色情報、反射情報、光源情報等に基づいて、フレームバッファに画像をレンダリングする。ここでは、各画素に対して、Gバッファに記憶された法線情報と光源情報とに基づく陰影計算が行われ、さらに反射情報に基づいて光の反射の影響が加えられる。また、プロセッサ81は、これらの情報に加えて、ラフネス、深度情報等にも基づいて、画像をレンダリングしてもよい。このようにして陰影や反射が付加された画像が生成されて、フレームバッファに記憶される。以上で
図9の画像生成処理の説明を終了する。
【0092】
以上のように、本実施形態の画像生成処理では、プロセッサ81は、まず、仮想オブジェクト100の胴体部101(第1のオブジェクト)について、Gバッファに法線情報及び色情報を書き込むとともに、深度バッファに深度情報を書き込む(ステップS121~ステップS122)。次に、プロセッサ81は、腕部102(第2のオブジェクト)について、Gバッファに法線情報及び色情報の書き込みを行うとともに、深度バッファに深度情報の書き込みを行う(ステップS124~ステップS127)。具体的には、腕部102のGバッファへの法線情報の書き込みにおいて(ステップS125)、プロセッサ81は、腕部102の深度情報と深度バッファに既に記憶された胴体部101の深度情報との差が小さい部分についてGバッファに既に記憶された胴体部101の法線情報と腕部102の法線情報とがブレンドされるように、腕部102の法線情報をGバッファに書き込む(ステップS125)。そして、プロセッサ81は、Gバッファに書き込まれた情報(法線情報、色情報等)と光源情報とに基づいてレンダリングを行い、フレームバッファに画像を記憶する。
【0093】
このように、胴体部101と腕部102との深度値が近い部分について、胴体部101と腕部102の法線情報をブレンドすることで、胴体部101と腕部102との接続部分が目立たないような画像を生成することができ、腕部102を胴体部101に馴染ませることができる。
【0094】
なお、法線情報や色情報に限らず、反射情報についても上記と同様の方法によってブレンド処理が行われてもよい。例えば、深度値の差分dに基づいて、胴体部101の反射に関するパラメータと腕部102の反射に関するパラメータとをブレンドした値が算出される。胴体部101と腕部102との接続部分において、胴体部101の反射に関するパラメータと、腕部102の反射に関するパラメータとが大きく異なる場合には、これらが近い値になるようにブレンドされる。これにより、胴体部101と腕部102との接続部分を目立たないようにすることができ、腕部102を胴体部101に馴染ませることができる。
【0095】
(変形例)
以上、本実施形態の画像処理について説明したが、上記実施形態は単なる一例であり、例えば以下のような変形が加えられてもよい。
【0096】
例えば、上記実施形態では、先にGバッファへの胴体部101の書き込みを行い、その後、Gバッファへの腕部102の書き込みを行うようにした。他の実施形態では、先にGバッファへの腕部102の書き込みを行い、その後、Gバッファへの胴体部101の書き込みを行ってもよい。この場合、Gバッファへの胴体部101の書き込みを行う際に、既に深度バッファに記憶された腕部102の深度値と、胴体部101の深度値との差を算出する。当該差が小さいほど、既にGバッファに記憶されている腕部102の法線情報の割合が高くなるように、胴体部101の法線情報と腕部102の法線情報とがブレンドされる。そして、ブレンド後の法線情報がGバッファに書き込まれる。このようにすることで、胴体部101と腕部102との接続部分に近いほど、後から書き込まれる胴体部101の法線情報が、既に記憶されている腕部102の法線情報に近づく。これにより、胴体部101が腕部102に馴染んだような画像が表示される。色情報や反射情報をブレンドする場合も同様である。
【0097】
また、上記実施形態では、仮想オブジェクト100の一部位である胴体部101についてGバッファへの書き込みを行い、その後、同じ仮想オブジェクト100の別部位である腕部102についてGバッファへの書き込みを行った。他の実施形態では、第1のオブジェクトについてGバッファへの書き込みを行い、その後、第2のオブジェクトについてGバッファへの書き込みを行ってもよい。第2のオブジェクトのGバッファへの書き込みを行う際には、上述のように深度情報の差に応じたブレンド処理が行われてもよい。
【0098】
すなわち、プロセッサ81は、第1のオブジェクトの色情報及び法線情報のGバッファへの書き込みを行うとともに、第1のオブジェクトの深度情報の深度バッファへの書き込みを行い、その後、第2のオブジェクトの色情報及び法線情報のGバッファへの書き込みを行うとともに、第2のオブジェクトの深度情報の深度バッファへの書き込みを行ってもよい。プロセッサ81は、第2のオブジェクトの法線情報のGバッファへの書き込みを行う際には、既に深度バッファに記憶されている第1のオブジェクトの深度情報と、第2のオブジェクトの深度情報との差分を算出し、当該差分が小さいほど、既にGバッファに記憶されている第1のオブジェクトの法線情報の割合が高くなるように、第1のオブジェクトの法線情報と第2のオブジェクトの法線情報とをブレンドした法線情報を、Gバッファに書き込んでもよい。
【0099】
第1のオブジェクト及び第2のオブジェクトは、上述した胴体部101及び腕部102のように滑らかな曲面形状に限らず、任意の形状であってもよい。例えば、第1のオブジェクト及び第2のオブジェクトは、立方体のような角を有する形状であってもよい。また、第1のオブジェクト及び第2のオブジェクトは、キャラクタオブジェクトの一部位に限らず任意のオブジェクトであってもよい。第1のオブジェクト及び第2のオブジェクトは、別々のオブジェクトであってもよい。
【0100】
また、上記実施形態では、胴体部101の法線情報と腕部102の法線情報とを深度値の差に応じたブレンド率でブレンドした。他の実施形態では、深度値の差が所定範囲内である場合、胴体部101の法線情報と腕部102の法線情報とを予め定められたブレンド率でブレンドしてもよい。すなわち、深度値の差が所定範囲内である画素については、同じブレンド率(例えば50%)で胴体部101の法線情報と腕部102の法線情報とをブレンドしてもよい。色情報や反射情報についても同様である。
【0101】
また、他の実施形態では、法線情報についてのみ上記ブレンド処理が行われてもよいし、色情報についてのみ上記ブレンド処理が行われてもよいし、反射情報についてのみ上記ブレンド処理が行われてもよい。
【0102】
また、上記実施形態では、深度バッファに深度情報が書き込まれたが、他の実施形態では、深度情報もGバッファに書き込まれてもよい。また、上記各バッファに書き込まれた情報は、他のバッファに書き込まれてもよい。
【0103】
また、上記では、ディファードレンダリングを用いて画像がレンダリングされる場合について説明したが、フォワードレンダリングを用いて画像がレンダリングされてもよい。本実施形態のゲームのシーンに応じて、ディファードレンダリングを用いて画像をレンダリングする場合と、フォワードレンダリングを用いて画像をレンダリングする場合とがあってもよい。例えば、仮想空間に光源が複数存在するシーンにおいては、ディファードレンダリングを用いて画像がレンダリングされ、光源が比較的少ない別のシーンでは、フォワードレンダリングを用いて画像がレンダリングされてもよい。
【0104】
フォワードレンダリングを用いて画像をレンダリングする場合において、上述のように深度値の差に応じてブレンドされた法線情報を用いて画像がレンダリングされてもよい。具体的には、まず、第1のオブジェクトについて、深度バッファへの深度値の書き込み、法線情報を格納する法線バッファへの法線情報の書き込みを行うとともに、フレームバッファに画像を描画する。その後、第2のオブジェクトについて、フレームバッファに画像をレンダリングする際に、第2のオブジェクトの深度値と、深度バッファに記憶された深度値との差を算出し、当該差が小さい部分について、第2のオブジェクトの法線情報と法線バッファに既に記憶された法線情報とをブレンドし、当該ブレンドされた法線情報に基づいて、画像をレンダリングしてもよい。この場合、深度値の差に応じたブレンド率で法線情報がブレンドされてもよいし、深度値の差が所定範囲内の画素については所定のブレンド率で法線情報がブレンドされてもよい。
【0105】
また、フォワードレンダリングを用いて画像をレンダリングする場合において、上述のように深度値の差に応じて、各オブジェクトの色情報(各オブジェクトの画像)がブレンドされてもよい。具体的には、まず、第1のオブジェクトについて、深度バッファに深度値を書き込むとともに、フレームバッファに第1のオブジェクトの画像(陰影が付加された画像)を描画する。その後、第2のオブジェクトについて、フレームバッファに画像を描画する際に、第2のオブジェクトの深度値と、深度バッファに記憶された深度値(第1のオブジェクトの深度値)との差を算出し、当該差が小さい部分について、第2のオブジェクトの画像とフレームバッファに既に記憶された画像(第1のオブジェクトの画像)とをブレンドしてもよい。2つの画像をブレンドする際には、色情報(例えば、RGB値)が、上記のように深度値の差に応じたブレンド率でブレンドされてもよい。また、深度値の差が所定範囲内の画素については所定のブレンド率で色情報がブレンドされてもよい。
【0106】
また、上記実施形態では、仮想オブジェクト100を用いてゲームを行うこととしたが、上述した画像生成処理は、ゲーム画像に限らず任意の画像を生成する際に用いられてもよい。
【0107】
また、上記ハードウェア構成は単なる一例であり、他の任意のハードウェアにおいて上記画像生成処理が行われてもよい。例えば、パーソナルコンピュータ、タブレット端末、スマートフォン、インターネット上のサーバ等、任意の情報処理装置において上記処理が実行されてもよい。また、上記処理は、複数の装置を含む情報処理システムにおいて実行されてもよい。
【0108】
また上記実施形態及びその変形例に係る構成は、互いに矛盾しない限り、任意に組み合わせることが可能である。また、上記は本発明の例示に過ぎず、上記以外にも種々の改良や変形が加えられてもよい。
【符号の説明】
【0109】
1 ゲームシステム
2 本体装置
81 プロセッサ
100 仮想オブジェクト
101 胴体部
102 腕部