平成 21 年度

卒業研究論文VR 化学実験システムのための
仮想液体モデルにおける側面描画

指導教員
舟橋

名古屋工業大学
平成 18 年度

菅瀬

情報工学科

18115080 番

和弘

健司

准教授

i

目次

第 1 章 はじめに

1

第 2 章 粒子・体積モデルに基づく液体の表現

42.1

液体のモデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

2.2

仮想容器のモデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62.3

液体の挙動計算、および容器と液体との相互干渉モデル . . . . . . . . . . . .

7

2.3.1

流出点、液位および液体体積の算出 . . . . . . . . . . . . . . . . . . .

7

2.3.2

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

8

2.4

色の変化を考慮した粒子・体積モデル . . . . . . . . . . . . . . . . . . . . . . 11

2.4.1

液面のモデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.4.2

拡散方程式、液面色の拡散の表現 . . . . . . . . . . . . . . . . . . . . 12

2.4.3

外部からの液体による色の変化 . . . . . . . . . . . . . . . . . . . . . 16

第 3 章 容器の側面から見た液体の色の表現

18

3.1

容器および液体の側面について . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.2

容器側面の半透明化

3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.1

光の透過による透明度の考慮

3.2.2

容器側面の背面と前面 . . . . . . . . . . . . . . . . . . . . . . . . . . 21

. . . . . . . . . . . . . . . . . . . . . . 20

容器越しに見える液体側面の描画および色の表現 . . . . . . . . . . . . . . . 23

3.3.1

液体側面のモデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.2

色の流入地点の検出、色の拡散 . . . . . . . . . . . . . . . . . . . . . 24

3.3.3

DCS バッファの分割 . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.3.4

容器側面への貼り付けによる液体側面の表示 . . . . . . . . . . . . . . 28

第 4 章 実験及び結果

29

4.1

実験システムの説明

4.2

実験の様子

4.3

実験結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

ii

第 5 章 むすび

37

謝辞

39

参考文献

40

1

第 1 章 はじめに

近年、バーチャルリアリティ(Virtual Realty:以下、VR) 技術がより大きく発展し、我々の生活環境に多大な影響を及ぼしている。以前の我々の生活環境は建造物や製品などのいわゆる有体物に囲まれたものであった。しかし、VR 技術はこれらの有体物とは全く異なる新たな概念を持った生活環境、物体の概念を構築しつつある。というのは、VR 技術がCG(Computer Graphics) の様にコンピュータの画面上にただグラフィックスを表示させるだけのものではなく、コンピュータ内において仮想的な現実感を形成し実際にはそこに物体はないがあたかも物体がある様に実感できる技術であるからである。つまり VR 技術は実物と本質的に等価な人工物体、人工環境を仮想的に生み出す事が可能であり、この技術を用いて我々の存在する世界や環境を再現する事により新しい世界観が生まれつつある [1]。

VR 技術の一例として、インタラクティブアートというものがある [2]。この技術は、インターネットに公開されている芸術品を、作者だけではなく観客も何らかの方法で参加させることにより完成させる芸術の一形態である。インターネットにおけるアートの多くはこの技術を用いて表現されているものであり、作品とそれを見る人の対話によって形成される。そのため、観客が手を加えることによって様々な相互作用を生み出し、全く新しい仮想的な芸
術環境を構築することが可能である。また、この様な技術を通じて人々が仮想的な対話操作をすることにより、現実とは違うが現実らしい新たな世界観を生み出す可能性があると言えよう。
こういった VR 技術を用いた仮想的な対話操作の可能性は日々拡大しつつある。この VR技術を用いた主な研究として、剛体や弾性体の移動、変形を行うものがある [3][4]。
この様に芸術分野やその他の分野にも需要があるように広く普及している VR 技術は、産業や医療等の分野においても研究が進められている。その中で、液体、気体の操作を行う場
面があり、それらを仮想的に体験したいという声もある [5]。仮想的に液体を操作したいと要望が出る主な理由は、実験コストの削減や貴重な物質による実験をより容易に行うことが出来るためである。また、この様な要望は日常生活における仮想的な料理体験やアミューズ
メントの分野への対応も可能であるため、様々な分野において広く受け入れられる。この要
望は、液体の挙動を厳密に観測しその結果を調べる目的と、仮想的に実験等を行いより臨場感ある状態で対話的に気体や液体の操作を行いたいという 2 つの目的に大別出来る。前者の様な液体の厳密な挙動を観測する目的に対しては、流体力学等の式を用いて計算を行うこと

第1章

はじめに

2

で観測することが可能である [6]。しかし、流体力学等に関する計算を行うには非常に多くの計算時間が必要であり、リアルタイムでの対話処理を行うことは難しい。
一方、対話操作を行うことを目的とした後者については、M. Muller らが Smoothed Particle

Hydrodynamics(以下 SPH 法) に改良を加えた研究があり [7]、この研究は主に仮想流体の対
話操作の実現を目的として行われている。SPH 法とは、流体を粒子の集合として考え、その粒子一つ一つの挙動を計算し表現することで、水面の大きな変形や水しぶきの表現を可能にした手法である。またこの手法は、井村らにも取り入れられ仮想流体の対話操作としての研究が行われている [8]。これらの研究では、液体の挙動の表現として非常に優れた結果を残しているものの、計算に多くの時間を要するため処理速度は決して速いものとは言えない。人は 10-12fps 以上の描画更新速度が保たれれば、リアルタイムで対話操作をしているものとして感じられる。井村らの研究においては、GPGPU(General Purpose computing on

Graphics Processing Units) を用いて平均して 15fps の処理速度を実現しており、前述した描画更新速度を限界に近い範囲で対話操作を実現している。しかし、実用的なシステムの構
築には液体の表現だけではなくそれ以外の様々な剛体などの表現も必要であるため、多くの処理時間を要する SPH 法を過不足なくシステムに導入することは難しい。
一方、当研究室においてはこれまでに、仮想液体の操作に重点を置いた研究を進めており、非常に速い処理速度での対話操作を実現している。この研究では液体を粒子と体積の 2つの状態としてとらえ計算する新たなモデルを提案しており、落ちてくる液体を容器で受け取る, 容器内の液体をこぼすといった液体操作の基本的な動作を可能としている。従来の研究ではさらに液体の上面における色の表現についても研究され、外部から注がれた他の色の液体によって容器内の液体上面において色が拡がっていく様子を表現することも可能となった。これまでの研究成果においても、描画更新速度は約 120fps を実現している。これは一つのシステム内において、対話操作性を維持しつつ液体の表現に加え様々な処理を実行するために十分な処理速度を保っていると言える。
この仮想液体モデルの応用の１つとして、dVR 化学実験システム c を考えている。これは小中学校の理科の実験で行われる、液体と液体の混合による色の変化を確かめたり溶液の性質を調べたりする作業を、仮想的に行うことによってより安全で簡易的に行うことを可能としたシステムである。このシステムを完成させるには、液体の挙動だけではなく液体や容器の表示についても着目しなければならない。何故なら、液体や容器の表示を改善すること
で、液体を操作している実感をより直感的に把握する手助けとなり、臨場感の向上に繋がるからである。
これまでの研究では液体の挙動について主に考えていた。また、近年における研究では、液体の表示に関する改善として、前述した通り液体上面のみにおいての色の表現を可能とした。そこで本研究では、ガラスのコップや、化学実験における実験器具のように透明な容器

第1章

はじめに

3

を通した側面からの液体の表現、および側面から見た液体の色の混ざり方の表現を行う。加
えて、この液体側面の描画を臨場感を高めつつ十分な処理速度で行うことで、リアルタイム
で操作が可能な仮想液体モデルを実現する。
以下、2 章では従来の研究である粒子・体積モデルおよび液体上面における色の変化についての概略を記す。そして、3 章では本研究成果である仮想的に対話操作が可能な液体側面の描画および側面から見た液体の色の拡がり表現を実現した手法について述べる。4 章では実験および結果、5 章では本研究のまとめを述べる。

4

第 2 章 粒子・体積モデルに基づく液体の表現

本節では、従来の研究で液体の挙動について考慮する際の基礎となった粒子・体積モデルについての説明を行う (詳しくは文献 [9][10][11] を参照)。
粒子・体積モデルとは、仮想液体を粒子と体積の 2 つの状態に分けて考えることにより、非常に速い処理速度での対話操作を可能としたモデルである。このモデルでは、液体の基本的な操作として落ちてくる液体を容器で受け止める、容器内の液体をこぼす、容器内の液体を他の容器ですくう、液面を波立たせる、等の操作が可能である。

第2章

粒子・体積モデルに基づく液体の表現

2.1

液体のモデル5

仮想空間における液体のモデルは、液体を以下の 2 つの状態に分けて考えている。

• 状態 (1)…自由落下状態 (水道の蛇口から落ちる水、容器からこぼれる水など)• 状態 (2)…静止状態 (コップ等の容器内に溜まる水など)
状態 (1) の液体は粒子に基づく表現を行う。また、液体の厳密な挙動の再現ではなく対話操
作を第一の目標としているため、各粒子の大きさは考えないものとし、粒子同士の衝突など干渉は起こらないものとしている。各粒子の 3 次元仮想空間内での時刻 t における座標を

Pi (t)(i = 1, 2, ...,N ; N:粒子数) とし、それぞれの粒子は重力、慣性に従って移動する。これ
より、Pi (t) は、次式

Pi (t) = 2Pi (t − ∆t) − Pi (t − 2∆t) + g∆t2

(2.1)

により決定される。ここで、g は下向きの重力加速度ベクトルであり、∆t は描画更新速度、
すなわち描画更新レート (frames/sec.) である。空気抵抗による広がりを表現する場合、(2.1)
式の右辺に微小乱数値 Ri (t) を加える。
状態 (1) の液体は体積に基づく表現を行う。ある時刻 t において仮想空間内に定義した容器内に液体が存在する場合、その容器内の中には体積 V (t) の液体が存在している、と表現する。この時、上述した粒子としての液体の性質は一切考慮しない。また、この状態の液体
は、容器内の対流などの大きな挙動については考慮しないが、臨場感を出すために表面的な挙動として液体上面 (以下、液面) に波の表現を付加している。
上記した 2 つの状態の換算は、換算比 N[粒子数/体積] によって行っている。例として、容器内に体積 V の液体があったとし、その液体全てを落下させた時、容器内の体積は 0 とな
り、自由落下状態の液体の粒子数は NV 個となる。

第2章

粒子・体積モデルに基づく液体の表現

2.2

仮想容器のモデル6

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

図 2.1: 仮想容器を内包する球 (左) および傾きの表現方法 (右)第2章

粒子・体積モデルに基づく液体の表現

2.3

液体の挙動計算、および容器と液体との相互干渉モデル

2.3.1

流出点、液位および液体体積の算出

7

容器内に存在する液体の体積が容器の最大容積を超えた場合、容器から液体が流出する。
この流出しだす容器の点を流出点 F と定義する。厳密には流出点が線分になる場合もある
が、この研究モデルにおいてはそのような例は考えず、液体は一点の流出点から流れ出すものとしている。流出点 F を容器を内包する球の中心点 C を基準とする相対的なベクトル F
として次式に表す。

F = f (θ, φ, ψ)(2.2)

容器内で静止している液体の液面の高さを液位と呼ぶ。本モデルにおいて、完全な静止状態にある液体の液面を基準とし、以下、この液面を基準液面と呼ぶ。また、液位および液面が容器の最上部に達した時の体積を最大容積 Vm とする。容器内の液体の体積が V (V >= 0)であるとき、液位 H は球の中心点 C から鉛直方向へ H の位置に存在するものとする。以下にその詳細を示す。

H = h(θ, φ, V )(2.3)

液位 H の存在範囲は、容器を内包する球の半径が r であるため、-r< H <r となるが、容器の形状や傾きによって更に狭い範囲に存在する。式 (3.1) を体積 V について変形すること
により次式が得られる。

V = v(θ, φ, h)(2.4)

式 (2.4) において、容器より下方の H を与えた場合は V = 0、流出点 F よりも上方の Hを与えた場合は V = v(θ, φ, Fy ) = Vm (θ, φ) と定義する。このとき、Fy は F の鉛直方向の座標であり、角度 ψ には依存しない。
また、液位 H のときの基準液面よりも下方に存在する容器の厚みを考慮した体積を以下の (2.5) 式のように定義し、上記内容と同様液位が最大となるときは V + = Vm + と表現する。容器の厚みを考慮しない場合、V + = V として扱う。

V + = v + (θ, φ, H)

(2.5)

第2章

粒子・体積モデルに基づく液体の表現

2.3.2

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

8

容器内に存在する液体が外部からの液体によって干渉される場合、容器内に存在する液体の体積や液位は変化する。その変化は、外部からの液体の状態によって異なる。対話操作のための描画処理速度の観点から、2.1 節で述べた自由落下状態と静止状態の 2 つの状態に限定し、簡易的な液体の挙動を実現した。本節では、2 つの状態における液体と容器内の液体との相互作用モデルについて述べる。
まず、自由落下状態の液体が干渉した場合の相互作用について述べる。落下中の液体 (粒子) が基準液面に達した場合、その液体を状態 (1) から状態 (2) に変換する。つまり、粒子としての液体を消滅させ、体積としての液体に換算する。実際の処理においては、判定すべき容器を内包する球の中に存在する各粒子についてのみ詳細を決定し、容器の口を通過した粒子が n 個 (n >= 0) の場合、その容器内の時刻 t における流体の体積 V (t) および液位 H(t)は次式の様になる。

V (t) = V (t − ∆t) + n/N(2.6)

H(t) = h(θ, φ, V (t))(2.7)

次に、移動容器を容器 1、固定容器を容器 2 とし、2 つの容器内にある液体との相互作用および干渉について述べる。各記号の添字 1,2 は各容器 1,2 に対応している。時刻 t において式 (3.7) が成立する場合、容器 1 と容器 2 内の液体は互いに干渉しているものとする。

C1y − r1 < C2y + h2 (θ2 , φ2 , V2 )(2.8)

式 (3.7) において、Cky は容器 k の位置 Ck の鉛直方向の座標である。この時、容器 2 内の液体の液位が容器 1 により上昇させられている体積を U21 (U21 >= 0) とし、容器 2 の液位が他 n 個の全ての容器により上昇させられている体積を式 (2.9) の様に定義する。

U2 =

n
∑

U2k

(2.9)

k=1

容器と液体が干渉しており、かつ次式 (2.10) が成立する場合は、容器 1 の流出点よりも下の部分と容器 2 の基準液面が干渉する。

C2y + h2 (θ2 , φ2 , V2 + Vm+1 ) < C1y + F1y(2.10)

上式 (2.10) が成立しない場合、容器 2 内の液体内に容器 1 の流出点が入り込んだと見な
し、容器 1 に容器 2 内の液体を流入させる。また、容器 1 が容器 2 内の液体に干渉してい第2章

粒子・体積モデルに基づく液体の表現

9る時、容器 1 内に含まれる容器 2 の液面部分は本来存在しないため描画されてはいけない。
従って、式 (3.7) が成立する場合、容器 2 の液面は図 2.2 のように容器 1 によって干渉された部分にその形をした穴を開ける必要がある。この穴の形成は、液面の格子点表示による点の内外判定を利用すれば容易に行える。

図 2.2: 静止状態の液体の干渉における穴の形成

容器 1 によって容器 2 の液位が上昇している時、容器 2 の液位 H2 を式 (2.11) を満たすよ
うに設定する。式 (2.11) において、上昇体積 U21 は式 (3.2) のようにして求められる。

H2 = h2 (θ2 , φ2 , V2 + U21 )(2.11)

U21 = v1+ (θ1 , φ1 , C2y + H2 − C1y )(2.12)式 (2.13) を満たすとき、容器 1 に容器 2 の液体が流入する。またその時、さらに式 (2.14)が成立する場合、液体の流れ込みは容器 2 の基準液面が容器 1 の流出点に達した時点で止まる。

C2y + H2 = C1y + F1y(2.13)

V2 + U21 − v2 (θ2 , φ2 , C1y + F1y − C2y ) < Vm1 − V1

(2.14)

第2章

粒子・体積モデルに基づく液体の表現

10

時刻 t において容器 1 内に容器 2 の液体が流入し始め、時刻 t + ∆t において容器間の流入が完了したものとする。それぞれの時刻における容器内の液体の体積および液位をそれぞれ V1 (t), H2 (t + ∆t) のように添字として表す。この時、流入が完了した際の容器 2 の液位

H2 (t + ∆t) および体積 V2 (t + ∆t) は、次式 (2.15)、(2.16) により決定する。
H2 (t + ∆t) = (C1y + F1y ) − C2y(2.15)V2 (t + ∆t) = v2 (θ2 , φ2 , H2 (t + ∆t)) − U21(2.16)

上式において、式 (2.15) は容器 2 内の液位が容器 1 により上昇させられている事を考慮して求められている。同様にして、時刻 t + ∆t における容器 1 の液位 H1 (t + ∆t) および体積

V1 (t + ∆t) は、次式 (2.17)、(2.18) および上式により決定する。
H1 (t + ∆t) = h1 (θ1 , φ1 , V1 (t + ∆t))(2.17)V1 (t + ∆t) + V2 (t + ∆t) = V1 (t) + V2 (t)(2.18)

時刻 t + ∆t において式 (2.14) が成立しない場合、容器 1 の流出点より容器 2 の基準液面が上方に存在する。この場合は容器 1 の液体の体積 V1 (t+∆t) を最大容積 Vm1 、液位 H1 (t+∆t)を r1 に設定し、液面は表示しないものとする。この場合での容器 2 の液体の体積および液位は、それぞれ式 (2.16) および次式 (2.19) により決定する。

H1 (t + ∆t) = h2 (θ2 , φ2 , V2 (t + ∆t) + U21 )(2.19)

以上の設定により、時刻 t + ∆t において容器 1 と容器 2 の間での液体の移動がなくなった場合に、液体をすくい取るという操作が可能となる。

第2章

粒子・体積モデルに基づく液体の表現

2.4

色の変化を考慮した粒子・体積モデル11

本節では、従来の研究で開発された液体上面 (以下、液面) における色の混ざりを表現す
る手法についての説明を行う (詳しくは文献 [12] を参照されたい)。
ある液体の液面にインクなどの色の付いた液体を流入すると、流入地点のまわりの色と混合しながらゆっくりとその領域を広げて色が拡散する。実際の厳密な挙動を再現するには、液面の流れ、内部の対流、流入液体の性質など様々な要因を考慮しなければならない。こういった厳密な挙動を再現するには、流体力学などの手法を用いることで表現可能である。しかし、これらの手法を実現するには非常に多くの計算量を必要とし、本研究の第一の目的であるリアルタイムでの対話操作には不向きである。従って、従来の研究において、液面での色の変化を考慮するべく新手法による仮想液体の対話操作モデルが提案された。この新手法
ではリアルタイムで計算が可能な拡散方程式 [13] を用いることにより、粒子・体積モデルに基づく仮想液体の液面の色の変化を可能とした。

2.4.1

液面のモデル

本章冒頭で記述した通り、従来の研究においても、リアルタイムで計算可能な式を用い対話操作性を維持することを第一の目的としていた。従って従来の粒子法を用いることは出来ず、そのため新手法を考案し液面における色の拡散表現を可能とした。以下、その新手法について記述する。
まず液面のモデルの表示方法について説明を行う。従来の研究の基となった粒子・体積モ
デルでは、液面を格子状に分割し、その各格子点において波の表現、および液面の表示を行っている。色の拡散表現についても同様の格子状の液面を想定して行う。そして、各格子
点に色の情報を持たせることにより液面の色の表現を可能とする。各格子点は、色の情報
として色のベクトル値 C(RGBA 値) および色の伝播を実現するための重みを表す変数 P (以下、重み P ) を持つ。例えば、ある格子点は重み P で色 C である、という表現を行う。図2.3 に概念図を示す。なお、色のベクトル値 C(RGBA 値) とは、光の三原色である赤 (R)、
緑 (G)、青 (B)、および色の透明度を示す Alpha 値 (A) によって決定される、色を表現する
際に用いられる手法の一つである。

第2章

粒子・体積モデルに基づく液体の表現

12

図 2.3: 同色における重み P の違いによる色の濃淡の違い

2.4.2

拡散方程式、液面色の拡散の表現

本節では、色の自然的な拡散の表現に用いる拡散方程式およびそれを用いた色の拡散表現について説明を行う。
自然界において、静止状態の水の中にある液体が静かに流入した場合、その液体は時間とともに水全体に広がり、やがて混ざり合い均一な状態になる。これは、流入液体内の微小粒子や溶媒内の微小粒子が衝突を繰り返しながらランダムに熱運動し、溶媒中に広がっていくためである。このような現象は拡散現象と呼ばれ、これを数学的に記述した式を拡散方程式という。拡散方程式は、物質における熱伝導や粒子の密度変化の過程をシミュレートする際にも用いられる。
次式 (2.20) に、2 次元拡散方程式を示す。

∂Q(x, y, t)∂ 2 Q(x, y, t) ∂ 2 Q(x, y, t)
= D(
+
)
∂t
∂x2
∂y 2

(2.20)

ある多量の粒子が時刻を重ね溶媒中に拡散していく状態を考える。上式 (2.20) において、

Q は時刻 t の x,y 平面上における粒子の濃度分布、D は拡散係数と言い粒子が拡散する速度を調整する定数である。この式 (2.20) を液面の格子点間隔 d を用いて中央差分で近似する
ことで式 (2.21) を得る。

第2章

粒子・体積モデルに基づく液体の表現(Q[i][j](t + ∆t) − Q[i][j](t))∆tD(Q[i + 1][j](t) + Q[i − 1][j](t) + Q[i][j + 1](t) + Q[i][j − 1](t))=
d24Q[i][j](t))
−
d2

13

(2.21)

上式 (2.21) において、Q[i][j](t) は時刻 t の格子点 (i,j) における粒子の濃度を示す。ここで、微小時間 ∆t について、

D∆t
= D0
d2

(2.22)とおき、簡略化を行う。これによって得られた式を式 (2.23) に示す。

(Q[i][j](t + ∆t))

(2.23)= Q[i][j](t) + D0 (Q[i + 1][j](t) + Q[i − 1][j](t) + Q[i][j + 1](t) + Q[i][j − 1](t))−D0 (4Q[i][j](t))
この D0 の値を調整することで、Q の値が拡散する速度を調整する事が出来る。この式 (2.23)を用いて、Q[i][j](t + ∆t) を求めることが出来る。
次に、上述の拡散方程式を用い、液面における色の拡散方法について述べる。色の拡散は
重み P を拡散させる事により表現が可能となる。従って、まず液面を格子状に分割する。この格子は前節で述べた格子と同じものである。この格子状の液面に対して、上述の拡散方程式を差分方程式として解いたものを適応し、重み P を拡散させる。なお液面の色の拡散表
現において、その表示によりリアリティを持たせるべく、液面から液体内部に向けて ∆h 程
度の間隔で数枚の液面を想定し、それらの情報も液面に反映させている。図 2.4 にその概念図を示す。これらの想定された液面においては計算のみを行い、実質表示する液面は 1 枚のみである。計算においては、上述の 2 次元拡散方程式を基に、3 次元拡張したモデルを用いる。式 (3.3) に重み P についての 3 次元拡散方程式を示す。

∂P (x, y, z, t)∂ 2 P (x, y, z, t) ∂ 2 P (x, y, z, t) ∂ 2 P (x, y, z, t)
= D(
+
+
)
∂t
∂x2
∂y 2
∂z 2

(2.24)

現段階において、液面の拡散計算は 3 枚の液面を想定して行っている。以下に、式 (3.3)
を中央差分により近似し簡略化した漸化式を示す。

第2章

粒子・体積モデルに基づく液体の表現

14(P [i][j][k](t + ∆t)) − P [i][j][k](t)(2.25)
D0= P [i + 1][j][k](t) + P [i − 1][j][k](t) + P [i][j + 1][k](t) + P [i][j − 1][k](t)+P [i][j][k + 1](t) + P [i][j][k − 1](t) − 6P [i][j][k](t)各格子点には、初期状態では色のベクトル値 C の初期値と、容器内に存在する体積としての液体を換算比 N[粒子数/体積] で粒子数に直したものを、容器内の格子点数で割った値
を重み P の初期値として用いている。

図 2.4: 液面における色の拡がり表現の付与

この手法を用いて、毎フレームごとにおいて各格子点の重み P を拡散させる事が出来るが、それに伴い各格子点の持つ色の値 C も変化させる必要がある。以下に重み P を用いて、液面の色を生成する手法を述べる。
各格子点の時刻 t + ∆t における色の値 C を式 (2.26) を用いて決定する。

第2章

粒子・体積モデルに基づく液体の表現

15(c[i][j][k](t + ∆t)) − C[i][j][k](t)) × P [i][j][k](t + ∆t)(2.26)
D0= C[i + 1][j][k](t) × P [i + 1][j][k](t) + C[i − 1][j][k](t) × P [i − 1][j][k](t)+C[i][j + 1][k](t) × P [i][j + 1][k](t) + C[i][j − 1][k](t) × P [i][j − 1][k](t)+C[i][j][k + 1](t) × P [i][j][k + 1](t) + C[i][j][k − 1](t) × P [i][j][k − 1](t)−6P [i][j][k](t)上式に示す通り、各格子点の色の時刻 t + ∆t における値は、式 (2.25) により求めた時刻

t + ∆t の重み P の値と、時刻 t における近傍格子点の色 C および重み P の値により表される。
毎フレームごとに重み P を求め、それを元に色 C を生成し液面に表示されることで、液面の色が徐々に拡散していく様子を実現する事が出来る。また拡散が進み各格子点に重み Pの値が均等に分布し、格子点間において重みの勾配が小さくなった場合、および初期状態においては、拡散は行われるものの、重み P の値が平衡状態に近くなるため液面の色は変化していないように見える。

第2章

粒子・体積モデルに基づく液体の表現

2.4.3

外部からの液体による色の変化

16

容器内に存在する液体に外部からの液体が干渉した場合、容器内に存在する液体の液面色は変化をなす。この変化について計算を行う場合は、2.3.2 節と同様に、外部からの液体の状態を調べ、その状態における液体との相互作用による色の変化を考える。
まず自由落下状態の液体との相互作用について述べる。従来の研究では、粒子・体積モデ
ルと同様に、自由落下状態の液体を粒子として考えている。落下中の液体 (粒子) が各容器の基準液面に達した際、粒子としての液体から体積としての液体に換算され、容器内の体積が増加する (詳しくは 2.3.2 節参照) 粒子としての液体が液面に達したとき、その粒子が持つ色と容器液面の色とを混合する必要がある。以下に、その手法を述べる。
自由落下状態の液体の粒子は、3 次元仮想空間内での時刻 t における座標が Pi (t)(i =1, 2, · · · , N ; N :粒子数) で表される。各粒子の座標は重力、慣性および描画更新レート ∆t に従い式 (1) の様にして計算される (2.1 節参照)。時刻 t においてある自由落下状態の液体が基準液面に達した場合、その流入地点の位置座標は、t − ∆t の粒子状態の液体の位置座標
を、容器座標系に変換することで近似的に求めることが出来る。その地点において、次式を用いて流入地点の座標 (x, y, z) における色の重み P および色 C を更新する。

P [x][y][z](t + ∆t) = P [x][y][z](t) + α

C[x][y][z](t + ∆t) =C[x][y][z](t) × P [x][y][z](t) + I
P [x][y][z](t + ∆t)(2.27)(2.28)

α は色の濃度の増加度、I は流入した粒子の色の値 (RGBA 値) であり、α の初期値は通常計算する液面の格子点数で 1 を割ったものを用いる。式 (3.7)(2.28) により求めた色の重み

P および色 C を、前節での拡散方程式に従い、毎フレーム更新することで液面に流入した色が拡がっていく様子を実現する。また、液体の流入により容器内の液体の液位が流出点を越え、液体が溢れ出した場合の粒子状態の液体の色は、液面の色の平均の値としている。液面色の平均値の算出は、容器内に存在する格子点数 dnum と色の値から次式の様にして算出される。

∑
AV ERAGE =dnum C[i][j][k](t)dnum(2.29)

第2章

粒子・体積モデルに基づく液体の表現

17

次に、静止状態の液体との相互作用について述べる。時刻 t において式 (2.13) が成立する
場合、固定容器 (容器 2) 内の液体が移動容器 (容器 1) に流入する。この時、容器 1 の液面色
は、容器 2 から流入してきた液体の色のより変化させる必要がある。以下にその手法について述べる。
容器 1 内に液体が存在している場合での液体の流入について考える。容器 2 内の液体が容器 1 に流入した際の、容器 1 の液面における流入地点を (x1 , y1 , z1 ) とし、容器 2 の液面における流出地点を (x2 , y2 , z2 ) とする。容器 2 の流出地点と、容器 1 の流入地点およびその近傍点で液面間の色の伝播を行い、2.4.2 節の手法により液面色を拡散させ、流入した際の色の拡がりを表現する。伝播は、流入地点およびその近傍点に、流出地点の色の値 C を与え、重み P には流入による容器 1 の増加体積を換算比 N[粒子数/体積] で粒子数に直した値を伝播させる格子点数で割った値を与える。
容器 1 内に液体が存在していない場合における液体の流入は、容器 2 の液面色の平均値を求めこれを容器 1 の液面色として行う。以上の手法により、静止状態の液体との相互作用による色の変化が可能となる。

18

第 3 章 容器の側面から見た液体の色の表現

ある仮想容器内に存在する液体において、液体の挙動および液面における色の拡散表現
を、前章で述べた従来の手法により行う。しかしこの手法では、液面、すなわち液体上面のみを描画し、側面、すなわち透明（あるいは半透明）の容器を通して見える液体部分の描画については考慮していない。また、仮想容器についても、ワイヤーフレームモデルを用いて描画するなど簡易的な表現を行っている。これは何故かと言えば、液体の内部における挙動を考慮する場合、流体力学に基づいた対流や流れの計算等を行う必要があり、その多大な計算量により描画処理速度が低下しリアルタイムでの対話操作性に支障をきたす可能性があるためである。
そこで本研究では、透明（あるいは半透明）の容器を通して見える液体部分を液体内部そのものの色ではなく、液体上面で簡易的に色の拡散表現を行ったように、容器側面においても同様の処理を用いて色の拡散表現を行うことにより、簡易的な液体内部の表現および臨場感の向上を目指す。

第3章

容器の側面から見た液体の色の表現

3.1

容器および液体の側面について

19

本節では、本章冒頭で記述した d 側面 c という言葉を改めて定義する。まず、仮想容器の形状は凸型で多面体だと限定して考え、以後この形状の容器を前提として液体の挙動を考える (2.2 節参照)。
図 3.1(左) の様に、凸形状の例として八角柱の容器とその内部に存在する液体を考える。
この図の場合、容器を構成する全ての面を d 容器側面 c と定義する。また、液体の上面部分を改めて d 液面 c と定義し、その他の容器側面に接している全ての液体部分を d 液体側面 cと定義する。この液体側面はいわゆる底面部分も含むものとする。
液体側面は、液体の揺動による波の表現を行わないものとする。よって、その形状は容器側面の形状に従い、図 3.1(左) の様な形状の容器内に液体を入れた場合、液体側面は容器の形状と同様に八角柱となる (図 3.1(右))。この図の様に液体側面を目視で確認出来る様にするためには、図 3.1(左) における容器側面を半透明または透明にし、容器越しに液体側面が視える様にする必要がある。従来の手法では液体の挙動について主に考えており、液体の表示については重要視していなかった。そのため、本研究では液体の表示について注目し、仮想容器越しに液体側面を確認できる容器モデルおよび液体側面の描画手法の提案を行う。

図 3.1: 一般的な仮想容器 (左) とその容器内に存在する液体の形状 (右)第3章

容器の側面から見た液体の色の表現

3.2

容器側面の半透明化

3.2.1

光の透過による透明度の考慮

20

容器モデルを改善し、容器越しに液体側面が視える様にするためには、ワイヤーフレーム
モデルではなくサーフェイスモデルを用いて容器全体を描画し、また容器側面において透明度を考慮することにより達成出来る。しかし、この透明度を容器側面の全てにおいて一様に考慮し CG として描画するだけでは、実験器具の様なガラス製の容器をあまり高いリアリ
ティで再現出来ない。何故なら、実際のガラス製の容器には厚みがあり、また光の反射や屈折等によって、容器側面の各面ポリゴンを視点位置から見た時の角度により透明度が様々に変化するためである。このため、容器の各側面ポリゴンにおける透明度を正確に求めなければならない。これはレイトレーシング法等を用いることで正確に求められるが、この方法には多大な計算量を要するためリアルタイムで描画処理を行うことは難しい。そこで、本節では容器の各側面ポリゴンにおける透明度を手動で調整し適切に割り当てることにより、より短い計算時間でリアリティの高い、ガラス製容器の様な、透明度を考慮した容器の描画方法を提案する。
容器の各側面ポリゴンにおける透明度を考慮するために、容器側面の各々の面ポリゴンの面法線ベクトル n、および視点位置 E と各側面ポリゴンの重心とを結ぶベクトル e を考え、この 2 つのベクトルの間になす角 θ の余弦を求める。図 3.2 に、i 番目の側面ポリゴンにおける ni ,ei , 角 θi を図示する。以下、容器の形状を M 個の側面ポリゴンを持つ凸型多面体だとおき説明する。この容器は凸型多面体であれば、角柱に限らず角錐にも対応でき、様々な形状の容器について適用が可能である。この容器における M 個の側面ポリゴンのうち、i(i=0,1,· · · ,M-1) 番目の側面ポリゴンに着目して考える。この面の面法線ベクトルを ni 、視点位置とこの面の重心とを結ぶベクトルを ei とした時、これらのベクトルが間になす角 θi の余弦

cosθi は式 (3.1) となる。
ni · ei√cosθi = √||ni ||2 ||ei ||2(3.1)

この余弦 cosθi の値を用いて i 番目の側面ポリゴンにおける透明度 Ti の調整を行う。以下の
式 (3.2) に Ti の算出式を示す。

Ti = |cosθi |(3.2)

具体的な例として、余弦 cosθi が 0 である場合、θi = π2 となり、これは ni と ei が互いに垂直である事を示す。この場合での i 番目の側面ポリゴンは最も光を透過せず、従って透明度 Ti は最小値である 0 となる。また逆に、余弦 cosθi が ±1 である場合、θi = π または 0 と第3章

容器の側面から見た液体の色の表現

21

図 3.2: 各側面ポリゴンにおける面法線ベク 図 3.3: 光の透過による透明性を考慮した容器
トル
側面なり、これは ni と ei が互いに平行である事を示す。この場合での i 番目の側面ポリゴンは最も光を透過し、従って透明度 Ti は最大値である 1 となる。図 3.3 にその詳細を示す。この
図の各側面ポリゴンにおいて、その色が濃いほど透明度 T が最小となり、薄いほど透明度

T が最大となることを示している。

3.2.2

容器側面の背面と前面

前述した容器の各側面ポリゴンにおける透明度の調整に加え、各側面ポリゴンの面法線ベクトルがある境界平面よりも視点方向側を向いているか否かを判定し、それによって場合分けを行う。この判定方法には、前節で求めた i 番目の側面ポリゴンにおける余弦 cosθi の値
を用いて行い、境界平面には容器 3 次元仮想空間内における z = 0 平面を考える。この cosθiの値が負の値であった場合、i 番目の側面ポリゴンはこの z = 0 平面よりも視点方向とは逆側を向くと判定する。また逆に、cosθi の値が正または 0 であった場合、i 番目の側面ポリゴ
ンはこの z = 0 平面よりも視点方向側を向くと判定する。この判定方法によって各側面ポリゴンを場合分けし、視点方向側を向く側面ポリゴンを前面、視点方向とは逆側を向く側面ポ
リゴンを背面とする。
この様に前面、 背面と言った場合分けを行う理由は、主に 2 つある。一つは、容器や液体の各側面ポリゴンが視点位置からどれだけ離れているかの度合 (以下、深度) を求め、深度が深いものから順に描画を行うことによって、視点位置から見た場合の半透明物体に奥行

第3章

容器の側面から見た液体の色の表現

22

きを持たせるためである。これをデプスソート法 (ペインタアルゴリズム) という。この方法を用いて、容器の背面、液面 (液体上面および液体側面)、容器の前面という順番で描画する。これにより透明度が考慮された容器側面に奥行きを持たせる事が可能となる。
もう一つの理由は、液体側面を描画する際にコストを削減するためである。これは 3.3.1
節で詳しく説明する。液体側面を描画する際は、容器側面に用いた前面、 背面の場合分け
と同様の手法を用い、前面と判定された液体側面のみを描画する。これにより、必要としない液体側面の描画処理を最小限に抑える事が出来る。図 3.4 に、余弦 cosθ の値により容器の各側面ポリゴンを前面、背面に場合分けした結果を示す。図 3.4 において、点 E は視点位置を示し、容器の側面ポリゴンの色が薄いものは場合分けにより前面 (視点方向側) と判定されたものである。また逆に、容器の側面ポリゴンの色が濃いものは場合分けにより背面 (視点方向と逆側) と判定されたものである。

図 3.4: 容器側面の場合分けを行った結果

第3章

容器の側面から見た液体の色の表現

3.3

容器越しに見える液体側面の描画および色の表現

23

前節までは、仮想容器越しに液体側面を確認できるための容器モデルの改良手法について述べた。本節では、容器内に存在する液体の側面を描画し、容器越しに見える液体側面において色の拡がりを実現する手法について述べる。従来の研究では液体上面のみの描画および色の表現を行っていたが、この液体上面の描画手法を液体側面に適用することで前述した表現を行う。また同時に、リアルタイムでの描画処理を可能とし、液体側面における色の変化を考慮した仮想液体の対話操作モデルを提案する。

3.3.1

液体側面のモデル

本研究では容器内に存在する液体の側面を描画し、容器越しに見た時の液体側面における色の拡がり表現を行うことを目的としている。また、この液体側面では、液体上面とは違い波の表現は考慮しないものとする。ある凸型多角形の容器内に液体を入れた場合、その液体の側面は 3.1 節で述べたように、容器の形状によって形成される。この時液体側面は複数の側面ポリゴンによって形成され、液体上面の様に一枚の面上で色の拡散表現を行うことが出来ない。従って、以下における手法を考え、その手法に基づいた液体側面モデルを提案する。なお、ここで提案する液体側面モデルは、対話操作の実現のために容器を真横から見た場合の色の拡散を計算し容器側面に投影することで、液体内部における簡易的な色の拡がり表現を行うモデルである。そのため、例えば水平面に対して 45◦ 程度の角度から液体側面を見た場合、厳密には正しくない表現である。
まずこの液体側面モデルは、2.4 節で述べた液体上面のモデルにおいて、波の表現を考慮
しない状態での液体上面モデルを基礎として考える。一枚の面ポリゴンを格子状に分割したものを考え、その各格子点に色情報値を持たせ拡散方程式によって色を拡散させる (次節参照)。この面ポリゴンを DCS(the Diﬀusion of Color in the Sides) バッファと定義し、このDCS バッファ内において色の拡散に関する計算を全て行う。その後ここで計算した結果を液体側面に反映する。具体的にはこの DCS バッファを分割し、図 3.2 に示す様な適切な位置に液体側面として貼り付ける事により反映を行う。これによって、液体側面の描画、およびそこでの色の表現を可能とする。

DCS バッファの大きさは次のようにして定義する。2.2 節において仮想容器を内包する球を考え、その半径を r とした。DCS バッファの大きさはこの r を用いて、πr × πr の大きさを持つ正方形であると定義する。図 3.5(右) にその旨を示す。この様な大きさを指定した理由を以下に記す。液体側面における色の拡がり表現を描画するためには、その側面全体の大きさ分だけが必要となる。一般的な容器の形状として図 3.5(左) の様な円柱の容器を考え、この容器を内包する球の半径を r とする。この場合、2πr × 2πr 大きさ分だけの DCS バッ

第3章

容器の側面から見た液体の色の表現

24

ファを考えることにより、十分に広い範囲で色の拡散計算が行えるため、不具合無く液体側面における色の表現を行うことが可能となる。しかし、実際にこのバッファを貼り付ける対
象は、3.2.2 節の判定法を用いて前面に場合分けされた液体側面のみである (3.3.3 節参照)。
従って、実際の色の拡散計算に必要な範囲は液体側面の面積の半分となり、πr × πr の大きさ分だけの DCS バッファを考えれば十分となる。

図 3.5: 容器を内包する球 (左) と定義する DCS バッファの大きさ (右)3.3.2

色の流入地点の検出、色の拡散

格子状に分割された DCS バッファにおいて、その各格子点に色情報値を持たせ拡散方程式を用いて色を拡散させる。この時、DCS バッファ内の格子点における格子点間隔 d や拡散係数 D については 2.4 節で定義したものと同じものを用いる。

DCS バッファの各格子点の座標値は、液体上面の格子点の座標値と関係を持ち、DCS
バッファの最上点が液位の高さ h となるようにする。すなわち、3 次元仮想空間内において液体上面より下に DCS バッファがあるものとし、バッファの最上点から常に色の拡散が行われるものとする。また、DCS バッファの全ての格子点の z 座標値は容器を内包する球の中心点の z 座標値とする (図 3.6 参照)。いま、時刻 t において、液体上面の格子点座標

Gsurf (x(t), h, z(t)) に外部からの液体が流入したとする。この時、バッファにおける色の流
入地点の座標値 Gbuf は (x(t), h, Cz ) となる。ここで Cz は容器を内包する球の中心の z 座標値である。この Gbuf (x(t), h, Cz ) に流入液体の色ベクトル値 C および色の重み P を持た第3章

容器の側面から見た液体の色の表現

25

せ、液体上面の色の拡散に伴いバッファ内にも色を拡散させる。ここで、DCS バッファにおける色の拡散は常に最上点から行われるため、鉛直上方向への拡散は行わないものとする。
式 (3.3) に DCS バッファの各格子点における重み P についての 3 次元拡散方程式を示す。

∂P (x, y, z, t)∂ 2 P (x, y, z, t) ∂ 2 P (x, y, z, t) ∂ 2 P (x, y, z, t)
+
+
)
= D(
∂t
∂x2
∂y 2
∂z 2

(3.3)

この式 (3.3) を用いて時刻 t + ∆t における各格子点の色情報値を求める。また、液体上面における色の拡散方法と同様、z = Cz から視点位置から見て背面方向に、∆s 間隔で数枚のDCS バッファを想定し、これらの色の拡散情報も一つの DCS バッファに反映することにする。今回は液体上面と同様に 3 枚の DCS バッファを想定し実装を行う。以下に式 (3.3) を中央差分により近似し簡略化した漸化式を示す。

(P [i][j][k](t + ∆t)) − P [i][j][k](t)D0= P [i + 1][j][k](t) + P [i − 1][j][k](t) + P [i][j + 1][k](t)(3.4)+P [i][j][k + 1](t) + P [i][j][k − 1](t) − 5P [i][j][k](t)

D∆t
= D0
d2

(3.5)

式 (3.5) において、P [i][j][k](t) は時刻 t における格子点座標 (i, j, k) での色の重みであり、

D0 は拡散係数 D について、式 (3.5) の様に簡略化をしたものである。この式 (3.5) を用いて
時刻 t + ∆t における各格子点の色の重み P を求める。この時、式 (3.5) から分かるように、

DCS バッファ内での色の拡散は 2.4.2 節における液体上面の色の拡散とは違い、鉛直上方向への拡散は行わない。また、各格子点における重み P の初期値は液体上面と同様、色のベ
クトル値の初期値と、容器内に存在する体積としての液体を換算比 N[粒子数/体積] で粒子数に直したものを、容器内の格子点数で割った値を用いる。
上述した手法により DCS バッファにおける各格子点の重み P を毎フレームごとに拡散させる。これに基づき、各格子点の持つ色の値 C を変化させる。以下に、重み P を用いてDCS バッファ内での色の拡散を実現する手法について述べる。各格子点の時刻 t + ∆t における色の値 C を式 (3.7) を用いて決定する。

(c[i][j][k](t + ∆t)) − C[i][j][k](t)) × P [i][j][k](t + ∆t)(3.6)
D0= C[i + 1][j][k](t) × P [i + 1][j][k](t) + C[i − 1][j][k](t) × P [i − 1][j][k](t)+C[i][j + 1][k](t) × P [i][j + 1][k](t) + C[i][j][k + 1](t) × P [i][j][k + 1](t)+C[i][j][k − 1](t) × P [i][j][k − 1](t) − 5P [i][j][k](t)第3章

容器の側面から見た液体の色の表現

26

図 3.6: 色の流出地点の検出方法

各格子点の色の時刻 t + ∆t における値は、式 (3.5) により求めた時刻 t + ∆t での重み P と、
時刻 t における近傍格子点の色 C および重み P の値により表される。
以上の手法により、時刻 t において外部からの液体が流入した時の DCS バッファにおける色の流入地点を求め、色の拡散に関する計算を行う。

3.3.3

DCS バッファの分割

前節では DCS バッファ内での色の拡散計算を行う手法について述べた。本節ではこのバッファを分割し、色の拡散情報を容器側面に反映する手法について述べる。ここで、DCS バッ
ファを貼り付ける対象とする容器側面のポリゴンは、その面が前面に場合分けされた側面ポ
リゴンのみとする。何故なら、背面と場合分けされた側面ポリゴンは視点位置から容器を見た場合に液体上面や前面の側面ポリゴンによって隠れ、非常に見え辛くなるため描画する必
要性がないからである。以後液体側面に関する全ての描画は、前面に場合分けされた容器側面に対してのみ行うものとする。
前面に場合分けされた容器側面に貼り付けるために、DCS バッファを以下の手法により分割していく。3 次元仮想空間内において、視点位置 E から容器を内包する球の中心点 C を見た時のベクトル s を考え、この s に直行する軸を定める。この軸を WS(the Width of theSides) 軸と定義する。この軸はグローバル座標系に従う。また、ベクトル s がグローバル座標系における Z 軸に平行である時、WS 軸はグローバル座標系における X 軸に平行となる(図 3.7 参照)。WS 軸の原点は前面に場合分けされた容器側面の面ポリゴンを構成する頂点座標のうち、最も左端にある点 (グローバル座標系において最も-X 方向にある点) に一致さ

第3章

容器の側面から見た液体の色の表現

27

せる。またグローバル座標系における+X 軸方向を正方向とし、この軸を用いて各側面ポリゴンの幅を求める。WS 軸の概念図を図 3.7 に示す。この図の場合、ベクトル s がグローバ
ル座標系における Z 軸に平行であるため、WS 軸は X 軸に平行となる。この時、各側面ポ
リゴンの幅は側面ポリゴンを構成する頂点の x 座標の差により求められ、同様にして図 3.7
内にある Wi として表す。この添字 i は容器側面の番号 i に一致する。
これにより求められた各側面ポリゴンの幅 Wi を用いて、DCS バッファの分割を行う。分
割された DCS バッファを DCS バッファ断片と呼ぶ。また、容器側面のうち前面に場合分けされた側面ポリゴンの総数を m とする。この時、DCS バッファの大きさは πr × πr である
ため (3.3.1 節参照)、i 番目の側面ポリゴンに j(j=0,1 · · · m) 番目の DCS バッファ断片を貼り付ける場合、j 番目の DCS バッファ断片に割り当てられるバッファの長さ Lj は、式 (3.7)となる。

Wi
Lj = ∑m

k=1 Wk

× πr

(3.7)

図 3.8 に分割した DCS バッファを示す。また、式 (3.7) から分かるように、全ての Lj ((j=0,1,· · · ,m) を総和すると、DCS バッファの横幅の長さ πr となる。この手法を用いることによって、液体の各側面ポリゴンに対して十分な大きさのバッファ領域を割り当てる事ができ、過不足無く色の拡散表現を行うことが可能となる。

図 3.7: WS 軸の配置、概念図

図 3.8: WS 軸を用いて計測した幅から必要なバッファ断片の長さを設定し分割した DCS
バッファ

第3章

容器の側面から見た液体の色の表現

3.3.4

容器側面への貼り付けによる液体側面の表示28

前節の手法により分割された DCS バッファの各断片を容器側面に貼り付けることにより、液体側面の表示、ならびにそこでの色の表現を行う。各バッファ断片を貼り付ける方法として、テクスチャマッピング法を用いる [14]。すなわち、各バッファ断片内における各格子点が持つ色情報値を保存し、このバッファ断片をテクスチャ画像として指定された容器側面ポリゴンにマッピングすることで、液体側面の描画を行う。また、毎フレームごとに各格子点の色の重み P を更新し、それによって色のベクトル値 C を変化させることで、液体側面における色の拡がり表現を可能とする。図 3.9 に概念図を示す。

図 3.9: バッファ断片をテクスチャマッピングする様子

29

第 4 章 実験及び結果

4.1

実験システムの説明

上述のモデルに基づいた仮想液体の対話操作のための実験システムを

CPU:Dual-Core AMD Opteron(tm) Processor 1210 1.8GHz
GPU:GeForce 7600 GT 256MB
上で C 言語により実装した。なお、GPU は GPGPU としては利用していない。
本実験システムにおいて、仮想容器として 2 種類の容器を実装する。すなわち、操作者が自由に移動操作出来る移動容器、および移動操作が不可能な固定容器である。移動容器の位置と傾きは低周波の磁界を利用したモーションセンサまたはマウスによって入力される。
モーションセンサとして本実験システムでは、POLHEMUS 社の 3SPACE ISOTRAK II を用いた。このセンサは磁気変換技術の応用により対象物体の 3 次元位置座標値およびオイ
ラー角の 6 自由度をリアルタイムに計測することが出来る。
固定容器には初期状態で 5000cc 相当の仮想液体が入っているものとし、移動容器および固定容器の形状は図 4.1 および図 4.2 に示す形に設定する。また、自由落下液体の液体の粒子数と静止状態の液体体積の換算率 N は 10[粒子数/cc] とした。液体上面および液体側面を表示する際の格子点間隔 d は 3mm 相当とし、色の拡がり計算に利用する液体上面および液体側面の枚数はそれぞれ 3 枚とした。また、画面右上に仮想的な蛇口を設け、ここから

1frame あたり 1cc 相当の液体を無限に流出させる。この蛇口から流出した液体は地面より下方に落下した時点で消滅させる。

図 4.1: 固定容器

図 4.2: 移動容器

第4章

実験及び結果

4.2

実験の様子

30

実際に実験を行っている様子を以下に示す。モーションセンサをコップに取り付けたコップ型のデバイスを用いて実験を行った。これにより、操作者は感覚的に仮想容器を操作することが可能である。

図 4.3: コップ型デバイスを用いて実験を行っている様子

第4章

実験及び結果31

仮想液体の対話操作を行う仮想空間は、仮想容器の位置や傾きを入力していない状態で図4.4 のようになっている。この図の様に、仮想空間には蛇口が設置され、そこから絶えず粒子状態の仮想液体を発生させ自由落下させている。また、仮想空間内の床面に設置された固定容器内には一定量の仮想液体が存在しており、傾きはない。移動容器は画面中央にあり、内部に仮想液体はなく傾きもない状態である。

図 4.4: 仮想容器の位置や傾きを入力していない状態

第4章

実験及び結果32

まず、従来手法による、移動容器内の液体がこぼれて固定容器内へ流入し固定容器の液体
上面の色が変化する様子を示す。図 4.5(1)-(4) にあるように固定容器内に液体が流入してから徐々に色が拡散しているのが分かる。

図 4.5: 自由落下状態の液体の流入による固定容器の液体上面の色の変化

第4章

実験及び結果33

次に、容器側面に対して半透明化を行った結果を図 4.6(1)-(4) に示す。容器の回転に応じて適宜各側面ポリゴンの透明度を求め変化させることにより、ガラスの様な表現を行うことが出来たと考えられる。

図 4.6: 容器の回転に応じた各側面ポリゴンにおける透明度の変化

第4章

実験及び結果34

固定容器内における液体側面の色の変化の様子を図 4.7 に示す。液体上面での色の拡散に合わせ、液体側面において徐々に色が拡がり一色に染まっていく様子が確認できる。

図 4.7: 液体の流入による固定容器の液体側面での色の変化

第4章

実験及び結果35

この液体側面モデルは任意の凸多面体容器に対応可能である。移動容器を多角錐に変更
し、その容器内に存在する液体に異なる色の液体が流入している様子を図 4.8 に示す。液体の流入に伴い、液体側面で色が拡散していることが確認できる。

図 4.8: 多角錐の移動容器内に別の色の液体が流入している様子

第4章

実験及び結果

4.3

実験結果

36

本モデルの処理速度を、描画更新速度 (fps) の観点から計測した。移動容器、固定容器はそれぞれ図 4.1、図 4.2 のものを使用し、マウスによる操作、およびモーションセンサを用いたコップ型デバイスによる操作の 2 つの操作手法を用いて実験を行った。これらの手法について、容器をワイヤフレームモデルで描画し液体上面のみに色の変化を考慮した状態 (従来モデル)、従来モデルに加え容器を透明度を考慮しガラスの様な表現で描画した状態 (提案モデル 1)、さらに液体側面における色の変化までを考慮した状態 (提案モデル 2) でそれぞれ描画した場合の描画更新速度を計測し、その比較を行った。結果を表 4.1 に示す。
hhhh
hhhh
hhh測定対象モデル
従来モデル
hhhh
使用するデバイスhhhh

マウス
モーションセンサ

160fps
30fps

提案モデル 1

提案モデル 2135fps
30fps

65fps
23fps

表 4.1: 描画更新速度の測定による実験結果

一般的に、操作者が対話操作をしていると実感するためには、約 15fps 以上の処理速度が必要とされる。表 4.1 の結果から分かるように、本提案モデルに対するマウス操作では対話操作に必要な処理速度を大きく上回っており、他の剛体などを描画する事を考慮しても、十分に対話操作が可能であるシステムと言える。また、モーションセンサを用いたコップ型デバイスを用いた操作では、センサの更新速度の制限によりマウスに比べて処理速度が落ちているものの、約 15fps 以上の処理速度を実現しているため問題なく対話操作が可能であると言える。
また、数名の被験者に協力を頂き、実際に本提案モデルでの仮想液体を操作し体験してもらったところ、従来モデルより液体が混合していく様子がより感じられ、簡易的ではあるが液体内部に色が広がっていく様子が実感できたという積極的な意見を頂いた。また、対話操
作性においても、問題なく仮想容器を動かすことができ、実際の容器を用いて液体を操作しているように感じられるという意見を多く頂いた。これにより、本研究の第一の目的である
対話操作も実現できたと言える。

37

第 5 章 むすび本研究では従来の研究成果に加え、容器越しに見える液体側面での色の表現ならびに容器
側面の描画を可能とした。また、本研究の第一の目的である仮想液体を対話的に操作することを、許容範囲の処理速度を維持しつつ前述した本研究内容を実現したことにより達成出来た。液体の厳密な挙動を再現するには様々な手法があるが、対話操作性を考慮した厳密な液体の挙動の再現が可能な手法は多くはない。また、仮想液体を一連の対話操作システムの 1
つの要素として組み込むためには、さらに高い処理速度が必要である。そこで本研究ではリアルタイムで計算可能な式を用いることにより対話操作を可能とし、高い処理速度を維持した仮想液体モデルを提案した。この本提案モデルでは、従来の研究成果である容器内の液体をこぼす, 自由落下してくる液体を容器で受け止める等の液体の挙動に関する操作、および液体の表示に関して液体上面における色の拡がり表現に加え、液体側面における色の拡がり
表現、および容器のガラスの様な表現が可能である。この提案モデルにより、VR 化学実験システムに向けて対話操作性の維持と臨場感の向上を実現することが出来た。
今後の課題を以下に挙げる。

• 水しぶきの表現
仮想容器内に存在する静止状態の液体に、他の剛体や液体を勢いよく流入させると水しぶきを発生させるような挙動の実現。

• 仮想液体と容器以外の仮想物体との相互作用
容器とは別の剛体や弾性体などの有体物を仮想空間内に設置し、自由に移動させることで仮想液体との相互干渉を行う挙動の実現。

• 液体の攪拌操作の実現
仮想容器に入った仮想液体を、スプーンのような剛体でかき混ぜるような挙動の実現。

• 視点位置を考慮した液体側面における色の表現
現在では容器を真横から見た場合での液体側面における色の拡散表現を行っている。
あらゆる視点位置から見た場合での液体側面における色の拡散の実現。

第5章

むすび

38

これらの課題について、対話操作性を維持しつつ開発を行うことも今後の課題である。また、それぞれの課題に取り組み、開発した仮想液体モデルを一つの VR コンテンツに組み込
み、dVR 化学実験システム c を完成させることが本研究の最終目的である。

39

謝辞

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

40

参考文献

[1] 日 本 バ ー チャル リ ア リ ティ学 会, サ イ バ ー ス ペ ー ス と 仮 想 都 市 研 究 委 員会,http://www.vrsj.org/main.html[2] 藤木淳，牛尼剛聡，富松潔，“3 次元ブロックベースドモデリングソフトウェアにおけるだまし絵表現を用いたユーザインタフェース”，日本バーチャルリアリティ学会論文誌第12 巻第 3 号,pp239-246,2007[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 CG&A,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] 舟橋健司，岩堀祐之,“仮想容器による仮想液体の対話操作モデルと一実現法”, 日本バー
チャルリアリティ学会論文誌,Vol.5，No.4,pp.1087-1094,2000.

[10] 棚橋拓也，舟橋健司,“粒子・体積モデルに基づく仮想液体操作システムにおける波の表現”, 平成 19 年度名古屋工業大学卒業研究論文,2008[11] Takuya Tanabasi,Hirotaka Itoh,Kenji Funahashi,Yuji Iwahori, “Representation of
Wave Surface on Virtual Water Manipulation”, SCIS & ISIS ,pp.1460-1465,2008.

41[12] 蒲将寛，舟橋健司,“粒子・体積モデルに基づく仮想液体操作システムにおける色の表
現”, 平成 20 年度名古屋工業大学卒業研究論文,2009[13] 河合潤,“物理工学・化学工学を学ぶための熱・物質移動の基礎”, 丸善,2005[14] 橋本洋志，小林浩之，“OpenGL による 3 次元 CG アニメーション”, オーム社,2005