平成 19 年度

卒業研究論文粒子・体積モデルに基づく
仮想液体操作システムにおける波の表現

指導教員
舟橋健司 准教授

名古屋工業大学 工学部 情報工学科
平成 16 年度入学 16115097 番

棚橋 拓也

i

目次

1

はじめに

１

2

粒子・体積に基づくモデル，波のモデル

４2.1 液体のモデル

５2.2 仮想容器のモデル

６2.3 液位，液面

７

2.4 流出点

８

2.5 液体と容器との相互作用モデル

９2.5.1 自由落下状態の液体との相互作用

９2.5.2 静止状態の液体との相互作用

９2.5.3 液面の上昇

１０2.5.4 液体の流入

１０2.5.5 容器からの液体の流出

１１2.6 波のモデル

１２

2.6.1 波の表現

１２

2.6.2 水面と物体の相互作用

１３

3 波を考慮した粒子・体積モデル

１５

ii

3.1 液面の形成

１６3.2 容器揺動時の液面

１９3.3 仮想液体モデル

２１

3.3.1 容器と液面の相互作用

２１3.3.2 自由落下状態の液体と液面の相互作用

２２3.4 液面表示におけるアンチエイリアス
4 実験及び結果

２３
２６

4.1 実験システムの構成

２６

4.2 実験の様子

２７

4.3 実験結果及び評価

３３

5 むすび

３４

謝辞

３５

参考文献

３６

1

第1章

はじめに

近年バーチャルリアリティ(Virtual Reality：以下 VR)という新しい概念が人工物の考え方を変えようとしている．今までは人工物というと各種の製品であったり，人工環境といえば建物などの建造物が一般的であった．しかし，ＶＲは従来のものとは全く異なる人工物または人
工環境を生み出しつつある[1]．と言うのは，ＶＲとは，ＣＧなどによりただ表示しているというだけでなく，現実そのものではないが，現実の効力を有することにより現実そのもののように感じる仕組み，技術であり，実物と本質的に等価な代替人工物や代替人工環境を意味するからである．つまり VR は人工物や人工環境をコンピュータの世界として作り出し始めていると言える．
例えば，VR 技術の一つにバーチャルプロトタイピングというものがある．この技術は最終製品を造る前にバーチャルな製品を造り，その製品を評価することにより無駄な中間製品を生み出さずに済むというものである．これは，限りあるエネルギーや資源の節約につながる．
この技術を扱っている分野として，車やロケットの開発が挙げられる[2]．またそれだけではな
く，VR を利用すれば人それぞれの個性にあった製品が大量生産品と変わらない値段で手に入るようになることを意味している．それは，個人個人の好みへの対応を実現するとともに，今まで特別扱いをなされていた障害を持った人のための製品も同等に製造することが可能となる．これらは身の回りの製品にとどまらず，さらに大きな空間，住居や，都市のような大規模空間についても成り立つと考えられる．
このような VR 技術を用いて，仮想空間における様々な対話操作の研究も行われている．
従来から現在に至るまで対話操作の研究には，剛体や弾性体を移動，変形させることを目的としたものが多い[3][4]．しかし産業や医用の分野において，液体や気体の操作を行う部
分を仮想的に体験したいという要望がある[5]．その要望には，大きく分けて２つに分類できると考える．一つは，ある操作をした場合の液体等の正確な挙動を観測することが目的のもの．もう一つは，ある操作をすることが目的で，その過程において液体等を含めた状況を高い臨場感で表示するというものである．前者で必要とされることは液体の表現を厳密に行うことであり，後者ではいかに液体の表現を早く行い処理速度を速めれるか，が必要となる．

2
液体の表現に関しては，流体力学に基づいた計算を行うことで水面や水しぶきを表現する
ことは可能である[6]．近年，計算機の向上により厳密な計算を行い流体の挙動を正確に表現することもできる．しかし，そのためには多くの計算時間が必要でありリアルタイムの処理に応用することは難しい．
M．Muller らは，Smoothed Particle Hydrodynamics（以下ＳＰＨ法）と呼ばれる手法に改良を加えることで仮想流体の対話操作の実現を行っている[7]．ＳＰＨ法とは，流体を粒子の集合としてとらえその粒子の挙動を計算し表現することで，水面の大きな変形や水しぶきの表現を可能にする手法である．またこの手法は，井村らにも取り入れられ仮想流体の研究が行われている[8]．これらの研究では，液体の表現に関してはとても優れた結果を残している．
しかし，その処理速度は決して速いものではない．人は，10-12fps 以上の描画更新速度が保たれれば自分が操作している，つまり対話操作をしていると感じられると言われている．井村らの研究では約 15fps の処理速度で実現しており，対話操作と感じられるぎりぎりのものであるといえる．実用的なシステムを構築する際には液体の表現だけでなく様々な処理を行う必要があるため，この場合，多くの処理時間が必要な SPH 法を用いることは難しい．
一方，舟橋らの研究では仮想液体の操作に重点をおいており，非常に速い処理速度で仮想液体の対話操作を実現している[10]．液体を，粒子と体積という２つの状態としてとらえ計
算する新たなモデルを提案しており，落ちてくる液体を容器で受け取る，容器内の液体をこぼす，容器内の液体を他の容器ですくう，という操作を実現している．水面や水しぶきといった流体としての挙動は厳密に表現されていないが，これらの操作を実現することで操作者は液体を操作していると感じることができる．この研究での描画更新速度は，本研究における実験と同一の環境において 250fps を実現しており，対話操作に十分な処理速度を保っているといえる（詳しくは４章を参照されたい）．
また，水面や水しぶきの表現については舟橋らの仮想水泳システムの研究がある[11]． この研究は太平洋上を仮想的に泳いで渡るというアート的なコンテンツであり，その水面や水しぶきといったものは仮想的な人間が水泳を行う際の一つの効果として表現されている．そのため液体に関する厳密な挙動の計算は行われておらず，全体的な挙動に注目することで高速な処理を可能にしている．
そこで本研究では，実用的なシステム構築に用いることの可能な，高速処理が可能で臨場感の高い仮想液体の対話操作モデルを提案する．具体的には，前述の仮想液体の対話操作が可能な粒子・体積モデル[10]を基に，波と水しぶきの表現を可能にした仮想水泳シ
ステムの液体表現モデル[11]を統合し，対話操作に十分な処理速度を保ちつつ液体として

3の臨場感を向上させた仮想液体対話操作モデルを提案する．本モデルは，当研究室で開発している料理学習システム「バーチャルお料理教室」において利用される予定である．これは料理の手順を仮想空間内で体感的に確認することが可能なシステムであり，液体の厳密な挙動は必要ない．しかし，利用者にとって，高い臨場感は直感的に手順を把握する手助けになると考えている．

以下，2 章では提案モデルの基となる粒子・体積モデルと仮想水泳システムにおける水面
表示部分の波のモデルの概略を説明する．また３章ではそれら２つのモデルを統合した，仮想容器で対話操作可能な仮想液体における波の表現を実現した手法の説明をする．4 章
では，実験及び結果，5 章では本研究のまとめを述べる．

4

第2章

粒子・体積に基づくモデル，波のモデル

本章では本研究の基となった，舟橋らの粒子・体積モデルと波のモデルを説明する．詳し
くは文献[10][11]などを参考されたい．

粒子・体積モデルとは仮想液体の対話操作を非常に早い処理速度で実現したモデルである．液体としての厳密な挙動は再現されていないが，落ちてくる液体を容器で受け取る，容器内の液体をこぼす，容器内の液体を他の容器ですくう，という操作を実現することで液体としての効果を持たせている．
波のモデルは仮想水泳システム内で使われているモデルであり，一定間隔の格子状に区切られた平面で波の表現を行う．

本章で述べる各モデルのパラメータは舟橋らの研究で定められたものであるが，本研究で提案する仮想液体のモデルにも同様に使用しているものである．

52.1 液体のモデル
このモデルでは液体を以下の２つの状態で考えている．

状態（１）・・・自由落下状態（水道の蛇口から落ちる水など）

この状態の液体は粒子に基づく表現を行う．また，液体の微妙な挙動の再現ではなく対話操作を第一の目標としているため，各粒子の大きさは考えないものとし粒子同士の衝突な
ど干渉はおこらないものとしている．各粒子の３次元仮想空間内での時刻ｔにおける座標をPi(t)（ｉ= １，２，．．．，Ｎ；Ｎ：粒子数）とし，それぞれの粒子は重力，慣性に従って移動する．
これより，Pi(t)は 次式

Pi t =2 Pi t − t −Pi t −2  t g  t 2 . ・ ・ ・ 1

により決定している．ここで，ｇは下向きの重力加速度ベクトルであり，Δt は描画更新間隔，
すなわち描画更新レート（frames/sec．）である．空気抵抗による広がりを表現する場合，右辺に微小乱数値 Ri(t)を加える．

状態（２）・・・静止状態（コップなどにたまる水など）

この状態の液体は，容器内の対流などを考慮せず完全に静止した液体として扱うため体積に基づく表現を行っている．すなわち，ある時刻ｔにおいて仮想空間内に定義された容器
内に液体が存在する場合，その容器内の中には体積 V(t)の液体が存在している，と表現する．このとき上述した粒子としての性質は一切考慮していない．

また，上記２つの状態の換算は換算比 N[粒子数/体積]によって行っている．仮に，容器中に体積 V の静止状態の液体があり，そのすべて落下させると容器内の体積は 0 となり自由落下する粒子の数が NV 個となる．

6

2.2 仮想容器のモデル
仮想空間に定義する液体との相互作用を考慮すべき容器としては，操作者が移動させる
ことのできるものと，空間内に固定されたものが考えられる．この研究では両者を同様に扱い，また容器は凸形状であるものと仮定し以下のように各パラメータが設定されている．
このモデルでは仮想空間内に存在する容器に対して，容器を内包する中心 C，半径 r の球を考える．また，図 2.1 に示すように C を原点とする容器座標系（軸 xc，yc，zc）を設定する．
軸 Yc と球との交点（図中 d1）の位置の変化（極座標的な表現）により容器の傾きを表す．具
体的には，xc を軸として点 d1 が点 d2 に移動するように容器を角度 φ だけ回転し，更に Zc を軸として点 d ２が点 d ３に移動するように角度 θ だけ回転する．これにより，２つのパラメータφ と θ で容器の傾きを表現することができる．ともに値が 0 のときは，容器は「傾いていない」
状態である．更に，容器の方向の変化として Yc を軸として ψ だけ回転を行うが，これによる容器内に満たしうる液量の変化はない．これら C，φ，θ，ψ は，それぞれの容器ごとに設定され，移動する容器については時刻 t の関数として表されている．

図 2.1:仮想容器を内包する球と傾きの表現

7

2.3 液位，液面
容器内で静止している液体の液面の高さを液位と呼んでいる．また液面が最上位に達したときの体積を最大容積 Vm とする．容器に入っている液体の体積が V（V≧０）であるとき，
液位 H は点 C から鉛直方向へ H の位置に存在するものとする．

H = h  ,  , V  ・ ・ ・ 2

液位 H の存在範囲は，容器を内包する球の半径がｒであることから-r<H<r と分かるが，容器の形状や傾きによって更に狭い範囲に存在する．また式（2）を体積 V について変形する
ことにより次式を得る．

V =v  ,  ,H  ・ ・ ・ 3

式(3)において容器より下方の H を与えた場合 V=0，点 F よりも上方の H を与えた場合はV = v(θ， φ， Fy) = Vm(θ， φ)としている．点 F とは流出点のことであり詳しくは次項で説明する．このとき F ｙは F の鉛直方向の座標であり，角度 ψ に依存しない．
また，液位 H のときの液体の体積に液面よりも下方に存在する容器の厚みも考慮した体積をV  =v   ,  , H  ・ ・ ・ 4

とし，同様に液位が最大となるときは V+=Vm+と表現する．容器の厚みを考慮しない場合は V+=V として扱っている．

8

2.4 流出点
容器に入っている液体の体積が最上位液面を超えた場合に液体が溢れ出てくる点を流出
点 F とし，現実では流出点が線分になるときも液体は一点の流出点から溢れるものとしている．流出点 F を点 C を基準とする相対的なベクトル F として次式により表す．

F =f  ,  ,  ・ ・ ・ 592.5 液体と容器との相互作用モデル
2.5.1 自由落下状態の液体との相互作用
落下中の液体（粒子）が容器の口を通過した場合，その液体は状態（１）から状態（２）に変わる．実際の処理では，判定すべき容器を内包する球の中に存在する各粒子について詳し
い判定をすることにし，ある容器の口を通過した粒子が n 個（n≧0）の場合，その容器内の
時刻 t における液体の体積を次式により仮に設定している．

V  t 0= V  t − t n / N. ・ ・ ・ 6

次項で述べる移動容器と固定容器内の液体の干渉がなければ，時刻 t における容器内の液体の体積を V(t)(1)=V(t)(0)とし，H  t =h  ,  ,V  t 1  ・ ・ ・ 7

により液位を決定している．

2.5.2 静止状態の液体との相互作用
操作者が移動可能な容器（容器１）と固定された容器（容器２）の中の液体との相互作用について述べる．各記号の添字１，２は各容器１，２に対応している．
時刻 t において次式が成立する場合，容器１と容器２内の液体は互いに干渉している．

C 1y −r 1C 2y h 2 2 , 2, V 2 0 . ・ ・ ・ 8

ここで Cjy は容器 j の位置 Cj の鉛直方向の座標である．このとき，容器２内の液体の液位が容器１により上昇させられている体積を U21≧0 とし，また，容器２の液位が他の全ての容器

10により上昇させられている体積を上昇体積

U 2= j U 2j ・ ・ ・ 9としている．
容器と液体が干渉しており，かつ次式が成立するとき容器１の流出点よりも下の部分と容器２の液面が干渉している．

C 2y h 2 2 , 2, V 20Vm 1 C 1y F 1y . ・ ・ ・ 10

上式が成立しないとき，つまり容器２内の液体の中に容器１の流出点が入り込んだとき容器
１に容器２の液体が流入する，としている．

2.5.3 液面の上昇
容器と液面が干渉しているときは，容器１が容器２の液位を上昇させる．このとき，容器２の液位 H2 を次式を満たすように設定している．

H 2= h 2 2 , 2 ,V 20U 21  . ・ ・ ・ 11
U 21=v 1 1 , 1 ,C 2y H 2−C 1y  . ・ ・ ・ 12
また，それぞれの容器内の液体の体積を Vj(1)=Vj(0)とし，容器１の液位を式（7）により求める．

2.5.4 液体の流入
次式が成立する場合は容器１に液体が流れ込む．

C 2y H 2C 1y F 1y ・ ・ ・ 13

さらに次式が成立するなら，液体の流れ込みは容器２の液面が容器１の流出点に達した時
点でとまる．

11
V 20U 21−v 2 2 , 2 , C 1y F 1y −C 2y Vm 1−V 1 0 . ・ ・ ・ 14

この場合，容器２の液面が容器１の流出点となるよう設定する．

H 2= C 1y F 1y −C 2y . ・ ・ ・ 15

これに合わせて各容器の体積を次式（16）（17）により計算し，また容器１の液位を式（7）により決定する．

V 21=v 2 2 , 2 , H 2 −U 21 . ・ ・ ・ 16
V 11V 21=V 10 V 2 0 . ・ ・ ・ 17
式（14）が成立しないとき，容器１の流出点より容器２の液面が上方に存在する．このときは容器１の液体の体積 V1(1)を最大容積 Vm1 に，液面 H1 を r1 に設定し液面は考えない（表示しない）ものとする．容器２の液体の体積と液位は式（16）と次式により決定する．

H 2= h 2 2 , 2 ,V 21U 21  . ・ ・ ・ 18

このように設定することで，時刻 t+Δt において２つの容器の間での液体の移動がなくなった場合，液体をすくい取る操作を実現させている．

2.5.5 容器からの液体の流出
上述の干渉や容器の傾きにより，時刻ｔにおいて次式を満たす場合には液体が容器から流出する．

V 1U Vm . ・ ・ ・ 19

容器内の体積で表現されている液体の一部を N(V(1) + U – Vm)個の粒子として点 F から流出させ，時刻ｔにおける容器内の液体の体積を式（20）から決定している．

12
H 2= h 2 2 , 2 ,V 21U 21  . ・ ・ ・ 20

式（19）を満たさない場合は，液体粒子の流出はなく V(t)=V(t)(1)である．

13

2.6 波のモデル
2.6.1 波の表現
このモデルでは波の表現を行う水面を格子状に分割した平面として考えている．仮想水泳システムで使われている格子状の水面を図 2.2 に示す．ここで図中の数値は仮想空間内のものであり，現実の単位とは異なったものである．各格子点は上下方向のみに移動可能とし，
時刻 t における格子点(i，j)の高さを h[i][j]とする．

図 2.2:メッシュによる水面の表現

この格子点の波の伝播を考え，２次元波動方程式を差分方程式として解くことで水面の表現を行っている．2 次元波動方程式はリアルタイムでの計算が可能であるため，対話操作を第一の目的とする舟橋らの研究で取り入れられた．２次元波動方程式を次式に示す．

2
∂2 z
∂2 z
2 ∂ z
=v


. ･ ･･ 21222∂t∂z ∂ yここで，v は波が水面上を伝播する速度であり座標(x，y)における波の高さ z の関係を表している．これを格子点間隔 d で中心差分で近似することにより次式を得る．
h [i][ j]t t−2 h[i][ j ]th[i][ j]t− t /  t 2=h [i1][ j ]t h[i−1][ j]th[i][ j1]t h [i ][ j−1]t −4 h [i ][ j]tv 2 / d 2 ･･ ･  22

14
ここで簡略化のために，⊿t に対して次式
v 2  t2
1=･ ･ ･ 2322dが成立するように v と d を設定すると仮定することにより，h[i][j]に関する漸化式を得る．実際には波の減衰を考慮する必要があるため，次の漸化式に示すように右辺に減衰係数を乗じる．
h [i ][ j]t t=h[i1][ j]th[i−1][ j]th [i ][ j1]t h[ i][ j−1]t/2−h[i][ j ]t− t ×c･ ･ ･ 24

ここで c は減衰係数を表し，この研究では 0．97 に設定している．この波の減衰を考慮し減衰係数を乗じる手法はゲームなどでも用いられている手法である．

2.6.2 水面と物体の相互作用
前述したように，この波のモデルは仮想水泳システム上で水面を表示するためのモデルであり，液面と仮想的な泳いでいる人間との作用を考える必要がある．この仮想水泳システム
では，仮想人体を単純な直方体の組み合わせで表現し，操作用のモデルと描画用のモデルに分けている（図 2.3）．

図 2.3:人体操作用のモデルと描画用のモデル

15

水面と仮想人体との作用を計算するのは操作用のモデルのみであり，この相互作用は簡単化した手法で表現している．ある格子点が時刻 t-Δ ｔで直方体に含まれ，時刻ｔで含まれないとき格子点の高さを増加させる．その反対で，ある格子点が時刻ｔ-Δ ｔで直方体に含まれず，時刻 t で含まれるとき格子点の高さを減少させる．また，時刻ｔ，ｔ-Δ ｔの両方において直方体に含まれる場合はその格子点の高さを 0 としている．これにより，静止している仮想
人体に波が衝突した際の反射波の生成と，仮想人体が動くことによる波の生成を可能として
いる．

16

第3章

波を考慮した粒子・体積モデル

コップなど容器に入った液体の液面は，容器の移動とともに揺れ動いている．このような液面を流れている液体として表現し，仮想空間においてリアルタイムに描画処理を行うことは難しい．流体力学など液体の挙動を厳密に再現するための手法は，多くの計算量を必要とするためであり，揺れ動く液面を表現するには他の方法を考える必要がある．本章では，波の表現を取り入れた仮想液体の対話操作モデルについて述べる．

本研究は仮想液体を対話的に操作することを目的としているが，その対話操作モデルは舟橋らが提案している粒子・体積モデルを参考としている．この研究では液体の厳密な挙動を再現することに重点を置くのではなく，仮想液体の対話操作を実現することを第一の目標としているためである．
CG，VR の分野において液体などの流体を厳密に表現するためには，流体を粒子の集合としてとらえ，その粒子一つ一つを流体力学に基づいて計算する手法が一般的である．しかし，この手法は計算速度に重点を置かずその厳密な過程や結果を主な目的としたものであり，処理に時間がかかってしまうため対話操作への応用は厳しいと考えられる．
本研究では，前章で述べた波のモデルを参考にし，比較的処理に時間がかからずリアル
タイムの処理でも波の表現が可能である２次元波動方程式を用いることで，粒子・体積モデ
ルにおいて液面が揺れ動く仮想液体を表現する．

17

3.1 液面の形成
本研究の液面のモデルは前章で述べた波のモデルを基にする．なぜなら，この波のモデ
ルは 2 次元波動方程式を格子状に区切られた格子点において計算することで，波の表現を
リアルタイム処理で実現したものであり，対話操作を第一の目的としている本研究に適応可能と考えたためである．この波のモデルは，格子状に区切られた各格子点において計算されるため，その液面を表示する際は小さな格子を連続して表示することとなる．そのため，このモデルでは正方形，長方形にしか対応していない．しかし，本研究では仮想容器に入った液体の液面を表示することを目指しており，その液体の量や容器の傾きによって様々な多角形になると考えられる（図 3.1）．仮想空間内の仮想容器は凸形状のものを考えるため，その液面は凸多角形となる．ここでは，前述の波のモデルを改良し，凸多角形の液面を表現させる手法を述べる．

図 3.1:容器内の仮想液体の液面

仮想容器内に仮想液体が存在するとき，その液面である多角形の頂点座標を tn(xn,zn)とする（n：頂点番号）．ここで得られる多角形を格子状に区切られた平面上に対応させたものを
図 3.2 に示す.図中の×は液面として表示させたい格子を示す．また，この格子状に区切られた x-z 平面は容器座標系に依存する．ここで容器座標系とは，図 2.1（2.2 節）に示すように，仮想容器を内包する球の中心座標Ｃを原点とする座標系である．このため，仮想容器が

18
移動しても，傾きによって容器座標系に変化しなければ液面を更新する必要はない．

図 3.2:格子状に区切られた平面と凸多角形

容器内の液面を表示するには，上図において×で示された格子だけを液面として表示する必要がある．提案モデルでは点と凸多角形における内外判定を行うことで，図 3.2 中の×で示される格子を求める．
まず，ある点 N(a,b)が凸多角形の内側に存在するか判定する方法を述べる．点 N が多角形内に存在するとは，点Ｎが図 3.3 示されるようなときである．

図 3.3:点の内外判定

19

図 3.3 の通り，多角形内に存在する点は各辺から見て同じ方向にある．これは外積を用いて，(N-A)×(B-A)と(N-B)×(C-B)と(N-C)×(A-C)の符号がすべて等しければその頂点は内側に存在すると言うことができる．
凸多角形と各格子点について外積を用いた内外判定を行い，内側である格子点を含む格子を表示する．これにより，凸多角形の液面を表示することを可能にした．また，凸多角形の辺は仮想容器の壁面に相当するため，辺上に存在する格子点には高さを常に 0 とし波を反射させるという特徴を持たせる．この手法は従来の波のモデルでも用いられており，本稿
2.6.2 項で詳しく述べている．

20

3.2 容器揺動時の液面
現実でコップに入った水などの液体は，コップの動きに合わせてその液面が揺れ波立つ．
本研究の基となった粒子・体積モデルでは，仮想容器を揺らすときの液面の挙動について
次のように工夫している．
容器が移動した際，その移動方向に加速度が生じる．この加速度は，１ frame 前の容器の速度と現在の速度から求められるが，この加速度によって仮想容器に生じさせている下向きの重力加速度 g を擬似的に変更するというものである．この擬似的な重力加速度の変更に
より，容器内の液面は平らのままではあるが揺れ動くという挙動を実現している．この計算はとても単純なものであり，その対話操作性に影響は及ぼさない．そのため，本研究でも活用できると考える．
本研究では容器の移動による挙動を高速な処理速度を保ったまま表現するために，重力加速度の変化とともに，簡単なベクトル計算をすることで液面に波を発生させる．その提案
手法を以下に述べる．
表示すべき多角形の頂点列を t1・・・tn（n：3 以上の自然数）とする．また，時刻ｔにおいて液面（コップなど移動容器）の動いた方向ベクトルをｄ(t)とする．このとき，容器は３次元で移動するがｄ(t)は容器座標系上の x-z 平面の２次元だけ考える．多角形と移動する際の方向ベ
クトルｄ(t)を図 3.4 に示す．

図 3.4:液面（凸多角形）の移動

21

容器が移動し|ｄ|＞0 となったとき液面において挙動を変化させる必要がある．ここで，本研
究では厳密な挙動の再現を第一の目的とはしていないため経験的な値を与えることで波を発生させる．現実でコップなどを揺らしたとき，その移動方向で後ろに当たる液面から波が発生しているように見える．そこで，まず各辺の方向ベクトルと容器の移動した方向のベクト
ルｄとのなす角 θ（ｎ）（0°＜θ(n)＜360°，n：頂点番号）を求め（図 3.5），なす角 θ(n)がθ(n)＜180°を満たす辺で波を発生させる．またこのとき，なす角の大きさに応じて波の高さを変更する．

図 3.5:方向ベクトルと各辺のなす角 θ(n)22

3.3 仮想液体操作モデル
基本的な仮想液体の定義は，２章で述べた粒子・体積モデルを基に行っている．そのため，液位や液面，流出点の説明は省略し，粒子・体積モデルで使用された記号・式を用いて述べる．

3.3.1 容器と液面の相互作用
操作者が移動可能な容器（容器１）と，固定された容器（容器２）の中の液体の液面の相互作用について述べる．
時刻 t において式（8）（2.5.2 節）が成立する場合，容器１と容器２内の液体は互いに干渉している．このとき，容器２内の液体の液面には図 3.6 のように容器 1 の入り込んだ部分の形をした穴をあける必要がある．本研究での液面表示は，3.2 節で述べたように内外判定を用
いて多角形の内側の格子点を表示させているため，穴をあけるという操作をするためには，容器１の液体内に入り込んだ部分の多角形を求めその多角形内の点を意図的に外側であるとすれば良い．

図 3.6:仮想液体と仮想容器の干渉

23

またこのとき，従来手法で仮想人体と水面においてなされている相互作用の手法を取り入れることで，液面に仮想容器が触れたり液体内で容器が動いた際の波の挙動を付け加えた．
詳しくは 2.6.2 項を参照されたい．

3.3.2 自由落下状態の液体と液面の相互作用
各容器内に存在する仮想液体と自由落下状態の液体との相互作用について述べる．本
研究では粒子・体積モデルと同様，自由落下状態の液体は粒子として考えている．落下中の液体（粒子）が容器の口を通過した場合，その液体は自由落下状態から静止状態に変わる．この液体（粒子）を体積へと変化することで液体としての効果を持たせている．本研究では，仮想液体の液面で波立たせることを実現させており，この自由落下状態の液体（粒子）が液面に達したとき，同時に液面に波が立つという効果も持たせることとする．その手法を述べる．
自由落下状態の液体としての粒子は，3 次元座標上での座標を Pi(t)（ｉ= １，２，．．．，Ｎ；
Ｎ：粒子数）とし，それぞれは重力，慣性に従って移動する．よって Pi(t)は重力加速度ベクト
ルｇと描画更新レート⊿ｔにより式（１）（2.1 節）にように表されている．ある粒子が時刻ｔで仮
想容器の口を通過したとき，換算率Ｎ（粒子数/ｃｃ）によって静止状態の液体へと変換される．
よって，自由落下してきた液体が液面に達した際の挙動を再現するには，仮想容器の口を通過する⊿t 秒前の粒子の座標 Pi(t-⊿t)を容器座標系へと変換しこの座標において格子点の高さを減少させることにより波を発生させる．

24

3.4 液面表示におけるアンチエイリアス
3.2 節で述べた手法には問題も含まれていた．まず,図 3.1 における×の部分をすべて同じ色で描画した場合を図 3.8 に示す．

図 3.8:格子状に区切られた凸多角形の液面格子状に区切られた平面上で表示させたい多角形をあてはめるため，多角形の辺に当たる部分で格子単位より細かく描画することができずギザギザが目立っていた．これでは，仮想液体の液面として波立つことでの液体らしさの向上はできても，やはり不自然さが残ってしまうことも考えられる．そこで新たにアンチエイリアスを行う処理を加える．
例えばコンピュータで扱う画像はピクセル単位より細かく描画することができず，物体の輪
郭にギザギザが発生してしまう．このとき少しでもギザギザを目立たなくさせるため色を少しずつ滑らかにすることをアンチエイリアスという．
本モデルで表現された波を表示するにあたりアンチエイリアスを行うため，各格子点に注目して内外判定を行っていたところを格子点の中間点においても同様に内外判定を行うこととする．多角形の頂点付近に注目し，内外判定を行って印を付けたものを図 3.9 に示す．

25

図 3.9:格子点とその中間点の内外判定

こうして中間点の判定も行うことで，ある格子点(x，z)において(x，z)，(x，z+0．5)，(x，z+1)，(x+0．5，z)，(x+0．5，z+0．5)，(x+0．5，z+1)，(x+1，z)，(x+1，z+0．5)，(x+1，z+1)の９点の内外判定の結果を用いて，その内側である割合を算出する．このとき，その内側にある割合により色を変化させることで９段階の色に分けることができる．図 3.2 で与えられる多角形において，仮に３段階でアンチエイリアシングをおこなった場合の液面のサンプルを図 3.10 に示す．
この手法により，表示における不自然さを低減する．

図 3.10:液面表示におけるアンチエイリアス

26

第4章 実験及び結果
4.1 実験システムの構成
上述のモデルに基づいた仮想液体の対話操作のための実験システムを
CPU:AMD Athlon(tm) MP Processor 1．2GHz × 2
GPU:GeForce4 MX 440 64MB
上で C 言語により実現した．
本実験システムでは，仮想液体が入れられる仮想容器を操作者が移動可能である移動容器と操作することはできない固定容器の２種類を実装する．移動容器の位置と傾きは低周波の磁界を利用したモーションセンサまたはマウスによって入力される．本実験システムではモーションセンサは POLHEMUS 社の POLHEMUS-3SPACE ISOTRAK Ⅱ を用いた．
各仮想容器の形状の初期状態は図 4.1，2 に示す形に設定され，固定容器には 8500cc相当の仮想液体が入っているものとする．また自由落下状態の液体の粒子数と静止状態の液体の体積の換算率 N は 10 粒子数/cc とする．液面を表示する際の格子は 4cm 相当の間隔としている．また，画面右上の仮想的な蛇口を作成する．ここからは 1frame あたり 1cc 相
当の液体が無限に流出している．また，地面より下方に落下した液体は消滅させている．
ここで述べる単位は仮想空間内で仮に設定したものであり，現実の大きさに合わせたものではない．

図 4.1:固定容器

図 4.2:移動容器

27

4.2 実験の様子
実際に実験を行っている様子を図 4.3 に示す．モーションセンサをコップに取り付けること
でコップ型のデバイスとし，操作者は感覚的に仮想容器を操作することが可能となっている．

図 4.3:実際に動かしている様子

28

仮想液体の対話操作を行う仮想空間の初期状態は，図 4.4 に示すように固定容器にある程度の仮想液体が入っており，移動可能な容器は空で画面中央付近に傾いていない状態
である．
また，画面右上には仮想液体が無限に生み出される仮想的な蛇口がある．

図 4.4:初期状態

29

次に仮想液体が仮想容器からこぼれる様子を図 4.5，（a）（ｂ）に示す．容器を傾けることで中に入っていた液体がこぼれ落ちていることが分かる．

（a）

（b）
図 4.5:仮想液体がこぼれる様子

30

図 4.6，（a）（ｂ）に液面が揺れ動いている様子を示し，図 4.7，（a）（b）には自由落下状態の液体が液面に落下するときの挙動を示す．容器を揺らすことにより液面が揺れ動いていることが確認できる．また，液体が落下したところから液面に波が発生していることが分かる．

（a）

（b）
図 4.6:波立つ液面の様子

31

(a)

(b)
図 4.7:自由落下状態の液体と液面の相互作用

32

仮想容器と液面の相互作用も組み込まれており（図 4.8），移動容器をスプーン型のものに変更することで，図 4.9（a）（b）に示すような仮想液体の操作も可能である．

図 4.8:液面と仮想容器の干渉

33

(a)

(b)
図 4.9:仮想スプーンによる仮想液体の操作

34

4.3 実験結果及び評価
本研究の基となった粒子・体積モデル（従来手法）と，本研究で提案する手法（改良手法）
を処理速度の面から比較した．
処理速度を描画更新速度(fps)を基に比較する．このときの比較要素としてマウスを使用した場合とモーションセンサを用いたコップ型のデバイスを使用した場合．また，自由に移動できる容器を操作せず描画のみをした場合と，各デバイスによって容器を操作した際の描画更新速度も比較した．結果を表 4.1 に示す．

表 4.1:処理速度における実験結果

マウス使用

モーションセンサ使用

従来手法

提案手法

表示のみ

平均 250fps

平均 120fps

操作時

平均 230fps

平均 80fps

表示のみ

平均 65fps

平均 60fps

操作時

平均 65fps

平均 60fps

一般に，対話操作には約 15fps 以上の処理速度が必要とされている．粒子・体積モデル
は対話操作性を重視したモデルであり，この結果からその処理速度は非常に早いことが分かる．また本研究で提案するモデルも，対話操作を実現するのに十分な処理速度を保っているといえる．
モーションセンサを用いたコップ型のデバイスを使用した際の結果については，両モデルの更新速度にあまり違いが見られない．これは，センサの更新速度の制約によるものである．
センサを用いた場合も対話操作を行える処理速度を保っている．
また，数名の被験者に実際に波立つ液面モデルの仮想液体の対話操作体験してもらった
ところ，粒子・体積モデルと比較して液体らしさが増しており，より自然な液体に感じるなど積極的な意見をいただいた．操作感という点でも実際に移動容器を動かしていると感じるといった感想が多かったため，仮想液体の対話操作という第一の目的は達成されたといえる．

35

第5章 むすび

本研究は仮想液体の対話操作を第一の目的とし，高速な処理速度を保ったまま液体としての効果を高めることを目的としている．仮想液体の挙動を厳密に再現するには様々な方法が考えられるが，リアルタイムで処理をするための計算時間を考慮した場合応用できるものは少ない．本研究で提案する仮想液体のモデルを用いることで，自由落下してくる液体を仮想容器で受け止める，他の容器に入っている液体をすくう，容器内の液体をこぼす，という操作がリアルタイムで可能であり，その液面を操作に応じて波立たせることが可能となった．
また，仮想水泳システムで実現されている水しぶきの表現について本システムに構築中である．
今後の課題として，次のようなことができるようにすることが挙げられる．
●

水しぶきの表現
上述したように，仮想水泳システムでは水しぶきの表現が実現されている．波の高さがある閾値を超えると水しぶきが発生するといった挙動の実現．

●

仮想的な流れの表現
実際の液体には流れがあり，それによって液面の挙動が変わる．液体の入った容器をスプーンのようなものでかき回すと渦が巻くといった挙動の実現．

●

色情報を持つ液体の干渉
例えば，コーヒーにクリームを入れるといった，２色以上の色の液体を混ぜることによる挙動の実現．

●

重さ情報を持つ仮想物体のとの相互作用容器だけでなく仮想空間内に操作可能な物体を作成し，それら物体が仮想液体に浮いたり沈んだりするような挙動の実現．

また，仮想液体モデルを他の VR コンテンツへ組み込むことも今後の課題である．小栗らが開発している料理学習システム「バーチャルお料理システム」などに効果としての液体という位置づけで組み込むことを検討中である．

36

謝辞

本研究を進めるにあたって，日頃から多大な御尽力をいただき，御指導を賜った名古屋工業大学 舟橋健司 准教授に心から感謝致します．
また，本研究に対して御検討，御協力を頂きました名古屋工業大学 伊藤宏隆 助教，中部大学 岩堀祐之 教授，名古屋工業大学 中村剛士 准教授，愛知大学 福井真二 講
師に心から感謝致します．
最後に，本研究を進めるにあたり多大な協力を頂いた舟橋研究室諸氏に心から感謝致し
ます．

37

参考文献
[1]日本バーチャルリアリティ学会,サイバースペースと仮想都市研究委員会，
http://www.vrsj.org/main.html[2]榛澤和敏，大槻靖，石田士朗，”ロケットの開発におけるヴァーチャルプロトタイピングシ
ステムの機能要件および仕様の確立”，石川島播磨技報，Vol.44, No.1, 2004.

[3]鈴木茂樹,山田雅之，宮崎慎也，長谷川純一，安田孝美，横井茂樹，”高速処理に適した弾性プリミティブモデルによる仮想弾性物体とのリアルタイムインタラクション”，芸術科学会論文誌，Vol.2, No.1, pp.8-14, 2003.

[4]X.Guo,J.Hua，H.Qin，”Touch-Based Haptics for Interactive Editing on Point Set
Surfaces”，IEEE Computer Graphics and Applications，Vol.24, No.6, pp.31-39, 2004.

[5]VR 医学会，http://www.jsmvr.umin.ne.jp/[6]中林功一，伊藤基之，鬼頭修己，”流体力学の基礎（1）”，コロナ社，1993.

[7]Matthias Muller， Simon Schirm， Matthias Teschner，”Interactive Blood Simulation for
Virtual Surgery Based on Smoothed Particle Hydrodynamics”，ACM Technology and
Health Care, Vol.12, No.1, pp.25-31, 2004.

[8]井村誠孝，天田崇，安室喜弘，眞鍋佳嗣，千原國宏，”複合現実環境における仮想流体とのインタラクション”，日本バーチャルリアリティ学会第１０回大会論文，p549-p552, 2005.

[9]小栗進一郎，”一般家庭を対象とした VR 調理学習システムのための固体郡操作モデルの検討”，平成 19 年度名古屋工業大学卒業研究論文, 2008.

38[10]舟橋健司，岩堀祐之，”仮想容器による仮想液体の対話操作モデルと一実現法”，日本
バーチャルリアリティ学会論文誌，Vol.5, No.4, pp.1087-1094, 2000.

[11]舟橋健司，シドニー・フェルズ，”仮想水泳のための対話的な波と水しぶきの表現，Expression of Water Wave and Splash for Interactive Virtual Swimming”，日本バーチャルリ
アリティ学会論文誌，Vol.10, No.3, pp.421-428, 2005.