説明

シミュレーション装置

【課題】 処理負荷をそれ程増加させないで、雨滴による視界の悪化をリアルに表現することができるシミュレーション装置を提供する。
【解決手段】 背景画像生成部320は、ドライブシミュレータ部110からの指示に従って、背景画像353を生成し、水滴マップ更新部330は自車のフロントガラス上の水滴シミュレーションを行って水滴マップ356を生成する。画像合成部340は、透視変換した水滴マップ356に応じて背景画像353と平均化画像360を合成する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、自動車の運転シミュレーション等のシミュレーションを行うシミュレーション装置に関する。
【背景技術】
【0002】
自動車の運転シミュレーション等のシミュレーションを行うシミュレーション装置が知られている(例えば特許文献1乃至特許文献4参照。)。このような運転シミュレーションでは、トレーニング効果向上等を目的として雨天等の視界が悪い状態でのリアルな視覚表現が求められる場合がある。
【特許文献1】特許第3841210号公報(図1)
【特許文献2】特許第3752081号公報(図1)
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかしながら、自動車のフロントウィンドウ上の雨滴による視界の悪化をリアルに表現するためには、フロントウィンドウ上の雨滴の流れをシミュレーションによって計算する必要があり、CPU側で処理するには負荷が重かった。
【0004】
本発明は、上述のような課題に鑑みてなされたものであり、処理負荷をそれ程増加させないで、雨滴による視界の悪化をリアルに表現することができるシミュレーション装置を提供することを目的とする。
【課題を解決するための手段】
【0005】
本発明に係るシミュレーション装置は、オブジェクトの位置に応じて、所定の視点位置からの背景画像を生成する背景画像生成手段と、オブジェクト上の水量シミュレーションを行う対象領域の水量分布を示す水量マップと、対象領域に加わる合力を求める合力計算手段と、水量マップに新規水滴に応じた水量を追加する新規水滴追加手段と、合力計算手段が求めた合力に応じて水量マップ内の水量シミュレーションを実行する水量シミュレーション手段と、水量マップを視点位置からの画像に透視変換する透視変換手段と、背景画像中の画素の値を当該画素の周囲の画素の値と平均化して平均化画像を生成する平均化手段と、透視変換された水量マップに応じて背景画像と平均化画像を合成する合成手段とを備えることを特徴とする。
【発明の効果】
【0006】
本発明に係るシミュレーション装置では、合力計算手段が、対象領域に加わる合力を求め、水量シミュレーション手段が、合力計算手段が求めた合力に応じて水量マップ内の水量シミュレーションを実行し、透視変換手段が、水量マップを視点位置からの画像に透視変換し、平均化手段が背景画像中の画素の値を当該画素の周囲の画素の値と平均化して平均化画像を生成し、合成手段が透視変換された水量マップに応じて背景画像と平均化画像
を合成することにより、処理負荷をそれ程増加させないで、雨滴による視界の悪化をリアルに表現することができる。また、水量シミュレーション手段をGPU側に実装することにより、CPU側の処理負荷の増加を抑制することができる。
【発明を実施するための最良の形態】
【0007】
本発明は、例えば自動車のドライビングシミュレーションを行うシミュレーション装置等に適用することができる。
【実施例1】
【0008】
(全体構成)
図1は、本発明を適用した一実施形態に係るシミュレーション装置の構成を概念的に示すブロック図である。このシミュレーション装置は、例えばCPU100,メインメモリ200,GPU300,表示装置400,プレーヤの指示を入力するハンドル,アクセルペダル,ブレーキペダル等の入力部500,外部記憶装置等を備えるパーソナルコンピュータ等で構成することができる。CPU100は、制御プログラムを実行することにより、プレーヤから入力部500を介して入力される指示等に応じてドライブシミュレーションを実行するドライブシミュレータ部110として機能する。
【0009】
ドライブシミュレータ部110は、入力部500を介して入力されるプレーヤの指示に応じて自車のコースモデルデータ250上の位置,速度,向き等を管理して走行させ、他の車(AI車)のコースモデルデータ250上の位置,向き,速度,ワイパの回転角度等を管理して自動的に走行させ、自車の運転席に相当する視点位置からの(背景画像)をGPU300に生成させる処理を行う。このドライブシミュレータ部110は、入力部50
0からの入力に応じて自車の位置,向き,速度,ワイパ回転角度等の更新処理を行う自車状態更新部111と、コースデータ210の定義に従ってAI車の位置,向き,速度等の更新処理を行うAI車状態更新部112と、自車,AI車の位置等に応じた画像表示用の変換行列を生成する変換行列生成部113と、GPU300に描画命令等を供給する描画命令発行部114と、雨量,風力,視界の明るさ、天候等の環境情報を更新する環境情報更新部116と、環境情報更新部116からの環境情報に応じて新規水滴の位置を生成する新規水滴位置生成部117と、環境情報更新部116からの環境情報に応じて自車のフロントウィンドウ部分にかかる外力の合力を求める合力ベクトル計算部118とを備えている。
【0010】
また、メインメモリ200には、AI車の位置,向き,速度等の状態の制御に用いるコースデータ210と、自車の位置,向き,速度,ワイパ回転角度等の状態を示すデータ(自車状態)220と、AI車の位置,向き,速度等の状態を示すデータ(AI車状態)230と、自車,AI車の3次元形状,テクスチャ等のデータ(車データ)240と、走行路,建物等の3次元形状,テクスチャ等のデータ(コースモデルデータ)250等が格納される。
【0011】
このGPU300は、例えばDiretX(商標)9.0に準拠しており、HLSL(High Level Shading Language)言語で記述されたプログラムを実行することができるようになっている。このGPU300は、コースモデルデータ250と車データ240等の3次元形状を構成するポリゴンの頂点座標の計算を行う頂点シェーダ,各ポリゴン内の画素の値を計算するピクセルシェーダ,CPU100側から供給されるプログラムに応じた動作を行うプログラマブルシェーダ,メモリ350,これらの動作を制御するコントローラ等を備えており、CPU100側から供給されるプログラムを実行することにより、パラメータ記憶部310,背景画像生成部320,水滴マップ更新部330,画像合成部340等として機能する。
【0012】
(GPU300詳細)
GPU300側のパラメータ記憶部310,背景画像生成部320,水滴マップ更新部330,画像合成部340は、さらに詳細には、例えば図2に示すように構成されている。また、メモリ350には、CPU100側から供給されたコースモデルデータ250,自車及びAI車の車データ240等の3Dデータ(形状データ)351,テクスチャデータ352,新規水滴テクスチャ354等が格納される。また、メモリ350には、背景画像生成部320,水滴マップ更新部330の動作に応じて背景画像353,新規水滴マップ355,水滴マップ356,最終画像357等のデータも格納される。
【0013】
パラメータ記憶部310には、CPU100側のドライブシミュレータ部110から供給されたオブジェクト位置311,新規水滴位置312,合力ベクトル313,左右のワイパの回転角度(ワイパ角度)314が格納される。これらのパラメータ(オブジェクト位置311〜ワイパ角度314)は、表示装置400に表示する画像の更新頻度(フレーム、例えば60分の1秒)毎に、ドライブシミュレータ部110が更新し、パラメータ記憶部310に供給する。
【0014】
オブジェクト位置311は、例えば図3に示すように、コースモデルデータ250,自車及びAI車の車データ240等のオブジェクトを各々のローカル座標から例えば自車の運転席に相当する視点位置を基準とする視点座標(スクリーン座標)に変換するための変換行列であり、各々のオブジェクト毎にドライブシミュレータ部110の変換行列生成部113から供給される。また、新規水滴位置312は、新規水滴の(後述のフロントウィンドウ座標系上の)位置を示す情報であり、新規水滴位置生成部117が環境情報更新部116からの環境情報に応じて生成し、パラメータ記憶部310に供給する。また、合力ベクトル(及び定数κ)313は、フロントウィンドウ部分にかかる外力の合力を示す(ベクトル)情報であり、合力ベクトル計算部118が環境情報更新部116からの環境情報に応じて生成し、パラメータ記憶部310に供給する。また、ワイパ角度314は、自車の左右のワイパの回転角度を示す情報(ω1,ω2)であり、自車状態更新部111が生成し、パラメータ記憶部310に供給する。
【0015】
背景画像生成部320は、雨の効果がない(水滴マップに応じたピンボケ効果がかかっていない)状態の背景画像の生成を行う。この背景画像生成部320は、透視変換により各オブジェクトを構成するポリゴンの頂点の位置を求める頂点処理部321と、透視変換した各ポリゴン中の画素(ピクセル)の色を求めるピクセル処理部322とを備えている。
【0016】
水滴マップ更新部330は、新規水滴マップ355中の新規水滴位置312に新規水滴テクスチャ354の画像を追加する新規水滴描画部331と、水滴マップ356に新規水滴マップ355を加算する水滴マップ加算部332と、水滴マップ356の更新処理を行う水滴マップ更新部333とを備えている。
【0017】
画像合成部340は、背景画像353内の所定のサンプリングエリア内の画素の平均値を求めて平均化画像を求めるエリア平均色計算部341と、水滴マップ356に応じて背景画像353と平均化画像を合成するピクセル最終色計算部342とを備えている。また、画像出力部370は、最終的に合成された最終画像357を表示装置400に表示させる。
【0018】
(動作概要)
上述のように構成されたシミュレーション装置では、表示装置400に表示する画像の1フレーム(例えば60分の1秒)毎に以下の処理を実行する。
(A)ドライブシミュレータ部110が、入力部500からの入力等に応じて、自車、AI車の位置・向き・速度等を更新する。
(B)背景画像生成部320が、自車の運転席に相当する視点位置からの背景画像353を生成する。
(C)水滴マップ更新部330が水滴シミュレーションを実行して水滴マップ356を更新する。
(D)画像合成部340が背景画像353から平均化画像360を生成し、透視変換した水滴マップ356に応じて背景画像353と平均化画像360を合成して最終画像357を生成し、画像出力部370が表示装置400に表示させる。
【0019】
(CPU側詳細動作:0.初期化)
ドライブシミュレータ部110は、プレーヤの指示等に応じてシミュレーションを開始すると、自車の初期位置等が定義された設定ファイルを読み込み、ドライブシミュレータ部110の初期化を行う。この後、ドライブシミュレータ部110は、初期状態の水滴マップ356と新規水滴マップ355を作成し、GPU300の水滴マップ更新部330に供給する(厳密にはGPU300側のメモリ350に転送する)。これらの新規水滴マップ355と水滴マップ356は、例えば各々8ビットのRGBAの4つのチャネルのテクスチャデータとして生成されている。また、ドライブシミュレータ部110は、車データ240,コースモデルデータ250等の頂点座標等を3Dデータ351としてGPU300側のメモリ350に供給し、車データ240,コースモデルデータ250等のテクスチャをテクスチャデータ352としてGPU300側のメモリ350に供給する。また、環境情報更新部116は、視界の明るさ、天候等の環境情報をGPU300側の背景画像生成部320に供給する。
【0020】
(CPU側詳細動作:A−1.各オブジェクトの状態の更新)
ドライブシミュレータ部110は、フレーム毎に、各オブジェクト(自車,AI車等)の位置を更新する。自車状態更新部111は、入力部500からの入力に応じて自車の位置,向き,速度,ワイパ回転角度等を更新する。コースデータ210には、例えば図4に示すように、各AI車の各時刻毎の位置,向き等を示すデータ(AI車ルート設定211等)が定義されている。AI車状態更新部112は、現在の時刻Tcに対応する各AI車の位置と向きをAI車ルート設定211から取得し、AI車の位置,向き,速度等を更新してAI車状態230に格納する。これにより、例えば図5に示すように、当該フレームにおける各オブジェクトの配置が決まる。なお、現在の時刻Tcは、シミュレーション開始時刻からの経過時間を示す値で、ドライブシミュレータ部110が、シミュレーション開始時間Tsを記録しておき、フレーム毎に現在時刻Tを取得し、Tc=T−Tsで開始からの経過時間を得ている。
【0021】
また、ワイパは、回転軸を中心とした回転角度で制御される。回転軸の位置は定数(2次元座標)であるので、フレーム毎には更新しない。ワイパ角度は、ドライブシミュレータ部110が、フレーム毎に更新するが、具体的には、現在のワイパの回転角度をωとし、フレーム更新分の時間当たりに回転する角度(回転速度)をΔω,ワイパOFFの状態(ワイパ収納状態)での角度をωs,ワイパON時の最大回転角度をωmax,現在の回転方向をブール変数Dir(Dir=1の場合は反時計回り、Dir=0の場合は時計回り)として以下の処理を行う。
Dir = 1の場合:
1. ω=ω+Δω とする。
2. 1.の結果、ω>ωmaxになった場合には、Dir=0 とする。
Dir = 0の場合:
1. ω=ω−Δω とする。
2. 1.の結果、ω<ωsになった場合には、Dir=1 とする。
ドライブシミュレータ部110は、このような処理を、一方のワイパ角度をω=ω1とし、他方のワイパ角度をω=ω2として、両方のワイパについて実行する。
【0022】
具体的には、このシミュレーション装置では、プレーヤは、入力部500のハンドル,アクセルペダル,ブレーキペダル等を操作してシミュレーションを行う。ハンドルの切り角,ペダルの踏み込み量等が入力部500によってデータ化されてドライブシミュレータ部110に入力される。自車状態更新部111は、入力デバイス500からの入力に応じて、現在の自車の位置等を示すデータ(自車状態220)を更新する。具体的には、自車状態更新部111は、フレーム(フレーム更新間隔:Δt)毎に、例えば以下のような処理を実行して自車状態220を更新する。
1.プレーヤがアクセルをΔA (cm)深く踏んた場合には、
自車の加速度ベクトル(A)を A=A+ΔA×p とし、
自車の速度ベクトル(V)を V=V+A とする。
なお、pは入力デバイスからの入力量と加速度への追加分の比例係数である。
2.プレーヤがハンドルをΔw(角度)回した場合には、
ハンドルの切り角(θs)を θs=θs+Δw とする。
3.プレーヤが何もしていない場合には、現在の速度で走り続けるように、
自車の位置(Pを) P=P+V×Δt とする。
【0023】
また、自車状態更新部111は、現在のワイパの回転モードに従って、自車のワイパの回転角度を更新(回転角度増大もしくは縮小)し、自車状態220を更新する。自車状態220には、例えば自車の位置P(x,y,z),自車の姿勢R(yaw, pitch, roll),自車の速度ベクトルV(Vx, Vy, Vz),自車の加速度ベクトルA(Ax, Ay, Az),ハンドルの切り角(θs),自車のワイパの回転角度(左右、ω1,ω2)等が含まれる。
【0024】
AI車状態更新部112は、予め設定しておいた走行ルート,走行状況に基づく反応等の定義情報に応じて、各AI車の位置等を示すデータ(AI車状態230)を更新する。AI車状態230には、例えば各AI車の位置P(x,y,z),各AI車の姿勢R(yaw, pitch, roll),各AI車の速度ベクトルV(Vx, Vy, Vz),各AI車の加速度ベクトルA(Ax, Ay, Az)等が含まれる。
【0025】
GPU300側の背景画像生成部320でのオブジェクトの描画は、上述の図3に示すような各オブジェクト毎の変換行列に応じて行われる。この変換行列は、上述のように、各オブジェクトを各々のローカル座標から視点位置を基準とするスクリーン座標に変換するための変換行列である。このため、変換行列生成部113は、自車状態220中の自車の位置及び姿勢とAI車状態230中のAI車の位置及び姿勢から各オブジェクトの変換行列を生成する。この変換行列は、次式のように、各オブジェクトの位置に応じた移動行列に、各オブジェクトの向きに応じた回転行列(x,y,z軸方向の回転行列の積)をかけたものである。
【式1】
【0026】

【0027】
このように変換行列を生成すると、変換行列生成部113は、各オブジェクトの変換行列を、GPU300側のパラメータ記憶部310にオブジェクト位置311として転送する。これらの変換行列は、背景画像生成部320における背景画像の生成に使用される。なお、自車状態更新部111は、自車のワイパについても、動作モード等に応じた位置,回転角度を生成し、自車状態220に格納する。変換行列生成部113は、他のオブジェクトと同様に、自車のワイパの位置及び回転角度に応じた変換行列を生成し、パラメータ記憶部310にオブジェクト位置311として転送する。
【0028】
(CPU側詳細動作:A−2.環境パラメータの更新)
一方、環境情報更新部116は、予め設定しておいた定義情報(コースデータ210)に応じて、雨量(n個の新規水滴),風力のベクトル,視界の明るさ,天候等の環境パラメータを更新する。
【0029】
このシミュレーション装置では、例えば図6に示すように、運転席に相当する視点位置から見える領域内の自車のフロントガラス上の水量を示す水滴マップ356を設定し、水滴マップ更新部330において水滴マップ356上の水滴のシミュレーションを行っている。この水滴シミュレーションは、フロントガラスを平面とみなし、フロントガラス平面上のフロントガラス座標系で示される位置の水量をシミュレーションするものである。
【0030】
上述の図4に示すように、コースデータ210中では雨量設定212として例えば時刻毎の雨量(新規水滴の数)が設定されている。環境情報更新部116は、この雨量設定212に応じて、現在の時刻に対応する雨量の設定を更新する。なお、フレーム毎のパラメータ更新は、コースデータ210中の定義より短い間隔で行われるので、線形補間によって現在の時刻の雨量を設定するようにしてもよい。例えば、上述の図4中の雨量設定212では、第30秒と第40秒の間の35秒においてパラメータ更新が行われると、環境情報更新部116は、雨量を150に設定する。他のパラメータも同様に更新される。雨量の設定が更新されると、新規水滴位置生成部117は、更新された雨量に従って、n個分の新規水滴の位置(フロントガラス座標系)を生成する。この新規水滴の位置の生成は、水滴マップ356内の位置となるように、乱数を使って行う。ある新規水滴の座標をPnewとすると、
Pnew=(Px,Py)=(random mod W ,random mod H)となる。
ここで、randomは乱数を返す関数,modは余りを求める操作,W,Hはそれぞれフロントガラスにおける水滴シミュレーションを行う領域(例えば図7に示す水滴マップ356に相当する領域)の長さ,幅である。
同様に、新規水滴位置生成部117は、n個の新規水滴座標を生成し、GPU300のパラメータ記憶部310に新規水滴位置312として転送する。
【0031】
また、合力ベクトル計算部118は、環境パラメータが更新されると、例えば図8に示すように、上述の風力ベクトル及び自車の加速度による慣性力のベクトルを合成し、これらの合力をフロントガラス座標系上の平面ベクトルに変換した値を、GPU300のパラメータ記憶部310に合力ベクトル313として転送する。例えば前フレームとの速度ベクトルの差分等から求める。
【式2】
【0032】

ここで、fx,fy,fzは合力の自車のローカル座標系での値の各成分、Fwindはワールド座標系での風力のベクトル、Finはワールド座標系における慣性力、F合力はフロントガラス座標系における合力ベクトルである。また、フロントガラス座標系とは、上述の図7に示すように、自車のローカル座標系の横軸(XL軸)をフロントガラス座標系の横軸(X’、方向は逆)、縦軸(ZL)をフロントガラス座標系の縦軸(Y’)として、X’Y’平面でフロントガラス平面を表した座標系である。
また、合力ベクトル計算部118は、流体の種類に応じた後述の定数値のκをパラメータ記憶部310に供給する。
【0033】
上述のように、あるフレームにおける各オブジェクトの状態と環境パラメータの更新が終了すると、描画命令発行部114は、GPU300の背景画像生成部320に背景画面描画命令を発行し、水滴マップ更新部330に新規水滴の描画命令を発行する。
【0034】
(GPU側詳細動作:B.背景画像生成)
描画命令発行部114から描画命令が供給されると、背景画像生成部320は、雨の効果がない(流れ効果がかかっていない)の画像となる背景画像を生成する。具体的には、例えば図9に示すように、頂点処理部321は、コースモデルデータ250,自車及びAI車の車データ240等の各オブジェクトの3Dデータ351をメモリ350から読み込み、各オブジェクトに対応するオブジェクト位置311中の変換行列を用いて各3Dデータ351中のポリゴンの各頂点の座標を、スクリーン座標系に変換する。これにより、例えば各オブジェクトが上述の図5に示すような配置であった場合には、図9中の中央の画像のように、自車の運転席の位置に相当する視点位置から見た各オブジェクトを構成する各々のポリゴンの位置が求められる。また、ピクセル処理部322は、メモリ350から各オブジェクトのテクスチャ352を読み込み、各ポリゴン中のピクセルの色を求める。
【0035】
なお、ピクセル処理部322は、環境情報更新部116から供給された「視界の明るさ」及び「天候」等の環境情報に応じた処理を行う。「視界の明るさ」は、背景画像生成部320で生成された背景画像の明るさを補正(調節)するためのパラメータであり(Bとする)、背景画像のピクセルの色をC=(Cr,Cg,Cb)とすると、C=C×B=(Cr×B,Cg×B,Cb×B)によって、Bの値で背景画像の明るさを調節する。例えば、雷によって一瞬外界が明るくなるときは、その時刻におけるBを>>1.0にセットすればよく、また、夜の暗い場面を表現する場合は、該当時刻のBを0.0<B<<1.0にセットすれば良い。普通の昼間の場面では単に該当時刻におけるBを1.0にセットすればよい。なお、Bの値の計算の仕方は本技術を使うユーザが表現したい画像によって、ユーザ側が決め、コースデータに記述すればよい。Bも上記のパラメータ更新の仕方に沿って更新される。
【0036】
また「天候」は、上述の「視界の明るさ」とほぼ同じであるが、天候の色合いを補正するための値(S=(Sr,Sg,Sb)とする)であり、背景画像のピクセルの色をC=(Cr,Cg,Cb)とすると、Cの各成分に対する補正値となる。つまり、背景画像を、C=(Cr×Sr,Cg×Sg,Cb×Sb)と計算して補正する。天候も上記のようにユーザによって決められ、コースデータに記述される。なにも補正する必要がない場合は、単にSr=1.0,Sg=1.0,Sb=1.0とすればよい。
【0037】
ピクセル処理部322は、全てのピクセルに対して以上の処理を行い、背景画像353を生成してメモリ350に保存する。なお、自車のワイパについても、他のオブジェクトと同様に、3Dデータ351,テクスチャデータ352がドライブシミュレータ部110側から供給されており、他のオブジェクトと同様に、オブジェクト位置311に応じた位置に描画される。また、図5より複雑なオブジェクトの配置の場合の背景画像353は、例えば図10に示すようになる。
【0038】
(GPU側詳細動作:C.水滴マップ更新)
描画命令発行部114から新規水滴の描画命令が供給されると、水滴マップ更新部330は水滴マップ356を更新して当該フレームの水滴マップ356を求める。まず、新規水滴描画部331は、新規水滴マップ355をクリアしてから、例えば図11に示すように、新規水滴マップ355上の新規水滴位置312で指定されたn個の位置(xi,yi)[i=1,2,…n]に、新規水滴テクスチャ354を追加する。これにより、新規水滴マップ355は、例えば図12に示すように、n個の新規水滴が追加された状態になる。なお、新規水滴テクスチャ354はBチャネルだけのデータであり、各々の画素に相当する位置の水量を示している。
【0039】
新規水滴マップ355の生成が終了すると、水滴マップ加算部332は、例えば図13に示すように、前のフレームの水滴マップ356に、新規水滴マップ355の対応するピクセルのBチャネルの値(水量に対応)を加算する。これにより、例えば図14に示すように、新規水滴マップ355の水量が加算された水滴マップ356が生成される。
【0040】
新規水滴マップ355の値がフレームの水滴マップ356に加算されると、水滴マップ更新部333は、合力ベクトルと定数κに応じて水滴マップ356の更新(流れ)を行う。水滴マップ356のフォーマットは、RGBA各チャネルに8ビットを使ったテクスチャである。水滴マップ356上の点(ピクセル)はフロントガラスにおける対応位置の点にある水の状態(Bチャネル:水量,RチャネルとGチャネル:フロントガラス座標系のX’,Y’軸方向の速度ベクトル)を示している。
【0041】
水滴マップ更新部333は、例えば図15に示すように、まず、処理対象のピクセルPi,jの周囲のピクセル(図15中の破線内のピクセル)から処理対象のピクセルPi,jに流入する水量を計算して、処理対象のピクセルPi,jの水量Qi,jに加算する。次に、処理対象のピクセルPi,jから流出する水量を減算して、処理対象のピクセルPi,jの水量Qi,jを求める。
【0042】
例えば時刻t−1における更新前の水滴マップの一部のピクセルの水量Q及び速度ベクトルVが、図16に示すような状態であった場合に、同図中の中央のピクセルPi,jの水量Qi,jを更新する動作について説明する。なお、κの値は、例えば水の場合の0.45に設定する。このκの値は、他の流体(例えば海水等)の場合には適宜設定する。また、このフレームにおけるワールド座標系からフロントガラス座標系(図7及び図8)に換算した合力ベクトルFが、F=(0,−1)、すなわちガラス平面に沿って車体前方へ向かう方向で、その大きさF=1とする。
【0043】
(処理対象のピクセルQi,jに流入する水量の計算)
まず、処理対象のピクセルPi,jに、その周囲のピクセルから流入する水量を求める。具体的には、まず、次式に従って、処理対象の周囲の8つのピクセルの速度ベクトルVを更新する。
【式3】
【0044】

例えば、左上のピクセルPi−1,j+1の場合では、
V’i−1,j+1=(0.5,0)+(0.5・0.45)・(0,−1)=(0.5,−0.225)と更新される。
【0045】
次に、次式に従って、更新された速度ベクトルの、処理対象のピクセルPi,j方向への成分を抽出する。
【式4】
【0046】

i,jは、例えば上述の図16中の左上のピクセルPi−1,j+1の場合は、処理対象のピクセルPi,jに向かう単位ベクトルS0,0=(0.707,−0.707)となり、
Δqi−1j+1=V’i−1j+1・S0,0=(0.5,−0.225)・(
0.707,−0.707)=0.513
となる。
【0047】
さらに、次式に従って、処理対処のピクセルPi,jに向かう成分のみを抽出する。
【式5】
【0048】

例えば、左上のピクセルPi−1,j+1から処理対象のピクセルPi,jに向かう成分を求めると、以下のようになる。なお、処理対象のピクセルPi,jから左上のピクセルPi−1,j+1に逆流する場合(Δqが0以下の場合)は、上式によってΔQが0となるため、無視される。
ΔQi−1,j+1=0.513
左上のピクセルPi−1,j+1から処理対象のピクセルPi,jに流入する水量qi−1,j+1は、このΔQi−1,j+1に当該フレームの処理開始時における左上のピクセルPi−1,j+1の水量Pi−1,j+1を乗じたものであるため、qi−1,j+1=0.5×0.513=0.257となる。
【0049】
同様な処理を、処理対象のピクセルPi,jの周囲の8つのピクセルについて全て計算し、次式のように、これらを合計して処理対象のピクセルPi,jに流入する水量の合計を求める。
【式6】
【0050】

【0051】
(処理対象のピクセルから流出する水量の計算)
また、処理対象のピクセルから周囲のピクセルに流出する水量は、次式で求められる。
【式7】
【0052】

これにより、処理対象のピクセルPi,jから周囲の8つのピクセルに流出する水量は、 q=1・0.45・0.5・0.5=0.1125 となる。
【0053】
この後、次式に従って、前のフレームにおける処理対象のピクセルPi,jの水量Qi,j(右辺第1項)に、周囲の8つのピクセルから流入する水量(右辺第2項)を加算し、処理対象のピクセルPi,jから周囲の8つのピクセルに流出する水量(右辺第3項)を減じ、更新された処理対象のピクセルPi,jの水量Q’i,jを求める。
【式8】
【0054】

【0055】
また、水滴マップ更新部333は、例えば上述の図15に示すように、ワイパによる水滴のふき取り効果に応じた水滴マップ356の更新も行っている。上述の図2及び図3に示すように、自車の左右のワイパの回転角度(ω1,ω2)は水滴マップ更新部333にも供給される。水滴マップ更新部333は、この回転角度に応じて、水滴マップ356上の当該フレームにおける自車のワイパの位置にあるピクセルの水量を0にする。具体的には、まず、次式による計算を行う。
【式9】
【0056】

ここで、arg1,arg2はそれぞれ処理対象のピクセルPi,jが左右のワイパの軸座標と成す角度、i,jは処理対象のピクセルの水滴マップにおける座標、Wx1,Wy1,Wx2,Wy2はそれぞれ左右のワイパの軸の水滴マップにおける座標、S1,S2はそれぞれ処理対象のピクセルと左右のワイパの軸との距離である。
【0057】
次に、水滴マップ更新部333は、これらの値(arg1,arg2,S1,S2)のもとで、処理対象のピクセルがワイパの線分上にあるかどうかを判断し、ワイパの線分上にある場合、水滴がワイパに拭かれるので、処理対象のピクセルの水量を0にする。
【式10】
【0058】

ここで、Q’i,jは上述の式8によって更新された処理対象のピクセルPi,jの水量であり、Wlはワイパの長さである。この式10で表されるQ”i,jが処理対象のピクセルPi,jの最終的に更新された当該フレームにおける水量となる。
【0059】
なお、Wx1,Wx2,Wy1,Wy2,Wlはフレーム毎に変わらないので、予めGPU300側のプログラム(水滴マップ更新部333相当部分)中で定数として定義されている。
【0060】
水滴マップ更新部333は、上述と同様に、水滴マップ356内の全てのピクセルPi,jに対して水量を更新する。
【0061】
(GPU側詳細動作:D.合成)
水滴マップ更新部333による水滴マップ356の更新が終了すると、フロントガラスの水滴による屈折効果をピントがぼけることで表現するために、画像合成部340は、例えば図17に示すように、背景画像353から平均化画像360を生成し、透視変換した水滴マップ356に応じて背景画像353と平均化画像360を合成して最終画像357を生成する。
【0062】
具体的には、エリア平均色計算部341は、例えば図18に示すように、次式に従って背景画像353の各々のピクセルを中心とするサンプリングエリア(ΔB)内の平均色を計算し、平均化画像360を生成する。
【式11】
【0063】

ここで、CAVE(i,j)は処理対象のピクセルPi,jを中心とする一辺の長さがΔBの四辺形エリア(サンプリングエリア)内の平均色。ΔBはサンプリングエリアの四辺形の一辺の長さ。Bx,yは背景テクスチャにおける、(i,j)ピクセルを中心とする、サンプリングエリア内の各々のピクセルの色である。この式11では、サンプリングエリア内の全てのピクセルの値を加算してから、サンプリングエリアの面積=ピクセルの数で割って、平均色を求めている。
【0064】
ピクセル最終色計算部342は、水滴マップ356を視点位置に応じて透視変換する。水滴マップ356は、例えば図19に示すように、自車のフロントガラス上に設定していたため、背景画像353と平均化画像360の合成に用いるためには、これらと同じ視点からのマップに変換する必要がある。このため、ピクセル最終色計算部342は、例えば図20に示すように、水滴マップ356の透視変換を行って、透視変換後の水滴マップ359を生成する。なお、この透視変換後の水滴マップ359は、背景画像353及び平均化画像360と同じ画素数で生成される。
【0065】
透視変換後の水滴マップ359を生成すると、ピクセル最終色計算部342は、例えば図21に示すように、透視変換した水滴マップ359の各ピクセルの値(水量、ピントぼけ具合)に従って、背景画像353の対応するピクセルの色と、エリア平均色計算部341で生成した平均化画像360の対応するピクセルの色をブレンドして最終画像357のピクセルの色とする。このブレンド処理は、次式に従って実行する。
【式12】
【0066】

ここで、Ci,jはi,j点のピクセルの最終的な色、Cave(i,j)は平均化画像360のi,j点の色(背景画像353の周辺サンプリングエリアの平均色)、Bi,jは屈折がないときに見える色(単に背景画像のi,j点のピクセルの色となる)、Qi,jは透視変換された水滴マップ359の、当該ピクセルの(水量)値である、Rは表現しようとしている液体の屈折率効果を表現するための補正係数であり、表現する液体の屈折率が高い場合は、Rの値を1.0より少し高めに設定することで、屈折によるピントボケ効果を強めることになる。なお、Rの具体的な値は、本技術を使うユーザが表現したいように設定すればよい。例えば、Q値の0.0−1.0の範囲で表現される屈折率効果の1.25倍の屈折率効果を表現したい場合、Rの値を1.25に設定すればよい。また、上式のLim1は、値が1.0を超えないよう制限する意味であり、1.0を超えた場合は、単に1.0にする。この式12は、あるピクセルにある水量を重みとして、ピントが合っている時とボケている時の色をブレンドする処理である。
【0067】
ピクセル最終色計算部342は、背景画像353の全てのピクセルに対して、このようなブレンド処理を行って最終色を求め、最終画像357を生成する。これにより、例えば図22に示すように、1フレーム分の最終画像357が生成され、画像出力部370によって表示装置400に表示される。以上の処理をフレーム毎に繰り返すことにより、プレーヤの操作に応じたシミュレーション結果の画像が表示装置400に表示される。
【0068】
(効果)
以上説明したように、このシミュレーション装置では、GPU300側で水滴シミュレーションを実行することにより、CPU100側の処理負荷をそれ程増加させないで、雨滴による視界の悪化をリアルに表現することができる。
【0069】
また、上述のように、水滴マップ更新部330における水滴シミュレーションにおいて、ワイパによるふき取り効果をシミュレートし、背景画像353にワイパの画像を表示させることにより、ワイパによって水滴がふき取られたような画像を生成することができる。
【0070】
なお、上述の説明では、自車のフロントガラス上に水滴マップ356を設定したが、例えば図23に示すように、自車のボンネット上等の視界に入る位置にも水滴マップを設定し、水滴シミュレーションを行ってもよい。あるいは、他車のボンネット等のボディ部分等に水滴マップを適用してもよい。これにより、ドライブシミュレータにおいて、プレーヤの視野から見える自車のボンネットや、他車のボディ部分等の表面を雨の水滴が流れる効果を実現できるので、(細かい部分までの)リアリティを向上させることができる。
【0071】
GPU300側では、表現しようとしている各エリア(各登場モデルのボンネットや自車のフロントガラスあるいは地面等)毎に、例えば1000×1000ピクセルサイズの水滴マップを使う。このため、フレーム毎にGPU300が処理するデータ量は、1000×1000×エリア数×ピクセル毎の更新式や平均色の計算(式6,式11等、計算は重い)が必要になる。これに対し、CPU100側では、合力ベクトルはエリア毎に一つ生成する(計算は軽い)。また、複数のエリアの水滴マップに同じ新規水滴位置の集合を使っても、各エリア毎に合力ベクトルが異なるので、水滴マップ上の流れが異なるため、実用上は複数のエリアに同じ新規水滴位置を用いることができる。この新規水滴位置の生成は、新規水滴一個につき、ランダム値を返す関数(Random()、コンピュータシステムの標準関数、内部は模擬乱数を返すだけなので、非常に速い)を2回呼び出すだけなので、N個の新規水滴の位置を生成する処理は2N回のRandom関数の呼び出しで実現できる。このため、フレーム毎にCPU100が処理するデータ量は、エリア数×合力ベクトルの計算(式2等、計算は軽い)+2N程度である。なお、Nは水滴マップの解像度以上になっても意味がないので、上記の場合、最大でも1000×1000である。
【0072】
このため、エリア数(Nareaとする)が増えていくと、GPU側の処理は1000×1000×Narea倍へ増えるのに対して、CPU100側の処理負荷はNarea+2N程度とほとんど変わらない。この負荷の違いは、水滴マップの解像度が上がればさらに大きくなる。
【0073】
「リアリティの増加」は主に二つの要素、すなわち「もっと多くのエリアに水滴効果を適用する=Nareaを増加する」ことと、「各エリアにおける水滴マップの解像度を向上させる」ことの二つから成る。このため、リアリティを増やすには、Narea及び解像度を増加させることになるので、これらの増加に従って、GPU側の処理量の増加勾配がCPU側のそれに比べて著しく大きい。CPU側の処理量の増加は0とはならないが、GPU側に比べると増加勾配が著しく小さく、「一般的に、CPUの最大処理能力の向上ではなく、CPU内部の計算ユニットの稼働率が上がるだけで余裕で賄える範囲内に収まる」。従って、リアリティを向上させてもCPU100側の負担はほとんど上がらない。
【0074】
なお、上述の説明では、ドライブシミュレーションを行うシミュレーション装置に本発明を適用した例について説明したが、適宜オブジェクトの形状とドライブシミュレータ部110の構成と動作等を変更することにより、電車,飛行機等のシミュレーション装置にも本発明を適用することができる。
【図面の簡単な説明】
【0075】
【図1】本発明の一実施例に係るシミュレーション装置の構成例を示すブロック図である。
【図2】GPU300側の詳細な構成例を示すブロック図である。
【図3】パラメータ記憶部310に格納されるデータの例を示すブロック図である。
【図4】コースデータの例を示す概念図である。
【図5】オブジェクト位置311に応じたコースモデルデータ250,車データ240の配置の例を示す概念図である。
【図6】車データ240に対する水滴マップ356の設定例を示す概念図である。
【図7】新規水滴位置の生成例を示す図である。
【図8】各(ワールド、自車ローカル、フロントガラス)座標系の例を示す概念図である。
【図9】オブジェクト位置311に応じた背景画像の生成処理の例を示すブロック図である。
【図10】背景画像の例を示す図である。
【図11】新規水滴描画部331の処理の例を示す図である。
【図12】新規水滴の例を示す図である。
【図13】水滴マップ加算部332の処理の例を示すブロック図である。
【図14】水滴マップ356の例を示す図である。
【図15】水滴マップ更新部330の処理の例を示すブロック図である。
【図16】水滴マップ更新部330による水滴マップ356の更新処理を示す概念図である。
【図17】画像合成部340の処理を示す概念図である。
【図18】エリア平均色計算部341の処理の例を示す概念図である。
【図19】水滴マップ356と視点位置からの視界に相当する領域の例を示す概念図である。
【図20】水滴マップ356の透視変換処理を示す図である。
【図21】ピクセル最終色計算部342の処理の例を示す概念図である。
【図22】最終的に生成される画像の例を示す図である。
【図23】本発明をフロントウィンドウ以外の水滴シミュレーションに適用した例を示す概念図である。
【符号の説明】
【0076】
100 CPU、110 ドライブシミュレータ部、200 メインメモリ、300 GPU、310 パラメータ記憶部、320 背景画像生成部、330 水滴マップ更新部、340 画像合成部、350 メモリ、356 水滴マップ、400 表示装置

【特許請求の範囲】
【請求項1】
オブジェクトの位置に応じて、所定の視点位置からの背景画像を生成する背景画像生成手段と、
前記オブジェクト上の水量シミュレーションを行う対象領域の水量分布を示す水量マップと、
前記対象領域に加わる合力を求める合力計算手段と、
前記水量マップに新規水滴に応じた水量を追加する新規水滴追加手段と、
前記合力計算手段が求めた合力に応じて前記水量マップ内の水量シミュレーションを実行する水量シミュレーション手段と、
前記水量マップを前記視点位置からの画像に透視変換する透視変換手段と、
前記背景画像中の画素の値を当該画素の周囲の画素の値と平均化して平均化画像を生成する平均化手段と、
前記透視変換された水量マップに応じて前記背景画像と前記平均化画像を合成する合成手段と
を備えることを特徴とするシミュレーション装置。
【請求項2】
前記オブジェクトの移動シミュレーションを行う移動シミュレーション手段を備え、
前記合力計算手段は、前記移動シミュレーション手段による移動シミュレーションの結果に応じて前記対象領域に加わる合力を求めることを特徴とする請求項1記載のシミュレーション装置。
【請求項3】
前記水量シミュレーション手段は、GPU側に実装されていることを特徴とする請求項1又は請求項2記載のシミュレーション装置。
【請求項4】
前記対象領域上を移動するワイパの位置を求めるワイパ位置計算手段を備え、
前記水量シミュレーション手段は、前記ワイパの位置に応じて水量シミュレーションを実行することを特徴とする請求項1乃至請求項3のいずれかに記載のシミュレーション装置。

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図13】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図1】
image rotate

【図2】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図14】
image rotate

【図22】
image rotate

【図23】
image rotate


【公開番号】特開2009−70215(P2009−70215A)
【公開日】平成21年4月2日(2009.4.2)
【国際特許分類】
【出願番号】特願2007−239063(P2007−239063)
【出願日】平成19年9月14日(2007.9.14)
【出願人】(507308865)有限会社メイキング (2)
【Fターム(参考)】