(57)【要約】【課題】コンピュータグラフィックス分野（ＣＧ）で利用するのに好適な、髪の毛の動きをシミュレーションする手法を提供すること。【解決手段】初期データ入力部１０１で入力された初期データを用いて、形状制約初期化部１０２で、初期時刻において髪の毛を構成する各格子点間の相対的な位置関係を求めておく。状態更新部１０３で、時刻ｔでの各格子点の座標、速度、力から時刻ｔ＋△ｔの座標、速度を計算する。長さ制約部１０４で髪の毛の長さを一定に保つように各格子点の座標、速度を修正する。形状制約修正部１０５で、さらに各格子点の座標、速度に対して初期時刻における各格子点間の相対的な位置関係に基づく修正を行う。【選択図】  図１
2004206329.tif 000002
【特許請求の範囲】
【請求項１】
体毛の少なくとも一本が複数の点で構成されているとモデル化し、その挙動をシミュレーションする装置であって、
初期時刻における、各点の座標及び速度並びに各点にかかる力を入力する初期データ入力部と、
初期時刻における各点の座標から、各点とこれに隣接する点との間隔である初期間隔及び各点付近の体毛の形状を算出する形状制約初期化部と、
ある時刻ｔにおける、各点の座標、各点の速度、各点にかかる力を用いて、微小時間△ｔ経過後の時刻ｔ＋△ｔにおける各点の座標を求める状態更新部と、
前記初期間隔に基づいて、更新された各点の座標を修正する長さ制約部と、
初期時刻での前記各点付近の体毛の形状に基づいて、更新された各点の座標を修正する形状制約修正部と、
を備えるシミュレーション装置。
【請求項２】
前記長さ制約部は、
時刻ｔ＋△ｔにおける各点とこれに隣接する点との間隔が、前記初期間隔と等しくなるように、各点の座標を修正することを特徴とする請求項１記載のシミュレーション装置。
【請求項３】
前記形状制約初期化部では、各点において体毛が曲がる角度を求めておき、
前記形状制約修正部では、各点における、時刻ｔ＋△ｔでの体毛の曲がる角度と初期時刻での体毛の曲がる角度との差が所定の範囲に収まるように、各点の座標を修正する、
ことを特徴とする請求項１記載のシミュレーション装置。
【請求項４】
前記状態更新部では、時刻ｔ＋△ｔにおける各点の速度も求めておき、
前記長さ制約部では、前記速度のうち前記長さ制約部で各点の座標を修正した方向に平行な速度成分について、
０にする、
減衰させる、
符号を反転させる、または
符号を反転させて減衰させる、
のいずれかの修正を行う請求項１乃至請求項３記載のシミュレーション装置。
【請求項５】
前記状態更新部では、時刻ｔ＋△ｔにおける各点の速度も求めておき、
前記形状制約修正部では、前記速度のうち前記形状制約修正部で各点の座標を修正した方向に平行な速度成分について、
０にする、
減衰させる、
符号を反転させる、または、
符号を反転させて減衰させる、
のいずれかの修正を行う請求項１乃至請求項３記載のシミュレーション装置。
【請求項６】
前記形状制約修正部では、前記長さ制約部で修正された速度に対して、
さらに、前記修正された速度のうち前記形状制約修正部で各点の座標を修正した方向に平行な速度成分について、
０にする、
減衰させる、
符号を反転させる、または、
符号を反転させて減衰させる、
のいずれかの修正を行う請求項４記載のシミュレーション装置。
【請求項７】
体毛の少なくとも一本が複数の点で構成されているとモデル化し、その挙動をシミュレーションする方法であって、
初期時刻における、各点の座標及び速度並びに各点にかかる力を入力し、
初期時刻における各点の座標から、各点とこれに隣接する点との間隔である初期間隔及び各点付近の体毛の形状を算出し、
ある時刻ｔにおける、各点の座標、各点の速度、各点にかかる力を用いて、微小時間△ｔ経過後の時刻ｔ＋△ｔにおける各点の座標を求め、
前記初期間隔に基づいて各点の座標の修正を行い、
初期時刻での各点付近の体毛の形状に基づいて各点の座標の修正を行う、
シミュレーション方法。
【請求項８】
前記初期間隔に基づく各点の座標の修正にあたっては、
時刻ｔ＋△ｔにおける各点とこれに隣接する点との間隔が、前記初期間隔と等しくなるように、各点の座標を修正することを特徴とする請求項７記載のシミュレーション方法。
【請求項９】
初期時刻における各点の座標から、各点の体毛の曲がり具合を表すパラメータとして、各点において体毛が曲がる角度を求めておき、
前記初期時刻における体毛の曲がり具合に基づく各点の座標の修正にあたっては、
各点における、時刻ｔ＋△ｔでの体毛の曲がる角度と初期時刻での体毛の曲がる角度との差が所定の範囲に収まるように、各点の座標を修正することを特徴とする請求項７記載のシミュレーション方法。
【請求項１０】
ある時刻ｔにおける、各点の座標、各点の速度、各点にかかる力を用いて、微小時間△ｔ経過後の時刻ｔ＋△ｔにおける各点の速度も求めておき、
前記初期間隔に基づく各点の座標の修正並びに前記初期時刻での体毛の曲がり具合に基づく各点の座標の修正において、各点の座標を修正した方向に平行な速度成分について、
０にする、
減衰させる、
符号を反転させる、または
符号を反転させて減衰させる、
のいずれかの修正を行う請求項７乃至請求項９記載のシミュレーション方法。
【請求項１１】
体毛の少なくとも一本が複数の点で構成されているとモデル化し、その挙動をシミュレーションさせるプログラムであって、
コンピュータに、
初期時刻における、各点の座標及び速度並びに各点にかかる力を入力する入力ステップと、
初期時刻における各点の座標から、各点とこれに隣接する点との間隔である初期間隔及び各点付近の体毛の形状を算出する形状パラメータ初期化ステップと、
ある時刻ｔにおける、各点の座標、各点の速度、各点にかかる力を用いて、微小時間△ｔ経過後の時刻ｔ＋△ｔにおける各点の座標を求める状態更新ステップと、
前記初期間隔に基づいて各点の座標の修正を行う長さ方向修正ステップと、
初期時刻での各点付近の体毛の形状に基づいて各点の座標の修正を行う曲げ方向修正ステップと、
を実行させるシミュレーションプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、シミュレーション装置、方法、プログラムに関するものであり、特にコンピュータグラフィックス分野（ＣＧ）で利用するのに好適な、体毛の動きをシミュレーションする装置、方法、プログラムに関するものである。
【０００２】
【従来の技術】
従来からＣＧ（コンピュータグラフィックス）によるアニメーション分野、コンピュータゲームの分野において、髪の毛のシミュレーション、モデリング等は幅広く行われてきた。
【０００３】
これまでに髪の毛シミュレーションの手法として、運動方程式を解いて厳密に髪の毛の運動を求める手法、形状制約を行う手法、２Ｄの長方形領域を用いた手法等が提案されている。
【０００４】
運動方程式を解いて厳密に髪の毛の運動を求める手法は、髪の毛の長さ方向と曲げ方向とに弾性力が働くと仮定して運動方程式をたてて、これを解くことにより髪の毛の自然な動きを表現しようとするものである。髪の毛の長さ方向にバネのような弾性力が働くと仮定して髪の毛の長さを制約するとともに、髪の毛の曲げ方向（長さ方向に垂直な方向）に対しても弾性力を仮定して髪の毛の癖を考慮するようにしている（例えば非特許文献１）。
【０００５】
しかし、運動方程式を解く手法は、バネのような弾性力を仮定しているためにシミュレーションが不安定であり、時として結果が発散するという問題がある。
【０００６】
形状制約を行う手法は、髪の毛をモデル化する際に例えば人間の顔や頭の輪郭形状に合わせて形状制約を行うことで、自然な髪の動き、形状を表現しようとするものである（例えば、特許文献１）。
【０００７】
しかし、髪全体の形状を強制的に制約するために、髪の毛の形状に制約を強く加えてしまうので、髪の毛の動きが非常に硬くなてしまい柔軟性に欠けるという問題があった。
【０００８】
また、２Ｄの長方形の領域をまとまった領域としてシミュレーションを行い、そこに、髪の毛のテクスチャーを重ねることで髪の動きを表現する方法もある（例えば非特許文献２）。しかし、長方形の領域でシミュレーションしているため、動きの方向性によっては不自然な結果が得られるなどの問題があった。
【０００９】
【特許文献１】
特開２００１−３５７４１５公報
【００１０】
【非特許文献１】
Ｊｏｈｎｎｙ  Ｃｈａｎｇ，  Ｊｉｎｇｙｉ  Ｊｉｎ，  ａｎｄ  Ｙｉｚｈｏｕ  Ｙｕ．  Ａ  Ｐｒａｃｔｉｃａｌ  Ｍｏｄｅｌ  ｆｏｒ  Ｈａｉｒ  Ｍｕｔｕａｌ  Ｉｎｔｅｒａｃｔｉｏｎｓ，Ｓｉｇｇｒａｐｈ２００２  ｐｐ．７３−８０
【００１１】
【非特許文献２】
Ｋｏｈ  Ｃ．Ｋ．  ａｎｄ  Ｈｕａｎｇ  Ｚ．  Ａ  ｓｉｍｐｌｅ  ｐｈｙｓｉｃｓ  ｍｏｄｅｌ  ｔｏ  ａｎｉｍａｔｅ  ｈｕｍａｎ  ｈａｉｒ  ｍｏｄｅｌｅｄ  ｉｎ  ２Ｄ  ｓｔｒｉｐｓ  ｉｎ  ｒｅａｌ  ｔｉｍｅ．  ＥＧ  ＣＡＳ２００１  ｐｐ．１２７−１３８
【００１２】
【発明が解決しようとする課題】
上述したように、従来のシミュレーション方法はいずれも完全とはいえず、計算結果が発散してしまったり、あるいは、髪の毛の動きが不自然になる等の問題を抱えている。
【００１３】
そこで、本発明では、安定に計算可能であるとともに、見た目に自然で髪の毛の癖も考慮された動きを計算可能なシミュレーション装置及び方法を提供することを目的とする。
【００１４】
【課題を解決するための手段】
上記課題を解決するため本発明のシミュレーション装置、方法、プログラムでは、体毛の一本一本を任意間隔で配置された複数点で構成されているとモデル化し、その挙動をシミュレーションする。これら複数点のそれぞれを格子点とする。
【００１５】
まず、初期時刻における、各点の座標及び速度並びに各点にかかる力の入力を行う。そして、初期時刻における各点の座標から、各点とこれに隣接する点との間隔である初期間隔及び各点付近の体毛の形状を算出する。具体的には、初期時刻における体毛の各格子点間の距離ｌ（エル）と、体毛の各格子点における体毛の曲がる方向（３次元的角度）とである。
【００１６】
次に、ある時刻ｔにおける、各点の座標、各点の速度、各点にかかる力を用いて、微小時間△ｔ経過後の時刻ｔ＋△ｔにおける各点の座標を求める。すなわち、体毛を構成する各格子点について、それぞれの位置、速度、働く力から、現在の時刻から微小な時間経過後の各格子点の位置、速度を計算する。
【００１７】
そして、前記初期間隔に基づいて、更新された各点の座標を修正する。体毛を構成する格子点間の距離を所定の間隔に保つため、格子点の位置、速度を所定の長さ制約の条件に従って修正する。長さ制約の条件とは、前述の初期時刻における各格子点間の距離である。
【００１８】
さらに、初期時刻での前記各点付近の体毛の形状に基づいて、更新された各点の座標を修正する。体毛の癖を特徴付けるために、体毛を構成する各格子点とその近傍の点との間の相対的な位置関係から制約をかける。相対的な位置関係はとは、前述の初期時刻における各格子点間の距離及び曲がる方向である。
【００１９】
具体例を挙げて説明する（後に図５を用いて説明する）。相対的な位置関係とは、初期時刻においてある格子点（格子点Ｘ）から根元方向に隣接する格子点（格子点Ｙ）と、格子点Ｙからさらに根元方向に隣接する格子点（格子点Ｚ）とに注目した時の、格子点Ｙと格子点Ｚとを通る直線ＹＺと、格子点Ｘと格子点Ｙとを通る直線ＸＹとがなす３次元的角度αと、格子点Ｙと格子点Ｘとの距離ｌ（エル）である。
【００２０】
例えば、格子点Ｙを原点とし、直線ＹＺを軸とし、格子点Ｚからさらに根元方向に隣接する格子点（格子点Ｗ）と格子点Ｙ、Ｚとを含む平面ＹＺＷを方位角の基準とする３次元球極座標系を考える。
【００２１】
格子点Ｘの座標は、この座標系では（動径ｒ、極角（軸に対する角度）θ、方位角φ）とで表される。３次元的角度αは、この座標系における格子点Ｘの極角θと、方位角φとを用いて表すことができる。また、格子点Ｙと格子点Ｘとの距離ｌ（エル）は、この座標系における格子点Ｘの動径ｒになる。
【００２２】
時刻ｔ＋△ｔにおける具体的な修正手法の一例は次のとおりである（後で図６〜図８を用いて説明する）。
【００２３】
まず、長さ制約の条件に基づく修正を次のように行う。格子点Ｘを、格子点Ｘと格子点Ｙとを通る直線ＸＹ上で移動させる。格子点Ｘを初期時刻における格子点Ｘと格子点Ｙとの距離ｌ（エル）と等しくなる点に移動させる。このように格子点Ｘを修正して得られる点を修正点Ｘ’とする。
【００２４】
次に、体毛の癖に基づく修正を行う。初期時刻において求めておいた格子点Ｙと格子点Ｘとの距離ｌ（エル）及び３次元的角度α及び時刻ｔ＋△ｔにおける格子点Ｗ、Ｚ、Ｙの座標から候補点Ｘ”を求める。
【００２５】
すなわち、初期時刻において、格子点Ｙを原点とする３次元球極座標系を考えたのと同様に、時刻ｔ＋△ｔにおいても格子点Ｙを原点とし、直線ＹＺを軸とし、格子点Ｚからさらに根元方向に隣接する格子点（格子点Ｗ）と格子点Ｙ、Ｚとを含む平面ＹＺＷを方位角の基準とする３次元球極座標系を考える。
【００２６】
そして、以下の条件を満たす点Ｘ”を求める。
（１）格子点Ｙからの距離がｌ（エル）である。
（２）極角が初期時刻におけるθと等しい。
（３）方位角が初期時刻におけるφと等しい。
【００２７】
そして、候補点Ｘ”を、時刻ｔ＋△ｔにおける格子点Ｙ及び格子点Ｚを通る直線ＹＺを軸に所定の角度だけ回転させる。すなわち、極角θを固定して方位角φのみを所定の範囲で変動させて回転させる。回転により候補点Ｘ”が描く円弧上で、前述の修正点Ｘ’に最も近い位置にある点を体毛の癖に基づく修正後の格子点Ｘとする。
【００２８】
尚、前述の候補点Ｘ”を回転させる「所定の角度」は、体毛の性質（硬い、柔らかい）、各格子点の位置（根元か先端か）に応じて値を変えると良い。
【００２９】
尚、各格子点の座標を修正した場合、修正前の格子点から修正後の格子点へ向かう方向である修正方向に平行な方向について、速度の修正を行うと良い。
【００３０】
例えば、格子点の修正方向に平行な方向の速度を０にする、０より大きく１より小さい値を乗じて減衰させる、符号を反転させる、−１より大きく０より小さい値を乗じて符号を反転させた上で減衰させる等の修正方法が挙げられる。
【００３１】
【発明の実施の形態】
以下、図面を参照して本発明の一実施形態のシミュレーション装置について説明する。
【００３２】
（概略構成）図１は本発明の一実施形態のシミュレーション装置の概略構成を説明するブロック図である。
【００３３】
このシミュレーション装置は、利用者から髪の毛の各格子点について、座標・速度・加速度等の初期値を入力する初期データ入力部１０１と、初期データに基づいて髪の毛の特徴（形状・長さ）を制約情報として算出する形状制約初期化部１０２と、各格子点の速度・各格子点にかかる力に基づいて運動方程式を解いて微小時間経過後の格子点の座標を算出する状態更新部１０３とを備える。
【００３４】
さらに、状態更新部１０３で求めた微小時間経過後の格子点の座標を長さに関する制約に基づいて修正する長さ制約部１０４と、修正された格子点の座標を形状に関する制約に基づいて修正する形状制約修正部１０５と、長さ及び形状の条件で修正された格子点の座標データ列を出力する結果出力部１０６とを備える。
【００３５】
尚、結果出力部１０６から得られる座標データ列は、外部プロッタや表示装置で描画されたり、記憶装置に蓄積される。
【００３６】
本実施形態のシミュレーション装置はコンピュータ上で動作させるプログラムとして実現される。すなわち、コンピュータに上述の各部の機能を実現させるシミュレーションプログラムである。尚、本装置の一部あるいは全部を半導体集積回路等のハードウエアとして実現しても良い。
【００３７】
図２はシミュレーションプログラムを動作させるコンピュータの概略構成を説明する図である。
【００３８】
このコンピュータは本シミュレーションプログラム及び処理データを一時記憶するメモリ２０２と、シミュレーション処理を行う中央演算処理装置２０１と、本シミュレーションプログラムや結果を格納する磁気ディスクドライブ２０３と、光ディスクドライブ２０４とを備える。
【００３９】
さらに、ＬＣＤやＣＲＴ等の表示デバイスに表示する画面を描画して画像データを出力するインターフェースである画像出力部２０５と、ＬＣＤやＣＲＴ等の表示デバイスである表示装置２０７と、キーボード、マウス等の各種入力デバイスである入力装置２０８と、入力装置２０８からの入力を受け付けるインターフェースである入力受付部２０６とを備える。
【００４０】
シミュレーションプログラムは磁気ディスクドライブ２０３に格納されている。そして、シミュレーションを行う時に読み出されてメモリ２０２に展開されて中央演算処理装置２０１において実行される。実行結果は磁気ディスクドライブ２０３に格納されるほか、適宜、画像出力部２０５を介して表示装置２０７に出力されるものとする。尚、シミュレーション結果は、他のプログラム（例えばゲームプログラムやＣＧアニメーションプログラム等）で使用するために、プロセス間通信の機能（例えば、共有メモリ、パイプ）を用いて出力しても良い。
【００４１】
以下、シミュレーション装置の各部の説明を行う。
【００４２】
（初期データ入力部１０１）初期データ入力部１０１は、シミュレーション対象となる髪の毛の一本一本を構成する格子点の座標の入力と、各格子点の質量、初期速度、加速度、各格子点にかかる力（外力）、シミュレーション時間等のシミュレーションの初期条件の入力を受ける。
【００４３】
尚、頭にある全ての髪の毛を一本一本シミュレーションしても良いが、使用する計算機の性能によっては計算量過多になることもある。その場合は、計算機の性能に応じて数百〜数千本程度に適宜間引いて入力を行っても良い。
【００４４】
間引いた場合であっても、後述するように一本の髪の毛のシミュレーション結果に基づいて、その周囲に同じ結果を用いた髪の毛を複数生成（平行移動させたデータを生成）することで、髪の毛のボリューム感、質感を損なうことを避けられる。
【００４５】
シミュレーションの初期条件は、予め磁気ディスク等に格納しておいた、各格子点の質量、初期座標、初期速度、初期加速度、各格子点に働く力を表す関数、各格子点に働く力の初期値、各格子点がどの髪の毛の根元から何番目の格子点であるかを表す識別情報等の情報を読み込むことにより入力を行う。
【００４６】
尚、格子点の座標等の入力を対話的に行っても良い。例えば、コンピュータの画面上にシミュレーション対象の髪の毛を有する人の頭部を映し、利用者が画面に表示された頭部を見ながら、ポインティングデバイス等で格子点を指示するようにしても良い。各格子点の初期速度、各格子点に働く力の関数、各格子点に働く力の初期値も同様にして各点ごとに対話的に設定する。
【００４７】
例えば、図４のように顔４０１を画面に表示しておく。利用者はポインティングデバイスで格子点４０２の座標を指定する（例えば利用者がマウスをクリックした場所に格子点を設定する）。そして、格子点を設定する毎にダイアログを表示させ、利用者に質量、速度、加速度、外力も設定してもらう（例えば数値や数式を入力してもらう）という方法が考えられる。
【００４８】
（形状制約初期化部１０２）形状制約初期化部１０２は、初期時刻ｔ０において、各格子点毎に、それぞれの近傍の格子点との相対的な位置関係から髪の毛の癖を特徴付けるパラメータを求める。ここでは、髪の毛の癖として、髪の毛の各格子点間の距離（間隔）と各格子点近傍における曲がり具合とを考える。
【００４９】
本実施形態では、それぞれの格子点について髪の毛の根元方向に向かって３個隣までにある格子点との相対的な位置関係を求める。
【００５０】
図５は、ある一本の髪の毛において、ある格子点ｘと、その根元方向に隣接する格子点ｙと、格子点ｙから根元方向に隣接する格子点ｚと、格子点ｚから根元方向に隣接する格子点ｗとを用いて相対的な位置関係を求める様子を説明する図である。
【００５１】
本実施形態では、相対的な位置関係を表すパラメータとして、格子点ｙを原点とし、格子点ｙと格子点ｚとを通る直線ｙｚを軸とし、格子点ｙ、ｚ、ｗを含む平面ｙｚｗを方位角の基準とする３次元球極座標における、格子点ｘの座標を用いる。尚、本実施形態では、方位角０度の基準となるのは、平面ｙｚｗを直線ｙｚで二分割した際に格子点ｗを含まない側とする。
【００５２】
上述の３次元球極座標を用いると、格子点ｘの座標は（距離ｌ（エル）、極角α1、方位角α2）の３成分で表すことができる。格子点ｙが原点なので、格子点ｘの座標のうち「距離ｌ（エル）」の成分は格子点ｙと格子点ｘとの間の距離を表すパラメータになる。
【００５３】
また、「極角α1」「方位角α2」の成分は、格子点ｙに対する格子点ｘの方向を表すので、髪の毛の曲がり具合を表すパラメータとなる。
【００５４】
尚、方位角の基準の取り方は本実施形態と逆（格子点ｗを含む側）にしても構わないし、平面ｙｚｗの法線を用いても構わない。平面ｙｚｗを直線ｙｚを軸に任意の角度回転させた平面を基準にしても良い。
【００５５】
（状態更新部１０３）状態更新部１０３は、各格子点毎の座標、速度、力から運動方程式を解いて、微小時間△ｔ経過後の時刻ｔ＋△ｔにおける座標、速度を求める。
【００５６】
時刻ｔにおける格子点の座標ｘ（ｔ）、速度ｖ（ｔ）、格子点にかかる力ｆ（ｔ）、質量ｍと表現して、
【００５７】
【数１】
2004206329.tif 000003
【００５８】
等の式で表される運動方程式を解く。
【００５９】
（長さ制約部１０４）長さ制約部１０４は状態更新部１０３において計算した各格子点の座標、速度を修正する。修正は、髪の毛の根元にあたる格子点から先端に向かって順番に行う。
【００６０】
髪の毛はバネと異なりほとんど伸び縮みしない。従って各格子点間の距離はほとんど不変になるはずである。そこで長さ制約部１０４では、形状制約初期化部１０２で求めた各格子点間の距離ｌ（エル）を用いて、状態更新部１０３で求めた時刻ｔ＋△ｔにおける座標を修正する。
【００６１】
図６は長さ制約部１０４において、ある格子点ｘの座標を修正する様子を説明する図である。時刻ｔ＋△ｔでも距離が初期時刻ｔ０と等しいｌ（エル）になるように修正する。
【００６２】
状態更新部１０３で求めた時刻ｔ＋△ｔにおける、ある格子点の座標ｘ（ｔ＋△ｔ）、速度ｖ（ｔ＋△ｔ）、この格子点の髪の毛の根元方向に隣接する格子点の座標ｙ（ｔ＋△ｔ）を用いると、修正された座標は
【００６３】
【数２】
2004206329.tif 000004
【００６４】
のようになる。
【００６５】
格子点ｘよりも髪の毛の先端側にある各格子点についても、同様に（ｄ−ｌ）ｅyx（ｔ＋△ｔ）を差し引いておく。すなわち、格子点ｘから髪の毛の先端までを（ｄ−ｌ）ｅyx（ｔ＋△ｔ）だけ平行移動させる。
【００６６】
速度に関しては座標を修正するために移動した方向の成分を０にする。すなわち、
【００６７】
【数３】
2004206329.tif 000005
【００６８】
尚、座標修正のために移動した方向の速度成分を０にする代わりに、適当な抵抗係数（１より小さい）を掛けて減衰させたり、あるいは符号を反転させても良い。また、減衰させて符号を反転させても良い。
【００６９】
本実施形態では、速度に関しては、座標の場合とは異なり、格子点ｘよりも髪の毛の先端側にある各格子点については修正しない。
【００７０】
（形状制約修正部１０５）形状制約修正部１０５は長さ制約部１０４で修正した格子点の座標を髪の毛の曲がり具合に応じて修正する。
【００７１】
通常、髪の毛は極端な曲がり方はしないはずである。従って、各格子点の曲がり具合は初期値と比較して大幅には変化しないものと考えられる。そこで、髪の毛の曲がり具合は初期値から所定の範囲内に収まると見做して各格子点の座標を修正する。
【００７２】
ある格子点ｘの座標を修正するに先だって、まず、形状制約の条件から格子点ｘの座標ｘ候補１（ｔ＋△ｔ）を求める。それから、ｘ候補１（ｔ＋△ｔ）と長さ制約部１０４で求めたｘ修正（ｔ＋△ｔ）とを用いて曲げ方向に修正された格子点ｘの座標であるｘ候補２（ｔ＋△ｔ）を求める。
【００７３】
図７は時刻ｔ＋△ｔにおいて、ある格子点ｘの座標を形状制約の条件から求める様子を説明する図である。
【００７４】
まず、修正対象格子点から髪の毛の根元方向に向かって１つ隣にある格子点ｙの座標ｙ（ｔ＋△ｔ）と、髪の毛の根元方向に向かって２つ隣にある格子点ｚのの座標ｚ（ｔ＋△ｔ）と、形状制約初期化部１０２で求めた極角α1、方位角α2と、形状制約初期化部１０２で求めた格子点ｙと格子点ｘとの間の距離の初期値ｌ（エル）を用いて、形状制約から導かれる格子点ｘの座標であるｘ候補１（ｔ＋△ｔ）を求める。
【００７５】
具体的には、初期時刻において格子点ｙを原点とする３次元球極座標を考えたのと同様にして、時刻ｔ＋△ｔにおいて格子点ｙ（ｔ＋△ｔ）を原点とし、直線ｙｚ（ｔ＋△ｔ）を軸とし、平面ｙｚｗ（ｔ＋△ｔ）を方位角の基準とする３次元球極座標を考える。
【００７６】
この球極座標において、以下の条件を満たす点をｘ候補１（ｔ＋△ｔ）とする。
（１）原点である格子点ｙ（ｔ＋△ｔ）からの距離がｌ（エル）。すなわち座標の動径成分がｌ（エル）。
（２）極角がα1。
（３）方位角がα2。
【００７７】
このようにして求めたｘ候補１（ｔ＋△ｔ）は、髪の毛の曲がり具合が初期時刻ｔ０の時と全く同じであると仮定した場合の格子点の座標である。
【００７８】
次に、上述の３次元球極座標においてｘ候補１（ｔ＋△ｔ）の方位角α2を所定の範囲で変動させる。そして、ｘ修正（ｔ＋△ｔ）に最も近い点を求めることで、曲げ方向に修正された格子点ｘの座標ｘ候補２（ｔ＋△ｔ）を求める。
【００７９】
図８は時刻ｔ＋△ｔにおいて、ｘ候補１（ｔ＋△ｔ）とｘ修正（ｔ＋△ｔ）とを用いて、格子点ｘの曲げ方向について修正された座標であるｘ候補２（ｔ＋△ｔ）を求める様子を説明する図である。
【００８０】
上述の３次元球極座標においてｘ候補１（ｔ＋△ｔ）の方位角α2を±βの範囲で変動させて得られる円弧８０２について考える。円弧８０２上でｘ修正（ｔ＋△ｔ）に最も近い点をｘ候補２（ｔ＋△ｔ）とする。方位角の変動範囲を修正範囲の条件と呼ぶ。本実施形態では修正範囲の条件βは３０度とする。
【００８１】
上述の円弧８０２は、ｘ候補１（ｔ＋△ｔ）を直線ｙｚ（ｔ＋△ｔ）を軸に回転させて得られる円軌道８０１の一部に相当する。
【００８２】
尚、修正範囲の条件βの値は、髪の毛の質（硬い、柔らかい）等に応じて適宜変化させて良い。また、βの値を髪の毛の先端と根元とで変化させても良い。例えば、根元ではβを小さくしておき、先端に行くに従ってβを大きくしても良い。
【００８３】
ｘ候補２（ｔ＋△ｔ）を時刻ｔ＋△ｔにおける格子点ｘの座標とする。さらに、格子点ｘより髪の毛の先端側にある全ての格子点についても、ｘ候補２（ｔ＋△ｔ）−ｘ修正（ｔ＋△ｔ）だけ移動させ、格子点ｘから髪の毛の先端までがｘ候補２（ｔ＋△ｔ）−ｘ修正（ｔ＋△ｔ）だけ平行移動するように修正する。
【００８４】
また、長さ制約部で修正して得られた速度ｖ修正を、さらに修正してｖ修正２を求める。具体的には、座標をｘ修正（ｔ＋△ｔ）からｘ候補２（ｔ＋△ｔ）に修正するために移動した方向の成分を０にする。式で表すと、
【００８５】
【数４】
2004206329.tif 000006
【００８６】
となる。
【００８７】
尚、長さ制約部１０２で行った速度修正と同様、座標修正のために格子点ｘを移動させた方向の速度成分を０にする代わりに、適当な抵抗係数（１より小さい）を掛けて減衰させたり、あるいは符号を反転させても良い。また、減衰させて符号を反転させても良い。
【００８８】
また、本実施形態では、ｘ候補２（ｔ＋△ｔ）を円弧８０２上で見つけたが、これに限らず、例えばｙ（ｔ＋△ｔ）を中心としてｘ候補１（ｔ＋△ｔ）を通る球面のうち、ｘ候補１（ｔ＋△ｔ）を中心とする含む所定の領域（例えば、ある所定の立体角内の範囲）の中からｘ候補２（ｔ＋△ｔ）を見つけても良い。
【００８９】
（結果出力部１０６）形状制約修正部１０５において得られた各格子点の座標を基に髪の毛を表現するデータ列を生成する。本実施形態では各格子点を根元から順番に連結して髪の毛を描画する。
【００９０】
尚、これまでに計算してきた一部或いは全部髪の毛について、それぞれ髪の毛の周囲に一定幅、ランダム幅あるいはガウス分布等を用いて決めた幅で平行移動した位置に格子点を複製して髪の毛を描画しても良い。このようにすれば、シミュレーションを行った本数以上の髪の毛を表現することが可能となる。
【００９１】
（動作）以下、図面を参照して本実施形態のシミュレーション装置の動作について説明する。図３は本実施形態のシミュレーション装置の処理の流れを説明する図である。
【００９２】
（ステップ３０１）まず、初期データとして、シミュレーションを行う時間、シミュレーションを行う時間間隔（すなわち微小時間△ｔの値）、各格子点の座標、速度、加速度の初期値、各格子点の質量、各格子点に働く外力（例えば、空気抵抗等の粘性抵抗や重力）の関数、各格子点がどの髪の毛の何番目の点であるかを表す識別情報等の入力を受ける。入力された初期データはメモリ２０２に記憶しておく。
【００９３】
初期データの入力は、予め磁気ディスク等に格納しておいたデータを読み込むことで行うが、前述したように、対話的に行っても構わない。
【００９４】
（ステップ３０２）入力された初期データから、各格子点毎に、それぞれの近傍の格子点との相対的な位置関係から髪の毛の癖を特徴付けるパラメータを求める。髪の毛の癖として、髪の毛の長さ（格子点間の間隔、距離）と曲がり具合とを考える。
【００９５】
髪の毛の長さと曲がり具合を特徴付けるパラメータとして、それぞれの格子点について髪の毛の根元方向に向かって３個隣までにある格子点との相対的な位置関係を求める。前述したように、根元方向に隣接する格子点を原点とする３次元球極座標を考え、原点からの距離、極角、方位角を求める。すなわち、図５における、隣接する格子点との距離ｌ（エル）と、極角α1と、方位角α2とを求める。
【００９６】
尚、本実施形態では距離ｌ（エル）は各格子点間ごとに異なる値とするが、初期データを工夫して同一の値にしても良い。
【００９７】
（ステップ３０３）各格子点毎に運動方程式を解いて微小時間△ｔ経過後の座標を求める。すなわち、前述の状態更新部１０３の処理を行う。
【００９８】
（ステップ３０４）ステップ３０３で求めた各格子点の微小時間△ｔ経過後の座標を、微小時間△ｔ経過後も各格子点間の長さが初期データの時と同じ距離ｌ（エル）となるように座標の修正を行う。すなわち、前述の長さ制約部１０４の処理を行う。
【００９９】
（ステップ３０５）ステップ３０４で修正した各格子点の座標を、さらに髪の毛の曲げ方向について修正を行う。すなわち、前述の形状制約修正部１０５の処理を行う。ここで修正して得られる座標を微小時間△ｔ経過後の格子点の座標とする。
【０１００】
（ステップ３０６）微小時間△ｔ経過後の各格子点の座標を結果として出力する。結果の出力は座標値を用いて髪の毛を描画して画面に表示させるようにしても良いし、座標データとして磁気ディスク等の記憶媒体に記憶させておいても良い。また、必要に応じて、速度、加速度等を出力しても良い。
【０１０１】
（ステップ３０７）シミュレーションを行う時間が経過したかを調べる。シミュレーションを行う時間が終わっていなければステップ３０３に戻り、次の微小時間△ｔ経過後のシミュレーションを行う。微小時間△ｔが積み重なり、シミュレーションを行う時間が満了した場合はシミュレーションを終了する。
【０１０２】
（本実施形態の効果）以上、本実施形態によれば、物理的な運動方程式による計算に加えて、長さによる制約と、髪の毛の曲がり具合による制約とに基づく修正を行うようにしたことで、自然で、しかも、髪の毛の癖の影響が考慮された動きを計算することができる。
【０１０３】
（変形例）本実施形態では、初期時刻における各格子点間の距離については特に制約をしていないが、これを一定の値に固定しても良い。こうすれば、形状制約初期化部１０２で格子点間の距離を求める必要がなくなり、計算処理量を減らすことができる。
【０１０４】
【発明の効果】
以上、本発明によれば、物理的な運動方程式による計算と、体毛の格子点間の長さによる制約と、体毛の形状による制約とに基づく修正を行うようにしたことで、自然で、しかも、体毛の癖の影響が考慮された動きを計算することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態のシミュレーション装置の構成を説明する図。
【図２】本発明の一実施形態のシミュレーションプログラムを動作させるコンピュータの図。
【図３】本発明の一実施形態のシミュレーションプログラムの動作の流れを説明する図。
【図４】対話的に格子点を設定する例を説明する図。
【図５】初期データにおいて、格子点間の相対的な位置関係を求める処理を説明する図。
【図６】長さ制約部における処理を説明する図。
【図７】形状制約修正部における修正処理の前半を説明する図。
【図８】形状制約修正部における修正処理の後半を説明する図。
【符号の説明】
１０１  初期データ入力部
１０２  形状制約初期化部
１０３  状態更新部
１０４  長さ制約部
１０５  形状制約修正部
１０６  結果出力部
【図１】
2004206329.tif 000007
【図２】
2004206329.tif 000008
【図３】
2004206329.tif 000009
【図４】
2004206329.tif 000010
【図５】
2004206329.tif 000011
【図６】
2004206329.tif 000012
【図７】
2004206329.tif 000013
【図８】
2004206329.tif 000014