(57)【特許請求の範囲】
【請求項１】
オブジェクトの位置に応じて、所定の視点位置からの背景画像を生成する背景画像生成手段と、
ＧＰＵ側に設けられ，前記オブジェクト上の水量シミュレーションを行う対象領域の水量分布を画像データのピクセル単位で水量と速度を対応付けて示す水量マップと、
前記対象領域に加わる合力を求める合力計算手段と、
前記水量マップに新規水滴に応じた水量を追加する新規水滴追加手段と、
ＧＰＵ側に設けられ，前記合力計算手段が求めた合力に応じて前記水量マップ内の隣接ピクセル間の流入量・流出量を求めることにより水量シミュレーションを実行する水量シミュレーション手段と、
前記水量マップを前記視点位置からの画像に透視変換する透視変換手段と、
前記背景画像中の画素の値を当該画素の周囲の画素の値と平均化して平均化画像を生成する平均化手段と、
前記透視変換された水量マップに応じて前記背景画像と前記平均化画像を合成する合成手段と
を備えることを特徴とするシミュレーション装置。
【請求項２】
前記水量マップは、前記水量を前記画像データのＢチャネルのデータとし、前記速度を前記画像データのＲチャネルとＧチャネルのデータとしたことを特徴とする請求項１記載のシミュレーション装置。
【請求項３】
前記オブジェクトの移動シミュレーションを行う移動シミュレーション手段を備え、
前記合力計算手段は、前記移動シミュレーション手段による移動シミュレーションの結果に応じて前記対象領域に加わる合力を求めることを特徴とする請求項１又は請求項２記載のシミュレーション装置。
【請求項４】
前記対象領域上を移動するワイパの位置を求めるワイパ位置計算手段を備え、
前記水量シミュレーション手段は、前記ワイパの位置に応じて水量シミュレーションを実行することを特徴とする請求項１乃至請求項３のいずれかに記載のシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、自動車の運転シミュレーション等のシミュレーションを行うシミュレーション装置に関する。
【背景技術】
【０００２】
自動車の運転シミュレーション等のシミュレーションを行うシミュレーション装置が知られている（例えば特許文献１乃至特許文献４参照。）。このような運転シミュレーションでは、トレーニング効果向上等を目的として雨天等の視界が悪い状態でのリアルな視覚表現が求められる場合がある。
【特許文献１】特許第３８４１２１０号公報（図１）
【特許文献２】特許第３７５２０８１号公報（図１）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、自動車のフロントウィンドウ上の雨滴による視界の悪化をリアルに表現するためには、フロントウィンドウ上の雨滴の流れをシミュレーションによって計算する必要があり、ＣＰＵ側で処理するには負荷が重かった。
【０００４】
本発明は、上述のような課題に鑑みてなされたものであり、処理負荷をそれ程増加させないで、雨滴による視界の悪化をリアルに表現することができるシミュレーション装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明に係るシミュレーション装置は、オブジェクトの位置に応じて、所定の視点位置からの背景画像を生成する背景画像生成手段と、ＧＰＵ側に設けられ，オブジェクト上の水量シミュレーションを行う対象領域の水量分布を画像データのピクセル単位で水量と速度を対応付けて示す水量マップと、対象領域に加わる合力を求める合力計算手段と、水量マップに新規水滴に応じた水量を追加する新規水滴追加手段と、ＧＰＵ側に設けられ，合力計算手段が求めた合力に応じて水量マップ内の隣接ピクセル間の流入量・流出量を求めることにより水量シミュレーションを実行する水量シミュレーション手段と、水量マップを視点位置からの画像に透視変換する透視変換手段と、背景画像中の画素の値を当該画素の周囲の画素の値と平均化して平均化画像を生成する平均化手段と、透視変換された水量マップに応じて背景画像と平均化画像を合成する合成手段とを備えることを特徴とする。
【発明の効果】
【０００６】
本発明に係るシミュレーション装置では、合力計算手段が、対象領域に加わる合力を求め、水量シミュレーション手段が、合力計算手段が求めた合力に応じて水量マップ内の水量シミュレーションを実行し、透視変換手段が、水量マップを視点位置からの画像に透視変換し、平均化手段が背景画像中の画素の値を当該画素の周囲の画素の値と平均化して平均化画像を生成し、合成手段が透視変換された水量マップに応じて背景画像と平均化画像
を合成することにより、処理負荷をそれ程増加させないで、雨滴による視界の悪化をリアルに表現することができる。また、水量シミュレーション手段をＧＰＵ側に実装することにより、ＣＰＵ側の処理負荷の増加を抑制することができる。
【発明を実施するための最良の形態】
【０００７】
本発明は、例えば自動車のドライビングシミュレーションを行うシミュレーション装置等に適用することができる。
【実施例１】
【０００８】
（全体構成）
図１は、本発明を適用した一実施形態に係るシミュレーション装置の構成を概念的に示すブロック図である。このシミュレーション装置は、例えばＣＰＵ１００，メインメモリ２００，ＧＰＵ３００，表示装置４００，プレーヤの指示を入力するハンドル，アクセルペダル，ブレーキペダル等の入力部５００，外部記憶装置等を備えるパーソナルコンピュータ等で構成することができる。ＣＰＵ１００は、制御プログラムを実行することにより、プレーヤから入力部５００を介して入力される指示等に応じてドライブシミュレーションを実行するドライブシミュレータ部１１０として機能する。
【０００９】
ドライブシミュレータ部１１０は、入力部５００を介して入力されるプレーヤの指示に応じて自車のコースモデルデータ２５０上の位置，速度，向き等を管理して走行させ、他の車（ＡＩ車）のコースモデルデータ２５０上の位置，向き，速度，ワイパの回転角度等を管理して自動的に走行させ、自車の運転席に相当する視点位置からの（背景画像）をＧＰＵ３００に生成させる処理を行う。このドライブシミュレータ部１１０は、入力部５０
０からの入力に応じて自車の位置，向き，速度，ワイパ回転角度等の更新処理を行う自車状態更新部１１１と、コースデータ２１０の定義に従ってＡＩ車の位置，向き，速度等の更新処理を行うＡＩ車状態更新部１１２と、自車，ＡＩ車の位置等に応じた画像表示用の変換行列を生成する変換行列生成部１１３と、ＧＰＵ３００に描画命令等を供給する描画命令発行部１１４と、雨量，風力，視界の明るさ、天候等の環境情報を更新する環境情報更新部１１６と、環境情報更新部１１６からの環境情報に応じて新規水滴の位置を生成する新規水滴位置生成部１１７と、環境情報更新部１１６からの環境情報に応じて自車のフロントウィンドウ部分にかかる外力の合力を求める合力ベクトル計算部１１８とを備えている。
【００１０】
また、メインメモリ２００には、ＡＩ車の位置，向き，速度等の状態の制御に用いるコースデータ２１０と、自車の位置，向き，速度，ワイパ回転角度等の状態を示すデータ（自車状態）２２０と、ＡＩ車の位置，向き，速度等の状態を示すデータ（ＡＩ車状態）２３０と、自車，ＡＩ車の３次元形状，テクスチャ等のデータ（車データ）２４０と、走行路，建物等の３次元形状，テクスチャ等のデータ（コースモデルデータ）２５０等が格納される。
【００１１】
このＧＰＵ３００は、例えばＤｉｒｅｔＸ（商標）９．０に準拠しており、ＨＬＳＬ（Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ）言語で記述されたプログラムを実行することができるようになっている。このＧＰＵ３００は、コースモデルデータ２５０と車データ２４０等の３次元形状を構成するポリゴンの頂点座標の計算を行う頂点シェーダ，各ポリゴン内の画素の値を計算するピクセルシェーダ，ＣＰＵ１００側から供給されるプログラムに応じた動作を行うプログラマブルシェーダ，メモリ３５０，これらの動作を制御するコントローラ等を備えており、ＣＰＵ１００側から供給されるプログラムを実行することにより、パラメータ記憶部３１０，背景画像生成部３２０，水滴マップ更新部３３０，画像合成部３４０等として機能する。
【００１２】
（ＧＰＵ３００詳細）
ＧＰＵ３００側のパラメータ記憶部３１０，背景画像生成部３２０，水滴マップ更新部３３０，画像合成部３４０は、さらに詳細には、例えば図２に示すように構成されている。また、メモリ３５０には、ＣＰＵ１００側から供給されたコースモデルデータ２５０，自車及びＡＩ車の車データ２４０等の３Ｄデータ（形状データ）３５１，テクスチャデータ３５２，新規水滴テクスチャ３５４等が格納される。また、メモリ３５０には、背景画像生成部３２０，水滴マップ更新部３３０の動作に応じて背景画像３５３，新規水滴マップ３５５，水滴マップ３５６，最終画像３５７等のデータも格納される。
【００１３】
パラメータ記憶部３１０には、ＣＰＵ１００側のドライブシミュレータ部１１０から供給されたオブジェクト位置３１１，新規水滴位置３１２，合力ベクトル３１３，左右のワイパの回転角度（ワイパ角度）３１４が格納される。これらのパラメータ（オブジェクト位置３１１〜ワイパ角度３１４）は、表示装置４００に表示する画像の更新頻度（フレーム、例えば６０分の１秒）毎に、ドライブシミュレータ部１１０が更新し、パラメータ記憶部３１０に供給する。
【００１４】
オブジェクト位置３１１は、例えば図３に示すように、コースモデルデータ２５０，自車及びＡＩ車の車データ２４０等のオブジェクトを各々のローカル座標から例えば自車の運転席に相当する視点位置を基準とする視点座標（スクリーン座標）に変換するための変換行列であり、各々のオブジェクト毎にドライブシミュレータ部１１０の変換行列生成部１１３から供給される。また、新規水滴位置３１２は、新規水滴の（後述のフロントウィンドウ座標系上の）位置を示す情報であり、新規水滴位置生成部１１７が環境情報更新部１１６からの環境情報に応じて生成し、パラメータ記憶部３１０に供給する。また、合力ベクトル（及び定数κ）３１３は、フロントウィンドウ部分にかかる外力の合力を示す（ベクトル）情報であり、合力ベクトル計算部１１８が環境情報更新部１１６からの環境情報に応じて生成し、パラメータ記憶部３１０に供給する。また、ワイパ角度３１４は、自車の左右のワイパの回転角度を示す情報（ω１，ω２）であり、自車状態更新部１１１が生成し、パラメータ記憶部３１０に供給する。
【００１５】
背景画像生成部３２０は、雨の効果がない（水滴マップに応じたピンボケ効果がかかっていない）状態の背景画像の生成を行う。この背景画像生成部３２０は、透視変換により各オブジェクトを構成するポリゴンの頂点の位置を求める頂点処理部３２１と、透視変換した各ポリゴン中の画素（ピクセル）の色を求めるピクセル処理部３２２とを備えている。
【００１６】
水滴マップ更新部３３０は、新規水滴マップ３５５中の新規水滴位置３１２に新規水滴テクスチャ３５４の画像を追加する新規水滴描画部３３１と、水滴マップ３５６に新規水滴マップ３５５を加算する水滴マップ加算部３３２と、水滴マップ３５６の更新処理を行う水滴マップ更新部３３３とを備えている。
【００１７】
画像合成部３４０は、背景画像３５３内の所定のサンプリングエリア内の画素の平均値を求めて平均化画像を求めるエリア平均色計算部３４１と、水滴マップ３５６に応じて背景画像３５３と平均化画像を合成するピクセル最終色計算部３４２とを備えている。また、画像出力部３７０は、最終的に合成された最終画像３５７を表示装置４００に表示させる。
【００１８】
（動作概要）
上述のように構成されたシミュレーション装置では、表示装置４００に表示する画像の１フレーム（例えば６０分の１秒）毎に以下の処理を実行する。
（Ａ）ドライブシミュレータ部１１０が、入力部５００からの入力等に応じて、自車、ＡＩ車の位置・向き・速度等を更新する。
（Ｂ）背景画像生成部３２０が、自車の運転席に相当する視点位置からの背景画像３５３を生成する。
（Ｃ）水滴マップ更新部３３０が水滴シミュレーションを実行して水滴マップ３５６を更新する。
（Ｄ）画像合成部３４０が背景画像３５３から平均化画像３６０を生成し、透視変換した水滴マップ３５６に応じて背景画像３５３と平均化画像３６０を合成して最終画像３５７を生成し、画像出力部３７０が表示装置４００に表示させる。
【００１９】
（ＣＰＵ側詳細動作：０．初期化）
ドライブシミュレータ部１１０は、プレーヤの指示等に応じてシミュレーションを開始すると、自車の初期位置等が定義された設定ファイルを読み込み、ドライブシミュレータ部１１０の初期化を行う。この後、ドライブシミュレータ部１１０は、初期状態の水滴マップ３５６と新規水滴マップ３５５を作成し、ＧＰＵ３００の水滴マップ更新部３３０に供給する（厳密にはＧＰＵ３００側のメモリ３５０に転送する）。これらの新規水滴マップ３５５と水滴マップ３５６は、例えば各々８ビットのＲＧＢＡの４つのチャネルのテクスチャデータとして生成されている。また、ドライブシミュレータ部１１０は、車データ２４０，コースモデルデータ２５０等の頂点座標等を３Ｄデータ３５１としてＧＰＵ３００側のメモリ３５０に供給し、車データ２４０，コースモデルデータ２５０等のテクスチャをテクスチャデータ３５２としてＧＰＵ３００側のメモリ３５０に供給する。また、環境情報更新部１１６は、視界の明るさ、天候等の環境情報をＧＰＵ３００側の背景画像生成部３２０に供給する。
【００２０】
（ＣＰＵ側詳細動作：Ａ−１．各オブジェクトの状態の更新）
ドライブシミュレータ部１１０は、フレーム毎に、各オブジェクト（自車，ＡＩ車等）の位置を更新する。自車状態更新部１１１は、入力部５００からの入力に応じて自車の位置，向き，速度，ワイパ回転角度等を更新する。コースデータ２１０には、例えば図４に示すように、各ＡＩ車の各時刻毎の位置，向き等を示すデータ（ＡＩ車ルート設定２１１等）が定義されている。ＡＩ車状態更新部１１２は、現在の時刻Ｔｃに対応する各ＡＩ車の位置と向きをＡＩ車ルート設定２１１から取得し、ＡＩ車の位置，向き，速度等を更新してＡＩ車状態２３０に格納する。これにより、例えば図５に示すように、当該フレームにおける各オブジェクトの配置が決まる。なお、現在の時刻Ｔｃは、シミュレーション開始時刻からの経過時間を示す値で、ドライブシミュレータ部１１０が、シミュレーション開始時間Ｔｓを記録しておき、フレーム毎に現在時刻Ｔを取得し、Ｔｃ＝Ｔ−Ｔｓで開始からの経過時間を得ている。
【００２１】
また、ワイパは、回転軸を中心とした回転角度で制御される。回転軸の位置は定数（２次元座標）であるので、フレーム毎には更新しない。ワイパ角度は、ドライブシミュレータ部１１０が、フレーム毎に更新するが、具体的には、現在のワイパの回転角度をωとし、フレーム更新分の時間当たりに回転する角度（回転速度）をΔω，ワイパＯＦＦの状態（ワイパ収納状態）での角度をωｓ，ワイパＯＮ時の最大回転角度をωｍａｘ，現在の回転方向をブール変数Ｄｉｒ（Ｄｉｒ＝１の場合は反時計回り、Ｄｉｒ＝０の場合は時計回り）として以下の処理を行う。
Ｄｉｒ  ＝  １の場合：
１．  ω＝ω＋Δω  とする。
２．  １．の結果、ω＞ωｍａｘになった場合には、Ｄｉｒ＝０  とする。
Ｄｉｒ  ＝  ０の場合：
１．  ω＝ω−Δω  とする。
２．  １．の結果、ω＜ωｓになった場合には、Ｄｉｒ＝１  とする。
ドライブシミュレータ部１１０は、このような処理を、一方のワイパ角度をω＝ω１とし、他方のワイパ角度をω＝ω２として、両方のワイパについて実行する。
【００２２】
具体的には、このシミュレーション装置では、プレーヤは、入力部５００のハンドル，アクセルペダル，ブレーキペダル等を操作してシミュレーションを行う。ハンドルの切り角，ペダルの踏み込み量等が入力部５００によってデータ化されてドライブシミュレータ部１１０に入力される。自車状態更新部１１１は、入力デバイス５００からの入力に応じて、現在の自車の位置等を示すデータ（自車状態２２０）を更新する。具体的には、自車状態更新部１１１は、フレーム（フレーム更新間隔：Δｔ）毎に、例えば以下のような処理を実行して自車状態２２０を更新する。
１．プレーヤがアクセルをΔＡ  （ｃｍ）深く踏んた場合には、
自車の加速度ベクトル（Ａ）を  Ａ＝Ａ＋ΔＡ×ｐ  とし、
自車の速度ベクトル（Ｖ）を    Ｖ＝Ｖ＋Ａ  とする。
なお、ｐは入力デバイスからの入力量と加速度への追加分の比例係数である。
２．プレーヤがハンドルをΔｗ（角度）回した場合には、
ハンドルの切り角（θｓ）を  θｓ＝θｓ＋Δｗ  とする。
３．プレーヤが何もしていない場合には、現在の速度で走り続けるように、
自車の位置（Ｐを）  Ｐ＝Ｐ＋Ｖ×Δｔ  とする。
【００２３】
また、自車状態更新部１１１は、現在のワイパの回転モードに従って、自車のワイパの回転角度を更新（回転角度増大もしくは縮小）し、自車状態２２０を更新する。自車状態２２０には、例えば自車の位置Ｐ（ｘ，ｙ，ｚ），自車の姿勢Ｒ（ｙａｗ，  ｐｉｔｃｈ，  ｒｏｌｌ），自車の速度ベクトルＶ（Ｖｘ，  Ｖｙ，  Ｖｚ），自車の加速度ベクトルＡ（Ａｘ，  Ａｙ，  Ａｚ），ハンドルの切り角（θｓ），自車のワイパの回転角度（左右、ω１，ω２）等が含まれる。
【００２４】
ＡＩ車状態更新部１１２は、予め設定しておいた走行ルート，走行状況に基づく反応等の定義情報に応じて、各ＡＩ車の位置等を示すデータ（ＡＩ車状態２３０）を更新する。ＡＩ車状態２３０には、例えば各ＡＩ車の位置Ｐ（ｘ，ｙ，ｚ），各ＡＩ車の姿勢Ｒ（ｙａｗ，  ｐｉｔｃｈ，  ｒｏｌｌ），各ＡＩ車の速度ベクトルＶ（Ｖｘ，  Ｖｙ，  Ｖｚ），各ＡＩ車の加速度ベクトルＡ（Ａｘ，  Ａｙ，  Ａｚ）等が含まれる。
【００２５】
ＧＰＵ３００側の背景画像生成部３２０でのオブジェクトの描画は、上述の図３に示すような各オブジェクト毎の変換行列に応じて行われる。この変換行列は、上述のように、各オブジェクトを各々のローカル座標から視点位置を基準とするスクリーン座標に変換するための変換行列である。このため、変換行列生成部１１３は、自車状態２２０中の自車の位置及び姿勢とＡＩ車状態２３０中のＡＩ車の位置及び姿勢から各オブジェクトの変換行列を生成する。この変換行列は、次式のように、各オブジェクトの位置に応じた移動行列に、各オブジェクトの向きに応じた回転行列（ｘ，ｙ，ｚ軸方向の回転行列の積）をかけたものである。
【式１】
【００２６】
0005067935.tif 000002
【００２７】
このように変換行列を生成すると、変換行列生成部１１３は、各オブジェクトの変換行列を、ＧＰＵ３００側のパラメータ記憶部３１０にオブジェクト位置３１１として転送する。これらの変換行列は、背景画像生成部３２０における背景画像の生成に使用される。なお、自車状態更新部１１１は、自車のワイパについても、動作モード等に応じた位置，回転角度を生成し、自車状態２２０に格納する。変換行列生成部１１３は、他のオブジェクトと同様に、自車のワイパの位置及び回転角度に応じた変換行列を生成し、パラメータ記憶部３１０にオブジェクト位置３１１として転送する。
【００２８】
（ＣＰＵ側詳細動作：Ａ−２．環境パラメータの更新）
一方、環境情報更新部１１６は、予め設定しておいた定義情報（コースデータ２１０）に応じて、雨量（ｎ個の新規水滴），風力のベクトル，視界の明るさ，天候等の環境パラメータを更新する。
【００２９】
このシミュレーション装置では、例えば図６に示すように、運転席に相当する視点位置から見える領域内の自車のフロントガラス上の水量を示す水滴マップ３５６を設定し、水滴マップ更新部３３０において水滴マップ３５６上の水滴のシミュレーションを行っている。この水滴シミュレーションは、フロントガラスを平面とみなし、フロントガラス平面上のフロントガラス座標系で示される位置の水量をシミュレーションするものである。
【００３０】
上述の図４に示すように、コースデータ２１０中では雨量設定２１２として例えば時刻毎の雨量（新規水滴の数）が設定されている。環境情報更新部１１６は、この雨量設定２１２に応じて、現在の時刻に対応する雨量の設定を更新する。なお、フレーム毎のパラメータ更新は、コースデータ２１０中の定義より短い間隔で行われるので、線形補間によって現在の時刻の雨量を設定するようにしてもよい。例えば、上述の図４中の雨量設定２１２では、第３０秒と第４０秒の間の３５秒においてパラメータ更新が行われると、環境情報更新部１１６は、雨量を１５０に設定する。他のパラメータも同様に更新される。雨量の設定が更新されると、新規水滴位置生成部１１７は、更新された雨量に従って、ｎ個分の新規水滴の位置（フロントガラス座標系）を生成する。この新規水滴の位置の生成は、水滴マップ３５６内の位置となるように、乱数を使って行う。ある新規水滴の座標をＰｎｅｗとすると、
Ｐｎｅｗ＝（Ｐｘ，Ｐｙ）＝（ｒａｎｄｏｍ  ｍｏｄ  Ｗ  ，ｒａｎｄｏｍ  ｍｏｄ  Ｈ）となる。
ここで、ｒａｎｄｏｍは乱数を返す関数，ｍｏｄは余りを求める操作，Ｗ，Ｈはそれぞれフロントガラスにおける水滴シミュレーションを行う領域（例えば図７に示す水滴マップ３５６に相当する領域）の長さ，幅である。
同様に、新規水滴位置生成部１１７は、ｎ個の新規水滴座標を生成し、ＧＰＵ３００のパラメータ記憶部３１０に新規水滴位置３１２として転送する。
【００３１】
また、合力ベクトル計算部１１８は、環境パラメータが更新されると、例えば図８に示すように、上述の風力ベクトル及び自車の加速度による慣性力のベクトルを合成し、これらの合力をフロントガラス座標系上の平面ベクトルに変換した値を、ＧＰＵ３００のパラメータ記憶部３１０に合力ベクトル３１３として転送する。例えば前フレームとの速度ベクトルの差分等から求める。
【式２】
【００３２】
0005067935.tif 000003
ここで、ｆｘ，ｆｙ，ｆｚは合力の自車のローカル座標系での値の各成分、Ｆｗｉｎｄはワールド座標系での風力のベクトル、Ｆｉｎはワールド座標系における慣性力、Ｆ合力はフロントガラス座標系における合力ベクトルである。また、フロントガラス座標系とは、上述の図７に示すように、自車のローカル座標系の横軸（ＸＬ軸）をフロントガラス座標系の横軸（Ｘ’、方向は逆）、縦軸（ＺＬ）をフロントガラス座標系の縦軸（Ｙ’）として、Ｘ’Ｙ’平面でフロントガラス平面を表した座標系である。
また、合力ベクトル計算部１１８は、流体の種類に応じた後述の定数値のκをパラメータ記憶部３１０に供給する。
【００３３】
上述のように、あるフレームにおける各オブジェクトの状態と環境パラメータの更新が終了すると、描画命令発行部１１４は、ＧＰＵ３００の背景画像生成部３２０に背景画面描画命令を発行し、水滴マップ更新部３３０に新規水滴の描画命令を発行する。
【００３４】
（ＧＰＵ側詳細動作：Ｂ．背景画像生成）
描画命令発行部１１４から描画命令が供給されると、背景画像生成部３２０は、雨の効果がない（流れ効果がかかっていない）の画像となる背景画像を生成する。具体的には、例えば図９に示すように、頂点処理部３２１は、コースモデルデータ２５０，自車及びＡＩ車の車データ２４０等の各オブジェクトの３Ｄデータ３５１をメモリ３５０から読み込み、各オブジェクトに対応するオブジェクト位置３１１中の変換行列を用いて各３Ｄデータ３５１中のポリゴンの各頂点の座標を、スクリーン座標系に変換する。これにより、例えば各オブジェクトが上述の図５に示すような配置であった場合には、図９中の中央の画像のように、自車の運転席の位置に相当する視点位置から見た各オブジェクトを構成する各々のポリゴンの位置が求められる。また、ピクセル処理部３２２は、メモリ３５０から各オブジェクトのテクスチャ３５２を読み込み、各ポリゴン中のピクセルの色を求める。
【００３５】
なお、ピクセル処理部３２２は、環境情報更新部１１６から供給された「視界の明るさ」及び「天候」等の環境情報に応じた処理を行う。「視界の明るさ」は、背景画像生成部３２０で生成された背景画像の明るさを補正（調節）するためのパラメータであり（Ｂとする）、背景画像のピクセルの色をＣ＝（Ｃｒ，Ｃｇ，Ｃｂ）とすると、Ｃ＝Ｃ×Ｂ＝（Ｃｒ×Ｂ，Ｃｇ×Ｂ，Ｃｂ×Ｂ）によって、Ｂの値で背景画像の明るさを調節する。例えば、雷によって一瞬外界が明るくなるときは、その時刻におけるＢを＞＞１．０にセットすればよく、また、夜の暗い場面を表現する場合は、該当時刻のＢを０．０＜Ｂ＜＜１．０にセットすれば良い。普通の昼間の場面では単に該当時刻におけるＢを１．０にセットすればよい。なお、Ｂの値の計算の仕方は本技術を使うユーザが表現したい画像によって、ユーザ側が決め、コースデータに記述すればよい。Ｂも上記のパラメータ更新の仕方に沿って更新される。
【００３６】
また「天候」は、上述の「視界の明るさ」とほぼ同じであるが、天候の色合いを補正するための値（Ｓ＝（Ｓｒ，Ｓｇ，Ｓｂ）とする）であり、背景画像のピクセルの色をＣ＝（Ｃｒ，Ｃｇ，Ｃｂ）とすると、Ｃの各成分に対する補正値となる。つまり、背景画像を、Ｃ＝（Ｃｒ×Ｓｒ，Ｃｇ×Ｓｇ，Ｃｂ×Ｓｂ）と計算して補正する。天候も上記のようにユーザによって決められ、コースデータに記述される。なにも補正する必要がない場合は、単にＳｒ＝１．０，Ｓｇ＝１．０，Ｓｂ＝１．０とすればよい。
【００３７】
ピクセル処理部３２２は、全てのピクセルに対して以上の処理を行い、背景画像３５３を生成してメモリ３５０に保存する。なお、自車のワイパについても、他のオブジェクトと同様に、３Ｄデータ３５１，テクスチャデータ３５２がドライブシミュレータ部１１０側から供給されており、他のオブジェクトと同様に、オブジェクト位置３１１に応じた位置に描画される。また、図５より複雑なオブジェクトの配置の場合の背景画像３５３は、例えば図１０に示すようになる。
【００３８】
（ＧＰＵ側詳細動作：Ｃ．水滴マップ更新）
描画命令発行部１１４から新規水滴の描画命令が供給されると、水滴マップ更新部３３０は水滴マップ３５６を更新して当該フレームの水滴マップ３５６を求める。まず、新規水滴描画部３３１は、新規水滴マップ３５５をクリアしてから、例えば図１１に示すように、新規水滴マップ３５５上の新規水滴位置３１２で指定されたｎ個の位置（ｘｉ，ｙｉ）［ｉ＝１，２，…ｎ］に、新規水滴テクスチャ３５４を追加する。これにより、新規水滴マップ３５５は、例えば図１２に示すように、ｎ個の新規水滴が追加された状態になる。なお、新規水滴テクスチャ３５４はＢチャネルだけのデータであり、各々の画素に相当する位置の水量を示している。
【００３９】
新規水滴マップ３５５の生成が終了すると、水滴マップ加算部３３２は、例えば図１３に示すように、前のフレームの水滴マップ３５６に、新規水滴マップ３５５の対応するピクセルのＢチャネルの値（水量に対応）を加算する。これにより、例えば図１４に示すように、新規水滴マップ３５５の水量が加算された水滴マップ３５６が生成される。
【００４０】
新規水滴マップ３５５の値がフレームの水滴マップ３５６に加算されると、水滴マップ更新部３３３は、合力ベクトルと定数κに応じて水滴マップ３５６の更新（流れ）を行う。水滴マップ３５６のフォーマットは、ＲＧＢＡ各チャネルに８ビットを使ったテクスチャである。水滴マップ３５６上の点（ピクセル）はフロントガラスにおける対応位置の点にある水の状態（Ｂチャネル：水量，ＲチャネルとＧチャネル：フロントガラス座標系のＸ’，Ｙ’軸方向の速度ベクトル）を示している。
【００４１】
水滴マップ更新部３３３は、例えば図１５に示すように、まず、処理対象のピクセルＰｉ，ｊの周囲のピクセル（図１５中の破線内のピクセル）から処理対象のピクセルＰｉ，ｊに流入する水量を計算して、処理対象のピクセルＰｉ，ｊの水量Ｑｉ，ｊに加算する。次に、処理対象のピクセルＰｉ，ｊから流出する水量を減算して、処理対象のピクセルＰｉ，ｊの水量Ｑｉ，ｊを求める。
【００４２】
例えば時刻ｔ−１における更新前の水滴マップの一部のピクセルの水量Ｑ及び速度ベクトルＶが、図１６に示すような状態であった場合に、同図中の中央のピクセルＰｉ，ｊの水量Ｑｉ，ｊを更新する動作について説明する。なお、κの値は、例えば水の場合の０．４５に設定する。このκの値は、他の流体（例えば海水等）の場合には適宜設定する。また、このフレームにおけるワールド座標系からフロントガラス座標系（図７及び図８）に換算した合力ベクトルＦが、Ｆ＝（０，−１）、すなわちガラス平面に沿って車体前方へ向かう方向で、その大きさＦ＝１とする。
【００４３】
（処理対象のピクセルＱｉ，ｊに流入する水量の計算）
まず、処理対象のピクセルＰｉ，ｊに、その周囲のピクセルから流入する水量を求める。具体的には、まず、次式に従って、処理対象の周囲の８つのピクセルの速度ベクトルＶを更新する。
【式３】
【００４４】
0005067935.tif 000004
例えば、左上のピクセルＰｉ−１，ｊ＋１の場合では、
Ｖ’ｉ−１，ｊ＋１＝（０．５，０）＋（０．５・０．４５）・（０，−１）＝（０．５，−０．２２５）と更新される。
【００４５】
次に、次式に従って、更新された速度ベクトルの、処理対象のピクセルＰｉ，ｊ方向への成分を抽出する。
【式４】
【００４６】
0005067935.tif 000005
Ｓｉ，ｊは、例えば上述の図１６中の左上のピクセルＰｉ−１，ｊ＋１の場合は、処理対象のピクセルＰｉ，ｊに向かう単位ベクトルＳ０，０＝（０．７０７，−０．７０７）となり、
Δｑｉ−１，ｊ＋１＝Ｖ’ｉ−１，ｊ＋１・Ｓ０，０＝（０．５，−０．２２５）・（
０．７０７，−０．７０７）＝０．５１３
となる。
【００４７】
さらに、次式に従って、処理対処のピクセルＰｉ，ｊに向かう成分のみを抽出する。
【式５】
【００４８】
0005067935.tif 000006
例えば、左上のピクセルＰｉ−１，ｊ＋１から処理対象のピクセルＰｉ，ｊに向かう成分を求めると、以下のようになる。なお、処理対象のピクセルＰｉ，ｊから左上のピクセルＰｉ−１，ｊ＋１に逆流する場合（Δｑが０以下の場合）は、上式によってΔＱが０となるため、無視される。
ΔＱｉ−１，ｊ＋１＝０．５１３
左上のピクセルＰｉ−１，ｊ＋１から処理対象のピクセルＰｉ，ｊに流入する水量ｑｉ−１，ｊ＋１は、このΔＱｉ−１，ｊ＋１に当該フレームの処理開始時における左上のピクセルＰｉ−１，ｊ＋１の水量Ｐｉ−１，ｊ＋１を乗じたものであるため、ｑｉ−１，ｊ＋１＝０．５×０．５１３＝０．２５７となる。
【００４９】
同様な処理を、処理対象のピクセルＰｉ，ｊの周囲の８つのピクセルについて全て計算し、次式のように、これらを合計して処理対象のピクセルＰｉ，ｊに流入する水量の合計を求める。
【式６】
【００５０】
0005067935.tif 000007
【００５１】
（処理対象のピクセルから流出する水量の計算）
また、処理対象のピクセルから周囲のピクセルに流出する水量は、次式で求められる。
【式７】
【００５２】
0005067935.tif 000008
これにより、処理対象のピクセルＰｉ，ｊから周囲の８つのピクセルに流出する水量は、  ｑ＝１・０．４５・０．５・０．５＝０．１１２５  となる。
【００５３】
この後、次式に従って、前のフレームにおける処理対象のピクセルＰｉ，ｊの水量Ｑｉ，ｊ（右辺第１項）に、周囲の８つのピクセルから流入する水量（右辺第２項）を加算し、処理対象のピクセルＰｉ，ｊから周囲の８つのピクセルに流出する水量（右辺第３項）を減じ、更新された処理対象のピクセルＰｉ，ｊの水量Ｑ’ｉ，ｊを求める。
【式８】
【００５４】
0005067935.tif 000009
【００５５】
また、水滴マップ更新部３３３は、例えば上述の図１５に示すように、ワイパによる水滴のふき取り効果に応じた水滴マップ３５６の更新も行っている。上述の図２及び図３に示すように、自車の左右のワイパの回転角度（ω１，ω２）は水滴マップ更新部３３３にも供給される。水滴マップ更新部３３３は、この回転角度に応じて、水滴マップ３５６上の当該フレームにおける自車のワイパの位置にあるピクセルの水量を０にする。具体的には、まず、次式による計算を行う。
【式９】
【００５６】
0005067935.tif 000010
ここで、ａｒｇ１，ａｒｇ２はそれぞれ処理対象のピクセルＰｉ，ｊが左右のワイパの軸座標と成す角度、ｉ，ｊは処理対象のピクセルの水滴マップにおける座標、Ｗｘ１，Ｗｙ１，Ｗｘ２，Ｗｙ２はそれぞれ左右のワイパの軸の水滴マップにおける座標、Ｓ１，Ｓ２はそれぞれ処理対象のピクセルと左右のワイパの軸との距離である。
【００５７】
次に、水滴マップ更新部３３３は、これらの値（ａｒｇ１，ａｒｇ２，Ｓ１，Ｓ２）のもとで、処理対象のピクセルがワイパの線分上にあるかどうかを判断し、ワイパの線分上にある場合、水滴がワイパに拭かれるので、処理対象のピクセルの水量を０にする。
【式１０】
【００５８】
0005067935.tif 000011
ここで、Ｑ’ｉ，ｊは上述の式８によって更新された処理対象のピクセルＰｉ，ｊの水量であり、Ｗｌはワイパの長さである。この式１０で表されるＱ”ｉ，ｊが処理対象のピクセルＰｉ，ｊの最終的に更新された当該フレームにおける水量となる。
【００５９】
なお、Ｗｘ１，Ｗｘ２，Ｗｙ１，Ｗｙ２，Ｗｌはフレーム毎に変わらないので、予めＧＰＵ３００側のプログラム（水滴マップ更新部３３３相当部分）中で定数として定義されている。
【００６０】
水滴マップ更新部３３３は、上述と同様に、水滴マップ３５６内の全てのピクセルＰｉ，ｊに対して水量を更新する。
【００６１】
（ＧＰＵ側詳細動作：Ｄ．合成）
水滴マップ更新部３３３による水滴マップ３５６の更新が終了すると、フロントガラスの水滴による屈折効果をピントがぼけることで表現するために、画像合成部３４０は、例えば図１７に示すように、背景画像３５３から平均化画像３６０を生成し、透視変換した水滴マップ３５６に応じて背景画像３５３と平均化画像３６０を合成して最終画像３５７を生成する。
【００６２】
具体的には、エリア平均色計算部３４１は、例えば図１８に示すように、次式に従って背景画像３５３の各々のピクセルを中心とするサンプリングエリア（ΔＢ）内の平均色を計算し、平均化画像３６０を生成する。
【式１１】
【００６３】
0005067935.tif 000012
ここで、ＣＡＶＥ（ｉ，ｊ）は処理対象のピクセルＰｉ，ｊを中心とする一辺の長さがΔＢの四辺形エリア（サンプリングエリア）内の平均色。ΔＢはサンプリングエリアの四辺形の一辺の長さ。Ｂｘ，ｙは背景テクスチャにおける、（ｉ，ｊ）ピクセルを中心とする、サンプリングエリア内の各々のピクセルの色である。この式１１では、サンプリングエリア内の全てのピクセルの値を加算してから、サンプリングエリアの面積＝ピクセルの数で割って、平均色を求めている。
【００６４】
ピクセル最終色計算部３４２は、水滴マップ３５６を視点位置に応じて透視変換する。水滴マップ３５６は、例えば図１９に示すように、自車のフロントガラス上に設定していたため、背景画像３５３と平均化画像３６０の合成に用いるためには、これらと同じ視点からのマップに変換する必要がある。このため、ピクセル最終色計算部３４２は、例えば図２０に示すように、水滴マップ３５６の透視変換を行って、透視変換後の水滴マップ３５９を生成する。なお、この透視変換後の水滴マップ３５９は、背景画像３５３及び平均化画像３６０と同じ画素数で生成される。
【００６５】
透視変換後の水滴マップ３５９を生成すると、ピクセル最終色計算部３４２は、例えば図２１に示すように、透視変換した水滴マップ３５９の各ピクセルの値（水量、ピントぼけ具合）に従って、背景画像３５３の対応するピクセルの色と、エリア平均色計算部３４１で生成した平均化画像３６０の対応するピクセルの色をブレンドして最終画像３５７のピクセルの色とする。このブレンド処理は、次式に従って実行する。
【式１２】
【００６６】
0005067935.tif 000013
ここで、Ｃｉ，ｊはｉ，ｊ点のピクセルの最終的な色、Ｃａｖｅ（ｉ，ｊ）は平均化画像３６０のｉ，ｊ点の色（背景画像３５３の周辺サンプリングエリアの平均色）、Ｂｉ，ｊは屈折がないときに見える色（単に背景画像のｉ，ｊ点のピクセルの色となる）、Ｑｉ，ｊは透視変換された水滴マップ３５９の、当該ピクセルの（水量）値である、Ｒは表現しようとしている液体の屈折率効果を表現するための補正係数であり、表現する液体の屈折率が高い場合は、Ｒの値を１．０より少し高めに設定することで、屈折によるピントボケ効果を強めることになる。なお、Ｒの具体的な値は、本技術を使うユーザが表現したいように設定すればよい。例えば、Ｑ値の０．０−１．０の範囲で表現される屈折率効果の１．２５倍の屈折率効果を表現したい場合、Ｒの値を１．２５に設定すればよい。また、上式のＬｉｍ１は、値が１．０を超えないよう制限する意味であり、１．０を超えた場合は、単に１．０にする。この式１２は、あるピクセルにある水量を重みとして、ピントが合っている時とボケている時の色をブレンドする処理である。
【００６７】
ピクセル最終色計算部３４２は、背景画像３５３の全てのピクセルに対して、このようなブレンド処理を行って最終色を求め、最終画像３５７を生成する。これにより、例えば図２２に示すように、１フレーム分の最終画像３５７が生成され、画像出力部３７０によって表示装置４００に表示される。以上の処理をフレーム毎に繰り返すことにより、プレーヤの操作に応じたシミュレーション結果の画像が表示装置４００に表示される。
【００６８】
（効果）
以上説明したように、このシミュレーション装置では、ＧＰＵ３００側で水滴シミュレーションを実行することにより、ＣＰＵ１００側の処理負荷をそれ程増加させないで、雨滴による視界の悪化をリアルに表現することができる。
【００６９】
また、上述のように、水滴マップ更新部３３０における水滴シミュレーションにおいて、ワイパによるふき取り効果をシミュレートし、背景画像３５３にワイパの画像を表示させることにより、ワイパによって水滴がふき取られたような画像を生成することができる。
【００７０】
なお、上述の説明では、自車のフロントガラス上に水滴マップ３５６を設定したが、例えば図２３に示すように、自車のボンネット上等の視界に入る位置にも水滴マップを設定し、水滴シミュレーションを行ってもよい。あるいは、他車のボンネット等のボディ部分等に水滴マップを適用してもよい。これにより、ドライブシミュレータにおいて、プレーヤの視野から見える自車のボンネットや、他車のボディ部分等の表面を雨の水滴が流れる効果を実現できるので、（細かい部分までの）リアリティを向上させることができる。
【００７１】
ＧＰＵ３００側では、表現しようとしている各エリア（各登場モデルのボンネットや自車のフロントガラスあるいは地面等）毎に、例えば１０００×１０００ピクセルサイズの水滴マップを使う。このため、フレーム毎にＧＰＵ３００が処理するデータ量は、１０００×１０００×エリア数×ピクセル毎の更新式や平均色の計算（式６，式１１等、計算は重い）が必要になる。これに対し、ＣＰＵ１００側では、合力ベクトルはエリア毎に一つ生成する（計算は軽い）。また、複数のエリアの水滴マップに同じ新規水滴位置の集合を使っても、各エリア毎に合力ベクトルが異なるので、水滴マップ上の流れが異なるため、実用上は複数のエリアに同じ新規水滴位置を用いることができる。この新規水滴位置の生成は、新規水滴一個につき、ランダム値を返す関数（Ｒａｎｄｏｍ（）、コンピュータシステムの標準関数、内部は模擬乱数を返すだけなので、非常に速い）を２回呼び出すだけなので、Ｎ個の新規水滴の位置を生成する処理は２Ｎ回のＲａｎｄｏｍ関数の呼び出しで実現できる。このため、フレーム毎にＣＰＵ１００が処理するデータ量は、エリア数×合力ベクトルの計算（式２等、計算は軽い）＋２Ｎ程度である。なお、Ｎは水滴マップの解像度以上になっても意味がないので、上記の場合、最大でも１０００×１０００である。
【００７２】
このため、エリア数（Ｎａｒｅａとする）が増えていくと、ＧＰＵ側の処理は１０００×１０００×Ｎａｒｅａ倍へ増えるのに対して、ＣＰＵ１００側の処理負荷はＮａｒｅａ＋２Ｎ程度とほとんど変わらない。この負荷の違いは、水滴マップの解像度が上がればさらに大きくなる。
【００７３】
「リアリティの増加」は主に二つの要素、すなわち「もっと多くのエリアに水滴効果を適用する＝Ｎａｒｅａを増加する」ことと、「各エリアにおける水滴マップの解像度を向上させる」ことの二つから成る。このため、リアリティを増やすには、Ｎａｒｅａ及び解像度を増加させることになるので、これらの増加に従って、ＧＰＵ側の処理量の増加勾配がＣＰＵ側のそれに比べて著しく大きい。ＣＰＵ側の処理量の増加は０とはならないが、ＧＰＵ側に比べると増加勾配が著しく小さく、「一般的に、ＣＰＵの最大処理能力の向上ではなく、ＣＰＵ内部の計算ユニットの稼働率が上がるだけで余裕で賄える範囲内に収まる」。従って、リアリティを向上させてもＣＰＵ１００側の負担はほとんど上がらない。
【００７４】
なお、上述の説明では、ドライブシミュレーションを行うシミュレーション装置に本発明を適用した例について説明したが、適宜オブジェクトの形状とドライブシミュレータ部１１０の構成と動作等を変更することにより、電車，飛行機等のシミュレーション装置にも本発明を適用することができる。
【図面の簡単な説明】
【００７５】
【図１】本発明の一実施例に係るシミュレーション装置の構成例を示すブロック図である。
【図２】ＧＰＵ３００側の詳細な構成例を示すブロック図である。
【図３】パラメータ記憶部３１０に格納されるデータの例を示すブロック図である。
【図４】コースデータの例を示す概念図である。
【図５】オブジェクト位置３１１に応じたコースモデルデータ２５０，車データ２４０の配置の例を示す概念図である。
【図６】車データ２４０に対する水滴マップ３５６の設定例を示す概念図である。
【図７】新規水滴位置の生成例を示す図である。
【図８】各（ワールド、自車ローカル、フロントガラス）座標系の例を示す概念図である。
【図９】オブジェクト位置３１１に応じた背景画像の生成処理の例を示すブロック図である。
【図１０】背景画像の例を示す図である。
【図１１】新規水滴描画部３３１の処理の例を示す図である。
【図１２】新規水滴の例を示す図である。
【図１３】水滴マップ加算部３３２の処理の例を示すブロック図である。
【図１４】水滴マップ３５６の例を示す図である。
【図１５】水滴マップ更新部３３０の処理の例を示すブロック図である。
【図１６】水滴マップ更新部３３０による水滴マップ３５６の更新処理を示す概念図である。
【図１７】画像合成部３４０の処理を示す概念図である。
【図１８】エリア平均色計算部３４１の処理の例を示す概念図である。
【図１９】水滴マップ３５６と視点位置からの視界に相当する領域の例を示す概念図である。
【図２０】水滴マップ３５６の透視変換処理を示す図である。
【図２１】ピクセル最終色計算部３４２の処理の例を示す概念図である。
【図２２】最終的に生成される画像の例を示す図である。
【図２３】本発明をフロントウィンドウ以外の水滴シミュレーションに適用した例を示す概念図である。
【符号の説明】
【００７６】
１００  ＣＰＵ、１１０  ドライブシミュレータ部、２００  メインメモリ、３００  ＧＰＵ、３１０  パラメータ記憶部、３２０  背景画像生成部、３３０  水滴マップ更新部、３４０  画像合成部、３５０  メモリ、３５６  水滴マップ、４００  表示装置
【図３】
0005067935.tif 000014
【図４】
0005067935.tif 000015
【図５】
0005067935.tif 000016
【図６】
0005067935.tif 000017
【図７】
0005067935.tif 000018
【図８】
0005067935.tif 000019
【図１３】
0005067935.tif 000020
【図１５】
0005067935.tif 000021
【図１６】
0005067935.tif 000022
【図１７】
0005067935.tif 000023
【図１８】
0005067935.tif 000024
【図１９】
0005067935.tif 000025
【図２０】
0005067935.tif 000026
【図２１】
0005067935.tif 000027
【図１】
0005067935.tif 000028
【図２】
0005067935.tif 000029
【図９】
0005067935.tif 000030
【図１０】
0005067935.tif 000031
【図１１】
0005067935.tif 000032
【図１２】
0005067935.tif 000033
【図１４】
0005067935.tif 000034
【図２２】
0005067935.tif 000035
【図２３】
0005067935.tif 000036