[1.ゲームシステムの構成]
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。図1および図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
図3は、本体装置2の一例を示す六面図である。図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、図6に示すスピーカ88)を備えている。図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
図4は、左コントローラ3の一例を示す六面図である。図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、図1および図4に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
左コントローラ3は、アナログスティック32を備える。図4に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
左コントローラ3は、各種操作ボタンを備える。左コントローラ3は、ハウジング31の主面上に4つの操作ボタン33~36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および左方向ボタン36)を備える。さらに、左コントローラ3は、録画ボタン37および-(マイナス)ボタン47を備える。左コントローラ3は、ハウジング31の側面の左上に第1Lボタン38およびZLボタン39を備える。また、左コントローラ3は、ハウジング31の側面の、本体装置2に装着される際に装着される側の面に第2Lボタン43および第2Rボタン44を備える。これらの操作ボタンは、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
図5は、右コントローラ4の一例を示す六面図である。図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施形態においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ4は、左コントローラ3と同様、ハウジング51の主面上に4つの操作ボタン53~56(具体的には、Aボタン53、Bボタン54、Xボタン55、およびYボタン56)を備える。さらに、右コントローラ4は、+(プラス)ボタン57およびホームボタン58を備える。また、右コントローラ4は、ハウジング51の側面の右上に第1Rボタン60およびZRボタン61を備える。また、右コントローラ4は、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、図3に示す構成の他、図6に示す各構成要素81~91、97、および98を備える。これらの構成要素81~91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fi(登録商標)の規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
プロセッサ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は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、図6で示しているため図7では省略している。
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。図7に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
左コントローラ3は、各ボタン103(具体的には、ボタン33~39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
通信制御部101は、各入力部(具体的には、各ボタン103、および、アナログスティック32)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、および、アナログスティック52を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
[2.ゲームシステムにおける処理の概要]
次に、図8~図24を参照して、ゲームシステム1において実行される処理の概要について説明する。本実施形態においては、ゲームシステム1は、3次元の仮想空間であるゲーム空間に地形オブジェクトやキャラクタ(例えば、ユーザによって操作されるプレイヤキャラクタ)が配置されたゲーム画像を生成し、表示装置に表示させる。なお、本実施形態において、ゲーム画像が表示される表示装置は、上述のディスプレイ12であってもよいし、据置型モニタであってもよい。
[2-1.ボクセル]
本実施形態では、ゲーム空間におけるいくつかのオブジェクトについては、ボクセルデータによって形状が規定される。ここで、ボクセルとは、ゲーム空間に格子状に並べられた直方体状(より具体的には、立方体状)の領域であり、ボクセルデータとは各ボクセルに関する情報を示すデータである。以下では、ボクセルデータによって形状が規定されるオブジェクトを、「ボクセルオブジェクト」と呼ぶ。本実施形態においては、ゲームシステム1は、ゲーム空間内に設定される複数のボクセルについて、ボクセルオブジェクトをゲーム空間内において生成するためのデータとして、ボクセルデータを記憶する。
図8は、ボクセルオブジェクトである地形オブジェクトの一例を示す図である。図8に示すように、本実施形態においては、地面等の地形を表す地形オブジェクトは、ボクセルデータによって形状が規定される(つまり、ボクセルオブジェクトである)。図8に示す各立方体は、地形オブジェクトを示す。なお、図8においては、地形オブジェクトの辺となる部分を太線で示しているが、この太線は図面を見やすくする目的で付したものであり、実際には地形オブジェクトの辺が太く表示される必要はない。
図8に示す地形オブジェクトは、例えば、「ボクセルに設定されるボクセルデータに含まれるパラメータが所定値より大きい場合は当該ボクセルの位置に立方体を配置し、所定値以下の場合は当該ボクセルの位置に何も配置しない」というルールで生成されたものである。図8に示す地形オブジェクトは、ボクセルとボクセルオブジェクトとの関係をわかりやすく例示する目的で示されるものである。本実施形態においては、実際には、例えば後述する図13に示す地形オブジェクトのように、複雑な形状となるようなルールで(ボクセルデータに基づいて)ボクセルオブジェクトが生成される。なお、ボクセルデータに基づいてボクセルオブジェクトの形状を決定するルールは任意である。他の実施形態においては、ゲームシステム1は、オブジェクトデータに基づいて、図8に示すようなボクセルオブジェクトを生成してもよいし、図13に示すようなボクセルオブジェクトを生成してもよい。
ボクセルオブジェクトについては、各ボクセルのボクセルデータを変更することで、形状を変化させることができる。図9および図10は、図8に示す地形オブジェクトの一部が削除される前後の様子の一例を示す図である。すなわち、図9に示す地形オブジェクトのうちの斜線部分が破壊される場合、地形オブジェクトは図10に示すような形状に変化する。このとき、ゲームシステム1は、上記斜線部分のボクセルについて、地形オブジェクトが存在しないことを示すように、後述のボクセルデータを書き換えることで、地形オブジェクトを容易に消去することができる。なお、ゲームシステム1は、地形オブジェクトを追加する場合も、地形オブジェクトを消去する場合と同様に、各ボクセルのボクセルデータを変更することで、地形オブジェクトの形状を容易に変化させることができる。
このように、ゲームシステム1は、ボクセルデータを書き換えることによって、ボクセルオブジェクトの形状を自由に変化させることができる。例えば、ゲームにおいて地形オブジェクトが何らかの理由(例えば、プレイヤキャラクタが地形オブジェクトに打撃を加える等)で破壊される結果として当該地形オブジェクトの形状を変化させる場合、ゲームシステム1は、地形オブジェクトの外形形状を示すデータ(すなわち、後述するメッシュ)を直接変更するのではなく、地形オブジェクトの生成に用いられるボクセルデータを変更することで、地形オブジェクトの形状を自由に変化させることができる。
なお、本実施形態においては、ゲーム空間の全体にボクセルが規定される(つまり、ボクセルが設定されるボクセル空間がゲーム空間全体に対応する)ものとする。ただし、ボクセル空間はゲーム空間の全体に設定される必要はなく、ゲーム空間の一部の領域に設定されてもよい。ボクセル空間がゲーム空間の一部の領域に設定される場合、当該ボクセル空間におけるボクセルに関するボクセルデータによってボクセルオブジェクトの形状が規定され、ゲーム空間における当該ボクセル空間の位置によって当該ゲーム空間におけるボクセルオブジェクトの位置が規定される。また、ゲーム空間には、複数のボクセル空間が設定されてもよく、ゲーム空間の全体に設定される主ボクセル空間と、ゲーム空間の一部の領域に設定される副ボクセル空間とが設定されてもよい。このとき、ゲームシステム1は、ボクセル空間毎にボクセルデータを記憶する。
図11は、ボクセルデータの一例を示す図である。ボクセルデータは、ゲーム空間に定義される各ボクセルについて、密度データ、第1マテリアルID、第2マテリアルID、マテリアル混合比データ、および、状態データを含む。本実施形態におけるボクセルデータには、これらのデータが1つのボクセル毎に設定される。
密度データは、当該ボクセルに基づいたボクセルオブジェクトの形状(具体的には、後述するメッシュで規定される形状)を規定するために用いられる指標である密度を示す。詳細は後述するが、ボクセルオブジェクトの表面(すなわち、後述するメッシュ)の位置および形状は、上記の密度に基づいて決定される。
本実施形態においては、密度は、下限値(例えば、0)から上限値(例えば、255)までの範囲の整数値をとり得る。本実施形態においては、ゲームシステム1は、ボクセルに設定される密度の値が高いと、当該ボクセル内においてボクセルオブジェクト内の領域が占める体積の割合が大きくなりやすく、当該密度の値が低いと当該割合が小さくなりやすいように、密度に基づいてボクセルオブジェクトの表面形状を決定する。このように、密度は、当該ボクセル内においてボクセルオブジェクト内の領域が占める体積の割合に影響を与える指標である。密度は、当該ボクセルの空間が仮想的に中身(すなわち、ボクセルオブジェクトの仮想的な中身)に占められている度合いを示す指標であるとも言える。例えば、密度が0である場合には当該ボクセル内が空であり、密度が255の場合には当該ボクセル内の全てがボクセルオブジェクトの中身であり、密度が0と255の間の値の場合には値に応じた割合で当該ボクセル内をボクセルオブジェクトの中身が占めるものとすることができる。そして、上記密度に基づいて、メッシュの形状、すなわちボクセルオブジェクトの表面形状を決定することができる。メッシュは、ボクセルにおいて中身が存在する部分の表面であると言うこともできるし、ボクセルにおいて中身が存在する部分と存在しない部分の境界であると言うこともできる。なお、上記密度に基づいて生成されたボクセルオブジェクト内の領域が占める体積は、密度が示す割合と厳密に一致する体積になる必要はない。例えば、図8のようなボクセルオブジェクトを生成する手法と、図13のようなボクセルオブジェクトを生成する手法とでは、同じ密度に基づいていてもボクセルオブジェクトの体積が異なることもある。
他の実施形態においては、密度は、ボクセル内の領域の全体をボクセルオブジェクト内の領域が占める体積が占める状態と、ボクセル内の領域にボクセルオブジェクト内の領域が占める体積が含まれない状態とのいずれかを示すものであってもよい。例えば、密度データは、0または1のみをとり得るデータであってもよい。
第1マテリアルIDおよび第2マテリアルIDは、当該ボクセルのマテリアル(換言すれば、物質)を示す情報である。ここで、本実施形態においては、ボクセルには、例えば、砂、岩、または、土といったマテリアルが設定される。なお、ゲームシステム1においては、ボクセルに設定され得るマテリアルとして複数種類のマテリアルが用意されている(図12に示すマテリアルデータを参照)。本実施形態においては、1つのボクセルには、用意された複数種類のマテリアルのうち2つまでのマテリアルが設定可能である。第1マテリアルIDは、当該ボクセルに設定される第1のマテリアルを示すIDであり、第2マテリアルIDは、当該ボクセルに設定される第2のマテリアルを示すIDである。詳細は後述するが、ボクセルオブジェクトのマテリアル(すなわち、ボクセルオブジェクトのポリゴンに設定されるマテリアル)は、ボクセルに設定されるマテリアルに基づいて決定される。
上記のように、本実施形態においては、ボクセルデータは、マテリアルを示すIDを含むものとしたが、他の実施形態においては、ボクセルデータは、マテリアルの内容(すなわち、後述する名称や、性質や、描画設定の情報)を直接示すデータを含むデータ構造であってもよい。
マテリアル混合比データは、当該ボクセルにおけるそれぞれのマテリアルの比率を示すデータの一例である。本実施形態においては、1つのボクセルに設定されるマテリアルIDが2つまでなので、上記第1マテリアルIDが示すマテリアルと上記第2マテリアルIDが示すマテリアルの一方の比率を示すマテリアル混合比データで他方の比率も表すことができる。本実施形態においては、マテリアル混合比は、0以上1以下の値によって第1のマテリアルおよび第2のマテリアルからなる全体に対する第2のマテリアルの割合を示す値とする。例えば、あるボクセルに設定されるマテリアル混合比が0.4である場合、当該ボクセルにおいて、第1のマテリアルと第2のマテリアルとが0.6:0.4の比で構成されることを表す。詳細は後述するが、ボクセルオブジェクトの見た目および性質はマテリアルに基づいて決定される。マテリアル混合比は、ボクセルオブジェクトの見た目および性質を決定するために用いられる。マテリアル混合比は、他の実施形態においては、第1のマテリアルの割合を示す値であってもよい。また、マテリアルのボクセル内の比率は、それぞれのマテリアル毎の割合を示すそれぞれの値によって表されてもよい。特に、他の実施形態において、マテリアルを2種類まででなくて3種類以上設定可能な場合には、それぞれのマテリアル毎の割合をそれぞれ示す複数の値としてマテリアルのボクセル内の比率を表すことになる。
なお、本実施形態において、ボクセルには必ずしも2種類のマテリアルが設定される必要はなく、1種類のマテリアルが設定されてもよい。例えば、あるボクセルに設定されるマテリアルが1種類である場合、第1マテリアルIDが当該マテリアルを示し、マテリアル混合比は0に設定される。
状態データは、当該ボクセルに設定される状態を示す。状態データの具体的な内容や種類数は任意である。本実施形態においては、状態データは、当該ボクセルに設定されるダメージの量を示すデータを含む。なお、他の実施形態においては、状態データには、例えば当該ボクセルが濡れた状態であるか否か(および、その程度)を示すデータが含まれていてもよい。
上記のように、本実施形態においてはボクセルデータにはマテリアルIDが含まれるので、ゲームシステム1は、当該マテリアルIDが示すマテリアルの内容を規定するマテリアルデータを記憶する。図12は、マテリアルデータの一例を示す図である。図12に示すように、本実施形態におけるマテリアルデータにおいては、マテリアル毎に、マテリアルIDと、当該マテリアルに設定される名称、性質、および、描画設定の情報とが対応付けられる。
マテリアルデータに含まれる名称は、当該マテリアルに設定される名称(例えば、土、砂、草等)である。なお、ゲーム中においては、ボクセルオブジェクトのマテリアルの名称が表示されてもよい。このような表示を行うために、マテリアルデータはマテリアルの名称の情報を含む。
マテリアルデータに含まれる性質は、当該マテリアルに設定される性質である。マテリアルの性質とは、当該マテリアルが設定されるボクセルオブジェクトがゲームにおいて有する性質である。なお、マテリアルの性質の具体的な内容や種類数は任意である。例えば、マテリアルの性質として下記の情報の少なくともいずれかが設定されてもよい。
・硬さ
・重さ
・滑り易さ
・プレイヤキャラクタが接触した場合のダメ―ジ設定
・温度
・ボクセルオブジェクトに他のオブジェクトが接着可能か否か
・プレイヤキャラクタがボクセルオブジェクトを破壊または取得した場合におけるプレイヤキャラクタの体力の回復量
・プレイヤキャラクタがボクセルオブジェクトを破壊または取得した場合にプレイヤキャラクタが取得するゲーム内通貨の量
他の実施形態においては、マテリアルの性質を示す情報として、上記とは異なる情報が設定されてもよい。
本実施形態においては、マテリアルデータは、マテリアルの性質を特定する情報として、当該性質を示すIDを含む(図12参照)。図示しないが、ゲームシステム1は、用意される性質毎に、性質IDに対して当該性質の内容(例えば、上述の重さや滑りやすさを示す値)が対応付けられた性質情報を記憶する。ゲームシステム1は、上記性質情報を参照することで、マテリアルについて設定される性質の具体的な内容を特定することができる。
マテリアルデータに含まれる描画設定は、当該マテリアルが設定されるボクセルオブジェクトの描画に用いられるテクスチャ等、描画に関する設定を示す情報である。本実施形態においては、マテリアルデータは、描画設定の情報として、当該マテリアルが設定されるボクセルオブジェクトの描画に用いるテクスチャのIDを含む(図12参照)。図示しないが、ゲームシステム1は、用意されるテクスチャ毎に、テクスチャIDと、当該テクスチャIDが示すテクスチャとを対応付けたテクスチャ情報を記憶する。ゲームシステム1は、上記テクスチャ情報を参照することで、マテリアルについて設定されるテクスチャの具体的な内容を特定することができる。なお、他の実施形態においては、描画設定の情報として、テクスチャの情報に加えて、シェーディングの設定に関する任意の情報が設定されてもよい。たとえば、反射率や、法線に関する情報等が設定されていてもよい。
また、マテリアルデータは、図12に示すデータ以外の他のデータを含んでいてもよい。例えば、マテリアルデータは、サウンド設定に関するデータを含んでいてもよい。例えば、サウンド設定に関するデータは、当該ボクセルに基づくボクセルオブジェクト上をプレイヤキャラクタが歩いた場合に出力される足音を規定するデータであってもよい。
なお、マテリアルデータは、マテリアルの性質および/または描画設定を特定可能な任意の形式のデータであってよい。例えば、他の実施形態においては、マテリアルデータは、マテリアルIDやテクスチャIDを含むデータ構造に代えて、マテリアルの性質および/または描画設定を直接示すデータを含むデータ構造を有していてもよい。
[2-2.ボクセルデータの更新]
ゲーム中においては、上述のボクセルデータが更新されることで、ボクセルオブジェクトが変形される。本実施形態においては、ボクセルオブジェクトを更新させるためのゲームイベント(以下、「更新イベント」と呼ぶ。)が発生した場合、ゲームシステム1はボクセルデータの更新を行う。更新イベントの具体的な内容は任意である。更新イベントは、例えば、ゲームに登場するキャラクタが、ボクセルオブジェクトを変形させるアクションを行った(例えば、プレイヤキャラクタがボクセルオブジェクトに対してパンチを行った)ことであってもよいし、ボクセルオブジェクトを変形させる事象が発生したこと(例えば、キャラクタが投げつけたオブジェクトがボクセルオブジェクトに接触したことや、爆弾が爆発したこと)であってもよい。
図13は、更新イベントが発生した場合におけるゲーム空間の一例を示す図である。図13に示す状況は、ボクセルオブジェクトである地形オブジェクト202に対してプレイヤキャラクタ201がパンチアクションを行った状況である。詳細は後述するが、図13に示す例においては、プレイヤキャラクタ201によるパンチアクションが当たった位置の周囲の地形オブジェクト202が消去されるように、ボクセルデータが更新される。これによって、プレイヤキャラクタ201によるパンチアクションによって地形オブジェクト202が破壊される様子が表現される。
本実施形態においては、更新イベントが発生した場合、ゲームシステム1は、ボクセルオブジェクトの更新を行う更新範囲(図13に示す例においては、更新範囲203)をゲーム空間において設定する。更新範囲の位置、形状、および、大きさは任意である。更新範囲の位置は、例えば、発生した更新イベントに関するオブジェクト(例えば、パンチを行ったプレイヤキャラクタ)とボクセルオブジェクトとが接触した位置に基づいて決定されてもよい。図13に示す例においては、プレイヤキャラクタ201によるパンチが当たった位置に基づいて更新範囲203の位置が決定されてよく、例えば、当たった位置、あるいは、当たった位置から所定距離だけ前方の位置が更新範囲203の中心位置とされてもよい。更新範囲の形状および大きさは、更新イベントの種類に応じた形状となるように予め決定されてもよい。例えば、プレイヤキャラクタ201のパンチによる更新イベントが発生した場合、図13に示すような所定の大きさの球体として、更新範囲の形状および大きさが決定されてもよい。また、更新範囲の大きさは、発生した更新イベントの影響度合いを示す値(例えば、パンチの強さや爆発の大きさ)に応じて決定されてもよい。
ゲームシステム1は、設定された更新範囲に対応するボクセルについて密度を変更する。なお、更新範囲に対応するボクセルとは、例えば、更新範囲内のボクセル、あるいは、更新範囲と重複するボクセルである。密度が変更される結果、後述する処理によってボクセルオブジェクトのメッシュが変更されることで、ボクセルオブジェクトの形状(見た目の形状、および、接触判定に用いられる形状)が変更される。なお、他の実施形態においては、ゲームシステム1は、更新範囲内に含まれるボクセルについて密度を変更することに加えて、当該ボクセルにおけるマテリアル(すなわち、第1のマテリアル、第2のマテリアル、および、マテリアル混合比)を変更してもよいし、当該ボクセルにおける状態を変更してもよい。
本実施形態においては、ゲームシステム1は、ボクセルが更新範囲に含まれるか否かの判定を、SDF(Signed Distance Field:符号付距離場)を用いて行う。ゲームシステム1は、ゲーム空間内に設定される更新範囲を示すSDFを設定し、SDFの値に基づいて上記の判定を行う。SDFは、任意の位置について、規定する形状からの距離を符号付で表すものである。図14は、更新範囲の一例を示す図である。図14に示す例においては、ゲーム空間に球形の更新範囲が設定されている。例えば、図14に示す例においては、ゲーム空間内の位置のうち、SDFが表す形状の内側の位置についてはSDFの値が負の値となり、SDFが表す形状の外側の位置についてはSDFの値が正の値となるようにSDFが設定される。この例では、SDFの値の正であるか負であるかによって、更新範囲に含まれるか否かを判定することができる。また、符号付距離の値を用いることで、単純な内外判定だけでなく、補正や補間等の処理を行うこともできる。
上記においては、更新範囲内のボクセルオブジェクトが消去されたように変形されるという変更がボクセルオブジェクトに加えられる例について説明したが、更新範囲を用いてボクセルオブジェクトに加えられる変更はこれに限らない。例えば、更新範囲内にボクセルオブジェクトが新たに追加される(つまり、更新範囲の分だけボクセルオブジェクト内の領域が占める体積が増加する)変更がボクセルオブジェクトに対して加えられてもよい。また、ボクセルの密度は変更されずに、更新範囲内におけるボクセルのマテリアルのみが変化するような変更がボクセルオブジェクトに対して加えられてもよい。また、ボクセルの密度の変更とマテリアルの変更とが複合的に加えられてもよい。
[2-3.頂点の算出]
上記のようにしてボクセルの密度が更新された場合、ゲームシステム1は、更新後のボクセルデータに基づいて頂点を設定する。上記の頂点とは、ボクセルオブジェクトのメッシュの頂点となり得るものである。詳細は後述するが、本実施形態においては、上記の頂点について簡略化が行われ、簡略化後の頂点がボクセルオブジェクトのメッシュの頂点となる。
図15は、頂点の設定方法の一例を示す図である。なお、以下において説明する図15~図24では、図面を見やすくし、説明を分かりやすくする目的で、ボクセル、頂点、メッシュ等を2次元で表現しているが、実際には3次元空間におけるボクセルに基づいて3次元空間において頂点およびメッシュが設定される。本実施形態においては、ゲームシステム1は、存在することを示す設定の密度(すなわち、後述する基準値以上の密度)を有するボクセルと、存在しないことを示す設定の密度(すなわち、後述する基準値未満の密度)を有するボクセルとが隣接する部分に対し、周囲の複数のボクセルの位置と密度とに基づいた座標に頂点を設定させる手法を用いる。以下、この手法の詳細について説明する。
上述のように、本実施形態においては、ボクセルに設定される密度は、0~255の範囲で設定される。密度が0のボクセルは完全に空中で、密度が255のボクセルは完全に中身が詰まっている状態を表す。0と255の間の密度は補間的に扱われ、頂点の決定に用いられる。そして、本実施形態においては、密度が基準値以上のボクセルをオブジェクト内とし、密度が基準値未満のボクセルをオブジェクト外であると仮想的に扱う。密度が基準値以上のボクセルを、存在することを示すボクセルであるとし、密度が基準値未満のボクセルを、存在しないことを示すボクセルであるとして仮想的に扱う、ということもできる。密度が0のボクセルのみをオブジェクト外と定義する(すなわち基準値=1とする)必要はなく、当該基準値は、例えば128とする。図15に示す例においては、ボクセル211および外側の他のボクセルにおいては密度が0、ボクセル212は密度が基準値未満である100、ボクセル213、214においては密度が基準値以上である150、210と設定されているものとする。本実施形態においては、ゲームシステム1は、密度が基準値以上のボクセルと基準値未満のボクセルとの間に頂点を生成する。具体的には、隣接する8個(図面では4個)のボクセルに跨がった領域(図面では点線に囲まれた領域)ごとに、頂点を生成するか否かの判定を行う。つまり、密度が基準値以上のボクセルと基準値未満のボクセルの両方に跨がる領域に頂点を生成する。頂点の座標は、XYZの軸ごとに、隣接するボクセル同士の密度を比較し、密度の差に基づいた補間によって決定される。なお、頂点間を結ぶ直線の位置および向きを規定する法線情報を設定しておくことで、さらに法線情報に基づいて頂点の座標を計算することができる。なお、法線情報は、少なくとも一部のボクセルについて予め保持しておくようにしてもよいし、保持されていない場合は法線情報も隣接するボクセル同士の密度に基づいて算出されてもよい。なお、図15において、ボクセル212の密度は基準値未満であるので、頂点の有無の判定においては、ボクセル212はオブジェクト外として扱われるが、ボクセル212の密度の値自体は、生成される頂点の座標計算に用いられる。仮にボクセル212の密度よりも低い値に基準値を設定した場合は、図15のボクセル212における右上側と左上側に頂点がさらに増える結果となる。
上記のように頂点を設定することで、設定された各頂点(あるいは、設定された各頂点に対して後述の簡略化処理を行った後の各頂点)を結ぶメッシュを生成する場合には、ボクセルごとの密度をある程度反映した体積を有する形状を生成することができる。ただし、隣接ボクセルとの関係によっては、密度0のボクセルが一部オブジェクト内の領域を含むことや、密度255のボクセルが一部オブジェクト外の領域を含むようなこともあり得る。また、本実施形態では、基準値未満のボクセルはオブジェクト外として処理するため、オブジェクト内として処理する場合に比べて頂点が少なくなる分、体積も小さくなる。このように、厳密に密度の値に対応する体積となるようにポリゴンメッシュを算出する必要は無い。
[2-4.頂点のマテリアルの決定]
ゲームシステム1は、上記のように設定された各頂点についてマテリアルを決定する。頂点のマテリアルは、当該頂点の周囲のボクセルに関するマテリアルに基づいて決定される。頂点の周囲のボクセルとは、例えば、当該頂点を生成するか否かの判定に用いられたボクセル(すなわち、上述の「ボクセルに跨がった領域」と重なるボクセル)である。なお、他の実施形態においては、頂点のマテリアルの決定に用いられるボクセルと、頂点の生成の判定に用いられるボクセルとは同じである必要はなく、異なっていてもよい。
図16は、頂点のマテリアルを決定する方法の一例を示す図である。図16に示す例においては、4つのボクセル215~218に関して頂点219が設定されたものとし、当該4つのボクセル215~218が上述の「頂点の周囲のボクセル」である。なお、実際の3次元空間では、頂点の周囲のボクセルの数は8つとなる。また、図16に示す例においては、ボクセル215については、密度が255、第1のマテリアルが「砂」、マテリアル混合比は0(つまり、第1のマテリアル:第2のマテリアル=1:0、もしくは第2のマテリアルは設定されなくともよい)と設定されるものとする。ボクセル216については、密度が0(第1および第2のマテリアルは設定されなくともよい)と設定されるものとする。ボクセル217については、密度が204、第1のマテリアルが「砂」、第2のマテリアルは「草」、マテリアル混合比は0.3(つまり、第1のマテリアル:第2のマテリアル=0.7:0.3)と設定されるものとする。ボクセル218については、密度が153、第1のマテリアルが「土」、第2のマテリアルは「草」、マテリアル混合比は0.4(つまり、第1のマテリアル:第2のマテリアル=0.6:0.4)と設定されるものとする。また、頂点219の位置を示す座標は、(X,Y)=(0.8,0.6)であるとする。なお、この座標の座標系は、図16における左右方向をX座標とし、上下方向をY座標とし、ボクセル215~218の中心位置(図13に示す白丸の位置)のうちで左下のボクセル217の中心位置を(0,0)とする座標系である。
頂点のマテリアルを決定する場合、ゲームシステム1は、周囲のボクセルにおけるマテリアル毎に、当該マテリアルの密度と、ボクセルから頂点までの距離に基づく重み値とに基づいて評価値を算出する。まず、重み値は、ボクセル毎に算出され、当該ボクセルの中心位置から頂点までの距離が近いほど大きくなるように算出される。本実施形態においては、当該ボクセルの中心位置を(x1,y1)とし、頂点の座標を(x2,y2)としたとき、あるボクセルについての重み値は、次の式(1)に従って算出される。
(重み値)=|(1-x1)-x2|・|(1-y1)-y2|…(1)
図16に示す例においては、上式(1)に従って算出される各ボクセル215~218の重み値は次のようになる。
(ボクセル215の重み値)=|(1-0)-0.8|・|(1-1)-0.6|=0.12
(ボクセル216の重み値)=|(1-1)-0.8|・|(1-1)-0.6|=0.48
(ボクセル217の重み値)=|(1-0)-0.8|・|(1-0)-0.6|=0.08
(ボクセル218の重み値)=|(1-1)-0.8|・|(1-0)-0.6|=0.32
また、ゲームシステム1は、マテリアルの密度をボクセル毎に算出する。ここで、マテリアルの密度とは、当該ボクセルに設定されているマテリアルのうちで当該マテリアルが占める割合に、当該ボクセルの密度を乗算した値である。なお、本実施形態においては、上記ボクセルの密度としては、上述した0から255までの値を、0から1までの値に正規化した値を用いるものとする。図16に示す例においては、ボクセル215については、設定されているマテリアルは砂のみであるので、砂のマテリアルに関する上記割合は1であり、当該ボクセルの密度は1であるので、砂のマテリアルの密度は1となる。ボクセル216については、密度が0であってマテリアルも設定されていないので、マテリアルの密度は算出されない。もしくは、何らかのマテリアルが設定されている場合は、当該マテリアルの密度は0となる。ボクセル217については、設定されている砂のマテリアルと草のマテリアルとの上記割合はそれぞれ、0.7、0.3であり、当該ボクセルの密度は204/255=0.8であるので、砂のマテリアルの密度は、0.7・0.8=0.56となり、草のマテリアルの密度は、0.3・0.8=0.24となる。ボクセル218については、設定されている土のマテリアルと草のマテリアルとの上記割合はそれぞれ、0.6、0.4であり、当該ボクセルの密度は153/255=0.6であるので、土のマテリアルの密度は、0.6・0.6=0.36となり、土のマテリアルの密度は、0.4・0.6=0.24となる。
そして、ゲームシステム1は、上記の重み値と、マテリアルの密度とに基づいて、マテリアル毎の上記評価値を算出する。本実施形態においては、マテリアルの評価値は、各ボクセルについて算出された当該マテリアルの密度を、ボクセル毎の重み値に応じた重みを付して、周囲の各ボクセルについて合計した値である。図16に示す例においては、砂のマテリアルの評価値は、ボクセル215についてのマテリアルの密度が1、重み値が0.12であり、ボクセル217についてのマテリアルの密度が0.56、重み値が0.08であるので、1・0.12+0.56・0.08=0.1648となる。また、草のマテリアルの評価値は、ボクセル217についてのマテリアルの密度が0.24、重み値が0.08であり、ボクセル218についてのマテリアルの密度が0.24、重み値が0.32であるので、0.24・0.08+0.24・0.32=0.096となる。また、土のマテリアルの評価値は、ボクセル218についてのマテリアルの密度が0.36、重み値が0.32であるので、0.36・0.32=0.1152となる。
ゲームシステム1は、マテリアル毎の評価値に基づいて頂点のマテリアルを決定する。具体的には、評価値が大きいものから順に所定数のマテリアルが頂点のマテリアルとして決定される。本実施形態においては、評価値が大きい2つが頂点のマテリアルとして決定される。図16に示す例においては、砂、草、土のマテリアルの評価値は、それぞれ、0.1648、0.096、0.1152であるので、頂点のマテリアルとしては、砂のマテリアルと土のマテリアルとに決定される。また、ゲームシステム1は、決定された2つのマテリアルの比率を上記評価値に基づいて算出する。本実施形態においては、2つのマテリアルの比率は、上記マテリアル混合比と同様、全体に対する第2のマテリアルの割合である第2マテリアル比として表されてもよい。図16に示す例において、例えば第1のマテリアルが土のマテリアルであり、第2のマテリアルが砂のマテリアルと設定された場合、上記第2マテリアル比は、0.1648/(0.1648+0.1152)≒0.59で示される。なお、他の実施形態においては、2つのマテリアルの比率を表す値としては、第1のマテリアルの割合を示す値が用いられてもよい。また、それぞれのマテリアル毎の割合を示すそれぞれの値が用いられてもよい。
本実施形態においては、ゲームシステム1は、頂点の位置と、頂点に設定される第1および第2のマテリアルのマテリアルIDと、マテリアルの比率とを示す頂点データを生成して記憶する。ただし、頂点に設定されるマテリアルを管理する方法は任意である。他の実施形態においては、頂点データは、第1および第2のマテリアルの内容を直接示すデータを含むデータ構造であってもよい。
上記のように、本実施形態においては、ゲームシステム1は、頂点毎に、周囲の複数のボクセルのボクセルデータに含まれるマテリアルIDについて、当該マテリアルID毎の優先度パラメータ(たとえば、評価値)を当該ボクセルデータに基づいて算出する。そして、優先度パラメータに基づいて、優先度の高い所定個数(ここでは、2個)までのマテリアルIDを選択して頂点のマテリアルIDとして決定する。なお、優先度パラメータとして用いられる具体的なパラメータは、上記評価値に限らない。例えば、他の実施形態においては、上記重み値を用いずに、マテリアルの密度を用いて算出される評価値が優先度パラメータとして用いられてもよい。
なお、本実施形態においては、優先度パラメータの一例である評価値は、当該頂点の周囲の複数のボクセルの密度に基づいて、密度の高いボクセルに設定されたマテリアルの優先度が高くなるように(つまり、当該マテリアルの評価値が大きくなり、当該マテリアルが選択されやすくなるように)算出される。これによれば、ボクセルに設定される密度の大きさを反映して頂点のマテリアルを決定することができる。
また、本実施形態においては、優先度パラメータの一例である評価値は、当該頂点の周囲の複数のボクセルの基準位置(具体的には、中心位置)から当該頂点までの距離に基づいて、当該頂点に近いボクセルに設定されたマテリアルの優先度が高くなるように算出される。これによれば、ボクセルと頂点との距離を反映して頂点のマテリアルを決定することができる。
また、本実施形態においては、優先度パラメータの一例である評価値は、当該頂点の周囲の複数のボクセルのマテリアル混合比に基づいて、当該マテリアル混合比が高いマテリアルの優先度が高くなるように算出されるとも言うことができる。これによれば、1つのボクセルに複数のマテリアルが設定される場合において、各マテリアルの比率を反映して頂点のマテリアルを決定することができる。
[2-5.頂点の簡略化]
本実施形態においては、ゲームシステム1は、上記のようにして算出された各頂点について簡略化を行う。すなわち、ゲームシステム1は、上記のようにして算出された各頂点のいくつかをまとめて1つの頂点に置き換えることで、頂点数を減少させる。なお、詳細は後述するが、置き換えられる頂点の座標(すなわち、位置)およびマテリアルは、置き換え前の複数の頂点に基づいて設定される。このような簡略化によって、ボクセルオブジェクトのメッシュを構成する頂点の数やポリゴンの数を減少させることができ、処理に用いられるメモリ量を低減したり、処理負荷を低減したりすることができる。
本実施形態においては、ゲームシステム1は、SVO(Sparse Voxel Octree)を用いて各頂点を表現することで簡略化を行う。図17は、頂点の簡略化の一例を示す図である。なお、図17では、図17に示す(a)に示す実線で示される1つの正方形が1つの頂点区分領域を表す。ここで、頂点区分領域とは、ボクセルの中心位置を頂点とする正方形の領域であり(実際の3次元空間では、頂点区分領域は立方体または直方体である)、上述の図15および図16における点線を辺とする領域である。また、図17において、内部に「v」の文字が示されている頂点区分領域は、頂点が設定されている頂点区分領域を示す。
本実施形態においては、ゲームシステム1は、互いに隣接する所定個数(図17では4個、実際の3次元空間では8個)の頂点区分領域内の頂点について、簡略化が可能であるか否かを判定する。簡略化が可能であると判定される場合、当該所定個数の頂点区分領域内の頂点について簡略化が行われる。
図17に示す(a)は、簡略化が行われる前の状態である。図17に示す例においては、点線で囲まれる範囲内の頂点区分領域について簡略化可能と判定されるものとする。このとき、ゲームシステム1は、簡略化可能と判定される上記所定個数の各頂点区分領域内の頂点が、1つの頂点に置き換えられるように簡略化を行う(図17に示す(b)参照)。これによって、上記所定個数の頂点区分領域内の頂点が1つの頂点に簡略化されることとなる。
本実施形態においては、ゲームシステム1は複数段階で簡略化を行う。段階数は任意であるが、図17では、2段階目までを図示して説明する。図17に示す(b)は、1段階目の簡略化が行われた状態を示し、図17に示す(c)は、2段階目の簡略化が行われた状態を示している。2段階目の簡略化においては、1段階目の簡略化によって生じた頂点を対象として、簡略化が可能であるか否かが判定される。図17に示す例においては、図17に示す(b)において点線で囲まれる範囲内の頂点区分領域について簡略化可能と判定される結果、当該頂点区分領域の頂点が簡略化され、図17に示す(c)に示す状態となる。なお、1段階目の簡略化が可能であるか否かの判定条件と、2段階目の簡略化が可能であるか否かの判定条件とは同じ内容であってもよいし、異なる内容であってもよい。
簡略化が可能であるか否かの判定について、具体的な方法は任意である。本実施形態においては、上記判定のための条件として、ボクセルオブジェクトの形状に関する条件と、マテリアルに関する条件とが用いられる。本実施形態においては、ボクセルオブジェクトの形状に関する条件と、マテリアルに関する条件との両方が満たされる場合、簡略化可能であると判定され、ボクセルオブジェクトの形状に関する条件と、マテリアルに関する条件との少なくとも一方が満たされない場合、簡略化不可能であると判定される。
形状に関する条件とは、例えば、簡略化前の各頂点による形状と、簡略化後の各頂点による形状とが大きく変更されないことである。例えば、各頂点による形状が簡略化前後で大きく変更されないか否かは、簡略化前のメッシュと簡略化後のメッシュとの間の誤差を示す指標を算出し、当該指標が所定の許容値以下であるか否かによって判定することもできる。また例えば、簡略化前の各頂点による形状が中空の形状であるのに対して、簡略化後の各頂点による形状が中空でない形状となる(つまり、簡略化によって中空であるという情報が欠落してしまう)場合も、形状に関する条件が満たされないと判定される。なお、上記の場合が生じるか否かは、例えば、判定対象となる頂点区分領域に対応する各ボクセルの密度に基づいて判定することができる。また例えば、簡略化前の各頂点による形状が、2以上の頂点によってしか表現できず、1つの頂点では表現できないような形状である場合も、形状に関する条件が満たされないと判定される。なお、ボクセルオブジェクトの形状に関する条件としては、SVOを用いた従来の手法と同様の条件が用いられてもよい。
また、マテリアルに関する条件としては、本実施形態においては、簡略化の対象となる上記所定個数の頂点区分領域内の各頂点に設定されるマテリアルの種類数に関する条件が用いられる。図18は、マテリアルに関する条件の一例を示す図である。図18に示す(a)は、頂点221~224のマテリアルが、それぞれ、(草)、(草)、(草と土)、(草と土)である場合を示しており、図18に示す(b)は、頂点221~224のマテリアルが、それぞれ、(草と砂)、(草)、(草と土)、(草と土)である場合を示している。本実施形態においては、マテリアルに関する条件は、簡略化の対象となる上記各頂点に設定されるマテリアルの種類の合計が所定数以下となることである。例えば、マテリアルに関する条件は、1つの頂点に設定可能なマテリアルの数以下となることとする。本実施形態においては、上記所定数は2である。例えば、図18に示す(a)の場合には、簡略化の対象となる各頂点221~224に設定されるマテリアルの種類の合計は、草と土の2種類となるので、マテリアルに関する条件は満たされる。このとき、上述のオブジェクトの形状に関する条件が満たされることを条件に、各頂点221~224は簡略化可能と判定される。一方、図18に示す(b)の場合には、簡略化の対象となる各頂点221~224に設定されるマテリアルの種類の合計は、草と土と砂の3種類となるので、マテリアルに関する条件は満たされない。このとき、上述のオブジェクトの形状に関する条件が満たされるか否かに関わらず、各頂点221~224は簡略化不可能と判定される。
なお、ゲームシステム1において、厳密には異なる種類に分類されるマテリアルであっても、設定される性質が同じであって、見た目が異なる複数種類のマテリアルが用意されてもよい。このような複数種類のマテリアルの一部については、マテリアルに関する条件の判定においては同じ種類とみなして判定を行ってもよい。例えば、土のマテリアルに関して、性質は同じであるものの見た目(例えば、テクスチャの色や模様)が近い複数種類の土のマテリアルが用意される場合がある。このような場合、ゲームシステム1は、当該複数種類の土のマテリアルについては同じ種類とみなしてマテリアルに関する条件の判定を行ってもよい。
ここで、本実施形態においては、頂点に関してはボクセルと同様に、2種類までのマテリアルが設定可能である。これに対して、本実施形態においては、簡略化の対象となる各頂点に設定されるマテリアルの種類の合計が3種類以上である場合には、簡略化が行われない。すなわち、マテリアルの種類の合計が1つの頂点に設定可能なマテリアルの数を超える場合には簡略化が行われない。したがって、簡略化によって頂点の数を減らしたとしても、頂点に設定されたマテリアルの情報が簡略化によって欠落することはなく、マテリアルの情報を維持することができる。
本実施形態においては、簡略化後の頂点のマテリアルは、簡略化前の各頂点のマテリアルに基づいて決定される。具体的には、ゲームシステム1は、簡略化前の頂点に設定される1種類または2種類のマテリアルを、簡略化後の頂点における第1のマテリアルおよび第2のマテリアルに設定する。これによって、マテリアルの情報を維持することができる。なお、簡略化後のマテリアルの比率は、簡略化前の各頂点のマテリアルの比率に基づいて決定される。本実施形態においては、簡略化後のマテリアルの比率は、上述の評価値を用いて各頂点のマテリアルの比率を算出する方法と同様にして算出される。すなわち、ゲームシステム1は、簡略化後の頂点と簡略化前の頂点との距離に基づいて重み値を算出し、当該重み値と、簡略化前の頂点におけるマテリアルの密度(なお、上記[2-4.頂点のマテリアルの決定]で述べたマテリアルの評価値を、ここでのマテリアルの密度として用いることができる。)とに基づいて、マテリアル毎の評価値を算出する。そして、算出された各マテリアルの評価値に基づいてマテリアルの比率を算出する。
[2-6.メッシュの生成]
本実施形態においては、上記のようにして簡略化された各頂点に基づいて、ボクセルオブジェクトのメッシュが生成される。図19は、各頂点に基づいて生成されるメッシュの一例を示す図である。なお、図19に示す正方形は、上述の頂点区分領域、あるいは、簡略化によって複数の頂点区分領域がまとめられて1つになった頂点区分領域を示す。図19に示すように、ゲームシステム1は、頂点区分領域が隣接する頂点同士を結ぶ直線を辺とする多角形で構成されるメッシュを生成する。メッシュを構成する各多角形は三角形または四角形となる。
本実施形態においては、ゲームシステム1は、表示用メッシュと判定用メッシュとの2種類のメッシュを生成する。表示用メッシュは、ボクセルオブジェクトの表示のために用いられるメッシュである。判定用メッシュは、ボクセルオブジェクトのコリジョン判定のために用いられるメッシュである。詳細は後述するが、ゲームシステム1は、上記の2種類のメッシュを用いることで、ボクセルオブジェクトの表示およびコリジョン判定のそれぞれに適したメッシュを用いて処理を行うことができる。
本実施形態においては、ゲームシステム1は、表示用メッシュおよび判定用メッシュを、上述のSVOのデータに基づいて(すなわち、簡略化された各頂点に基づいて)生成する。これによれば、2種類のメッシュの生成に用いられる頂点データを共有することで、処理の効率化を図ることができる。なお、他の実施形態においては、ゲームシステム1は、頂点の簡略化を行わなくてもよく、簡略化されていない頂点に基づいて表示用メッシュおよび/または判定用メッシュを生成してもよい。
本実施形態においては、ゲームシステム1は、判定用メッシュを、表示用メッシュよりも簡易な形状となるように生成する。具体的には、ゲームシステム1は、判定用メッシュの頂点数が表示用メッシュの頂点数よりも少なくなるようにする。ここで、本実施形態においては、SVOのデータは、簡略化前の頂点のデータと、簡略化された頂点のデータとを八分木構造で保持するデータであるが、簡略化可能であるか否かの判定のために用いられたデータも含む。このデータは、例えば、簡略化後の頂点の候補として算出された頂点(仮の頂点と呼ぶ。)のデータ、および、簡略化前の頂点と当該仮の頂点との間の誤差を示す上述の指標のデータを含む。例えば、ゲームシステム1は、仮の頂点のうち、上記指標が所定の閾値(この閾値は、上記許容値よりも大きいものとする)以下である頂点を、判定用メッシュの生成に用いるようにしてもよい。これによれば、判定用メッシュの頂点数を表示用メッシュの頂点数よりも少なくすることができる。判定用メッシュの頂点数を表示用メッシュの頂点数よりも少なくすることで、コリジョン判定による処理負荷を軽減できる。また、表示用メッシュの頂点数を過度に減らすことがないのでボクセルオブジェクトの見た目を詳細に表現できる。
なお、他の実施形態においては、表示用メッシュおよび判定用メッシュは、同じデータに基づいて生成されてもよいし、異なるデータに基づいて生成されてもよい。また、表示用メッシュと判定用メッシュは同じ形状であってもよい(ただし、この場合でも両者に設定されるマテリアルは異なっていてもよい)。また、判定用メッシュの頂点数は、表示用メッシュの頂点数と同じであってもよいし、表示用メッシュの頂点数よりも多くてもよい。
[2-6-1.表示用メッシュのマテリアルの決定]
次に、表示用メッシュのマテリアルおよび見た目を決定する方法の一例について説明する。本実施形態においては、ゲームシステム1は、表示用メッシュを構成する多角形毎にマテリアルを決定する。詳細は後述するが、本実施形態においては、上記多角形に対応するポリゴンは、2種類までのマテリアルに対応する2種類までのテクスチャを用いて描画される。そのため、ゲームシステム1は、メッシュを構成する各多角形について、最終的には1つの多角形について設定されるマテリアルが2種類以下となるようにする。他の実施形態においては、3種類以上のマテリアルが設定されるようにしてもよい。例えば、ボクセルのマテリアル、頂点のマテリアルがそれぞれ3種類以上の実施形態において、同数のマテリアルが多角形に設定されるようにしてもよい。
本実施形態においては、表示用メッシュを構成する多角形として四角形が形成されることがある(図19参照)。表示用メッシュのマテリアルを決定する際、ゲームシステム1はまず、表示用メッシュを構成する四角形を、一定条件下で2つの三角形に分割する。以下、図20を参照して、四角形を2つの三角形に分割する処理について説明する。
図20は、メッシュを構成する四角形が2つの三角形に分割される一例を示す図である。図20に示す(a)は、メッシュの頂点の一部である頂点231~234によって形成される分割前の四角形を示しており、図20に示す(b)は、当該四角形を分割した2つの三角形を示している。図20に示す例においては、各頂点231~234のマテリアルとしては、それぞれ、草、土、砂と草、および、草が設定されているものとする。
本実施形態においては、ゲームシステム1は、四角形の各頂点にそれぞれ設定されるマテリアルの種類が合計で3種類以上である場合、分割条件が満たされるか否かを判定する。本実施形態においては、分割条件は、四角形を2つの三角形に分割することで、三角形の各頂点に設定されるマテリアルの種類を合計で2種類以下にできることである。分割条件が満たされる場合、ゲームシステム1は、各頂点に設定されるマテリアルの種類が合計で2種類以下となる2つの三角形に四角形を分割する。図20に示す例においては、四角形を形成する各頂点231~234に設定されるマテリアルは、草、土、および、砂の3種類である。また、上記四角形を、頂点231,232,234で形成される三角形と、頂点231,233,234で形成される三角形とに分割すると、前者の三角形の各頂点に設定されるマテリアルは砂と草の2種類となり、後者の三角形の各頂点に設定されるマテリアルは草と土の2種類となる(図20に示す(b)参照)。したがって、上記四角形については分割条件が満たされるので、ゲームシステム1は当該四角形を2つの三角形に分割する。
なお、四角形を2つの三角形に分割する方法は2通りであるので、ゲームシステム1は、2通りのうち少なくともいずれかの方法で分割された三角形に関して分割条件が満たされる場合、分割条件が満たされる方法で上記の分割を行う。一方、2通りのいずれの方法で分割された三角形についても分割条件が満たされない場合、いずれかの方法で分割を行う。
上記のように分割を行うことで、ゲームシステム1は、四角形の各頂点に設定される3種類以上のマテリアルの情報をなるべく欠落させないように、各頂点に設定されるマテリアルが2種類以下となる2つの三角形を生成することができる。ここで、上述のように、メッシュを構成する各ポリゴンは2種類までのテクスチャを用いて描画される。したがって、ゲームシステム1は、上記の分割を行うことで、各頂点に設定されたマテリアルの情報をなるべく欠落させないように、2種類のテクスチャを用いてポリゴンを描画することができる。
本実施形態においては、ゲームシステム1は、上記の分割が行われた後の多角形に対応するポリゴンを設定する。すなわち、上記の分割が行われた後の多角形の頂点が、表示用メッシュのポリゴンの頂点となる。
本実施形態においては、ゲームシステム1は、表示用メッシュを構成する各ポリゴンについて、1つのポリゴンの各頂点に設定されるマテリアルが合計で3種類以上である場合、2種類のマテリアルを選択することで、当該ポリゴンのマテリアルを決定する。図21は、表示用メッシュを構成するポリゴンのマテリアルを決定する方法の一例を示す図である。図21に示す例においては、表示用メッシュを構成する三角形のポリゴンの頂点241については、第1のマテリアルが「草」、第2のマテリアルは「土」、第1のマテリアル:第2のマテリアル=0.8:0.2のマテリアル比率と設定されるものとする。また、上記ポリゴンの頂点242については、第1のマテリアルが「草」、第2のマテリアルは「砂」、第1のマテリアル:第2のマテリアル=0.5:0.5のマテリアル比率と設定されるものとする。また、上記ポリゴンの頂点243については、第1のマテリアルが「砂」、第2のマテリアルは「土」、第1のマテリアル:第2のマテリアル=0.7:0.3のマテリアル比率と設定されるものとする。
ポリゴンの各頂点に設定されるマテリアルが合計で3種類以上である場合、ゲームシステム1は、マテリアル毎に判定値を算出する。判定値は、当該マテリアルが設定される頂点毎の比率を合計した値として算出される。そして、ゲームシステム1は、判定値が大きいものから順に2つのマテリアルを、当該ポリゴンのマテリアルとして選択する。図21に示す例においては、草のマテリアルの判定値は、0.8+0.5=1.3となり、砂のマテリアルの判定値は、0.5+0.7=1.2となり、土のマテリアルの判定値は、0.2+0.3=0.5となる。したがって、図21に示すポリゴンのマテリアルとしては、草と砂とのマテリアルが選択される(図21に示す(a)参照)。
なお、表示用メッシュのポリゴンのマテリアルを選択する具体的な方法は任意である。他の実施形態においては、表示用メッシュのポリゴンのマテリアルは、当該ポリゴンの頂点に設定される情報に基づく任意の方法で選択されてよい。例えば、表示用メッシュのポリゴンのマテリアルは、1つの頂点において最も比率が大きいマテリアルを頂点毎に特定し、各頂点について特定された数が最も多いマテリアルが、当該ポリゴンのマテリアルとして選択されてもよい。
本実施形態においては、上記のように選択されたポリゴンのマテリアルは、ポリゴンの各頂点に設定されるマテリアルによって示される。すなわち、ポリゴンのマテリアルが選択された場合、ゲームシステム1は、当該ポリゴンの各頂点に設定されているマテリアル(すなわち、頂点のデータに含まれるマテリアルID)を、選択されたマテリアルとなるように変更する。図21に示す例においては、頂点241および243については、ポリゴンのマテリアルの選択前においては、それぞれ、草と土、砂と土のマテリアルが設定されている(図21に示す(a)参照)。上記のようにしてポリゴンのマテリアルとして草と砂のマテリアルが選択された場合、各頂点241および243に設定されるマテリアルは草と砂に変更される(図21に示す(b)参照)。なお、頂点242については、選択前に設定されているマテリアルが、選択されたポリゴンのマテリアルと同じであるので、マテリアルの変更は行われない。上記のように、ポリゴンのマテリアルとして2種類のマテリアルが選択される場合、当該ポリゴンの各頂点に設定されている3種類目以降のマテリアルの情報は消去されることとなる。
また、ゲームシステム1は、頂点に設定されるマテリアルの変更に応じて、当該頂点に設定されるマテリアルの比率を変更する。例えば、頂点241については、第1のマテリアルが草であり、第2のマテリアルが土である内容から、第1のマテリアルが草であり、第2のマテリアルが砂である内容へと変更される。ここで、砂のマテリアルの割合は0であるので、第1のマテリアル:第2のマテリアル=1:0のマテリアル比率とされる。このように、上記の変更は、ポリゴンのマテリアルを当該ポリゴンの各頂点のマテリアルによって表現するために、各頂点のマテリアルを形式的に変更するものである。
上記によれば、1つのポリゴンの各頂点に設定されるマテリアルが、後述する描画に用いるテクスチャに対応するマテリアルのみとなるので、テクスチャを用いた描画処理を実行しやすくすることができる。
なお、上記の変更によって、ある頂点についてマテリアルが全て変更される(つまり、変更前のマテリアルと変更後のマテリアルとが1つも一致しない)場合もあり得る。このような場合とは、例えば、変更前の頂点に設定されていたマテリアルが土であり、ポリゴンのマテリアルとして選択されたマテリアルが草と砂であるような場合である。このような場合には、当該頂点におけるマテリアルの比率は、当該ポリゴンの他の頂点におけるマテリアルの比率に基づいて設定されてもよい。例えば、上記の例において、三角形のポリゴンの他の頂点のうち1つの頂点に設定される第1のマテリアルが草であって草:砂=1:0のマテリアル比率、もう1つの頂点に設定されるマテリアルが砂であって砂:草=1:0のマテリアル比率の場合、当該頂点におけるマテリアル比率は草:砂=0.5:0.5に設定されてもよい。また、ゲームシステム1は、当該頂点と他の頂点との距離を考慮して(例えば、距離が近いほど大きくなる重み値に基づいて)、当該頂点におけるマテリアルの比率を決定してもよい。
以上のように、本実施形態においては、ゲームシステム1は、ポリゴン毎に、当該ポリゴンに含まれる頂点に設定されたマテリアルID(すなわち、ポリゴンに対応する多角形の頂点に設定されるマテリアルID)のうち、所定個数(ここでは、2個)までのマテリアルIDを選択させて当該ポリゴンのマテリアルIDとして決定する。これによれば、ゲームシステム1は、頂点に設定されるマテリアルをポリゴンの見た目に反映しつつ、用いられるテクスチャの数を抑えて描画処理を行うことができる。
なお、本実施形態においては、ゲームシステム1は、ポリゴンを構成する全ての頂点のマテリアルに関して、当該マテリアルの数が上記所定個数以下の場合には、当該マテリアルを当該ポリゴンのマテリアルに決定し、当該マテリアルが上記所定個数を超える場合には、それぞれの頂点の優先度パラメータに基づいて(具体的には、上述の評価値に基づいて算出される上記判定値に基づいて)優先度の高い所定個数のマテリアルを選択して当該ポリゴンのマテリアルに決定する。これによって、各頂点について合計で所定個数を超えるマテリアルが設定されている場合でも、ポリゴンのマテリアルを、優先度を考慮した所定個数以下のマテリアルとすることができる。
上記のように、本実施形態においては、1つのポリゴンの各頂点に設定される第1および第2のマテリアルは、当該ポリゴンに設定される2種類のマテリアルとなるように変更される。ここで、このような変更を行う場合、隣接する2つのポリゴンで共有される頂点については、設定される第1および第2のマテリアルに齟齬が生じる可能性がある。
図22は、隣接する2つのポリゴンの各頂点に設定されるマテリアルの一例を示す図である。図22は、図20に示す各頂点231~234によって2つのポリゴンが形成されている状態(図20に示す(b))を示している。図22に示す例において、頂点231、233、および234で形成される第1のポリゴンのマテリアルは、草および砂に決定されるので、これらの頂点の第1および第2のマテリアルは、それぞれ、草、砂に設定されるべきである。一方、頂点231、232、および234で形成される第2のポリゴンのマテリアルは、草および土に決定されるので、これらの頂点の第1および第2のマテリアルは、それぞれ、草、土に設定されるべきである。そのため、図22に示す例では、2つのポリゴンで共有される頂点231および234については、設定すべきマテリアルに齟齬が生じる。
そこで、本実施形態においては、2つのポリゴンで共有される頂点に設定すべきマテリアルに齟齬が生じる場合、ゲームシステム1は、当該頂点に関して、同じ位置にもう1つ頂点を追加する。図22に示す(b)は、頂点231について頂点231’が追加され、頂点234について頂点234’が追加された状態の一例を示す図である。図22の例においては、ゲームシステム1は、頂点231および234については、第1および第2のマテリアルを、第1のポリゴンのマテリアルに応じて草および砂として設定する。また、頂点231’および234’については、第1および第2のマテリアルを、第2のポリゴンのマテリアルに応じて草および土として設定する。このように、2つのポリゴンで共有される頂点として形式的に2つの頂点を設定する(すなわち、位置が同じでマテリアルが異なる2つの頂点データを生成する)ことで、頂点に設定されるマテリアルに齟齬が生じることを抑制することができる。
ゲームシステム1は、以上のようにして頂点およびマテリアルが決定されたポリゴンからなる表示用メッシュを生成する。また、ゲームシステム1は、各頂点に設定されるマテリアルの情報(すなわち、第1のマテリアルおよび第2のマテリアル)に基づいてポリゴンの描画を行うことで、ボクセルオブジェクトの描画を行う。
図23は、ポリゴンにテクスチャを適用する一例を示す図である。図23には、図21に示す各頂点241~243によって形成される三角形のポリゴンが示されている。なお、各頂点241~243に設定されるマテリアルは、図21に示す(b)に示したものとなっている。
ポリゴンの頂点の位置については、当該頂点に設定される第1のマテリアルのテクスチャと第2のマテリアルのテクスチャとを、当該頂点に設定されるマテリアルの比率で(つまり、当該比率をブレンド率として)ブレンドするマッピングによって描画が行われる。なお、描画に用いられる第1および第2のマテリアルのテクスチャは、上述のマテリアルデータ(図12参照)において、当該頂点のデータに対応付けられる各マテリアルIDに対応付けられる描画設定の情報が示すテクスチャである。図23に示す例においては、頂点241の位置については、草:砂=1:0のマテリアル比率となっているので、草のテクスチャのみを用いて描画が行われる。また、頂点243の位置については、第1のマテリアルが砂であり、砂:草=1:0のマテリアル比率となっているので、砂のテクスチャのみを用いて描画が行われる。また、頂点242の位置については、第1のマテリアルが草であり、第2のマテリアルが砂であり、草:砂=0.5:0.5のマテリアル比率となっているので、草のテクスチャと砂のテクスチャとを0.5:0.5のブレンド率でブレンドして描画が行われる。
また、ポリゴンの頂点以外の位置については、ゲームシステム1は、各頂点におけるブレンド率を補間することでブレンド率を決定する。そして、各頂点に設定される2つのマテリアルのテクスチャを、補間されたブレンド率に基づいてブレンドするマッピングによって描画が行われる。なお、補間の具体的な方法は任意である。一例としては、頂点間のブレンド率を線形補間する。図23においては、草のマテリアルのテクスチャが適用される比率が高い位置を白色で示し、砂のマテリアルのテクスチャが適用される比率が高い位置を黒色で示している。図23に示す例では、頂点241では草のテクスチャが適用され、頂点243に向かうにつれて砂のテクスチャのブレンド比が高くなり、頂点242の位置では草と砂のブレンド率が1:1となり、頂点243の位置では砂のテクスチャのみが適用される。このように、ポリゴンに設定される(すなわち、ポリゴンの各頂点に設定される)2つのテクスチャを、マテリアルの比率に応じたブレンド率でブレンドして描画することで、表示用メッシュにおいて、異なるマテリアル同士の境界における見た目を自然なものとすることができる。これによって、複数種類のマテリアルが設定される表示用メッシュの見た目を自然なものとすることができる。
[2-6-2.判定用メッシュのマテリアルの決定]
次に、判定用メッシュのマテリアルを決定する方法の一例について説明する。詳細は後述するが、本実施形態においては、判定用メッシュを用いてボクセルオブジェクトのコリジョン判定が行われ、コリジョンが判定されたボクセルオブジェクトのマテリアルに応じた処理が実行されることがある。そのため、本実施形態においては、判定用メッシュについてもマテリアルが決定される。
本実施形態においては、ゲームシステム1は、判定用メッシュを構成する各多角形のポリゴンについて、1つのポリゴンについて設定されるマテリアルが1種類となるようにする。具体的には、ゲームシステム1は、判定用メッシュのポリゴンに設定されるマテリアルを、当該ポリゴンの頂点に設定されるマテリアルの情報(すなわち、第1および第2のマテリアルと、マテリアルの比率の情報)に基づいて決定する。
図24は、判定用メッシュを構成するポリゴンのマテリアルを決定する方法の一例を示す図である。図24は、図21に示す各頂点241~243で形成される三角形のポリゴンについてマテリアルを決定する例を示している。なお、各頂点241~243に設定されるマテリアルは、図21に示す(a)に示したものとなっている。
ポリゴンのマテリアルを決定する際、ゲームシステム1は、ポリゴンの各頂点に設定されるマテリアル毎に判定値を算出する。本実施形態においては、上記判定値の算出方法は、表示用メッシュの多角形に設定されるマテリアルの選択に用いられた判定値の算出方法と同じである。なお、判定値の具体的な算出方法は任意である。他の実施形態においては、上記判定値は、判定用メッシュのポリゴンの頂点に設定される情報に基づく任意の方法で算出されてよい。
図24に示す例においては、マテリアル毎の判定値は、上述した図21に示す場合と同様に、草のマテリアルの判定値は1.3となり、砂のマテリアルの判定値は1.2となり、土のマテリアルの判定値は0.5となる。したがって、図24に示すポリゴンのマテリアルとしては、草のマテリアルが選択される。
以上のように、本実施形態においては、ゲームシステム1は、ポリゴン毎に、当該ポリゴンに含まれる頂点に設定されたマテリアルID(すなわち、ポリゴンに対応する多角形の頂点に設定されるマテリアルID)のうち、所定個数(ここでは、1個)までのマテリアルIDを選択させて当該ポリゴンのマテリアルIDとして決定する。これによれば、ゲームシステム1は、判定用メッシュに設定されるマテリアルの数を所定個数以下に抑えることができる。これによって、判定用メッシュを用いたコリジョン判定の結果に応じて行われる、マテリアルの種類に応じた処理が煩雑になることを抑制することができる。なお、判定用メッシュのポリゴンのマテリアルを決定する方法は任意であり、上記に限らない。他の実施形態においては、判定用メッシュのポリゴンのマテリアルは、当該ポリゴンの頂点に設定される情報に基づく任意の方法で決定されてよい。
また、本実施形態においては、表示用メッシュのポリゴンについては2種類までのマテリアルが設定されるのに対して、判定用メッシュのポリゴンについては1種類のマテリアルが設定される。これによれば、表示用メッシュのポリゴンについては2種類のテクスチャを用いて自然な見た目とすることができるとともに、判定用メッシュについては、当該判定用メッシュを用いたコリジョン判定の結果に応じて行われる処理が煩雑になることを抑制することができる。なお、他の実施形態においては、表示用メッシュおよび判定用メッシュのポリゴンに設定可能なマテリアルの種類は任意である。表示用メッシュのポリゴンに設定可能なマテリアルの数と、判定用メッシュのポリゴンに設定可能なマテリアルの数とは、共に複数であってもよいし、同じであってもよいし、異なっていてもよい。
なお、本実施形態においては、1つのボクセルに設定されるマテリアルの種類は2つまでであり、表示用メッシュにおける1つのポリゴンに設定されるマテリアルの種類は2つまでである。これによれば、ボクセルデータのデータ量を抑えつつ、表示用メッシュのマテリアルに対して、ボクセルデータにおいて設定されるマテリアルの情報を反映させることができる。また、本実施形態においてはさらに、ボクセルデータに基づいて設定される頂点に設定されるマテリアルの種類も2つまでである(図16参照)。これによれば、ボクセルデータから表示用メッシュを得る処理の途中に生成される頂点についても2種類のマテリアルを設定できるので、当該処理の途中でマテリアルの情報が欠落することなく、ボクセルデータにおいて設定されるマテリアルの情報を表示用メッシュに対して反映させることができる。
また、他の実施形態においては、ゲームシステム1は、ボクセルデータに基づいて設定される頂点に関して、表示用メッシュの生成に用いる頂点と、判定用メッシュの生成に用いる頂点とで異なるようにマテリアルを設定してもよい。例えば、ゲームシステム1は、表示用メッシュの生成に用いる頂点については上述のように2種類までのマテリアルを設定し、判定用メッシュの生成に用いる頂点については1種類のマテリアルを設定するようにしてもよい。そして、表示用メッシュのポリゴンのマテリアルについては、上記と同様に2種類のマテリアルを設定し、判定用メッシュのポリゴンのマテリアルとして、当該ポリゴンの各頂点にそれぞれ設定される1種類のマテリアルに基づいて1種類のマテリアルを設定してもよい。なお、判定用メッシュの生成に用いる頂点について1種類のマテリアルを設定する場合、各マテリアルについて算出される上述の判定値が最も大きいマテリアルを当該頂点のマテリアルに設定してもよい。上記によっても、本実施形態と同様に、表示用メッシュにおける1つのポリゴンに設定されるマテリアルの種類は2つまでとするとともに、判定用メッシュにおける1つのポリゴンに設定されるマテリアルの種類を1つとすることができる。そのため、ボクセルデータにおいて設定されるマテリアルの情報を表示用メッシュに対して反映させることができるとともに、判定用メッシュを用いたコリジョン判定の結果に応じて行われる処理が煩雑になることを抑制することができる。
上記のように、本実施形態においては、1つのボクセルオブジェクトについて表示用メッシュと判定用メッシュとが設定され得る。ただし、ゲーム状況によっては、1つのボクセルオブジェクトについて表示用メッシュと判定用メッシュとの両方が同時に設定される必要はない(例えば、1フレームにおける処理において両方が設定される必要はない)。例えば、判定用メッシュは、ゲーム空間のうちで、コリジョン判定が行われる範囲において生成され、コリジョン判定が行われない範囲においては生成されなくてもよい。一例としては、ゲームシステム1は、プレイヤキャラクタを中心とした所定範囲内のボクセルオブジェクトについて判定用メッシュを生成し、当該所定範囲外のボクセルオブジェクトについては判定用メッシュを生成せず、表示用メッシュのみを生成するようにしてもよい。
また、ゲームシステム1は、表示用メッシュについては、生成されたメッシュに関するデータをメモリに記憶しておき、当該メッシュが生成された後のフレームにおいては、更新が行われた範囲を除き、メッシュを生成する処理を再度実行せずに、当該データを用いるようにしてもよい。これによれば、表示用メッシュを生成するための処理負荷を軽減できる。また、判定用メッシュについては、生成されたメッシュに関するデータをメモリに記憶せず、必要に応じて(例えば、コリジョン判定を行う必要が生じる度に)逐次メッシュを生成するようにしてもよい。これによれば、メッシュの生成に用いられるメモリ領域を節約することができる。
以上においては、ボクセルデータが初期状態から変更された場合に、変更後のボクセルデータに基づいて各メッシュ(すなわち、表示用メッシュおよび判定用メッシュ)を生成する方法について説明した。なお、上記の方法は、例えばゲームの開始時において、初期状態のボクセルデータに基づいて各メッシュを生成する場合にも用いることができる。ただし、初期状態のボクセルデータに基づく各メッシュは、ゲーム開始時に初期状態のボクセルデータに基づいて生成される必要はなく、ゲーム開始前に予め用意されていてもよい。
[2-7.マテリアルを変更する処理]
次に、図25~図35を参照して、ボクセルオブジェクトについてマテリアルを変更する処理例について説明する。本実施形態においては、ボクセル空間に設定されているボクセルデータのマテリアルIDを変更することによって、当該ボクセル空間内におけるボクセルオブジェクトのマテリアルが変更される。以下、第1例~第3例を用いて、マテリアルの変更処理について説明する。以下においては、地面や壁等の地形オブジェクトやゲーム空間に登場する仮想オブジェクト(例えば、敵オブジェクト)等がボクセルオブジェクトであるものとし、プレイヤキャラクタがアクションを行い、コリジョン判定が行われた結果として、ゲーム内の作用が発生する場合の例について説明する。
なお、上記「ゲーム内の作用」は、ゲームにおいて生じる任意の変化であり、例えば「オブジェクト同士の接触の結果を反映する処理」によって生じる変化である。「ゲーム内の作用」は、判定用メッシュと、ゲーム処理に基づいた判定対象に対応する判定形状(例えば、プレイヤキャラクタ等のオブジェクトに設定される判定領域等)とのコリジョン判定に基づくものであればよく、判定用メッシュに対応するオブジェクトに上記作用が生じてもよいし、上記判定対象に対応するオブジェクトに上記作用が生じてもよい。「ゲーム内の作用」の内容は、当該作用が発生する要因となるコリジョン判定においてコリジョンが判定されたポリゴンに設定されるマテリアルに関連付けられてもよい(つまり、当該マテリアルによって作用の内容が決められてもよい)。
(第1例)
第1例として、ゲーム空間におけるディレクショナルライト等の光が当たる範囲に敵オブジェクト251が位置する場合に、敵オブジェクト251を構成するマテリアルの変更を行う例について説明する。図25は、ゲーム空間における影の範囲に位置する敵オブジェクト251aをプレイヤキャラクタ201が攻撃している様子を表すゲーム画像の一例を示す図である。
敵オブジェクト251は、ボクセルオブジェクトであり、地形オブジェクト等に対応するボクセルのボクセル空間とは独立した固有ボクセル空間が敵オブジェクト251のために定義される。上記固有ボクセル空間には、敵オブジェクト251に対応する固有ボクセルデータが定義され、当該固有ボクセルデータに基づいた固有表示用メッシュおよび固有判定用メッシュが設定される。そして、上記固有ボクセル空間は、定義されている敵オブジェクト251ごとゲーム空間内を移動/回転することが可能であり、当該固有ボクセル空間のゲーム空間内における位置や方向(姿勢)等が制御される。なお、上記固有ボクセル空間に定義されるボクセルは、地形オブジェクトを構成するボクセルとは異なるサイズであってもよく、ボクセルのサイズが相対的に小さくてもよい。
敵オブジェクト251におけるポリゴンのマテリアルは、第1マテリアルIDが「マテリアルA」に設定されている。また、マテリアル混合比が0(すなわち、ボクセルに設定されているマテリアルが「マテリアルA」の1種類)に設定されている。第1例においては、マテリアルAで構成されている敵オブジェクト251を、敵オブジェクト251aと呼称する。そして、上述したマテリアルデータに含まれる性質情報として、マテリアルAについて、強固な耐攻撃強度を有する性質が設定されているものとする。そして、上述した表示用メッシュおよび判定用メッシュのマテリアルの決定方法を用いて、ボクセルのマテリアルに基づいた敵オブジェクト251aの固有表示用メッシュと固有判定用メッシュのマテリアルが決定される。
図25に示す例において、ゲームシステム1は、判定用メッシュを用いて敵オブジェクト251とプレイヤキャラクタ201とのコリジョン判定を行う。すなわち、敵オブジェクト251の判定用メッシュと、プレイヤキャラクタについて設定される判定領域(例えば、プレイヤキャラクタの位置に基づいて設定される、所定形状の領域)とが接触するか否かのコリジョン判定を行う。そして、マテリアルがマテリアルAであるポリゴンとプレイヤキャラクタ201とのコリジョンが判定された場合、ゲーム内の作用を発生させる処理として、敵オブジェクト251を攻撃することにより破壊したり、敵オブジェクト251の反撃によりプレイヤキャラクタ201の体力を減少させたりする処理を行う。また、上記の場合、プレイヤキャラクタ201に所定のリアクションを行わせる処理を行う。例えば、図25に示す例では、プレイヤキャラクタ201に上記パンチアクションを行わせる操作入力がユーザによって行われることにより、プレイヤキャラクタ201に前方に向かってパンチを出すアクションが行われて、コリジョン判定が行われる。そして、パンチアクションを行うプレイヤキャラクタ201と敵オブジェクト251aとのコリジョンが判定された場合、当該パンチアクションによる攻撃が敵オブジェクト251aに有効に作用したか否かが判定される。ここで、敵オブジェクト251aは、強固な耐攻撃強度を有する性質が設定されたマテリアルAで構成されているため、上記パンチアクションによる攻撃により破壊されるまでは至らず、プレイヤキャラクタ201に上記攻撃が跳ね返されたようなリアクションを行わせる処理を行う。このとき、ゲームシステム1は、コリジョン判定によってコリジョンが判定された判定用メッシュ内のポリゴンに設定されたマテリアルに対応する性質情報に基づいたゲーム内作用(例えば、攻撃が跳ね返されたことによる、プレイヤキャラクタの体力減少)を発生させてもよい。
第1例においては、敵オブジェクト251aが、ゲーム空間において光が当たる範囲281に位置すると判定されたことに応じて、ゲームシステム1は、ゲーム内の作用として、ボクセルオブジェクトである敵オブジェクト251aに変更を加える。なお、第1例において、光が当たる範囲281に敵オブジェクト251aが位置するか否かについては、レイチェックを用いた判定が行われるが、当該判定方法については後述する。図26は、ゲーム空間において光が当たる範囲281に位置することにより、敵オブジェクト251に変更が加えられた後の様子を表すゲーム画像の一例を示す図である。
図26に示す例においては、ゲーム空間における光に当たることによりマテリアルが変化したかのように、敵オブジェクト251全体(すなわち、敵オブジェクト251のために定義されている固有ボクセル空間のボクセル全体)のマテリアルが変更される。例えば、マテリアルAで構成されていた敵オブジェクト251aは、ゲーム空間において影から光が当たる範囲281に移動することにより、マテリアルBで構成される敵オブジェクト251bに変更される。そして、上述したマテリアルデータに含まれる性質情報として、マテリアルBについて、脆弱な耐攻撃強度を有する性質が設定されているものとする。本実施形態では、敵オブジェクト251のために定義されている固有ボクセル空間のボクセルデータに含まれるマテリアルIDのうち、マテリアルAに対応するマテリアルIDをマテリアルBに対応するマテリアルIDに更新する。そして、上述した表示用メッシュおよび判定用メッシュのマテリアルの決定方法を用いて、更新後のボクセルのマテリアルに基づいた敵オブジェクト251bの固有表示用メッシュと固有判定用メッシュのマテリアルが決定される。具体的には、敵オブジェクト251のために定義されている固有ボクセル空間内のボクセルにおいて、マテリアルAに対応するマテリアルIDのみ設定されているボクセルは、第1マテリアルIDの「マテリアルA」が「マテリアルB」に変更され、マテリアル混合比が引き続き0(すなわち、ボクセルに設定されているマテリアルが「マテリアルB」の1種類)に設定される。また、敵オブジェクト251のために定義されている固有ボクセル空間内のボクセルにおいて、マテリアルAと他のマテリアルとが設定されている場合、「マテリアルA」に対応するマテリアルIDを「マテリアルB」に対応するマテリアルIDに変更するとともに、他のマテリアルに対応するマテリアルIDは引き続き他のマテリアルを維持して、マテリアル混合比も引き続き同じ値が維持される。また、敵オブジェクト251のために定義されている固有ボクセル空間内のボクセルにおいて、「マテリアルA」に対応するマテリアルIDが設定されていない場合、引き続きマテリアルIDおよびマテリアル混合比の値がそのまま維持される。これによれば、敵オブジェクト251aにおいて「マテリアルA」のマテリアルであった部分は、「マテリアルB」のマテリアルに変更された見た目となるので、敵オブジェクト251aの「マテリアルA」のマテリアルに光に当てることにより「マテリアルB」に変質した印象をユーザに与えやすくなる。
なお、敵オブジェクト251aと251bとの形状は、同じであってもよいし、異なっていてもよい。後者の場合、上述したマテリアルの変更に伴って、敵オブジェクト251aおよび251bに定義されるボクセル空間における何れかのボクセルの密度を増減させることにより、敵オブジェクト251の形状を変化させてもよい。
また、敵オブジェクト251は、ボクセルオブジェクトに非ボクセルオブジェクトの部位を組み合わせて生成されてもよい。例えば、敵オブジェクト251の表面に付される精細なパーツ(眉毛、目、歯等)が、非ボクセルオブジェクトにより生成されてもよい。ここで、上記非ボクセルオブジェクトは、上述したボクセルデータに基づかないオブジェクトであって、設定されたポリゴンメッシュが描画されることにより、ゲーム空間内に表示される。そして、上記非ボクセルオブジェクトに対しても、ボクセルオブジェクトと同様のマテリアルIDがポリゴンメッシュに設定され、当該ポリゴンメッシュを描画することにより、上記非ボクセルオブジェクトが表示される。この場合、ボクセルオブジェクトの部位のマテリアルIDが更新されることに伴って、上記非ボクセルオブジェクトの部位においても同様にマテリアルIDが更新されてもよい。
図27に示す例では、プレイヤキャラクタ201に上記パンチアクションを行わせる操作入力がユーザによって行われることにより、プレイヤキャラクタ201の前方にある敵オブジェクト251bに向かってパンチを出すアクションが行われて、コリジョン判定が行われている。そして、パンチアクションを行うプレイヤキャラクタ201と敵オブジェクト251aとのコリジョンが判定された場合、当該パンチアクションによる攻撃が敵オブジェクト251aに有効に作用したか否かが判定される。ここで、敵オブジェクト251bは、脆弱な耐攻撃強度を有する性質が設定されたマテリアルBで構成されているため、上記パンチアクションによる攻撃により破壊される。具体的には、パンチアクションを行うプレイヤキャラクタ201と敵オブジェクト251bとのコリジョンが判定された場合、当該パンチアクションによる攻撃が敵オブジェクト251bに有効に作用したと判定され、プレイヤキャラクタ201の位置および向きに基づいて、上述した更新範囲が生成される。そして、ゲームシステム1は、上記更新範囲における敵オブジェクト251bのボクセルの密度を減少させることで、敵オブジェクト251bを変形(破壊)させる。
上記更新範囲は、プレイヤキャラクタ201のパンチアクションによって破壊される敵オブジェクト251bの破壊範囲を示す。上記更新範囲は、プレイヤキャラクタ201が敵オブジェクト251bを攻撃した位置、強さ、能力や、敵オブジェクト251bが有する強度(例えば、マテリアルBの性質)等に基づいて生成される。例えば、上記更新範囲は、プレイヤキャラクタ201を基準とした所定方向(例えば、前方)に、アクションに応じた形状で生成される。例えば、上記更新範囲は、プレイヤキャラクタ201がパンチアクションを行うことにより判定されたコリジョン位置を中心として、最奥部が半球形状となった釣鐘型に形成される。なお、上記更新範囲の形状は、他の形状でもよく、球状、楕円球状、キューブ状、円柱状、楔形状、3次元ソフトウエアで生成した形状の他、これらの形状の一部が欠損した形状等でもよい。また、上記更新範囲の位置は、ゲーム空間内においてプレイヤキャラクタ201によるパンチアクションが発生した位置(例えば、プレイヤキャラクタ201が殴る拳が到達した位置)を中心として設定されてもよいし、プレイヤキャラクタ201から見て当該位置から所定の距離前方を中心として設定されてもよい。
ゲームシステム1は、上記更新範囲に対応するボクセルの密度を減少させる。これによって、敵オブジェクト251bは、更新範囲に対応する部分が消去されるように変形される。例えば、本実施形態においては、敵オブジェクト251bにおける各ボクセルのSDFに基づいて、各ボクセルの密度を書き換えることによって各ボクセルの消去が制御される。なお、ゲームシステム1は、上記更新範囲に対応するボクセルオブジェクトを無条件に変形することに代えて、上記更新範囲に対応するボクセルに設定されるダメージの量をパンチアクションに応じて増加させ、ダメージの量が所定値を超えたことに応じて当該ボクセルにおける密度を減少させるようにしてもよい。
また、敵オブジェクト251bのうちで消去された部分に対応する破片オブジェクトが生成して、敵オブジェクト251bが変形することに応じて、当該破片オブジェクトが飛び散る演出が行われてもよい。この場合、上記破片オブジェクトは、敵オブジェクト251bのうちで消去された部分に応じた形状となるように生成されてもよいし、予め定められた形状であってもよい。上記破片オブジェクトは、ボクセルオブジェクトであってもよいし、ボクセルオブジェクトでなくてもよい。
このように、第1例においては、敵オブジェクト251がゲーム空間における光源の影に入っている状態から当該光源の影に入っていない状態になることに応じて、敵オブジェクト251を構成するマテリアルがマテリアルAからマテリアルBに変更されるため、敵オブジェクト251に定義されたボクセル空間のボクセルにおけるゲーム中の判定に基づいたマテリアル変化を用いたゲームを実現することができる。
第1例において、光が当たる範囲281を生成している光源は、ゲーム空間に設定されているディレクショナルライト等であり、例えば光の方向のみの情報を有する環境光(例えば、太陽光を放つ平行光源)である。他の例として、点光源により構成されてもよい。このような光が当たる範囲281に敵オブジェクト251が位置するか否かの判定では、敵オブジェクト251aおよび251bにそれぞれ設定される判定形状が用いられる。
図28に示すように、上記判定形状は、ゲーム空間内において、敵オブジェクト251aおよび251bそれぞれを内包する形状である。例えば、上記判定形状は、敵オブジェクト251aおよび251bそれぞれに対する直方体形状のバウンディングボックスが用いられる。上記バウンディングボックスは、ゲーム空間の座標軸に平行な軸平行バウンディングボックス(AABB:Axis-Aligned Bounding Box)でもよいし、敵オブジェクト251aおよび251bそれぞれに対する有向バウンディングボックスでもよい。なお、敵オブジェクト251aと敵オブジェクト251bとの間で形状の変化が生じる場合、上記バウンディングボックスのサイズを当該形状に基づいて変化させてもよい。また、上記判定形状は、敵オブジェクト251aおよび251bそれぞれの少なくとも一部を内包する任意の形状でよい。一例として、上記判定形状は、敵オブジェクト251aおよび251bそれぞれのために定義されている固有ボクセル空間そのものの直方体であってもよい。他の例として、上記判定形状は、敵オブジェクト251aおよび251bそれぞれの少なくとも一部を内包する任意の形状でよく、例えば、球形状、楕円球形状、他の多面体形状等であってもよい。
図28に示すように、上記判定形状に複数の特徴点FPが設定される。特徴点FPは、敵オブジェクト251aおよび251bそれぞれに設定されているバウンディングボックスの角の8点を少なくとも含む。なお、特徴点FPは、上記バウンディングボックスの中心や敵オブジェクト251aおよび251bそれぞれにおける所定の部位に設定される1点を含む9点でもよい。また、他の実施形態において、特徴点FPは、上記バウンディングボックスの中心や敵オブジェクト251aおよび251bそれぞれにおける所定の部位に設定される1点のみであってもよい。特徴点FPが1点である場合、上記判定形状は、敵オブジェクト251aおよび251bそれぞれの少なくとも一部を内包する形状でなくてもよく、上記判定形状が点(すなわち、1点の特徴点FP)であってもよい。
図29に示すように、第1例において光が当たる範囲に敵オブジェクト251が位置するか否かの判定においては、レイチェックが用いられる。なお、図29では、図面を見やすくし、説明を分かりやすくする目的で、バウンディングボックス、特徴点、および障害物等を2次元で表現しているが、実際には3次元空間において3次元のバウンディングボックスおよび障害物が設定され、特徴点FPが8点(図面では4点)設定される。また、図29では、光源の方向を見やすくする目的で、点光源が用いられているが、上述したように平行光源が用いられてもよい。
第1例においては、光源に基づいた複数のレイと上記バウンディングボックスとの接触に基づいた判定により、光が当たる範囲に敵オブジェクト251が位置しているのか否かが判定される。例えば、各特徴点FPから光源の方向にレイチェックを行い、特徴点FPと当該光源との間に物体(障害物)がヒットしない場合に、当該特徴点FPが当該光源における影に位置していない(すなわち、当該光源による光が当たる範囲に位置にいる)と判定される(例えば、図29における特徴点FP1の状態)。一方、特徴点FPから光源の方向へのレイチェックにおいて、特徴点FPと当該光源との間に何らかの物体(障害物)がヒットした場合に、当該特徴点FPが当該光源における影に位置していると判定される(例えば、図29における特徴点FP2~4の状態)。
そして、バウンディングボックスに設定されている複数の特徴点FPのうち所定の個数以上の特徴点FPが光源における影に位置していないと判定された場合、当該バウンディングボックスが設定されている敵オブジェクト251が当該光源における影に位置していない(すなわち、当該光源による光が当たる範囲に位置にいる)と判定される。上記判定における閾値として用いられる上記所定の個数は任意である。第1例として、複数の特徴点FPのうち少なくとも1つの特徴点FPが光源における影に位置していないと判定された場合、敵オブジェクト251が当該光源における影に位置していないと判定される。この場合、敵オブジェクト251の一部が光源からの光に当たる範囲に位置することにより当該光源における影に位置していないと判定されるとともに、敵オブジェクト251全体が光源の影に位置することにより当該光源における影に位置していると判定され、当該判定結果に基づいて敵オブジェクト251のマテリアルが変更される。第2の例として、複数の特徴点FPの全てが光源における影に位置していないと判定された場合、敵オブジェクト251が当該光源における影に位置していないと判定される。この場合、敵オブジェクト251全部が光源からの光に当たる範囲に位置することにより当該光源における影に位置していないと判定されるとともに、敵オブジェクト251の一部が光源の影に位置することにより当該光源における影に位置していると判定され、当該判定結果に基づいて敵オブジェクト251のマテリアルが変更される。
(第2例)
第2例として、ゲーム空間における配置ライトによる光が当たる範囲に敵オブジェクト251が位置する場合に、敵オブジェクト251を構成するマテリアルの変更を行う例について説明する。図30は、ゲーム空間において、光オブジェクト202を把持するプレイヤキャラクタ201と敵オブジェクト251aとの様子を表すゲーム画像の一例を示す図である。
図30において、光オブジェクト202は、ゲーム空間に配置される配置ライトの一例であり、ゲーム空間に配置されてその表面から放射状に光を放つポイントライトである。光オブジェクト202は、光オブジェクト202からの光が届く範囲282を有し、当該範囲282に基づいて判定形状が設定される。図30に示す例では、ゲーム空間における光オブジェクト202の位置を中心として、範囲282の形状に基づくサイズの球形状の範囲が上記判定形状として設定される。なお、上記判定形状は、配置ライトからの光が当たる範囲を判定するために用いる形状であり、光源の種類や性質に基づいて球形状、楕円球形状、円錐形状、円柱形状等の任意の形状に設定されてもよい。また、上記判定形状は、実際に光源からの光が届く範囲と同じサイズや形状であってもよいし、光が届く範囲より少なくとも一部が小さいサイズや形状であってもよいし、光が届く範囲より一部が逸脱するサイズや形状であってもよい。
なお、光オブジェクト202は、プレイヤキャラクタ201が所持しているアイテムオブジェクトであってもよいし、ゲーム空間に予め配置されていてもよいし、プレイヤキャラクタ201が地形オブジェクトの一部を引き抜くアクションに基づいて当該地形オブジェクトから得られるものであってもよい。光オブジェクト202が上記アクションにより得られる場合、光オブジェクト202は、地形オブジェクトのうちで当該アクションにより消去された部分に応じた形状となるように生成されてもよいし、予め定められた形状であってもよい。光オブジェクト202は、ボクセルオブジェクトであってもよいし、ボクセルオブジェクトでなくてもよい。光オブジェクト202がボクセルオブジェクトである場合は、地形オブジェクトや敵オブジェクト251等に対応するボクセルのボクセル空間とは異なるボクセル空間が光オブジェクト202のために定義されてもよい。
第2例においてゲーム空間に配置されている敵オブジェクト251aは、第1例で用いた敵オブジェクト251aと同じボクセルオブジェクトである。すなわち、第2例で用いている敵オブジェクト251aは、ゲーム空間における影に位置しているため、マテリアルAで構成されている。
第2例においても、敵オブジェクト251aが、光オブジェクト202からの光が届く範囲282内に位置すると判定されたことに応じて、ゲームシステム1は、ゲーム内の作用として、ボクセルオブジェクトである敵オブジェクト251aのマテリアルを変更する。図31は、光オブジェクト202からの光が届く範囲282内に位置することにより、敵オブジェクト251に変更が加えられた後の様子を表すゲーム画像の一例を示す図である。
図31に示す例において、ゲーム空間において敵オブジェクト251が移動および/または光オブジェクト202が移動することにより、光オブジェクト202からの光が届く範囲282内に敵オブジェクト251の少なくとも一部が侵入した場合、敵オブジェクト251全体(すなわち、敵オブジェクト251のために定義されている固有ボクセル空間のボクセル全体)のマテリアルが変更される。例えば、マテリアルAで構成されていた敵オブジェクト251aは、光オブジェクト202からの光が届かない範囲から光が届く範囲282内に位置することにより、マテリアルBで構成される敵オブジェクト251bに変更される。第2例においても、敵オブジェクト251のために定義されている固有ボクセル空間のボクセルデータに含まれるマテリアルIDのうち、マテリアルAに対応するマテリアルIDをマテリアルBに対応するマテリアルIDに更新することによりマテリアルが変更されるが、上述した第1例と同様であるため、ここでは詳細な説明を省略する。
第2例において、光オブジェクト202からの光が届く範囲282に敵オブジェクト251aが位置しているか否かについては、コリジョンを用いた判定が行われる。例えば、第2例では、敵オブジェクト251が、光オブジェクト202からの光が届く範囲282に基づいて設定された上記判定形状に接触する、または当該判定形状に含まれる場合に、光が届く範囲282に敵オブジェクト251が位置していると判定される。具体的には、敵オブジェクト251であるボクセルオブジェクトの判定用メッシュと上記判定形状とのコリジョン判定に基づいて、光オブジェクト202からの光が届く範囲282に敵オブジェクト251が位置しているか否かが判定される。なお、一例として、敵オブジェクト251の判定用メッシュと上記判定形状とが接触した場合に、範囲282に敵オブジェクト251が位置していると判定してもよい。この場合、敵オブジェクト251の一部が光オブジェクト202からの光が届く範囲282内に位置することにより当該光オブジェクト202からの光による影に位置していないと判定されるとともに、当該光が当たらない範囲に敵オブジェクト251全体が位置することにより当該光による影に位置していると判定され、当該判定結果に基づいて敵オブジェクト251のマテリアルが変更される。他の例として、敵オブジェクト251の判定用メッシュが上記判定形状の内部に含まれる場合に、範囲282に敵オブジェクト251が位置していると判定してもよい。この場合、敵オブジェクト251全部が光オブジェクト202からの光が届く範囲282内に位置することにより当該光オブジェクト202からの光による影に位置していないと判定されるとともに、当該光が当たらない範囲に敵オブジェクト251の一部が位置することにより当該光による影に位置していると判定され、当該判定結果に基づいて敵オブジェクト251のマテリアルが変更される。
なお、上述した説明においては、敵オブジェクトが上記判定形状に接触する、または当該判定形状に含まれる場合に、光が届く範囲に当該敵オブジェクトが位置していると判定される例を用いたが、他の判定条件による判定が行われてもよい。例えば、敵オブジェクトが上記判定形状に所定の割合以上重複する場合や敵オブジェクトにおける所定の部位や所定の位置が上記判定形状に含まれる場合等の他の条件を満たす場合に、光が届く範囲に当該敵オブジェクトが位置していると判定されてもよい。
なお、上記第1例および上記第2例の説明では、敵オブジェクト251が影から光が当たる範囲内に位置する場合にマテリアル変更が行われる例を用いたが、本実施形態では敵オブジェクト251が逆に光が当たる範囲内から影に入る場合に、上述した変更とは逆となるマテリアルの変更が行われてもよい。例えば、マテリアルBで構成されている敵オブジェクト251bが、ゲーム空間において光が当たる範囲281や光が届く範囲282からこれらの光の影に入ることにより、マテリアルAで構成される敵オブジェクト251aに変更されてもよい。具体的には、光が当たる範囲内から敵オブジェクト251が影に入る場合に、敵オブジェクト251のために定義されている固有ボクセル空間のボクセルデータに含まれるマテリアルIDのうち、マテリアルBに対応するマテリアルIDをマテリアルAに対応するマテリアルIDに更新されてもよい。
(第3例)
第3例として、ゲーム空間におけるディレクショナルライト等の光による(例えば、太陽光)における影となる範囲にボクセルブロックが位置する場合に、当該ボクセルオブジェクトを構成するマテリアルの変更を行う例について説明する。図32は、ゲーム空間における障害物の影の範囲に位置するボクセルブロック上にプレイヤキャラクタ201が乗っている様子を表すゲーム画像の一例を示す図である。なお、図32における破線は、光の方向を示している。
第3例におけるゲーム空間の地面等の地形は、格子状に並んで配置された複数のボクセルブロックにより形成されている。上記ボクセルブロックは、ボクセルオブジェクトであり、複数のボクセルが直方体状(より具体的には、立方体状)に組み合わせられることにより、1つのボクセルブロックが形成される。図32に示す各立方体は、ゲーム空間における地面を構成するボクセルブロックを示す。各ボクセルブロックは、それぞれ固有ボクセル空間が定義される。すなわち、上記固有ボクセル空間には、1つのボクセルブロックに対応する固有ボクセルデータが定義され、当該固有ボクセルデータに基づいた固有表示用メッシュおよび固有判定用メッシュが設定される。そして、上記固有ボクセル空間は、定義されているボクセルブロックごとマテリアルを設定することが可能である。なお、上記固有ボクセル空間に定義されるボクセルブロックを構成するボクセルは、地形オブジェクトを構成するボクセルとは異なるサイズであってもよく、ボクセルのサイズが相対的に小さくてもよい。
ゲーム空間における光による影に入っていないボクセルブロックにおけるポリゴンのマテリアルは、第1マテリアルIDが「マテリアルC」に設定されている。また、マテリアル混合比が0(すなわち、ボクセルに設定されているマテリアルが「マテリアルC」の1種類)に設定されている。そして、上述したマテリアルデータに含まれる性質情報として、マテリアルCについて、軟弱な流動性を有する性質(例えば、非固体物質)が設定されているものとする。そして、上述した表示用メッシュおよび判定用メッシュのマテリアルの決定方法を用いて、ボクセルのマテリアルに基づいたボクセルブロックの固有表示用メッシュと固有判定用メッシュのマテリアル(例えば、雲のような浮遊物を示すマテリアル)が決定される。
一方、ゲーム空間における光による影に入っているボクセルブロックにおけるポリゴンのマテリアルは、第1マテリアルIDが「マテリアルD」に設定されている。また、マテリアル混合比が0(すなわち、ボクセルに設定されているマテリアルが「マテリアルD」の1種類)に設定されている。そして、上述したマテリアルデータに含まれる性質情報として、マテリアルDについて、堅固な強度を有する性質(例えば、固体物質)が設定されているものとする。そして、上述した表示用メッシュおよび判定用メッシュのマテリアルの決定方法を用いて、ボクセルのマテリアルに基づいたボクセルブロックの固有表示用メッシュと固有判定用メッシュのマテリアル(例えば、金属材や石材のような構造物を示すマテリアル)が決定される。なお、第3例において、ボクセルブロックが影に入っているか否かについては、シャドウバッファを用いた判定が行われるが、当該判定方法については後述する。
図32に示すように、マテリアルDが堅固な強度を有する性質を有しているため、マテリアルがマテリアルDであるボクセルブロックの判定用メッシュとプレイヤキャラクタ201とのコリジョンが判定された場合には、当該ポリゴンブロックの内側には進入できないように制御される。したがって、プレイヤキャラクタ201は、マテリアルDで構成されるポリゴンブロックの上に立ったり、上を歩いたりすることができる。一方、マテリアルCが軟弱な流動性を有する性質を有しているため、マテリアルがマテリアルCであるボクセルブロックの判定用メッシュとプレイヤキャラクタ201とのコリジョンが判定された場合には、当該ポリゴンブロックの内側に進入するように制御される。したがって、プレイヤキャラクタ201は、マテリアルCで構成されるポリゴンブロックの上に立ったり、上を歩いたりすることができない。
ゲーム空間における影の位置が変わった場合、当該影の移動に基づいて、上記ポリゴンブロックのマテリアルも変更される。例えば、光線方向が図32に示す方向から図33に示す方向に変化した場合、障害物による影の方向も変化する。このように影の方向が変化した場合、影に入っていた状態から影に入っていない状態に変化したボクセルブロック全体(すなわち、ボクセルブロックのために定義されている固有ボクセル空間のボクセル全体)のマテリアルがマテリアルDからマテリアルCに変更され、影に入っていない状態から影に入っている状態に変化したボクセルブロック全体のマテリアルがマテリアルCからマテリアルDに変更される。具体的には、上記影の方向が変化することにより、影から光が当たる範囲に位置することになったボクセルブロックのために定義されている固有ボクセル空間のボクセルデータに含まれるマテリアルIDのうち、マテリアルDに対応するマテリアルIDをマテリアルCに対応するマテリアルIDに更新する。また、上記影の方向が変化することにより、光が当たる範囲から影に入ったボクセルブロックのために定義されている固有ボクセル空間のボクセルデータに含まれるマテリアルIDのうち、マテリアルCに対応するマテリアルIDをマテリアルDに対応するマテリアルIDに更新する。そして、上述した表示用メッシュおよび判定用メッシュのマテリアルの決定方法を用いて、更新後のボクセルのマテリアルに基づいたボクセルブロックの固有表示用メッシュと固有判定用メッシュのマテリアルが決定される。
図33に示すように、上記影の方向が変化することにより、プレイヤキャラクタ201が乗っていたボクセルブロックは、マテリアルDからマテリアルCに変更される。このマテリアル変更により、プレイヤキャラクタ201が乗っていたボクセルブロックのマテリアルが堅固な強度を有する性質を有するマテリアルDから軟弱な流動性を有する性質を有するマテリアルCに変化する。これにより、マテリアルCであるボクセルブロックの判定用メッシュとプレイヤキャラクタ201とのコリジョンが判定されることに基づいて、当該ポリゴンブロックの内側にプレイヤキャラクタ201が沈み込むため、プレイヤキャラクタ201がゲーム空間内を前後左右に移動することが困難となる。このように、プレイヤキャラクタ201がゲーム空間内の移動を継続するためには、光による影に入っているボクセルブロック上に乗ることが必要であり、ゲーム進行において当該影の位置が重要となる。
第3例におけるゲーム空間には、例えば光の方向のみの情報を有する環境光(例えば、太陽光を放つ平行光源)であるディレクショナルライト等の光が設定される。他の例として、点光源等の他の光源が設定されてもよい。そして、各ボクセルブロックが光による影に入っているか否かの判定では、シャドウバッファが用いられる。例えば、テクスチャメモリ(リニアテクスチャ)にシャドウマップの計算結果をコピーしてシャドウバッファとして記憶し、深度比較により影内か否かを判定する。
上記シャドウマップは、光線方向から見たときの各位置のデプス(換言すれば、深度)を示す。上記デプスは、所定の基準位置(すなわち、光源の位置)から当該位置までの光線方向に関する距離として算出される。なお、基準位置は、任意の位置であってよい。
上記シャドウマップにおいて、光線方向から見たときにオブジェクト等の障害物が存在する位置については、上記デプスは、所定の基準位置から当該障害物の位置までの光線方向に関する距離として算出される。また、上記シャドウマップにおいて、光線方向から見たときに障害物が存在しない位置については、上記デプスが最大値に設定される。
図34は、光源と、障害物と、当該障害物の影が付される面(例えば、ゲーム空間における地面であり、上記格子状に並んで配置されたボクセルブロックにおける表示用メッシュの上面)との位置関係の一例を示す図である。
図34において、長さtは、当該画素に対応する位置(例えば、図34に示す位置A)のデプスであり、光源を基準としたときのデプス(つまり、光源の位置から当該画素に対応する位置までのデプス)である。長さtは、仮想カメラを基準としたデプスdを、光源を基準としたデプスに変換することで得られる。なお、仮想カメラを基準としたデプスdは、デプスバッファに格納されている。デプスバッファに格納されるデプスの値は、従来の方法によって算出されてよい。
長さxは、上記シャドウバッファに格納される、当該画素に対応する位置におけるデプスである。つまり、長さxは、光源を基準としたときのデプスであり、光源の位置と当該画素に対応する位置(例えば、図34に示す位置A)との間に障害物が存在する場合は、長さxは、光源の位置から当該障害物の位置(例えば、図34に示す位置B)までの距離となる。なお、上記シャドウバッファには、デプスxに所定の平滑化フィルタを適用した結果の値や当該画素を含む所定範囲内の画素におけるデプスの平均値等を格納してもよい。
ここで、光源から当該画素への直線上に障害物が存在する場合は、長さtが上記長さxよりも大きくなる。この場合、当該画素は、障害物の影が描画される画素となる。一方、光源から当該画素への直線上に障害物が存在しない場合は、長さtは長さxと同じ(または長さx未満)となる。この場合、当該画素は、障害物の影が描画されない画素となる。
ゲームシステム1は、描画範囲全体のシャドウマップを用いて、フレームバッファに描画されたゲーム画像に対するライティング処理を行うことで、影が付されたゲーム画像を生成する。
第3例においては、上記シャドウバッファに格納されたデプスを、各ボクセルブロックのバウンディングボックスの各特徴点に適用することにより、各ボクセルブロックが影に入っているか否かが判定される。例えば、シャドウバッファを参照して、各特徴点FPの座標を、シャドウバッファにおける座標に変換した場合における当該位置のデプス(例えば、図34に示す長さt)が、シャドウバッファに格納されたデプス(例えば、図34に示す長さx)より大きい場合、当該特徴点FPが影に入っている(すなわち、当該光源による光が当たらない範囲に位置にいる)と判定される。一方、シャドウバッファを参照して、各特徴点FPの座標を、シャドウバッファにおける座標に変換した場合における当該位置のデプスが、シャドウバッファに格納されたデプスより小さい場合、当該特徴点FPが影に入っていない(すなわち、当該光源による光が当たる範囲に位置にいる)と判定される。
そして、各ボクセルブロックのバウンディングボックスに設定されている複数の特徴点FPのうち所定の個数以上の特徴点FPが影に入っていないと判定された場合、当該バウンディングボックスが設定されているボクセルブロックが影に入っていない(すなわち、光が当たる範囲に位置している)と判定される。上記判定における閾値として用いられる上記所定の個数は任意である。第1の例として、複数の特徴点FPのうち少なくとも1つの特徴点FPが影に入っていないと判定された場合、当該バウンディングボックスが設定されたボクセルブロックが影に入っていると判定される。この場合、ボクセルブロックの一部が光に当たる範囲に位置することにより当該ボクセルブロックが影に入っていないと判定されるとともに、地面上に露出しているボクセルブロック上面全体が影に入ることにより当該ボクセルブロックが影に入っていると判定され、当該判定結果に基づいて当該ボクセルブロックのマテリアルが変更される。第2の例として、ゲーム空間の地面上に露出している複数の特徴点FPの全て(例えば、4つ)が影に入っていないと判定された場合、当該バウンディングボックスが設定されたボクセルブロックが当該影に入っていないと判定される。この場合、地面上に露出しているボクセルブロック上面全部が光に当たる範囲に位置することにより当該ボクセルブロックが影に入っていないと判定されるとともに、地面上に露出しているボクセルブロック上面の一部が影に入ることにより当該ボクセルブロックが影に入っていると判定され、当該判定結果に基づいて当該ボクセルブロックのマテリアルが変更される。
このように、影の描画を行うために生成されたシャドウバッファを、ボクセルオブジェクトが影に入っているか否かの判定にも用いることにより、処理負荷の増大を抑えることができる。特に、第3例においては、ゲーム空間の地面を構成する全面に大量のボクセルブロックが配置されるゲームステージであるため、これらのボクセルブロック全てをレイチェックによる光影判定を行うことによって処理負荷が増大するような場合にシャドウバッファを用いる光影判定は好適となる。一方、上記第1例では、敵オブジェクト251のみが光影判定の対象となるため、当該光影判定を行う場合の処理負荷が相対的に軽くなるため、レイチェックを用いることで、より正確な光影判定を行うことができる。
しかしながら、シャドウバッファを用いた光影判定は、描画範囲内を対象とするため、当該描画範囲を少なくとも一部が外れるゲーム空間内のボクセルオブジェクトについては、光影判定をすることができない、または不正確な光影判定となる。したがって、上記描画範囲が移動する場合、新たに当該描画範囲に入るボクセルオブジェクトに対する光影判定が、当該ボクセルオブジェクトを表示するタイミングより遅れることが考えられる。
本実施形態において、上記光影判定の遅延を防止するために、上述したシャドウバッファを用いた光影判定と、上述したレイチェックによる光影判定とを組み合わせることにより、ゲーム空間全体の光影判定を行ってもよい。図35は、ゲーム空間において、シャドウバッファを用いて光影判定を行う範囲とレイチェックによる光影判定を行う範囲との一例を示す図である。
図35において、図33において例示したゲーム画像が生成されたゲーム空間が示されている。上記ゲーム空間は、ディスプレイ12に表示される描画範囲内となる領域と、当該描画範囲外となる領域とに分けられる。
上述したように、上記描画範囲内となるゲーム空間に配置されているボクセルブロックBCaおよびBCbは、シャドウバッファに基づいて光影判定される。そして、ボクセルブロックBCaは、シャドウバッファに基づく光影判定により影に入っていると判定されて、マテリアルDで構成されている。また、ボクセルブロックBCbは、シャドウバッファに基づく光影判定により影に入っていないと判定されて、マテリアルCで構成されている。
一方、上記描画範囲外となるゲーム空間に配置されているボクセルブロックBCcおよびBCdは、レイチェックによって光影判定される。そして、ボクセルブロックBCcは、レイチェックによる光影判定により影に位置していると判定されて、マテリアルDで構成されている。また、ボクセルブロックBCdは、レイチェックによる光影判定により光が当たる範囲に位置していると判定されて、マテリアルCで構成されている。
なお、上記描画範囲内と描画範囲外との間に配置されているボクセルブロックについては、一例として、全ての特徴点FPがレイチェックによる光影判定が行われてもよい。他の例として、上記ボクセルブロックついて、上記描画範囲内の特徴点FPがシャドウバッファに基づく光影判定により判定され、当該描画範囲外の特徴点FPがレイチェックによる光影判定により判定されて、これらの判定結果を組み合わせて当該ボクセルブロックの光影判定が行われてもよい。
また、上述した例では、描画範囲内と描画範囲外とによって光影判定される方法を使い分ける例を用いたが、当該描画範囲内であってもレイチェックによる光影判定を行ってもよい。例えば、ゲーム空間内の仮想オブジェクト等が障害物となって仮想カメラから見えない範囲に配置されているボクセルブロックや特徴点に関しては、上記描画範囲内であってもレイチェックによる光影判定が行われてもよい。
また、上記描画範囲外となるゲーム空間に配置されているボクセルブロックに対して、レイチェックにより光影判定する範囲は、上記描画範囲から所定の個数以内または所定の距離以内となるボクセルブロックを対象としてもよい。一例として、上記範囲は、上記描画範囲外となるボクセルブロックのうち、上記描画範囲内と描画範囲外との間に配置されているボクセルブロックと、当該ボクセルブロックと隣接するボクセルブロックとを対象としてもよい。
また、上述した第1例~第3例では、光が当たる範囲にボクセルオブジェクトが位置することにより、当該ボクセルオブジェクトを構成するマテリアルが、強固な耐攻撃強度を有する性質が設定されたマテリアルAや堅固な強度を有する性質を有するマテリアルDから脆弱な耐攻撃強度を有する性質が設定されたマテリアルBや軟弱な流動性を有する性質を有するマテリアルCに変更される例を用いている。このように上述した第1例~第3例では、光が当たる範囲にボクセルオブジェクトが位置することにより影に入っている状態より弱くなる例を用いているが、他の実施形態においてはボクセルオブジェクトが影に入ることにより弱くなる態様であってもよい。すなわち、ボクセルオブジェクトが影に入ることにより、当該ボクセルオブジェクトを構成するマテリアルが、上記マテリアルAや上記マテリアルDから上記マテリアルBや上記マテリアルCに変更されてもよい。このように、光が当たる範囲にボクセルオブジェクトが位置することにより、変更されるマテリアルは任意であり、変更元のマテリアルと変更先のマテリアルとはそれぞれ任意の性質を有するマテリアルであってもよい。
[3.ゲームシステムにおける処理の具体例]
次に、図36~図38を参照して、ゲームシステム1における情報処理の具体例について説明する。
図36は、ゲームシステム1における情報処理に用いられる各種データの一例を示す図である。図36に示す各データは、本体装置2がアクセス可能なメモリ(例えば、フラッシュメモリ84、DRAM85、および/または、スロット23に装着されたメモリカード等)に記憶される。図36に示すように、ゲームシステム1は、ゲームプログラムを記憶する。ゲームプログラムは、本実施形態におけるゲーム処理(例えば、図37および図38に示すゲーム処理)を実行するためのものである。なお、ゲームプログラムには、上述のマテリアルデータ(図12参照)が含まれる。また、上記メモリには、上述のボクセルデータ(図11参照)、更新範囲データ、メッシュデータ、オブジェクトデータ、判定形状データ、レイチェック処理データ、および描画処理データ等が記憶される(図36参照)。
更新範囲データは、上述の更新範囲を示すデータである。本実施形態においては、上述のSDFによって更新範囲が表される。
メッシュデータは、ボクセルオブジェクトのメッシュに関する各種データを含む。図32に示すように、本実施形態においては、メッシュデータは、SVOデータ、表示用メッシュデータ、および判定用メッシュデータを含む。SVOデータは、ボクセルデータから算出される各頂点を、上述のSVO構造で保持するデータである。なお、本実施形態においては、SVOデータには、各頂点の位置を示すデータに加えて、各頂点に設定されるマテリアルを示すデータ(例えば、マテリアルのIDを示すデータ)が含まれる。表示用メッシュデータは、表示用メッシュに関する各種データを含む。具体的には、表示用メッシュデータは、表示用メッシュの各頂点を示すデータと、各頂点に設定されるマテリアルを示すデータ(例えば、マテリアルのIDを示すデータ)を含む。判定用メッシュデータは、判定用メッシュに関する各種データを含む。具体的には、判定用メッシュデータは、判定用メッシュの各頂点を示すデータと、各頂点に設定されるマテリアルを示すデータ(例えば、マテリアルのIDを示すデータ)を含む。
オブジェクトデータは、ボクセルオブジェクト以外のオブジェクト(例えば、プレイヤキャラクタや仮想オブジェクト等)に関する各種データを含む。オブジェクトデータは、ゲーム空間に登場するオブジェクト毎に記憶される。オブジェクトデータは、例えば、当該オブジェクトの位置、速度、および状態等を示すデータを含む。
判定形状データは、ボクセルオブジェクトに設定された判定形状(例えば、バウンディングボックスおよびその特徴点)に関する各種データや配置ライトの光が届く範囲に基づく判定形状に関する各種データを含む。
レイチェック処理データは、[2-7.マテリアルを変更する処理]で述べたレイチェックによる光影判定に関する各種データ(例えば、各特徴点と光源との間に物体がヒットするか否かを示すデータ等)を含む。
描画処理データは、[2-7.マテリアルを変更する処理]で述べたシャドウバッファに基づく光影判定に関する各種データ(例えば、フレームバッファ、デプスバッファ、シャドウバッファ、および特徴点毎の光影判定結果等)を含む。
図37は、ゲームシステム1によって実行されるゲーム処理の流れの一例を示すフローチャートである。図38は、図37におけるステップS7のマテリアル変更処理の一例を示すサブルーチンである。ゲーム処理の実行は、例えば、上記ゲームプログラムの実行中において、ユーザの指示に応じてゲームが開始されたことに応じて開始される。なお、ステップS1~S15の一連の処理からなる処理ループは、1フレームに1回のサイクルで実行される。
なお、本実施形態では、本体装置2のプロセッサ81が、ゲームシステム1に記憶されている上記ゲームプログラムを実行することによって、図37および図38に示す各ステップの処理を実行するものとして説明する。ただし、他の実施形態においては、上記各ステップの処理のうちの一部の処理を、プロセッサ81とは別のプロセッサ(例えば、専用回路等)が実行するようにしてもよい。また、ゲームシステム1が他の情報処理装置(例えば、サーバ)と通信可能である場合、図37および図38に示す各ステップの処理の一部は、他の情報処理装置において実行されてもよい。また、図37および図38に示す各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。
また、プロセッサ81は、図37および図38に示す各ステップの処理を、メモリ(例えば、DRAM85)を用いて実行する。すなわち、プロセッサ81は、各処理ステップによって得られる情報(換言すれば、データ)をメモリに記憶し、それ以降の処理ステップにおいて当該情報を用いる場合には、メモリから当該情報を読み出して利用する。
図37において、プロセッサ81は、ユーザによる操作入力を示す操作データを取得(ステップS1)、次のステップに処理を進める。例えば、プロセッサ81は、コントローラ通信部83および/または各端子17および21を介して各コントローラから出力される操作データや本体装置2(例えば、タッチパネル13)から出力される操作データを取得する。
次に、プロセッサ81は、処理が必要なゲーム空間のオブジェクトのうち、処理が完了していないいずれかのオブジェクト(固有ボクセル空間により定義されたボクセルオブジェクトを含む)を処理対象として指定し、指定されたオブジェクトについて、速度を算出する処理、および前のフレームにおけるオブジェクト同士の接触の結果を反映する処理を実行し(ステップS2)、次のステップに処理を進める。オブジェクトの速度は、後述するステップS13の処理において、今回のフレームにおけるオブジェクトの位置を算出するために用いられる。例えば、指定されたオブジェクトがプレイヤキャラクタである場合、プレイヤキャラクタの速度は、ステップS1で取得された操作データに基づいて算出される。また、指定されたオブジェクトが、ユーザによって操作されないオブジェクト(例えば、敵オブジェクト)である場合、当該オブジェクトの速度は、ゲームプログラムにおいて予め定められたルールに基づいて算出される。例えば、敵オブジェクトの速度は、地形オブジェクト上に配置されて移動していない場合には0に設定され、プレイヤキャラクタに把持されている場合にはプレイヤキャラクタの速度と同じに設定され、プレイヤキャラクタによる投げるアクションによって放たれた場合には、上記ルールで決められた大きさでプレイヤキャラクタの方向に基づく方向に移動する速度に設定される。具体的には、オブジェクトの速度は、オブジェクト間の相互作用を含めた仮想的な物理演算に基づいて算出される。例えば、オブジェクト同士の衝突による反発や、接触による摩擦等の相互作用、仮想的な重力による落下や仮想的な空気抵抗による減速等が速度決定に反映される。
また、前のフレームにおけるオブジェクト同士の接触の結果を反映する処理には、前のフレームにおけるコリジョン判定(後述するステップS12)においてオブジェクト同士が接触したと判定された場合に、当該オブジェクトに対して接触による影響を与える処理が含まれる。上記処理は、例えば次のような処理である。
・前のフレームにおいてプレイヤキャラクタが溶岩の地形オブジェクトに接触したと判定された場合に、プレイヤキャラクタの体力を減少させる処理
・前のフレームにおいて引き抜きアクションあるいはパンチアクション等によってプレイヤキャラクタが地形オブジェクトに接触したと判定された場合に、破片オブジェクト(例えば、光オブジェクト202;図30参照)を生成する処理
・前のフレームにおいてプレイヤキャラクタが堅固な強度を有する性質のマテリアルで構成されるボクセルブロック上に乗った場合に、プレイヤキャラクタを当該ボクセルブロック上に乗った状態で維持させる処理(図32参照)
・前のフレームにおいてプレイヤキャラクタが軟弱な流動性を有する性質のマテリアルで構成されるボクセルブロック上に乗った場合に、プレイヤキャラクタを当該ボクセルブロックの内側に沈み込ませる処理(図33参照)
以上のステップS2の処理においてオブジェクトに関する状態が変更された場合、プロセッサ81は、当該オブジェクトに関してメモリに記憶されているオブジェクトデータを、変更後の内容を示すように更新する。
次に、プロセッサ81は、上記ステップS2で指定されたオブジェクトによって、ボクセルオブジェクトを更新させる更新イベントが発生したか否かを判定する(ステップS3)。例えば、上記ステップS3の判定は、前のフレームにおけるコリジョン判定(後述するステップS12)の結果に基づいて行われる。一例として、前のフレームにおいてパンチアクション等によってプレイヤキャラクタが地形オブジェクトに接触したと判定された場合には、地形オブジェクトの一部を消去する更新イベントが発生したと判定される。そして、プロセッサ81は、更新イベントが発生した場合、ステップS4に処理を進める。一方、プロセッサ81は、更新イベントが発生していない場合、ステップS6に処理を進める。
ステップS4において、プロセッサ81は、ボクセルオブジェクトの更新を行う更新範囲をゲーム空間に設定して、次のステップに処理を進める。例えば、更新範囲の具体的な内容(例えば、位置、形状、および大きさ)は、ゲームプログラムにおいて更新イベントの種類毎に関連付けられている。上記ステップS4で設定される更新範囲は、上記ステップS3において発生すると判定された更新イベントの種類に関連付けられる内容となるように設定される。上記ステップS4において、プロセッサ81は、設定された更新範囲を示すデータを、更新範囲データとしてメモリに記憶する。
次に、プロセッサ81は、上記ステップS4で設定された更新範囲に対応するボクセルについて、更新イベントに応じた変更を行い(ステップS5)、ステップS6に処理を進める。例えば、プロセッサ81は、更新範囲内のボクセルオブジェクトを消去や縮小されたように変形させたり、更新範囲内にボクセルオブジェクトが追加されたように変形させたりする場合には、当該更新範囲に対応するボクセルの密度を変更するように、メモリに記憶されているボクセルデータを更新する(上記[2-2.ボクセルデータの更新]参照)。
ステップS6において、プロセッサ81は、処理が必要な全てのオブジェクト(固有ボクセル空間により定義されたボクセルオブジェクトを含む)について上記ステップS2~S5の処理が完了したか否かを判定する。そして、プロセッサ81は、全てのオブジェクトの処理が完了した場合、ステップS7に処理を進める。一方、プロセッサ81は、何れかのオブジェクトの処理が完了していない場合、上記ステップS2に戻って処理を繰り返す。
次に、プロセッサ81は、マテリアル変更処理を行い(ステップS7)、ステップS8に処理を進める。以下、図38を参照して、上記ステップS7におけるマテリアル変更処理について説明する。
図38において、プロセッサ81は、処理が必要な全てのボクセル空間(固有ボクセル空間を含む)について後述するステップS23~S32の処理が完了したか否かを判定する(ステップS21)。そして、プロセッサ81は、全てのボクセル空間の処理が完了した場合、当該サブルーチンによる処理を終了する。一方、プロセッサ81は、何れかのゲーム空間の処理が完了していない場合、ステップS22に処理を進める。
ステップS22において、プロセッサ81は、処理が必要なボクセル空間のうち、処理が完了していないいずれかのボクセル空間を処理対象として選択して、次のステップに処理を進める。
次に、プロセッサ81は、上記ステップS22において選択されたボクセル空間により定義されているボクセルオブジェクトが、光影判定によりマテリアルが変更される対象であるか否かを判定する(ステップS23)。そして、プロセッサ81は、上記ボクセルオブジェクトが光影判定によりマテリアルが変更される対象である場合、ステップS24に処理を進める。一方、プロセッサ81は、上記ボクセルオブジェクトが光影判定によりマテリアルが変更される対象でない場合、上記ステップS21に戻って処理を繰り返す。
ステップS24において、プロセッサ81は、上記ステップS22において選択されたボクセル空間により定義されているボクセルオブジェクトに、配置ライトの光が当たる範囲に入る、または当該配置ライトの光が当たる範囲から出る変化が生じているか否かを判定する。一例として、プロセッサ81は、後述するステップS12における前フレームのコリジョン判定結果に基づいて、上記ボクセルオブジェクトの判定用メッシュが、上記配置ライトの光が届く範囲に基づいて設定された判定形状に接触していない状態から接触する状態となった場合、または当該判定形状に接触している状態から接触していない状態になった場合(例えば、図30に示す敵オブジェクト251aが範囲282に接触する状態となった場合、または図31に示す範囲282から敵オブジェクト251b全体が出る状態となった場合;上記[2-7.マテリアルを変更する処理]における第2例参照)、上記ステップS24において肯定判定する。他の例として、プロセッサ81は、後述するステップS12における前フレームのコリジョン判定結果に基づいて、上記ボクセルオブジェクトの判定用メッシュの一部が上記判定形状の外に出ている状態から当該判定用メッシュの全部が上記判定形状内に含まれる状態となった場合、または当該判定用メッシュの全部が当該判定形状内に含まれている状態から当該判定用メッシュの一部が上記判定形状の外に出ている状態になった場合、上記ステップS24において肯定判定する。そして、プロセッサ81は、上記ボクセルオブジェクトに上記状態の変化が生じている場合、ステップS31に処理を進める。一方、プロセッサ81は、上記ボクセルオブジェクトに上記変化が生じていない場合、ステップS25に処理を進める。なお、プロセッサ81は、上記ステップS22において選択されたボクセル空間により定義されているボクセルオブジェクトが上記配置ライトの光によってマテリアルが変化する対象である場合に限って、上記ステップS24の処理を行ってもよい。すなわち、プロセッサ81は、上記ボクセルオブジェクトが上記配置ライトの光によってマテリアルが変化する対象でない場合、上記ステップS24における処理をキャンセルして、そのままステップS25に処理を進めてもよい。
ステップS25において、プロセッサ81は、上記ステップS22において選択されたボクセル空間により定義されているボクセルオブジェクトに設定されている、処理が必要な全ての特徴点(図28および図29参照)について後述するステップS26~S30の処理が完了したか否かを判定する。そして、プロセッサ81は、何れかの特徴点の処理が完了していない場合、ステップS26に処理を進める。一方、プロセッサ81は、全ての特徴点の処理が完了した場合、ステップS31に処理を進める。
ステップS26において、プロセッサ81は、処理が必要な上記特徴点のうち、処理が完了していないいずれかの特徴点を処理対象として選択して、次のステップに処理を進める。
次に、プロセッサ81は、上記ステップS26において選択されている特徴点を、シャドウバッファに基づいて光影判定するか否かを判定する(ステップS27)。例えば、プロセッサ81は、後述するステップS14における前フレームのゲーム画像生成処理(描画処理)においてシャドウバッファを用いたレンダリング処理が行われている、かつ、上記特徴点がゲーム空間における描画範囲内に配置されている場合、上記ステップS27において肯定判定する。そして、プロセッサ81は、上記特徴点をシャドウバッファに基づいて光影判定する場合、ステップS28に処理を進める。一方、プロセッサ81は、上記特徴点をシャドウバッファに基づいて光影判定しない場合、ステップS30に処理を進める。
ステップS28において、プロセッサ81は、シャドウバッファに基づいて、現在の処理対象となっている特徴点の光影判定を行い、ステップS29に処理を進める。例えば、プロセッサ81は、後述するステップS14における前フレームのゲーム画像生成処理(描画処理)において用いられているシャドウバッファを用いて、上記[2-7.マテリアルを変更する処理]における第3例で述べたシャドウバッファに基づく判定方法に従って、処理対象の特徴点が影に入っているか光が当たる範囲に位置しているかを判定し、当該判定結果に基づいてメモリに記憶されている描画処理データを更新する。
ステップS29において、プロセッサ81は、上記ステップS26において選択されている特徴点を、レイチェックを用いて光影判定するか否かを判定する。例えば、プロセッサ81は、後述するステップS14における前フレームのゲーム画像生成処理(描画処理)においてシャドウバッファを用いたレンダリング処理が行われていない場合、上記特徴点がゲーム空間における描画範囲外に配置されている場合、上記ステップS27において否定判定されている場合、シャドウバッファを用いた光影判定およびレイチェックを用いた光影判定の両方を行いたい場合、上記ステップS29において肯定判定する。そして、プロセッサ81は、レイチェックを用いて上記特徴点を光影判定する場合、ステップS30に処理を進める。一方、プロセッサ81は、レイチェックを用いて上記特徴点を光影判定しない場合、上記ステップS25に戻って処理を繰り返す。
ステップS30において、プロセッサ81は、現在の処理対象となっている特徴点のレイチェックによる光影判定を行い、上記ステップS25に戻って処理を繰り返す。例えば、プロセッサ81は、上記[2-7.マテリアルを変更する処理]における第1例および第3例で述べたレイチェックによって判定する方法に従って、処理対象の特徴点が影に入っているか光が当たる範囲に位置しているかを判定し、当該判定結果に基づいてメモリに記憶されているレイチェック処理データを更新する。
一方、ステップS31において、プロセッサ81は、上記ステップS22において選択されたボクセル空間におけるボクセルのマテリアルを変更するか否かを判定する。第1の例として、上記ステップS24において肯定判定されることにより上記ステップS31が実行されている場合、上記[2-7.マテリアルを変更する処理]における第2例で述べた光影判定方法に基づいて、上記ステップS31における判定が行われる。第2の例として、上記ステップS25において肯定判定されるとともに、全特徴点がレイチェックにより光影判定されている場合、上記[2-7.マテリアルを変更する処理]における第1例で述べた光影判定方法に従って、メモリに記憶されているレイチェック処理データを参照して上記ステップS31における判定が行われる。第3の例として、上記ステップS25において肯定判定されるとともに、少なくとも一部の特徴点がシャドウバッファに基づいて光影判定されている場合、上記[2-7.マテリアルを変更する処理]における第3例で述べた光影判定方法に従って、メモリに記憶されている描画処理データ(および必要に応じてレイチェック処理データ)を参照して上記ステップS31における判定が行われる。そして、プロセッサ81は、マテリアルを変更する場合、ステップS32に処理を進める。一方、プロセッサ81は、マテリアルを変更しない場合、上記ステップS21に戻って処理を繰り返す。
ステップS32において、プロセッサ81は、上記ステップS22において選択されたボクセル空間におけるボクセルのマテリアルを変更して、上記ステップS21に戻って処理を繰り返す。第1の例として、上記ステップS24において肯定判定されることにより上記ステップS32が実行されている場合、上記[2-7.マテリアルを変更する処理]における第2例で述べたマテリアル変更方法に従って、処理対象のボクセル空間における全てのボクセルを対象としてマテリアルを変更して、メモリに記憶されているボクセルデータを更新する。第2の例として、上記ステップS25において肯定判定されている場合、上記[2-7.マテリアルを変更する処理]における第1例または第3例で述べたマテリアル変更方法に従って、処理対象のボクセル空間における全てのボクセルを対象としてマテリアルを変更して、メモリに記憶されているボクセルデータを更新する。
図37に戻り、上記ステップS7におけるマテリアル変更処理の後、プロセッサ81は、ゲーム空間におけるボクセルオブジェクトの頂点を更新し(ステップS8)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS5の処理においてボクセルデータが更新された場合には、更新後のボクセルデータに基づいて新たな頂点を算出する。なお、新たな頂点の位置は、上記[2-3.頂点の算出]で述べた方法に従って算出される。また、新たな頂点のマテリアルは、上記[2-4.頂点のマテリアルの決定]で述べた方法に従って算出される。
次に、プロセッサ81は、頂点の簡略化を行い(ステップS9)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS8の処理による更新後の各頂点について、上記[2-5.頂点の簡略化]で述べた方法に従って簡略化を行う。そして、プロセッサ81は、メモリに記憶されるSVOデータを、上記ステップS8およびステップS9の処理によって得られた各頂点を示すように更新する。なお、上記ステップS8およびステップS9の処理は、ボクセルデータの全体について頂点を算出しなおす必要はなく、上記ステップS5の処理においてボクセルの内容が変更された部分についてのみ実行されてもよい。
次に、プロセッサ81は、メモリに記憶されるSVOデータに基づいてボクセルオブジェクトの表示用メッシュを更新し(ステップS10)、次のステップに処理を進める。なお、表示用メッシュの各頂点の位置および表示用メッシュの各ポリゴンのマテリアル(例えば、ポリゴンの各頂点に設定されるマテリアル)は、上記[2-6.メッシュの生成]および[2-6-1.表示用メッシュのマテリアルの決定]で述べた方法に従って算出される。上記ステップS10において、プロセッサ81は、メモリに記憶されている表示用メッシュデータを、更新後の表示用メッシュの各頂点の位置およびマテリアルを示すように更新する。なお、プロセッサ81は、上記ステップS10の完了を待たずに、後述するステップS11以降の処理を開始し、並行して実行するようにしてもよい。その場合、上記ステップS10は、後述するステップS14の開始前に完了している必要がある。
次に、プロセッサ81は、メモリに記憶されるSVOデータに基づいてボクセルオブジェクトの判定用メッシュを更新し(ステップS11)、次のステップに処理を進める。なお、判定用メッシュの各頂点の位置および判定用メッシュの各ポリゴンのマテリアル(例えば、ポリゴンの各頂点に設定されるマテリアル)は、上記[2-6.メッシュの生成]および[2-6-2.判定用メッシュのマテリアルの決定]で述べた方法に従って算出される。上記ステップS11において、プロセッサ81は、メモリに記憶されている判定用メッシュデータを、更新後の判定用メッシュの各頂点の位置およびマテリアルを示すように更新する。
なお、図37に示す例においては、上記ステップS11における判定用メッシュの生成処理を毎フレーム実行するものとしたが、判定用メッシュの生成処理は、毎フレーム実行されなくてもよい。例えば、後述するステップS12のコリジョン判定処理が所定の条件を満たすフレームにおいてのみ実行される場合、プロセッサ81は、当該コリジョン判定を行うフレームで判定用メッシュの生成処理を実行してもよい。また、プロセッサ81は、ゲーム空間のうちで上記ステップS12のコリジョン判定を行う領域内のボクセルについて、判定用メッシュの生成処理を実行してもよい。例えば、ゲーム空間においてプレイヤキャラクタの周囲にはボクセルオブジェクト以外にはコリジョン判定の対象となるオブジェクトが存在しない状況(つまり、プレイヤキャラクタとその周囲のボクセルオブジェクトとのコリジョン判定のみを行えばよい状況)では、プロセッサ81は、プレイヤキャラクタを基準とした所定範囲内のボクセルについて判定用メッシュの生成処理を実行してもよい。
次に、プロセッサ81は、メモリに記憶されている判定用メッシュデータとオブジェクトデータとに基づいて、ゲーム空間における各オブジェクトについてコリジョン判定を行い(ステップS12)、次のステップに処理を進める。例えば、プロセッサ81は、ボクセルオブジェクトについては判定用メッシュを用い、ボクセルオブジェクトでないオブジェクトについては当該オブジェクトに設定される所定形状の判定領域を用いて、コリジョン判定を行う。なお、本実施形態においては、上記ステップS2で算出された速度を考慮してステップS12のコリジョン判定が行われる。つまり、プロセッサ81は、各オブジェクトの位置として、上記速度で移動した場合の位置を用いてコリジョン判定を行う。
本実施形態においては、上記ステップS12のコリジョン判定によって、例えば次の接触の有無が判定される。
・移動やパンチアクション等のアクションを行うプレイヤキャラクタと、地形オブジェクトや敵オブジェクトとの接触
・(光オブジェクトを)持ち上げるアクションを行うキャラクタと光オブジェクトとの接触
・光影判定の対象となるオブジェクト(例えば、図30および図31に示す敵オブジェクト251)と配置ライトの光が届く範囲(例えば、図30および図31に示す範囲282)に基づく判定形状との接触
なお、上記ステップS12のコリジョン判定においてオブジェクト同士が接触したと判定された場合には、次のフレームにおける上記ステップS2の処理において、オブジェクト同士の接触の結果を反映する処理が実行されたり、次のフレームにおける上記ステップS3の処理において、更新イベントが発生したと判定されたり、後述する同じフレームにおけるステップS26およびステップS32の処理において、光影判定が実行されたりする。
次に、プロセッサ81は、ゲーム空間における各オブジェクトの動作を制御し(ステップS13)、次のステップに処理を進める。例えば、プロセッサ81は、プレイヤキャラクタについては、上記ステップS1において取得された操作データに基づいて、移動や各種アクションを行わせる制御を行う。そして、プロセッサ81は、所定のアクションが発生した場合には、ゲーム空間内に、当該アクションに応じたコリジョン判定のための領域を生成する。なお、1回の上記ステップS13の処理においては、プロセッサ81は、複数フレームにわたって行われる動作(例えば、プレイヤキャラクタによるアクション)については、1フレーム分の動作の進行を行うように各オブジェクトが制御される。これにより、上記ステップS13の処理が複数フレームにわたって繰り返し実行されることで、移動や各種アクションに関する一連の動作を各オブジェクトが行うこととなる。また、オブジェクトの位置は、基本的には、上記ステップS2で算出される速度で移動した後の位置となるように決定される。ただし、上記ステップS12のコリジョン判定によって他のオブジェクトと接触すると判定され、接触した他のオブジェクトによって移動が妨げられる場合には、当該オブジェクトの位置が変化しないように決定されてもよい。そして、上記ステップS13において、プロセッサ81は、メモリに記憶されているオブジェクトデータを、上記ステップS13における制御後のオブジェクトを示す内容となるように更新する。
次に、プロセッサ81は、ゲーム画像を生成し(ステップS14)、次のステップに処理を進める。例えば、プロセッサ81は、ボクセルオブジェクトの表示用メッシュの各ポリゴンおよびボクセルオブジェクト以外の各オブジェクトのポリゴンについて、仮想カメラに基づいて描画を行うことでゲーム画像を生成する。なお、表示用メッシュの各ポリゴンは、上記[2-6-1.表示用メッシュのマテリアルの決定]で述べた方法に従って、ポリゴンに設定されるマテリアルに対応するテクスチャ等の描画設定を用いて描画される。また、プロセッサ81は、ゲーム空間においてディレクショナルライトや配置ライト等の光源を設定し、当該光源に基づくライティング処理を行って、ゲーム空間に影を付す処理を含むレンダリング処理を実行する。例えば、プロセッサ81は、ゲーム空間内に光オブジェクト(図30および図31参照)が配置されている場合、当該光オブジェクトの表面から放射状に光を放つポイントライトを上記配置ライトとして設定するとともに、当該配置ライトの光が届く範囲(例えば、図30および図31に示す範囲282)を設定する。上記ステップS14で生成されたゲーム画像は、1フレームに1回のサイクルで表示装置に出力されて表示される。
なお、上記ステップS14において、シャドウバッファを用いて影が付与されたゲーム画像が生成される場合、プロセッサ81は、シャドウバッファを更新する処理を行って、当該シャドウバッファに格納されているシャドウマップに基づいて影を生成してフレームバッファに書き込む処理を含むレンダリング処理を実行する。例えば、プロセッサ81は、上記[2-7.マテリアルを変更する処理]で述べたシャドウマップを生成してシャドウバッファに格納する方法に従ってシャドウバッファを更新して、当該シャドウバッファを用いた描画処理を行うとともに、当該描画処理に基づいて、メモリに記憶されている描画処理データを更新する。
図37に戻り、ステップS15において、プロセッサ81は、ゲームを終了するか否かを判定する。例えば、プロセッサ81は、ゲームを終了するための所定の操作入力がユーザによって行われた場合やゲームを終了する条件が満たされた場合、上記ステップS15において肯定判定する。そして、プロセッサ81は、ゲームを終了する場合、当該フローチャートによる処理を終了する。一方、プロセッサ81は、ゲームを終了しない場合、上記ステップS1に戻って処理を繰り返す。以降、上記ステップS15においてゲームを終了すると判定されるまで、上記ステップS1~S15の一連の処理が繰り返し実行される。
このように、本実施形態においては、ボクセルオブジェクトが影に入っているか光が当たる範囲に位置しているかによって、当該ボクセルオブジェクトが定義されているボクセル空間における全てのボクセルを対象としてマテリアルを変更する。これにより、ゲーム中の判定に基づいた所定のボクセル空間のボクセルのマテリアル変化を用いたゲームを実現することができる。
なお、上述したボクセルオブジェクトの判定対象と、光が当たる範囲に当該判定対象が位置しているか否かを判定する判定方法との組み合わせは、固定の組み合わせでなくてもよく、様々なバリエーションで行われてもよい。例えば、上記判定対象と上記判定方法との組み合わせは、任意の例と入れ替えてもよい。一例として、上記[2-7.マテリアルを変更する処理]における第2例で用いた判定対象である敵オブジェクト251は、当該敵オブジェクト251を内包するバウンディングボックスを判定形状として、光が当たる範囲に敵オブジェクト251が位置しているか否かが判定されてもよい。この場合、第1の例として、上記バウンディングボックスに基づいて設定された特徴点(図28参照)が光が届く範囲282に基づいて設定された判定形状内に配置されている数に基づいて、光が当たる範囲282内に敵オブジェクト251が位置しているか否かが判定されてもよい。第2の例として、光オブジェクト202を光源として、上記バウンディングボックスに基づいて設定された特徴点毎にレイチェックを用いて光影判定する、またはシャドウバッファを用いて光影判定することにより、光が当たる範囲282内に敵オブジェクト251が位置しているか否かが判定されてもよい。また、この場合、図38に例示したサブルーチンにおいて、上記ステップS25~S30による処理により第2例で用いた判定対象である敵オブジェクト251が光影判定されて、上記ステップS24による処理がスキップされてもよい。
また、上述した説明では、上記特徴点の1つに対して、シャドウバッファを用いる光影判定およびレイチェックによる光影判定の両方が行われる場合もあり得る処理手順を用いたが、何れか一方の光影判定が行われる処理手順であってもよい。この場合、図38に例示したサブルーチンにおいて、上記ステップS28の処理が行われた後、上記ステップS29による処理が行われずに、上記ステップS25に戻って処理が繰り返されてもよい。
なお、上述した説明では、3次元空間におけるボクセルに設定されるボクセルデータに基づいて、3次元のメッシュが生成されることによりボクセルオブジェクトが規定される例を用いたが、2次元のボクセルに設定されるボクセルデータに基づいて、ボクセルオブジェクトが規定されてもかまわない。
また、ゲームシステム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、スマートフォン、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。この場合、プレイヤキャラクタ等を動作させるユーザ操作を行うための入力装置は、左コントローラ3、右コントローラ4、またはタッチパネル13等でなくてもよく、別のコントローラ、マウス、タッチパッド、タッチパネル、トラックボール、キーボード、十字キー、スライドパッド等であってもよい。
また、上述した説明では情報処理をゲームシステム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲームシステム1がさらに他の装置(例えば、別のサーバ、他の情報処理装置、他のゲーム装置、他の携帯端末等)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施形態においては、ゲームシステム1のプロセッサ81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、ゲームシステム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じてゲームシステム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD-ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。