(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024041355
(43)【公開日】2024-03-27
(54)【発明の名称】プログラム、仮想空間生成装置、および仮想空間生成方法
(51)【国際特許分類】
A63F 13/57 20140101AFI20240319BHJP
A63F 13/58 20140101ALI20240319BHJP
G06T 13/60 20110101ALI20240319BHJP
G10K 15/04 20060101ALI20240319BHJP
【FI】
A63F13/57
A63F13/58
G06T13/60
G10K15/04 302G
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022146114
(22)【出願日】2022-09-14
(71)【出願人】
【識別番号】000129149
【氏名又は名称】株式会社カプコン
(74)【代理人】
【識別番号】110001427
【氏名又は名称】弁理士法人前田特許事務所
(72)【発明者】
【氏名】米山 哲平
【テーマコード(参考)】
5B050
【Fターム(参考)】
5B050AA10
5B050BA08
5B050BA09
5B050CA07
5B050EA24
5B050EA26
5B050FA02
(57)【要約】
【課題】仮想空間において、自然な風の演出ができるようにする。
【解決手段】コンピュータを、仮想空間内のオブジェクトが仮想空間内における仮想の風を遮蔽する程度である遮蔽率を、仮想空間内の所定範囲において求める算出部562と、遮蔽率が算出された所定範囲について、遮蔽率に基づいて、仮想の風を新たに発生させるか否かを示す風発生パラメータを求める決定部563と、風発生パラメータに基づいて、仮想空間における風のシミュレーションを実施する風発生部564として機能させる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
コンピュータを、
仮想空間内のオブジェクトが前記仮想空間内における仮想の風を遮蔽する程度である遮蔽率を、前記仮想空間内の所定範囲において求める算出部と、
前記遮蔽率が算出された前記所定範囲について、前記遮蔽率に基づいて、前記仮想の風を新たに発生させるか否かを示す風発生パラメータを求める決定部と、
前記風発生パラメータに基づいて、前記仮想空間における風のシミュレーションを実施する風発生部
として機能させるプログラム。
【請求項2】
請求項1のプログラムにおいて、
前記決定部は、前記所定範囲の周辺の所定領域について前記風発生パラメータを求める
プログラム。
【請求項3】
請求項1または請求項2のプログラムにおいて、
前記算出部は、前記所定範囲を前記オブジェクトの形状に基づいて定める
プログラム。
【請求項4】
請求項3のプログラムにおいて、
前記算出部は、
前記オブジェクトを複数の第1体積要素で離散化して表し、
それぞれの第1体積要素内に包含される前記オブジェクトの部位を、前記第1体積要素よりも小さな体積の第2体積要素で離散化して表した場合の、
前記第1体積要素に含まれる前記第2体積要素の数を、その第1体積要素における前記遮蔽率として求める
プログラム。
【請求項5】
請求項1または請求項2のプログラムにおいて、
ユーザの操作に基づいて前記仮想空間内でゲームを進行させるゲーム進行部として前記コンピュータを機能させる
プログラム。
【請求項6】
請求項1または請求項2のプログラムにおいて、
前記シミュレーションの結果に基づいて、前記風に基づく音を再生する音響処理部として前記コンピュータを機能させるプログラム。
【請求項7】
請求項1または請求項2のプログラムを記憶した記憶部と、
前記プログラムを実行する制御部と、
を備えた仮想空間生成装置。
【請求項8】
コンピュータによって、
仮想空間内のオブジェクトが前記仮想空間内における仮想の風を遮蔽する程度である遮蔽率を、前記仮想空間内の所定範囲において求める算出ステップと、
前記遮蔽率が算出された前記所定範囲について、前記遮蔽率に基づいて、前記仮想の風を新たに発生させるか否かを示す風発生パラメータを求める決定ステップと、
前記風発生パラメータに基づいて、前記仮想空間における風のシミュレーションを実施する風発生ステップ
とを実行する仮想空間生成方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プログラム、仮想空間生成装置、および仮想空間生成方法に関する。
【背景技術】
【0002】
ゲームプログラムのなかには、仮想空間において仮想的な風を生成するものがある(例えば特許文献1を参照)。特許文献1の例では、オブジェクト空間(仮想空間)の所与の位置に風の生成源を複数設定し、各生成源から生成される風の風力を一定時刻毎に決定するとされている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1の例では、風の遮蔽物について考慮されていない。そのため、仮想空間内の不自然な場所でも風が吹く可能性がある。特許文献1の例では、リアルさに欠ける演出が行なわれる可能性がある。
【0005】
本開示の目的は、仮想空間において、自然な風の演出ができるようにすることである。
【課題を解決するための手段】
【0006】
第1の態様は、コンピュータを、
仮想空間内のオブジェクトが前記仮想空間内における仮想の風を遮蔽する程度である遮蔽率を、前記仮想空間内の所定範囲において求める算出部と、
前記遮蔽率が算出された前記所定範囲について、前記遮蔽率に基づいて、前記仮想の風を新たに発生させるか否かを示す風発生パラメータを求める決定部と、
前記風発生パラメータに基づいて、前記仮想空間における風のシミュレーションを実施する風発生部
として機能させるプログラムである。
【0007】
第1の態様において、前記決定部は、前記所定範囲の周辺の所定領域について前記風発生パラメータを求めてもよい。
【0008】
前記態様においては、前記算出部は、前記所定範囲を前記オブジェクトの形状に基づいて定めてもよい。
【0009】
前記態様においては、
前記算出部は、
前記オブジェクトを複数の第1体積要素で離散化して表し、
それぞれの第1体積要素内に包含される前記オブジェクトの部位を、前記第1体積要素よりも小さな体積の第2体積要素で離散化して表した場合の、
前記第1体積要素に含まれる前記第2体積要素の数を、その第1体積要素における前記遮蔽率として求めてもよい。
【0010】
前記態様においては、
ユーザの操作に基づいて前記仮想空間内でゲームを進行させるゲーム進行部として前記コンピュータを機能させてもよい。
【0011】
前記態様においては、
前記シミュレーションの結果に基づいて、前記風に基づく音を再生する音響処理部として前記コンピュータを機能させてもよい。
【0012】
第2の態様は、前記態様のプログラムを記憶した記憶部と、
前記プログラムを実行する制御部と、
を備えた仮想空間生成装置である。
【0013】
第3の態様は、コンピュータによって、
仮想空間内のオブジェクトが前記仮想空間内における仮想の風を遮蔽する程度である遮蔽率を、前記仮想空間内の所定範囲において求める算出ステップと、
前記遮蔽率が算出された前記所定範囲について、前記遮蔽率に基づいて、前記仮想の風を新たに発生させるか否かを示す風発生パラメータを求める決定ステップと、
前記風発生パラメータに基づいて、前記仮想空間における風のシミュレーションを実施する風発生ステップ
とを実行する仮想空間生成方法である。
【発明の効果】
【0014】
本開示によれば、仮想空間において、自然な風の演出ができる。
【図面の簡単な説明】
【0015】
【
図2】ブリックによるオブジェクトの離散化を説明する図である。
【
図4】セルによるオブジェクトの離散化を説明する図である。
【
図5】オブジェクトが存在しない領域に配置されたブリックを例示する図である。
【発明を実施するための形態】
【0016】
[実施形態]
以下、プログラム、仮想空間生成装置、および仮想空間生成方法の実施形態について説明する。実施形態では、プログラムはゲームプログラムとして実装されている。仮想空間生成装置は、ゲーム装置として実現されている。仮想空間生成方法は、ゲームプログラムを実行するゲーム装置において実施される。
【0017】
このゲームプログラムによるゲームは、仮想空間(三次元)で実施される。ゲームの種別等には限定はない。例えば、ゲームは、プレイヤキャラクタが敵キャラクタを攻撃して倒していく対戦型のアクションゲームとすることができる。
【0018】
《ゲーム装置の構成》
〈ハードウェアの構成〉
図1は、ゲーム装置5の構成を示すブロック図である。ゲーム装置5は、ユーザの操作に基づいて所定のゲームを実行する。ゲーム装置5には、ディスプレイ61、スピーカ62およびコントローラ63が外部接続または内蔵される。
【0019】
ゲーム装置5には、例えば、パーソナルコンピュータ、プレイステーション(登録商標)、XBox(登録商標)、PlayStation Vita(登録商標)、Nintendo Switch(登録商標)などの、市販の装置を利用できる。
【0020】
ゲーム装置5では、インストールされたゲームプログラムおよびゲームデータに基づいてゲームが進行する。ゲーム装置5同士も、通信ネットワーク(図示を省略)または近距離無線通信装置(図示せず)を用いて、互いにデータ通信を行うことができる。
【0021】
ゲーム装置5は、ネットワークインターフェース51、グラフィック処理部52、オーディオ処理部53、操作部54、記憶部55および制御部56を有する。ネットワークインターフェース51、グラフィック処理部52、オーディオ処理部53、操作部54および記憶部55は、バス59を介して制御部56と電気的に接続されている。
【0022】
ネットワークインターフェース51は、例えば、他のゲーム装置5や外部のサーバ装置(図示を省略)との間で各種データを送受信するために、前記通信ネットワークに通信可能に接続される。
【0023】
グラフィック処理部52は、制御部56から出力されるゲーム画像情報に従って、プレイヤキャラクタおよび仮想空間における各種オブジェクトを含むゲーム画像を、動画形式で描画する。グラフィック処理部52はディスプレイ61(例えば液晶ディスプレイ)と接続されている。動画形式に描画されたゲーム画像は、ゲーム画面としてディスプレイ61上に表示される。
【0024】
このゲームプログラムでは、ユーザ(プレイヤ)の視点として仮想のカメラ(以下、仮想カメラCという)が仮想空間に設定されている。グラフィック処理部52は、仮想カメラCで仮想空間内を撮影したかのように、3Dの映像(動画像)を構成してディスプレイ61に表示する。仮想カメラCの方向、拡大率等は、ユーザがコントローラ63を介して設定できる。
【0025】
オーディオ処理部53は、スピーカ62と接続されている。オーディオ処理部53は、制御部56の指示に従ってデジタルのゲーム音声を再生する。具体的には、オーディオ処理部53は、制御部56が出力した音声データをアナログ信号に変換し、スピーカ62に出力する。
【0026】
オーディオ処理部53は、3次元的な音の再生を行うために、多チャンネルの音声出力ができるように構成されている。それに合わせて、ゲーム装置5には、複数のスピーカ62が接続されている。これらのスピーカ62は、3次元的な音の再生ができるように、聴取者(例えばゲームのプレイヤ)の左右、前後、上方などに配置される場合がある。
【0027】
操作部54は、コントローラ63と接続されている。操作部54は、信号をコントローラ63との間で送受信する。ゲームのプレイヤは、コントローラ63のボタン等の各種操作子を操作することで、ゲーム装置5に信号(命令やデータなど)を入力する。
【0028】
記憶部55は、HDD、SSD、RAM、ROMなどで構成される。記憶部55には、ゲームデータ、ゲームプログラムを含む各種プログラムなどが格納されている。ゲームデータとしては、ゲーム媒体やユーザのアカウント情報などを例示できる。
【0029】
制御部56は、ゲーム装置5の動作を制御する。制御部56は、CPU(マイクロコンピュータ)、および半導体メモリを備えている。半導体メモリには、CPUを動作させるためのプログラムやデータなどが格納される。
【0030】
〈制御部56の機能的構成〉
制御部56は、ゲームプログラムを実行することによって、ゲーム進行部561、算出部562、決定部563、風発生部564、表示部565、音響処理部566として機能する(
図1参照)。
【0031】
-ゲーム進行部561-
ゲーム進行部561は、ユーザ(ここではゲームのプレイヤ)の操作に応じて、仮想空間内でプレイヤキャラクタを動作させる。ゲーム進行部561は、ノンプレイヤキャラクタや所定のオブジェクト(例えば乗り物など)も仮想空間内で動作させる。
【0032】
ゲーム進行部561は、例えばAI(artificial intelligence)によってノンプレイヤキャラクタや所定のオブジェクトの動作を制御する。ゲーム進行部561は、プレイヤキャラクタやノンプレイヤキャラクタの動作に応じて、ゲームを進行させる。
【0033】
-算出部562-
算出部562は、ゲーム中に、リアルタイムで仮想空間内の所定範囲(以下、算出範囲という)において遮蔽率を求める(算出ステップ)。遮蔽率は、仮想空間内のオブジェクトが、仮想空間内における仮想の風を、遮蔽する程度を示す値である。遮蔽率の算出法は後述する。
【0034】
算出部562は、プレイヤキャラクタの移動に応じて、算出範囲を移動させながら遮蔽率を求める。算出範囲は、ディスプレイ61に表示されている仮想空間の範囲(以下、表示範囲)内に定めることが考えられる。
【0035】
算出部562は、算出範囲の一部を表示範囲内のオブジェクトの形状に基づいて定める。このようなオブジェクトとしては、仮想空間内に配置されている建造物(家屋、塀など)、仮想空間内に設定されている地形(崖、洞窟の壁など)を例示できる。
【0036】
算出部562は、算出範囲(一部)を定めるために、オブジェクトを複数の体積要素(以下、第1体積要素とする)で離散化して表す。以下では、第1体積要素をブリックと呼ぶ場合がある。
【0037】
図2は、ブリックによるオブジェクトの離散化を説明する図である。
図2では、仮想空間VS内のオブジェクトOBJが斜視図によって示されている。オブジェクトOBJは、階段状の物体である。
【0038】
図2において、破線で示されている立方体のそれぞれがブリックV1(第1体積要素)である。これらのブリックV1は、ユーザ(ここではゲームのプレイヤ)には視認できない(ディスプレイ61に表示されない)。
【0039】
図3は、
図2のオブジェクトOBJの側面図である。
図3でもブリックV1は、破線で示されている。
図2、
図3に図示された各ブリックV1には、オブジェクトOBJの一部分(部位)が包含されている。
【0040】
算出部562は、第1体積要素よりも小さな体積の体積要素(第2体積要素とする)によって、オブジェクトを離散化して表す。換言すると、算出部562は、それぞれの第1体積要素内に包含されるオブジェクトの部位を、第1体積要素よりも小さな体積の第2体積要素で離散化する。以下では、第2体積要素をセルと呼ぶ場合がある。
【0041】
図4は、セルによるオブジェクトの離散化を説明する図である。
図4は、
図2のオブジェクトOBJの側面図である。
図4では、所定のブリックV1を識別するために、参照符号に枝番を付している(例えば、V1-1、V1-2等)。
【0042】
図4においてブリックV1内に包含された立方体がセルV2(第2体積要素)である。
図4ではセルV2は、破線の正方形で表されている。これらのセルV2は、ユーザ(ここではゲームのプレイヤ)には視認できない(ディスプレイ61に表示されない)。
【0043】
算出部562は、オブジェクトを離散化している各ブリックV1について、遮蔽率を求める。具体的に、算出部562は、オブジェクトを離散化しているブリックV1に順次着目し、着目したブリックV1(第1体積要素)に含まれるセルV2(第2体積要素)の数を、そのブリックV1における遮蔽率として求めている。
【0044】
説明の便宜のため、
図4の例では、セルV2の一辺の長さは、ブリックV1の一辺の長さの1/5であるとする。この場合、ブリックV1が含み得るセルV2の最大数は、5×5×5=125である。
図4の各ブリックV1は、同図紙面の鉛直方向に最大で5個のセルを含み得る。
【0045】
例えば、ブリックV1-1では、
図4で確認できるブリックV1-1内の17個のセルV2のそれぞれの位置において、5個のセルV2が同図紙面の鉛直方向に連なっているとする。この場合、ブリックV1-1における遮蔽率は17×5=85である。
【0046】
また、ブリックV1-2では、
図4で確認できるブリックV1-2内の25個のセルV2のそれぞれの位置において、同図紙面の鉛直方向に5個のセルV2が連なっているとする。この場合、ブリックV1-2における遮蔽率は25×5=125(最大数)である。
【0047】
算出部562は、オブジェクトが存在しない領域(一例として表示範囲内の領域に限定する)についてもブリックV1を配置する。
図5は、オブジェクトが存在しない領域に配置されたブリックV1-3~V1-9を例示する図である。
【0048】
実際には、オブジェクトが存在しない領域に更に多くのブリックV1が配置されるが、
図5では図示の都合で、一部のブリックV1-3~V1-9のみを表している。なお、オブジェクトの不存在箇所へのブリックV1の配置は、ブリックV1によるオブジェクトの離散化と同時ないしは連続して行えばよい。
【0049】
算出部562は、オブジェクトが存在しない領域のブリックV1についても遮蔽率を求める。具体的には、算出部562は、オブジェクトに対応して算出された遮蔽率を用いて、オブジェクトが存在しない領域のブリックV1における遮蔽率を補完(外挿)している。
【0050】
例えば、算出部562は、何も存在しない地面などでは遮蔽率がより小さくなるようなルール(算出式)によって遮蔽率を補完する。算出部562は、地形が入り組んだ箇所では、遮蔽率が比較的大きくなるようなルールによって遮蔽率を補完する。なお、本プログラムは、例えば、補完した遮蔽率が所定値を下回ったら補間をやめるように実装してもよい。
【0051】
-決定部563-
決定部563は、仮想空間の所定箇所における新たな風の発生要否を決定する。具体的に、決定部563は、ゲーム中にリアルタイムで、各遮蔽率に対応する風発生パラメータを求める(決定ステップ)。風発生パラメータは、仮想空間の所定箇所において仮想の風を新たに発生させるか否かを示すパラメータである。
【0052】
本ゲームプログラムでは、仮想空間において「風を発生させる」とは、以下の2つを意味している。
【0053】
(1)風に関わる特性(風速、風圧など)を何らかの手法で算出すること
風に関わる特性の算出は、例えば流体シミュレーションによって実現できる。
【0054】
(2)風に関わる特性を仮想空間で利用すること
風に関わる特性の利用態様には、仮想空間における風の可視化、風よって生ずる音の再生を例示できる。
【0055】
風の可視化は、オブジェクト(キャラクタを含む)の動きを画面(ディスプレイ61)に表示することによって実現できる。例えば、キャラクタの髪の毛の揺れ、樹木の枝や葉の揺れ、草の揺れ、吹雪の様子、霧の流れ等をディスプレイ61に表示することによって風を可視化できる。風よって生ずる音の再生は、風切音、吹雪の風、樹木の葉が揺れる音の再生を例示できる。
【0056】
決定部563は、風発生パラメータを求めるために、遮蔽率と閾値を比較する。決定部563は、遮蔽率が閾値以下の場合に風を発生させることを意味する風発生パラメータを生成する。決定部563は、遮蔽率が閾値よりも大きい場合には、風を発生させないことを意味する風発生パラメータを生成する。
【0057】
この閾値は、ゲームプログラムの開発者が任意に定めてよい。また、閾値は、ゲームプログラムの動作中に動的に変化させてもよい。
【0058】
決定部563は、風発生パラメータを半導体メモリに保存する。半導体メモリに保存される風発生パラメータは、ブリックV1を特定する情報(例えばブリックV1のID番号)をクエリに用いて検索できるようにデータ形式が定められている。
【0059】
-風発生部564-
風発生部564は、仮想空間において風を発生させる。具体的に、風発生部564は、ゲームの実行中に、プレイヤキャラクタの移動(換言すると算出範囲の移動)に応じて、算出範囲について流体シミュレーションを行なう。つまり、風発生部564は、風に関わる特性を算出する。
【0060】
風発生部564は、流体シミュレーションの実施に際して、流体シミュレーション用パラメータを設定する。流体シミュレーション用パラメータとしては、仮想空間全体に吹く風(広域風)を規定する条件、仮想空間に満たされた仮想の気体の物性値、圧力値等を例示できる。仮想の気体の物性値としては、例えば空気の物性値を採用することができる。
【0061】
風発生部564は、それぞれの第1体積要素V1に対応した風発生パラメータに基づいて、仮想空間に満たされた仮想の気体について流体シミュレーションを実施する(風発生ステップ)。
【0062】
まず、風発生部564は、流体シミュレーション用パラメータの設定に際して、ブリックV1毎に対応する風発生パラメータを確認する。風発生部564は、確認した風発生パラメータに応じて、以下のように流体シミュレーション用パラメータを設定する。
【0063】
(1)風発生パラメータが風を発生させることを意味している場合
風発生部564は、風発生パラメータが対応するブリックV1の位置(以下、着目位置)において新たな風が発生するように、流体シミュレーション用パラメータを設定する。
【0064】
(2)風発生パラメータが風を発生さないことを意味している場合
風発生部564は、着目位置において新たな風が発生しないように、流体シミュレーション用パラメータを設定する。
【0065】
なお、流体シミュレーションにおいて「風が発生する」とは、算出された風に関わる特性が風の存在を意味することである。例えば、風速が所定値以上の場合に「風が発生する」と言ってよい。また、流体シミュレーションの結果において「風が発生しない」とは、算出された風に関わる特性が風の不存在を意味することである。例えば、風速が所定値よりも小さい場合に「風が発生しない」と言ってよい。
【0066】
風発生部564は、設定した流体シミュレーション用パラメータを用いて、仮想の気体についての流体シミュレーションを行なう。その結果として、仮想空間VS内における風に関わる特性(例えば、風速)が算出される。風発生部564は、流体シミュレーションの結果を表示部565および音響処理部566に出力する。
【0067】
-表示部565-
表示部565は、流体シミュレーション結果に応じて、仮想空間における風の可視化を行なう。換言すると、表示部565は、仮想空間において風を発生させる。例えば、表示部565は、流体シミュレーション結果(例えば風速)に応じて、プレイヤキャラクタの髪の毛がなびいたり、草原の草や樹木の葉が揺れたりする動画像データ(ゲーム画像情報)を生成する。
【0068】
表示部565は、生成した動画像データをグラフィック処理部52に出力する。グラフィック処理部52は、動画像データを動画形式でディスプレイ61に描画する。
【0069】
-音響処理部566-
このゲームプログラムでは、種々の音声データが予め用意されている。音響処理部566は、ゲームの進行に応じて、音声データを再生する。具体的に音響処理部566は、ゲームの進行に応じて音声データを選択し、選択した音声データをオーディオ処理部53に出力する。
【0070】
音響処理部566は、音声データを出力する際に、オーディオ処理部53に、その音量を指示する。オーディオ処理部53は、音響処理部566が出力した音声データを、指示された音量のアナログ信号に変換し、スピーカ62に出力する。
【0071】
音響処理部566は、音声の再生において音像定位を行う。音響処理部566は、音像定位を行うために、音声が聴取される仮想の受音点(以下、仮想マイクL)を仮想空間に設定する。この例では仮想マイクLは、プレイヤキャラクタの近傍に設定されている。仮想マイクLは、指向性を有する。仮想マイクLは、プレイヤキャラクタの移動にともなって移動する。仮想マイクLの方向は、仮想カメラCの方向と連動している。
【0072】
このゲームプログラムでは、仮想空間内に存在する仮想音源から音声が発せられたように、音響的な演出が行われる。音響処理部566は、仮想の音源(プレイヤキャラクタが所持する武器など)から発せられた音声を、あたかも仮想マイクLで集音したかのような音響表現で、スピーカ62に出力する。仮想マイクLは、仮想の聴取者であり、音響処理部566による音像定位の基準点である。
【0073】
音響処理部566は、流体シミュレーション結果に応じて、仮想空間における風を音響効果によって表現する。換言すると、音響処理部566は、仮想空間において風を発生させる。例えば、音響処理部566は、流体シミュレーションによって算出された風速、風向に応じて、風切音、樹木の葉が揺れる音等を表す音声データを生成する。
【0074】
音響処理部566は、風速に応じて、、音響処理の内容を変更する。例えば、音響処理部566は、風速に応じて、風にかかる音の音量を制御する。
【0075】
音響処理部566は、風向と仮想マイクLの向き(仮想カメラCの向き)との関係に応じて、音響処理の内容を変更する。例えば、仮想マイクLの位置において、仮想マイクLの後方からその前方に向かって風が吹くことが、シミュレーションによって算出されたとする。換言すると、仮想カメラCの後方からその前方に向かって風が吹くことになる。
【0076】
この場合、音響処理部566は、風の音が、こもった音として聞こえるように処理を行なう。具体的には、音響処理部566は、風の音声データをローパスフィルターで処理する。
【0077】
例えば、仮想マイクLの位置において、仮想マイクLの右側から左側に向かって風が吹くことが、シミュレーションによって算出されたとする。この場合、音響処理部566は、左側の音(左側のスピーカ62の音)は、右側の音(右側のスピーカ62の音)よりも音量を下げる。
【0078】
その他にも、音響処理部566は、シミュレーション結果(風速、風向)に応じて、風にかかる音のピッチを変更する場合もある。
【0079】
音響処理部566は、生成した音声データをオーディオ処理部53に出力する。オーディオ処理部53は、音響処理部566が出力した音声データをアナログ信号に変換し、スピーカ62に出力する。
【0080】
《動作例》
ゲームが開始されると、ゲーム進行部561は、ユーザ(ここではゲームのプレイヤ)のコントローラ63の操作に応じて、プレイヤキャラクタを仮想空間VS内で動作させる。ゲーム進行部561は、必要に応じてノンプレイヤキャラクタ等のオブジェクトも仮想空間内で動作させる。
【0081】
算出部562は、例えば、仮想空間VSの表示範囲について、ブリックV1およびセルV2を配置する。算出部562は、それぞれのブリックV1について、遮蔽率を計算する。
【0082】
決定部563は、算出部562が計算した遮蔽率に対応する風発生パラメータを求める。決定部563は、算出した風発生パラメータを半導体メモリに保存する。
【0083】
風発生部564は、算出された風発生パラメータに基づいて、流体シミュレーション用パラメータを設定する。風発生部564は、設定した流体シミュレーション用パラメータに基づいて、流体シミュレーションを実施する。風発生部564は、流体シミュレーションの結果を表示部565、音響処理部566に出力する。
【0084】
表示部565は、流体シミュレーションの結果に応じて、例えば、草原の草や樹木の葉が揺れる動画像データ(ゲーム画像情報)を生成する。表示部565は、生成した動画像データをグラフィック処理部52に出力する。これにより、ディスプレイ61には、風で揺れる草や葉が表示される。
【0085】
音響処理部566は、流体シミュレーションによって算出された風速、風向に応じて、例えば樹木の葉が揺れる音を表す音声データを生成する。音響処理部566は、生成した音声データをオーディオ処理部53に出力する。これにより、スピーカ62からは、風で揺れる葉の音が再生される。
【0086】
このゲームプログラムではシミュレーション結果を利用して音声の再生が行なわれるので、その音声と動画像はリンクしている。換言すると、画像の動きと音声との違和感がない。
【0087】
以上をまとめると、本件態様は、コンピュータ(制御部56)を、仮想空間内のオブジェクトが前記仮想空間内における仮想の風を遮蔽する程度である遮蔽率を、前記仮想空間内の所定範囲において求める算出部562と、前記遮蔽率が算出された前記所定範囲について、前記遮蔽率に基づいて、前記仮想の風を新たに発生させるか否かを示す風発生パラメータを求める決定部563と、前記風発生パラメータに基づいて、前記仮想空間における風のシミュレーションを実施する風発生部564として機能させるプログラムである。
【0088】
《本実施形態の効果》
本プログラムでは、遮蔽率という概念を導入している。遮蔽率は、ゲーム中(ゲームプログラムの実行中)にリアルタイムに算出される。遮蔽率は、仮想空間の所定箇所における仮想の風を、遮蔽する程度を示している。本プログラムでは、遮蔽率が閾値よりも大きい箇所(風を遮蔽しやすい箇所)では新たな風を発生させない。本プログラムでは、遮蔽率が閾値よりも小さい箇所では新たな風を発生させる。
【0089】
遮蔽率という概念を導入したことによって、本プログラムでは、仮想空間において、自然な風の演出ができる。例えば、本プログラムでは、遮蔽率に応じて風を発生させることによって、壁から不自然な風が発生するのを抑制できる。本プログラムでは、遮蔽率に応じて風を発生させることによって、複雑な地形における風(例えば隙間風)が広域風によって消失(上書き)しないようにできる。本プログラムでは、遮蔽率と比較する閾値を調整すれば、所定範囲における風を強調することができる。
【0090】
また、本プログラムでは、音声と動画像とがリンクする。そのため、本プログラムでは、画像の動きと音声との違和感がない。
【0091】
以上の通り、本プログラムでは、仮想空間において、自然な風の演出をリアルタイムに行なうことができる。
【0092】
風の演出をリアルタイムに行えると、風を表現するデータ(風速、風向など)を事前に準備してユーザに配布する必要がない。換言すると、本プログラムでは、ユーザに配布するデータ容量が少なくて済む。
【0093】
[その他の実施形態]
仮想空間の用途は、ゲームには限定されない。仮想空間の管理者(本プログラムのユーザと言ってよい)は、仮想空間を介して種々のサービス(例えばいわゆるメタバースとしての利用)の提供等を行なうことができる。
【0094】
本プログラムの仕組み(新たな風発生要否を決定する仕組み)の用途は、仮想空間のユーザ(ここでは仮想空間でサービスを受ける者)が使用するプログラム(例えばゲームプログラム)には限定されない。例えば、本プログラムの仕組みは、ゲーム開発時に使用するゲーム開発ツールとして利用できる。
【0095】
ゲーム開発ツールにおいては、本プログラムのユーザである開発者(プログラマ、アーティスト等)は、風に関する事前準備の作業が容易になる。事前準備とは、例えば、風を表現するデータの準備、流体シミュレーションの実施等である。事前準備が容易になれば、開発工程の繰り返し(いわゆるイテレーション)に要するコストを削減することが可能になる。
【0096】
ブリックやセルは、本プログラムの用途によっては可視化してもよい。例えば、ゲーム開発ツールとして本プログラムを実装する場合は、ブリック、セルを可視化することでユーザ(アーティスト等)の利便性が向上する。
【0097】
遮蔽率の算出範囲は、上述した表示範囲には限定されない。表示範囲をある程度拡張した領域を算出範囲としてもよいし、表示範囲よりも狭い範囲を算出範囲としてもよい。また、ディスプレイ61に表示されていない領域(例えばプレイヤキャラクタの移動先として想定される領域)を算出範囲として設定してもよい。
【0098】
ゲーム開発ツールにおいては、遮蔽率ないし風発生パラメータは、アーティスト等が手動で仮想空間に埋め込めるようにしてもよい。アーティスト等が、コンピュータ(制御部56)が算出した遮蔽率にバイアスを付与できる仕組みを設けてもよい。
【0099】
実施形態で説明した遮蔽率の算出法は、例示である。例えば、第1体積要素が含み得る第2体積要素の最大数と、実際に第1体積要素V1に含まれている第2体積要素V2の数との比率を遮蔽率としてもよい。
【0100】
遮蔽率の値とその意味(風発生の要否)との対応関係は、例示である。例えば、前記実施形態とは逆に、遮蔽率が閾値よりも大きい場合に新たに風を発生させ、遮蔽率が閾値よりも小さい場合に新たに風を発生させないように、遮蔽率の算出法を定義してもよい。そのような定義としては、例えば、第1体積要素V1に含まれている第2体積要素V2の数の逆数を遮蔽率とすることが考えられる。
【0101】
本プログラムによる処理は、ユーザ用装置(例えばゲーム装置5)が接続されたサーバ装置で行ってもよいし、ユーザ用装置とサーバ装置とで分担してもよい。この形態は、オンラインゲーム用のゲームプログラムや、上述のメタバース用のプログラムとして本プログラムを実装する場合に想定される形態である。
【0102】
音声データは、必ずしも予め用意しておく必要はない。何らかのデータ(例えばノイズ)、ないしは情報を基に、その都度、合成したり生成したりしてもよい。
【0103】
これらの他の実施形態を採用した場合においても、本態様の作用効果は発揮される。また、本実施形態と他の実施形態、および他の実施形態同士を適宜組み合わせることも可能である。
【符号の説明】
【0104】
5 ゲーム装置(仮想空間生成装置)
55 記憶部
56 制御部(コンピュータ)
561 ゲーム進行部
562 算出部
563 決定部
564 風発生部
566 音響処理部
OBJ オブジェクト
V1 ブリック(第1体積要素)
V2 セル(第2体積要素)
VS 仮想空間