IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社カプコンの特許一覧

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