(57)【要約】【課題】アニメーション画像がリアリティに富み、シミュレーションにおける処理時間が極めて短時間である髪シミュレーション方法を提供すること。【解決手段】１本のマスタ毛髪の周りに散在させたメンバ毛髪で毛髪束を構成し、各マスタ毛髪およびメンバ毛髪のモデルとして粒子モデルが用いられており、マスタ毛髪初期化ステップと、メンバ毛髪初期化ステップとを含み、マスタ毛髪を構成する全マスタ粒子の位置を計算するマスタ毛髪シミュレーションステップと、各メンバ毛髪を構成する各メンバ粒子の相対座標をマスタ粒子の運動速度ベクトルに基づいて変化させるメンバ毛髪変形ステップとを備え、マスタ毛髪シミュレーションステップで計算されたマスタ粒子の位置と、メンバ毛髪変形ステップで変化されたメンバ粒子の相対位置とから、各メンバ毛髪のメンバ粒子の位置を計算するメンバ毛髪生成ステップを備えている髪シミュレーション方法である。【選択図】  図１
2009020874.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータアニメーションやコンピュータゲームに登場するキャラクタの髪の動きをシミュレートし、フレーム画像を連続的に表示することでアニメーションを生成するための、髪シミュレーション方法であって、
前記キャラクタの髪は、分散配置された複数の毛髪の束で構成されるものであり、
各束は、当該束を代表する１本のマスタ毛髪と、当該マスタ毛髪の周りに散在するメンバ毛髪とで構成されるものであり、
各マスタ毛髪は、多数のマスタ粒子のつながりによって構成されていると共に、各メンバ毛髪は、多数のメンバ粒子のつながりによって構成されており、
シミュレーションの初期化を行うためのステップとして、
あらかじめ定義された髪の情報に従って、マスタ毛髪を構成するマスタ粒子の位置を初期化するマスタ毛髪初期化ステップと、
あらかじめ定義された束の形状や毛髪の形状の情報に従って、対応するマスタ粒子に対するメンバ粒子の相対位置を初期化するメンバ毛髪初期化ステップと、を含み、
前記フレーム画像を生成して表示するシミュレーションステップとして、
粒子モデルを用いた物理シミュレーションによって、前記各マスタ毛髪の動きをシミュレートし、各マスタ毛髪を構成する全てのマスタ粒子の位置を計算する、マスタ毛髪シミュレーションステップと、
前記各束について、各メンバ毛髪を構成する各メンバ粒子の、当該メンバ粒子に対応するマスタ粒子に対する相対座標を、当該マスタ粒子の運動速度ベクトルに基づいて変化させるメンバ毛髪変形ステップと、
マスタ毛髪シミュレーションステップにおいて計算されたマスタ粒子の位置と、メンバ毛髪変形ステップにおいて変化されたメンバ粒子の相対位置とから、前記各マスタ毛髪の周りに散在するメンバ毛髪のメンバ粒子の位置を計算するメンバ毛髪生成ステップと、
前記メンバ毛髪生成ステップで計算されたメンバ粒子の位置に基づいて、全てのメンバ毛髪を描画してフレーム画像を生成するレンダリングステップと、を含む髪シミュレーション方法。
【請求項２】
前記メンバ毛髪変形ステップは、
マスタ粒子の運動速度ベクトルに応じて、速度が大きくなるほど束が広がるように、各メンバ粒子の、対応するマスタ粒子に対する相対位置を変化させる、束形状変形ステップと、
マスタ粒子の運動速度ベクトルに応じて、速度が大きくなるほど髪の毛が水平方向に圧縮されるように、各メンバ粒子の、対応するマスタ粒子に対する相対位置を変化させる、毛形状変形ステップと、を含むものである、
請求項1に記載の髪シミュレーション方法。
【請求項３】
コンピュータアニメーションやコンピュータゲームに登場するキャラクタの髪の動きをシミュレートし、フレーム画像を連続的に表示することでアニメーションを生成するための、髪シミュレーション装置であって、
前記キャラクタの髪は、分散配置された複数の毛髪の束で構成されるものであり、
各束は、当該束を代表する１本のマスタ毛髪と、当該マスタ毛髪の周りに散在するメンバ毛髪とで構成されるものであり、
各マスタ毛髪は、多数のマスタ粒子のつながりによって構成されていると共に、各メンバ毛髪は、多数のメンバ粒子のつながりによって構成されており、
シミュレーションの初期化を行う手段として、
あらかじめ定義された髪の情報に従って、マスタ毛髪を構成するマスタ粒子の位置を初期化するマスタ毛髪初期化手段と、
あらかじめ定義された束の形状や毛髪の形状の情報に従って、対応するマスタ粒子に対するメンバ粒子の相対位置を初期化するメンバ毛髪初期化手段と、を含み、
前記フレーム画像を生成して表示する手段として、
粒子モデルを用いた物理シミュレーションによって、前記各マスタ毛髪の動きをシミュレートし、各マスタ毛髪を構成する全てのマスタ粒子の位置を計算する、マスタ毛髪シミュレーション手段と、
前記各束について、各メンバ毛髪を構成する各メンバ粒子の、当該メンバ粒子に対応するマスタ粒子に対する相対座標を、当該マスタ粒子の運動速度ベクトルに基づいて変化させるメンバ毛髪変形手段と、
マスタ毛髪シミュレーションステップにおいて計算されたマスタ粒子の位置と、メンバ毛髪変形ステップにおいて変化されたメンバ粒子の相対位置とから、前記各マスタ毛髪の周りに散在するメンバ毛髪のメンバ粒子の位置を計算するメンバ毛髪生成手段と、
前記メンバ毛髪生成ステップで計算されたメンバ粒子の位置に基づいて、全てのメンバ毛髪を描画してフレーム画像を生成するレンダリング手段と、を含む髪シミュレーション装置。
【請求項４】
前記メンバ毛髪変形手段は、
マスタ粒子の運動速度ベクトルに応じて、速度が大きくなるほど束が広がるように、各メンバ粒子の、対応するマスタ粒子に対する相対位置を変化させる、束形状変形手段と、
マスタ粒子の運動速度ベクトルに応じて、速度が大きくなるほど髪の毛が水平方向に圧縮されるように、各メンバ粒子の、対応するマスタ粒子に対する相対位置を変化させる、毛形状変形手段と、を含むものである、
請求項３に記載の髪シミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、髪シミュレーション方法に関するものである。
【背景技術】
【０００２】
髪シミュレーションは、コンピュータアニメーションの分野では重要な技術の一つであり、髪についてのモデリング、シミュレーション、レンダリング等に関する方法は、長年、研究、開発されている。
【０００３】
しかし、人間の髪は１０万本またはそれ以上の本数の毛髪からなるものであり、これをシミュレートするためには大量のデータを処理する必要がある。このようなことから、これまで、リアルタイムシミュレーションは実現することが難しかった。したがって、これまでの研究の多くは、いわゆるオフライン（off-line）アニメーションを目的としたものであった。
【非特許文献１】ケン  アンジョー等、「髪の自然な美しさを引き出すための簡単な方法（A Simple Method for Extracting the NaturalBeauty of Hair）」、ACM コンピュータグラフィック（ＳＩＧＧＲＡＰＨ 92）、第２６巻、第２号、１１１頁から１２０頁、１９９２年
【非特許文献２】ヨウスケ  バンド等、「緩やかに連結された粒子モデルによる髪のアニメーション（AnimatingHair with Loosely Connected Particles）」、コンピュータグラフィックフォーラム（ユーログラフィックの会報  ２００３）  第２２巻、第３号、４１１−４１８ページ  ２００３年
【非特許文献３】エフ  バーテイルス等、「毛髪の束の多重解像度制御（AdaptiveWisp Tree - Amultiresolution control structure for simulating dynamic clustering in hairmotion」、ＡＣＭ  ＳＩＧＧＲＡＰＨ、コンピュータアニメーションにおけるユーログラフィック  シンポジウム  ２００３、２０７−２１３頁、２００３年
【非特許文献４】キラン  エス．バハット等、「ビデオからの衣服シミュレーションパラメータの推定（EstimatingCloth Simulation Parameters from Video）」、ＡＣＭ  ＳＩＧＧＲＡＰＨ、コンピュータアニメーションにおけるユーログラフィック  シンポジウム  ２００３、３７−５１頁、２００３年
【非特許文献５】ジョニー  ティー．チャン等、「髪の相互作用に関する現実的なモデル（APractical Model for Hair Mutual Interactions）」、ＡＣＭ  ＳＩＧＧＲＡＰＨ、コンピュータアニメーションにおけるユーログラフィック  シンポジウム  ２００２、７３−８０頁、２００２年７月
【非特許文献６】ビョンウォン  チョー等、「対話的な髪型生成のための統計的束モデルおよび擬似物理的アプローチ（AStatistical Wisp Model and Pseudo physical Approaches for Interactive HairstyleGeneration）」、映像化とコンピュータグラフィックについてのＩＥＥＥ会報、第１１巻、第２号、１６０−１７０頁、２００５年３月
【非特許文献７】ランディマ  ファーナンド等、「プログラマブル  リアルタイム  グラフィックのためのガイド本（TheCg Tutorial : The Definitive Guide to Programmable Real - Time Graphics）」、アディッション−ウェスリー  プロフェッショナル  ２００３年
【非特許文献８】ライーブ  グプタ等、「リアルタイム髪シミュレーションのための最適化フレームワーク（OptimizedFramework for Real Time Hair Simulation）」、コンピュータグラフィックインターナショナル（ＣＧＩ２００６）、７０２−７１０頁、２００６年６月
【非特許文献９】スニル  ハダップ  アンド  ナディア  マグネナット−サルマン、「連続体としての髪の動きのモデリング（ModelingDynamic Hair as a Continuum）」、コンピュータグラフィックフォーラム（ユーログラフィック２００１）、第２０巻、第３号、２００１年
【非特許文献１０】ジェームス  ティー．カジヤ等、「三次元テクスチャによる毛のレンダリング（RenderingFur with Three Demensional Textures）」、ＡＣＭ  ＳＩＧＧＲＡＰＨ、コンピュータグラフィック（ＳＩＧＧＲＡＰＨ８９）、第２３巻、第３号、２７１−２８０頁、１９８９年
【非特許文献１１】ティー−ヨン  キム  アンド  ウルリッチ  ニューマン、「多重解像度表現された髪の対話的なモデリングおよび編集（InteractiveMultiresolution Hair Modeling and Editing）」、グラフィックについてのＡＣＭ会報、（ＳＩＧＧＲＡＰＨ２００２）、第２１巻、第３号、６２０−６２９頁、２００２年
【非特許文献１２】トム  ロコビック等、「ディープ  シャドウ  マップス（DeepShadow Maps）」、ＳＩＧＧＲＡＰＨ２０００、３８５−３９２頁、２０００年
【非特許文献１３】マーク  メイヤー等、「仮想現実における衣服のようなものの対話的なアニメーション（InteractiveAnimation of Cloth-like Objects in Virtual Reality）」、映像およびコンピュータアニメーションの雑誌、第１２巻、第１版、１−１２頁、２００１年５月
【非特許文献１４】フバート  ヌグイェン  アンド  ウイリアム  ドネリー．「ナルのデモにおける髪のアニメーションとレンダリング（HairAnimation and Rendering in the Nalu Demo）」、ＧＰＵ  Ｇｅｍｓ２、３６１−３８０頁、２００５年
【非特許文献１５】nVidia「ＧＰＵを用いた衣服シミュレーションのデモ（GPU Cloth）」,http://developer. nvidia.com/, ２００５年
【非特許文献１６】シルバイン  パリス等、「複数の画像からの髪の形状の計測（Captureof Hair Geometry from Multiple Images）」、グラフィックについてのＡＣＭ会報、（ＳＩＧＧＲＡＰＨ２００４）、第２３巻、第３版、７１２−７１９頁、２００４年
【非特許文献１７】パスカル  ボリノ等、「複雑な髪型のリアルタイムアニメーション（Real-TimeAnimation of Complex Hairstyles）」、映像とコンピュータグラフィックのＩＥＥＥの会報、第１２巻、第２号、２００６年３−４月
【非特許文献１８】ロドリゲス  ナバロ  ジェー等、「人間の動きに合わせた衣服の高速シミュレーション（FastCloth Simulation on Moving Humanoids）」、ユーログラフィック２００５  ショートプレゼンテーション、８５−８８頁、２００５年
【非特許文献１９】シュー  ドン  ヤン等、「毛髪の束のモデル（TheCluster Hair Model）」、グラフィックモデル、第６２巻、第２版、８５−１０３頁、２０００年３月
【非特許文献２０】イゾウ  ユー等、「リアルな髪型の仮想モデリング（ModelingRealistic Virtual Hairstyles）」、パシフィックグラフィック２００１、２９５−３０４頁、２００１年
【非特許文献２１】ケリー  ワード等、「多重解像度表現を用いた髪のモデリング（ModelingHair Using Level-of-Detail Representations）」、コンピュータアニメーションとソーシャルエージェント２００３、４１−４７頁、２００３年
【非特許文献２２】ヤスヒコ  ワタナベ等、「髪の画像生成のための三角柱モデル手法（ATrigonal Prism-Based Method for Hair Image Generation）」、ＩＥＥＥコンピュータグラフィックとアプリケーション、第１２巻、第１版、４７−５３頁、１９９２年１月
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、近年、オンラインアニメーションを用いるコンピュータゲームやバーチャルリアリティの分野で、リアルタイム髪シミュレーションが必要とされている。
【０００５】
髪シミュレーションを実現するための一般的な技術として、粒子モデルを用いる方法が広く用いられている。この方法は、髪を構成する各毛髪を、多数の粒子のつながりとしてモデル化し、各粒子に作用する力に基づいて各粒子の動きを計算することで、毛髪の動きをシミュレーションするものである。
【０００６】
ところが、人間の髪全体は1万本〜１０万本もの多数の毛髪によって構成されるため、粒子モデルを用いた手法で全ての髪の運動を計算しようとすると、最新のハードウェアを用いたとしても、アニメーションの各フレーム処理に数秒程度の時間を要してしまい、リアルタイムでのアニメーションは非現実的である。
【０００７】
毛髪の大きく数を減らしたり、シミュレーションモデルを単純化したりすることで、粒子モデルを用いる手法でも、リアルタイムシミュレーションを実現することは可能である。しかし、そのような方法では、リアリティに欠けるアニメーションになるという問題がある。
【０００８】
そのため、このような手法は、現在は、ごく一部のコンピュータゲームでしか使用されていない。多くのコンピュータゲームでは、依然として、ポリゴンによって表現された全く動きのない髪が使用されている。
【０００９】
そこで、このような粒子モデルの問題を解決し、高速に処理を行い、かつ、自然な髪を生成するための方法として、粗い毛髪モデルと詳細な毛髪モデルを組み合わせる手法が開発されている。
【００１０】
この手法では、まず、粗い毛髪モデルを用いて、物理シミュレーションにより、髪の動きを計算する。ここでは、粗いモデルを使用するため、高速にシミュレーションを実現できる。その後、粗い毛髪モデルから、より多数の毛髪によって構成される詳細な毛髪モデルを動的に生成することで、自然な髪を実現する。この処理では、通常、物理シミュレーションは用いず、幾何学的な処理によって多数の毛髪を生成する。
【００１１】
ところが、従来の手法では、多数の毛髪を生成する際に、固定のパラメタを用いて毛髪を生成していために、生成される髪の動きが不自然である、という課題があった。
【００１２】
また、粗い毛髪モデルから詳細な毛髪モデルを生成するための、最も単純な手法として、毛髪の補間を用いたものがある（参考文献5,14）。
【００１３】
この手法は、少数の毛髪の間に、周囲の毛髪を補間して新たな毛髪を新しく生成するものある。このような方法では、少数の毛髪から多数の毛髪を生成したときに、周囲の毛髪と一定の間隔が保たれ、毛髪の形状が均一であるような髪が生成されてしまう。
【００１４】
ところが、現実の人間の毛髪は、周囲の髪と独立に運動するのではなく、近隣の毛髪同士が束になって互いに影響し合いながら運動する。したがって、毛髪を単純に補間する方法では、このような人間の髪の動きを再現できないため、自然な髪の動きが生成できない。
【００１５】
粗い毛髪モデルから詳細な毛髪モデルを生成するための別の方法として、毛髪の束を用いる手法がある。
【００１６】
これは、粗い毛髪モデルの各毛髪を、毛髪の束を代表する１本の毛髪とみなして、各毛髪の周囲に一定数の毛髪を生成するなどして、各毛髪から毛髪の束を生成する手法である。これらの手法の多くは、主に髪のアニメーションではなく、髪の静止画像を生成することを目的としたものである。
【００１７】
ところが、これらの手法では、固定の媒介変数に従って各毛髪から毛髪の束を生成するため、ある毛髪から生成される毛髪の束の形状は常に同じになってしまう。現実の人間の毛髪の束の形状は、当然ながら、その運動にともなって変化する。そのため、これらの手法を単純に髪のアニメーションに適用すると、不自然な髪が生成されてしまう、という問題があった。
【００１８】
本発明は、従来手法の問題点を鑑みて、従来のリアルタイムシミュレーションによる髪の不自然さを少ない計算コストで解消するような、髪シミュレーション手法を提供することを課題とする。
【課題を解決するための手段】
【００１９】
請求項１に記載の発明は、コンピュータアニメーションやコンピュータゲームに登場するキャラクタの髪の動きをシミュレートし、フレーム画像を連続的に表示することでアニメーションを生成するための、髪シミュレーション方法であって、前記キャラクタの髪は、分散配置された複数の毛髪の束で構成されるものであり、各束は、当該束を代表する１本のマスタ毛髪と、当該マスタ毛髪の周りに散在するメンバ毛髪とで構成されるものであり、各マスタ毛髪は、多数のマスタ粒子のつながりによって構成されていると共に、各メンバ毛髪は、多数のメンバ粒子のつながりによって構成されており、シミュレーションの初期化を行うためのステップとして、あらかじめ定義された髪の情報に従って、マスタ毛髪を構成するマスタ粒子の位置を初期化するマスタ毛髪初期化ステップと、あらかじめ定義された束の形状や毛髪の形状の情報に従って、対応するマスタ粒子に対するメンバ粒子の相対位置を初期化するメンバ毛髪初期化ステップと、を含み、前記フレーム画像を生成して表示するシミュレーションステップとして、粒子モデルを用いた物理シミュレーションによって、前記各マスタ毛髪の動きをシミュレートし、各マスタ毛髪を構成する全てのマスタ粒子の位置を計算する、マスタ毛髪シミュレーションステップと、前記各束について、各メンバ毛髪を構成する各メンバ粒子の、当該メンバ粒子に対応するマスタ粒子に対する相対座標を、当該マスタ粒子の運動速度ベクトルに基づいて変化させるメンバ毛髪変形ステップと、マスタ毛髪シミュレーションステップにおいて計算されたマスタ粒子の位置と、メンバ毛髪変形ステップにおいて変化されたメンバ粒子の相対位置とから、前記各マスタ毛髪の周りに散在するメンバ毛髪のメンバ粒子の位置を計算するメンバ毛髪生成ステップと、前記メンバ毛髪生成ステップで計算されたメンバ粒子の位置に基づいて、全てのメンバ毛髪を描画してフレーム画像を生成するレンダリングステップと、を含む髪シミュレーション方法である。
【００２０】
本発明はメンバ毛髪変形ステップを備えており、本発明では、マスタ毛髪（すなわち粗いモデルの毛髪）の運動速度に着目して髪の束の形状が変化するようになっている。従来の毛髪の束を生成する手法は、固定の形状の毛髪の束を生成するものであり、生成されるアニメーションは不自然なものであったが、本発明によれば、マスタ毛髪の運動速度に応じて形状が動的に変化するような毛髪の束を生成するので、より自然な髪のアニメーションを生成できる。
【００２１】
請求項２に記載の発明は、請求項１に記載の髪シミュレーション方法であって、前記メンバ毛髪変形ステップは、マスタ粒子の運動速度ベクトルに応じて、速度が大きくなるほど束が広がるように、各メンバ粒子の、対応するマスタ粒子に対する相対位置を変化させる、束形状変形ステップと、マスタ粒子の運動速度ベクトルに応じて、速度が大きくなるほど髪の毛が水平方向に圧縮されるように、各メンバ粒子の、対応するマスタ粒子に対する相対位置を変化させる、毛形状変形ステップと、を含むものである。
【００２２】
本発明によれば、毛髪の束の水平方向の運動速度に応じて、毛髪の束が後方に広がるような効果、及び、個々の毛髪が空気抵抗により横方向につぶれるような効果を、少ない計算コストで実現することができる。
【００２３】
請求項３に記載の発明は、コンピュータアニメーションやコンピュータゲームに登場するキャラクタの髪の動きをシミュレートし、フレーム画像を連続的に表示することでアニメーションを生成するための、髪シミュレーション装置であって、前記キャラクタの髪は、分散配置された複数の毛髪の束で構成されるものであり、各束は、当該束を代表する１本のマスタ毛髪と、当該マスタ毛髪の周りに散在するメンバ毛髪とで構成されるものであり、各マスタ毛髪は、多数のマスタ粒子のつながりによって構成されていると共に、各メンバ毛髪は、多数のメンバ粒子のつながりによって構成されており、シミュレーションの初期化を行う手段として、あらかじめ定義された髪の情報に従って、マスタ毛髪を構成するマスタ粒子の位置を初期化するマスタ毛髪初期化手段と、あらかじめ定義された束の形状や毛髪の形状の情報に従って、対応するマスタ粒子に対するメンバ粒子の相対位置を初期化するメンバ毛髪初期化手段と、を含み、前記フレーム画像を生成して表示する手段として、粒子モデルを用いた物理シミュレーションによって、前記各マスタ毛髪の動きをシミュレートし、各マスタ毛髪を構成する全てのマスタ粒子の位置を計算する、マスタ毛髪シミュレーション手段と、前記各束について、各メンバ毛髪を構成する各メンバ粒子の、当該メンバ粒子に対応するマスタ粒子に対する相対座標を、当該マスタ粒子の運動速度ベクトルに基づいて変化させるメンバ毛髪変形手段と、マスタ毛髪シミュレーションステップにおいて計算されたマスタ粒子の位置と、メンバ毛髪変形ステップにおいて変化されたメンバ粒子の相対位置とから、前記各マスタ毛髪の周りに散在するメンバ毛髪のメンバ粒子の位置を計算するメンバ毛髪生成手段と、前記メンバ毛髪生成ステップで計算されたメンバ粒子の位置に基づいて、全てのメンバ毛髪を描画してフレーム画像を生成するレンダリング手段と、を含む髪シミュレーション装置である。
【００２４】
本発明はメンバ毛髪変形手段を備えており、本発明では、マスタ毛髪（すなわち粗いモデルの毛髪）の運動速度に着目して毛髪の束の形状が変化するようになっている。従来の毛髪の束を生成する手法を用いた装置は、固定の形状の毛髪の束を生成するものであり、生成されるアニメーションは不自然なものであったが、本発明によれば、マスタ毛髪の運動速度に応じて形状が動的に変化するような毛髪の束を生成するので、より自然な髪のアニメーションを生成できる。
【００２５】
請求項４の発明は、請求項３に記載の髪シミュレーション装置であって、前記メンバ毛髪変形手段は、マスタ粒子の運動速度ベクトルに応じて、速度が大きくなるほど束が広がるように、各メンバ粒子の、対応するマスタ粒子に対する相対位置を変化させる、束形状変形手段と、マスタ粒子の運動速度ベクトルに応じて、速度が大きくなるほど髪の毛が水平方向に圧縮されるように、各メンバ粒子の、対応するマスタ粒子に対する相対位置を変化させる、毛形状変形手段と、を含むものである。
【００２６】
本発明によれば、毛髪の束の水平方向の運動速度に応じて、毛髪の束が後方に広がるような効果、及び、個々の毛髪が空気抵抗により横方向につぶれるような効果を、少ない計算コストで実現することができる。
【発明の効果】
【００２７】
本発明によれば、マスタ毛髪の運動速度に応じて形状が動的に変化するような毛髪の束を生成するので、より自然な髪のアニメーションを生成できる。そして、結果として、本発明によって、従来のリアルタイムシミュレーションの不自然さを解決し、自然な髪のアニメーションをリアルタイムに生成することができる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明に係る髪シミュレーション方法と、当該方法を用いた髪シミュレーション装置の実施形態について、図面を用いて詳細に説明する。
【００２９】
まず、本発明に係る髪シミュレーション方法について説明する。
【００３０】
図１に示されるように、髪シミュレーション方法は、「初期化ステップ」と、初期化により生成された毛髪をシミュレートする「シミュレーションステップ」の２つのステップを備えており、シミュレーションを行って計算した結果に基づいてスクリーン等の出力先に毛髪をレンダリングできるようになっている。
【００３１】
初期化ステップは、髪の毛についての粗いモデル（図３（ａ）参照）の初期化ステップと、詳細モデル（図３（ｂ）参照）の初期化ステップとを備えている。粗いモデルの初期化ステップは、後述するマスタ毛髪を構成するマスタ粒子の位置を初期化するステップである（以下、「マスタ毛髪初期化ステップ」と称する）。そして、詳細モデルの初期化ステップは、後述するメンバ毛髪のメンバ粒子と対応するマスタ粒子の間の相対位置を初期化するステップである（以下、「メンバ毛髪初期化ステップ」と称する）。
【００３２】
シミュレーションステップは、初期化により生成された各マスタ毛髪（粗いモデルを構成する毛髪）の動きをシミュレートして各マスタ毛髪を構成する全てのマスタ粒子の位置を計算する「マスタ毛髪シミュレーションステップ」と、上記メンバ毛髪初期化ステップにおいて計算された、各メンバ毛髪（詳細モデルを構成する毛髪）を構成する各メンバ粒子の相対座標を、メンバ粒子に対応するマスタ粒子の運動速度に基づいて変化させる「メンバ毛髪変形ステップ」と、マスタ毛髪シミュレーションステップにおいて計算されたマスタ粒子の位置及びメンバ毛髪変形ステップにおいて変化されたメンバ粒子の相対位置からメンバ毛髪のメンバ粒子の位置を計算する「メンバ毛髪生成ステップ」と、シミュレーションステップにおける計算結果に基づいてスクリーン等に毛髪を出力する「レンダリングステップ」とを備えている。
【００３３】
このように、本発明に係る髪シミュレーション方法は、粗いモデルを使用した髪の物理シミュレーションと、粗いモデルを基に多数の毛髪の束（詳細モデル）を動的に生成する方法とを組み合わせることで、自然な髪のシミュレーションを高速に実現するものである。
【００３４】
次に、髪シミュレーション方法のシステム構成を、処理の流れに沿って図１、図２を参照しつつ詳細に説明する。
【００３５】
＜＜＜初期化ステップ＞＞＞
シミュレーションステップに先立ち、初期化ステップの処理を行う必要がある。先述の通り、初期化ステップは、マスタ毛髪初期化ステップ、メンバ毛髪初期化ステップに分けられる。以下、各ステップの処理を順に説明する。
【００３６】
＜＜マスタ毛髪初期化ステップ＞＞
まず、マスタ毛髪初期化ステップが実行される。マスタ毛髪初期化ステップは、粗いモデルを生成するステップである。
【００３７】
粗いモデルは、人間（キャラクタ）の頭部に分散配置された複数のマスタ毛髪で構成されている。つまり、マスタ毛髪初期化ステップは、分散配置された複数のマスタ毛髪を生成するステップである。各マスタ毛髪は、粒子モデルによってモデル化されている。つまり、各マスタ毛髪は、複数のマスタ粒子が連続的につながった、粒子の連続連結体としてモデル化されている。以下、マスタ毛髪を構成する各粒子のことを、マスタ粒子と呼ぶ。
【００３８】
マスタ毛髪初期化ステップでは、人体モデルの頭部の適当な位置に、頭皮に対して直交する方向（法線方向）に伸びる状態で複数のマスタ毛髪を分散配置させる。また、初期化の段階で配置されるマスタ毛髪は直線状に延びるものである。したがって、複数のマスタ毛髪は、頭部を中心として放射状に延びる状態で生成される。
【００３９】
人体モデルのどの範囲にマスタ毛髪を生成するかについて、ユーザは、表現したい髪型に応じて、任意の範囲を指定することができる。また、各マスタ毛髪の長さｌi,も、同様に、ユーザが任意の値を設定することができる。つまり、あらかじめ定義された毛髪生成範囲情報、毛髪生成範囲内の各点におけるマスタ毛髪の方向・長さ情報等の、マスタ毛髪初期化情報に基づいて、粗いモデルの初期状態を決定することができる。これらの情報に基づき、上記の処理を行うことで、各マスタ粒子の座標ｐi,kが初期化される。ここで、ｐi,kは、ｉ番目のマスタ毛髪の、ｋ番目の粒子の座標を表している。
【００４０】
なお、マスタ毛髪の本数も、ユーザが任意に設定することができる。当髪シミュレーション方法では、マスタ毛髪初期化ステップにおいて、５００本から数千本程度のマスタ毛髪を生成している。
【００４１】
また、各マスタ毛髪を表現するために用いる粒子の数は、特に限定されるものではないが、毛髪１本当たり１０個から２０個程度の数の粒子が使用される。本実施形態では、毛髪１本当たり１０個の粒子を使用している。
【００４２】
＜＜メンバ毛髪初期化ステップ＞＞
次に、メンバ毛髪初期化ステップが実行される。メンバ毛髪初期化ステップは、詳細モデルを生成するための情報（メンバ毛髪を構成する各メンバ粒子の、対応するマスタ粒子に対する相対位置）を初期化するステップである。
【００４３】
詳細モデルは、毛髪の束（以下、単に「束」と称することがある）の複数の集まりで構成されており、各束は、マスタ毛髪の周りに散在する状態で配置された複数のメンバ毛髪で構成されている。そして、各束を構成するメンバ毛髪の数は、特に限定されるものではないが、１０本から２０本程度の数である。本実施形態では、各マスタ毛髪の周りに１０本から２０本のメンバ毛髪を生成している。従って、粗いモデルを構成する各マスタ毛髪は、詳細モデルの毛髪の束を代表する毛髪であるということができる。このように、マスタ毛髪の周りに散在する状態で複数のメンバ毛髪を生成することで、毛髪の束を生成する。
【００４４】
毛髪の束の各メンバ毛髪は、粗いモデルのマスタ毛髪と同様、粒子モデルによってモデル化されている。以下、メンバ毛髪を構成する各粒子のことを、メンバ粒子と呼ぶ。メンバ毛髪初期化ステップでは、あらかじめ定義された束の形状や毛髪の形状の情報に従って、対応するマスタ粒子に対するメンバ粒子の相対位置を初期化する。そして、後のシミュレーションステップでは、後述するように、マスタ毛髪を構成するマスタ粒子の速度に基づいて、毛髪の束の形状や個々の毛髪の形状をコントロールするように、メンバ粒子の相対座標を変化させる（図４（ｃ）参照）。最終的に、各メンバ粒子の相対位置と、対応するマスタ粒子の位置に基づいて、各メンバ粒子の位置を決定することで、詳細モデルが生成されることになる。
【００４５】
なお、粗いモデルを基に詳細モデルを生成する方法としては、種々の方法があるが（参考文献6,5,14,3参照）、先述の通り、本発明では、粗いモデルを構成するマスタ毛髪の周りに所定本数のメンバ毛髪を生成することによって毛髪の束のモデル（詳細モデル、図４（ａ）（ｂ）参照）を生成するという手法を用いた。
【００４６】
つまり、ここでは、詳細モデルである毛髪の束の基本的形状を、あらかじめ定義された束の形状の情報や毛髪の形状の情報（毛髪長さ情報や髪の広がり具合情報など、毛髪束初期化情報や毛髪形状初期化情報）に基づいて決定する。より具体的には、毛髪の束の基本的形状を、所定の長さや広がりなどの束の形状を表す関数や、振幅や周期や位相などの毛髪の形状を表す媒介変数を用いて決定する。すなわち、これらの関数や媒介変数を用いて各メンバ毛髪を構成する各メンバ粒子の、対応するマスタ粒子に対する相対座標を初期化する。
以下、各メンバ粒子の相対座標を計算する手順をより具体的に説明する。
各メンバ粒子の相対座標は、束の形状を表すオフセット（ｕi,j,k，ｖi,j,k，ｔi,j,k）、及び、毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）により表される。つまり、メンバ毛髪初期化ステップは、束の形状を表すオフセットを計算する「束形状初期化ステップ」と、毛髪の形状を表すオフセットを計算する「毛形状初期化ステップ」とを有する。各ステップについては後述する。なお、添字i,j,kは、ｉ番目のマスタ毛髪の、ｊ番目のメンバ毛髪の、ｋ番目の粒子であることを表す。ｕi,j,k，ｖi,j,k，ｔi,j,kは、マスタ毛髪に対して水平な方向を（ｕi,j,k，ｖi,j,k）、垂直な方向をｔi,j,kとする、マスタ毛髪のローカル座標系によって表された、束の形状を表すための、各メンバ粒子のオフセットである（図８）。また、（ｃｕi,j,k，ｃｖi,j,k）は、毛髪の形状を表すための、各メンバ粒子のオフセットである。基準位置に対するメンバ粒子の、マスタ毛髪に対して水平方向の位置変化を表す。各メンバ粒子の、マスタ粒子に対する相対座標ｑi,j,k（＝ｕ’i,j,k，ｖ’i,j,k，ｔ’i,j,k）は、束の形状を表すオフセット（ｕi,j,k，ｖi,j,k，ｔi,j,k）、毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）の和により表現される。
【００４７】
また、ここでは、長さ割当て関数Ｄ（ｌ）および半径関数Ｒ（ｓ）といった関数を用いて、毛髪の束の形状を決定し、各マスタ粒子の束の形状を表すオフセット（ｕi,j,k，ｖi,j,k，ｔi,j,k）を決定する。長さ割当て関数Ｄ（ｌ）は、各マスタ毛髪の長さを表す媒介変数である。そして、半径関数Ｒ（ｓ）は、マスタ毛髪上の所定の点（粒子位置）ｓ（０≦ｓ≦１）における束の最大半径（最大動径）を表す媒介変数である。なお、ｓはマスタ毛髪の根元から先端に向かって変化する値であり、“ｓ＝０”の点はマスタ毛髪の根元位置の点（粒子）に対応し、“ｓ＝１”の点はマスタ毛髪の先端位置の点（粒子）に対応するものとする。長さ割当て関数Ｄ（ｌ）や半径関数Ｒ（ｓ）の媒介関数は、アニメーション作製者などのユーザが、各マスタ毛髪ごとに、表現したい毛髪の束の形状に応じた関数を設定することができる。図５（ａ）（ｂ）には、異なる長さ割当て関数Ｄ（ｌ）や半径関数Ｒ（ｓ）を使用したときの、生成される毛髪の束の形状の違いの例を示している。
【００４８】
＜束形状初期化ステップ＞
以下、各マスタ粒子の、束の形状を表すオフセットｑi,j,k（＝ｕi,j,k，ｖi,j,k，ｔi,j,k）を決定する手順を説明する。
【００４９】
まず、半径関数Ｒ（ｓ）を含む次の数式を用いて、メンバ毛髪の根元のメンバ粒子の水平方向のオフセット（ｕi,j,0，ｖi,j,0）を決定する。なお、ここでいう水平方向とは、マスタ毛髪の延伸方向（接線方向）に対して直交する方向（法線方向）のことである。
【００５０】
【数１】
2009020874.tif 000003
【００５１】
位置（α，β）は、マスタ毛髪に直交する平面状での、円座標系（極座標系）上の位置を表すものである。ここで、αは中心点からの半径比率を表し、β中心点に対する方位角を表す。α、βは、各メンバ毛髪ごとに、乱数により決定する。式（１）で用いている、rand()はランダム関数であり、rand(0.0〜1.0)は０．０から１．０の間の値をランダムにとり、rand(0.0〜2π)は０．０〜２πの間の角度をランダムにとる。
【００５２】
そして、各メンバ毛髪の長さｌi,jを、長さ割当て関数Ｄ（ｌ）を含む次の式（２）で定める。変数ｌi,jは、粗いモデルのｉ番目のマスタ毛髪に基づいた束の、ｊ番目のメンバ毛髪の長さを表している。なお、rand(0.0〜1.0)は、０．０から１．０の間の数をランダムに定めるランダム関数である。ランダムに決定された０．０から１．０の間の数に一致するまで、ｌi,jを徐々に加算させながらＤ（ｌ）を積分していき、値が一致した時点で停止することで、マスタ毛髪の長さｌi,jを決定する。
【００５３】
【数２】
2009020874.tif 000004
【００５４】
最後に、ここまでに決定した、各メンバ毛髪の根元のメンバ粒子の水平方向の相対位置（ｕi,j,0，ｖi,j,0）、及び、各メンバ毛髪の長さｌi,jに基づいて、各メンバ毛髪の各メンバ粒子のオフセット（ｕi,j,k，ｖi,j,k，ｔi,j,k）を、次の式（３）を用いて計算する。
【００５５】
【数３】
2009020874.tif 000005
【００５６】
＜毛形状初期化ステップ＞
次に、各マスタ粒子の、毛髪の形状を表すオフセットｑi,j,k（＝ｕi,j,k，ｖi,j,k，ｔi,j,k）を決定する手順を説明する。
【００５７】
これまでに決定した各マスタ粒子の束形状を現すオフセットにより、マスタ毛髪の位置を水平方向に移動した状態の、直線的な髪の毛を表現することができる。しかし、実際の人間の毛髪は、必ずしも直線的なものだけではなく、細かいカーブがかかったような毛髪も存在する。そこで、このような毛髪の形状を表現するために、毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）を使用する。
本実施形態では、サインカーブの係数を媒介変数として、（ｃｕi,j,k，ｃｖi,j,k）を決定する。参考文献２０で論じられているように、人間の毛髪のさまざまな形状は、サインカーブ（正弦波）と半径関数の組み合わせにより表現できる。本実施形態では、既に、束の形状を決めるために半径関数を適用しているので、毛髪の形状を決定する要素として、次の式（４）に示すように、サインカーブを使用する。
【００５８】
【数４】
2009020874.tif 000006
【００５９】
（αu，αv，ｆ，θ）は、サインカーブの形状を変化させる媒介変数であり、αu，αvは各方向（ｕ方向およびｖ方向）についての振幅、ｆはカーブの周期、θは位相を表している。なお、振幅は、毛髪のカーブの水平方向の大きさを表しており、振幅が大きいほど、大きく曲がった毛髪となる。周期は、カーブとカーブの間の距離を表しており、周期の値が大きいほど、カーブとカーブの間が狭くなり縮れたような毛髪となる。また、位相は、カーブの垂直方向のずれを表している。
【００６０】
このように、各メンバ毛髪は、それぞれ個別の媒介変数（αu，αv，ｆ，θ）を持っている。これらの値は、ユーザが、表現したい髪型に応じて、任意の値を各メンバ毛髪に設定することができる。しかしながら、各メンバ毛髪ごとに個別の値を設定するのは大変である。そこで、本実装形態では、基本的に、各マスタ毛髪（各束）ごとに値を設定し、同じマスタ毛髪に基づいて生成される（同じ束に属する）全てのメンバ毛髪について、同じ媒介変数を使用する。
【００６１】
しかしながら、同一の束の全毛髪について、完全に同じ媒介変数を使用すると、全く同じ形状の毛髪が多数生成されることになり、リアリティに欠ける画像が生成されるおそれがある。そこで、個々のメンバ毛髪の媒介変数に対して、乱数により一定の変化を加える。乱数を用いることで、一様でない毛髪が生成されることになり、シミュレーションのリアリティが高まる。なお、図６（ａ）（ｂ）（ｃ）に、本実施形態のモデルを使用して生成されたカーブやねじれた毛髪を示した。
【００６２】
＜＜メンバ毛髪初期化ステップ＞＞のまとめ
このように、メンバ毛髪初期化ステップでは、上記処理により、ｉ番目のマスタ毛髪の束を構成する、ｊ番目のメンバ毛髪のｋ番目の粒子が持つ、束の形状を表すオフセット（ｔi,j,k，ｕi,j,k，ｖi,j,k）と、毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）を計算した。後述のシミュレーションステップでは、これらのオフセットをメンバ粒子の運動速度に応じて変化させ、変化させたオフセットに基づきメンバ毛髪を生成することになる。
【００６３】
なお、上記の処理で用いた各オフセットの計算方法や、計算に使用する式（１），（３）および（４）は、より複雑なものを用いてもよい。より複雑なモデルを使用することで、設定者の手間はかかる代わりに、より細かい毛髪の形状を設定することが可能になると考えられる。
【００６４】
最後に、次の式（５）に示されるように、束の形状を表すオフセット（ｕi,j,k，ｖi,j,k，ｔi,j,k）と、毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）を加えることで、各メンバ粒子の相対位置ｑi,j,k（＝ｕ’i,j,k，ｖ’i,j,k，ｔi,j,k）を表すことができる。
【００６５】
【数５】
2009020874.tif 000007
【００６６】
この各メンバ粒子の相対値とｑ i,j,k＝（ｕ’ i,j,k，ｖ’ i,j,k，ｔi,j,k）と、マスタ毛髪に基づいて、各メンバ粒子の絶対位置を計算し、メンバ毛髪を生成することができる。
【００６７】
＜＜＜シミュレーションステップ＞＞＞
上記の初期化ステップが完了した後、実際に毛髪のアニメーションを生成するための、シミュレーションステップを実行する。先述の通り、シミュレーションステップは、マスタ毛髪シミュレーションステップ、メンバ毛髪シミュレーションステップ、メンバ毛髪変形ステップ、レンダリングステップに分けられる。以下、順に、各ステップの処理を説明する。
【００６８】
＜＜マスタ毛髪シミュレーションステップ＞＞
まず、マスタ毛髪シミュレーションステップが実行される。マスタ毛髪シミュレーションステップは、上記マスタ毛髪初期化ステップにおいて生成された各マスタ毛髪の動きを、物理シミュレーションを用いて計算し、全マスタ粒子の位置を更新するステップである。
【００６９】
本実施例のマスタ毛髪シミュレーションステップは、ごく少数（例えば、２００本から１０００本といった程度）のマスタ毛髪（粗いモデル）を用いる。このように比較的少数の毛髪の物理シミュレーションであれば、現在の一般的な計算機や、物理シミュレーション手法を用いて、十分に効率的にシミュレートすることができる。
【００７０】
一般に、粒子モデルを用いた物理シミュレーションでは、各粒子に働くさまざまな力を物理モデルに従って計算し、その力に基づき各粒子がどのように運動するかを、数値積分に基づいて計算する。髪の粒子に加わる力としては、隣接する粒子間で毛髪長を一定に維持するように作用する張力、粒子が人体や他の毛髪と接する場合に働く人体や近隣の毛髪からの反発力、重力、空気抵抗力（風力）などがある。
【００７１】
ただし、本実施形態では、高速化のために、隣接する粒子間の力や、人体からの反発力などの力は考慮せず、重力や風力のみを用いて運動計算を行う。粒子間の距離や、人体からの反発は、粒子の位置を制約条件に基づいて修正することで、これらの力を考慮することと同様の効果を実現する。なお、本実施形態で使用する粒子モデルおよび物理シミュレーションは、従来手法とほぼ同様の手法であるので（参考文献１，１４，５参照）、以下には概略のみを説明する。
【００７２】
粒子の動きを計算するための積分計算には、Verlet積分を使用する。Verlet積分は、シミュレーションのステップ間隔が大きい場合でも比較的安定であり（たとえば、より一般的に用いられるEuler積分よりも安定性が高い）、各粒子の速度を保存しておく必要がないという点で優れている。
【００７３】
ｋ番目の粒子Ｐkの位置（最新位置）は、前（直近）の時刻の２フレームにおける位置Ｐk-1，Ｐk-2、重力加速度ｇおよび風力ｗに基づいて、次の式（６）を用いて計算されて更新される。
【００７４】
【数６】
2009020874.tif 000008
【００７５】
ここで、「ｗ」は、風力（wind force）であり、向きと大きさを持っている。また、各粒子への風の力の加速度は、その粒子の位置における接線方向（tangent vector）ｔkと、風の力ｗの方向とのなす角度の大きさに比例すると考える。
【００７６】
以上の式により、重力と風力に基づいた、粒子の運動を計算する。しかし、このままでは、毛髪の長さが保たれず粒子が落下しつづけたり、毛髪が人体にめり込んでしまったりといった、不自然なシミュレーションとなってしまう。そこで、いくつかの制約条件に基づき粒子の位置を直接修正することで、これらの問題が発生しないようにする。これは、従来用いられている方法と同様の方法（参考文献13,15,18）である。
【００７７】
まず、隣接する粒子Ｐk-1との間の距離を一定に保つように、次の式（７）を用いて粒子の位置を更新する。
【００７８】
【数７】
2009020874.tif 000009
【００７９】
ここで、ｌkは、相互に連結された粒子Ｐkと粒子Ｐk-1との間の、初期状態での長さである。
【００８０】
次に、毛髪と人体にめり込まないように、同様に粒子の位置を更新する。なお、ここでは、高速化のために、人体を少数の球体の集まりとして表現する。各球体は、中心位置ｏiと半径ｒiを持っている。このとき、粒子がある球体の内部に存在するとき（粒子の位置と球の中心位置の間の距離が球の半径以下の値であるとき）には、次の式（８）を用い、粒子の位置と球の中心位置の間の距離が球の半径以上になるように、粒子の位置を修正する。
【００８１】
【数８】
2009020874.tif 000010
【００８２】
人体を表す各球の中心位置や半径は、あらかじめ、ユーザが設定しておく。球体の中心位置ｏiは、各フレームにおける人間の姿勢に基づいて更新される。
【００８３】
また、各毛髪の根元の粒子の位置が、常に頭の表面の同一位置に固定されるように、頭の動きに応じて粒子の位置を決定する。
【００８４】
制約条件の適用する際は、毛髪の根元の粒子から、先端の粒子に向かって、順に適用する。
【００８５】
なお、毛髪間の相互作用は、高速に計算することは困難であるため、マスタ毛髪のシミュレーションでは取り扱わない。
【００８６】
＜＜メンバ毛髪変形ステップ＞＞
次に、メンバ毛髪を構成する各メンバ粒子の、当該メンバ粒子に対応するマスタ粒子に対する相対座標を、マスタ粒子の運動速度ベクトルに基づいて変化させるメンバ毛髪変形ステップを実行させる。
【００８７】
一般に、毛髪は、移動や風を受けるなどによって、様々な速度で変形などの運動をする。例えば、毛髪の束が高速に運動するときには、毛髪同士の相互作用により、一部の毛髪は遅れて運動するため、毛髪の束は運動方向と反対側に広がると考えられる。このような現象を再現するため、本実施形態では、毛髪の束の形状を、マスタ毛髪の粒子モデルを構成するマスタ粒子の水平方向速度（毛髪の接線方向に直交する方向の速度）に応じて広がるようにコントロールする。すなわち、マスタ毛髪のマスタ粒子の水平方向の運動速度に応じて、毛髪の束が広がるように、マスタ粒子に対するメンバ粒子の相対位置（束の形状を表すオフセット）を変化させる。
【００８８】
また、個々の毛髪が高速に運動するときには、空気抵抗により、毛髪は左右に圧縮されると考えられる。このような現象を再現するため、本実施形態では、個々の毛髪の形状を、マスタ粒子の水平方向の速度が大きくなるほど、左右の広がりが少なくなるようにコントロールする。すなわち、マスタ毛髪のマスタ粒子の水平方向の運動速度に応じて、毛髪の左右の広がりが少なくなるように、マスタ粒子に対するメンバ粒子の相対位置（毛髪の形状を表すオフセット）を変化させる。
【００８９】
一般に、リアリティのある髪の動きを再現するためには、シミュレーションを行う際に、個々の毛髪の運動を独立に計算するだけではなく、毛髪同士が互いに及ぼす影響を考慮することが非常に重要である。しかし、毛髪間の相互作用の計算を行うためには、ある毛髪と他の毛髪が接触しているかどうかの判定を、全ての毛髪同士の組み合わせに対して行う必要があり、高速化のための工夫を行ってもなお、多くの処理時間がかかってしまう。そのため、これまでのリアルタイムシミュレーションを目的としたシステムでは、毛髪同士の相互作用の計算は省略されている。その結果、他の毛髪によって動きをさまたげられることがないため、全ての毛髪が同じような動きになってしまい、不自然な髪のアニメーションになってしまう。
【００９０】
本実施形態の髪シミュレーション方法でも、毛髪同士の接触判定を含む正確な相互作用の計算は行っていない。つまり、本手法に係る動的な毛髪の束の変形モデル（詳細モデル）では、毛髪同士の相互影響を物理的に正確に計算して変形を行っているのではなく、運動速度に応じた単純な幾何学的変形行うことによって変形を行っている。本手法を用いることにより、毛髪の束における毛髪同士の相互作用によって生じる結果を、単純なモデルによって、効率的に実現することができる。したがって、本発明によれば、自然な髪のアニメーションをリアルタイムに生成することができる。
【００９１】
メンバ毛髪変形ステップは、より具体的には、束の形状を表すオフセット（ｕi,j,k，ｖi,j,k，ｔi,j,k）を対応するマスタ粒子の速度に基づいてコントロールする「束形状変形ステップ」と、毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）をマスタ粒子の速度に基づいてコントロールする「毛形状変形ステップ」とを備えている。つまり、束の形状および束を構成するメンバ毛髪の形状は、各メンバ粒子が対応するマスタ粒子の速度に基づいてコントロールされる。この速度は、直前の粒子位置および現在の粒子位置に基づいて計算される。なお、以下、この章では、ｑi,j,k＝（ｔi,j,k，ｕi,j,k，ｖi,j,k）をｑ＝（ｔ，ｕ，ｖ）と簡単に表す。
【００９２】
＜束形状変形ステップ＞
メンバ毛髪変形ステップでは、まず、束形状変形ステップが実行される。束形状変形ステップは、上記のように、束の形状を表すオフセットを、マスタ毛髪の対応する粒子の速度に基づいてコントロールするステップである。
【００９３】
図４（ｃ）に示すように、一般的に、毛髪の束の形状は、束の動きが速くなるほど広がると考えられる。もし、全ての毛髪を、それぞれ粒子システムを使用してシミュレーションしたとすると、全ての毛髪は同じように動き、束の大きさは全く変化しないことになる。しかしながら、実際の人間の髪では、毛髪は相互に作用しあっており、毛髪の動きは乱れが生じたり、後ろに流れたりする。ここでは、このような束の形状の変形を再現するために、各メンバ粒子の束の形状を表すオフセットｑを、マスタ毛髪の対応するマスタ粒子の速度に応じてコントロールしている（図７（ａ）（ｂ）参照）。
【００９４】
しかしながら、束の速度に応じて束の広がりがどのように変化するかという、束の速度と束の形状の関係は、毛髪同士の複雑な相互作用によって決まるため、正確にモデル化することは難しい。また、束の速度と束の形状の関係は、毛髪の質や密度によっても変わってくる。本実施形態では、束の速度の大きさに比例して束の広さを線形に決定する、単純な変形モデルを用いることにした。
【００９５】
図７（ｂ）に示されるように、オフセット位置ｑは、速度ベクトルｓとスケーリング媒介変数ＲＳkとに基づいて動かされる。
速度の方向によってオフセット位置を変化させる方向や大きさを決定するため、ｕｖ座標系によって表されたオフセット位置を、速度ベクトルｓの方向を基準とするｓｒ座標系に変換し、ｓｒ座標系上で変形を適用する。
【００９６】
そのため、まず、単位ベクトルuｓを計算する。単位ベクトルuｓはｕ−ｖ面と平行である。ここではｕ−ｖ面上に速度ベクトルを投影することで単位ベクトルuｓを計算する。
【００９７】
次に、単位ベクトルuｒを計算する。この単位ベクトルuｒは、ベクトルuｓと垂直し、ｕ−ｖ面と平行である。
【００９８】
このように計算した、単位ベクトルuｓ、単位ベクトルuｒと次の式（９）を用いて、水平方向のオフセット（ｕ，ｖ）を、ｓ−ｒ座標系における座標（ｒ，ｓ）に変換する。
【００９９】
【数９】
2009020874.tif 000011
【０１００】
変形後のオフセット位置「ｓ’」は、速度ベクトルの大きさ｜ｓ｜と、スケーリング係数ＲＳkを使用して決められる。
【０１０１】
【数１０】
2009020874.tif 000012
【０１０２】
ＲＳkを決めるための直感的な方法として、ではあるが、ここでは、毛髪の束が最も広がったときの束形を現す半径関数Ｒ’（ｔ）を使用する。半径関数Ｒ’（ｔ）は、束の形状の初期化で用いた半径関数Ｒ（ｔ）と同様に、表現したい髪型に合わせて、ユーザが任意の関数を与えることができる。
【０１０３】
そして、スケーリング係数ＲＳkは、各マスタ粒子ごとに、Ｒ’（ｔ）とＲ（ｔ）から、次の式（１１）によって計算される。
【０１０４】
【数１１】
2009020874.tif 000013
【０１０５】
ただし、上述したように、本変形は単純な線形変形であるので、速度｜ｓ｜が大き過ぎると、束の幅が広がりすぎ、不自然な形が生ずる可能性がある。このような問題を回避するために、ここでは、｜ｓ｜を最高速度Ｓmaxによって制限する。つまり、式（１０）において、速度ベクトルの大きさ｜ｓ｜がＳmax以上である場合は、｜ｓ｜の変わりにＳmaxを使用する。
【０１０６】
最後に、ｓｒ座標系で計算したオフセット（Ｓ’，ｒ）を、ｕｖ座標系のオフセット（ｕ’，ｖ’）に戻すことで、現在の束形状を表すオフセットｑ＝（ｕ’，ｖ’，ｔ’）を計算する。
【０１０７】
【数１２】
2009020874.tif 000014
【０１０８】
＜毛形状変形ステップ＞
次に、毛形状変形ステップが実行される。毛形状変形ステップは、毛の形状を表すオフセットを、マスタ毛髪の対応する粒子の速度に基づいてコントロールするステップである。
【０１０９】
人間の毛髪が水平方向に高速で運動するときには、巻き毛のような曲がった髪の毛は、図４（ｂ）に示されるように、空気抵抗によって水平方向に圧縮されると考えられる。そこで、このような変形を実現するために、ここでは、毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）についても、束の形状変形と同様の、線形変化モデルを導入する。
【０１１０】
ここでは、（ｃｕi,j,k，ｃｖi,j,k）を、マスタ粒子の速度の大きさに応じて、線形に変化させる。変形した毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）を、束の形状を表すオフセット（ｕ’，ｖ’，ｔ’）に加えることで、粒子の相対位置を計算する。つまり、式（５）が、次の式（１３）に置き換わることになる。
【０１１１】
【数１３】
2009020874.tif 000015
【０１１２】
式（１３）では、マスタ粒子の速度｜ｓ｜が大きくなるほど、毛髪の形状を表すオフセット（ｃｕi,j,k，ｃｖi,j,k）が小さくなるような計算を行う。ここで、ＣＳは、最大の変形を表す値であり、式（１０）や（１１）におけるＲ’（ｔ）と同様の役割を担う。これを用いることで、粒子の速度が極端に大きいときに、ＣＳにより定められる値よりはオフセットが小さくならないようにすることで、メンバ毛髪が真っ直ぐになることを防止する。
【０１１３】
＜＜メンバ毛髪生成ステップ＞＞
そして、メンバ毛髪生成ステップを実行する。メンバ毛髪生成ステップは、マスタ毛髪シミュレーションステップにおいて計算されたマスタ粒子の位置と、メンバ毛髪変形ステップにおいて変化されたメンバ粒子の相対位置を用いて、メンバ毛髪のメンバ粒子の位置を計算するステップである。
【０１１４】
メンバ毛髪変形ステップにより、各メンバ粒子の相対座標ｑi,j,k＝（ｕi,j,k，ｖi,j,k，ｔi,j,k）が計算される。ｑi,j,kは、ｉ番目のマスタ毛髪のｊ番目のメンバ毛髪のｋ番目の粒子の相対座標
を表す。ｑi,j,k＝（ｕi,j,k，ｖi,j,k，ｔi,j,k）は、マスタ毛髪に対して水平な方向を（ｕi,j,k，ｖi,j,k）、垂直な方向をｔi,j,kとする、マスタ粒子ｐi,kのローカル座標系で表される（図８参照）。
【０１１５】
ローカル座標系（ｔi,k，ｕi,k，ｖi,k）を表すための単位ベクトルｔi,k，ｕi,k，ｖi,kは、各マスタ粒子ごとに、以下の手順で計算する。まず、毛髪の接線方向ベクトルｔi,kは、マスタ粒子の位置ｐi,kと、隣接するマスタ粒子の位置ｐi,k-1の差分ベクトルを計算し、正規化することで、求めることができる。次に、毛髪に垂直な面の方向を表す単位ベクトルｕi,k，ｖi,kは、は、接線方向ベクトルｔi,kと、任意の参照ベクトルｘを用いて、次の式（１４）を用いて計算される。参照ベクトルは、できるだけ、接線方向ベクトルｔi,kと直交するものが望ましい。本実装形態では、毛髪は、大体の場合、垂直方向に延びているので、参照ベクトルとして頭のｘ軸を使用した。なお、ここでいう垂直方向とは、重力方向のことである。
【０１１６】
【数１４】
2009020874.tif 000016
【０１１７】
メンバ毛髪生成ステップでは、メンバ毛髪を構成する各メンバ粒子の位置（絶対位置）ｐi,j,kを、ｑi,j,k（＝ｕi,j,k，ｖi,j,k，ｔi,j,k）と、マスタ粒子ｐi,kのローカル座標系（ｔi,k，ｕi,k，ｖi,k）を用いて次の式（１５）で計算する。
【０１１８】
【数１５】
2009020874.tif 000017
【０１１９】
＜＜レンダリングステップ＞＞
メンバ毛髪生成ステップにより生成された個々のメンバ毛髪を、人体モデルと一緒に画面に描画（レンダリング）することで、髪シミュレーションの１フレームを生成することができる。上記シミュレーションステップ内の全ステップを繰り返し、毛髪の変化を計算しながら、各フレームの画像を連続的に生成していくことで、髪シミュレーションのアニメーションを生成することができる。
【０１２０】
毛髪をレンダリングする手法については、従来の手法を使用した。一般に、髪のレンダリングでは、個々の毛髪のシェーディングモデル、および、セルフシャドウ（self shadows）の両方を考慮することが重要である。本実装形態では、シェーディングモデルとして、広く知られたモデルを使用しているので（参考文献１０参照）、その詳細な説明は省略する。本実装形態では、このシェーディングモデルを、バーテックスシェーダプログラムとして実装しており、次に説明するＧＰＵ（グラフィックハードウェア上のプロセッサ）上で高速に計算を行うことが可能である。さらに、セルフシャドウを実現するための方法として、ディープシャドウ手法（deep shadow method、参考文献１２参照）を用いることができる。本手法は、セルフシャドウを実現する一般的な方法であり、ＧＰＵを用いて高速に実行することができる。
【０１２１】
＜＜ＧＰＵによる実装＞＞
近年、グラフィックハードウェアは大きく進歩しており、グラフィックハードウェアのプログラマブルシェーダの仕組みを用いることで、グラフィックス処理以外の一般的な処理を、ＧＰＵを用いて高速に実現することが可能となっている。そこで、このようなグラフィックハードウェアを応用して、物理シミュレーションを高速に実現するための技術は、最近、多くの注目を集めている。本実施形態の髪シミュレーション方法は、粒子モデルを用いて毛髪をモデル化しており、ＧＰＵ上で作動させることができるようになっている。本発明に係る髪シミュレーション方法で用いる粒子モデルは、粒子モデルを構成する各粒子を並列に処理することが可能であるため、ＧＰＵを用いた実装に適している（参考文献14,15,18参照）。
【０１２２】
また、本発明に係る髪シミュレーション方法では、粗いモデルの物理シミュレーションだけでなく、詳細モデルの変形処理もまたＧＰＵ上で実行できるようになっている。
【０１２３】
本実施形態では、ここまでに説明したようなシミュレーションシステムを、ＧＰＵを利用して作動させている。本実施形態は、Ｃ++とＯｐｅｎＧＬを使用して実装した。そして、プログラマブルシェーダを利用するために、The Cg Tutorial（参考文献７）を使用した。
【０１２４】
また、利用者が、髪型を設定するために、単純な髪型エディタを実装した。本エディタを使用して、入力された人体モデルに対して、衝突判定のための球体を設定したり、マスタ毛髪を生成する頭部の範囲や、各位置におけるマスタ毛髪の長さ、そして、毛髪の束を生成するための媒介変数などを、マウスとキーボードを使用して簡単に指定したりすることができるようになっている。
【０１２５】
このように、本発明に係る髪シミュレーション方法はＧＰＵへの実装が容易であるため、当該シミュレーション方法を用いることによってリアルタイムシミュレーションを実現することが可能である。
【０１２６】
以下、本手法のＧＰＵへの実装方法について説明する。
【０１２７】
図９は、シェーダプログラムのインプット及びアウトプットに用いられるテクスチャについて要約したものである。
まず、マスタ髪のシミュレーションのＧＰＵでの実装について説明する。
【０１２８】
ここまで説明したような、粒子モデルを使用した物理シミュレーションは、ＧＰＵ上で処理できる。ここで、ＧＰＵへの実装について簡単に説明する。なお、本実施形態で用いた方法は、先行研究と同様の方法である（参考文献14）。
【０１２９】
図１０に示されるように、ＧＰＵで処理する場合、粒子の位置をテクスチャイメージデータ中に色情報として保存する。本実施形態の髪シミュレーション方法では、少なくとも、位置Ｐ，Ｐ-1，Ｐ-２のそれぞれのデータを保存する３つのテクスチャが必要である。なお、全ての変数は、テクスチャという形でＧＰＵを備えるグラフィックハードウェアのビデオメモリに格納される。
【０１３０】
粒子位置情報などが格納されたテクスチャデータ配列（array）は、画素単位の処理が記述されたプログラムであるフラグメントシェーダプログラム（fragment shader program）に送られて処理される。
【０１３１】
積分処理をＧＰＵ上で実現するシェーダプログラムは、直近の２つの位置Ｐ-1，Ｐ-２を入力として、粒子の現在位置Ｐを出力する。
【０１３２】
なお、シェーダプログラムの実装を簡略化するため、テクスチャに粒子の位置のデータを格納するとき、図１０に示されるように、１本の毛髪の全粒子に関するデータを一つのデータ列にまとめて格納する。このようにすると、常に隣の画素を参照することで、隣接する粒子の位置データに簡単にアクセスできる。シェーダプログラムでは、隣接する粒子の位置との差分ベクトルより接線の向きを計算する必要があるため、より短い時間でこの計算を行うためには、このようなデータ格納手法が有効である。
【０１３３】
また、本実施形態のシミュレーションでは、ｔ0（図８、図１０参照）を計算するために、毛髪の基端粒子のさらに基となるものとして、ダミー粒子を追加している。ダミー粒子の位置は、基端粒子と同様、頭の動きに基づいて計算される。
【０１３４】
ＲＧＢＡカラーモデルのテクスチャを使用する場合であれば、各画素のＲＧＢに粒子の位置Ｐのｘｙｚ座標値を、Ａに初期距離ｌkを格納させておくことができる。
【０１３５】
制約条件の適用処理をＧＰＵ上で実現するシェーダプログラムは、積分により計算された位置Ｐを入力として、制約条件を適用した後の位置Ｐ’を出力する。このとき、位置Ｐ-2は必要ないので、位置Ｐ-2のためのテクスチャを出力位置Ｐ’のためのテクスチャとして使用することで、必要なテクスチャの枚数を節約することができる。
【０１３６】
また、積分計算で粒子の位置変化を計算した後、制約条件を繰り返し適用する。粒子間の長さの制約を適用する処理と、粒子の人体へのめり込みの制約を適用する処理は、それぞれ、異なるシェーダプログラムとして実装される。各シェーダプログラムは、それぞれ、適当な数回、繰り返し適用される。
【０１３７】
次に、メンバ毛髪の初期化、及び、形状変形のＧＰＵでの実装について説明する。
【０１３８】
メンバ毛髪のメンバ粒子の位置Ｐi,j,kは、マスタ毛髪の対応する粒子の位置Ｐi,jと、その直前位置Ｐi,j-1と、オフセット（ｔi,j,k，ｕi,j,k，ｖi,j,k）（ｃｕi,j,k，ｃｖi,j,k）と、変形媒介変数（ＲＳk，ＣＳ，Ｓmax）から計算される。直前位置は、各粒子の速度ｓi,j,kを計算するために使用される。なお、一枚のテクスチャに最大４値（ＲＧＢＡの場合）を格納できることから、これらの８つの変数を格納するためには、少なくとも２枚のテクスチャが必要となる。
【０１３９】
ここでは、全ての毛髪について同じ変形媒介変数（ＲＳk，ＣＳ，Ｓmax）を使用しても、異なる媒介変数を使用しても、どちらでもよい。前者の場合、媒介変数（ＣＳ，Ｓmax）を、テクスチャを使用せずに、直接シェーダプログラムに渡すことができる。この場合でも、まだ、５つのオフセット媒介変数とＲＳkのために２つのテクスチャが必要である。なお、オフセット量および変形のための媒介変数は、シミュレーションをしている間は不変である。したがって、これらのテクスチャは最初に一回だけ初期化されるものである。また、これらの媒介変数は、メンバ毛髪の全ての粒子について必要である。
【０１４０】
ここで、Ｎ本のマス毛髪があり、各マスタ毛髪毎にＭ本のメンバ毛髪が生成されると仮定すると、図９に示されるように、「Ｎ×Ｍ」本の毛髪のためのテクスチャ領域が必要である。そして、「Ｎ×Ｍ」本のメンバ毛髪についてレンダリングするためには、Ｎ本のマスタ毛髪毎に、計算をしてスクリーン上にレンダリングするという処理をＭ回繰り返す必要がある。このような処理を行うためには、各繰り返しの処理において、今回処理を行うＭ本のメンバ毛髪のグループの変数が格納されている開始地点のテクスチャアドレスをシェーダプログラムに与える必要がある。
【０１４１】
前段落の処理の代わりに、Ｎ×Ｍの点を同時にレンダリングするようにしてもよい。この場合、シェーダプログラムに全てのテクスチャを与える必要があり、アウトプット位置についての情報を格納するための大きなテクスチャと、アウトプット粒子のテクスチャ座標系を、インプット粒子のテクスチャ座標系に配置するための追加のテクスチャが必要となる。
【０１４２】
＜実験結果＞
以上に述べた髪シミュレーション方法を用いて髪のシミュレーション実験を行った結果について説明する。
【０１４３】
この髪シミュレーション実験では、シミュレーション装置１として、ＯＳがウインドウズビスタ（登録商標）である標準的な性能のパソコン本体３にグラフィックカード４を搭載したものを用いた。より具体的に説明すると、このシミュレーション装置１は、ＣＰＵ５がインテル（登録商標）Core2 Duo E6600 2.4GHz、メインメモリ６が２ＧＢのものであり、そのほかに、ディスプレイ７、外部記憶装置であるハードディスク８、ＣＤ−ＲＯＭなどの記憶媒体のためのマルチドライブ９、サウンドカード１０、ＬＡＮカード１１、マウス１２やキーボード１３などの入出力インターフェースなどが接続されたものである。なお、符号「１４」はバスである（図１１参照）。
【０１４４】
次の表は、様々な条件下での計算処理時間を示すものである。そして、図１２にいくつか描画イメージを示した。
【０１４５】
【表１】
2009020874.tif 000018
【０１４６】
ここでは、全ての実験において、各毛髪の粒子モデルを構成する粒子数を１０とした。適切な毛髪量（毛髪本数）は、髪型や毛髪の束の大きさ（直径）によって異なるが、一般に、キャラクタ（人）の頭皮を覆うには、少なくとも１００００本〜２００００本程度必要である。
【０１４７】
詳細モデルにおいて、総数として、１００００本から２００００本のメンバ毛髪を使用すると、アニメーション速度は約４０fps（フレーム数／秒）から５０fpsであった（表１の実験例１，２，３および図１２（ａ）（ｂ）参照）。他方、総数５００００本のメンバ毛髪を使用すると、その速度は、約３０fpsまで低下した（表１の実験例４参照）。
【０１４８】
また、メンバ毛髪に動きがない従来の束モデル（静的束モデル）での計算処理時間と、本実施形態で用いている動的な束モデル（詳細モデル）での計算処理時間は、ほとんど同じであった。そして、動的束モデルをリアルタイムシミュレーションとして実行することができた。そして、予想通り、従来の静的な束モデルでは束の形が変化しないために不自然であり（図１２（ｃ）参照）、本実施形態の動的な束モデルを使用することで、より自然なシミュレーションとなった（図１２（ｂ）参照）。
【０１４９】
なお、先に説明したように、本実施形態では、シンプルな線形変形モデルを用いている。このモデルは、物理的に正確な動きを保障するものではない。また、メンバ毛髪の生成の際には、制約条件は全く用いていない。したがって、メンバ毛髪の長さはアニメーションの途中で変化する可能性や、メンバ毛髪が人体内に入り込む可能性がある。しかしながら、結果のアニメーションを見る限りでは、メンバ毛髪の長さの変動は、全般に非常に小さいものであり、まったく目立つものではなかった。
【０１５０】
また、本実施形態では、横方向の速度だけに着目し、縦方向の速度は無視した。一般に、毛髪の束の形状は、水平方向だけではなく、垂直方向の速度の変化に応じて、垂直方向にも変化するはずである。しかしながら、毛髪のモデルを構成する粒子の位置を垂直方向に変化させるためには、毛髪の根元の粒子から先端の粒子まで、毛髪に沿って変化を伝える必要がある。このためには、各粒子についての計算処理において、隣接する粒子に関するプロセスの結果が必要になる。このような処理は、プログラムをＧＰＵに実装することは困難である、という問題がある。
【０１５１】
本実施形態の方法を提供する主目的は、現実的な計算コストで、現在実現可能な髪のリアルタイムシミュレーション方法に、より高品質のリアリティを与えることにある。物理的な正確さは、特にオンラインアプリケーションに関しては、それほど重要ではない。本手法の重要な特徴は、妥当な束の変形モデルを導入することで、従来の動かない束のモデルの問題を改善できたことである。より多くの計算時間をかければ、物理的にもっと正確なモデルを実現することは可能となるが、本手法は、できる限り短時間の処理で、できる限りリアリティに富むシミュレーションを実現したいという要求に、最も適合するものである。
【図面の簡単な説明】
【０１５２】
【図１】本実施形態の髪シミュレーション方法の処理の流れの概要を示すフローチャート図である。
【図２】本実施形態の髪シミュレーション方法のシステムの概要を示す構成図である。
【図３】本実施形態の髪シミュレーション方法について、（ａ）は、粒子モデルシミュレーションを使用してシミュレートされた粗いモデルの状態を示す一フレームであり、（ｂ）は、動的な束のモデルを使用して幾何学的に生成された詳細モデルの状態を示す一フレームである。
【図４】動的な束のモデルを示すものであり、（ａ）は、マスタ毛髪の周りにメンバ毛髪を生成した状態を示す説明図であり、（ｂ）は、静的な形状の束を生成した例を示す説明図であり、（ｃ）は、動的に形状が変化する束を生成した例示す説明図である。
【図５】束の形状を定義する関数に関するものであり、（ａ）は、異なる半径関数による異なる束の形状の例を示す説明図であり、（ｂ）は、異なる長さ割当関数による異なる束の形状の例を示す説明図である。
【図６】毛髪の形状を定義する媒介変数を変化させることで、さまざまな形状の毛髪を生成した結果を示すものであり、（ａ）は、ストレートの形状の毛髪を示す説明図であり、（ｂ）は、ウェーブがかかった形状の毛髪を示す説明図であり、（ｃ）は、ねじれた形状の毛髪を示す説明図である。
【図７】束の形状のコントロールについて説明するためのものであり、（ａ）は、静止した状態の束の形状を説明するための説明図であり、（ｂ）は、運動状態の束の形状を説明するための説明図である。
【図８】マスタ毛髪とメンバ毛髪との間の空間的な関係を示す説明図である。
【図９】プログラマブルシェーダで用いるテクスチャを示す説明図である。
【図１０】（ａ）は、テクスチャ上に各毛髪の各粒子の位置を格納した状態を示す説明図であり、（ｂ）は、追加されるダミー粒子を示す説明図である。
【図１１】本実施形態の髪シミュレーション方法を実行するためのシミュレーション装置のシステム構成を示す構成図である。
【図１２】(ａ)から(ｅ)は、それぞれ、表１の各実験条件での実験におけるスクリーンショットを示す説明図である。
【符号の説明】
【０１５３】
１…髪シミュレーション装置、  ３…パソコン本体、      ４…グラフィックカード、
５…ＣＰＵ、                  ６…メインメモリ、      ７…ディスプレイ、
８…ハードディスク、          ９…マルチドライブ、  １０…サウンドカード、
１１…ＬＡＮカード、          １２…マウス、          １３…キーボード
【図１】
2009020874.tif 000019
【図２】
2009020874.tif 000020
【図３】
2009020874.tif 000021
【図４】
2009020874.tif 000022
【図５】
2009020874.tif 000023
【図６】
2009020874.tif 000024
【図７】
2009020874.tif 000025
【図８】
2009020874.tif 000026
【図１１】
2009020874.tif 000027
【図１２】
2009020874.tif 000028
【図９】
2009020874.tif 000029
【図１０】
2009020874.tif 000030