(57)【特許請求の範囲】
【請求項１】
ヘアを生成するためのコンピュータにおいて、
サーフェスを定義するサーフェス定義モジュールと、
前記サーフェス上でヘアをレンダリングするか否かを決定する最適化モジュールとを備え、前記最適化モジュールは、
ヘアのサイズメトリックを判定し、
第１のフレームから第２のフレームにかけて、ヘアルート位置が移動する距離に基づいて、スピード空間メトリックを判定し、
前記ヘアについて判定されたサイズメトリックに第１の密度曲線を適用し、前記ヘアのスピード空間メトリックに第２の密度曲線を適用し、密度乗数値を生成し、
前記ヘアのサイズメトリックに第１の幅曲線を適用し、前記ヘアの幅を調整し、
前記密度乗数値に基づいて、ヘアをレンダリングするか否かを決定する、コンピュータ。
【請求項２】
前記密度乗数値は、前記ヘアをレンダリングするか否かを決定するために、更に乱数と比較される請求項１記載のコンピュータ。
【請求項３】
前記ヘアのサイズメトリックの判定は、正規化装置座標（ＮＤＣ）空間におけるヘアの長さの算出を含む請求項１記載のコンピュータ。
【請求項４】
前記ヘアのサイズメトリックに第１の幅曲線を適用し、前記ヘアのためのスピード空間メトリックに第２の幅曲線を適用し、ヘアの幅を調整するための幅乗数値を生成する請求項１記載のコンピュータ。
【請求項５】
ヘアをレンダリングするか否かをコンピュータに決定させる方法において、
ヘアのサイズメトリックを判定するステップと、
第１のフレームから第２のフレームにかけて、ヘアルート位置が移動する距離に基づいて、スピード空間メトリックを判定するステップと、
前記ヘアについて判定されたサイズメトリックに第１の密度曲線を適用し、前記ヘアのスピード空間メトリックに第２の密度曲線を適用し、密度乗数値を生成するステップと、
前記ヘアのサイズメトリックに第１の幅曲線を適用し、前記ヘアの幅を調整するステップと、
前記密度乗数値に基づいて、ヘアをレンダリングするか否かを決定するステップとを有する方法。
【請求項６】
前記ヘアをレンダリングするか否かを決定するために、前記密度乗数値を乱数と比較するステップを更に有する請求項５記載の方法。
【請求項７】
前記ヘアのサイズメトリックの判定は、正規化装置座標（ＮＤＣ）空間におけるヘアの長さの算出を含む請求項５記載の方法。
【請求項８】
前記ヘアのサイズメトリックに第１の幅曲線を適用し、前記ヘアのためのスピード空間メトリックに第２の幅曲線を適用し、ヘアの幅を調整するための幅乗数値を生成するステップを更に有する請求項５記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、現在、米国特許番号６，９５２，２１８が付与されている米国特許出願番号０９／３７０，１０４の継続出願である、２００２年０１月１６日２００２に出願され、現在、米国特許番号７，０５０，０６２が付与されている米国特許出願番号１０／０５２，０６８の継続出願である、２００６年２月１日に出願された米国特許出願番号１１／３４５，３５５の一部継続出願である、２００７年５月１１日に出願された米国特許出願番号１１／８０１，９２４の一部継続出願である。また、本出願は、２００６年７月２４日に出願された米国仮出願６０／８３３，１１３及び２００７年１月２３日に出願された米国仮出願６０／８８６，２８６の優先権を主張する。
【０００２】
本発明はファー（fur）のデジタル制作に関する。詳しくは、本発明は、動物モデル上のファーコート（fur coat）のリアルな近距離及び遠距離からの外観のデジタル制作に関する。
【背景技術】
【０００３】
コンピュータグラフィックスにおける現実味がある哺乳動物のモデル化、アニメーション化、レンダリングにおける多くの課題のうちの１つは、リアルなファーを生成することであった。実際のファーコートは、皮膚を覆う数十万本もの個別の、円筒状のヘア（毛）から構成され、寒さ及び捕食者に対する防衛等、生命を守る機能を有している。動物の間で、及び個々の動物の体に亘って、これらのヘアの外観及び構造は、長さ、厚さ、形状、色、向き及び下毛／上毛の構成に関して、大きく異なる。更に、ファーは、静止しておらず、基底にある皮膚及び筋肉の動きの結果として、及び風や水等の外的要因によって、動き、分かれる（breaks up）。
【０００４】
ファー制作のために用いられる従来の幾つかのコンピュータグラフィック技術は、滑らかなファーの説得力がある外観を実現しているが、これらの技術は、体のあるエリア、例えば首の回り等において、実際のファーが分かれることが多いということを考慮に入れていない。更に、従来の手法では、濡れたファーのヘアは、互いに纏まり（クランプ：clump ）、乾燥したファーに比べてかなり異なる外観を呈すことが考慮されていない。また、水がかかって、次第に濡れていくヘアをシミュレートする処理は、未だ開発されていない。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明のシステム及び方法は、動物等のサーフェスのジオメトリモデル上のリアルなファーコートのデジタル表現及び生成のための柔軟な技術を提供する。一実施の形態においては、サーフェス上のファーの配置、調整及びコーミング（櫛通し）のための革新的な技術が提供される。一実施の形態においては、サーフェスパッチ境界（surface patch boundaries）に亘るファーの連続性が維持される。更に、一実施の形態では、濡れたファーをシミュレートする革新的な方法が提供される。この方法では、サーフェス上の領域に静的クランピング（static clumping）及びアニメーション化クランピング（animated clumping）を適用できる。一実施の形態においては、サーフェス上のファートラック（fur-track）に沿ったヘアの対称的ブレイキング（symmetric breaking）及び一方的ブレイキング（one-sided breaking）のための方法が提供される。上述した処理は、下毛及び上毛等のファーの層を生成するために、繰り返し適用することができる。
【０００６】
本発明の目的、特徴及び利点は、以下の詳細な説明によって明らかになる。
【図面の簡単な説明】
【０００７】
【図１ａ】本発明の教示に基づいて動作する一実施の形態の簡略化されたブロック図である。
【図１ｂ】本発明の教示に基づいて動作する一実施の形態の簡略化されたブロック図である。
【図２】本発明の教示に基づくファーの生成のための処理の一実施の形態のフローチャートである。
【図３ａ】３次元動物モデルの皮膚を定義する一組のパラメトリックサーフェスを示す図である。
【図３ｂ】静的コーミング処理及びアニメーション化コーミング処理の一実施の形態を示す簡略化されたフローチャートである。
【図３ｃ】コーミング処理の一実施の形態を示す具体例の図である。
【図３ｄ】コーミング処理の一実施の形態を示す具体例の図である。
【図４】サーフェス境界において、視覚的な不連続性を排除するために制御ヘアを調整する処理の一実施の形態を示すフローチャートである。
【図５】ヘアを配置するための処理の一実施の形態を示すフローチャートである。
【図６】サーフェス上に定義されたサブパッチの一具体例を示す図である。
【図７ａ】１つの制御ヘアの制御頂点の具体例を示す図である。
【図７ｂ】制御ヘア重みの算出の具体例を示す図である。
【図７ｃ】本発明の一実施の形態の教示に基づいて、最終的なヘアの向きを算出するために用いられる補間処理の具体例を示す図である。
【図７ｄ】最終的なヘアの向きの算出の一実施の形態の簡略化されたフローチャートである。
【図８】静的クランピングを実行する処理の一実施の形態を示すフローチャートである。
【図９】異なるクランプパーセント及びクランプレート値の具体例を示す図である。
【図１０ａ】コーミングされたファーコートのレンダリングされたフレームを示す図である。
【図１０ｂ】乾いた状態から濡れた状態に移行するようにアニメーション化されたファーシーケンスの一実施の形態のスナップショットを示す図である。
【図１０ｃ】乾いた状態から濡れた状態に移行するようにアニメーション化されたファーシーケンスの一実施の形態のスナップショットを示す図である。
【図１０ｄ】乾いた状態から濡れた状態に移行するようにアニメーション化されたファーシーケンスの一実施の形態のスナップショットを示す図である。
【図１１】アニメーション化エリアクランピングのための処理の一実施の形態を示すフローチャートである。
【図１２ａ】ヘアブレイキングのための処理の一実施の形態を示すフローチャートである。
【図１２ｂ】ヘアの対称的ブレイキング及び一方的ブレイキングの具体例を示す図である。
【図１２ｃ】ブレイキングエフェクトの具体例を示す図である。
【図１２ｄ】ブレイキングエフェクトの具体例を示す図である。
【図１２ｅ】ブレイキングエフェクトの具体例を示す図である。
【図１２ｆ】ブレイキングエフェクトの具体例を示す図である。
【図１３ａ】下毛と上毛の視覚的エフェクトを示す図である。
【図１３ｂ】下毛と上毛の視覚的エフェクトを示す図である。
【図１３ｃ】下毛と上毛の視覚的エフェクトを示す図である。
【図１４】シェーディング処理の一実施の形態を示すフローチャートである。
【図１５】図１ｂのパイプラインに類似するが、更なる異なる機能を含むヘア／ファーパイプラインの実施の形態を示すブロック図である。
【図１６ａ】制御ヘアに沿って可能なバリエーションを有する制御ヘアのクランピングを示す図である。
【図１６ｂ】制御ヘアに沿って可能なバリエーションを有する制御ヘアのクランピングを示す図である。
【図１７】本発明の一実施の形態に基づき、ボリューム埋め込み機能を実現する処理１７００を示すフローチャートである。
【図１８ａ】ブレイド形状を定義するサーフェス及び関連するボリュームの生成を示す図である。
【図１８ｂ】ランダムに配置された制御ヘアによるこれらのボリュームの埋め込みを示す図である。
【図１８ｃ】制御ヘアからの最終的なヘアストランドの補間を示す図である。
【図１９ａ】同じ制御ヘアを有し、異なるタイプの補間法によって変形されたサーフェスの側面図である。
【図１９ｂ】同じ制御ヘアを有し、異なるタイプの補間法によって変形されたサーフェスの側面図である。
【図１９ｃ】同じ制御ヘアを有し、異なるタイプの補間法によって変形されたサーフェスの側面図である。
【図２０ａ】ウェーブ、ウィーブ及び風の影響を説明する図である。
【図２０ｂ】ウェーブ、ウィーブ及び風の影響を説明する図である。
【図２０ｃ】ウェーブ、ウィーブ及び風の影響を説明する図である。
【図２１】本発明の一実施の形態に基づき、ジオメトリインスタンス化を実現する処理を示すフローチャートである。
【図２２ａ】ジオメトリインスタンス化の具体例を示す図である。
【図２２ｂ】ジオメトリインスタンス化の具体例を示す図である。
【図２３】本発明の一実施の形態に基づき、アニメーションノード及び最終的な制御ノードに接続され、ヘアモーション合成システムを構成する静的ノードの簡単なグラフを示す図である。
【図２４】ブレンドノードを使用する処理を示す図である。
【図２５ａ】回転的ブレンディングを示す図である。
【図２５ｂ】位置的ブレンディングを示す図である。
【図２６】ブレンドボールを示す図である。
【図２７】動的ソルバノードを含む動的ノードグラフを示す図である。
【図２８ａ】ボリュームノードの使用を示す図である。
【図２８ｂ】ボリュームノードの使用を示す図である。
【図２９】スーパーヘアノード処理を示すフローチャートである。
【図３０ａ】ローカル空間におけるスーパーヘアオペレーションを示す図である。
【図３０ｂ】ワールド空間におけるスーパーヘアオペレーションを示す図である。
【図３１】内側球面及び外側球面の両方を有するブレンドボールを示す図である。
【図３２】様々なシミュレーションキャッシュ間でブレンディングを行うカスケード接続ノードグラフを示す図である。
【図３３】ビュー依存画面空間最適化を実現する技術を示す図である。
【図３４】正規化装置座標（ＮＤＣ）系に変換される毛嚢ルート位置及びヘアを示す図である。
【図３５】ＮＤＣ空間において、第１のフレームから第２のフレームにかけて、プロキシヘアのルートが移動する距離を示す図である。
【図３６】ヘア数、時間及びメモリに関する最適化されていない値と、画面空間サイズメトリックを用いて最適化された値とを並べて比較するテーブルを示す図である。
【図３７】画面空間スピード法を用いる他の比較を示すテーブルを示す図である。
【図３８】最適化されていない及び最適化されたヘア数、時間及びメモリ値を示すテーブルを示す図である。
【図３９】ヘアサブパッチ最適化を実現する処理を示すフローチャートである。
【図４０】ヘアサブパッチ最適化の用途の簡単な例を示す図である。
【図４１】ヘアを草及び／又は木によってジオメトリインスタンス化し、サブパッチ最適化技術を利用してモデル化された草で覆われた景色を示す図である。
【図４２】キャッシュ状態ファイルの具体例を示す図である。
【図４３】ヘアキャッシングを実現するための処理を示すフローチャートである。
【図４４】完全にファーで覆われたキャラクタをレンダリングするために、ヘアキャッシングを用いることによって達成できる時間の削減を示すテーブルを示す図である。
【図４５】本発明の実施の形態に基づき、並べ替え可能で、多重インスタンス化可能なエフェクトを実現するエフェクトパイプラインを更に含むエフェクトモジュールを含む上述したヘア／ファーパイプラインの実施の形態を示すブロック図である。
【図４６】本発明の一実施の形態に基づき、エフェクトモジュールによって実現できる、並べ替え可能で及び多重インスタンス化可能なエフェクトを実現する処理を示すフローチャートである。
【図４７】本発明の一実施の形態に基づき、ヘア／ファーパイプラインのエフェクトモジュールのエフェクトパイプラインによって最終的なヘアに適用される、並べ替え可能で、多重インスタンス化可能なエフェクトの具体例のブロック図である。
【図４８】インスタンス化モジュール及びインスタンス化ヘアデータベースを更に含む、本発明の一実施の形態に基づくヘア／ファーパイプラインのブロック図である。
【図４９】本発明の一実施の形態に基づき、標準のＲＡＭメモリ（すなわち、メモリ内インスタンス化）及びインスタンス化ヘアデータベースの一方又は両方について、インスタンス化モジュールによって実現できる繰返しパターンを示すブロック図である。
【図５０】本発明の一実施の形態に基づき、インスタンス化ヘアデータベースに保存できる情報のタイプの具体例を示す図である。
【発明を実施するための形態】
【０００８】
方法及び装置は、サーフェス上のファー、例えば、コンピュータによって生成された動物のファーのデジタル生成のための革新的な技術を提供する。図１ａは、本発明の教示に基づいて動作する一実施の形態の簡略化されたブロック図である。コンピュータシステム１０は、中央演算処理装置（central processing unit：ＣＰＵ）１５、メモリ２５、入出力（Ｉ／Ｏ）２０を備え、これらは、ディスクドライブ又は他のデバイス等のストレージ装置に接続してもよい。また、システムは、キーボード４０又は他のユーザ入力装置及びディスプレイ３５を備えていてもよく、ディスプレイ３５は、本発明の教示に基づいて、ユーザインタフェース及びファーの最終的なレンダリングを表示するために用いてもよい。
【０００９】
一実施の形態においては、メモリ２５は、ＣＰＵ１５によって実行されると、ここに説明する処理を行う命令を格納する。これに代えて、命令は、ストレージ３０又はユーザ入力４０等の他の入力を介して受け取ってもよい。ここに説明する処理は、例えば、システム１０等のシステムによって実行されるソフトウェアとして実現してもよく、ハードウェアとして実現してもよく、ハードウェア及びソフトウェアの両方の組合せとして実現してもよい。
【００１０】
他の実施の形態を図１ｂに示す。サーフェス定義モジュール５０は、サーフェスを定義する入力を受け取り、後述するように、レンダリングされるオブジェクトのサーフェス及び制御ヘア（control hair）を定義する。モジュール５５は、制御ヘアを調整し、コーミング等の機能及びサーフェス境界に亘るシームレスなヘアを提供する。補間モジュール６０は、制御ヘアを用いてサーフェスに亘る補間を行う。ヘアクランピング及びブレイキングモジュール６５は、ヘアのクランピング及びブレイキングを提供することによって、オブジェクトのリアルなビジュアライゼーションを向上させる。レンダリングモジュール７０は、ヘアをレンダリングし、ヘアにシェーディング、ブラックライティング及びシャドウイングエフェクトを提供し、モジュール７５は、ヘアサーフェスを有するオブジェクトの最終的な出力を表示する。
【００１１】
図２は、本発明の教示に基づくファーコートの生成に含まれるステップのフローチャートである。ステップ２００では、ヘアを含むサーフェスのジオメトリを定義する。一実施の形態においては、３次元ジオメトリを用いて、皮膚、例えば、動物の皮膚をモデル化し、この上に、ファーコートを後に生成する。図３ａに示すように、通常、ジオメトリは、多くの場合、サーフェスパッチとも呼ばれるパラメトリックサーフェスの連結集合として定義される。パッチは、当業者に既知の幾つかの手法によって生成することができる。一実施の形態においては、ＮＵＲＢＳサーフェスパッチを使用する。
【００１２】
図２のステップ２１０では、これらのサーフェスパッチ上に制御ヘアを配置し、各制御ヘアは、ユーザが指定した数の制御頂点によって定義されるパラメトリック曲線、例えば、ＮＵＲＢＳ曲線としてモデル化される。後述するように、ユーザは、ヘアの包括的な密度値を指定し、実際のヘアの数及びサーフェスパッチ上のそれらの位置を決定する。また、各ヘアは、例えば、長さ、幅、ウェーブ、不透明度、及びサーフェス上の位置の面法線の方向におけるデフォルトのポイント等の多くの属性がある。
【００１３】
この実施の形態では、制御ヘアに対して幾つかのオペレーションが実行され、制御ヘア及び他の情報に基づいて最終的なヘアが生成される。但し、ここに説明する結合等のステップは、制御ヘアではなく、最終的なヘアに対して行ってもよい。
【００１４】
制御ヘアを生成するために幾つかの異なる手法を採用することができる。１つの単純なアルゴリズムでは、各ＮＵＲＢＳパッチについて、ｕ方向にｘ本のヘア、ｖ方向にｙ本のヘアを等間隔に配置する（ｘ及びｙは、ユーザによって指定される）。これに代えて、弧長に沿ってｘ本のヘア及びｙ本のヘアを等しく配置してもよい。これにより、パッチに亘るより一様な分布が得られる。但し、この手法では、異なるサイズのパッチに亘って、制御ヘアのバランスがとれた分布が実現されない。これは、ｘ本のヘア及びｙ本のヘアが、パッチの大小にかかわらず、選択された全てのパッチに配置されるためである。したがって、他の実施の形態では、制御ヘアの生成の際に、ＮＵＲＢＳパッチの面積を考慮に入れて各パッチ毎にｘ及びｙを決定する。一実施の形態においては、ユーザは、１単位面積あたりｚ本のヘアを指定する。更に、一実施の形態では、より精密な制御のために、制御ヘアを個別に又はサーフェス上の曲線に沿って配置してもよい。例えば、最終的にファーの適切なアラインメントが生成されることを確実にするために、動物の耳の鋭い縁に沿って付加的な制御ヘアを生成することができる。
【００１５】
図２のステップ２１０において、制御ヘアを生成した後、サーフェス境界で制御ヘアを調整する。制御ヘアは、各サーフェスパッチ内に配置されるので、サーフェスパッチの境界に位置する制御ヘアは、隣接するサーフェスパッチ上の制御ヘアに揃わず、サーフェス境界に沿って、顕著なヘアの不連続が生じることがある。このような潜在的問題を解決するために、サーフェス境界上の制御ヘアを調整する。制御ヘアを調整する処理の一実施の形態を図４のフローチャートに示す。
【００１６】
ステップ４００では、隣接するサーフェス間に継ぎ目（シーム：seam）を構築する。各シームは、サーフェスパッチの対応する境界（例えば、辺全体、Ｔ字接合、又はコーナ）に沿って隣接するサーフェスを特定する。ステップ４０５では、各サーフェスパッチについて、ステップ４１０では、境界を検査する。ステップ４１２では、各制御ヘアを調べる。ステップ４１５において、境界ヘアが見つかると、ステップ４２０において、対応する継ぎ目によって特定される隣接するパッチをチェックし、隣接するパッチ上に対応するヘアがあるかを確認する。一実施の形態においては、境界ヘアから短い所定の距離内にヘアがある場合、そのヘアは、対応しているとみなされる。この距離は、パラメトリック値（ｕ，ｖ）で指定してもよく、絶対空間において指定してもよい。一実施の形態においては、所定の距離は、ヘアが視覚的に同じ位置にあるように見える程度の比較的短い距離であってもよい。
【００１７】
対応する制御ヘアがある場合、ステップ４２５において、制御ヘアの一方又は両方の位置及び向きをそれぞれ共通の位置及び向きに変更することによって境界ヘア及び対応するヘアを揃える。一実施の形態においては、隣接するサーフェスパッチの対応するヘアは、境界に沿って、境界ヘアの位置にスナップされる。一実施の形態においては、隣接するサーフェスパッチが対応するヘアを有さない場合、ステップ４４５において、隣接するパッチ上に対応するヘアを挿入し、揃える。処理は、全ての境界ヘアが揃えられるまで、ステップ４３０、４３５、４４０において、各サーフェスパッチの各境界に沿って各境界ヘアについて続けられる。
【００１８】
図２において、一実施の形態では、ステップ２１５の後に、制御ヘアは、動物又は他のオブジェクトモデルを定義するサーフェス上に配置されており、制御ヘアは、サーフェス上の制御ヘアの位置の面法線に沿って方向付けられている。
【００１９】
ステップ２２０では、ヘアをコーミング（櫛通し）し、望ましい、手入れされた、乾いたファーの外観を実現する。多くの異なるコーミング処理を用いることができる。但し、この実施の形態では、静的コーミング処理（static combing process）及びアニメーション化コーミング処理（animated combing process）を制御ヘアに適用する。静的コーミングとアニメーション化コーミングの組合せによって、演算コストを軽減しながら、有効な視覚的エフェクトを得ることができる。他の実施の形態では、静的コーミング又はアニメーション化コーミングの一方のみを用いて、有益な視覚的結果を生成することもできる。同じ制御ヘアの異なるショットにコーミング処理を用いて、例えば、ファーの手入れされた外観と、僅かに乱れた外観との対比を提供することができる。
【００２０】
図３ｂを参照して一実施の形態について説明する。一実施の形態においては、オブジェクト、例えば、動物のアニメーションの間、ヘアが「活発に」動いていない場合、静的コーミングが適用される。なお、各ヘアは、ヘアのルートにおける面法線、ｄｕ及びｄｖによって定義される局所座標系において表現されるので、静的コーミングされたヘアは、基底にあるサーフェスが変形され又はアニメーション化されると「受動的に」動く。コーミングは、コーミング方向曲線（combing direction curve）、ヘアのベンドの度合い及び曲率並びに各コーミング方向曲線のフォールオフ（fall-off）を特定することによって達成される。
【００２１】
ステップ３２５では、１つ以上のコーミング方向曲線を作成する。これらの曲線は、制御ヘアをコーミングする際に適用可能な方向を示す、具体例を図３ｃ及び図３ｄに示す。図３ｃは、複数のコーミングされていない制御ヘアを示している。図３ｄは、例示的なコーミング方向曲線３６５及びその方向を示している。図３ｄには、コーミングされたヘアも示している。
【００２２】
図３ｄは、１つのコーミング方向曲線を示している。但し、通常は、それぞれがサーフェスの異なるエリアに対応する複数の異なる曲線を用いる。したがって、ステップ３３０では、各曲線に１つ以上の制御ヘアを割り当て、割り当てられたヘアは、対応するコーミング方向曲線に基づいてコーミングされる。
【００２３】
更に、ステップ３３５では、各曲線について、ベンド、曲率及びフォールアウトパラメータを定義する。ベンドパラメータは、制御ヘアがサーフェスにどれくらい近いかを定義する。曲率パラメータは、ヘアの形状を示す。例えば、曲率の値が０とは、ヘアが真っ直ぐであることを示し、最大値（例えば、１）は、ヘアが、ルートから先端まで、半径が小さい円弧状に曲がっていることを示す。
【００２４】
フォールアウト値は、ここを超えると、コーミング方向曲線の影響が低下し、制御ヘアが曲線から離れる領域を示す。幾つかの実施の形態では、フォールアウト領域は、比較的広い面積を覆うように指定され、これにより、全ての制御ヘアが等しく影響を受け、フォールアウトは生じない。他の実施の形態では、制御ヘアとコーミング方向曲線との間の距離が遠い程、コーミングエフェクトを減少させることが望ましい。
【００２５】
ステップ３４０では、割り当てられたコーミング方向曲線及びベンド、曲率及びフォールアウトパラメータに基づいて、各制御ヘアを処理する。図３ｄは、この処理の結果を示しており、ここでは、ヘアは、コーミング方向曲線３６５の向きにコーミングされている。更に、ヘアは、定義されたベンド及び曲率パラメータに基づいてカーブしている。この具体例では、フォールアウトパラメータは、表面全体を定義し、したがって、全てのヘアが等しく影響を受け、フォールアウトは存在しない。
【００２６】
また、ステップ３４５において、上述のように、アニメーション化コーミングを適用することもできる。当分野で知られているキーフレーミングを用いて、あるフレームにおいて指定されたコーミング変化の間で補間を行い、変化の間の遷移を滑らかにすることができる。すなわち、例えば、ベンド、曲率及びフォールアウトパラメータがあるフレームにおいて変化するように指定してもよい。キーフレーミング処理の実行は、指定されたフレーム変化の間のフレームの間で遷移する。この技術は、風等のヘアの外観に影響する様々な条件をシミュレートするために用いることができる。このようにパラメータをキーフレーミング処理し、再生中に各フレームでコーミング演算を実行することによって、ヘアをアニメーション化することができる。
【００２７】
また、コーミング処理は、コーミング処理のために基底にあるサーフェスと交差するヘアが、サーフェス上に押し戻される単純なヘア／サーフェス衝突モデル処理を含んでいてもよい。ヘアは、例えば、ベンドパラメータを大きな値に設定することによって、回転して基底にあるサーフェスと交差することもある。
【００２８】
処理は、ヘア／サーフェス交差を判定する反復アルゴリズムを含む。例えば、処理は、制御ヘアを定義する曲線（例えば、ＮＵＲＢＳ曲線）の連続する制御頂点とサーフェスとの線分交差判定を実行する。制御頂点ｃがサーフェスの下に落ちる場合、ｃがサーフェスを超えるために十分な量だけ、ヘアを元の非交差頂点から面法線に向けて回転させて戻す。回転の量は、ヘアが、アプリケーションによって指定された僅かな量だけ、サーフェスの上に回転して戻るために十分な大きさとする。このように、コーミングの影響を受けるベクトルの頂点は、ベクトルがサーフェスの上にあるように、面法線に向かって回転して戻される。
【００２９】
他の実施の形態では、制御ヘアの各制御頂点をパーティクルに変更し、重力及び外部の力等の動的効果を適用することによってコーミングをアニメーション化してもよい。この機能を実行するために、例えば、シリコングラフィックス社（Silicon Graphics, Inc.）の子会社である、カナダ、トロントのエイリアス・ウェーブフロント社（Alias|Wavefront）から市販されているソフトウェアであるＭａｙａを用いてもよい。
【００３０】
一旦、制御ヘアを特定及び処理（例えば、調整、コーミング）した後、図２のステップ２２３において、制御ヘアから各パッチのための最終的なヘアを生成する。上述のように、一実施の形態では、制御ヘアは、最初に、サーフェス境界に沿って調整される。他の実施の形態では、制御ヘアだけにコーミングを適用してもよく、サーフェス境界調整処理の適用に関連してコーミングを適用してもよい。
【００３１】
パッチ上のヘアの配置のための１つの例示的な処理を図５のフローチャートに示す。この実施の形態では、最終的なヘアは、２つのステップの組によって、制御ヘアから生成される。第１に、最終的なヘアの静的ヘア特徴、例えば、配置（ｕ，ｖ位置）を算出する。このステップは、一回実行できる。ステップの第２の組は、アニメーション内の各フレームについて実行でき、フレームに依存するヘア特徴を提供する。
【００３２】
ステップ５０５では、ヘアが生成されるオブジェクトのサーフェス上でサブパッチを特定する。図６は、基底にある皮膚を定義するサーフェス上に最終的なヘアを配置する一実施の形態を示している。この実施の形態では、各最終的なヘアのルート位置は、サーフェスの（ｕ，ｖ）パラメトリック値を用いて指定する。これらは、全体的な（全てのサーフェスに包括的な）密度入力値ｄｍａｘ（正方形単位面積あたりのヘアの数）、及びサーフェス上の一定間隔のポイントの可変解像度グリッド（例えば、１２８×１２８のポイント）において構成されたサーフェスパッチ毎の正規化された一組のローカル密度値（値の範囲を０〜１とする：デフォルト値は、１としてもよい）から算出される。
【００３３】
一実施の形態においては、処理は、このグリッドの解像度の如何にかかわらず、及びサーフェスパッチサイズの如何にかかわらず、異なるスケールのサーフェスに亘って、シームレスな密度を提供するようにヘアの数を決定することを試みる。ここでは、説明を目的として、指定された入力密度値（ｄｍａｘ）を１０ヘア／正方形単位面積とし、図６に示すように、ローカル密度値をサーフェス上の一定間隔のポイントに並べたと仮定する（例えば、それぞれ０．４、０．５、０．６、０．６のヘア）。これらのポイントは、図５のステップ５０５に示すように、処理されるサーフェスのサブパッチを定義する。ステップ５１０では、これらの一定間隔のポイントを結び、隣接するポイント間の（ｕ，ｖ）空間内の面積を、２つのポリゴン、より具体的には、三角形（ａ１及びａ２）によって定義される面積によって近似し、ステップ５２０において、その頂点における値から、各三角形ヘア単位毎のヘア／正方形単位面積の数の平均を求める。一実施の形態においては、これは、ＨａｉｒＵｎｉｔ（ヘア単位）＝ｄｍａｘ＊Ｖａｖｇとして求められ、ここで、ｄｍａｘは、指定された入力密度値を表し、Ｖａｖｇは、頂点における値から判定される各三角形の平均ローカル密度値を表す。これにより、ここに定義された具体例の場合、左上の三角形及び右下の三角形のそれぞれについて、ヘア／正方形単位面積は、１０＊（０．４＋０．５＋０．６）／３＝５及び１０＊（０．４＋０．６＋０．６）／３＝５．３３３となる。
【００３４】
ステップ５２５では、サブパッチ（ａ１及びａ２）の実際の近似された面積及び１単位面積あたりのヘアの数から、現在のサブパッチに配置するヘアの総数を判定する。一実施の形態においては、１単位面積あたりのヘアの総数は、ＨａｉｒＴｏｔａｌ（ヘア総数）＝Ａ＊ＨａｉｒＵｎｉｔ（ヘア単位）として求められ、ここで、Ａは、サブパッチの実際の近似された面積を表す。例えば、説明を目的とする仮定として、エリアａ１に０．４の値を適用し、エリアａ２に０．３の値を適用した場合、０．４＊５＋０．３＊５．３３３＝３．５９９９が（ｕｉ，ｖｉ）、（ｕｉ，ｖｉ＋１）、（ｕｉ＋１，ｖｉ＋１）、（ｕｉ＋１，ｖｉ）によって定義されるサブパッチに配置されるヘアの総数となる。
【００３５】
ステップ５３０では、最終的なヘアを配置する。小数によって表される個数のヘアを配置することは望ましくないので、［０，１］の範囲で一様に生成された乱数が小数部分（０．５９９９）より大きいか小さいかに応じて、３本又は４本のヘアを配置する。３本又は４本の制御ヘアは、ｕ［ｕｉ，ｕｉ＋１］にランダムに配置され、及びｖ［ｖｉ，ｖｉ＋１］にランダムに配置される。そして、処理は、ステップ５１０に戻り、次の４つの一定間隔のポイントによって定義されるサブパッチに進む。
【００３６】
各最終的なヘアは、複数の制御頂点を含む。各制御ヘアのルート位置（第１の制御頂点）は、基底にあるサーフェスの（ｕ，ｖ）値によって特定される。各ヘアの残りの制御頂点は、ヘアルート位置を原点とし、面法線の方向、ｄｕ及びｄｖを軸とする既知の局所座標系において定義される。一実施の形態においては、各ヘアは、面法線に沿って方向付けられ、制御頂点の座標は、制御頂点／ヘアの数をｎとして、ヘアの長さをｎ−１個の等しい部分に細分化することによって生成される。図７ａに示す一具体例では、ｎ＝４として、サーフェス７３０上にヘア７２５が定義されている。ルートは、頂点７２０であり、残りの頂点は、７０５、７１０、７１５である。
【００３７】
一旦、ルート位置を算出した後、各最終的なヘアについて、これを取り囲む制御ヘア（一実施の形態では３個）を判定する。一実施の形態においては、各サーフェスパッチについて、制御ヘアの（ｕ，ｖ）位置から２次元ドロネー三角形分割（当分野では周知であるため、これ以上は説明しない。）を行う。この三角形分割は、外接円を最小化し、三角形の最小角を最大にすることによって、「釣り合いのとれた（well-proportioned）」三角形を生成するので、ここでは、この三角形分割を採用している。一旦、ドロネー三角形分割を行った後、各最終的なヘアがどの三角形に含まれるかを判定する。特定の三角形を形成する３つの制御ヘアのインデクスは、その三角形に含まれるヘアに割り当てられる。
【００３８】
そして、最終的なヘア（ｈ）に対して３つの制御ヘア（ｃ１，ｃ２，ｃ３）のそれぞれが有する重み（ｗｌ，ｗ２，ｗ３）を算出する。これは、図７ｂに示すように、重心座標（当分野では周知であるため、これ以上は説明しない。）を用いて実行してもよく、図７ｂにおいて、「Ａ」は、三角形７２６（ｃ１，ｃ２，ｃ３）の面積を表している。これらの重みは、後述するように、制御ヘアから最終的なヘアを補間するために使用される。
【００３９】
各最終的なヘアの上述の情報（すなわち、（ｕ，ｖ）位置、周囲の３個の制御ヘア、及び各制御ヘアの重み）は、アニメーションにおけるオブジェクトについて、一回だけ生成してもよい。この情報を、ここでは、静的情報（static information）と呼ぶ。一方、各最終的なヘアの向きの計算は、アニメーションの各フレームにおいて行ってもよい。この向きは、図７ｃ及び図７ｄに関して説明するように、補間処理によって、制御ヘアの向き及びこれらの対応する重みから決定される。
【００４０】
ステップ７５６では、各最終的なヘア（ｈ）について、対応する３つの制御ヘア（ｃ１，ｃ２，ｃ３）を使用されるサーフェスパッチ空間（一実施の形態においては、パッチ座標系）に変換する。ステップ７５８では、制御頂点（例えば、７８２、７８３）の間の制御ヘアベクトル（例えば、ｖｌｌ、ｖｌ２、ｖｌ３）を算出する。制御ヘアベクトルの算出には、様々な技術を用いることができ、一実施の形態では、ベクトルは、制御頂点の間で、等しく分布される。そして、制御ヘアベクトルを正規化する（例えば、ｎｖ１１、ｎｖ１２、ｎｖ１３）。ステップ７６０では、３つの制御ヘアの対応する制御ヘアベクトルを補間し、最終的なヘアについて算出されている３つの決定している重みを乗算する。一実施の形態においては、１つの制御ヘアベクトルは、例えば、以下の式に基づいて算出される。
【００４１】
ｉｖ１＝ｎｖ１１＊ｗ１＋ｎｖ２１＊ｗ２＋ｎｖ３１＊ｗ３
ここで、ｉｖ１は、補間され、重み付けされた最終的なヘアの制御ヘアベクトル表現を表し、ｎｖ１１、ｎｖ２１、ｎｖ３１は、正規化された制御ベクトルを表し、ｗ１、ｗ２、ｗ３は、正規化された制御ベクトルのための対応する重みを表す。ステップ７６２では、結果的なベクトルを最終的なヘアの長さにスケーリングする（ｓｉｖ１、ｓｉｖ２、ｓｉｖ３）。スケーリングされたベクトルを求めた後、ステップ７６４において、スケーリングされたベクトルから、最終的なヘアの制御頂点（７８６、７８８、７９０、７９２）を算出する。
【００４２】
図２に示すステップ２２５、２３０、２３５、２４５は、オプションとしてもよく、手入れされた、乾いたファーコートの生成には、不要である場合もある。ステップ２２５及びステップ２３０は、濡れたファーの生成のために適用される。ヘアのクランピングは、ファーが濡れた場合、水の表面張力又は凝集のために生じることがある。このエフェクトは、隣接するヘア（ヘアの束）の先端が同じポイントに向かって引き寄せられる傾向を示し、一種の円錐形の「スーパーヘア」、又は円形のクランプが形成されるというものである。後述するように、ステップ２２５は、固定された予め定義されたエリアにヘアクランプを生成する静的エリアクランピング（static area clumping）のために実行される。ステップ２３０は、アニメーション化エリアクランピング（animated area clumping）のために実行され、すなわち、クランピングエリアがモデル上で動く場合、例えば、噴出する水又は雨粒がファーに当たって、ファーが次第に濡れていく様子をシミュレートするために実行される。何れの場合も、乾いたファーの外観から濡れたファーの外観までの様々な度合いを表現するために、アニメーション化できるパラメータを提供する。ステップ２３５は、乾いたファーのクランピング又はブレイキングを生成するために適用される。
【００４３】
特定のアプリケーションにおいては、ステップ２２５、２３０、２３５の全て又は幾つかを実行してもよい。更に、アプリケーションに応じて、優先度がより高いステップで調整されたヘアが、他のステップでは、調整されないように、ステップ２２５、２３０、２３５に優先度を付してもよい。これに代えて、エフェクトは、特定のアプリケーションに応じて、累積的であってもよく、又は選択的に累積的であってもよい。
【００４４】
ステップ２２５では、静的エリアクランピングを実行する。この処理の一実施の形態について、図８を参照して説明する。説明を目的として、ここでは、各クランプの中心のヘアをクランプ中心ヘア（clump-center hair）と呼び、このクランプ中心ヘアに引き付けられる、クランプを構成するメンバである他の全てのヘアをクランプヘア（clump hair）と呼ぶ。
【００４５】
一実施の形態においては、４つのクランピング入力パラメータ、すなわち、クランプ密度、クランプサイズ、クランプパーセント及びクランプレートがある。クランプ密度は、ヘア密度パラメータと同様に、正方形の単位面積あたり、幾つのクランプを生成するかを指定する。ここに説明する処理では、クランプ密度をクランプ中心ヘアによって定義されるクランプの実際の数に変換し、クランプ中心ヘアの数は、各サーフェスパッチのサイズに依存する。この結果、幾つかの存在するヘアがクランプ中心ヘアに変更される。
【００４６】
クランプサイズは、クランプの面積を定義する。一実施の形態においては、クランプサイズは、ワールド空間、すなわち、オブジェクトのサイズに関して、ユーザが通常参照する空間において定義される。クランプヘアは、１つのクランプのメンバにしかなれないため、一実施の形態においては、クランプ密度は、クランプサイズに優先され、したがって、多くのクランプがあり、これらの大部分が重複する場合、クランプサイズは維持できない。クランプ密度とサイズの両方が小さい場合、クランプ間の多くのヘアは、クランプされない。
【００４７】
図８に示すように、ステップ８００では、各最終的なヘアのクランプメンバシップ（すなわち、適用可能であれば、各ヘアがどのクランプに属するか）を判定するために、各クランプ中心ヘア位置において、パラメトリックサーフェス空間内で、特定されたクランプサイズのクランプをｕ半径成分とｖ半径成分とに変換する。ステップ８０５、８１０では、各ヘアを評価し、各ヘアが、対応するクランプ中心ヘアのｕ、ｖ半径成分内に収まるかを判定する。ヘアがｕ、ｖ半径成分内にない場合、ステップ８１５において、ヘアは、クランプヘアでないとし、処理は、ステップ８３０に進み、次のヘアを検討する。ヘアがｕ、ｖ半径成分内にある場合、ステップ８２０において、クランプ中心ヘアのインデクスをそのヘアに参照させる。更に、ステップ８２５において、クランプレート及びクランプパーセントを割り当てる。
【００４８】
様々な変形例が想到される。クランプサイズ雑音パラメータを導入して、クランプのサイズに不規則な変化を生じさせてもよい。サーフェスパッチ毎に、ユーザがクランプサイズのための特徴（テクスチャ）マップを生成及び指定して、ステップ８０５、８１０で用いられる半径を局所的に制御してもよい。この実施の形態では、サーフェスパッチ上の（ｕ，ｖ）における特定のクランプ（クランプ中心ヘア）について、包括的なクランプサイズ入力パラメータは、そのサーフェスのためのクランプサイズ特徴マップ内の対応する正規化された（ｓ，ｔ）値に乗算される。また、モデル全体ではなく、サーフェスパッチ上の指定されたエリアにクランピングを制限する静的クランプエリア特徴マップを準備してもよい。
【００４９】
一実施の形態においては、クランプパーセント及びクランプレート値は、各クランプヘア（ステップ８２５）に割り当てられる。一実施の形態においては、両方の値は、［０，１］の間の範囲をとり、後述するように、ステップ８３５において、後にクランプヘアを再方向付けするために用いられる。
【００５０】
クランプパーセントは、クランプヘアのクランピングの度合いを指定する。例えば、０の値は、ヘアが全くクランプされていないことを示し、すなわち、「乾いた」ヘアと同様であることを示す。１の値は、ヘアがクランプ中心ヘアに完全に引き付けられていることを示し、すなわち、ヘアの先端（遠位の制御頂点）が、クランプ中心ヘアの先端と同じ位置にあることを示す。
【００５１】
クランプレートは、クランプヘアが対応するクランプ中心ヘアにどれ程強くクランプされているかを定義する。例えば、０の値は、クランプヘアが、ルートから先端にかけて、クランプ中心ヘアに直線的に徐々に引き付けられていることを示す。１に近いクランプレート値は、ヘアのルートにより近い制御頂点が、先端により近い制御頂点に比べて、対応するクランプ中心ヘア頂点に正比例的により強く引き付けられていることを示し、したがって、より強いクランプを示している。クランプパーセント及びクランプレートの異なる値の具体例を図９に示す。
【００５２】
ステップ８３５では、各クランプヘアの制御頂点（ルートの頂点を除く）を、ステップ２００、２１０、２１５、２２０、２２３で決定された、クランプヘアの乾いた、コーミングされた位置から、対応するクランプ中心ヘア頂点に向かって再方向付けする。
【００５３】
一実施の形態においては、この処理は、各フレームにおいて実行される。一実施の形態においては、制御頂点（ＣＶ）の数のデフォルト値は、３（４−ルート頂点）であり、現在の制御頂点ｉのインデクスは、１〜３の範囲の値をとる。一実施の形態においては、再方向付けは、以下のようにして決定される。
【００５４】
ｃｌｕｍｐＨａｉｒＣＶ［ｉ］＝ｃｌｕｍｐＨａｉｒＣＶ［ｉ］＋ｄｅｌｔａ＊（ｃｌｕｍｐＣｅｎｔｅｒＨａｉｒＣＶ［ｉ］−ｃｌｕｍｐＨａｉｒＣＶ［ｉ］）
ｄｅｌｔａ＝ｃｌｕｍｐＰｅｒｃｅｎｔ＊（ｆｒａｃｔ＋ｃｌｕｍｐＲａｔｅ＊（１−ｆｒａｃｔ））
ここで、ｆｒａｃｔ＝ｉ／ｎｕｍｂｅｒＯｆＣＶｓであり、ｃｌｕｍｐＨａｉｒＣＶ［ｉ］は、クランプヘア頂点を表し、ｃｌｕｍｐＣｅｎｔｅｒＨａｉｒＣＶ［ｉ］は、対応するクランプ中心ヘア頂点を表し、ｉは、現在の制御頂点のインデクスを表し、ｎｕｍｂｅｒＯｆＣＶｓは、クランプヘアの制御頂点の数を表し、ｃｌｕｍｐＰｅｒｃｅｎｔは、クランプパーセントを表し、ｃｌｕｍｐＲａｔｅは、クランプレートを表す。
【００５５】
クランプパーセント及びクランプレートパラメータの両方は、クランプサイズに関して上述した特徴マップと同様の特徴マップによって、局所的に制御できる。また、両方の値は、乾き、濡れ、乾くファー外観のための連続的な制御を提供するために、経時的にアニメーション化又は変更することができる。これを、アニメーション化されたクランプパーセント及びクランプレートのシーケンスからの４つのフレームを示す図１０ａ、図１０ｂ、図１０ｃ及び図１０ｄに示す。図１０ａの画像では、クランプパーセント及びクランプレートは、ともに０であり、これにより、乾いて、コーミングされたヘアを表すことができる。図１０ｂの画像では、クランプパーセントは、０．７であり、クランプレートは、０であり、これにより、僅かに濡れた外観が得られる。図１０ｃの画像では、クランプパーセントは、１．０であり、クランプレートは、０．３であり、これにより、濡れた外観が得られる。図１０ｄの画像では、クランプパーセント及びクランプレートは、ともに１．０であり、これにより、ずぶ濡れの外観が得られる。
【００５６】
アニメーション化エリアクランピングは、噴出する水又は雨粒がファーに当たって、ファーが次第に濡れていく様子をシミュレートする場合に望ましい。図２のステップ２３０では、アニメーション化クランピングを実行する。一実施の形態においては、アニメーション化クランピングエリアは、アニメーションシステムにおいて定義される。
【００５７】
図１１を参照して処理の一実施の形態について説明する。一実施の形態においては、クランピングエリアは、サーフェスパッチに当たるパーティクルによって定義される。他の実施の形態では、アニメーション化クランピングエリアを生成するために代替の技術を用いてもよい。ステップ１１００では、全てのヘアに対して、包括的静的エリアクランピング処理（global static area clumping process）を実行する。このステップは、クランピング領域及び対応するクランプ中心ヘア及びクランプヘアを特定する。後述するように、この情報は、アニメーション化クランピング処理で使用される。一実施の形態においては、ここで用いられる包括的静的エリアクランピングは、静的エリアクランピングについて上述した処理と同様である。
【００５８】
ステップ１１０２では、パーティクルを生成する１つ以上のエミッタを定義する。エミッタを使用してパーティクルを生成する技術は、当分野で周知であり、ここでは、これ以上詳細に説明しない。一実施の形態においては、エミッタは、生成され、サーフェスに亘って拡散するパーティクルのレートを定義する。
【００５９】
ステップ１１０５では、各フレームにおいて、生成され、サーフェスに当たる各パーティクルについて処理し、ステップ１１１０において、パーティクルが当たるサーフェスパッチを特定する。一実施の形態においては、パーティクルが累積的になるように、前フレームで生成されたパーティクルが次フレームに引き継がれる。
【００６０】
ステップ１１１５では、パーティクルがサーフェスに当たるフレームにおいて実行される作成式によって定まるクランプパーセント、クランプレート及びアニメーション化クランピングエリア半径を用いて、その（ｕ，ｖ）位置におけるパッチ上で、前フレームで生成されたパーティクルを含むサーフェスパッチに当たる各パーティクルについて、円形のアニメーション化クランピングエリアを生成し、これにより、その時点で（すなわち、そのフレームで）パーティクルがサーフェスに当たると、クランプパーセントを０に設定でき、半径は、例えば、ランダムノイズ値によって適応化された特定の値に定義できる。したがって、式は、所望の「濡れ」エフェクトを提供するように定義することができる。
【００６１】
定義された円形のクランピングエリアの半径は、上述したクランプサイズと同様に、対応するｕ半径及びｖ半径に変換される。各フレームで実行されるランタイム式は、クランプパーセント及びクランプレートを定義し、したがって、ファーがどのくらいの速度でどれ程「濡れていく」かを決定する。例えば、１つのランタイム式は、ＭＩＮ（ＦｒａｍｅＮｕｍｂｅｒ＊０．１，１）であってもよく、この場合、フレーム番号が大きくなると、ヘアがより濡れているように見える。
【００６２】
そして、ステップ１１２０において、クランプの各クランプ中心ヘア（ステップ１１００で特定される。）を評価し、アニメーション化クランピングエリア内に収まるかを判定する。各フレームにおいて、クランプがアニメーション化クランピングエリア内に収まるか否かを判定するために、クランプのクランプ中心ヘアと、アニメーション化クランピングエリアの中心との間の（ｕ，ｖ）距離がアニメーション化クランピングエリアの（ｕ，ｖ）半径パラメータ内にあるかをチェックする。重複するアニメーション化クランピングエリア内に位置するクランプについては、クランプパーセント及びクランプレートの値を加算し、これによって、より濡れたファーが生成される。
【００６３】
ステップ１１２５において、アニメーション化クランピングエリア内にクランプ中心ヘアがある場合、対応するクランプにアニメーション化クランピングフラグを立て、クランプヘアが、後に、アニメーション化クランピングエフェクトを反映して再方向付けされるようにする。これに代えて、クランプの各クランプヘアが、対応するクランプ中心ヘアがアニメーション化クランピングエリア内にあると判定された場合に設定されるアニメーション化クランピングフラグを有していてもよい。更に、ランタイム式に基づいて、アニメーション化クランピングエリア内にあると特定されたクランプヘアに、アニメーション化クランプレート値及びアニメーション化クランプパーセント値を割り当てる。一実施の形態においては、アニメーション化クランピングエリア内の各クランプのクランプパーセント及びクランプレートの値は、各フレームにおけるアニメーション化クランピングエリアの対応する値に置換される。アニメーション化クランピングエリアは、クランプより遙かに大きくてもよく、アニメーション化クランピングエリアは、複数の独立したクランプを含むことができる。ステップ１１４０では、各クランプを評価し、ステップ１１４５では、各パーティクルについての処理を行う。
【００６４】
なお、アニメーション化クランピングエリアは、サーフェスパッチ境界を跨ぐこともある。例えば、アニメーション化クランピングエリアの中心が１つのサーフェスパッチ上にあっても、このエリアが他の１つ以上のパッチ上に位置することがある。アニメーション化クランピングエリアは、通常、アニメーション化クランピングエリアの中心、すなわち、パーティクルが当たる位置を含むサーフェスによって定義され、したがって、このサーフェスに関連付けられるので、隣接するパッチに跨るクランピングエリアの一部は、見落とされることがある。これにより、最終的なファーのクランピングにおける不連続性が生じることがある。
【００６５】
一実施の形態では、この潜在的問題を解決する。新たなパーティクルがサーフェスに当たり、（ｕ，ｖ）半径がそのサーフェスの境界を超える都度、隣接するパッチに影響するアニメーション化クランピングエリアについて、更なる（ｕ，ｖ）中心及び（ｕ，ｖ）半径を生成する。すなわち、例えば、クランピングエリアが２つの隣接するパッチの一部を覆う場合、各隣接するパッチについて対応する（ｕ，ｖ）中心及び半径を生成し、ステップ１１２０〜１１４０の評価のために更なるアニメーション化クランピングエリアを提供する。
【００６６】
ステップ１１５０では、各フレームについて、アニメーション化クランピングエリア内にあるクランプのクランプヘアを再方向付けする。このようにして、クランプヘアは、アニメーション化クランピングエリア内にある場合、選択的に調整される。一実施の形態においては、各フレームにおいて、クランピングは、アニメーション化クランピングエリアに制限され、これにより、アニメーション化クランピングエリアの外のクランプの最終的なヘアは、「乾いた」ヘアとして、標準的に生成される。
【００６７】
ステップ１１５５において、処理すべき更なるフレームがある場合、処理は、ステップ１１０５に戻って繰り返される。このように、アニメーション化クランピング処理は、複数のフレームに亘って実行され、アニメーション化されたエフェクトを提供する。
【００６８】
図２のステップ２３５は、基底にある皮膚（サーフェス）上のあるライン（ファートラック又はブレイクライン）に沿って、手入れされたファーコートを分ける（breaking up）ことによって、ヘアブレイキング又は乾いたファーのクランピングのエフェクトを生成するために適用することができる。後述するように、この処理は、対称的ブレイキング及び一方的ブレイキングの２種類のヘアブレイキングを含むことができる。対称的ブレイキングでは、ファートラックの両側のヘアが、そのトラックに向かって「ブレイク」し、一方的ブレイキングでは、トラックの片側のヘアが、そのトラックから離れる方向にブレイクする。
【００６９】
一実施の形態においては、ファートラックは、アニメーションシステム内のサーフェス上の曲線として指定される。各トラックは、対称的ブレイキング及び一方的ブレイキングについて、半径、ブレイクパーセント（break-percent）及びブレイクレート（break-rate）を有し、一方的ブレイキングについては、更に、ブレイクベクトル（break-vector）を有する。生成される最終的な情報は、ブレイキングファイルに出力され、ブレイキングファイルは、後に、影響を受けるヘアを再方向付けするためにアクセスされる。
【００７０】
ヘアブレイキング法の一実施の形態を図１２ａに示す。ステップ１２００では、ファートラックを定義する。ファートラックは、（ｕ，ｖ）ブレイク半径を定義することによって、クランプと同様に定義してもよい。ステップ１２０５では、ブレイクラインヘア（ファートラックのために定義された曲線によって定義されたファートラック曲線上又はこの曲線の非常に近くにあるヘア）を算出する。ステップ１２１５、１２２０では、ブレイクラインヘア及びブレイク半径を用いて、各ヘアを評価し、ヘアが、対称的ブレイキングの場合には、ブレイクラインヘアの両側、一方的ブレイキングの場合には、ブレイクベクトルによって指定される片側（ブレイクベクトル側）の（ｕ，ｖ）ブレイク半径に含まれるか否かを判定する。ここでは、半径によって特定される空間内の各ヘアをブレイクヘアと呼び、次に、ブレイクヘアに最も近いブレイクラインヘア（ファートラック上のヘア）を、対応するブレイクラインヘアとみなす。各ヘアには、ブレイクラインヘア、対応するブレイクラインヘアへのインデクスを有するブレイクヘア、又はブレイクによって特定されるエリア内にないノーマルヘアのラベルが付される。
【００７１】
なお、一方的ブレイキングの例では、各ブレイクヘアは、ブレイクラインヘアに「向かう」方向ではなく、ブレイクベクトルの向きに、対応するブレイクラインヘアから「離れる」方向に再方向付けされる。図１２ｂは、対称的ブレイキング及び一方的ブレイキングの具体例を示している。
【００７２】
ステップ２３７では、ブレイクヘアを、対応するブレイクラインヘアに対して再方向付けする。対称的ブレイキングでは、この処理は、上述したクランプヘアについて実行される処理に類似している。但し、ブレイクヘアでは、クランプヘアのために用いられるクランプパーセント及びクランプレートに代わってブレイクパーセント及びブレイクレートの値を使用する。一方的ブレイキングでは、ブレイクヘアは、ブレイクパーセント及びブレイクレートパラメータに基づいて、ブレイクラインヘアに引き付けられるのではなく、ブレイクラインヘアから遠ざけられる。
【００７３】
図１２ｃ、図１２ｄ、図１２ｅ及び図１２ｆは、ブレイキングエフェクトを示している。図１２ｃは、ブレイクラインヘア１２５２、１２５４を有するオブジェクト１２５０を示している。図１２ｄは、オブジェクトに関する対称的ブレイキングの結果のエフェクトを示している。図１２ｅ、及び１２ｆは、ブレイクラインヘア１２５６〜１２７０に沿った一方的ブレイキングを示している。
【００７４】
図２のステップ２４５では、多重パスの処理を実行するかについて判定を行う。ファーで覆われた殆どの動物の外皮は、下毛（undercoat）と呼ばれる、より柔らかく、薄く、短いヘアの層と、上毛（overcoat）と呼ばれるより長く厚いヘアから構成されている。ステップ２４５は、２重（又は多重）パスの処理を実行する能力を示しており、これにより、ステップ２１０、２１５、２２０、２２３（オプションとして、ステップ２２５、２３０、２３５）を２回以上実行し、各パスにおいて、異なるヘアのセットを生成することができる。これらのセット又は層は、レンダリングの時点（ステップ２５０）で処理され、結合される。このエフェクトを図１３ａ、図１３ｂ及び図１３ｃに示す。図１３ａは、本発明の教示に基づいて生成された下毛を表現している。図１３ｂは、上毛を表現しており、図１３ｃは、下毛及び上毛からなる結合された画像を表している。
【００７５】
ステップ２５０によって示すように、それらの制御頂点によって表されるクランピングされたヘアは、一連の２次元画像にレンダリングされ、真に迫った乾いた及び濡れたヘアの外観が生成される。一実施の形態においては、この処理は、特定の観点から、３次元ヘアジオメトリを２次元画像平面に写像する関数と考えることができる。
【００７６】
大量のヘアを高速且つ効率的にレンダリングするために、各ヘアのジオメトリモデルを単純に維持してもよい。上述のように、ヘアは、定められた数（一実施の形態では、初期値は４である。）の制御頂点を有するパラメトリック曲線で表現される。
【００７７】
一実施の形態においては、処理は、既知のレンダリング技術を用いて、対応する制御頂点によって記述されるヘアを生成する。他の実施の形態では、カスタマイズされたモジュールを加え、ヘアにリアルな「シェーディング」を行う。これは、ヘアに沿って又はヘア上で、各ポイントに色の強度を割り当てることによって実現でき、ヘアに沿ったポイントは、ヘアを構成するピクセルとして定義することができる。
【００７８】
ヘアのレンダリングの際、各ヘアに幅が加えられ、ヘアは、常にカメラ又は視点に向けられている細いリボン（narrow ribbon）に変換される。シェーディング処理は、これらのリボンプリミティブに適切にシェーディングを行い、これらを細いヘアとして、よりリアルに表現する。
【００７９】
図１４のフローチャートを用いてシェーディング処理の一実施の形態を説明する。ステップ１４００では、各ヘアを処理する。ステップ１４０５では、各ヘアについて、ヘアのベースにおける面法線をヘア上の現在のポイントにおける法線ベクトルに混合し、ヘア上の現在のポイントにおけるシェーディング法線を得る。一実施の形態においては、ヘアは、ディスプレイ上の一連のポイント又はピクセルとしてレンダリングされる。したがって、現在のポイントとは、ヘアを表すピクセルの１つである。
【００８０】
シェーディング処理は、ヘアに沿った複数のポイントに適用できる。一実施の形態においては、これらのベクトルが混合に貢献する量は、ヘア上の現在のポイントにおける接ベクトルと、ヘアのベースにおける面法線ベクトルとの間に形成される角度に基づいて定まる。この角度がより小さい程、面法線がシェーディング法線により貢献する。
【００８１】
ステップ１４１０では、ヘア上の現在のポイントにおけるヘアの強度を、そのポイントにおけるシェーディング法線を用いて判定する。一実施の形態においては、ランバートモデル（Lambertian model）を用いて、これらの強度を算出する。この手法を用いる利点は、ユーザが、基底にあるスキンサーフェスに光を照射し、ファーが加えられた場合に予測される結果を受け取ることができる点である。また、この手法は、個々のヘアの間のシェーディングの差及び各ヘアの長さに沿ったシェーディングの差を考慮に入れる。
【００８２】
ファーコート上にリアルなシャドウを得るために、シャドウマップを使用する。シャドウマップの使用については、当分野で既知であり、ここでは、これ以上詳細には説明しない。但し、ヘアをシャドウマップに組み込むことによって、幾つかの、望ましくない副次的効果が生じる。１つの問題は、明るく照射されたファー上における、ファーのセルフシャドウイングに起因する暗いストリーキング（dark streaking）の問題である。光は、通常、スキン及びヘアから反射し、明るく照射されたファー上には、暗いシャドウが生じないため、明るく照射されたファー上の暗い筋（streak）は、不自然に見える。
【００８３】
暗いストリーキングエフェクトを最小化するために、一実施の形態では、ステップ１４１５において、ある基準に基づいて、シャドウマップのためのヘアを短くする。例えば、ヘアの長さと密度によって、ヘアを短くするためのパーセンテージを決定してもよい。シャドウマップのためのヘアを選択的に短くすることによって、ファーに照射される光のために、明暗境界線上で分かれるシャドウを生成しながら、ヘアのセルフシャドウイングエフェクトが最小化される。
【００８４】
バックライティングは、ファーで覆われたオブジェクトの背後に位置する各光源について、シャドウマップを用いて、ここでも、シャドウマップレンダリング処理において、密度及び長さに基づいてヘアを短くすることによって、同様の手法で行われる。一実施の形態においては、また、ヘアのための照明モデルによって、各光の拡散減衰角（diffuse fall-off angle）を制御することもできる。このようにして、ファーで覆われたオブジェクトの真後ろにある光が、オブジェクトの周りを包むことができる。シャドウマップと共にこれらの照明制御を用いて、妥当なバックライティングエフェクトが得られる。
【００８５】
一実施の形態においては、クランピングされたヘアについて、シェーディングを変更する。一実施の形態においては、ヘアシェーディングの２つの側面を変更してもよい。第１に、ファー上の反射の量を増加させる。第２に、シェーディングモデルにおいて、クランピングを考慮に入れる。上述したように、ファーが濡れたときに実際に起こることをシミュレートするために、ファーは、幾何学的に、クランプとしてモデル化される。シェーディングモデルでは、各ヘア及び各光について、光源の位置に関して、ヘアが照射されるクランプの側を判定し、ヘアが照射される側に基づいて、ヘアを暗くし又は明るくする。これにより、光源に面しているクランプの側のヘアは、光源に面していないクランプ上のヘアに比べて、より明るくなる。
【００８６】
更なる実施の形態
本発明の更なる実施の形態は、図１ｂに示す動物のファー及び人間のヘアのパイプラインに加えられる追加的特徴に関連する。具体的には、パイプラインへのこれらの追加的特徴は、デジタルキャラクタのための、様式化され、写真のようにリアルな様々なファー及びヘアの外観を生成することを目的とする。
【００８７】
まず、図１５について説明すると、図１５は、上述した図１ｂのパイプラインに類似するが、追加的な及び異なる機能を含むヘア／ファーパイプライン１５００を示すブロック図である。
【００８８】
上の例と同様に、サーフェス定義モジュール１５５０は、入力を受け取る。サーフェス定義モジュール１５５０は、上述のように、レンダリングするオブジェクトのサーフェス及び制御ヘアを定義する。更に、上述のように、制御ヘア調整モジュール１５５５は、制御ヘアを調整し、コーミング等の機能及びサーフェス境界に亘るシームレスヘアを提供する。
【００８９】
上述した図１ｂのパイプラインに加えて、ヘア／ファーパイプライン１５００には、後に詳細に説明するように、異なるヘアアニメーションを編集及び結合するヘアモーション合成器モジュール（hair motion compositor module）１５５７が追加されている。補間モジュール１５６０は、上述のように、制御ヘアを用いて、サーフェスに亘ってヘアを補間するために使用される。
【００９０】
更に、エフェクトモジュール１５６５は、後により詳細に説明するように、ヘア／ファーパイプライン１５００の一部として、例えば、クランピング、ブレイキング、ウェーブエフェクト、ウィーブエフェクト等の様々なエフェクトをヘア及びファーに提供する。更に、最適化モジュール１５６７は、後に詳細に説明するように、ヘア／ファーパイプライン１５００において、レンダリング時間を削減する技術を提供する。
【００９１】
ヘア／ファーパイプライン１５００内のシェーディング、バックライティング及びシャドウイングモジュール１５７０は、上述のように、ヘア／ファーにシェーディング、バックライティング及びシャドウイングエフェクトを提供するために使用でき、ディスプレイモジュール１５７５は、ヘア／ファーサーフェスを有するオブジェクトの最終的な出力をレンダリングして、表示するために使用できる。
【００９２】
更に、図１ａに関して上述したように、ヘア／ファーパイプライン１５００は、中央演算処理装置（ＣＰＵ）、メモリ、入出力（Ｉ／Ｏ）等を有し、例えば、ディスクドライブ又は他のデバイス等のストレージ装置に接続することができるコンピュータシステムによって実現してもよいことは明らかである。更に、コンピュータシステムは、キーボード又は他のユーザ入力装置及びディスプレイを備えていてもよく、ディスプレイは、本発明の実施の形態に基づいて、ユーザインタフェース及びヘア／ファーのレンダリングを表示するために用いてもよい。
【００９３】
特に、本発明の実施の形態は、図１５の上述したパイプライン１５００によって実現される技術を開示し、例えば、特別なコーミングツール、異なる最終的ヘア補間アルゴリズム、各最終的なヘアをレンダリングすることに加えてカスタマイズ可能なヘア毎の演算を実行する汎用アプリケーションプログラムインタフェース（ＡＰＩ）等のアイテムに関連する。更に、技術は、ここでは、ヘアモーション合成器（Hair Motion Compositor：ＨＭＣ）と呼ぶ異なるヘアアニメーションの編集及び合成のための方法及びシステム、並びにレンダリング時間を削減するヘア最適化ストラテジに関係する。一実施の形態においては、ＨＭＣは、ヘア／ファーパイプライン１５００のヘアモーション合成器モジュール１５５７によって実現され、最適化ストラテジは、ヘア／ファーパイプライン１５００の最適化モジュール１５６７によって実現される。
【００９４】
実写及びコンピュータアニメーションの両方の映画において、デジタル制作された動物、人間、仮想生物が組み込まれることが益々多くなっている。これらに現実味を帯びさせるために、これらのキャラクタの多くは、説得力があるヘア又はファーを必要とする。最高の品質が求められるプロダクション環境では、ヘアを生成するパイプラインは、単に動作するだけではなく、実用的で、強健で、柔軟で、効率的で、強力であることが求められる。
【００９５】
ここには、特定のショー（映画）及びそのキャラクタのために監督が選択できる外観及び表現を満足させる特定のヘア及びファーの外観の作成を容易にするツール及び技術を開示する。説得力がある動物のファーを生成し、信憑性がある人間のヘアを作成し、実際の役者のヘアに近似させることを可能にするソリューションを説明する。
【００９６】
ここでは、ルックデベロップメント（コーミング）（質感をどのように表現していくか、それに伴う技術的な問題を解決していく開発のことを意味する）、ヘアアニメーション及びショット、並びに多数のヘアのレンダリングといった、デジタルヘア作成処理において、３つの最も複雑で時間が掛かる問題を解決し改善する、図１ｂのヘア／ファーレンダリングパイプラインに加えられる改良を説明する。
【００９７】
なお、ヘアを幾何学的にモデル化する場合、人間のヘアに関しては、動物のファーにおける問題とは僅かに異なる問題が生じる。具体的には、より長い人間のヘアは、遙かに精巧なコーミング及びアニメーションツールを必要とする。一方、動物のファーは、人間の１０万〜１５万本に比べて、数百万本もの個々のヘアストランドがあるので、レンダリングステージを最適化する必要がある。
【００９８】
ここに説明するように、ヘア／ファーパイプライン１５００によって使用される技術は、動物の短いファーから人間の長いヘアに至る、様々なヘアスタイルの制作に関連する。具体的には、ヘア／ファーパイプライン１５００は、ヘアのモデル化、アニメーション化及びレンダリングヘアのためのツール、少ない任意の数の制御ヘアについて基本的なコーミング及びアニメーションの特徴を定義することを可能にすること、並びにこれらの制御ヘアから、レンダリングされた最終的なヘアストランドを補間するための技術等の特徴を含む。
【００９９】
なお、従来のビューイング機能を提供するために、オートデスク社（AUTODESK）から入手可能なＭＡＹＡ等の従来の３Ｄアニメーションソフトウェアを用いてもよい。更に、最終的なヘアのレンダリングを支援するために、ピクサー社（PIXAR）から入手可能なＲｅｎｄｅｒＭａｎソフトウェアパッケージを用いてもよい。これらのソフトウェアパッケージは、コンピュータグラフィックス技術の分野において周知である。
【０１００】
以下、ヘア／ファーパイプラインによって実現される更なるコーミング及び制御ヘア編集ツールについて説明する。例えば、一実施の形態では、順方向又は逆方向の運動モード（kinematic mode）において、長さを概ね維持しながら、制御ヘアの形状を定義するために、制御ヘアに付された基礎的なガイドチェイン（basic guide-chain）を用いてもよい。また、これは、ワールド空間又はローカル空間において、同じ変形を他の選択された制御ヘアに適用できる。更に、ユーザが正射影図において曲線をスケッチでき、この曲線を用いて選択された制御ヘアとの交線を算出し、これらのポイントで制御ヘアをカットする直感的カッティングツールを使用してもよい。
【０１０１】
特定の一実施の形態では、選択された制御ヘアを、制御された手法で互いにクランプできるコーミングツールを開示する。
【０１０２】
図１６ａ及び図１６ｂについて説明すると、図１６ａ及び図１６ｂは、制御ヘアに沿って可能なバリエーションを有する制御ヘアのクランピングを示している。図１６ａに示すように、制御ヘアの第１の組１６０２及び制御ヘアの第２の組１６０４は、生物１６０６の頭部から、垂直に伸び出しているように描かれている。図１６ｂに示すように、クランププロファイルウィンドウ１６１０は、ヘア／ファーパイプライン１５００の制御ヘア調整モジュール１５５５によって実現されるユーザが定義可能なクランププロファイル曲線１６１１を含み、クランププロファイル曲線１６１１は、制御ヘアの第１の組１６０２に適用してもよく、これにより、制御ヘアは、変形された制御ヘア１６１５によって示すように、ユーザが定義可能なクランププロファイル１６１１に近似するように変形される。
【０１０３】
ボリューム埋め込み技術（FILL-VOLUME TECHNIQUES）
一実施の形態においては、ヘア／ファーパイプライン１５００のサーフェス定義モジュール１５５０を用いて、サーフェス及び関連するボリュームを定義する形状を生成することができる。制御ヘアモジュール１５５５を用いて、制御ヘアによってボリュームを埋め込むことができ、補間モジュール１５６０を用いて、制御ヘアから最終的なヘアストランドを補間することができる。以下、これらの技術について、より詳細に述べる。
【０１０４】
具体的には、ボリューム埋め込みツール（fill-volume tool）を用いて、ランダムに配置された制御ヘアによって、閉じられたサーフェスを速やかに埋めることができる。これは、例えば、多くの場合、モデラがキャラクタの概略的なヘアの外観を記述するために提供する「ヘアボリューム」、例えば、ポニーテールを定義するボリュームを埋めるヘアを生成する際に有用である。
【０１０５】
図１７について説明すると、図１７は、ボリューム埋め込み機能を実現する処理１７００を示すフローチャートである。図１７に示すように、ブロック１７１０では、サーフェス及び関連するボリュームを定義する形状を生成する。これは、例えば、ヘア／ファーパイプライン１５００のサーフェス定義モジュール１５５０を用いて行ってもよい。次に、ボリュームをランダムに配置された制御ヘアで埋める（ブロック１７２０）。これは、例えば、ヘア／ファーパイプライン１５００の制御ヘア調整モジュール１５５５を用いて行ってもよい。最後に、制御ヘアストランドから最終的なヘアストランドを補間する（ブロック１７３０）。これは、例えば、ヘア／ファーパイプライン１５００の補間モジュール１５６０を用いて行ってもよい。
【０１０６】
更に、図１８ａ〜図１８ｃは、この処理の具体例を示しており、ここでは、モデラによって、編まれたヘア（ブレイド）がサーフェスとして単純に表現され、次に、ヘアが埋め込まれている。具体的には、図１８ａ〜図１８ｃは、ブレイド形状を定義するサーフェス及び関連するボリュームの生成（図１８ａ）、ランダムに配置された制御ヘアによるこれらのボリュームの埋め込み（図１８ｂ）、及び制御ヘアからの最終的なヘアストランドの補間（図１８ｃ）を示している。
【０１０７】
まず、図１８ａに示すように、それぞれが形状及び関連するボリュームを定義する３個の編成されたシリンダ１８０２、１８０４、１８０６を生成する。次に、図１８ｂに示すように、ボリューム埋め込み機能を用いて、それぞれ制御ヘア１８１０、１８１２、１８１６を生成する。そして、図１８ｃに示すように、制御ヘアからヘア１８２０、１８２２、１８２６の最終的なブレイドを補間し、レンダリングする。
【０１０８】
以下に説明する補間アルゴリズムを利用して、既存の制御ヘアから更なる制御ヘアを自動的に補間してもよく、また、既存の制御ヘアから最終的なヘアストランドを自動的に補間してもよい。更に、新たに挿入された制御ヘアの形状を選択された既存の制御ヘアの間でブレンディングしてもよい。
【０１０９】
一実施の形態においては、ヘア／ファーパイプライン１５００は、異なるアルゴリズムを用いて、異なる座標スキームに基づいて、（例えば、補間モジュール１５６０を用いて）制御ヘアから最終的なヘアストランドを補間し、並びに既存の制御ヘアから他の制御ヘアを補間してもよい。
【０１１０】
この補間法の具体例を図１９ａ〜図１９ｃに示す。図１９ａ〜図１９ｃには、同じ制御ヘア１９０２を有する変形されたサーフェス１９００の側面図を示している。この補間法を用いることによって、異なるアプリケーションに亘って、制御ヘアの数を少なく維持することができる。
【０１１１】
例えば、図１９ａは、最終的なヘアストランド１９０４がサーフェス変形に自動的に従わない「ワールド空間」座標フレームにおける、制御ヘア１９０２からの最終的なヘアストランド１９０４の補間のための第１の補間方法を示している。これは、サーフェス（スキン）の変形に従うべきではない植物又は長いヘアスタイルについて有用である。
【０１１２】
図１９ｂは、「ローカル空間」座標フレームにおける、制御ヘア１９０２からの最終的なヘアストランド１９０４の補間のための第２の補間方法を示している。「ローカル空間」スキームでは、最終的なヘアストランド１９０４は、サーフェス変形に自動的に従う。これは、より短いヘア又はファーにとってより自然である。
【０１１３】
最後に、図１９ｃは、最終的なヘアストランド１９０４が影響のある制御ヘア１９０２の凸包の内側に留まる、制御ヘア１９０２からの最終的なヘアストランド１９０４の補間の第３の補間方法を示している。このスキームは、例えば、曲面の頭皮の頂部及び側部から垂れ下がるクランプされていない長い人間のヘアについて有用である場合がある。なお、ローカル空間モード及びワールド空間モードでは、補間された最終的なヘアストランド１９０４は、制御ヘア１９０２より長くなることがある、凸包モードでは、このようなことはない。
【０１１４】
更に、ヘア／ファーパイプライン１５００を用いて（例えば、エフェクトモジュール１５６５を用いて）最終的なヘアストランドの階層的なクランピング能力を実現することができる。最終的なヘアは、ユーザによって直接指定された手動クランプに属していてもよく、又は手続き的に生成された自動クランプ及びマイナークランプに属していてもよい。自動クランプヘアは、手動クランプの内側及び外側の何れに生じてもよく、マイナークランプヘアは、手動クランプ又は自動クランプ内のみに存在する。これらの技術は、濡れたヘアの外観に適用してもよく、乾いたヘアの房の外観をカスタマイズするために適用してもよい。
【０１１５】
ヘア／ファーパイプライン１５００の更なる特徴として、例えば、ウェーブ、ウィーブ（ヘアのルートを中心とする回転）、短くされた先端、風等の多数のパラメータ又はエフェクトを、例えばヘア／ファーパイプライン１５００のエフェクトモジュール１５６５によって実現することができる。これらのエフェクトは、制御ヘア間の補間後に最終的なヘアに直接適用してもよい。
【０１１６】
これらのウェーブ、ウィーブ及び風エフェクトの具体例を図２０ａ〜図２０ｃに示す。図２０ａ〜図２０ｃのそれぞれにおいて、制御ヘア２００２は、真っ直ぐ上を向くように示されている。例えば、図２０ａは、最終的なヘア２００４に対するエフェクトなしの状態を示している。図２０ｂは、最終的なヘア２００４に適用されたあるウェーブ及びウィーブエフェクトを示している。最後に、図２０ｃは、最終的なヘア２００４に適用された風エフェクトを示している。
【０１１７】
また、エフェクトは、クランピングの前又は後に、例えば、手動クランプメンバヘア又はクランピングされていないヘア等の異なるヘア「タイプ」に選択的に適用してもよい。更に、制御ヘアの異なる組を有する場合がある複数の最終的なヘアレイヤに組み合わせて、独立したヘアパラメータ又はエフェクトを用いることができる。動物のファーの場合、この手法で下毛と上毛を生成することができ、複雑な人間のヘアは、ベース、ほつれ（stray）、縮れ（fuzz）等の幾つかの独立したレイヤに分けることができる。
【０１１８】
ジオメトリインスタンス化
他の本発明の実施の形態は、任意のジオメトリインスタンス化（geometry instancing）に関する。任意のジオメトリインスタンス化は、ヘア／ファーパイプライン１５００の能力を利用して、上述のように、最終的なレンダリングされたヘアプリミティブのスタイル又は外観をインスタンス化（実体化）し、アニメーション化し、制御する特徴を提供する。この観点から、ヘアレンダリング機能に関連して、アプリケーション開発者がヘアシステムから毛嚢（hair follicle）単位の情報を得ることができ、ヘアのレンダリングを他のオペレーションに置換できるように、汎用アプリケーションプログラムインタフェース（application program interface：ＡＰＩ）を提供してもよい。
【０１１９】
例えば、一実施の形態では、ヘアパイプライン１５００を用いて、サーフェスにおける少なくとも１つのヘアのヘア位置に基づいて、ユーザ選択ジオメトリを生成する。サーフェス定義モジュール１５５０を用いて、サーフェスを定義してもよい。ディスプレイモジュール１５７５を用いて、少なくとも１つのヘアに代えて、サーフェス上のヘア位置におけるユーザ選択ジオメトリを処理し、ユーザ選択ジオメトリをレンダリングしてもよい。
【０１２０】
具体的には、最終的なレンダリングされたプリミティブの毛嚢を出力することに代えて、例えば、ディスプレイ及びレンダリングモジュール１５７５において、ヘア／ファーパイプライン１５００へのフックを提供し、ユーザが、レンダリングされたジオメトリをオーバライドして、ヘアをレンダリングすることに代えて、他のジオメトリ形状をレンダリングできるようにしてもよい。これにより、例えば、人間の頭に植える代わりに、人間の頭に刺を生成することができる。或いは、ヘアで満たされたフィールドに代えて、フィールドを満たす花、草又は木を植えてもよい。
【０１２１】
但し、特定の景色の設計を試みる際、全く同じオブジェクト（例えば、花又は木）をインスタンス化すると、全ての花又は木が同じになってしまうという問題が生じる。したがって、レンダリング時において、異なる種類のプリミティブをモデル化及びインスタンス化し、各最終的なヘアを置換してもよい。
【０１２２】
ヘアの最終的な形状を完全に削除することに代えて、毛嚢を用いて変形の軸を表現し、この軸を中心にして、インスタンス化されたジオメトリを、ヘアの形状に基づいて変形してもよい。この手法により、ヘアのレンダリングに関して上述した様々な全てのエフェクト（例えば、クランピング、ブレイキング、ウェーブ、ウィーブ、風等）の全ての利点が、選択された他のジオメトリ（例えば、花、木等）のレンダリングに利用できる。
【０１２３】
図２１について説明すると、図２１は、本発明の一実施の形態に基づくジオメトリインスタンス化を実現する処理２１００を示すフローチャートである。ブロック２１０５では、ヘア／ファーパイプライン１５００がレンダリングステージに入っているか否かを判定する。これに該当しない場合、処理は、終了する（ブロック２１１０）。一方、レンダリングステージに入っている場合、ブロック２１１５において、ユーザがヘアレンダリング処理をオーバライドし、代わりにジオメトリインスタンス化機能を使用することを決定しているか否かが判定される。これに該当しない場合、処理は、ブロック２１２０で終了する。
【０１２４】
一方、ユーザが、ヘアレンダリング処理をオーバライドし、代わりにジオメトリインスタンス化機能を使用することを決定している場合、ブロック２１２５において、毛嚢情報を得る。次に、ブロック２１３０において、ユーザが選択したジオメトリに基づいて、サーフェス上の毛嚢に、代わりの（すなわち、ヘア／ファーの代わりの）ユーザ選択ジオメトリ２１３０を植える。そして、ブロック２１３５において、ヘアについて以前に決定したヘア形状を適用して、ユーザ選択ジオメトリを変形する。
【０１２５】
この具体例を図２２ａ及び図２２ｂに示す。図２２ａには、サーフェス２２１２上でレンダリングされている複数のヘア２２１０が示されている。各ヘア２２１０には、毛嚢情報（例えば、サーフェス２２１２上の相対的位置）があり、（例えば、ヘアの形状を定義する）軸方向の変形フレームワーク、並びに形状特徴に関連する制御情報、例えば、（上述のように）曲線、ベンド、回転、ねじれ等がこれに関連付けられる。
【０１２６】
但し、本発明の実施の形態では、図２２ｂに示すように、ユーザは、ヘアの代わりに、他のジオメトリオブジェクト（例えば、花）をレンダリングすることを決めることができる。例えば、３個のモデル化された花の組から花をランダムに選択でき、対応する最終的なヘアの形状に基づいて変形できる。
【０１２７】
図２２ｂでは、同じ毛嚢情報及び同じ形状情報を利用して、ヘアが複数の花２２２０、２２２２、２２２４に置換されている。なお、花は、単に例として示しているに過ぎず、仮想的にあらゆるジオメトリ形状をヘア形状の代わりに用いることができることは明らかである。このように、ヘア／ファーパイプライン１５００を用いて、新たなジオメトリをインスタンス化及び変形でき、この結果、あらゆるタイプのジオメトリ形状をレンダリングするための強力で、類のない手法が提供される。
【０１２８】
ヘアモーション合成システム
プロダクションのコンテキストにおいてヘアアニメーション及び動的シミュレーションを扱う場合、異なるモーション結果を結合する必要性が生じることが多い。１つのシミュレーションにおいて、ヘアの一部は、理想的であるが、ヘアの他の残りの部分は、他のシミュレーションの方が見栄えがよい場合、全てのヘアに望ましい動きをさせる正しい設定を見出すよりも、それぞれのシミュレーションのどの部分を採用することが望ましいかを拾い上げ、選択する方が簡単である。
【０１２９】
以下に説明するように、一実施の形態において、ヘアモーション合成器は、ノード及びオペレーションのネットワークを構築することによって、ユーザが様々な制御ヘアアニメーションを結合し、変更することができるシステム及び方法を提供する。例えば、一実施の形態では、ヘア／ファーパイプライン１５００のヘアモーション合成器モジュール１５５７を用いて、ヘアモーション合成器を実現することができる。
【０１３０】
例えば、一実施の形態では、ヘアパイプライン１５００は、サーフェス定義モジュール１５５０を用いて、サーフェス及び制御ヘアを定義し、ヘアモーション合成器モジュール１５５７は、制御ヘア及びサーフェスに関連する異なる制御ヘア曲線形状を結合する。具体的には、ヘアモーション合成器モジュール１５５７は、静的制御ヘア曲線形状を定義する静的ノードを生成し、アニメーション制御ヘア曲線形状を定義するアニメーションノードを生成し、静的ノードの静的制御ヘア曲線形状をアニメーションノードのアニメーション制御ヘア曲線ヘア形状に結合して、制御ヘアのための結果的な制御ヘア曲線形状を生成する。
【０１３１】
ノードグラフの基礎
一実施の形態においては、ヘアモーション合成器（hair motion compositor：ＨＭＣ）は、ノードの非循環有向グラフであり、ここで、ノードは、アニメーション及びアニメーションに適用されるオペレーションの何れかを表すことができる。ノード間の接続は、アニメーション化制御ヘア曲線形状のデータフローを表す。
【０１３２】
シンプルノード
キャラクタ又はオブジェクトのためのＨＭＣセットアップの作成では、通常、基礎として用いられる制御ヘアの既存のコーミングがあると仮定する。ＨＭＣセットアップは、通常、（制御ヘア曲線の初期の、アニメーション化されていない形状を含む）静的ノードと、（最終的な結果を表し、ノードグラフの出力である）制御ノードとの２つのノードを必要とする。制御ヘア曲線形状を表す更なるノードをグラフに挿入してもよい。これらの更なるノードをアニメーションノードと呼ぶことができる。
【０１３３】
図２３について説明すると、図２３は、アニメーションノード２３０４及び最終的な制御ノード２３０６に接続された静的ノード２３０２の簡単なグラフを示す図である。図２３に示すように、アニメーションノード２３０４への入力は、静的ノード２３０２からの静的コーミングされた形状である。ユーザは、アニメーション制御ノード２３０４が提供する制御ヘア曲線のアニメーションセットを介して、トゥイーク（tweak）及びキーフレームを適用して、静的な形状をオフセットし、制御ノード２３０６の最終的なコーミングされたヘア結果を生成することができる。
【０１３４】
ブレンドノード
ブレンドノードは、特徴を合成するために使用できる。ブレンドノードは、２つの入力を受け取り、これらを結合して、単一の出力を生成するオペレーションノードとして定義することができる。例えば、各入力からの制御ヘア曲線を（曲線の長さを維持するために）回転的にブレンドしてもよく、（直線的なブレンドのために）位置的にブレンドしてもよい。
【０１３５】
更に、各入力をどの程度使用するかを制御するために、ブレンドノードのためのブレンド係数パラメータを用いてもよい。例えば、０の値は、入力ノードＡの全体を使用することを指定し、１の値は、入力ノードＢの全体を使用することを指定し、これらの値の中間の値では、ブレンドノードは、入力ノードＡの制御ヘア曲線形状と入力ノードＢの制御ヘア曲線形状との間の滑らかな補間を提供する。
【０１３６】
図２４について説明すると、図２４は、ブレンドノード２４０３を使用する処理を示す図である。同時に参照される図２５ａ及び図２５ｂは、それぞれ、回転的ブレンディングと、位置的ブレンディングとの間の違いを示している。具体的には、図２４は、静的ノード２４０２及びアニメーションノード２４０４から入力をブレンドし、制御ノード２４０６への最終的な出力形状を生成するブレンドノード２４０３を示している。この具体例では、ブレンドノードのブレンド係数は、０．５である。
【０１３７】
より詳しくは、図２５ａに示すように、ブレンドノード２４０３によって、０．５のブレンド係数の回転的ブレンディングが選択された場合、入力された静的制御ヘア２５２０及びアニメーション制御ヘア２５３０に基づいて、結果的な制御ヘア２５１０が得られる。回転的ブレンディングの利点は、結果的な制御ヘアの長さが維持されるという点である。
【０１３８】
図２５ｂに示すように、ブレンドノード２４０３によって、０．５のブレンド係数の位置的ブレンディングが選択された場合、入力された静的制御ヘアヘア２５６０及びアニメーション制御ヘア２５７０に基づいて、結果的な制御ヘア２５５５が得られる。位置的ブレンディングの利点は、結果的な制御ヘア形状が、回転的ブレンディングに比べて、より予測可能であるという点である。
【０１３９】
デフォルトでは、ブレンドノード２４０３は、各入力制御ヘア曲線の全ての制御頂点（ＣＶ）に同じブレンド値を適用してもよい。ＣＶ毎の制御のために、ユーザは、各ＣＶにおいて如何なるブレンド係数値を用いるかを指定する関数曲線を作成できる。これは、例えば、ベースＣＶの動きを第１の入力に由来させ、チップＣＶの動きを第２の入力に由来させるために用いることができる。ＣＶ毎の関数曲線を用いている場合であっても、通常、入力の全ての制御ヘア曲線に同じブレンド係数が適用される。
【０１４０】
ヘア毎のブレンド値を指定するために、ユーザは、３次元空間内の領域を特定するブレンドボール（blend ball）を使用してもよい。ブレンドボールは、それぞれが内側及び外側のブレンド係数値を有する２つの同心球から構成してもよい。内側の値が０であり、外側の値が１である場合、内側球面内の全ての制御ヘア曲線は、第１の入力からアニメーションを生成し、外側球面外の全ての制御ヘア曲線は、第２の入力から値を生成し、これらの間では、滑らかな補間が行われる。
【０１４１】
図２６は、このタイプのブレンドボール２６００の具体例を示している。本質的には、ブレンドボール２６００は、ブレンドノードのエフェクトを局所化するために使用される。図２６に示すように、ブレンドボール２６００は、内側球面２６０２及び外側球面２６０４を含む。更に、図２６は、アニメーション制御ヘア２６０７と入力された静的制御ヘア２６０８とのブレンディングに対する、内側球面２６０２及び外側球面２６０６を介するブレンドボール２６００のエフェクト及び結果の出力制御ヘア２６１０を示している。
【０１４２】
動的ソルバ
なお、典型的なシミュレーション設定（剛性、減衰等）を特定する以外に、多くの初期の努力は、ソルバに入力として供給される良好なゴール形状を特定することに注がれる（例えば、制御ヘア曲線が「ヒット」することをユーザが望むキーポーズ）。しかしながら、結局、時間の多くは、１つ以上のシミュレーションの結果に対処するために費やされる。
【０１４３】
動的ソルビングプロセス（dynamic solving process）は、それ自体、時間が掛かることが多く、直接的なユーザ制御から外れているので、所望の結果を達成するために実行する必要があるシミュレーションの数を最小化することが重要である。
【０１４４】
例えば、一実施の形態では、ヘアシミュレーションのためにＭＡＹＡヘア動的ソルバ（MAYA hair dynamic solver）を用いてもよい。しかしながら、上述したＨＭＣシステムは、動的ソルバを感知しない（dynamic solver-agnostic）。本質的には、ソルバは、ノードグラフ内の単一のノードとして扱われる。
【０１４５】
図２７について説明すると、図２７は、動的ソルバノード（ソルバノード２７０６及び動的ノード２７０８によって表されている。）を含む動的セットアップを示している。初期の静的コーミングノード２７０２は、ゴールとして用いられるアニメーションノード２７１４を介してソルバ２７０６に接続されているが、最終的な結果は、動的シミュレーションノード２７０８の出力とゴールとの間で（ブレンドノード２７１２によって）ブレンドされている。制御ノード２７１０は、結果の出力である。
【０１４６】
デフォルトでは、１００％動的になるように、ブレンドは、０に設定される。しかしながら、速やかに、ヘアをより堅く見せるために（一般的なの美的要求）、新たなシミュレーションを実行することなく、静的なゴールに戻っていくように、ブレンドを徐々に増加させることができる。
【０１４７】
使用されている設定及びシーンの複雑性によっては、動的シミュレーションは、長時間掛かることもあるので、ユーザのコンピュータを他の作業のために解放するために、動的シミュレーションは、多くの場合、レンダファーム（ＲＥＮＤＥＲＦＡＲＭ）上で実行させてもよい。これに対応するために、制御ノード２７１０に接続されているキャッシュアウトノード２７２０を用いて、ストレージ装置にノードが接続されているときはいつでも、ストレージ装置に書込を行ってもよい。そして、後述するように、キャッシュアウトファイルをキャッシュインノードに後に読み戻すことができる。なお、キャッシュアウトノードは、システムの如何なるノードにも適用できることは明らかである。更に、ストレージ装置は、ハードディスクドライブであってもよく、他の如何なる種類のストレージ装置であってもよい。
【０１４８】
ボリュームノード
非常に多くの場合、特に、コンピュータグラフィック特徴の制作のために、アニメーション部門において、所定のショット内でヘアがどのように動くかを表現するために、ヘアを表すプロキシサーフェスが、モデル化され、何らかのキーポーズにおいてキーフレーミングされる。
【０１４９】
例えば、キャラクタのポニーテールは、外に向かって膨らんだ管状のボリュームによって近似させることができる。この機能を実現するために、１つ以上のボリュームのアニメーションに従うように制御ヘア曲線を効果的に結合するボリュームノードを用いてもよい。ボリュームノードの他の用途として、動的シミュレーションの結果をオフセットし、所望の結果を生成してもよい。この場合、手動でアニメーション化されたボリューム（hand-animated volume）は、動的制御ヘアに自動的に従わないので、このようなボリュームを用いることは、実用的ではない。これに代えて、変形される制御ヘア曲線の凸包として、オンザフライでビルトインされる自らのボリュームを提供するボリュームノードを用いてもよい。そして、ユーザは、アニメーションをオフセットするようにボリュームを変更してもよい。これは、個々のヘアの制御頂点を変更するより遙かに簡単である。
【０１５０】
図２８ａは、制御ヘア曲線２８０２を囲む、自動的に生成された円筒状のボリュームノード２８０４を示す図である。図２８ｂは、ユーザがボリュームノード２８０４によって制御ヘア曲線を編集した後にオフセットされた制御ヘア曲線２８１０を示す図である。図２８ａ及び図２８ｂからわかるように、ボリュームノード２８０４によって、変更された制御ヘア曲線２８１０によって示すように、容易に制御ヘア２８０２を変更できる。
【０１５１】
スーパーヘアノード
スーパーヘアノードは、単純化されたプロキシジオメトリを介して、ヘアアニメーションをシェーピング又はオフセッティングすることによって、ボリュームノードと同様のメカニズムを提供する。但し、この場合のプロキシジオメトリは、他の全てのヘアと同様に、サーフェスに取り付けられた曲線である。スーパーヘアノードは、コーミングステージにおいて静的ヘアをシェーピングするため、及びショットにおいてアニメーション化ヘアを変更するための両方において、複数の制御ヘアを制御するために使用してもよい。
【０１５２】
一実施の形態においては、スーパーヘアノードは、絶対モード及び相対モードの２つのオペレーションモードを有することができる。絶対モードでは、スーパーヘアノードは、単一のコントローラ曲線を用いて、制御ヘアの正確な形状及びアニメーションを決定する。ユーザは、値が０〜１の範囲の重みパラメータを用いて、エフェクトを部分的にのみ適用することを選択できる。また、スーパーヘアノードには、コントローラ曲線の形状をワールド空間において一致させるか、各制御ヘア曲線のローカル空間において変形を適用するかのオプションがある。
【０１５３】
図２９について説明すると、図２９は、スーパーヘアノード処理の処理２９００を示すフローチャートである。ブロック２９１０では、ユーザがスーパーヘアノードを選択する。ブロック２９１５では、ユーザは、絶対モード又は相対モードのうちのどちらを使用するかを選択する。絶対モードが選択された場合、ブロック２９２０では、重みパラメータを選択でき、ブロック２９２５では、ワールド空間又はローカル空間を選択できる。ブロック２９３０では、コントローラ曲線を制御ヘアに適用する。
【０１５４】
一方、処理２９００において、相対モードが選択された場合、ユーザは、同様に、重みパラメータを選択し（ブロック２９４０）、ワールド空間又はローカル空間を選択する（ブロック２９４５）。但し、相対モードでは、コントローラ曲線及びベース曲線の両方が制御ヘアに適用される（ブロック２９５０）。
【０１５５】
相対モードでは、コントローラ曲線とベース曲線の両方が使用され、これらの２つの間の差分だけが制御ヘア曲線に適用される。この手法は、通常、入力された何らかのアニメーションを既に有する制御ヘアを変更する場合に用いられる。なお、コントローラ及びベース曲線が正確に一致している場合、スーパーヘアノードは、効果を有さない。スーパーヘアノードを作成する場合は、コントローラ及びベース曲線は、デフォルトでは、真っ直ぐに作成される。アニメーション化ヘアをオフセッティングする場合、両方の曲線は、オプションとして、制御ヘアの平均化された形状を有することができる。ここからコントローラ曲線をトゥイークする（つまんで引っ張る：tweak）ことは、遙かに直感的である。
【０１５６】
図３０ａ及び図３０ｂは、それぞれ、ローカル空間及びワールド空間のスーパーヘアオペレーションを簡潔に示している。図３０ａ及び３０ｂに示すように、初期の制御曲線形状３０００は、サーフェスからの法線に沿って真っ直ぐに伸び、結果的な制御ヘア３０１０は、コントローラ曲線３０２０に一致するように整形される。
【０１５７】
絶対モード及び相対モードの両方において、スーパーヘアのエフェクトは、全ての駆動ヘア（driven hairs）に一様に適用される。局所的な制御のために、コントローラ曲線の周りに、影響を受ける領域を定義することができる。
【０１５８】
図３１に示すように、（上述と同様の）内側球面及び外側球面を含むブレンドボールを用いて、スーパーヘアのどこに、どの程度の効果を与えるかを定義してもよい。具体的には、図３１は、内側球面３１１２及び外側球面３１１４を有するブレンドボール３１１０を示しており、ブレンドボール３１１０は、コントローラ曲線３１２０及び制御ヘア３１３０に影響を与えている。
【０１５９】
内側の重み及び外側の重みは、それぞれの対応する球面３１１２、３１１４に関連付けられ、スーパーヘア３１２０及び制御ヘア３１３０の効果は、これらの間で補間される。影響の領域の実用的な用途として、スーパーヘア３１２０を用いて、手の動きに従ってコントローラ曲線をサーフェス上で滑らせ、手が動くにつれて、ヘアを押しつぶすことによって、例えば、ファーの一部を手で撫でた場合等の衝突（collision）を模倣することができる。
【０１６０】
ヘア動き合成の使用例
以下では、ヘアモーション合成器（ＨＭＣ）のパワー及び多用途性の幾つかの具体例を説明する。
【０１６１】
単一のシミュレーション結果の改善
ビジュアル効果の生成は、実写及びコンピュータグラフィックス特徴の両方にとって、技術的な負荷が重くなる傾向がある。初期のヘアショットレビューから最も頻繁に行われる作業の１つは、動的シミュレーションを美的に優れた外観により近付けることである。これは、シミュレーションをより堅くし、付加的な又は不安定な動きを取り除くこと、又はシミュレーションをキーフレーミングされたゴールアニメーションにより良好に一致させることを伴うことがある。
【０１６２】
シミュレーションが、物理的にリアルな結果を生成しても、必ずしも所望の外観が生成されるわけではないことも多い。動的パラメータの微調整を試み、新たなシミュレーションを何度も実行することによって物理的に正確なソルバに頼るよりも、図２４、図２５、図２６、図２７及び図３１に関して先に説明したブレンドノードの機能を用いて、静的又はゴールアニメーションを「合成によって組み入れる（composite-in）」方が容易であることが多い。上述したように、ブレンド係数を設定又はアニメーション化して、視覚的に満足できることが見出された動的シミュレーションの多くを保存することができる。
【０１６３】
複数のシミュレーション結果間のブレンディング
上述のように、シミュレーション結果が、「そのまま使える（out of the box）」完璧な所望の外観を提供することは希である。異なる入力パラメータの組を用いた場合、あるシミュレーションでは、最初の動きがよく、他のシミュレーションでは、最後の外観がよく、第３のシミュレーションでは、あるキーモーメントにおける表現力が高いといったことが生じる。これらの３つの全ての組合せを提供するパラメータの統一された組を見出すことは、不可能であることも多い。
【０１６４】
ここで、上述したようなヘアモーション合成器（ＨＭＣ）の特徴を用いれば、図３２に示すように、様々なシミュレーションキャッシュ間でブレンディングを行うカスケード接続グラフを容易にセットアップできる。
【０１６５】
図３２に示すように、３個のヘアキャッシュ３２００、３２０２、３２０４は、それぞれ、アニメーションノード３２１０、３２１２、３２１４を介して処理される。ヘアキャッシュ３２００、３２０２は、更に、ブレンドノード３２２０を介して結合され、更に、アニメーションノード３２２２を経由して、更に、ブレンドノード３２３０において、ヘアキャッシュ３２０４とブレンドされる。
【０１６６】
このブレンドされた出力は、アニメーションノード３２４０によって処理され、ブレンドノード３２４５において静的ノード３２４８とブレンドされ、制御ノード３２５０において最終的な処理出力がレンダリングされる。なお、最も満足できる各キャッシュの様々な部分を拾い上げるために、ブレンド値をキーフレーミングすることができることは明らかである。
【０１６７】
また、ブレンディングは、非動的キャッシュファイルのために使用することもできる。短いファーを有するキャラクタの場合、「標準」と、ヘアをサーフェスに向かって密接に押し下げる「衝突」との２個の静的コーミングを用いることが実用的である場合がある。そして、例えば、手又は棒がファーを撫でる等、ショット内のファーに対する全てのインタラクションをシミュレートすることに代えて、単に、衝突オブジェクトに従うブレンドボールを用いて、ヘアをこれらのエリアにおいて予め衝突されたコーミング（pre-collided comb）に混合できる。
【０１６８】
ブレンディングの能力に加えて、ヘアモーション合成器（ＨＭＣ）システムは、特に、ショットにおける問題を修正するために使用することができる。例えば、この問題は、悪い結果を引き起こす２つの状況、すなわち、静的コーミングされたゴールヘアがキャラクタの皮膚に入り込むアニメーション問題、及び例えば、誤った衝突等のマイナーなシミュレーションエラーの１つにおいて頻繁に発生する。これらの場合、ヘアの包括的な動きは完全に許容され、問題を修正するために必要なことは、上述したボリュームオフセットノード又はスーパーヘアノードの使用によって達成できる。これは、満足できるまでシミュレーションを繰り返し実行するより遙かに速い。
【０１６９】
最適化技術
図１５に関して上述したように、本発明の実施の形態は、ヘア／ファーパイプライン１５００の最適化モジュール１５６７によって実現できる最適化技術に関連する。具体的には、ここでは、ヘア／ファーパイプライン１５００の実用性及びレンダリング速度を改善する３つの特定の最適化技術を開示する。
【０１７０】
第１の最適化技術は、画面空間メトリック（screen-space metric）に依存する最終的な毛嚢の間引き（culling）に対する高精度制御に関連する。ここでは、これをビュー依存画面空間最適化技術（view-dependent screen-space optimization technique）と呼ぶ。ここに説明する第２の最適化技術は、ヘアサブパッチに基づいて、可視の毛嚢を選択的に生成及びレンダリングするヘア／ファーパイプライン１５００の能力に関連する。ここでは、これをヘアサブパッチ最適化技術と呼ぶ。更に、ヘア／ファーパイプライン１５００によって実現される第３の最適化技術は、レンダリング時間を短縮し、ターンアラウンド時間を向上させ、作業を軽くするヘアキャッシングに関連する。ここでは、これをヘアキャッシング技術と呼ぶ。
【０１７１】
ビュー依存画面空間最適化技術
周知のとおり、完全にファーで覆われた生物を最大のヘア密度でレンダリングすることは、長い時間が掛かることが多く、大きな演算パワー及び大きなメモリ量を消費する。手動でヘア密度を調整して、ショット毎にヘア密度を最適化することも可能であるが、これは、退屈で間違いやすい処理である。
【０１７２】
本発明の一実施の形態では、ヘア／ファーパイプライン１５００の最適化モジュール１５６７によって実現されるビュー依存画面空間最適化技術は、例えば、ヘア密度等のヘアパラメータの設定及びレンダリング時のヘア幅パラメータの両方に対して、高精度制御を行うことを可能にする、画面空間において測定された連続したメトリックを使用することによって実現される。更に、ユーザ定義関数曲線によって最適化パラメータの振る舞いをカスタマイズできる。
【０１７３】
一実施の形態においては、サーフェス定義モジュール１５５０を用いてサーフェスを定義してもよく、最適化モジュール１５６７を用いて、サーフェス上でヘアをレンダリングするか否かを決定してもよい。具体的には、最適化モジュール１５６７を用いて、ヘアのサイズメトリックを判定し、ヘアについて判定されたサイズメトリックに第１の密度曲線を適用して、密度乗数値を生成し、密度乗数値に基づいて、ヘアをレンダリングするか否かを決定してもよい。
【０１７４】
連続的なメトリック及び最適化パラメータのカスタマイズ可能性によって、この手法は、高い柔軟性を有し、予め定められている値の離散的な選択に関連する制約によって制限されることがない。本発明の一実施の形態においては、最適化パラメータは、後述するように、ヘア密度及びヘア幅パラメータに関連する。但し、ヘアに関連する他のタイプのパラメータを最適化してもよいことは明らかである。
【０１７５】
この実施の形態では、画面空間最適化は、画面上の個々のヘアのサイズ（画面空間サイズメトリック）及び画面上でヘアが移動する速度（画面空間スピードメトリック）に基づいて、レンダリングされたヘアの数を減少させる量の判定を扱う。
【０１７６】
両方のメトリックは、ヘア単位で算出され、ヘアをレンダリングするべきか否かを指定するユーザ定義関数曲線に戻される。カスタム関数曲線を用いることによって、ショット毎にキャラクタのヘアをカスタマイズでき、この結果、アーチストは、キャラクタからどのくらいのヘアを間引くかを決定する際に高い柔軟性を得る。
【０１７７】
図３３について説明すると、図３３は、ビュー依存画面空間最適化を実現する技術を示す図である。図３３に示すように、ビュー依存画面空間最適化３３００は、２つのステージに分割される。第１のステージは、メトリック生成ステージ３３１０であり、第２のステージは、メトリック−パラメータマッピングステージ３３２０である。詳しくは、メトリック生成ステージ３３１０には、各毛嚢３３０８が供給される。
【０１７８】
詳しくは、各毛嚢３３０８は、メトリック生成ステージ３３１０に供給され、図３４に示すように、各ヘア３４１０の各毛嚢ルート位置３４０２は、メトリック生成ステージ３３１０において、正規化装置座標（normalized device coordinate：ＮＤＣ）フレームに変換され、元のヘアを置換するプロキシヘア３４０５が生成される。
【０１７９】
より詳しくは、メトリック生成ステージ３３１０においては、各ヘアのＮＤＣルート位置３４０２を用いて、レンダリング時にヘア毎のパラメータをどのように制御するかを決定するための追加的情報を提供する異なるメトリックを測定する。
【０１８０】
この実施の形態では、メトリック生成ステージ３３１０において、サイズメトリック３３１２及びスピードメトリック３３１４の２つの異なるメトリックを使用する。但し、他の様々な異なるメトリックを用いてもよいことは明らかである。画面空間サイズメトリック３３１２は、ＮＤＣ空間におけるプロキシヘア３４０５の長さを算出するために使用される。プロキシヘア３４０５は、毛嚢ルート位置３４０２から真っ直ぐに伸びる単位長ヘアである。プロキシヘア３４０５は、最終的なヘアに比べて、演算的に扱いやすいため、元の最終的なヘア３４１０の代わりに使用される。これは、特に、ヘアが最終的に間引きされる場合、最終的なヘアに関連するヘア補間及びエフェクトオペレーションの演算負荷が大きいためである。他の理由として、カメラから等しい距離にあるが、長さが異なる全てのヘアを、同様に扱うべきであるという理由がある。こうすることによって、ヘアの長さのバリエーションが大きい外観が保存され、一方、このような場合に、プロキシヘアを無視すると、最適化が適用された後に、ヘアがないスポット又は異なる外観が生じる。
【０１８１】
画面空間スピードメトリック３３１４は、ＮＤＣ空間において、毛嚢のルートが現フレームから次のフレームに移動する距離を計算する。図３５について簡潔に説明すると、図３５は、ＮＤＣ空間において、時間ｔにおける第１のフレーム３５１０から時間ｔ＋１における第２のフレーム３５２０にかけて、プロキシヘア３５０６のルート３５０２が移動する距離を示す図である。このメトリックを採用したのは、ブレが大きなモーションブラーオブジェクトでは、同じ外観を達成するために、完全なヘア密度を必要しないことが多いためである。
【０１８２】
図３３に戻ると、メトリック生成ステージ３３１０において、サイズメトリック３３１２及びスピードメトリック３３１４が判定された後、これらの値は、メトリック−パラメータマッピングステージ３３２０に渡される。各パラメータについて、オペレータは、各メトリック値に対応する関数曲線を適用する。この具体例では、密度曲線３３２４、３３２６を、サイズメトリック３３１２及びスピードメトリック３３１４にそれぞれ適用し（例えば、密度対サイズ及びスピード）、及び幅曲線３３３０、３３３２を、サイズメトリック３３１２スピードメトリック３３１４にそれぞれ適用する（例えば、幅対サイズ及びスピード）。そして、それぞれの結果を乗算し、最終的なパラメータ乗数値を導出する。この具体例では、レンダリング機能３３６０に渡すことができる密度乗数値３３４０及び幅乗数値３３５０を判定する。
【０１８３】
なお、密度乗数の場合、ユーザ定義関数曲線３３２４、３３２６では、メトリック値のマッピングが［０，１］の範囲に制限される。そして、これに対応して同様に［０，１］の間で変化する、最終的な結果である密度乗数値３３４０を用いて、ブロック３３６０において、最終的なヘアをレンダリングするか否かを決定する。一具体例においては、これは、範囲［０，１］において、乱数を生成することによって実現され、この数が最終的な結果を下回る場合、ヘアが描画される。この他の場合、ヘアは間引かれる。
【０１８４】
幅乗数の場合、ユーザ定義関数曲線３３３０、３３３２は、負ではない何らかの実数に制限され、したがって、最終的な結果も、負ではない実数になる。この最終的な結果である幅乗数３３５０は、現在のヘアの幅パラメータに乗算され、この結果がレンダリングブロック３３６０に渡される。
【０１８５】
なお、ヘア数は、既に固定でないので、オブジェクト（例えば、ヘアを有するキャラクタ）が前景から背景に移動すると、ポッピングが生じることがある。このような挙動を抑制するために、実証的検査を行った結果、これらの最適化技術に関連して毛嚢をフェードアウトさせることによって、このエフェクトが最小化されることがわかった。これを考慮し、まず、各毛嚢を可視性判定を通る第１のパスに通過させ、不可視であると判定された場合、ヘアの不透明度値を直線的に減少させることによって、ヘアの不透明度を低減してもよい。
【０１８６】
なお、上で定義された技術を利用することにより、密度乗数値によって、生成され又はレンダリングされるヘアの数を削減でき、及び幅乗数値によって、残りのヘアの幅を増加させることができる。このように、これらの最適化技術は、スピードメトリック及びサイズメトリック、並びに４つの関数曲線を使用することによって、ヘアを間引くか、及びヘアの幅をどれくらいスケーリングするかを判定する。
【０１８７】
具体的には、完全にファーで覆われた生物についてこれらの技術を用いることによって、必要な処理及びメモリを大幅に削減することができる。これは、生物が画面上でクローズアップされていない場合、又は画面内で高速に移動している場合、これらの技術は、大きな視覚的変化を伴うことなく、レンダリングするヘアを、元々設計されている生物の全てのヘアより少なくし、レンダリング時間及びメモリ要求を著しく改善できるためである。
【０１８８】
図３６について説明すると、図３６は、様々なフレームにおいて、画面空間サイズメトリックを用いて、ヘア数、時間及びメモリに関する最適化されていない値と、ヘア数、時間及びメモリに関する最適化された値とを並べて比較するテーブル３６００を示している。レンダリング時間（「時間」）は、分及び秒で示しており、メモリ使用量（「メモリ」）は、メガバイトで示している。テーブル３６００に示すこのテストでは、ファーで覆われたキャラクタが、フレーム１０におけるクローズアップ位置から、フレーム１００におけるカメラから遠ざかる位置まで移動した。実際のヘア数は、フレーム１０における元のヘア数の７８％からフレーム１００における１％に変化するので、この具体例で用いられた関数曲線は、急峻（aggressive）である。テーブル３６００に示すように、レンダリング時間及びメモリ使用量の両方が、かなり向上している。
【０１８９】
なお、ビュー依存画面空間最適化技術は、キャラクタが如何なる距離でもよく見え、メモリ及びレンダリング時間をできるだけ大幅に削減できるように、最適化を微調整するために、関数曲線を容易に調整できるという意味で柔軟である。
【０１９０】
図３７について説明すると、図３７は、画面空間スピード法を用いる他の比較を示す（テーブル３６００と同様の）テーブル３７００である。この具体例では、キャラクタは、画面内を非常に高速に移動し、モーションブラーを有するようにレンダリングされる。ここでは、画面空間ベロシティが非常に高いフレームを選択した。ここでは、キャラクタのためのヘア数は、１９％にまで減少した。この技術は、高速に移動するショットについても、テーブル３７００に示すように、レンダリング時間及びメモリ使用量の両方の劇的な削減を実現する。
【０１９１】
更に、サイズメトリック及びスピードメトリックの両方をお互いに連携して使用した場合についてもテストを行った。詳しくは、図３８について説明すると、図３８は、最適化されていない及び最適化されたヘア数、時間及びメモリ値を示す（他のテーブル３６００、３７００と同様の）テーブル３８００を示している。この具体例では、キャラクタは、フレーム１０１における遠い背景から、フレーム２７０におけるより近い近景に移動し、モーションブラーを有するようにレンダリングされている。テーブル３８００の値に示すように、両方のメトリックは、互いに良好に作用し、レンダリング時間及びメモリ使用量を削減し、視覚的品質は、犠牲にされていない。
【０１９２】
ヘアサブパッチ最適化
ヘア／ファーパイプライン１５００の最適化モジュール１５６７が実現する他の最適化技術は、ヘアサブパッチ最適化に関連する。包括的に言えば、この最適化は、全てのヘアがいつもカメラから見えるわけではないという事実に基づいており、大量のヘアをレンダリングする場合に有用である。全てのヘアを生成し、ディスプレイモジュール１５７５がレンダリングの間に可視性の間引きを実行することに代えて、ヘアパイプライン１５００は、最適化モジュール１５６７を用いて、可視ではないプリミティブを最初から生成しないことによってレンダリング時間を削減できる。具体的には、これらの技術の側面は、ディスプレイモジュール１５７５に連携する最適化モジュール１５６７によって実現できる。
【０１９３】
一実施の形態においては、サーフェス定義モジュール１５５０を用いて、サーフェスを定義してもよく、最適化モジュール１５６７を用いて、一組のヘアのためのバウンディングボックス（bounding box）を作成し、バウンディングボックスが可視であるか否かを判定し、バウンディングボックスが可視である場合、可視のバウンディングボックスに関連するヘアをサーフェス上でレンダリングしてもよい。
【０１９４】
包括的に言えば、バウンディングボックスは、レンダリングされるヘアの初期のセットに対して作成し、そして、レンダリングの前に可視性についてテストしてもよい。バウンディングボックスが可視である場合、ヘアプリミティブを４つのサブグループに空間的に分割し、各サブグループについて新たなバウンディングボックスを作成し、各サブグループの可視性を再び検査する。バウンディングボックスが可視ではないと判定された場合、そのヘアグループに対しては、更なる細分化は行わず、レンダリングも行わない。全ての可視のヘアグループの細分化を所定の回数繰り返した後、各グループのヘアプリミティブをディスプレイモジュール１５７５に供給し、その時点でレンダリングを行う。
【０１９５】
図３９について説明すると、図３９は、ヘアサブパッチ最適化を実現する処理３９００を示すフローチャートである。図３９に示すように、ブロック３９１０において、ヘアの初期のセットについて、バウンディングボックスを作成する。次に、ブロック３９１５において、ヘアの初期のセットのためのバウンディングボックスが可視であるか否かを判定する。可視ではない場合、処理３９００は終了する（ブロック３９２０）。サブグループは、例えば、空間的に略々等しい関係に分割してもよい。一方、ヘアの初期のセットのためのバウンディングボックス又はバウンディングボックスの一部が可視である場合、バウンディングボックスをサブグループに空間的に分割する（ブロック３９２５）。サブグループは、例えば、空間的に略々等しい関係に分割してもよい。更に、各サブグループについてバウンディングボックスを作成する（ブロック３９３０）。
【０１９６】
また、図４０は、ヘアサブパッチ最適化の簡単な例を示す図である。図４０では、第１のフレーム４００２は、フレームの右側にある、ヘアの初期のセットのためのバウンディングボックス４０１０と共に示されている。ここに示すように、ヘアの初期のセットのためのバウンディングボックス４０１０は、可視であり、フレーム４００４に示すように、バウンディングボックス４０１０は、サブグループ又はサブグループバウンディングボックス４０１２に空間的に分割される。
【０１９７】
図３９の処理３９００のブロック３９３５では、これらのサブグループバウンディングボックスが可視であるか否かを判定する。可視ではない場合、ブロック３９４０において、処理は終了する。一方、これらのサブグループバウンディングボックスが可視である場合、細分化の回数が所定の数を満たしているかを判定する（ブロック３９４５）。所定の数を満たしていない場合、サブグループを更に分割し、所定の回数、繰り返し細分化する。所定数が満たされると、ブロック３９５０において、サブグループバウンディングボックスのヘアプリミティブをレンダリングする。
【０１９８】
具体的には、図４０において、第３のフレーム４００６と共に示すように、左側の２つのサブグループバウンディングボックス４０１４は、可視であると判定され（ハッチングによって特定している。）、右側の２つのボックスは、可視ではないと判定されている。したがって、左側の２つのサブグループバウンディングボックス４０１４に関連するヘアは、レンダリングのために供給され、右側の２つのサブグループバウンディングボックス４０１４に関連するヘアは、除外される。なお、この処理は、所定の回数、繰り返し実行することができる。
【０１９９】
更に、ヘア／ファーパイプライン１５００の柔軟性のために、ジオメトリインスタンス化の実施の形態に関して先に説明したように、環境モデラは、ヘアサブパッチ最適化の側面を利用して、草で覆われた大きな景色等の他のコンピュータグラフィックス用途にこれを拡張することができる。ショットからショットへのヘアサブパッチ最適化の実施の形態を利用することによって、全体の景色の小さい部分だけをレンダリングすれば済むことがあり、この結果、処理及びメモリ使用量を大幅に削減することができる。なお、先に説明したジオメトリインスタンス化の実施の形態を利用することによって、ヘアに代えて、関連するヘアパラメータ（ベンド、回転、風等）及びヘアに関連する軸変形パラメータの有無にかかわらず、ユーザが選択し又はランダムに生成された如何なるジオメトリオブジェクトもレンダリングできる。
【０２００】
例えば、景色を定義するために、景色の全体を定義するパッチを取り囲む単一のバウンディングボックスによって処理を開始できる。そして、上述のように、このパッチを、より小さいバウンディングボックスによって、４個の重ならない象限に細分化してもよい。間引かれるバウンディングボックスについては、更なる処理は行わず、処理が続けられるバウンディングボックスについては、ユーザが定義した停止基準に到達するまで、更なる細分化を行う。
【０２０１】
また、例えば、サブパッチディメンションのパラメトリック長及びパラメトリックテクスチャ空間に関連する細分化の深さ及びパラメータの限界等の更なる停止基準を用いてもよい。
【０２０２】
図３９及び図４０に関連して先に説明したヘアサブパッチ最適化技術を利用して、景色に適用することによって、草で覆われた単一の大きな景色を、２５００万のヘアによってモデル化し、ここで、ヘアを、草及び／又は木によって、幾何学的にインスタンス化した。但し、図４１のフレームに示すように、ヘアサブパッチ最適化技術を利用して、実際に生成及びレンダリングしたのは、数百の草の葉だけである。この最適化がなければ、全ての草をレンダリングするために、遙かに多くの処理及びメモリ使用量が必要であった筈である。
【０２０３】
ヘアキャッシング最適化
ライティングフェーズ（lighting phase）では、ライティングの担当者は、通常、アニメーション部門及びレイアウト部門の両方が承認したショットに対して作業を行う。ここで、残されている作業は、通常、光の数及び位置を決定し、所望の外観を達成するために必要なタイプの照明条件を生成することである。
【０２０４】
特に、ライティングフェーズでは、全てのヘアパラメータを含むシーンの全ての要素がファイナライズされている。このために、ヘアジオメトリ及びヘアパラメータをキャッシュアウトし、再使用して、処理及びメモリ使用量を大幅に削減することが可能である。一実施の形態においては、シェーディング及びバックライティングモジュール１５７０と連携する最適化モジュール１５６７を用いて、ここに説明するヘアキャッシングの実施の形態に基づく技術を実現することができる。
【０２０５】
これを達成するために、キャッシュヘア状態ファイルを作成及び／又は検証してもよく、後にレンダリングされるヘアパラメータの状態を保存することができる。例えば、これらのヘアパラメータは、キャッシュヘア状態ファイル内にヘアパラメータの任意の順序のリストとして保存してもよい。
【０２０６】
一実施の形態においては、ライティングモジュール１５７０を用いて、ショットのためのライティングフェーズにおいてライティング効果を生成してもよく、最適化モジュール１５６７を用いて、ヘアパラメータを含むキャッシュヘア状態ファイルが存在しているかを判定し、キャッシュヘア状態ファイルがショット内で用いられるものと一致するヘアパラメータを含んでいるかを判定し、これに該当する場合、ライティングフェーズにおいて、キャッシュヘア状態ファイルからのヘアパラメータ値を使用するようにしてもよい。
【０２０７】
図４２は、ヘア状態パラメータ４２０２、４２０４、４２０６等のリストを含むキャッシュヘア状態ファイル４２００の具体例を示している。キャッシュヘア状態ファイル４２００が存在していない場合、又はキャッシュヘア状態ファイル４２００が現在のレンダリングの状態とは異なるパラメータ値を含んでいる場合、キャッシュヘア状態ファイル４２００に（すなわち、ヘア状態パラメータ４２０２、４２０４、４２０６等として）値の新たな組を保存してもよい。そして、この新たな又は更新されたキャッシュヘア状態ファイル４２００を使用できる。一方、キャッシュヘア状態ファイル４２００が、現在のレンダリングの状態に既に一致する場合、元のキャッシュヘア状態ファイル４２００を使用できる。
【０２０８】
図４３について説明すると、図４３は、ヘアキャッシングを実現するための処理４３００を示すフローチャートである。ブロック４３０２では、キャッシュヘア状態ファイル４２００が存在しているかを判定する。存在しない場合、新たなキャッシュヘア状態ファイル４２００を作成する（ブロック４３０４）。そしてブロック４３０６において、新たなキャッシュヘア状態ファイル４２００を保存する。
【０２０９】
一方、キャッシュ状態ファイルが存在している場合は、ブロック４３１０において、ヘアキャッシュ状態ファイル４２００がレンダリングに使用されるパラメータと同じパラメータを含んでいるか否かを判定する。これに該当する場合、処理は、後に説明するブロック４３２０に移行する。この他の場合、ブロック４３０６において、キャッシュヘア状態ファイル４２００に異なるヘア状態パラメータを保存する。
【０２１０】
新たなキャッシュヘア状態ファイル、同じパラメータを有するキャッシュヘア状態ファイル及び異なるパラメータを有するキャッシュヘア状態ファイルの何れの場合においても、処理は、ブロック４３２０に移行し、ここで、適切なファイルキーが存在しているか否かを判定する。各レンダリング及びキャッシュ検証処理は、キャッシュ検証、キャッシュ生成及びキャッシュレンダリングの前に、排他的ファイルロックによってロックされる。したがって、キャッシュヘア状態ファイルをライティングフェーズで用いるためには、適切なキーが存在している必要がある。これは、ライタ（lighter）は、ショットに対して作業するが、最終的なレンダリングされたフレームを生成するために複数の処理が用いられることが多いためである。
【０２１１】
適切なファイルキーが存在しない場合、処理は、ブロック４３４０で終了し、キャッシュヘア状態ファイル４２００は、削除される。一方、キャッシュヘア状態ファイル４２００が適切にアンロックされた場合、ブロック４３５０において、ライティングフェーズでキャッシュファイルを使用できる。
【０２１２】
一実施の形態においては、物理的なキャッシュヘア状態ファイルをＲｅｎｄｅｒＭａｎファイルとして表現してもよい。これは、ヘアジオメトリを生成するために必要なデータポイント及びパラメータを単にエンコードするものであるので、一般性が失われることはない。更に、空間削減技術として、圧縮されたＲｅｎｄｅｒＭａｎファイルを用いて、キャッシュファイルを表現してもよい。
【０２１３】
このようにして、上述した処理４３００は、キャッシュヘア状態ファイル４２００が有効であるか無効であるかを判定する。キャッシュヘア状態ファイルは、通常、存在していない場合、又はキャッシュファイル内に見出されるプリミティブが、レンダリングされるヘアプリミティブに一致しない場合に、無効であると判定される。特に、後者の条件を判定するためには、各キャッシュヘア状態ファイルは、先にそのキャッシュヘア状態ファイルを生成するために用いられたヘアレンダリング設定を含む必要がある場合がある。
【０２１４】
したがって、キャッシュヘア状態ファイルは、レンダリング設定が一致していれば、有効であるとみなされる。一方、キャッシュヘア状態ファイルが無効であると判定された場合、正しいヘアパラメータが供給され、上述のように、キャッシュヘア状態ファイルとして保存される。
【０２１５】
通常、最初のパスにおいては、キャッシュは、無効であり、したがって、生成する必要がある（キャッシュ生成及び使用）。他のプロセッサがキャッシュを生成した後は、キャッシュを即座に使用できるシリアル化のために削減が実現される。これだけでも、レンダリング時間は、約６９％削減される。更なる削減は、異なる処理が同じキャッシュファイルを使用する場合に実現されることがある。なお、ライタは、通常、多くの回数、再レンダリングを繰り返すため、実際の削減時間は、多くの場合、乗算的に増加する。
【０２１６】
図４４について説明すると、図４４は、ライタが、完全にファーで覆われたキャラクタをレンダリングするために、上述の技術を用いることによって達成できる時間の削減を示すテーブルを示している。図４４には、キャッシュなしのレンダリングの時間、キャッシュを生成及び使用した場合のレンダリングの時間、既に存在しているキャッシュによるレンダリングの時間を示している。これからわかるように、大幅な時間削減が実現されている。
【０２１７】
多重インスタンス化可能なエフェクト
図４５について説明すると、図４５は、エフェクトモジュール１５６５を含む上述したヘア／ファーパイプライン１５００の実施の形態を示すブロック図であり、エフェクトモジュール１５６５は、更に、並べ替え可能（re-orderable）で、多重インスタンス化可能（multiple instantiable）なエフェクトを実現するエフェクトパイプライン４５１０を含む。
【０２１８】
一実施の形態においては、ヘア／ファーパイプライン１５００のサーフェス定義モジュール１５５０を用いて、サーフェスを定義してもよい。補間モジュール１５６０を用いて、少なくとも１つの制御ヘアに基づいて、サーフェス上の少なくとも１つの最終的なヘアを補間してもよい。更に、エフェクトモジュール１５６５は、最終的なヘアに予め定義された順序で複数のエフェクトを適用し、変更された最終的なヘアを生成するために使用されるエフェクトパイプライン４５１０を含んでいてもよく、変更された最終的なヘアは、ディスプレイモジュール１５７５によって最終的にレンダリングしてもよい。
【０２１９】
先に詳細に説明したように、ヘア／ファーパイプライン１５００は、まず、サーフェス定義モジュール１５５０において、入力に基づいて、サーフェスを定義する。更に、上述のように、制御ヘア調整モジュール１５５５は、クランピング、ブレイキング等の機能及び上述した他の機能の提供を補助するために、制御ヘアを定義及び調整してもよい。ヘア／ファーパイプライン１５００において、異なるヘアアニメーションを編集及び結合するために、ヘアモーション合成器モジュール１５５７を設けてもよい。補間モジュール１５６０は、上述のように、制御ヘアに基づいて、サーフェスに亘って、最終的なヘアを補間するために使用してもよい。更に、上述のように、エフェクトモジュール１５６５は、例えば、クランピング、ブレイキング、ウェーブエフェクト、ウィーブエフェクト、風の影響等の様々なエフェクトを最終的なヘア及びファーに提供できる。
【０２２０】
更に、本発明の一実施の形態では、エフェクトモジュール１５６５は、エフェクトファクトリ（effects factory）４５０５及びエフェクトパイプライン４５１０を含んでいてもよい。後に更に詳細に説明するように、エフェクトファクトリ４５０５及びエフェクトパイプライン４５１０を使用することによって、上述した様々なエフェクト（例えば、クランピング、ブレイキング、ウェーブ、ウィーブ、風等）を任意の順序で適用することが可能になり、及び同じエフェクトを異なるパラメータで複数回適用することが可能になる。上述したエフェクトのそれぞれは、通常、あるパラメータ値のエフェクトをヘアに適用するための所定のエフェクトに関連するパラメータ（例えば、ヘアが制御ヘアにクランピングされる度合い、ヘアに適用されるウィーブの量等）を含む。この手法によって、忠実度が高い形式で、リアルなヘスタイルを適切にモデル化できる。
【０２２１】
エフェクトパイプライン４５１０を使用することによって、ユーザは、ユーザ入力を介して、補間モジュール１５６０から受け取った最終的なヘアにどのようなタイプのエフェクトを適用するか、及びこれらのエフェクトをどのような順序で適用するかを指定できる。例えば、これは、この情報をカプセル化する拡張可能マークアップ言語（Extensible Mark-Up Language：ＸＭＬ）ファイル又は他の適切なタイプのファイルを生成するユーザインタフェースを利用することによって達成できる。そして、このＸＭＬファイルは、エフェクトファクトリ４５０５に渡される。
【０２２２】
そして、エフェクトファクトリ４５０５は、ユーザが指定した全てのエフェクト（例えば、クランピング、ブレイキング、ウェーブ、ウィーブ、風等）を生成（manufacture）し、各エフェクトのためにユーザが選択した様々なパラメータ値を適用し、ユーザが選択したエフェクトの順序を適用し、エフェクトパイプライン４５１０に、ユーザが定義した複数の異なるエフェクトをユーザが定義した順序で並べる。また、ユーザは、異なるパラメータ値を有する同じエフェクトを複数回適用することを選択してもよい。
【０２２３】
図４６は、本発明の一実施の形態に基づき、並べ替え可能で及び多重インスタンス化可能なエフェクトを実現する処理４６００を示すフローチャートであり、処理４６００は、エフェクトモジュール１５６５によって実現してもよい。
【０２２４】
ブロック４６０５において、ユーザは、ユーザ入力を介して、最終的なヘアに適用するエフェクトのタイプを定義する。次に、ユーザは、ユーザ入力を介して、最終的なヘアにエフェクトを適用する順序を定義する（ブロック４６１０）。ユーザは、複数の異なるエフェクト、各エフェクトについて同じ又は異なるパラメータ値を有する複数の同様のエフェクト、及びこれらの組合せを、ユーザが希望する任意の順序で選択することができる。
【０２２５】
具体的には、上述したクランピング、ブレイキング、ウェーブ、ウィーブ及び風エフェクト、上述した他のエフェクト、並びに当業者に周知の他のタイプのエフェクトを使用することができる。更に、これを達成するために、上述のように、ユーザインタフェースを使用してユーザ入力を受け取ってもよく、ユーザインタフェースは、処理のためにこの情報をカプセル化するＸＭＬファイル又は他の適切なタイプのファイルを生成してもよい。
【０２２６】
この情報に基づいて、エフェクトモジュール１５６５のエフェクトファクトリ４５０５は、ユーザが選択した順序で、ユーザが指定したタイプのエフェクトを生成し（ブロック４６１５）、所望のエフェクトをエフェクトパイプライン４５１０に並べる（ブロック４６２０）。そして、最終的なヘアに所望のエフェクトが適用され（ブロック４６２５）、この結果、最終的なヘアは、変更された最終的なヘアに変更され、最適化モジュール１５６７に渡され（ブロック４６３０）、ヘアファー／パイプライン１５００のシェーディング及びシャドウイングモジュール１５７０等から、最終的にディスプレイモジュール１５７５に渡され、変更された最終的なヘアがレンダリングされる（ブロック４６４０）。なお、ヘア／ファーパイプラインにおいては、更なる又は異なるモジュールを使用してもよい。
【０２２７】
図４７は、本発明の一実施の形態に基づき、ヘア／ファーパイプラインのエフェクトモジュールのエフェクトパイプライン４５１０によって最終的なヘアに適用される、並べ替え可能で、多重インスタンス化可能なエフェクトの具体例のブロック図を示している。
【０２２８】
図４７に示すように、最終的なヘア４７０５は、補間モジュールから、エフェクトモジュール、詳しくは、エフェクトモジュールのエフェクトパイプライン４５１０に供給される。ユーザインタフェースからのエフェクトのためのパラメータ値を含むユーザが定義したエフェクト及び順序情報は、エフェクトファクトリ４５０５に渡される。この情報は、ＸＭＬファイルとして処理及び保存してもよい。エフェクトファクトリ４５０５は、複数の異なるタイプのエフェクトの全てを生成し、ユーザが指定した順序で順序付けし、エフェクトパイプライン４５１０にエフェクトを並べる。
【０２２９】
この具体例では、第１のエフェクト（例えば、ウェーブ）４７２２は、第２のエフェクト（例えば、クランプ）４７２４に結合され、間に入る様々なエフェクトを経て、最終的に最後のエフェクト（例えば、ウィーブ）４７２６に結合されている。変更された最終的なヘア４７３０を生成するために、これらのエフェクトの全てが最終的なヘア４７０５に適用される。なお、上述したウェーブ、クランプ及びウィーブエフェクトは、例示的に示しているに過ぎない。
【０２３０】
このようにして、エフェクトパイプライン４５１０には、ユーザが要求した所望のエフェクトの全てが並べられ、補間モジュールから供給される全ての最終的な補間されたヘア４７０５は、エフェクトパイプライン４５１０によって処理され、変更された最終的なヘア４７３０が生成される。エフェクトパイプライン４５１０を介して最終的なヘアが処理されると、変更された最終的なヘア４７３０は、最適化モジュールに渡され、シェーディング及びシャドウイングモジュールを経て、最終的に、ディスプレイモジュールに渡され、レンダリングされる。
【０２３１】
インスタンス化ヘアデータベース
図４８について説明すると、図４８は、インスタンス化モジュール４８０２及びインスタンス化ヘアデータベース（instanced hair database）４８０４を更に含む、本発明の一実施の形態に基づくヘア／ファーパイプライン１５００を示すブロック図である。インスタンス化ヘアデータベース４８０４に関連してインスタンス化モジュール４８０２を使用することによって、多数のヘア又は他のオブジェクトをインスタンス化することができる。
【０２３２】
一実施の形態においては、ヘア／ファーパイプライン１５００のサーフェス定義モジュール１５５０を用いて、サーフェスを定義してもよい。インスタンス化モジュール４８０２は、ヘアをインスタンス化するために用いられる。インスタンス化ヘアデータベース４８０４は、インスタンス化モジュール４８０２に接続され、ヘアデータを保存するために用いられる。後述するように、インスタンス化モジュール４８０２は、インスタンス化ヘアデータベース４８０４からヘアデータを読み出し、多数のヘアを効果的にインスタンス化できるようにする。ディスプレイモジュール１５７５は、（補間、エフェクト、最適化等の後に）サーフェス上にインスタンス化されたヘアを表示するために使用される。
【０２３３】
グラフィックスレンダリングに使用される典型的なコンピュータは、レンダリングのために最終的なヘアを表現する際に使用される限られた容量のランダムアクセスメモリ（random access memory：ＲＡＭ）を有するのみであり、したがって、レンダリングのためにインスタンス化できるＲＡＭからのヘアの数は、かなり限定的である。ここで、ヘア情報を保存するインスタンス化ヘアデータベース４８０４と連携させてインスタンス化モジュール４８０２を使用することによって、膨大な数のヘア及び草レンダリング等のように他のアプリケーションの生成要求が、容易に満たされることが見出された。ヘア情報を保存するインスタンス化ヘアデータベース４８０４と連携させてインスタンス化モジュール４８０２を使用することによって、数百万（及びこれ以上）のヘア数を含む大量のヘアの生成のためのスケーラビリティが達成される。インスタンス化ヘアデータベースは、例えば、ハードディスクドライブ、磁気ディスクドライブ、ネットワークドライブ、光ドライブ、又は比較的大容量のストレージを実現する他の何らかの種類のストレージ装置等、比較的大容量のストレージが可能なタイプの記憶装置に保存できる。
【０２３４】
ヘアは、サーフェス定義モジュール１５５０、制御ヘア定義及び調整モジュール１５５５等を含む上述したヘア／ファーパイプライン１５００に基づいて生成される。パイプラインにおいては、インスタンス化モジュール４８０２は、インスタンス化ヘアデータベース４８０４に接続され、補間モジュール１５６０の前に配置される。インスタンス化モジュール４８０２を用いて、大量のヘアデータを保存するインスタンス化ヘアデータベース４８０４から、インスタンス化のために比較的大量のヘアデータを読み出すことができる。この手法により、インスタンス化モジュール４８０２は、膨大な量のヘアを効果的且つ効率的に生成することができる。
【０２３５】
補間モジュール１５６０の前にインスタンス化モジュール４８０２及びインスタンス化ヘアデータベース４８０４を配置することによって、補間及びエフェクトが適用される前に、静的なヘア情報、例えば、毛嚢位置、制御ヘア重み及びクランプメンバシップをインスタンス化ヘアデータベース４８０４に保存できる。こうすることによって、標準のメモリ内（ＲＡＭベース）インタンス化を含む異なる表現ストラテジを単独で用いることもでき、インスタンス化ヘアデータベース４８０４と連携して用いることもできる。これに代えて、インスタンス化ヘアデータベース４８０４を単独で使用してもよい。実際には、インスタンス化モジュール４８０２のインスタンス化ヘアデータベース４８０４は、インスタンス化モジュール４８０２を介する標準のメモリ内（ＲＡＭベース）インスタンス化へのプロキシとして用いてもよい。
【０２３６】
なお、インスタンス化ヘアデータベース４８０４を用いることによって、非常に大きいデータ集合を直接的に扱う組込みデータベース技術を、ヘアのインスタンス化及び生成に活用することができる。すなわち、インスタンス化ヘアデータベース４８０４と連携させてインスタンス化モジュール４８０２を使用することによって、最終的なヘアを表現するための高度にスケーラブルな技術が提供され、これにより、膨大な数のヘアを効果的且つ効率的にインスタンス化できる。インスタンス化ヘアデータベース４８０４は、実際に、大量の最終的なヘアをインスタンス化するための繰返しパターンに対して非常に有効である。
【０２３７】
図４９は、標準のＲＡＭメモリ（すなわち、メモリ内インスタンス化）４９２２及びインスタンス化ヘアデータベース４８０４の一方又は両方について、インスタンス化モジュール４８０２によって実現できる繰返しパターン４９２０を示すブロック図である。多数のヘアが必要とされない場合、繰返しパターン４９２０に基づくメモリ内インスタンス化４９２２は、メモリ（例えば、ＲＡＭ）から最終的なヘアをインスタンス化するために使用できる。一方、より大きいヘアインスタンス化タスク（すなわち、大きいデータ集合を必要とする。）では、データは、インスタンス化ヘアデータベース４８０４に保存できる。インスタンス化ヘアデータベース内のユーザ入力、例えば、定義されたローカルエリア、密度マップ、ヘアの総合密度等に基づいて、サーフェス上に多数のヘア（又は草、雑草、木等の他の形状）をインスタンス化するために、インスタンス化ヘアデータベース４８０４に繰返しパターン４９２０を適用してもよい。なお、タスクに応じて、ＲＡＭメモリ４９２２を用いてもよく、インスタンス化ヘアデータベース４８０４を用いてもよく、これらの両方を用いてもよい。
【０２３８】
後述するように、ヘア位置、制御ヘア重み及びクランプメンバシップを含むヘア属性は、繰り返しパターンに基づいて、インスタンス化ヘアデータベース４８０４から容易に検索及び収集可能である。これにより、高度なカスタマイズが可能になる。例えば、ある領域内の全てのヘア又は全てのクランプ中心ヘア等について、インスタンス化ヘアデータベース４８０４にクエリを発することは容易である。
【０２３９】
図５０について説明すると、図５０は、本発明の一実施の形態に基づき、インスタンス化ヘアデータベース４８０４に保存できる情報のタイプの具体例を示している。一具体例では、インスタンス化ヘアデータベース４８０４には、ヘア１〜Ｎのデータを格納することができる。各ヘア１〜Ｎ（行によって表されている）について、データベースの列形式で、毛嚢位置５０１０、制御ヘア重みパラメータ１〜Ｎの変数の値（５０２０、５０２２）、及び所定のヘアのためのクランプメンバシップ５０３０等の情報を格納することができる。クランプメンバシップ５０３０に関しては、これは、クランプメンバヘアについては、クランプ中心ヘアの行インデクスであってもよく、非クランプメンバヘアについては、ヌル値であってもよく、クランプ中心ヘアについては、負の値であってもよい。
【０２４０】
最終的なヘアのための上述した種類のデータが保存された上述したインスタンス化ヘアデータベース４８０４を使用することによって、インスタンス化ヘアデータベース４８０４は、膨大な数のヘアを効果的且つ効率的にインスタンス化することができる。更に、インスタンス化ヘアデータベース４８０４は、入力基準に基づいて、多数の最終的なヘアを検索してインスタンス化するための繰返しパターンに非常に有効である。インスタンス化ヘアデータベースを使用することにより、標準のメモリ内のＲＡＭベースのインスタンス化とは異なり、多数のヘアを効果的に取り扱い、インスタンス化できる。
【０２４１】
この後、補間モジュール１５６０、エフェクトモジュール１５６５等を介して、動的効果を適用でき、最終的に、ヘア（又は、上述のように、他の形状、例えば、草、雑草、木等）をヘア／ファーパイプライン１５００のディスプレイモジュール１５７５に表示できる。
【０２４２】
ここでは、多数の具体的な詳細事項について言及している。しかしながら、本発明の実施の形態は、これらの具体的な詳細事項なしで実施できることは明らかである。他の例として、本明細書の要点を不明瞭にしないために、よく知られている回路、構造、ソフトウェア処理及び技術については、説明していない。
【０２４３】
本発明の様々な実施の形態の部品は、ハードウェア、ソフトウェア、ファームウェア、マイクロコード又はこれらの任意の組合せによって実現してもよい。ソフトウェア、ファームウェア又はマイクロコードで実現する場合、本発明の実施の形態の要素は、必要なタスクを実行するためのプログラムコード又はコードセグメントである。コードセグメントは、手続き、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、若しくは命令、データ構造又はプログラムステートメントの任意の組合せを表現してもよい。コードセグメントは、情報、データ、引数、パラメータ又はメモリコンテンツを渡し及び／又は受け取ることによって、他のコードセグメント又はハードウェア回路に接続してもよい。情報、引数、パラメータ、データ等は、メモリシェアリング、メッセージ転送、トークン転送、ネットワーク送信等を含む適切な如何なる手段によって、渡し、送り又は送信してもよい。
【０２４４】
プログラム又はコードセグメントは、プロセッサが読取可能な媒体に保存してもよく、又は、伝送媒体を介して、搬送波内に表現されたコンピュータデータ信号又は搬送波によって変調された信号を伝送してもよい。「プロセッサが読取可能又はアクセス可能な媒体」又は「マシンが読取可能又はアクセス可能な媒体」には、情報を保存し、送信し又は転送することができるあらゆる媒体が含まれる。マシンがアクセス可能な媒体の具体例は、電子回路、半導体記憶装置、読出専用メモリ（ＲＯＭ）、フラッシュメモリ、消去可能ＲＯＭ（ＥＲＯＭ）、フロッピー（登録商標）ディスク、コンパクトディスク（ＣＤ−ＲＯＭ）、光ディスク、ハードディスク、光ファイバ媒体、無線周波数（ＲＦ）リンク等を含む。コンピュータデータ信号には、例えば、電子ネットワークチャンネル、光ファイバ、空気、電磁波、ＲＦリンク等の伝送媒体を介して伝播できるあらゆる信号が含まれる。コードセグメントは、インターネット、イントラネット等のコンピュータネットワークを介してダウンロードしてもよい。マシンがアクセス可能な媒体は、工業製品内に組み込んでもよい。マシンがアクセス可能な媒体は、マシンによってアクセスされると、ここに説明するオペレーションをマシンに実行させるデータを含むことができる。ここで用いる用語「データ」は、マシンが読み取ることができるように符号化されたあらゆる種類の情報を含む。したがって、データは、プログラム、コード、データ、ファイル等を含む。
【０２４５】
特に、本発明の実施の形態の全部又は一部は、ソフトウェアによって実現してもよい。ソフトウェアは、互いに接続された複数のモジュールを有することができる。ソフトウェアモジュールは、変数、パラメータ、引数、ポインタ等を受け取り、及び／又は結果、更新された変数、ポインタ等を生成又は渡すために、他のモジュールに接続される。また、ソフトウェアモジュールは、ソフトウェアドライバであってもよく、又はプラットフォーム上で実行されているオペレーティングシステムとインタラクトするインタフェースであってもよい。また、ソフトウェアモジュールは、ハードウェアデバイスを構成し、セットアップし、初期設定し、又はハードウェアデバイスに／からデータを送信及び受信するハードウェアドライバであってもよい。
【０２４６】
幾つかの実施の形態に関連して本発明について説明したが、本発明は、説明した実施の形態に制限されず、添付の特許請求の範囲の精神及び範囲から逸脱することなく、変更及び変形して実施できることは、当業者にとって明らかである。したがって、この説明は、限定的なものではなく、例示的なものであるとみなされる。
【図１ａ】
0005440963.tif 000002
【図１ｂ】
0005440963.tif 000003
【図２】
0005440963.tif 000004
【図３ａ】
0005440963.tif 000005
【図３ｂ】
0005440963.tif 000006
【図３ｃ】
0005440963.tif 000007
【図３ｄ】
0005440963.tif 000008
【図４】
0005440963.tif 000009
【図５】
0005440963.tif 000010
【図６】
0005440963.tif 000011
【図７ａ】
0005440963.tif 000012
【図７ｂ】
0005440963.tif 000013
【図７ｃ】
0005440963.tif 000014
【図７ｄ】
0005440963.tif 000015
【図８】
0005440963.tif 000016
【図９】
0005440963.tif 000017
【図１０ａ】
0005440963.tif 000018
【図１０ｂ】
0005440963.tif 000019
【図１０ｃ】
0005440963.tif 000020
【図１０ｄ】
0005440963.tif 000021
【図１１】
0005440963.tif 000022
【図１２ａ】
0005440963.tif 000023
【図１２ｂ】
0005440963.tif 000024
【図１２ｃ】
0005440963.tif 000025
【図１２ｄ】
0005440963.tif 000026
【図１２ｅ】
0005440963.tif 000027
【図１２ｆ】
0005440963.tif 000028
【図１３ａ】
0005440963.tif 000029
【図１３ｂ】
0005440963.tif 000030
【図１３ｃ】
0005440963.tif 000031
【図１４】
0005440963.tif 000032
【図１５】
0005440963.tif 000033
【図１６ａ】
0005440963.tif 000034
【図１６ｂ】
0005440963.tif 000035
【図１７】
0005440963.tif 000036
【図１８ａ】
0005440963.tif 000037
【図１８ｂ】
0005440963.tif 000038
【図１８ｃ】
0005440963.tif 000039
【図１９ａ】
0005440963.tif 000040
【図１９ｂ】
0005440963.tif 000041
【図１９ｃ】
0005440963.tif 000042
【図２０ａ】
0005440963.tif 000043
【図２０ｂ】
0005440963.tif 000044
【図２０ｃ】
0005440963.tif 000045
【図２１】
0005440963.tif 000046
【図２２ａ】
0005440963.tif 000047
【図２２ｂ】
0005440963.tif 000048
【図２３】
0005440963.tif 000049
【図２４】
0005440963.tif 000050
【図２５ａ】
0005440963.tif 000051
【図２５ｂ】
0005440963.tif 000052
【図２６】
0005440963.tif 000053
【図２７】
0005440963.tif 000054
【図２８ａ】
0005440963.tif 000055
【図２８ｂ】
0005440963.tif 000056
【図２９】
0005440963.tif 000057
【図３０ａ】
0005440963.tif 000058
【図３０ｂ】
0005440963.tif 000059
【図３１】
0005440963.tif 000060
【図３２】
0005440963.tif 000061
【図３３】
0005440963.tif 000062
【図３４】
0005440963.tif 000063
【図３５】
0005440963.tif 000064
【図３６】
0005440963.tif 000065
【図３７】
0005440963.tif 000066
【図３８】
0005440963.tif 000067
【図３９】
0005440963.tif 000068
【図４０】
0005440963.tif 000069
【図４１】
0005440963.tif 000070
【図４２】
0005440963.tif 000071
【図４３】
0005440963.tif 000072
【図４４】
0005440963.tif 000073
【図４５】
0005440963.tif 000074
【図４６】
0005440963.tif 000075
【図４７】
0005440963.tif 000076
【図４８】
0005440963.tif 000077
【図４９】
0005440963.tif 000078
【図５０】
0005440963.tif 000079