(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-08
(45)【発行日】2023-02-16
(54)【発明の名称】画像処理プログラム、画像処理システム、画像処理装置、および画像処理方法
(51)【国際特許分類】
G06T 19/00 20110101AFI20230209BHJP
A63F 13/52 20140101ALI20230209BHJP
A63F 13/5258 20140101ALI20230209BHJP
A63F 13/55 20140101ALI20230209BHJP
【FI】
G06T19/00 300A
A63F13/52
A63F13/5258
A63F13/55
(21)【出願番号】P 2019054189
(22)【出願日】2019-03-22
【審査請求日】2021-03-09
【審判番号】
【審判請求日】2022-08-16
(73)【特許権者】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】100158780
【氏名又は名称】寺本 亮
(74)【代理人】
【識別番号】100121359
【氏名又は名称】小沢 昌弘
(74)【代理人】
【識別番号】100130269
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】米津 真
(72)【発明者】
【氏名】高橋 幸嗣
(72)【発明者】
【氏名】高村 潤
【合議体】
【審判長】畑中 高行
【審判官】五十嵐 努
【審判官】川崎 優
(56)【参考文献】
【文献】特開2006-318389(JP,A)
【文献】特開2006-314633(JP,A)
【文献】特開2013-168022(JP,A)
【文献】特開2009-129167(JP,A)
【文献】特開2017-188002(JP,A)
【文献】特開2007-26200(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T19/00-19/20
A63F13/00-13/98
(57)【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータに、
仮想空間内において仮想カメラを制御させ、
前記仮想空間内に地形オブジェクトを配置させ、
前記地形オブジェクト上の、前記仮想カメラから見た前記地形オブジェクトと背景との境界線を基準とした所定範囲内に、所定のオブジェクトを生成させ、
前記仮想カメラに基づいた前記仮想空間の画像を、表示装置に表示させるために生成させる、画像処理プログラム。
【請求項2】
前記地形オブジェクトは円筒の側面の少なくとも一部または球面の少なくとも一部の形状を有する、請求項1に記載の画像処理プログラム。
【請求項3】
前記コンピュータにさらに、
平面的な地形に対して、少なくとも前記仮想カメラの視野に応じた範囲を変形させることによって曲面状の前記地形オブジェクトを生成させる、請求項1または2に記載の画像処理プログラム。
【請求項4】
前記境界線は、前記仮想カメラと前記地形オブジェクトとの位置関係に基づいて定められる、請求項1から3のいずれかに記載の画像処理プログラム。
【請求項5】
前記境界線は、前記仮想カメラから前記曲面への接線の接点に基づいて定められる線である、請求項3に記載の画像処理プログラム。
【請求項6】
前記コンピュータは頂点シェーダ機能を有するグラフィックプロセッサを含み、
前記地形の変形および前記所定のオブジェクトの生成は、前記頂点シェーダ機能の座標変換によって行われる、請求項3または5に記載の画像処理プログラム。
【請求項7】
前記所定のオブジェクトは草オブジェクトであって、前記地形オブジェクト上において当該草オブジェクトが生成され得ると設定された部分に対して、前記所定範囲内における前記仮想カメラに近い位置ほど草の長さを短くするように、前記草オブジェクトの頂点を座標変換して前記草オブジェクトを生成させる、請求項6に記載の画像処理プログラム。
【請求項8】
前記所定のオブジェクトは雪オブジェクトであって、前記地形オブジェクト上の当該雪オブジェクトが生成され得ると設定された部分に対して、前記所定範囲内における前記仮想カメラに近い位置ほど積雪の高さを低くするように、前記雪オブジェクトの頂点を座標変換して前記雪オブジェクトを生成させる、請求項6に記載の画像処理プログラム。
【請求項9】
前記所定のオブジェクトは高さを有するオブジェクトであり、
前記仮想カメラからの距離に応じて前記所定のオブジェクトの高さが異なるように、前記所定のオブジェクトを生成させる、請求項1から8の何れかに記載の画像処理プログラム。
【請求項10】
前記コンピュータにさらに、
操作入力に基づいて、前記地形オブジェクト上でプレイヤキャラクタを移動させ、
前記仮想カメラの位置は、前記プレイヤキャラクタが前記仮想カメラの視線方向における手前側に位置し、前記境界線が前記仮想カメラの視線方向における奥側に位置するように、前記プレイヤキャラクタの位置に基づいて制御される、請求項1から9の何れかに記載の画像処理プログラム。
【請求項11】
前記コンピュータにさらに、
前記地形オブジェクト上にアイテムオブジェクトを配置させ、
前記操作入力に基づいて、前記プレイヤキャラクタに、前記アイテムオブジェクトに対する所定のアクションを行わせる、請求項10に記載の画像処理プログラム。
【請求項12】
前記コンピュータにさらに、
操作入力に基づいて、仮想空間内の平面的な前記地形オブジェクト上においてプレイヤキャラクタを移動させ、
前記プレイヤキャラクタの位置に応じて前記仮想カメラの位置を制御させ、
前記仮想カメラの位置に基づいて、前記平面的な地形オブジェクト上の前記所定範囲に対応する位置に前記所定のオブジェクトを生成させ、
前記平面的な地形オブジェクトが曲面に変形するように、少なくとも前記仮想カメラの視野に含まれる前記地形オブジェクト、前記所定のオブジェクト、及び、前記プレイヤキャラクタの頂点を変位させる、請求項1に記載の画像処理プログラム。
【請求項13】
少なくとも1つのプロセッサを備える画像処理システムであって、前記少なくとも1つのプロセッサが、
仮想空間内において仮想カメラを制御し、
前記仮想空間内に地形オブジェクトを配置し、
前記地形オブジェクト上の、前記仮想カメラから見た前記地形オブジェクトと背景との境界線を基準とした所定範囲内に、所定のオブジェクトを生成し、
前記仮想カメラに基づいた前記仮想空間の画像を生成し、
前記仮想空間の画像を表示装置に表示させる、画像処理システム。
【請求項14】
前記地形オブジェクトは円筒の側面の少なくとも一部または球面の少なくとも一部の形状を有する、請求項13に記載の画像処理システム。
【請求項15】
前記少なくとも1つのプロセッサは、平面的な地形に対して、少なくとも前記仮想カメラの視野に応じた範囲を変形させることによって曲面状の前記地形オブジェクトを生成する、請求項13または14に記載の画像処理システム。
【請求項16】
前記境界線は、前記仮想カメラと前記地形オブジェクトとの位置関係に基づいて定められる、請求項13から15のいずれかに記載の画像処理システム。
【請求項17】
前記境界線は、前記仮想カメラから前記曲面への接線の接点に基づいて定められる線である、請求項15に記載の画像処理システム。
【請求項18】
前記少なくとも1つのプロセッサは、頂点シェーダ機能を有するグラフィックプロセッサを含み、
前記地形の変形および前記所定のオブジェクトの生成は、前記頂点シェーダ機能の座標変換によって行われる、請求項15または17に記載の画像処理システム。
【請求項19】
前記所定のオブジェクトは草オブジェクトであり、
前記少なくとも1つのプロセッサは、前記地形オブジェクト上において当該草オブジェクトが生成され得ると設定された部分に対して、前記所定範囲内における前記仮想カメラに近い位置ほど草の長さを短くするように、前記草オブジェクトの頂点を座標変換して前記草オブジェクトを生成する、請求項18に記載の画像処理システム。
【請求項20】
前記所定のオブジェクトは雪オブジェクトであり、
前記少なくとも1つのプロセッサは、前記地形オブジェクト上の当該雪オブジェクトが生成され得ると設定された部分に対して、前記所定範囲内における前記仮想カメラに近い位置ほど積雪の高さを低くするように、前記雪オブジェクトの頂点を座標変換して前記雪オブジェクトを生成する、請求項18に記載の画像処理システム。
【請求項21】
前記所定のオブジェクトは高さを有するオブジェクトであり、
前記少なくとも1つのプロセッサは、前記仮想カメラからの距離に応じて前記所定のオブジェクトの高さが異なるように、前記所定のオブジェクトを生成する、請求項13から20の何れかに記載の画像処理システム。
【請求項22】
前記少なくとも1つのプロセッサは、
操作入力に基づいて、前記地形オブジェクト上でプレイヤキャラクタを移動させ、
前記仮想カメラの位置を、前記プレイヤキャラクタが前記仮想カメラの視線方向における手前側に位置し、前記境界線が前記仮想カメラの視線方向における奥側に位置するように、前記プレイヤキャラクタの位置に基づいて制御する、請求項13から21の何れかに記載の画像処理システム。
【請求項23】
前記少なくとも1つのプロセッサは、
前記地形オブジェクト上にアイテムオブジェクトを配置し、
前記操作入力に基づいて、前記プレイヤキャラクタに、前記アイテムオブジェクトに対する所定のアクションを行わせる、請求項22に記載の画像処理システム。
【請求項24】
前記少なくとも1つのプロセッサは、
操作入力に基づいて、仮想空間内の平面的な前記地形オブジェクト上においてプレイヤキャラクタを移動させ、
前記プレイヤキャラクタの位置に応じて前記仮想カメラの位置を制御し、
前記仮想カメラの位置に基づいて、前記平面的な地形オブジェクト上の前記所定範囲に対応する位置に前記所定のオブジェクトを生成し、
前記平面的な地形オブジェクトが曲面に変形するように、少なくとも前記仮想カメラの視野に含まれる前記地形オブジェクト、前記所定のオブジェクト、及び、前記プレイヤキャラクタの頂点を変位させる、請求項13に記載の画像処理システム。
【請求項25】
仮想空間内において仮想カメラを制御する仮想カメラ制御部と、
前記仮想空間内に地形オブジェクトを配置する配置部と、
前記地形オブジェクト上の、前記仮想カメラから見た前記地形オブジェクトと背景との境界線を基準とした所定範囲内に、所定のオブジェクトを生成するオブジェクト生成部と、
前記仮想カメラに基づいた前記仮想空間の画像を生成する画像生成部と、
前記画像生成部によって生成された仮想空間の画像を表示装置に表示させる表示制御部と、を備える、画像処理装置。
【請求項26】
操作入力に基づいて、仮想空間内の平面的な前記地形オブジェクト上においてプレイヤキャラクタを移動させる移動制御部をさらに備え、
前記仮想カメラ制御部は、前記プレイヤキャラクタの位置に応じて前記仮想カメラの位置を制御し、
前記オブジェクト生成部は、前記仮想カメラの位置に基づいて、前記平面的な地形オブジェクト上の前記所定範囲に対応する位置に前記所定のオブジェクトを生成し、
前記平面的な地形オブジェクトが曲面に変形するように、少なくとも前記仮想カメラの視野に含まれる前記地形オブジェクト、前記所定のオブジェクト、及び、前記プレイヤキャラクタの頂点を変位させる頂点変位部をさらに備える、請求項25に記載の画像処理装置。
【請求項27】
画像処理システムに実行させる画像処理方法であって、前記画像処理システムに、
仮想空間内において仮想カメラを制御させ、
前記仮想空間内に地形オブジェクトを配置させ、
前記地形オブジェクト上の、前記仮想カメラから見た前記地形オブジェクトと背景との境界線を基準とした所定範囲内に、所定のオブジェクトを生成させ、
前記仮想カメラに基づいた前記仮想空間の画像を、表示装置に表示させるために生成させる、画像処理方法。
【請求項28】
前記画像処理システムにさらに、
操作入力に基づいて、仮想空間内の平面的な前記地形オブジェクト上においてプレイヤキャラクタを移動させ、
前記プレイヤキャラクタの位置に応じて前記仮想カメラの位置を制御させ、
前記仮想カメラの位置に基づいて、前記平面的な地形オブジェクト上の前記所定範囲に対応する位置に前記所定のオブジェクトを生成させ、
前記平面的な地形オブジェクトが曲面に変形するように、少なくとも前記仮想カメラの視野に含まれる前記地形オブジェクト、前記所定のオブジェクト、及び、前記プレイヤキャラクタの頂点を変位させる、請求項27に記載の画像処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像を生成することが可能な画像処理プログラム、画像処理システム、画像処理装置、および画像処理方法に関する。
【背景技術】
【0002】
プレイヤキャラクタを仮想的な地形上に配置して、地形上でプレイヤキャラクタを操作することでゲームを行うゲーム装置がある(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、見易さを確保しつつ地形の表現を向上させるという観点では改善の余地があった。
【0005】
それ故、本発明の目的は、見易さを確保しつつ地形の表現を向上させることが可能な画像処理プログラム、画像処理システム、画像処理装置、および画像処理方法を提供することである。
【課題を解決するための手段】
【0006】
上記の課題を解決すべく、本発明は、以下の構成を採用した。
【0007】
本発明の画像処理プログラムは、情報処理装置のコンピュータに、仮想空間内において仮想カメラを制御させ、前記仮想空間内に地形オブジェクトを配置させる。また、前記画像処理プログラムは、前記コンピュータに、前記地形オブジェクト上の、前記仮想カメラから見た前記地形オブジェクトと背景との境界線を基準とした所定範囲内に、所定のオブジェクトを生成させる。そして、前記画像処理プログラムは、前記コンピュータに前記仮想カメラに基づいた前記仮想空間の画像を、表示装置に表示させるために生成させる。
【0008】
上記によれば、仮想カメラから見た地形オブジェクトと背景との境界線を基準として、所定範囲内に所定のオブジェクトが生成される。これにより、例えば、境界線を基準とした所定範囲の地形の表現を向上させることができるとともに、所定領域よりも手前側の領域を見易くすることができる。
【0009】
また、前記地形オブジェクトは円筒の側面の少なくとも一部または球面の少なくとも一部の形状を有してもよい。
【0010】
上記によれば、地形オブジェクトは円筒の側面又は球面であるため、仮想カメラから見たときの背景との境界を定め易くすることができる。
【0011】
また、前記画像処理プログラムは、前記コンピュータにさらに、平面的な地形に対して、少なくとも前記仮想カメラの視野に応じた範囲を変形させることによって曲面状の前記地形オブジェクトを生成させてもよい。
【0012】
上記によれば、平面的な地形を変形させることで曲面の地形オブジェクトを形成することができる。これにより、予め曲面状の地形オブジェクトを用意しなくてもよく、開発効率を向上させることができる。
【0013】
また、前記境界線は、前記仮想カメラと前記地形オブジェクトとの位置関係に基づいて定められてもよい。
【0014】
上記によれば、前記境界線は仮想カメラと地形オブジェクトとの位置関係に基づいて定められる。このため、例えば、仮想カメラが地形オブジェクトに対して移動した場合に、境界線も移動し、所定のオブジェクトを動的に生成することができる。
【0015】
また、前記境界線は、前記仮想カメラから前記曲面への接線の接点に基づいて定められる線であってもよい。
【0016】
上記によれば、仮想カメラから曲面への接線の接点に基づいて定められる線を境界線とすることができ、地形オブジェクトと背景との境界線を定めることができる。
【0017】
また、前記コンピュータは頂点シェーダ機能を有するグラフィックプロセッサを含み、前記地形の変形および前記所定のオブジェクトの生成は、前記頂点シェーダ機能の座標変換によって行われてもよい。
【0018】
上記によれば、グラフィックプロセッサの頂点シェーダ機能により各オブジェクトの頂点を変位させるため、高速に処理を行うことができる。
【0019】
また、前記所定のオブジェクトは草オブジェクトであってもよい。前記画像処理プログラムは、前記コンピュータに、前記地形オブジェクト上において当該草オブジェクトが生成され得ると設定された部分に対して、前記所定範囲内における前記仮想カメラに近い位置ほど草の長さを短くするように、前記草オブジェクトの頂点を座標変換して前記草オブジェクトを生成させてもよい。
【0020】
上記によれば、例えば、地形オブジェクト上に草が生えている様子を表現することができる。
【0021】
また、前記所定のオブジェクトは雪オブジェクトであってもよい。前記画像処理プログラムは、前記コンピュータに、前記地形オブジェクト上の当該雪オブジェクトが生成され得ると設定された部分に対して、前記所定範囲内における前記仮想カメラに近い位置ほど積雪の高さを低くするように、前記雪オブジェクトの頂点を座標変換して前記雪オブジェクトを生成させてもよい。
【0022】
上記によれば、例えば、地形オブジェクト上に雪が積もっている様子を表現することができる。
【0023】
また、前記所定のオブジェクトは高さを有するオブジェクトであり、前記仮想カメラからの距離に応じて前記所定のオブジェクトの高さが異なるように、前記所定のオブジェクトを生成させてもよい。
【0024】
上記によれば、所定のオブジェクトの高さを仮想カメラに近いほど低くすることができる。逆に、境界線に近いほど所定のオブジェクトの高さを高くすることができる。これにより、仮想カメラに近い領域を見易くするとともに、境界線に近い領域の表現を向上させることができる。
【0025】
また、前記画像処理プログラムは、前記コンピュータにさらに、操作入力に基づいて、前記地形オブジェクト上でプレイヤキャラクタを移動させてもよい。前記仮想カメラの位置は、前記プレイヤキャラクタが前記仮想カメラの視線方向における手前側に位置し、前記境界線が前記仮想カメラの視線方向における奥側に位置するように、前記プレイヤキャラクタの位置に基づいて制御されてもよい。
【0026】
上記によれば、仮想カメラから見て手前側にプレイヤキャラクタが位置し、奥側に境界線が位置し、境界線を基準とした所定領域に所定のオブジェクトが生成される。このため、仮想カメラから見て手前側のプレイヤキャラクタを見易くすることができるとともに、仮想カメラから見て奥側の所定領域の表現を向上させることができる。
【0027】
また、前記画像処理プログラムは、前記コンピュータにさらに、前記地形オブジェクト上にアイテムオブジェクトを配置させ、前記操作入力に基づいて、前記プレイヤキャラクタに、前記アイテムオブジェクトに対する所定のアクションを行わせてもよい。
【0028】
上記によれば、仮想カメラから見て手前側にプレイヤキャラクタが位置し、所定のアクションが行われる。奥側に境界線が位置し、境界線を基準とした所定領域に所定のオブジェクトが生成される。このため、仮想カメラから見て手前側で行われたプレイヤキャラクタの所定のアクションを見易くすることができるとともに、仮想カメラから見て奥側の所定領域の表現を向上させることができる。
【0029】
また、前記画像処理プログラムは、前記コンピュータにさらに、操作入力に基づいて、仮想空間内の平面的な前記地形オブジェクト上においてプレイヤキャラクタを移動させ、前記プレイヤキャラクタの位置に応じて前記仮想カメラの位置を制御させてもよい。また、前記画像処理プログラムは、前記コンピュータにさらに、前記仮想カメラの位置に基づいて、前記平面的な地形オブジェクト上の前記所定範囲に対応する位置に前記所定のオブジェクトを生成させ、前記平面的な地形オブジェクトが曲面に変形するように、少なくとも前記仮想カメラの視野に含まれる前記地形オブジェクト、前記所定のオブジェクト、及び、前記プレイヤキャラクタの頂点を変位させてもよい。
【0030】
上記によれば、平面的な地形オブジェクト上でプレイヤキャラクタを移動させるとともに、平面的な地形オブジェクト上の所定範囲に所定のオブジェクトを生成させ、その後、平面的な地形オブジェクト、所定のオブジェクト、及び、プレイヤキャラクタの頂点を変位させることで、平面的な地形オブジェクトを曲面に変形させることができる。
【0031】
また、他の発明は、上記処理を実行する画像処理装置であってもよいし、画像処理システムであってもよいし、画像処理システムにおいて実行される画像処理方法であってもよい。
【発明の効果】
【0032】
本発明によれば、境界線を基準とした所定範囲の地形の表現を向上させることができるとともに、所定領域よりも手前側の領域を見易くすることができる。
【図面の簡単な説明】
【0033】
【
図1】本実施形態におけるゲームシステム1の一例を示す図
【
図2】ゲームシステム1の内部構成の一例を示すブロック図
【
図3】本実施形態のゲームが行われた場合の仮想空間の一例を示す図
【
図4】本実施形態のゲームの実行中にディスプレイ12に表示される画像の一例を示す図であって、草オブジェクトを省略した図
【
図5】本実施形態のゲームの実行中にディスプレイ12に表示される画像の一例を示す図であって、草オブジェクト32を表示した図
【
図6】ドラム変形処理が行われる前の仮想空間の一例を示す図
【
図7】ドラム変形処理が行われた後の仮想空間の一例を示す図
【
図8】ドラム変形処理が行われる前の仮想空間をx軸と平行な方向から見たときの一例を示す図
【
図9】ドラム変形処理が行われた後の仮想空間をx軸と平行な方向から見たときの一例を示す図
【
図10】草生成領域を決定する方法を説明するための図
【
図12】
図10の状態から仮想カメラVCが地形オブジェクト30に対して移動したときの一例を示す図
【
図13】本体装置2(のDRAM26)に記憶されるデータの一例を示す図
【
図14】本体装置2のプロセッサ20において行われるゲーム処理の一例を示すフローチャート
【
図15】ステップS107の草生成処理の一例を示すフローチャート
【発明を実施するための形態】
【0034】
(システム構成)
以下、図面を参照して、本実施形態のゲームシステム1(画像処理システムの一例)について説明する。
図1は、本実施形態におけるゲームシステム1の一例を示す図である。
図1に示すように、ゲームシステム1は、ゲーム装置としての本体装置(画像処理装置の一例)2と、左コントローラ3と、右コントローラ4とを備える。本体装置2は、ディスプレイ12を備える。なお、左コントローラ3及び右コントローラ4は、本体装置2から着脱可能に装着されてもよい。
【0035】
左コントローラ3は、ユーザの左手で操作されるコントローラであり、右コントローラ4は、ユーザの右手で操作されるコントローラである。左コントローラ3及び右コントローラ4は、複数の操作ボタンと、方向入力部としてのアナログスティックとを含む。
【0036】
図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つのチップ上に実装されてもよい。
【0037】
プロセッサ20には、スロットI/F23、フラッシュメモリ25、DRAM26、ディスプレイ12が接続される。また、プロセッサ20には、左インターフェイス(I/F)を介して左コントローラ3が接続され、右インターフェイス(I/F)を介して右コントローラ4が接続される。スロット24には、外部記憶媒体が着脱可能に挿入される。外部記憶媒体には、プログラム(後述するゲームプログラム)やデータ(後述する平面状の地面オブジェクト等)が記憶される。なお、これらプログラムやデータは、フラッシュメモリ25に予め記憶されてもよいし、ネットワーク(例えばインターネット)からダウンロードされてフラッシュメモリ25に記憶されてもよい。
【0038】
外部記憶媒体(又はフラッシュメモリ25)に記憶されたプログラムやデータは、後述するゲームが開始される際にDRAM26に読み込まれる。CPU21が当該プログラムを実行することにより、後述するゲーム処理が行われる。また、CPU21は、画像をディスプレイ12に表示させるための命令をGPU22に対して送り、GPU22は、当該命令に応じて画像を描画し、ディスプレイ12に画像を表示させる。なお、本体装置2にはディスプレイ12とは異なる外部の表示装置に接続され、GPU22によって生成された画像が、当該外部の表示装置に表示されてもよい。
【0039】
(本実施形態のゲーム及び画像処理の概要)
次に、本実施形態のゲームの概要について説明する。
図3は、本実施形態のゲームが行われた場合の仮想空間の一例を示す図である。本実施形態のゲームプログラムが実行された場合、本体装置2において仮想空間が定義され、仮想空間内に様々な仮想オブジェクトが配置される。ユーザ(プレイヤ)は、左コントローラ3及び右コントローラ4を用いてプレイヤキャラクタ40を仮想空間内で移動させ、ゲームを進める。
【0040】
図3に示すように、仮想空間にはxyz直交座標系が設定される。x軸は、仮想空間の横方向の軸であり、z軸は、仮想空間の奥行き方向の軸であり、y軸は、仮想空間の高さ方向の軸である。仮想空間には、仮想オブジェクトとして、地面オブジェクト30と、川オブジェクト31とが配置される。地面オブジェクト30は、平面的なオブジェクトであり、例えばxz平面と平行な面である。なお、地面オブジェクト30は、凹凸や起伏を有する実質的な平面(全体として概ね平面)であってもよいし、凹凸や起伏を有さない完全な平面であってもよい。地面オブジェクト30及び川オブジェクト31は、仮想空間の地形を表す地形オブジェクトである。
【0041】
また、仮想空間の地形オブジェクト30上には、仮想オブジェクトとして、家オブジェクト35、木オブジェクト36、及び、崖オブジェクト37が配置される。崖オブジェクト37も、仮想空間の地形を表す地形オブジェクトの1つである。また、地形オブジェクト上にはプレイヤキャラクタ40が配置される。プレイヤキャラクタ40の背後には、仮想カメラVCが配置される。
【0042】
本実施形態のゲームでは、ユーザは、コントローラ(左コントローラ3又は右コントローラ4)を操作してプレイヤキャラクタ40を地面オブジェクト30上で移動させたり、プレイヤキャラクタ40に所定の動作を行わせたりすることでゲームを進める。仮想カメラVCはプレイヤキャラクタ40の背後の所定位置に配置され、プレイヤキャラクタ40の移動に応じて移動する。ディスプレイ12には仮想カメラVCから仮想空間を見た画像が表示される。
【0043】
図4は、本実施形態のゲームの実行中にディスプレイ12に表示される画像の一例を示す図であって、草オブジェクトを省略した図である。
図5は、本実施形態のゲームの実行中にディスプレイ12に表示される画像の一例を示す図であって、草オブジェクト32を表示した図である。
【0044】
図4に示すように、仮想カメラVから仮想空間を見たゲーム画像の一例として、地面オブジェクト30、川オブジェクト31、家オブジェクト35、木オブジェクト36、及び、プレイヤキャラクタ40を含む画像がディスプレイ12に表示される。本実施形態では、後述するように、平面の地面オブジェクト30が画像の生成時にドラム状に曲げられ、ドラム状に曲げられた地面オブジェクト30を含む画像がディスプレイ12に表示される。ゲーム画像では、地面オブジェクト30と背景との境界が地平線として表示される。また、地面オブジェクト30は、例えば、草原オブジェクト30aと、道オブジェクト30bとを含む複数のオブジェクトに分けられる。草原オブジェクト30aは草が生えているように緑色を帯びた色である。また、道オブジェクト30bは、草が生えていない土の領域であり、茶色を帯びた色である。
【0045】
ユーザは、地面オブジェクト30上でプレイヤキャラクタ40を移動させたり、プレイヤキャラクタ40に対して所定のアクションを行わせたりする。例えば、ユーザは、プレイヤキャラクタ40を木オブジェクト36の位置まで移動させ、プレイヤキャラクタ40に所定の動作(例えば、木オブジェクト36を揺する動作)をさせる。すると、木オブジェクト36の果実36aが地面オブジェクト30上に落ち、プレイヤキャラクタ40は、果実36aを獲得する。このように、本実施形態では、プレイヤキャラクタ40を移動させたり、プレイヤキャラクタ40にアイテムオブジェクトに対する所定のアクション(例えば、果実36aを拾う動作)を行わせたりすることで、ゲームが進行する。
【0046】
図4では草オブジェクト32が省略されているが、本実施形態のゲームでは、
図5に示すような草オブジェクト32が表示される。
【0047】
具体的には、
図5に示すように、仮想カメラVCから見たときの地平線上およびその近傍に、草オブジェクト32が生成され、表示される。草オブジェクト32は、例えば、三角形のオブジェクトであり、緑色のオブジェクトである。草オブジェクト32の底辺を構成する2つの頂点は地面オブジェクト30上の頂点と一致するように配置され、残り1つの頂点(最頂部の頂点)は地面オブジェクト30より高い位置に位置する。草オブジェクト32は、地平線を基準とした所定領域(以下、「草生成領域」と言うことがある)に生成される。具体的には、地平線を含む仮想カメラVC側の領域と、地平線よりも仮想カメラVCの視線方向側の領域とを含む草生成領域に、草オブジェクト32が生成される。
【0048】
草オブジェクト32は、地平線を基準とした草生成領域に動的に生成される。例えば、ユーザの操作に応じてプレイヤキャラクタ40が地面オブジェクト30上を移動する場合、仮想カメラVCもプレイヤキャラクタ40に追従して移動する。この場合、プレイヤキャラクタ40の移動前と移動後とでは、仮想カメラVCから見た地平線の地面オブジェクト30上の位置が異なる。例えば、
図5に示す画面では、家オブジェクト35はほぼ地平線上に位置するが、プレイヤキャラクタ40が画面の奥行き方向(仮想カメラVCの視線方向における正方向)に移動した場合には、ディスプレイ12上の地平線の位置は変わらないものの、家オブジェクト35は地平線の手前に位置するようになる。言い換えると、プレイヤキャラクタ40が画面の奥行き方向に移動した場合には、その移動に応じて、地平線の地面オブジェクト30上の位置は家オブジェクト35より奥行き方向に移動する。すなわち、プレイヤキャラクタ40が仮想カメラVCの視線方向(奥行き方向、又は手前方向)に移動した場合、ディスプレイ12上の地平線の位置は変わらないが、地面オブジェクト30上の地平線の位置も移動する。地平線の位置が移動することに伴って、地平線を基準とした草生成領域も移動する。
【0049】
プレイヤキャラクタ40が地面オブジェクト30上を移動する間も、草オブジェクト32は、地平線を基準とした草生成領域に常に表示されるように動的に生成される。プレイヤキャラクタ40が移動した場合、移動後の地平線を基準とした新たな草生成領域に草オブジェクト32が生成される。プレイヤキャラクタ40の移動前に生成されていた草オブジェクト32は、移動後の地平線を基準とした草生成領域に位置しない場合は、消去される。すなわち、プレイヤキャラクタ40が奥行き方向に移動する場合、その移動に応じて、地平線の地面オブジェクト30上の位置が移動し、移動後の地平線を基準とした草生成領域に草オブジェクト32が新たに生成される。なお、地面オブジェクト30上に配置された草オブジェクト32を取り除くことによって、草オブジェクト32を消去してもよい。すなわち、地面オブジェクト30上に配置された草オブジェクト32の3つの頂点を除去することで、草オブジェクト32を消去してもよい。また、地面オブジェクト30上に配置された草オブジェクト32の高さを「0」にして草オブジェクト32が表示されないようにすることで、草オブジェクト32を消去してもよい。
【0050】
地平線を基準とした所定領域であっても、草原オブジェクト30aの領域以外には草オブジェクト32は生成されない。具体的には、プレイヤキャラクタ40が移動可能な地面オブジェクト30上の道オブジェクト30bの領域には、草オブジェクト32は生成されない。例えば、
図5では、家オブジェクト35の周囲の領域に道オブジェクト30bが形成されており、この道オブジェクト30bの領域には草オブジェクト32は生成されていない。また、
図5の画面の手前方向にプレイヤキャラクタ40が移動する場合でも、道オブジェクト30bには草オブジェクト32は生成されない。
【0051】
また、プレイヤキャラクタ40が移動可能な草原オブジェクト30aの領域のうち、地平線を基準とした所定領域以外の領域には、草オブジェクト32は生成されない。すなわち、草原オブジェクト30aの領域のうち、地平線を基準とした所定領域よりも仮想カメラVC側の領域(手前側の領域)には、草オブジェクト32は生成されない。ゲームの実行中、プレイヤキャラクタ40の移動に追従して仮想カメラVCも移動する。このため、プレイヤキャラクタ40は、ゲームの実行中、ディスプレイ12における所定位置(例えば、画面の中心)に位置する。草オブジェクト32は、地平線を基準とした所定領域よりも手前側の領域には生成されないため、プレイヤキャラクタ40は、草オブジェクト32が生成されない領域で移動したり、所定のアクションを行ったりすることになる。
【0052】
草オブジェクト32が生成された領域にプレイヤキャラクタ40が位置する場合、必要な部分が見え難くなったり、不自然な表示となったり、余計な計算が必要になったりすることがある。例えば、草オブジェクト32の中にプレイヤキャラクタ40の足が埋もれて足が見え難くなったり、プレイヤキャラクタ40が所定のアイテムに対して所定のアクションを行う場合(例えば、地面上に落ちているアイテムを拾う)に所定のアイテムが見え難くなったりする場合がある。また、草オブジェクト32の上でプレイヤキャラクタ40の足が浮いて見えるようになったりする場合もある。また、自然な表示とするために、プレイヤキャラクタ40の足と草オブジェクト32との衝突を計算し、その計算結果に応じて表示を制御することも考えられる。例えば、プレイヤキャラクタ40の足と草オブジェクト32とが衝突した場合、草オブジェクト32を変形させることも考えられる。しかしながら、このような計算は複雑であり、多数の草オブジェクト32が存在する場合にはプロセッサ20に大きな負荷がかかることになる。
【0053】
しかしながら、本実施形態では、草オブジェクト32は、地平線を基準とした所定領域に生成され、プレイヤキャラクタ40が位置する領域には生成されない。このため、このような問題が発生しないようにすることができる。
【0054】
このように、本実施形態では、地平線を基準とした草生成領域には、3次元の草オブジェクト32が生成される。このため、地平線部分に所定の高さを有する草オブジェクト32を表示させることができ、地平線部分をリアルに表現することができる。
【0055】
なお、草原オブジェクト30aの領域のうち、地平線を基準とした所定領域よりも手前側の領域には、3次元の草オブジェクト32は生成されないが、草原オブジェクト30aには草を模した緑色のテクスチャ画像が貼り付けられる。この草原オブジェクト30a上の草の画像は、草オブジェクト32とは異なり、3次元の仮想オブジェクトではない。このため、草生成領域の手前側の領域では平坦な画像になるが、仮想カメラVCから当該手前側の領域への方向と、地面オブジェクト30との角度は大きいため、3次元の草オブジェクト32がなくても違和感のない画像となる。一方、地平線部分では、仮想カメラVCから地平線に向かう方向と、地面オブジェクト30との角度が小さい。このため、3次元の草オブジェクト32が生成されなければ、地平線部分は平坦になり、リアルさに欠ける画像となってしまう可能性がある。しかしながら、本実施形態では、地平線部分に高さ方向に伸びる草オブジェクト32を生成することで、地平線部分をリアルに表現することができる。
【0056】
次に、草オブジェクト32の生成方法について説明する。本実施形態では、仮想空間において、平面的な地面オブジェクト30と地面オブジェクト30上の他のオブジェクト(32、35~37、40等)とが配置される。仮想カメラVCに基づいて仮想空間の画像を生成する際に、少なくとも仮想カメラVCの視野に含まれる、当該地面オブジェクト30と他のオブジェクトとを含む仮想空間がドラム状に変形される。まず、仮想空間をドラム状に変形させるドラム変形処理について説明した後、草オブジェクト32の生成方法について説明する。
【0057】
(ドラム変形処理)
図6は、ドラム変形処理が行われる前の仮想空間の一例を示す図である。
【0058】
図6に示すように、仮想空間には、地形オブジェクトとしての地面オブジェクト30と、地面オブジェクト30上の家オブジェクト35とが配置されている。なお、
図6では、地面オブジェクト30及び家オブジェクト35以外のオブジェクトについては表示を省略している。また、仮想空間には、仮想カメラVCが設定される。仮想カメラVCには、当該仮想カメラに固定のCxCyCz座標系が設定される。Cx軸は、仮想カメラVCの横方向の軸である。Cy軸は、仮想カメラVCの上方向の軸である。Cz軸は、仮想カメラVCの視線方向の軸である。本実施形態では、Cx軸は、仮想空間のx軸に平行に設定される。また、仮想カメラVCは、仮想空間の高さ方向に移動可能であり、高さ方向に移動する場合にCx軸回り(ピッチ方向)に回転する。Cx軸は仮想空間のx軸に平行に設定されるため、仮想カメラVCの視線方向の地面34に沿った方向は、z軸と平行になる。
【0059】
図6に示す地面オブジェクト30及び地面オブジェクト30上の他のオブジェクトに対して、ドラム変形処理が行われる。
図7は、ドラム変形処理が行われた後の仮想空間の一例を示す図である。
【0060】
図7に示すように、ドラム変形処理では、地面オブジェクト30が円筒(ドラム)の側面に沿うように地形全体が変形される。具体的には、地形を構成する地面オブジェクト30が、仮想空間のx軸と平行な中心軸を有する半径Rの円筒の側面の少なくとも一部をなすように、地形全体が変形される。仮想カメラVCのCx軸は仮想空間のx軸と平行になるように設定されるため、仮想カメラVCの視線方向(画像が表示された場合の画面の奥行き方向)に地面30が下がるように、地形全体が変形される。また、地面オブジェクト30上の家オブジェクト35(及び、その他の木オブジェクト36、プレイヤキャラクタ40等)も地面オブジェクト30に沿うように変形される。
【0061】
具体的には、ドラム変形処理では、地面オブジェクト30の各頂点、及び、地面オブジェクト30上に配置された他のオブジェクトの各頂点がx軸回りに回転するように座標変換される。以下、
図8及び
図9を参照して、ドラム変形処理の詳細について説明する。
【0062】
図8は、ドラム変形処理が行われる前の仮想空間をx軸と平行な方向から見たときの一例を示す図である。
図9は、ドラム変形処理が行われた後の仮想空間をx軸と平行な方向から見たときの一例を示す図である。
【0063】
図8に示すように、地面オブジェクト30上の頂点V1のy座標値及びz座標値が(y1,z1)であるとする。また、家オブジェクト35の頂点V2のy座標値及びz座標値が(y2,z2)であるとする。また、z軸方向の所定距離がLであるとする。なお、Lは固定の値である。
【0064】
また、本実施形態では、ユーザの操作に応じて、仮想カメラ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度)に設定される。この場合、仮想空間を上から見たような画像が表示される。
【0065】
この場合、
図8に示す頂点V1及びV2は、
図9に示す頂点V1’及びV2’にそれぞれ変位される。具体的には、変位後の頂点V’のy座標値及びz座標値(y’,z’)は、変位前の頂点Vのy座標値及びz座標値(y,z)に基づいて、以下の式1~式5により算出される。なお、各頂点のx座標値は変化されない。
【0066】
rad=θ×(z/L) (式1)
temp_y=y+R (式2)
y_t=temp_y×cos(rad) (式3)
y’=y_t-R (式4)
z’=temp_y×sin(rad) (式5)
【0067】
ここで、θは、円弧の中心角であり、仮想カメラVCの高さに応じて定められる。また、Rは、円弧(円筒)の半径を示す。z軸方向の距離Lは固定の値であり、θは仮想カメラVCの高さに応じて定められるため、Rは、Lとθとに基づいて定まる(Rθ=L)。
【0068】
地面オブジェクト30および地面上のオブジェクトの全ての頂点に対して、式1~式5に基づく座標変換が行われる。すなわち、各頂点のz軸方向の位置に応じて、各頂点に対して式1~式5に基づく座標変換が行われる。言い換えると、各頂点の地面オブジェクト30に沿った奥行き方向の位置に応じて、各頂点に対して式1~式5に基づく座標変換が行われる。
【0069】
図9に示すように、例えば地面オブジェクト30上の頂点V1は、半径R、中心角θを有する円弧上の位置に変位される。地面オブジェクト30上の全ての頂点に対して同様の座標変換が行われることにより、地面オブジェクト30が、半径Rの円筒の側面の一部をなすように変形される。また、地面オブジェクト30上の家オブジェクト35の頂点V2も同様に座標変換され、
図9に示す位置に変位される。家オブジェクト35の全頂点に対して同様に座標変換が行われることにより、家オブジェクト35は、円筒の側面上に配置される。
【0070】
ドラム変形処理では、GPU22の頂点シェーダ機能により各頂点が変位される。具体的には、GPU22は、CPU21からの命令に応じて、上記式1~式5に基づく座標変換を行う。そして、GPU22は、仮想カメラVCに基づいて描画処理を行い、ディスプレイ12に画像を表示させる。すなわち、ディスプレイ12に画像が表示される毎に(フレーム毎に)、GPU22の頂点シェーダ機能により地面オブジェクト30及び地面上のオブジェクトの頂点が変位され、地形全体が変形される。
【0071】
なお、θは、仮想カメラVCの視線方向(仮想カメラVCの高さ)によって定められる。例えば、仮想カメラVCの視線方向が第1の方向に設定される場合、θは第1の値に設定される。また、仮想カメラVCの視線方向が第2の方向に設定される場合、θは、第1の値よりも大きな第2の値に設定される。すなわち、仮想カメラVCの視線方向が第1の方向よりも下向きの第2の方向に設定される場合は、θの値は大きくなる。言い換えると、仮想カメラVCの視線方向が第1の方向よりも下向きの第2の方向である場合は、変形後の地面の曲率が大きくなる。
【0072】
一方、仮想カメラVCの視線方向が第2の方向よりもさらに下向きの第3の方向である場合は、θの値は、第1の値および第2の値よりも小さな第3の値に設定される。言い換えると、仮想カメラVCの視線方向が第2の方向よりも下向きの第3の方向である場合は、変形後の地面の曲率は小さくなる。
【0073】
なお、仮想カメラVCが
図8に示す「高」の位置よりも更に高い位置(例えば、真上から仮想空間を見下ろす方向)にある場合、ドラム変形処理は行われなくてもよい。すなわち、マップのように仮想空間を俯瞰する位置に仮想カメラVCが設定されている場合、地形および地形上のオブジェクトをドラム状に変形させる処理は行われなくてもよい。
【0074】
(草オブジェクト32の生成方法)
図10は、草生成領域を決定する方法を説明するための図である。
図11は、草オブジェクト32の高さの一例を示す図である。
【0075】
図10に示すように、CPU21は、草生成領域を決定する場合に、仮想カメラVCの位置から、上述したドラム変形処理を行った場合の地面オブジェクト30への接線を求める。この接線とドラム状の地面オブジェクト30との接点をPとする。この接点Pに基づいて定められる線が、仮想カメラVCから見える地平線(地面オブジェクト30と背景との境界線)となる。例えば、仮想カメラVCの位置から、地面オブジェクト30への接線(x軸に垂直な線)を引き、その接線の接点Pを通るx軸に平行な直線を、地平線としてもよい。CPU21は、接点P(地平線)を含む仮想カメラVC側の領域と、仮想カメラVCの視線方向側の領域とを含む所定領域を、草生成領域として決定する。なお、この草生成領域の決定は、実際にドラム変形処理が行われる前に、行われる。すなわち、CPU21は、平面的な地面オブジェクト30に対してドラム変形処理を行った場合の円筒のオブジェクトに接する接線を計算する。
【0076】
なお、仮想カメラVCの高さによっては、仮想カメラVCの視野内に地平線が含まれない場合がある。この場合は、接線を引くことができないため、草生成領域は存在せず、草オブジェクト32は生成されない。例えば、仮想カメラVCが
図8に示す「高」の位置にある場合、仮想カメラVCの視野内に地平線が含まれないため、草オブジェクト32は生成されない。
【0077】
CPU21は、草生成領域を決定すると、平面的な地形オブジェクト30上の草生成領域に複数の草オブジェクト32を配置するとともに、各草オブジェクト32の高さを決定する。
図11に示すように、接点P(地平線)よりも仮想カメラVC側の領域Aでは、草オブジェクト32の高さは、仮想カメラVCからの距離に応じて異なる。具体的には、領域Aでは、草オブジェクト32の高さは、仮想カメラVCに近いほど低くなるように決定される。すなわち、接点Pの手前側(仮想カメラVC側)の位置から接点Pまでの範囲では、草オブジェクト32の高さは、奥行き方向(仮想カメラVCの視線方向)に行くほど高くなる。草オブジェクト32の高さは、接点P(地平線)において最大となり、接点Pよりも奥行き方向の領域Bでは、最大値が維持される。なお、領域Aよりも更に手前側(仮想カメラVC側)の領域Cでは、地面オブジェクト30上に草オブジェクト32が配置されるものの、草オブジェクト32の高さは「0」に設定される。すなわち、草オブジェクト32の3つの頂点が地面オブジェクト30上に配置される。このため、この領域Cには、草オブジェクト32が生えていないように見える。また、領域Cよりもさらに手前側の領域には、草オブジェクト32は配置されない(すなわち、3つの頂点は配置されない)。
【0078】
三角形の草オブジェクト32の最頂部の頂点をGPU22の頂点シェーダ機能によって変位させることで、草オブジェクト32が生成、表示される。すなわち、CPU21が決定した草オブジェクト32の高さをGPU22に指定し、GPU22が草オブジェクト32の最頂部の頂点の位置を座標変換により変位させる。これにより、草オブジェクト32の最頂部の頂点が上下方向に移動し、草オブジェクト32がシームレスに出現するように見せる。
【0079】
草オブジェクト32の最頂部の頂点を変位させた後、さらに、上記ドラム変形処理によって、地面オブジェクト30と地面オブジェクト30上に配置されたオブジェクト(草オブジェクト32、家オブジェクト、木オブジェクト、プレイヤキャラクタ40等)とを含む少なくとも仮想カメラVCの視野に含まれる仮想空間が、変形される。このドラム変形処理は、GPU22の頂点シェーダ機能によって各オブジェクトの各頂点を変位させることで行われる。そして、GPU22によって仮想空間の画像が生成され、
図5に示したような画像がディスプレイ12に表示される。
【0080】
図10に示した状態から仮想カメラVCが奥行き方向に移動した場合、草生成領域も移動する。
図12は、
図10の状態から仮想カメラVCが地形オブジェクト30に対して移動したときの一例を示す図である。
【0081】
例えば、
図10の状態から仮想カメラVCが奥行き方向に移動した場合、地面オブジェクト30上の接点Pの位置が移動する。
図10では家オブジェクト35の手前側に草生成領域が設定されていたが、
図12では、家オブジェクト35の奥側に草生成領域が設定される。このように、草生成領域は、仮想カメラVCの奥行き方向への移動に応じて、移動する。仮想カメラVCが奥行き方向に移動した場合には、リアルタイムで仮想カメラVCから円筒状の地面オブジェクト30に対する接線が求められ、草生成領域が設定される。これにより、仮想カメラVCの奥行き方向への移動に応じて、草オブジェクト32が生成又は消去される。また、草オブジェクト32の高さは、仮想カメラVCの奥行き方向への移動に応じて変化する。
【0082】
なお、仮想空間内でプレイヤキャラクタ40及び仮想カメラVCを奥行き方向に移動させることで、プレイヤキャラクタ40及び仮想カメラVCを地面オブジェクト30上で移動させてもよい。また、プレイヤキャラクタ40及び仮想カメラVCの位置を固定したまま、ドラム状の地形全体を回転させることで、プレイヤキャラクタ40及び仮想カメラVCを擬似的に奥行き方向に移動させてもよい。すなわち、プレイヤキャラクタ40及び仮想カメラVCが地形上を移動するように制御されるのであれば、プレイヤキャラクタ40及び仮想カメラVCを仮想空間内で移動させてもよいし、プレイヤキャラクタ40及び仮想カメラVCの仮想空間における位置を固定したまま、ドラム状の地形を回転させてもよい。
【0083】
例えば、ドラム状の地形を回転させる方法として、
図9を参照して説明した座標変換を行う際に、奥行き方向への移動量に応じた角度を加える方法がある。具体的には、上記式1の代わりに、以下の式1’に基づいて「rad」が算出される。
rad=θ×((z+OFFSET)/L) (式1’)
【0084】
ここで、「OFFSET」は、プレイヤキャラクタ40の奥行き方向への移動に応じて定められる。式1’に示すように、zにOFFSET値を加えた値に基づいて「rad」が算出される。そして、式1’に基づいて算出された「rad」を上記式2及び式5に代入し、変換後の頂点Vの座標値が算出される。これにより、地形全体をドラム状に変形するとともに、ドラム状の地形全体を、ドラムの中心軸周りに回転させることができ、実際に仮想カメラVCを仮想空間で移動させることなく、擬似的な仮想カメラVCの移動を実現することができる。すなわち、式1’のようにz座標値にOFFSET値を加えることで、「OFFSET」分だけ仮想カメラVCが奥行き方向に移動するように見える。
【0085】
以上のように、本実施形態では、地面オブジェクト30上の所定領域であって、仮想カメラVCから見える地面オブジェクト30と背景との境界線(地平線)を基準とした所定領域に草オブジェクト32が生成される。このため、地面オブジェクト30上の境界線部分をリアルに表現することができる。また、プレイヤキャラクタ40は所定領域の手前側(仮想カメラVC側)に位置し、草オブジェクト32が生成されない領域においてプレイヤキャラクタ40が移動したり、所定のアクションを行ったりする。これにより、プレイヤキャラクタ40を移動させたり所定のアイテムに対する所定のアクションを行わせたりする場合に、見易さを確保することができる。
【0086】
また、草オブジェクト32は、境界線の手前から境界線にかけて長くなるように生成される。地面オブジェクト30上の境界線の草オブジェクト32が長く形成されるため、地面オブジェクト30から仮想空間の上方に向かって草オブジェクト32が生えている様子を強調することができ、リアルさを増すことができる。
【0087】
また、本実施形態では、地面オブジェクト30が仮想カメラVCから見て円筒の周方向に沿うように変形されるため、地平線部分から草オブジェクト32が生える様子を見やすくすることができる。
【0088】
また、本実施形態では、GPU22の頂点シェーダ機能によりリアルタイムで草オブジェクト32の高さが調整される。これにより、高さの異なる草オブジェクト32を複数用意する必要がない。
【0089】
また、GPU22の頂点シェーダ機能により草オブジェクト32の頂点を変位させることで、草オブジェクト32を動かすことができる。例えば、仮想空間内で風が吹く場合に、草オブジェクト32の最頂部の頂点を左右方向に変位させることで、草オブジェクト32が揺れる様子を表示することができる。例えば、草オブジェクト32が揺れる様子を記録した動画像を表示する場合、データ量が大きくなったり、草の揺れが単調になったりすることがある。草オブジェクト32の頂点をGPU22の頂点シェーダ機能により変位させることで、このような動画像を用意する必要がない。また、例えば変位のパターンをランダムにすることで草の揺れを自然に表現することができる。
【0090】
また、本実施形態では、GPU22の頂点シェーダ機能によりリアルタイムで平面的な地形及び地形上のオブジェクトの頂点が変位される。これにより、予め曲面状の地形を用意する必要がない。また、予め曲面状の地形を作成する場合には、地形上に配置される他のオブジェクト(家オブジェクト35や木オブジェクト36)もその曲面に合うように作成する必要があり、ゲーム製作者にとって手間がかかる。すなわち、曲面状の地形上にオブジェクトを配置する場合、地面に接するオブジェクトの底面も地形に沿って曲面状に形成する必要があり、その底面に合わせてオブジェクト全体も作成する必要がある。異なる曲率の地形を用意する場合には、その曲率毎にオブジェクトも作成する必要がある。しかしながら、本実施形態では、平面的な地形及び当該地形上に配置されるオブジェクトを予め用意し、平面的な地形及び地形上のオブジェクトの頂点をGPU22の頂点シェーダ機能によりリアルタイムで変位させるため、予め曲面状の地形や曲面状の地形に合ったオブジェクトを用意する必要がない。したがって、ゲームの開発効率を向上させることができる。
【0091】
また、本実施形態では、ドラム変形処理によって仮想カメラVCの視線方向が第1の方向の場合は、ドラムの曲率を小さく(θを小さく)し、仮想カメラVCの視線方向が第1の方向より下向きの第2の方向の場合は、ドラムの曲率を大きく(θを大きく)する。これにより、ユーザにとって見やすい画像にすることができる。例えば、奥行き方向の遠い位置については地面が曲げられて表示されないため、ユーザにとって、プレイヤキャラクタ40から近い範囲を見やすくなり、よりゲームを楽しむことができる。また、仮想カメラVCの視線方向が第1の方向(横向き)の場合は曲率が小さくなるため、地形全体をドラム状に変形させる場合でもユーザにとって違和感のない画像にすることができる。例えば、曲率が大きすぎると地形全体が大きく曲がっているように見え、ユーザにとって違和感のある画像になるおそれがある。しかしながら、本実施形態では、仮想カメラVCの視線方向が第1の方向(横向き)の場合にはドラムの曲率が小さく設定されるため、そのような違和感を生じさせ難くすることができる。
【0092】
(ゲーム処理の詳細)
次に、本体装置2において行われるゲーム処理の一例について具体的に説明する。まず、本体装置2に記憶されるデータについて説明する。
【0093】
図13は、本体装置2(のDRAM26)に記憶されるデータの一例を示す図である。
図13に示すように、本体装置2には、ゲームプログラムと、地形オブジェクトデータと、キャラクタデータと、仮想カメラデータと、草オブジェクトデータとが記憶される。これらの他にも、ユーザの操作に応じた操作データ、ゲームに用いられるアイテム等の他のデータ等、様々なデータが記憶される。
【0094】
ゲームプログラムは、本実施形態のゲームを実行するためのプログラムである。ゲームプログラムは、例えば外部記憶媒体に記憶されており、ゲームが開始されると、外部記憶媒体からDRAM26に読み込まれる。
【0095】
地形オブジェクトデータは、仮想空間の地形を表すオブジェクトに関するデータである。地形オブジェクトデータは、平面的な地面オブジェクト30や草オブジェクト32が生成され得ない平面的な川オブジェクト31等を含む。また、地形オブジェクトデータは、草オブジェクト32が生成され得る草原オブジェクト30a、および、草オブジェクト32が生成され得ない道オブジェクト30bに関するデータを含む。また、地面オブジェクト30に関するデータは、複数の頂点を含む。
【0096】
オブジェクトデータは、地形上に配置される他のオブジェクト(家オブジェクト35や木オブジェクト36、崖オブジェクト37等)を示すデータである。各オブジェクトデータは、複数の頂点を含む。1つのオブジェクトデータは、各頂点を表すデータとして、代表的な頂点からの相対位置を表すデータを含む。オブジェクト(例えば家オブジェクト35)が仮想空間に配置された場合、相対位置を表すデータに基づいて、当該オブジェクトの各頂点の仮想空間における座標値が定まる。オブジェクトデータは、例えば外部記憶媒体に予め記憶されており、ゲームの開始の際に、外部記憶媒体からDRAM26に読み込まれる。
【0097】
キャラクタデータは、地形上に配置されるプレイヤキャラクタ40を示すデータを含む。プレイヤキャラクタ40を示すデータは、複数の頂点を含み、各頂点を表すデータとして、代表的な頂点からの相対位置を表すデータを含む。なお、キャラクタデータは、CPU21によって制御されるキャラクタ(いわゆる、CPUキャラクタ)を示すデータを含んでもよい。
【0098】
仮想カメラデータは、仮想カメラVCの状態に関連するデータであり、仮想カメラVCの仮想空間における位置、視線方向等を表すデータである。
【0099】
草オブジェクトデータは、各草オブジェクト32に関するデータである。各草オブジェクト32に関するデータは、各草オブジェクト32の位置を示すデータと、各草オブジェクト32の高さを示すデータとを含む。
【0100】
次に、本体装置2において行われるゲーム処理の詳細について説明する。
図14は、本体装置2のプロセッサ20において行われるゲーム処理の一例を示すフローチャートである。
図14に示す処理は、本体装置2のCPU21又はGPU22がゲームプログラムを実行することによって行われる。なお、
図14では、上述した草オブジェクト32の生成及びドラム変形処理に関連する処理のみが示されており、他の処理(例えば、プレイヤキャラクタ40に所定の動作を行わせる処理等)は省略されている。
【0101】
図14に示すように、CPU21は、まず、初期処理を行う(ステップS100)。初期処理では、仮想空間に固定のxyz座標系が設定され、各オブジェクトが仮想空間内に配置される。これにより、仮想空間において、平面的な地面オブジェクト、川オブジェクト等を含む地形が構成され、地形上に他のオブジェクト(家オブジェクト35、木オブジェクト36、プレイヤキャラクタ40等)が配置される。各オブジェクトの仮想空間内における位置が定まることで、各オブジェクトの各頂点の仮想空間における位置が定まる。また、仮想空間内に仮想カメラVCが配置される。
【0102】
ステップS100の処理の後、CPU21は、ステップS101の処理を実行する。以降、CPU21は、ステップS101~ステップS110の処理を、所定のフレーム時間(例えば、1/60秒)毎に繰り返し実行する。
【0103】
ステップS101において、CPU21は、コントローラ(左コントローラ3又は右コントローラ4)から操作データを取得し、操作データに基づいてプレイヤキャラクタ40の移動操作が行われたか否かを判定する(ステップS101)。
【0104】
プレイヤキャラクタ40の移動操作が行われたと判定した場合(ステップS101:YES)、CPU21は、プレイヤキャラクタ40の移動処理を行う(ステップS102)。例えば、ユーザによって奥行き方向(z軸方向)への移動が指示された場合、CPU21は、プレイヤキャラクタ40を奥行き方向に移動させる。
【0105】
ステップS102の処理を実行した場合、又は、ステップS101でNOと判定した場合、CPU21は、仮想カメラ設定処理を行う(ステップS103)。具体的には、CPU21は、ユーザの操作に応じて、仮想カメラVCの高さ(視線方向)を設定する。ユーザによって仮想カメラVCの高さの変更が行われた場合は、CPU21は、仮想カメラVCの高さ(位置及び視線方向)を設定する。
【0106】
ステップS103に続いて、CPU21は、仮想カメラVCの状態に応じて、中心角θを設定する(ステップS104)。具体的には、CPU21は、ステップS103で設定された仮想カメラVCの視線方向(高さ)に応じて、中心角θを設定する。
【0107】
次に、CPU21は、ユーザの操作に応じてプレイヤキャラクタ40が奥行き方向(z軸方向)に移動したか否かを判定する(ステップS105)。
【0108】
プレイヤキャラクタ40が奥行き方向に移動したと判定した場合(ステップS105:YES)、CPU21は、オフセット値を設定する(ステップS106)。ここで設定されるオフセット値は、上記式1’の「OFFSET」である。具体的には、CPU21は、プレイヤキャラクタ40のz軸方向への移動に応じて、オフセット値を設定する。例えば、CPU21は、プレイヤキャラクタ40がz軸正方向に移動した場合、負のオフセット値を設定し、プレイヤキャラクタ40がz軸負方向に移動した場合、正のオフセット値を設定する。
【0109】
ステップS106の処理を実行した場合、又は、ステップS105でNOと判定した場合、CPU21は、草生成処理を行う(ステップS107)。以下、ステップS107の草生成処理の詳細について説明する。
【0110】
図15は、ステップS107の草生成処理の一例を示すフローチャートである。
【0111】
CPU21は、まず、仮想カメラVCの視野内において、仮想カメラVCの位置からドラム状に変形させた場合の地面オブジェクト30への接線を計算する(ステップS120)。
【0112】
次に、CPU21は、草生成領域を決定する(ステップS121)。具体的には、CPU121は、地面オブジェクト30上の、接点Pを含む所定領域(接点Pよりも手前側の領域と、接点Pよりも奥行き側の領域とを含む領域)を、草生成領域として決定する。
【0113】
続いて、CPU21は、決定した草生成領域に複数の草オブジェクト32を配置する(ステップS122)。例えば、CPU21は、草生成領域に等間隔に複数の草オブジェクト32を配置してもよい。ここでは、平面的な地形オブジェクト30の草生成領域に複数の草オブジェクト32が配置される。なお、CPU21は、ステップS121で決定した草生成領域において、草が生成されない領域(例えば、道オブジェクト30bの領域)には、草オブジェクト32を配置しない。
【0114】
ステップS122に続いて、CPU21は、各草オブジェクト32の高さを決定する(ステップS123)。草オブジェクト32の高さの決定方法については、
図11を参照して説明した通りである。
【0115】
次に、CPU21は、草生成領域に草オブジェクト32を生成させる(ステップS124)。具体的には、CPU21は、決定した各草オブジェクト32の高さに応じて各草オブジェクト32の最頂部の頂点を変位させるために、GPU22に命令を送る。GUP22は、当該命令に応じて、頂点シェーダ機能を用いて草オブジェクト32の最頂部の頂点に対する座標変換を行うことで、各草オブジェクト32の最頂部の頂点を変位させる。これにより、草オブジェクト32が地面オブジェクト30上の草生成領域に生成される。
【0116】
ステップS124の処理を実行した後、CPU21は、処理を
図14に戻す。
【0117】
図14に戻り、ステップS107に続いて、CPU21は、GPU22に、地形及び地形上の各オブジェクトを変形させるドラム変形処理を実行させる(ステップS108)。具体的には、GPU22は、地面オブジェクト30及び地面オブジェクト30上の各オブジェクト(草オブジェクト32、家オブジェクト35、木オブジェクト36、プレイヤキャラクタ40等)の各頂点を、頂点シェーダ機能を用いて変位させる。このドラム変形処理が行われることにより、平面的な地面が円筒の側面の一部をなすように変形され、地面上のオブジェクトも当該円筒の側面上に合うように変形される。なお、ステップS106でオフセット値が設定されている場合、頂点の変位の計算には、式1’が用いられる。
【0118】
そして、CPU21は、GPU22に、仮想カメラVCに基づく描画処理を行わせる(ステップS109)。これにより、ドラム変形処理で変形された地形及び地形上のオブジェクトを仮想カメラVCから見た画像が生成される。そして、生成された画像がディスプレイ12に出力され、ディスプレイ12において仮想空間の画像が表示される(ステップS110)。
【0119】
なお、ステップS108のドラム変形処理は、仮想カメラVCの視野(撮像範囲)に含まれる頂点についてのみ行われる。すなわち、仮想カメラVCの視野に含まれない頂点については、ドラム変形処理は行われない。
【0120】
ステップS110の処理が行われた場合、CPU21は、再びステップS101の処理を実行する。以上で
図14の説明を終了する。
【0121】
このように、ステップS107の草生成処理、及び、ステップS108のドラム変形処理は、フレーム時間毎に繰り返し実行される。プレイヤキャラクタ40がz軸方向に移動することによって地面オブジェクト30上の地平線の位置が変わっても、リアルタイムで草生成処理が行われる。
【0122】
以上のように、本実施形態では、仮想カメラVCからドラム状に変形させた場合の地面オブジェクト30への接線を計算し、接点Pに基づいて草生成領域を決定する。そして、草生成領域に複数の草オブジェクト32を配置するとともに草オブジェクト32の高さを決定し、草オブジェクト32の頂点を変位させることで、草オブジェクト32を生成する。このようにして、草オブジェクト32を、仮想カメラVCから見える地面オブジェクト30と背景との境界線を基準とした所定領域に生成する。これにより、地表をリアルに表現することができる。
【0123】
(変形例)
以上、本実施形態の画像処理ついて説明したが、上記実施形態は単なる一例であり、例えば以下のような変形が加えられてもよい。
【0124】
例えば、上記実施形態では、草原オブジェクト30a上に草オブジェクト32を生成させたが、生成するオブジェクトは草オブジェクトに限らない。例えば、雪が積もっているゲームのシーンでは、高さを有する雪オブジェクトが、地面オブジェクト30と背景との境界線を基準とした所定領域に生成されてもよい。雪オブジェクトは、草オブジェクトと同様に1つの三角形のポリゴンで構成されるオブジェクトであってもよいし、複数の三角形を組み合わせたオブジェクトであってもよい。また、雪オブジェクトの高さ(積雪の高さ)は、上記草オブジェクト32と同様に、境界線において最大となり、境界線よりも手前側(仮想カメラVC側)の領域では、手前側ほど低くなるようにしてもよい。また、この場合、雪オブジェクトが配置され得る領域(例えば上記草原オブジェクト30aの領域)と、雪オブジェクトが配置され得ない領域(例えば上記道オブジェクト30bの領域)とがあってもよい。
【0125】
また、草オブジェクトや雪オブジェクトに限らず、高さを有する任意の所定のオブジェクトを上記所定領域に生成させてもよい。
【0126】
また、上記実施形態では、地平線を基準とした所定領域に草オブジェクト32を生成させた。地平線を基準とした所定領域は、地平線を含む領域であってもよいし、地平線を含まない領域(例えば、地平線よりも仮想カメラVC側の領域)であってもよい。
【0127】
また、上記実施形態では、仮想カメラVCから見える地面オブジェクト30と背景との境界線である地平線を基準とした所定領域に、オブジェクトを生成させた。他の実施形態では、仮想カメラVCから見える任意の地形オブジェクトと背景との境界線を基準とした所定領域に、高さを有する所定のオブジェクトを生成させてもよい。例えば、海や湖、川を示す地形オブジェクトと背景との境界線である水平線を基準とした所定領域に、所定のオブジェクトを生成してもよい。例えば、所定のオブジェクトとして、水平線を基準とした所定領域に、所定の高さを有する波オブジェクトを生成させることで、水平線部分が波打つ様子を表現してもよい。また、平面的な地面に限らず、高さを有する山又は丘オブジェクトを仮想空間に配置し、山又は丘オブジェクトと背景との境界線(仮想カメラVCから見える境界線)を基準とした所定領域に、所定のオブジェクトを生成させてもよい。
【0128】
すなわち、任意の地形を表す地形オブジェクト(例えば、地面オブジェクト、海や川オブジェクト、山オブジェクト等)を仮想空間に配置し、地形オブジェクトと背景との境界線(「稜線」とも言う)を基準とした所定領域に、所定のオブジェクトを生成させてもよい。ここでいう境界線(稜線)とは、仮想カメラVCから見たときの地形オブジェクトと背景との境界であり、例えば、地平線、水平線、背景の手前に山が見える場合の山の輪郭等を含む。
【0129】
また、上記実施形態では、地面オブジェクト30の形状はドラム状(円筒の側面)であるとした。他の実施形態では、地形オブジェクトの形状は、球面や任意の曲面であってもよい。
【0130】
また、上記実施形態では、地面オブジェクト30をドラム状に変形させるドラム変形処理を行うこととしたが、必ずしもドラム変形処理は行われなくてもよい。すなわち、平面的な地形が表示される場合に、平面的な地形と背景との境界線を基準とした所定領域に、所定のオブジェクトを生成させてもよい。
【0131】
また、上記実施形態では、草生成処理およびドラム変形処理において、GPU22の頂点シェーダ機能により各頂点に対して座標変換が行われた。他の実施形態では、CPU21が各頂点に対して座標変換を行ってもよい。
【0132】
また、上記フローチャートで示した処理は単なる例示に過ぎず、処理の順番や内容は適宜変更されてもよい。
【0133】
また、上記ゲームは単なる一例であり、他の任意のゲームにおいて上述した処理が行われてもよい。
【0134】
また、上記実施形態では、ゲームシステム1における本体装置2において上述した処理が行われることとしたが、上述した処理は他の任意の画像処理装置(例えば、パーソナルコンピュータ、スマートフォン、タブレット端末)等において実行されてもよい。また、他の実施形態では、複数の装置を含む画像処理システム(例えば端末とサーバとを含むシステム)において上述した処理が行われてもよい。
【0135】
以上、本発明について説明したが、上記説明は本発明の例示に過ぎず、種々の改良や変形が加えられてもよい。
【符号の説明】
【0136】
1 ゲームシステム
2 本体装置
3 左コントローラ
4 右コントローラ
12 ディスプレイ
20 プロセッサ
21 CPU
22 GPU
30 地面オブジェクト
31 川オブジェクト
32 草オブジェクト
35 家オブジェクト
36 木オブジェクト
40 プレイヤキャラクタ