(システム構成)
以下、図面を参照して、本実施形態のゲームシステム1(情報処理システムの一例)について説明する。図1は、本実施形態におけるゲームシステム1の一例を示す図である。図1に示すように、ゲームシステム1は、ゲーム装置としての本体装置2と、左コントローラ3と、右コントローラ4とを備える。本体装置2は、ディスプレイ12を備える。なお、左コントローラ3及び右コントローラ4は、本体装置2から着脱可能に装着されてもよい。
左コントローラ3は、ユーザの左手で操作されるコントローラであり、右コントローラ4は、ユーザの右手で操作されるコントローラである。左コントローラ3及び右コントローラ4は、複数の操作ボタンと、方向入力部としてのアナログスティックとを含む。
図2は、ゲームシステム1の内部構成の一例を示すブロック図である。図2に示すように、本体装置2は、プロセッサ20と、スロットインターフェイス(I/F)23と、スロット24と、フラッシュメモリ25と、DRAM26とを備える。プロセッサ20は、CPU(Central Processing Unit)21と、GPU(Graphics Processing Unit)22とを含む。CPU21は、ゲームプログラムを実行可能であり、コントローラ3,4からの操作データを処理したり、操作データに基づいてゲーム処理を行ったり、GPU22に画像を生成させるための命令を送信したりする。GPU22は、画像処理を行うためのプロセッサである。GPU22は、仮想オブジェクトの頂点を座標変換するための頂点シェーダ機能を有する。なお、CPU21とGPU22とは、それぞれ別々のチップ上に実装されてもよいし、これらはSoC(System-on-a-chip)として1つのチップ上に実装されてもよい。
プロセッサ20には、スロットI/F23、フラッシュメモリ25、DRAM26、ディスプレイ12が接続される。また、プロセッサ20には、左インターフェイス(I/F)を介して左コントローラ3が接続され、右インターフェイス(I/F)を介して右コントローラ4が接続される。スロット24には、外部記憶媒体が着脱可能に挿入される。外部記憶媒体には、プログラム(後述するゲームプログラム)やデータ(後述するパーツ形状データや地形パーツ配置データ等)が記憶される。なお、これらプログラムやデータは、フラッシュメモリ25に予め記憶されてもよいし、ネットワーク(例えばインターネット)からダウンロードされてフラッシュメモリ25に記憶されてもよい。
外部記憶媒体(又はフラッシュメモリ25)に記憶されたプログラムやデータは、後述するゲームが開始される際にDRAM26に読み込まれる。CPU21が当該プログラムを実行することにより、後述するゲーム処理が行われる。また、CPU21は、画像をディスプレイ12に表示させるための命令をGPU22に対して送り、GPU22は、当該命令に応じて画像を描画し、ディスプレイ12に画像を表示させる。なお、本体装置2にはディスプレイ12とは異なる外部の表示装置に接続され、GPU22によって生成された画像が、当該外部の表示装置に表示されてもよい。
(本実施形態のゲーム及び画像処理の概要)
次に、本実施形態のゲームの概要について説明する。図3は、本実施形態のゲームが行われた場合の仮想空間の一例を示す図である。本実施形態のゲームプログラムが実行された場合、本体装置2において仮想空間が定義され、仮想空間内に様々な仮想オブジェクトが配置される。ユーザ(プレイヤ)は、左コントローラ3及び右コントローラ4を用いてユーザキャラクタ50を仮想空間内で移動させ、ゲームを進める。
図3に示すように、仮想空間にはxyz直交座標系が設定される。x軸は、仮想空間の横方向の軸であり、z軸は、仮想空間の奥行き方向の軸であり、y軸は、仮想空間の高さ方向の軸である。仮想空間には、仮想オブジェクトとして、地面オブジェクト34と、地面オブジェクト34上を流れる川オブジェクト33とが配置される。地面オブジェクト34は、平面的な基準面であり、例えばxz平面と平行な面である。なお、地面オブジェクト34は、凹凸や起伏を有する実質的な平面(全体として概ね平面)であってもよいし、凹凸や起伏を有さない完全な平面であってもよい。また、仮想空間には、仮想オブジェクトとして、崖オブジェクト30~32が配置される。地面オブジェクト34、崖オブジェクト30~32、及び川オブジェクト33は、仮想空間の地形を表す地形オブジェクトである。
また、地形オブジェクト上には、仮想オブジェクトとして、家オブジェクト40、木オブジェクト41、ユーザキャラクタ50が配置される。ユーザは、ユーザキャラクタ50を操作してゲームを進める。例えば、ユーザキャラクタ50は、地面オブジェクト34上を移動したり、崖オブジェクトに上ったり、地面オブジェクト34に溝を掘ったり、崖オブジェクトを削ったり、地面オブジェクト34又は崖オブジェクト上に新たな崖オブジェクトを追加したりすることができる。
地形オブジェクト(地面オブジェクト34、川オブジェクト33、及び崖オブジェクト30~32)は、複数種類の地形パーツによって構成される。本実施形態では、予め複数種類の地形パーツが用意されており、複数種類の地形パーツを仮想空間に配置することで地面オブジェクト34、川オブジェクト33、崖オブジェクトが構成される。
(地形パーツの一例)
ここで、地形パーツの一例について説明する。図4Aは、崖オブジェクト又は地面オブジェクトを構成する地形パーツGP1の一例を示す図である。図4Bは、崖オブジェクトを構成する地形パーツGP2の一例を示す図である。図4Cは、崖オブジェクトを構成する地形パーツGP3の一例を示す図である。
図4Aに示すように、地形パーツGP1は、複数の頂点Vを含む。複数の頂点により地形パーツGP1の上面S1、複数の側面S2、及び、底面がそれぞれ構成され、これら上面S1、複数の側面S2及び底面により地形パーツGP1が構成される。例えば、地形パーツGP1の上面S1及び底面は、正方形であり、仮想空間における横方向(x軸方向)及び奥行き方向(z軸方向)の長さが、例えば1mの正方形である。また、地形パーツGP1の複数の側面S2は、長方形である。すなわち、地形パーツGP1は、仮想空間の横方向(x軸方向)及び奥行き方向(z軸方向)の長さが1mの直方体である。地形パーツGP1の形状を示すパーツ形状データが、予め外部記憶装置に記憶されている。地形パーツGP1の形状を示すパーツ形状データは、地形パーツGP1の各頂点Vの相対位置(例えば、代表的な頂点からの相対位置)を示すデータを含む。地形パーツGP1が仮想空間に配置された場合、代表的な頂点からの相対位置に基づいて、各頂点の仮想空間における座標値が定まる。
また、図4Bに示すように、地形パーツGP2は、複数の頂点Vを含み、上面S1と、複数の側面S2と、底面S3とで構成される。地形パーツGP2は、崖オブジェクトを構成するパーツである。地形パーツGP2は、地形パーツGP1とは異なる形状を有する。例えば、地形パーツGP2の上面S1は、仮想空間の横方向及び奥行き方向の長さが1mの直角二等辺三角形であり、当該上面S1と3つの側面S2とで三角柱を形成する。また、底面S3は、仮想空間の横方向及び奥行き方向の長さが1mの正方形であり、三角柱の底面の半分を形成する。地形パーツGP2の形状を示すパーツ形状データが、予め外部記憶装置に記憶されている。地形パーツGP2の形状を示すパーツ形状データは、地形パーツGP2の各頂点Vの相対位置を示すデータを含む。
また、図4Cに示すように、地形パーツGP3は、複数の頂点Vを含み、L字型の上面S1と、複数の側面S2と、底面S3とで構成される。地形パーツGP3は、崖オブジェクトの一部を構成するパーツである。地形パーツGP3は、地形パーツGP1及びGP2とは異なる形状を有する。例えば、地形パーツGP3は、仮想空間の横方向(x軸方向)及び奥行き方向(z軸方向)の長さが1mの直方体の一部を切り取ったような形状である。地形パーツGP3の底面S3は、横方向及び奥行き方向の長さが1mの正方形である。地形パーツGP3の形状を示すパーツ形状データが、予め外部記憶装置に記憶されている。地形パーツGP3の形状を示すパーツ形状データは、地形パーツGP3の各頂点Vの相対位置を示すデータを含む。
図4A~図4Cに示すように、各地形パーツは、仮想空間の横方向(x軸方向)及び奥行き方向(z軸方向)に関して正方形となる形状である。すなわち、各地形パーツを真上(y軸方向)から見た場合に、各地形パーツは正方形となる。
なお、図4A~図4Cでは、各地形パーツの面(例えば上面や側面)は平面であるように表示されているが、各地形パーツの面は、凹凸のある面であってもよい。
図4A~図4Cに示す地形パーツの他にも、様々な地形パーツが予め用意されている。例えば、川オブジェクト33を構成する地形パーツや、川と地面との境界部分を構成する地形パーツ、砂の道を構成する地形パーツ等が用意される。これら複数種類の地形パーツを示すパーツ形状データが、予め外部記憶媒体に記憶されている。
(地形パーツを用いた地形の構成)
上述した複数種類の地形パーツが仮想空間内に配置されることで、仮想空間内に地形が構成される。図5は、複数種類の地形パーツを仮想空間内に配置することにより構成される地形の一例を示す図である。
図5では地形全体を仮想空間の上方から見た図が示されている。図5に示すように、仮想空間の上方から見た場合、地形は複数の正方形を格子状に並べた平面のように見える。各正方形は、各地形パーツの上面又は底面である。例えば、崖オブジェクト30は、8つの地形パーツGP1が配置されることにより構成される。この場合、隣接する地形パーツGP1の頂点Vが隣接部分において同じ位置になるように、各地形パーツGP1が予め構成されている。すなわち、ある地形パーツGP1と別の地形パーツGP1とが隣接する場合、その隣接部分においては、当該ある地形パーツGP1の頂点Vと、当該別の地形パーツGP1の頂点Vとは、位置が一致する。
また、崖オブジェクト31は、7つの地形パーツGP1と、1つの地形パーツGP2とにより構成される。また、崖オブジェクト32は、3つの地形パーツGP1と、1つの地形パーツGP3とにより構成される。この場合も、隣接する地形パーツの頂点Vが隣接部分において同じ位置になるように、各地形パーツが予め構成される。
また、地面オブジェクト34は、複数の地形パーツGP1が横方向および奥行き方向に格子状に配置されることにより構成される。また、川オブジェクト33は、複数の地形パーツGP4と、1つの地形パーツGP5とが配置されることで構成される。地形パーツGP4は、川を構成するための予め用意された地形パーツである。また、地形パーツGP5は、川と地面との境界部分を含む地形パーツである。この場合も、隣接する地形パーツの頂点Vが隣接部分において同じ位置になるように、各地形パーツが予め構成される。例えば、図5における右端の列の下から2番目の地形パーツGP4と、下から3番目の地形パーツGP1とは、隣接部分において頂点Vの位置が一致するように予め構成される。
本実施形態では、複数種類の地形パーツの配置を示す地形パーツ配置データが、外部記憶媒体に予め記憶されている。地形パーツ配置データに基づいて複数の地形パーツを配置することで、仮想空間内に地形が構成される。
なお、複数の地形パーツは、隣接可能な地形パーツと隣接不可能な地形パーツとがある。例えば、「砂の道」を構成する地形パーツと、「川」を構成する地形パーツとは互いに隣接しないように構成される。具体的には、隣接可能な2つの地形パーツは、隣接させた場合に隣接部分の各頂点の位置が一致するように、予め頂点の位置が設定されている。
地形パーツ配置データでは、隣接不可能な地形パーツ同士が互いに隣接しないように、各地形パーツの配置が定められている。また、後述するように、仮想空間内に新たに地形パーツを追加する場合や、仮想空間内に配置された地形パーツを別の地形パーツに変更する場合も、隣接不可能な地形パーツ同士が互いに隣接しないように制御される。
(第1変形処理)
ここで、予め記憶された複数の地形パーツを地形パーツ配置データに基づいて配置することにより地形を構成した場合、仮想空間内の地形が単調になり、自然な地形にならないことがある。このため、本実施形態では、地形パーツ配置データに基づいて複数の地形パーツを並べて構成される地形について、各地形パーツを変形させる(歪みを加える)第1変形処理を行う。本実施形態では、画像を描画する毎に第1変形処理が行われる。第1変形処理が行われることで、複数の地形パーツを配置することによって構成される地形が変形し、見た目上自然な地形となる。
図6は、図5に示した複数の地形パーツを配置して構成される地形について、各地形パーツを変形させた後の地形の一例を示す図である。図6に示すように、地形パーツ配置データに基づいて配置される複数の地形パーツを変形することで、各地形パーツは直線状ではなく曲線状(波形状)となる。
具体的には、第1変形処理では、地形パーツ配置データに基づいて仮想空間に配置される各地形パーツの頂点を、当該頂点の仮想空間における位置に応じて変位させることで、各地形パーツが変形される。より具体的には、仮想空間に配置された地形パーツの各頂点が、仮想空間の横方向(x軸方向)及び奥行き方向(z軸方向)に変位される。
図6の下部には、変形前の地形パーツGP1及びGP4の頂点V(x,z)と、変形後の地形パーツGP1及びGP4の頂点V’(x+dx,z+dz)とが示されている。ここで、頂点Vのx座標値の変位量dx、及び、頂点Vのz座標値の変位量dzは、所定の波形を有する関数に基づいて算出される。例えば、変位量dx及びdzは、以下の式によって算出される。
dx=cos(z)×cos(z)×cos(nz)×cos(mz)×α (式1)
dz=cos(x)×cos(x)×cos(nx)×cos(mx)×α (式2)
ここで、式1における「z」は、仮想空間内における変形前の頂点Vのz座標値である。また、式2における「x」は、仮想空間内における変形前の頂点Vのx座標値である。また、「n」および「m」は、正の整数であり、例えば、n=3、m=5であってもよい。また、αは予め定められた係数である。
各地形パーツの全ての頂点に、式1及び式2で算出される変位量を加えることにより、頂点V(x,y,z)は、V’(x+dx,y,z+dz)に変位する。これにより、各地形パーツはx軸方向およびz軸方向に変形する。なお、頂点Vのy座標値は、変形前と変形後とで変化しない。
式1及び式2に示される計算は、GPU22が有する頂点シェーダ機能によって行われる。GPU22は、CPU21からの命令に応じて、地形パーツ配置データに基づいて配置される各頂点の仮想空間における位置を、式1及び式2に基づいて変化させる。これにより、各地形パーツが変形し、仮想空間の地形全体が変形する。そして、GPU22が描画処理を行い、図6に示すような画像がディスプレイ12に表示される。すなわち、ディスプレイ12に画像が表示される毎に(フレーム毎に)、GPU22が、頂点シェーダ機能により各地形パーツの頂点を変位させ、複数のパーツ形状データと地形パーツ配置データとに基づいて構成される地形を変形させた画像を生成する。
式1及び式2から明らかなように、本実施形態では、周期の異なる複数の三角関数を組み合わせることで、所定の波形を有する関数が定義されている。これにより、仮想空間における頂点Vの位置に応じて、異なる変位量を頂点に加えることができ、同じ地形パーツでも異なる位置に配置されれば、異なる形状に変形させることができる。また、変位量dx、dzは、周期の異なる複数の三角関数の組み合わせにより決定されるため、ユーザにその周期性が分かり難い。このため、ユーザにとって見た目上、自然な地形とすることができる。
なお、式1及び式2は単なる一例であり、頂点Vの変位量dx、dzは他の式に基づいて算出されてもよい。また、頂点Vの変位量dx、dzは、当該頂点Vの仮想空間における位置に応じてランダムに決定されてもよい。
図7は、各地形パーツに対する第1変形処理が行われない場合のディスプレイ12に表示される画像の一例を示す図である。図8は、各地形パーツに対する第1変形処理が行われる場合のディスプレイ12に表示される画像の一例を示す図である。
図7に示すように、第1変形処理が行われない場合、仮想空間に配置される崖オブジェクト31は、全体的に直線的で角張った形状となる。地面34と川オブジェクト33との境界も直線的で角張った形状となる。また、予め用意された地形パーツが組み合わされることで地形全体が形成されるため、仮想空間内に同じ形状の地形パーツが複数配置されることになり、地形全体が単調になる。
一方、各地形パーツに対して第1変形処理が行われる場合は、図8に示すように、崖オブジェクト31の外形は全体的に波打った形状となり、より自然な形状となる。地面34と川オブジェクト33の境界も同様である。また、地形パーツの頂点Vの位置に応じて当該頂点Vの変位量が異なるため、同じ地形パーツが仮想空間に複数配置されても変形後の各地形パーツの形状は異なり、地形全体が単調にならない。
(ユーザによる地形の更新)
ここで、本実施形態のゲームでは、ユーザが所定の操作を行うことにより、ユーザキャラクタ50に仮想空間内で溝を掘らせたり、崖オブジェクトを削らせたり、地面や崖オブジェクトの上に新たな崖オブジェクトを追加したりすることができる。例えば、ユーザキャラクタ50が崖オブジェクトを削る動作を行った場合、その動作を行った位置に配置された地形パーツは削除される。また、ユーザキャラクタ50が地面上で土を盛る動作を行った場合、その動作を行った位置に地形パーツが新たに追加される。以下では、ユーザが仮想空間に配置された地形パーツを削除したり、追加したり、変更したりすることについて説明する。
まず、地形パーツの削除について説明する。図9は、ユーザキャラクタ50が崖オブジェクトの一部を削る動作を行った場合のディスプレイ12に表示される画像の一例を示す図である。図10Aは、ユーザキャラクタ50が崖オブジェクトの一部を削る動作を行う前の仮想空間を上方から見た図である。図10Bは、ユーザキャラクタ50が崖オブジェクトの一部を削る動作を行った後の仮想空間を上方から見た図である。
例えば、図8に示すように崖オブジェクト31の右隣にユーザキャラクタ50が位置しているときにユーザが所定の操作を行なった場合、図9に示すように崖オブジェクト31の一部が削られる。なお、図9では、削られた崖オブジェクト31の一部が破線で示されているが、実際には崖オブジェクト31の一部が削られた後は、破線部分は画面に表示されない。
具体的には、図10Aに示すように、崖オブジェクト31は、削られる前は7つの地形パーツにより構成される。ユーザキャラクタ50が位置Paの近傍でユーザが所定の操作を行った場合、図10Bに示すように、位置Paの地形パーツGP1が削除される。
より具体的には、図10Aに示す状態では、位置Paに地形パーツGP1が配置されるという情報が、地形パーツ配置データに記憶されている。この状態で、ユーザキャラクタ50が崖オブジェクトを削る動作を行った場合、位置Paに地形パーツGP1が配置されるという情報が、地形パーツ配置データから削除される。これにより、崖オブジェクト31の一部である地形パーツGP1が削られる。位置Pbの地形パーツGP1についても同様に、ユーザキャラクタ50が崖オブジェクトを削る前は、位置Pbに地形パーツGP1が配置されるという情報が、地形パーツ配置データに記憶されている。この状態で、ユーザキャラクタ50が崖オブジェクトを削る動作を行った場合、位置Pbに地形パーツGP1が配置されるという情報が、地形パーツ配置データから削除される。
次に、地形パーツの追加について説明する。図11は、ユーザキャラクタ50が地面を掘り、地面に土を盛る動作を行った場合のディスプレイ12に表示される画像の一例を示す図である。図12Aは、地形パーツGP1が追加される前の仮想空間を上方から見たときの一例を示す図である。図12Bは、地形パーツGP1が追加された後の仮想空間を上方から見たときの一例を示す図である。
図11に示すように、ユーザキャラクタ50が地面上にいるときにユーザが所定の操作を行なった場合、地面の一部が削られてそこに溝が形成される。さらにユーザが所定の操作を行った場合、その溝の隣には、新たな崖オブジェクト(地形パーツGP1)が追加される。具体的には、ユーザキャラクタ50が図12Aの破線で示される位置Pcに対して溝を掘る動作を行った場合、位置Pcにある地形パーツGP1が削除され、溝が形成される(図12B)。そして、ユーザキャラクタ50が土を盛る動作を行った場合、溝の隣の位置Pdには、地形パーツGP1が追加される。
より具体的には、位置Pcに地形パーツGP1が配置されるという情報が地形パーツ配置データから削除されるとともに、位置Pdに地形パーツGP1が配置されるという情報が、地形パーツ配置データに追加される。そして、画像が描画される際に、上述した第1変形処理が行われる。これにより、新たな地形パーツGP1の各頂点の仮想空間における位置に応じて、新たな地形パーツGP1の各頂点が変位され、当該新たな地形パーツGP1が変形する。各頂点の変位量は、式1及び式2に基づいて算出される。
上述したように、地形パーツには、互いに隣接可能な地形パーツと隣接不可能な地形パーツとがあり、新たに地形パーツを追加する場合、互いに隣接可能な地形パーツが隣接するように(互いに隣接不可能な地形パーツが隣接しないように)制御される。このため、ある位置に追加される地形パーツの種類は、当該ある位置の隣接位置に配置されている地形パーツの種類に応じて決定される。また、仮想空間内に新たに地形パーツが追加される場合、互いに隣接する2つの地形パーツの隣接部分における頂点が同じ位置になるように、当該新たな地形パーツが配置される。
例えば、ユーザの操作に応じて図12Aの位置Paの右隣の位置Peに地形パーツが追加される場合、位置Paに配置された地形パーツGP1と隣接可能な地形パーツとして、地形パーツGP1が決定される。この場合、図12Bに示すように、位置Paの地形パーツGP1と、位置Peに追加される新たな地形パーツGP1との隣接部分において、位置Paの地形パーツGP1の頂点と、位置Peの新たな地形パーツGP1の頂点とは位置が一致する。そして、新たに追加された地形パーツGP1を含む各地形パーツに対して、上述した第1変形処理が行われる。
このように、新たに地形パーツが追加される場合でも、互いに隣接する地形パーツの隣接部分における頂点が一致するため、仮想空間における頂点の位置に応じて第1変形処理が行われた場合に、隣接する地形パーツ間でずれが生じないようにすることができる。
なお、図示は省略するが、ユーザは、仮想空間内に配置されたある地形パーツを別の地形パーツに変更することができてもよい。すなわち、仮想空間内に配置されたある地形パーツを削除して別の地形パーツを新たに配置することができてもよい。例えば、第1の位置に第1の地形パーツが配置されている場合、ユーザの操作に応じて、第1の位置に配置されている第1の地形パーツを、第2の地形パーツに変更してもよい。この場合、地形パーツの変更前は、第1の位置に第1の地形パーツが配置されるという情報が地形パーツ配置データに記憶されている。そして、ユーザの操作に応じて、第1の位置に第2の地形パーツが配置されるという情報が地形パーツ配置データに記憶される。この場合においても、互いに隣接不可能な地形パーツが隣接しないように制御される。また、隣接部分において頂点が一致するように制御される。そして、画像が描画される際に、上述した第1変形処理が行われる。
以上のように、本実施形態の第1変形処理では、地形パーツ配置データに基づいて配置される地形パーツの各頂点が、仮想空間における位置に応じて、横方向及び奥行き方向に変位される。各頂点の変位量は、所定の波形を示す関数に基づいて算出される。これにより、予め用意された複数の地形パーツを配置して構成される地形を、見た目上自然な地形にすることができる。また、複数の地形パーツを配置することで地形を構成するため、地形全体を1つ1つ構成する場合に比べて開発効率を向上させることができる。
また、新たに地形パーツが配置される場合にも第1変形処理が行われるため、当該新たな地形パーツは固定の形状にならず、単調な地形となることを防止することができる。また、パーツ形状データと地形パーツ配置データとに基づいて地形を構成することにより、容易に、既存の地形に地形パーツを新たに配置したり、既存の地形から地形パーツを削除したり、仮想空間に配置された地形パーツを別の地形パーツに変更したり等の更新をすることができ、このような追加、削除、変更等の更新の際にも自然な地形とすることができる。
また、GPU22の頂点シェーダ機能により地形パーツの頂点に変位を加えて画像を生成するため、高速で各頂点を変位させることができ、リアルタイムで地形を変形することができる。
(第2変形処理)
本実施形態では、上述のように第1変形処理で変形された地形オブジェクトに対して、さらに全体を変形する第2変形処理が行われる。この第2変形処理では、地形オブジェクト及び地形オブジェクト上の他のオブジェクト(家オブジェクト40や木オブジェクト41、ユーザキャラクタ50等)の全体が変形される。以下、この第2変形処理について説明する。
図13は、第1変形処理が行われた後であって、第2変形処理が行われる前の仮想空間の一例を示す図である。
図13に示すように、仮想空間には、地形オブジェクトとしての地面オブジェクト34、崖オブジェクト30及び31と、地形オブジェクト上に配置された家オブジェクト40と、木オブジェクト41と、ユーザキャラクタ50が配置される。また、仮想空間には、仮想カメラVCが設定される。仮想カメラVCには、当該仮想カメラに固定のCxCyCz座標系が設定される。Cx軸は、仮想カメラVCの横方向の軸である。Cy軸は、仮想カメラVCの上方向の軸である。Cz軸は、仮想カメラVCの視線方向の軸である。本実施形態では、Cx軸は、仮想空間のx軸に平行に設定される。また、仮想カメラVCは、仮想空間の高さ方向に移動可能であり、高さ方向に移動する場合にCx軸回り(ピッチ方向)に回転する。Cx軸は仮想空間のx軸に平行に設定されるため、仮想カメラVCの視線方向の地面34に沿った方向は、z軸と平行になる。
図13に示す地形及び地形上のオブジェクトに対して、第2変形処理が行われる。図14は、第2変形処理が行われた後の仮想空間の一例を示す図である。
図14に示すように、第2変形処理では、地面34が円筒(ドラム)の表面に沿うように地形全体が変形される。具体的には、地形を構成する地面34(平面的な基準面)が、仮想空間のx軸と平行な中心軸を有する半径Rの円筒の側面の少なくとも一部をなすように、地形全体が変形される。仮想カメラVCのCx軸は仮想空間のx軸と平行になるように設定されるため、仮想カメラVCの視線方向(画像が表示された場合の画面の奥行き方向)に地面34が下がるように、地形全体が変形される。また、地形上のオブジェクト(家オブジェクト40、木オブジェクト41、ユーザキャラクタ50等)も地面34に沿うように変形される。
具体的には、第2変形処理では、地形を構成する地形パーツの各頂点、及び、地形上に配置されたオブジェクトの各頂点がx軸回りに回転するように座標変換される。以下、図15及び図16を参照して、第2変形処理の詳細について説明する。
図15は、第2変形処理が行われる前の仮想空間をx軸と平行な方向から見たときの一例を示す図である。図16は、第2変形処理が行われた後の仮想空間をx軸と平行な方向から見たときの一例を示す図である。
図15に示すように、地面34上の頂点V1(地面34を構成する地形パーツの頂点V1)のy座標値及びz座標値が(y1,z1)であるとする。また、家オブジェクト40の頂点V2のy座標値及びz座標値が(y2,z2)であるとする。また、z軸方向の所定距離がLであるとする。なお、Lは固定の値である。
また、本実施形態では、ユーザの操作に応じて、仮想カメラVCの高さが変化する。例えば、仮想カメラVCは、「低」の位置と、「通常」の位置と、「高」の位置とに設定可能であるとする。仮想カメラVCが「低」の位置の場合は、仮想カメラVCの視線方向は第1の方向に設定され、z軸とCz軸との角度は比較的小さな値(例えば、0度~20度)に設定される。この場合、仮想空間を横から見たような画像がディスプレイ12に表示される。また、仮想カメラVCが「通常」の位置の場合は、仮想カメラVCの視線方向は第1の方向よりも下向きの第2の方向に設定され、z軸とCz軸との角度は仮想カメラVCが「低」の位置の場合よりも大きな値(例えば、45度)に設定される。この場合、仮想空間を斜め上方向から見たような画像が表示される。また、仮想カメラVCが「高」の位置の場合は、仮想カメラVCの視線方向は第2の方向よりも下向きの第3の方向に設定され、z軸とCz軸との角度は比較的大きな値(例えば、60~70度)に設定される。この場合、仮想空間を上から見たような画像が表示される。
この場合、図15に示す頂点V1及びV2は、図16に示す頂点V1’及びV2’にそれぞれ変位される。具体的には、変位後の頂点V’のy座標値及びz座標値(y’,z’)は、変位前の頂点Vのy座標値及びz座標値(y,z)に基づいて、以下の式3~式7により算出される。なお、各頂点のx座標値は変化されない。
rad=θ×(z/L) (式3)
temp_y=y+R (式4)
y_t=temp_y×cos(rad) (式5)
y’=y_t-R (式6)
z’=temp_y×sin(rad) (式7)
ここで、θは、円弧の中心角であり、仮想カメラVCの高さに応じて定められる。また、Rは、円弧(円筒)の半径を示す。z軸方向の距離Lは固定の値であり、θは仮想カメラVCの高さに応じて定められるため、Rは、Lとθとに基づいて定まる(Rθ=L)。
各地形パーツおよび地形上のオブジェクトの全ての頂点に対して、式3~式7に基づく座標変換が行われる。すなわち、各頂点のz軸方向の位置に応じて、各頂点に対して式3~式7に基づく座標変換が行われる。言い換えると、各頂点の地面34(平面的な基準面)に沿った奥行き方向の位置に応じて、各頂点に対して式3~式7に基づく座標変換が行われる。
図16に示すように、例えば地面34上の頂点V1は、半径R、中心角θを有する円弧上の位置に変位される。地面34上の全ての頂点に対して同様の座標変換が行われることにより、地面34が、半径Rの円筒の側面の一部をなすように変形される。また、地面34上の家オブジェクト40の頂点V2も同様に座標変換され、図16に示す位置に変位される。家オブジェクト40の全頂点に対して同様に座標変換が行われることにより、家オブジェクト40は、円筒の側面上に配置される。
第2変形処理でも、第1変形処理と同様に、GPU22の頂点シェーダ機能により各頂点が変位される。具体的には、GPU22は、CPU21からの命令に応じて、上記式3~式7に基づく座標変換を行う。そして、GPU22は、仮想カメラVCに基づいて描画処理を行い、ディスプレイ12に画像を表示させる。すなわち、ディスプレイ12に画像が表示される毎に(フレーム毎に)、GPU22の頂点シェーダ機能により地形パーツ及び地形上のオブジェクトの頂点が変位され、地形全体が変形される。
なお、θは、仮想カメラVCの視線方向(仮想カメラVCの高さ)によって定められる。例えば、仮想カメラVCの視線方向が第1の方向に設定される場合、θは第1の値に設定される。また、仮想カメラVCの視線方向が第2の方向に設定される場合、θは、第1の値よりも大きな第2の値に設定される。すなわち、仮想カメラVCの視線方向が第1の方向よりも下向きの第2の方向に設定される場合は、θの値は大きくなる。言い換えると、仮想カメラVCの視線方向が第1の方向よりも下向きの第2の方向である場合は、変形後の地面の曲率が大きくなる。
一方、仮想カメラVCの視線方向が第2の方向よりもさらに下向きの第3の方向である場合は、θの値は、第1の値および第2の値よりも小さな第3の値に設定される。言い換えると、仮想カメラVCの視線方向が第2の方向よりも下向きの第3の方向である場合は、変形後の地面の曲率は小さくなる。
なお、仮想カメラVCが図15に示す「高」の位置よりも更に高い位置(例えば、真上から仮想空間を見下ろす方向)にある場合、第2変形処理は行われなくてもよい。すなわち、マップのように仮想空間を俯瞰する位置に仮想カメラVCが設定されている場合、地形および地形上のオブジェクトをドラム状に変形させる処理は行われなくてもよい。
図17Aは、仮想カメラVCの視線方向が第1の方向である場合において第2変形処理が行われない場合のディスプレイ12に表示される画像の一例を示す図である。図17Bは、仮想カメラVCの視線方向が第1の方向である場合において第2変形処理が行われた場合のディスプレイ12に表示される画像の一例を示す図である。
図17Aに示すように、仮想カメラVCの視線方向が第1の方向である場合において第2変形処理が行われない場合は、画面の上部に地平線及び木オブジェクト41が表示される。この仮想カメラVCの状態において第2変形処理が行われた場合は、図17Bに示すように、木オブジェクト41が表示されなくなる。また、図17Bでは、地平線が図17Aのときよりも画面の下方に移動し、空の範囲が広くなる。また、図17Aでは家オブジェクト40を上方から見下ろしたように見えるが、図17Bでは家オブジェクト40を下方から見上げたような画像が表示される。
図18Aは、仮想カメラVCの視線方向が第2の方向である場合において第2変形処理が行われない場合のディスプレイ12に表示される画像の一例を示す図である。図18Bは、仮想カメラVCの視線方向が第2の方向である場合において第2変形処理が行われた場合のディスプレイ12に表示される画像の一例を示す図である。
図18Aに示すように、仮想カメラVCの視線方向が第2の方向である場合において第2変形処理が行われない場合は、画面には地平線は表示されず、空は表示されない。この仮想カメラVCの状態において第2変形処理が行われた場合は、図18Bに示すように、地平線が表示され、空が表示される。
図19Aは、仮想カメラVCの視線方向が第3の方向である場合において第2変形処理が行われない場合のディスプレイ12に表示される画像の一例を示す図である。図19Bは、仮想カメラVCの視線方向が第3の方向である場合において第2変形処理が行われた場合のディスプレイ12に表示される画像の一例を示す図である。
図19Aに示すように、仮想カメラVCの視線方向が第3の方向である場合において第2変形処理が行われない場合は、例えば、画面の上端に家オブジェクト40の一部と、岩オブジェクト42の一部とが表示される。この仮想カメラVCの状態において第2変形処理が行われた場合は、図19Bに示すように、岩オブジェクト42の全体が表示される。
なお、ユーザの操作に応じてユーザキャラクタ50が画面の奥行き方向に移動する場合がある。この場合、ユーザキャラクタ50がディスプレイ12に表示されるように、ユーザキャラクタ50の移動に応じて表示範囲も変化する。
具体的には、上記式3の代わりに、以下の式3’に基づいて「rad」が算出される。
rad=θ×((z+OFFSET)/L) (式3’)
ここで、「OFFSET」は、ユーザキャラクタ50の奥行き方向への移動に応じて定められる。式3’に示すように、zにオフセット値を加えた値に基づいて「rad」が算出される。そして、式3’に基づいて算出された「rad」を上記式4及び式7に代入し、変換後の頂点Vの座標値が算出される。これにより、地形全体をドラム状に変形するとともに、ドラム状の地形全体を、ドラムの中心軸周りに回転させることができ、実際に仮想カメラVCを仮想空間で移動させることなく、擬似的な仮想カメラVCの移動を実現することができる。すなわち、式3’のようにz座標値にオフセット値を加えることで、「OFFSET」分だけ仮想カメラVCが奥行き方向に移動するように見える。
図20は、z座標値にオフセット値を加えた場合の変形前後の仮想空間をx軸と平行な方向から見た図である。図16と図20とを比較すると、図20では地面34及び地面上の家オブジェクト40は、円筒の中心軸周りに回転している。各頂点のz座標値にオフセット値を加えて式3’~式7に基づく座標変換を行うことにより、地形及び地形上のオブジェクトを含む地形全体を円筒の側面の周方向に回転させることができる。これにより、仮想空間内に固定された仮想カメラVCから見た場合、仮想カメラVCが円筒の周方向(画面の奥行き方向)に移動するように見える。
以上のように、第2変形処理では、平面的な地形及び地形上の他のオブジェクト(家オブジェクト、木オブジェクト、ユーザキャラクタ等)の各頂点に対して座標変換を行い、地形全体を曲面状(ドラム状)に変形させる。また、仮想カメラVCの状態(姿勢や位置)に応じて、ドラムの曲率を変化させる。具体的には、仮想カメラVCの視線方向が第1の方向の場合は、ドラムの曲率を小さく(θを小さく)し、仮想カメラVCの視線方向が第1の方向より下向きの第2の方向の場合は、ドラムの曲率を大きく(θを大きく)する。
これにより、ユーザにとって見やすい画像にすることができる。例えば、図17Aと図17Bとを比較すると、図17Bでは、奥行き方向の遠い位置については地面が表示範囲に含まれないため、ユーザにとって、ユーザキャラクタ50から近い範囲を見やすくなり、よりゲームを楽しむことができる。また、仮想カメラVCの視線方向が第1の方向(横向き)の場合は曲率が小さくなるため、地形全体をドラム状に変形させる場合でもユーザにとって違和感のない画像にすることができる。例えば、図17Bにおいて、曲率が大きすぎると地形全体が大きく曲がっているように見え、ユーザにとって違和感のある画像になるおそれがある。しかしながら、本実施形態では、仮想カメラVCの視線方向が第1の方向(横向き)の場合にはドラムの曲率が小さく設定されるため、そのような違和感を生じさせ難くすることができる。
また、本実施形態では、図19Bに示すように、仮想カメラVCの視線方向が第2の方向よりも下向きの第3の方向の場合は、仮想カメラVCの視線方向が第1の方向及び第2の方向ときよりも、θは小さく設定される。すなわち、仮想空間を上方から見る場合にはドラムの曲率が小さくなる。このため、仮想空間を上方から見る場合に仮想空間の歪みが小さくなり、ユーザにとって見やすい画像にすることができる。
また、本実施形態では、平面的な地形及び地形上のオブジェクトに対して第2変形処理が行われ、第2変形処理では、GPU22の頂点シェーダ機能によりリアルタイムで平面的な地形及び地形上のオブジェクトの頂点が変位される。これにより、予め曲面状の地形を用意する必要がない。また、予め曲面状の地形を作成する場合には、地形上に配置される他のオブジェクト(家オブジェクト40や木オブジェクト41)もその曲面に合うように作成する必要があり、ゲーム製作者にとって手間がかかる。すなわち、曲面状の地形上にオブジェクトを配置する場合、地面に接するオブジェクトの底面も地形に沿って曲面状に形成する必要があり、その底面に合わせてオブジェクト全体も作成する必要がある。異なる曲率の地形を用意する場合には、その曲率毎にオブジェクトも作成する必要がある。しかしながら、本実施形態では、平面的な地形及び当該地形上に配置されるオブジェクトを予め用意し、平面的な地形及び地形上のオブジェクトの頂点をGPU22の頂点シェーダ機能によりリアルタイムで変位させるため、予め曲面状の地形や曲面状の地形に合ったオブジェクトを用意する必要がない。したがって、ゲームの開発効率を向上させることができる。
(ゲーム処理の詳細)
次に、本体装置2において行われるゲーム処理の一例について具体的に説明する。まず、本体装置2に記憶されるデータについて説明する。
図21は、本体装置2(のDRAM26)に記憶されるデータの一例を示す図である。図21に示すように、本体装置2には、ゲームプログラムと、パーツ形状データと、地形パーツ配置データと、オブジェクトデータと、キャラクタデータと、仮想カメラデータとが記憶される。これらの他にも、ユーザの操作に応じた操作データ、ゲームに用いられる他のデータ等、様々なデータが記憶される。
ゲームプログラムは、本実施形態のゲームを実行するためのプログラムである。ゲームプログラムは、例えば外部記憶媒体に記憶されており、ゲームが開始されると、外部記憶媒体からDRAM26に読み込まれる。
パーツ形状データは、例えば図4A~図4Cに示す地形パーツの形状を表すデータである。各地形パーツを表すデータは、複数の頂点データを含む。例えば、1の地形パーツを表すデータは、各頂点を表すデータとして、代表的な頂点からの相対位置を表すデータを含む。地形パーツが仮想空間に配置された場合、相対位置を表すデータに基づいて、その地形パーツに含まれる各頂点の仮想空間における座標値が定まる。パーツ形状データは、例えば外部記憶媒体に予め記憶されており、ゲームの開始の際に、外部記憶媒体からDRAM26に読み込まれる。
地形パーツ配置データは、複数の地形パーツの配置を示すデータであり、仮想空間のどの位置にどの地形パーツを配置するかを記憶したデータである。地形パーツ配置データに基づいて複数の地形パーツが仮想空間に配置された場合、隣接する地形パーツの隣接部分の頂点座標が一致する。互いに隣接可能な地形パーツと、互いに隣接不可能な地形パーツとがあり、地形パーツ配置データは、互いに隣接不可能な2つの地形パーツが隣接しないように、予めゲーム製作者によって作成されている。地形パーツ配置データは、例えば外部記憶媒体に予め記憶されており、ゲームの開始の際に、外部記憶媒体からDRAM26に読み込まれる。なお、ゲーム処理の実行中に地形パーツ配置データによって定められる各地形パーツの配置が変化する。例えば、ユーザの操作に応じて地形パーツの追加、削除、変更等の更新が行われた場合、当該更新に応じて、初期的にDRAM26に記憶された地形パーツ配置データが更新される。この場合、互いに隣接不可能な地形パーツが隣接しないように、地形パーツ配置データが更新される。
オブジェクトデータは、地形上に配置される他のオブジェクト(家オブジェクト40や木オブジェクト41)を示すデータである。各オブジェクトデータは、複数の頂点を含む。1つのオブジェクトデータは、各頂点を表すデータとして、代表的な頂点からの相対位置を表すデータを含む。オブジェクト(例えば家オブジェクト40)が仮想空間に配置された場合、相対位置を表すデータに基づいて、当該オブジェクトの各頂点の仮想空間における座標値が定まる。オブジェクトデータは、例えば外部記憶媒体に予め記憶されており、ゲームの開始の際に、外部記憶媒体からDRAM26に読み込まれる。
キャラクタデータは、地形上に配置されるユーザキャラクタ50を示すデータを含む。ユーザキャラクタ50を示すデータは、複数の頂点を含み、各頂点を表すデータとして、代表的な頂点からの相対位置を表すデータを含む。なお、キャラクタデータは、CPU21によって制御されるキャラクタ(いわゆる、CPUキャラクタ)を示すデータを含んでもよい。
仮想カメラデータは、仮想カメラVCの状態に関連するデータであり、仮想カメラVCの仮想空間における位置、視線方向等を表すデータである。
次に、本体装置2において行われるゲーム処理の詳細について説明する。図22は、本体装置2のプロセッサ20において行われるゲーム処理の一例を示すフローチャートである。図22に示す処理は、本体装置2のCPU21又はGPU22がゲームプログラムを実行することによって行われる。なお、図22では、上述した第1変形処理及び第2変形処理に関連する処理のみが示されており、他の処理(例えば、操作データに基づいてユーザキャラクタ50を移動させる処理やユーザキャラクタ50に所定の動作を行わせる処理等)は省略されている。
図22に示すように、CPU21は、まず、初期処理を行う(ステップS100)。初期処理では、仮想空間に固定のxyz座標系が設定され、地形パーツ配置データに基づいて各地形パーツが仮想空間内に配置される。これにより、崖オブジェクト、地面オブジェクト、川オブジェクト等を含む地形が構成される。地形パーツ配置データに基づいて各地形パーツが配置されることで、各地形パーツの各頂点の仮想空間における位置が定まる。また、初期処理では、地形上に他のオブジェクト(家オブジェクト40、木オブジェクト41)が配置される。各オブジェクトの仮想空間内における位置が定まることで、各オブジェクトの各頂点の仮想空間における位置が定まる。また、ユーザキャラクタ50も配置される。ユーザキャラクタ50の仮想空間内における位置が定まることで、ユーザキャラクタ50の各頂点の仮想空間における位置が定まる。また、仮想空間内に仮想カメラVCが配置される。
ステップS100の処理の後、CPU21は、ステップS101の処理を実行する。以降、CPU21は、ステップS101~ステップS110の処理を、所定のフレーム時間(例えば、1/60秒)毎に繰り返し実行する。
ステップS101において、CPU21は、地形を更新するか否かを判定する。具体的には、CPU21は、ユーザによって地形パーツを追加する操作(例えば、土を盛る操作)、地形パーツを削除する操作(例えば、崖オブジェクトを削る操作、地面を掘る操作)、又は、地形パーツを変更する操作が行われたか否かを判定する。
地形を更新すると判定した場合(ステップS101:YES)、CPU21は、DRAM26に記憶された地形パーツ配置データの更新を行う(ステップS102)。例えば、CPU21は、ある位置に地形パーツを追加する操作がユーザによって行われた場合、当該ある位置に地形パーツが配置されることを示す情報を地形パーツ配置データに追加する。また、CPU21は、ある位置の地形パーツを削除する操作が行われた場合、当該ある位置に配置された地形パーツを地形パーツ配置データから削除する。また、CPU21は、ある位置に存在する地形パーツを別の地形パーツに変更する操作が行われた場合、当該ある位置に配置された地形パーツを別の地形パーツに変更するように地形パーツ配置データを更新する。
ここで、CPU21は、新たに地形パーツを追加する場合や地形パーツを変更する場合、互いに隣接不可能な地形パーツが隣接しないように、制御する。例えば、CPU21は、ある位置に地形パーツを追加する場合、当該ある位置の隣接位置に配置された地形パーツの種類に基づいて、新たに配置する地形パーツの種類を決定する。そして、CPU21は、互いに隣接する地形パーツの隣接部分における頂点が一致するように、新たな地形パーツを配置する。
ステップS102の処理を実行した場合、又は、ステップS101でNOと判定した場合、CPU21は、仮想カメラ設定処理を行う(ステップS103)。具体的には、CPU21は、ユーザの操作に応じて、仮想カメラVCの高さ(視線方向)を設定する。ユーザによって仮想カメラVCの高さの変更が行われた場合は、CPU21は、仮想カメラVCの高さ(位置及び視線方向)を設定する。また、ユーザがユーザキャラクタ50を横方向(x軸方向)に移動させる操作を行った場合、ステップS103において、CPU21は、当該操作に応じて、仮想カメラVCを仮想空間の横方向(x軸方向)に移動させる。
ステップS103に続いて、CPU21は、仮想カメラVCの状態に応じて、中心角θを設定する(ステップS104)。具体的には、CPU21は、ステップS103で設定された仮想カメラVCの視線方向(高さ)に応じて、中心角θを設定する。
次に、CPU21は、ユーザの操作に応じてユーザキャラクタ50が奥行き方向(z軸方向)に移動したか否かを判定する(ステップS105)。
ユーザキャラクタ50が奥行き方向に移動したと判定した場合(ステップS105:YES)、CPU21は、オフセット値を設定する(ステップS106)。ここで設定されるオフセット値は、上記式3’の「OFFSET」である。具体的には、CPU21は、ユーザキャラクタ50のz軸方向への移動に応じて、オフセット値を設定する。例えば、CPU21は、ユーザキャラクタ50がz軸正方向に移動した場合、負のオフセット値を設定し、ユーザキャラクタ50がz軸負方向に移動した場合、正のオフセット値を設定する。
ステップS106の処理を実行した場合、又は、ステップS105でNOと判定した場合、CPU21は、各地形パーツの頂点を変形させるための第1変形処理をGPU22に実行させる(ステップS107)。具体的には、GPU22は、頂点シェーダ機能を用いて、地形パーツ配置データに基づいて仮想空間に配置される各地形パーツの頂点を、上記式1及び式2に基づいて変位させる。これにより、各地形パーツの頂点が仮想空間における位置に応じて変位し、図6に示すように地形が変形される。
ステップS107に続いて、CPU21は、GPU22に、地形及び地形上のオブジェクトを変形させる第2変形処理を実行させる(ステップS108)。GPU22は、第1変形処理で変形された後の地形及び地形上のオブジェクトの各頂点を、頂点シェーダ機能を用いてドラム状に変位させる。具体的には、GPU22は、第1変形処理で変形された後の各地形パーツの頂点、及び、地形上のオブジェクト(家オブジェクト40、木オブジェクト41、ユーザキャラクタ50等)の頂点を、式3~式7に基づいて変位させる。この第2変形処理が行われることにより、平面的な地面が円筒の側面の一部をなすように変形され、地面上のオブジェクトも当該円筒の側面上に配置される。なお、ステップS106でオフセット値が設定されている場合、頂点の変位の計算には、式3’が用いられる。
そして、CPU21は、GPU22に、仮想カメラVCに基づく描画処理を行わせる(ステップS109)。具体的には、GPU22は、上記第1変形処理および第2変形処理で変形された地形及び地形上のオブジェクトを仮想カメラVCから見た画像を生成する。そして、生成された画像がディスプレイ12に出力され、ディスプレイ12において仮想空間の画像が表示される(ステップS110)。
なお、ステップS107の第1変形処理、および、ステップS108の第2変形処理は、仮想カメラVCの撮像範囲に含まれる頂点についてのみ行われる。すなわち、仮想カメラVCの撮像範囲に含まれない頂点については、第1変形処理および第2変形処理は行われない。具体的には、第1変形処理および第2変形処理が行われたときの各頂点が仮想カメラVCの視錐台に含まれる場合、当該視錐台に含まれる各頂点に対して、第1変形処理および第2変形処理が行われる。
ステップS110の処理が行われた場合、CPU21は、再びステップS101の処理を実行する。以上で図22の説明を終了する。
このように、ステップS107の第1変形処理、及び、ステップS108の第2変形処理は、フレーム時間毎に繰り返し実行される。地形パーツが追加されたり削除されたり変更されたりしても、リアルタイムで第1変形処理及び第2変形処理が行われる。
以上のように、本実施形態では、地形パーツ配置データに基づいて複数の地形パーツを配置することにより構成される地形に対して、第1変形処理が行われる。第1変形処理では、地形パーツの各頂点が、仮想空間の位置に応じてx軸方向およびz軸方向に変位される。各頂点の変位量は所定の波形を表す関数によって決定される。具体的には、上記式1及び式2に基づいて変位量が決定される。この第1変形処理によって、複数種類の地形パーツを配置することにより構成される地形を、自然な見た目にすることができる。また、複数の地形パーツを配置して地形を構成するため、地形全体を1つずつ作成する場合よりも効率よく地形を作成することができ、ゲームの開発効率を向上させることができる。また、地形パーツの更新(追加、削除、変更等)を容易に行うことができ、拡張性を持たせることができる。
また、本実施形態では、第1変形処理に加えて、さらに地形全体を曲面状に変形させる第2変形処理が行われる。これにより、ユーザにとって見やすいように地形全体を変形することができるとともに、ゲーム製作者は、変形された地形(曲面状の地形)及び変形された地形上のオブジェクトを予め作成する必要はなく、開発のコスト及び時間を削減することができ、開発効率を向上させることができる。
(変形例)
以上、本実施形態の画像処理ついて説明したが、上記実施形態は単なる一例であり、例えば以下のような変形が加えられてもよい。
例えば、上記実施形態では、各地形パーツはx軸方向およびz軸方向に関して正方形であるとした。すなわち、各地形パーツはy軸方向から見た場合に正方形となる形状であり、このような地形パーツを格子状に並べることにより地形が形成された。しかしながら地形パーツの形状は単なる一例であり、各地形パーツをy軸方向から見た場合の形状は、所定の形状(例えば、正方形、長方形、ひし形、平行四辺形、三角形、多角形等)であってもよい。すなわち、各地形パーツはx軸方向およびz軸方向に関して同じ所定の形状を有し、当該同じ所定の形状の地形パーツを複数並べることで地形が構成されてもよい。このように地形が構成される場合であっても上記第1変形処理及び第2変形処理が行われてもよい。
また、上記実施形態では、第1変形処理において、各地形パーツを仮想空間のx軸方向(横方向)及びz軸方向(奥行き方向)に変位させ、y軸方向(高さ方向)には変位させないとした。他の実施形態では、各地形パーツを仮想空間の高さ方向にも変位させてもよい。また、他の実施形態では、第1変形処理において、仮想空間の横方向、奥行き方向、及び、高さ方向の少なくとも何れか1つの方向に各地形パーツを変位させてもよい。
また、第1変形処理において所定の波形を有する関数(式1及び式2)に基づいて地形パーツの頂点を変位させたが、他の任意の関数に基づいて地形パーツの頂点が変位されてもよい。また、地形パーツの頂点は、位置に応じてランダムに変位されてもよい。
また、上記実施形態では、第1変形処理において、地形オブジェクト(地面オブジェクトおよび崖オブジェクト)を変形させ、地形オブジェクト上の他のオブジェクトについては変形させなかった。他の実施形態では、第1変形処理において、地形オブジェクト上の他のオブジェクト(家オブジェクト40や木オブジェクト41、ユーザキャラクタ50等)も変形させてもよい。
また、上記実施形態では、仮想カメラVCの姿勢はx軸回りにのみ変化可能であるとした。すなわち、仮想カメラVCの姿勢はピッチ方向にのみ変化可能であるとした。他の実施形態では、仮想カメラVCの姿勢はy軸回り(ヨー方向)にも変化可能であってもよい。この場合、第2変形処理において、仮想カメラVCのCz軸を仮想空間の平面的な基準面(地面)に投影した場合に、当該投影した平面的な基準面上のCz軸が円筒の周方向になるように、地面をドラム状に変形させてもよい。すなわち、頂点の平面的な基準面に沿った奥行き方向の位置に応じて当該頂点に対する座標変換を行い、平面的な基準面(地面)が、仮想カメラの視線方向と垂直な方向を中心軸とする円筒の側面をなすように、地形全体が変形されてもよい。
また、上記第2変形処理では、平面的な基準面としての地面がドラム状に変形するように第2変形処理が行われた。他の実施形態では、平面的な基準面は地面に限らない。例えば、平面的な基準面は海面であってもよい。また、平面的な基準面は、内部的に仮想空間に設定される面であって実際にゲーム中には表示されない面であってもよい。この場合、平面的な基準面に基づいて、画像として表示される地形が形成されてもよい。第2変形処理では、基準面が円筒の側面をなすように変形されることで、地形全体もドラム状に変形される。
また、上記実施形態では、第2変形処理において地面(平面的な基準面)をドラム状に変形させた。他の実施形態では、第2変形処理において地面を他の曲面状に変形させてもよい。例えば、第2変形処理において地面を球状(球の一部又は全部)に変形させてもよい。すなわち、地面が球の表面の一部又は全部をなすように各頂点が座標変換されてもよい。また、例えば、地面が図16とは逆の方向(図16の上方向)に変形するように、各頂点を変位させてもよい。
また、上記実施形態では、第1変形処理および第2変形処理において、GPU22の頂点シェーダ機能により各頂点が変位された。他の実施形態では、CPU21により各頂点が変位されてもよい。
また、上記フローチャートで示した処理は単なる例示に過ぎず、処理の順番や内容は適宜変更されてもよい。
また、上記ゲームは単なる一例であり、他の任意のゲームにおいて上述した第1変形処理及び/又は第2変形処理が行われてもよい。
また、上記実施形態では、ゲームシステム1における本体装置2において上述した処理が行われることとしたが、上述した処理は他の任意の情報処理装置(例えば、パーソナルコンピュータ、スマートフォン、タブレット端末)等において実行されてもよい。また、他の実施形態では、複数の装置を含む情報処理システム(例えば端末とサーバとを含むシステム)において上述した処理が行われてもよい。
以上、本発明について説明したが、上記説明は本発明の例示に過ぎず、種々の改良や変形が加えられてもよい。