(57)【要約】コンピュータグラッフィクスに関連して用いられる、サブディビジョンサーフェスをリアルタイムで生成する方法を提供する。例示的実施形態によれば、細分割した面についての面情報とサブディビジョンデータとを生成する。細分割した面は、多数のサブディビジョンサーフェスから構成される。細分割した面についての面情報とサブディビジョンデータとはそれぞれ、細分割した面を定義する頂点と稜線とを含む。さらに、２つのビットフラグは、細分割した面についてのサブディビジョンデータに特定された各稜線に対応付けられる。一方のビットフラグを用いて、対応付けられた稜線の使用が二度目であるかどうか特定し、他方のビットフラグを用いて、対応付けられた稜線が二回使用されているかどうか示す。次に細分割した面についてのサブディビジョンデータを用いて、さらに細分された稜線を生成する。
2005521168.tif 000002
【特許請求の範囲】
【請求項１】
細分割した面から複数のサブディビジョンサーフェスを生成する方法であって、該方法は、以下：
細分割した面についての第一のセットの面情報と第一のセットのサブディビジョンデータとを生成する工程であって、ここで、第一のセットの面情報と第一のセットのサブディビジョンデータとがそれぞれ複数の頂点と複数の稜線とを含む、工程；
第一のセットのサブディビジョンデータを用いて複数の細分割した稜線と複数の追加の稜線とを生成する工程；
第一の順序で１組の細分割した稜線を用いることにより、複数の稜線から各稜線を定義する工程であって、ここで、稜線を二回用いていて、かつ、使用が二度目であるならば、稜線を定義する１組の細分割した稜線を、第一の順序と逆の第二の順序で並べ替える、工程；
第一のセットの面情報とサブディビジョンデータとを用いて各複数のサブディビジョンサーフェスについての第二のセットの面情報を生成する工程；
複数の細分割した稜線と複数の追加の稜線とを用いて、各複数のサブディビジョンサーフェスそれぞれについての第二のセットのサブディビジョンデータを生成する工程；
複数の稜線それぞれに対し頂点を生成する工程；および
複数の頂点と複数の稜線に対して生成された頂点とをずらす工程、
を包含する、方法。
【請求項２】
複数の稜線それぞれに対し頂点を生成するステップはさらに、
頂点が内部頂点で、かつ、（３／８、３／８、１／８、１／８）頂点重み付けシステムを用いる場合には、稜線を共有する頂点に対する混合重みを半分にすることを含む請求項１に記載の方法。
【請求項３】
稜線が二回用いられ、かつ、使用が二回目かどうかに関する情報を、稜線に対応付けられた第一および第二のビットフラグそれぞれに格納する請求項１に記載の方法。
【請求項４】
複数の稜線それぞれに対し頂点を生成するステップはさらに、
第一のビットフラグに格納された情報を用いることにより、生成される頂点が内部頂点または外部頂点かどうか決定することを含む請求項３に記載の方法。
【請求項５】
複数の頂点は、第一の頂点と、第二の頂点と、第三の頂点とを含み、
複数の稜線は、第一の稜線と、第二の稜線と、第三の稜線とを含み、
第二のセットの面情報を生成するステップはさらに、
第一の稜線と、第二の頂点と、第二の稜線とを用いることにより、第一のサブディビジョンサーフェスについての面情報を導出し、
第二の稜線と、第三の頂点と、第三の稜線とを用いることにより、第二のサブディビジョンサーフェスについての面情報を導出し、
第三の稜線と、第一の頂点と、第一の稜線とを用いることにより、第三のサブディビジョンサーフェスについての面情報を導出し、
第一の稜線と、第二の稜線と、第三の稜線とを用いることにより、第四のサブディビジョンサーフェスについての面情報を導出する、
ことを含む請求項１に記載の方法。
【請求項６】
複数の細分割した稜線は、第一の稜線を構成する第一の組の細分割した稜線と、第二の稜線を構成する第二の組の細分割した稜線と、第三の稜線を構成する第三の組の細分割した稜線とを含み、
複数の追加の稜線は、第一の追加の稜線と、第二の追加の稜線と、第三の追加の稜線とを含み、
第二のセットのサブディビジョンデータを生成するステップはさらに、
二番目の第一の組の細分割した稜線と、一番目の第二の組の細分割した稜線と、第一の追加の稜線とを用いることにより、第一のサブディビジョンサーフェスについてのサブディビジョンデータを導出し、
二番目の第二の組の細分割した稜線と、一番目の第三の組の細分割した稜線と、第二の追加の稜線とを用いることにより、第二のサブディビジョンサーフェスについてのサブディビジョンデータを導出し、
二番目の第三の組の細分割した稜線と、一番目の第一の組の細分割した稜線と、第三の追加の稜線とを用いることにより、第三のサブディビジョンサーフェスについてのサブディビジョンデータを導出し、
第一と、第二と、第三の追加の稜線とを用いることにより、第四のサブディビジョンサーフェスについてのサブディビジョンデータを導出する、
ことを含む請求項５に記載の方法。
【請求項７】
第二のセットの面情報と第二のセットのサブディビジョンデータとがそれぞれ、対応付けられたサブディビジョンサーフェスを定義する複数の頂点と稜線とを含む請求項１に記載の方法。
【請求項８】
コンピュータソフトウェアを用いて方法を実施する請求項１に記載の方法。
【請求項９】
方法をリアルタイムで実行して、リアルタイムで複数のサブディビジョンサーフェスを生成できる請求項８に記載の方法。
【請求項１０】
コンピュータソフトウェアを用いて実施する方法を、コンピュータが読取可能な媒体に格納する請求項８に記載の方法。
【請求項１１】
細分割した面から複数のサブディビジョンサーフェスを生成するシステムであって、該システムは、以下：
細分割した面についての第一のセットの面情報と第一のセットのサブディビジョンデータを生成するように構成されたモジュールであって、第一のセットの面情報と第一のセットのサブディビジョンデータとがそれぞれ複数の頂点と複数の稜線とを含むモジュールと、
第一のセットのサブディビジョンデータを用いて複数の細分割した稜線と複数の追加の稜線とを生成するよう構成されたモジュールと、
第一の順序で１組の細分割した稜線を用いることにより、複数の稜線から各稜線を定義するよう構成されたモジュールであって、稜線が二回用いられ、かつ、使用が二度目であるならば、稜線を定義する１組の細分割した稜線を第一の順序と逆の第二の順序で並べ替えるモジュールと、
第一のセットの面情報と第一のセットの細分割データとを用いて、各複数のサブディビジョンサーフェスについての第二のセットの面情報を生成するよう構成されたモジュールと、
複数の細分割した稜線と複数の追加の稜線とを用いて各複数のサブディビジョンサーフェスについての第二のセットのサブディビジョンデータを生成するよう構成されたモジュールと、
複数の稜線それぞれに対し頂点を生成するよう構成されたモジュールと、
複数の頂点と複数の稜線に対して生成された頂点とをずらすよう構成されたモジュール
を備える、システム。
【請求項１２】
複数の稜線それぞれに対し頂点を生成するよう構成されたモジュールはさらに、
頂点が内部頂点で、かつ、（３／８、３／８、１／８、１／８）頂点重み付けシステムを用いる場合は、稜線を共有する頂点に対する混合重みを半分にするよう構成されたモジュールを備える請求項１１に記載のシステム。
【請求項１３】
稜線が二回用いられ、かつ、使用が二回目かどうかに関する情報それぞれを、稜線に対応付けられた第一および第二のビットフラグに格納する請求項１１に記載のシステム。
【請求項１４】
複数の稜線それぞれに対し頂点を生成するよう構成されたモジュールはさらに、
第一のビットフラグに格納された情報を用いることにより、生成される頂点が内部頂点または外部頂点かどうか決定するよう構成されたモジュールを備える請求項１３に記載のシステム。
【請求項１５】
複数の頂点は、第一の頂点と、第二の頂点と、第三の頂点とを含み、
複数の稜線は、第一の稜線と、第二の稜線と、第三の稜線とを含み、
第二のセットの面情報を生成するよう構成されたモジュールはさらに、
第一の稜線と、第二の頂点と、第二の稜線とを用いることにより、第一の細分割表面についての面情報を導出するよう構成されたモジュールと、
第二の稜線と、第三の頂点と、第三の稜線とを用いることにより、第二のサブディビジョンサーフェスについての面情報を導出するよう構成されたモジュールと、
第三の稜線と、第一の頂点と、第一の稜線とを用いることにより、第三の細分割表面についての面情報を導出するよう構成されたモジュールと、
第一の稜線と、第二の稜線と、第三の稜線とを用いることにより、第四の細分割表面についての面情報を導出するよう構成されたモジュールと、
を備える請求項１１に記載のシステム。
【請求項１６】
複数の細分割した稜線は、第一の稜線を構成する第一の組の細分割した稜線と、第二の稜線を構成する第二の組の細分割した稜線と、第三の稜線を構成する第三の組の細分割した稜線とを含み、
複数の追加の稜線は、第一の追加の稜線、第二の追加の稜線と、第三の追加の稜線とを含み、
第二のセットのサブディビジョンデータを生成するよう構成されたモジュールはさらに、
二番目の第一の組の細分割した稜線と、一番目の第二の組の細分割した稜線と、第一の追加の稜線とを用いることにより、第一の細分割表面についてのサブディビジョンデータを導出するよう構成されたモジュールと、
二番目の第二の組の細分割した稜線と、一番目の第三の組の細分割した稜線と第二の追加の稜線とを用いることにより、第二のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成されたモジュールと、
二番目の第三の組の細分割した稜線と、一番目の第一の組の細分割した稜線と、第三の追加の稜線とを用いることにより、第三のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成されたモジュールと、
第一と、第二と、第三の追加の稜線とを用いることにより、第四のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成されたモジュールと、
を備える請求項１５に記載のシステム。
【請求項１７】
第二のセットの面情報とサブディビジョンデータとがそれぞれ、対応付けられたサブディビジョンサーフェスを定義する複数の頂点と稜線とを含む請求項１１に記載のシステム。
【請求項１８】
コンピュータソフトウェアを用いて、リアルタイムでシステムを実施する請求項１１に記載のシステム。
【請求項１９】
リアルタイムでシステムを実行して、複数のサブディビジョンサーフェスを生成することができる請求項１８に記載のシステム。
【請求項２０】
コンピュータソフトウェアを用いて実施するシステムが、コンピュータが読取可能な媒体に格納されている請求項１８に記載のシステム。
【請求項２１】
細分割した面から複数のサブディビジョンサーフェスを生成させるよう構成された命令を格納するコンピュータが読取可能な媒体であって、該媒体は、以下：
細分割した面についての第一のセットの面情報と第一のセットのサブディビジョンデータを生成するよう構成されたセットの命令であって、ここで、第一のセットの面情報と第一のセットのサブディビジョンデータとがそれぞれ複数の頂点と複数の稜線とを含む、命令；
第一のセットのサブディビジョンデータを用いて複数の細分割した稜線と複数の追加の稜線とを生成するよう構成されたセットの命令；
第一の順序で１組の細分割した稜線を用いることにより、複数の稜線から各稜線を定義するよう構成されたセットの命令であって、稜線が二回用いられ、かつ、使用が二度目ならば、稜線を定義する１組の細分割した稜線を、第一の順序と逆の第二の順序で並べ替える、命令；
第一のセットの面情報と第一のセットのサブディビジョンデータとを用いて各複数のサブディビジョンサーフェスについての第二のセットの面情報を生成するよう構成されたセットの命令；
複数の細分割した稜線と複数の追加の稜線とを用いて各複数のサブディビジョンサーフェスについての第二のセットのサブディビジョンデータを生成するよう構成されたセットの命令；
複数の稜線それぞれに対し頂点を生成するよう構成されたセットの命令；および
複数の頂点と複数の稜線に対して生成された頂点とをずらすよう構成されたセットの命令；
を含む、媒体。
【請求項２２】
複数の稜線それぞれに対し頂点を生成するよう構成されたセットの命令はさらに、
頂点が内部頂点で、かつ、（３／８、３／８、１／８、１／８）頂点重み付けシステムを用いる場合は、稜線を共有する頂点に対する混合重みを半分にするよう構成されたセットの命令を含む請求項２１に記載のコンピュータが読取可能な媒体。
【請求項２３】
稜線が二回用いられ、かつ、使用が二回目かどうかに関する情報はそれぞれ、稜線に対応付けられた第一および第二のビットフラグに格納される請求項２１に記載のコンピュータが読取可能な媒体。
【請求項２４】
複数の稜線それぞれに対し頂点を生成するよう構成されたセットの命令はさらに、
第一のビットフラグに格納された情報を用いることにより、生成される頂点が内部頂点または外部頂点かどうか決定するよう構成されたセットの命令を含む請求項２３に記載のコンピュータが読取可能な媒体。
【請求項２５】
複数の頂点は、第一の頂点と、第二の頂点と、第三の頂点とを含み、
複数の稜線は、第一の稜線と、第二の稜線と、第三の稜線とを含み、
第二のセットの面情報を生成するよう構成されたセットの命令はさらに、
第一の稜線と、第二の頂点と、第二の稜線とを用いることにより、第一のサブディビジョンサーフェスについての面情報導出するよう構成されたセットの命令と、
第二の稜線と、第三の頂点と、第三の稜線とを用いることにより、第二のサブディビジョンサーフェスについての面情報を導出するよう構成されたセットの命令と、
第三の稜線と、第一の頂点と、第一の稜線とを用いることにより、第三のサブディビジョンサーフェスについての面情報を導出するよう構成されたセットの命令と、
第一の稜線と、第二の稜線と、第三の稜線とを用いることにより、第四のサブディビジョンサーフェスについての面情報を導出するよう構成されたセットの命令と、
を含む請求項２１に記載のコンピュータが読取可能な媒体。
【請求項２６】
複数の細分割した稜線は、第一の稜線を構成する第一の組の細分割した稜線と、第二の稜線を構成する第二の組の細分割した稜線と、第三の稜線を構成する第三の組の細分割した稜線とを含み、
複数の追加の稜線は、第一の追加の稜線、第二の追加の稜線と、第三の追加の稜線とを含み、
第二のセットのサブディビジョンデータを生成するよう構成されたセットの命令はさらに、
二番目の第一の組の細分割した稜線と、一番目の第二の組の細分割した稜線と第一の追加の稜線とを用いることにより、第一のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成されたセットの命令と、
二番目の第二の組の細分割した稜線と、一番目の第三の組の細分割した稜線と第二の追加の稜線とを用いることにより、第二のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成されたセットの命令と、
二番目の第三の組の細分割した稜線と、一番目の第一の組の細分割した稜線と、第三の追加の稜線とを用いることにより第三のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成されたセットの命令と、
第一と、第二と、第三の追加の稜線とを用いることにより、第四のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成されたセットの命令と、
を含む請求項２５に記載のコンピュータが読取可能な媒体。
【請求項２７】
第二のセットの面情報とサブディビジョンデータとがそれぞれ、対応付けられたサブディビジョンサーフェスを定義する複数の頂点と稜線とを含む請求項２１に記載のコンピュータが読取可能な媒体。
【請求項２８】
コンピュータが読取可能な媒体に常駐する命令をリアルタイムで実行して、リアルタイムで複数のサブディビジョンサーフェスを生成できる請求項２１に記載のコンピュータが読取可能な媒体。
【請求項２９】
コンピュータが読取可能な媒体が、コンパクトディスクまたはデジタルビデオディスクである請求項２１に記載のコンピュータが読取可能な媒体。
【請求項３０】
細分割した面から複数のサブディビジョンサーフェスを生成するよう構成された複数の構成要素を備える集積回路であって、
細分割した面についての第一のセットの面情報と第一のセットサブディビジョンデータとを生成するよう構成された構成要素であって、ここで、第一のセットの面情報と第一のセットのサブディビジョンデータとはそれぞれ複数の頂点と複数の稜線とを含む、構成要素；
第一のセットのサブディビジョンデータを用いて複数の細分割した稜線と複数の追加の稜線とを生成するよう構成された構成要素；
第一の順序で１組の細分割した稜線を用いることにより、複数の稜線から各稜線を定義するよう構成された構成要素であって、ここで、稜線が二回用いられ、かつ、使用が二度目ならば、稜線を定義する１組の細分割した稜線を第一の順序と逆の第二の順序で並べ替える、構成要素；
第一のセットの面情報と第一のセットの細分割データとを用いて各複数のサブディビジョンサーフェスについての第二のセットの面情報を生成するよう構成された構成要素；
複数の細分割した稜線と複数の追加の稜線とを用いて各複数のサブディビジョンサーフェスについての第二のセットのサブディビジョンデータを生成するよう構成された構成要素；
複数の稜線それぞれに対し頂点を生成するよう構成された構成要素；および
複数の頂点と複数の稜線に対して生成された頂点とをずらすよう構成された構成要素
を備える、集積回路。
【請求項３１】
複数の稜線それぞれに対し頂点を生成するよう構成された構成要素はさらに、
頂点が内部頂点で、かつ、（３／８、３／８、１／８、１／８）頂点重み付けシステムを用いる場合は、稜線を共有する頂点に対する混合重みを半分にするよう構成された構成要素を備える請求項３０に記載の集積回路。
【請求項３２】
稜線が二回用いられ、かつ、使用が二回目かどうかに関する情報をそれぞれ、稜線に対応付けられた第一および第二のビットフラグに格納する請求項３０に記載の集積回路。
【請求項３３】
複数の稜線それぞれに対し頂点生成するよう構成された構成要素はさらに、
第一のビットフラグに格納された情報を用いることにより、生成される頂点が内部頂点または外部頂点かどうか決定するよう構成された構成要素を備える請求項３２に記載の集積回路。
【請求項３４】
複数の頂点は、第一の頂点と、第二の頂点と、第三の頂点とを含み、
複数の稜線は、第一の稜線と、第二の稜線と、第三の稜線とを含み、
第二のセットの面情報を生成するよう構成された構成要素はさらに、
第一の稜線と、第二の頂点と、第二の稜線とを用いることにより、第一のサブディビジョンサーフェスについての面情報を導出するよう構成された構成要素と、
第二の稜線と、第三の頂点と、第三の稜線とを用いることにより、第二のサブディビジョンサーフェスについての面情報を導出するよう構成された構成要素と、
第三の稜線と、第一の頂点と、第一の稜線とを用いることにより、第三のサブディビジョンサーフェスについての面情報を導出するよう構成された構成要素と、
第一の稜線と、第二の稜線と、第三の稜線とを用いることにより、第四のサブディビジョンサーフェスについての面情報を導出するよう構成された構成要素と、
を備える請求項３０に記載の集積回路。
【請求項３５】
複数の細分割した稜線は、第一の稜線を構成する第一の組の細分割した稜線と、第二の稜線を構成する第二の組の細分割した稜線と、第三の稜線を構成する第三の組の細分割した稜線とを含み、
複数の追加の稜線は、第一の追加の稜線と、第二の追加の稜線と、第三の追加の稜線とを含み、
第二のセットのサブディビジョンデータを生成するよう構成された構成要素はさらに、
二番目の第一の組の細分割した稜線と、一番目の第二の組の細分割した稜線と、第一の追加の稜線とを用いることにより、第一のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成された構成要素と、
二番目の第二の組の細分割した稜線と、一番目の第三の組の細分割した稜線と第二の追加の稜線とを用いることにより、第二のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成された構成要素と、
二番目の第三の組の細分割した稜線と、一番目の第一の組の細分割した稜線と、第三の追加の稜線とを用いることにより、第三のサブディビジョを導出するンサーフェスについてのサブディビジョンデータよう構成された構成要素と、
第一と、第二と、第三の追加の稜線とを用いることにより、第四のサブディビジョンサーフェスについてのサブディビジョンデータを導出するよう構成された構成要素と、
を備える  請求項３４に記載の集積回路。
【請求項３６】
第二のセットの面情報と第二のセットのサブディビジョンデータとがそれぞれ対応付けられたサブディビジョンサーフェスを定義する複数の頂点と稜線とを含む請求項３０に記載の集積回路。
【請求項３７】
集積回路に常駐する複数の構成要素をリアルタイムで実行して、リアルタイムで複数のサブディビジョンサーフェスを生成できる請求項３０に記載の集積回路。
【請求項３８】
制御論理またはハードウェアまたは両方を組み合わせて用いて複数の構成要素を実施する請求項３０に記載の集積回路。
【請求項３９】
請求項３０に記載の集積回路を有するビデオゲーム機。
【請求項４０】
請求項３０に記載の集積回路を有するグラフィックカード。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の背景
本発明は、一般にコンピュータグラッフィクス処理に関する。すなわち、本発明は、コンピュータグラッフィクスに関連する、サブディビジョンサーフェスをリアルタイムで生成する方法およびシステムに関する。
【背景技術】
【０００２】
サブディビジョンサーフェスを用いて、滑らかな幾何学的表面を生成する。細分割することにより、サブディビジョンサーフェスを生成する。全てのサブディビジョンサーフェスは、オリジナルの多角形の表面から開始される。オリジナルの多角形の表面をさらに多角形に細分割して、あるセットの規則に従って全ての頂点を移動させる。頂点を移動させる規則は、方式毎に異なる。例えば、ある規則は、古い頂点を周囲に置いておき、必要に応じてこれらを回転させて新しい頂点を挿入することを要する。
【０００３】
通常用いられる方式の１つは、ループサーフェス細分割方式である。ループサーフェス細分割方式は、頂点を余分に生成して挿入し、次にあらかじめ定義された重み付け定数によりオリジナルの頂点をずらすことにより行われる。サブディビジョンサーフェスは、全細分割ステップにより徐々に滑らかになる。オリジナルの頂点に基づいて頂点を余分に生成し、各組のオリジナルの頂点から定義される稜線の中央にこれらを挿入する。各既存の頂点は、これにつながる他の頂点から影響を受ける。細分割によりさらに細かな形状が繰り返し生成される。このループサーフェス細分割方式の他に、例えば多面体方式といった、他にも多くの方法があり、サブディビジョンサーフェスの生成に用いられている。
【０００４】
サブディビジョンサーフェスは、コンピュータグラッフィクス産業でよく用いられていて、とりわけ、アニメ映画またはアニメ製作に用いられている。しかしながら、処理と一般管理費とに費用がかかることから、サブディビジョンサーフェスは、リアルタイムではない応用に限って用いられていた。例えば、グラフィックアートパッケージや映画／テレビ製作といったものである。
【０００５】
リアルタイムでサブディビジョンサーフェスを生成しようとするある方式が紹介されている。かかる方式は、細分割プリミティブを生成するのに用いられる形状ポインタと稜線とを含む大型で複雑なデータベース用いることにより行われる。大型で複雑なデータベースを用いるので、コードサイズが大きくなり、処理能率が非常に悪くなってしまう。従って、かかるサブディビジョンサーフェスをリアルタイムで実施し利用できるような、より能率的な方法でサブディビジョンサーフェスを生成できる、改良された方法およびシステムを提供することが望ましい。
【発明の開示】
【課題を解決するための手段】
【０００６】
発明の概要
コンピュータグラッフィクスに関連して用いられる、リアルタイムでサブディビジョンサーフェスを生成する方法およびシステムを提供する。本発明の例示の実施の形態によれば、細分割した面についての面情報とサブディビジョンデータとを、まず生成する。細分割した面は、多数のサブディビジョンサーフェスから構成される。細分割した面についての面情報とサブディビジョンデータとはそれぞれ、細分割した面を定義する頂点と稜線とを含む。さらに、２つのビットフラグを、細分割した面についてのサブディビジョンデータに特定された各稜線に対応付ける。一方のビットフラグを用いて、対応付けられた稜線の使用が二度目であるかどうか特定し、他方のビットフラグを用いて、対応付けられた稜線を二回用いているかどうか示す。
【０００７】
次に、細分割した面についてのサブディビジョンデータを用いて、さらに細分割した稜線を生成する。細分割した面についてのサブディビジョンデータが特定する各稜線は、１組の細分割した稜線から定義される。稜線が二回用いられていて、かつ使用が二度目ならば、この稜線を構成する細分割した稜線の順序を逆にする。次に、第一の所定の手法に従って細分割した面についての面情報とサブディビジョンデータとを用いて、サブディビジョンサーフェスについての面情報を生成する。第二の所定の手法に従ってさらに細分割した稜線を用いて、サブディビジョンサーフェスについてのサブディビジョンデータを生成する。同様に、サブディビジョンサーフェスについての面情報とサブディビジョンデータとはそれぞれ、サブディビジョンサーフェスを定義する頂点と稜線とを含む。２つのビットフラグは、サブディビジョンサーフェスについてのサブディビジョンデータに特定された各稜線に対応付けられている。
【０００８】
各細分割した面とサブディビジョンサーフェスとについての面情報とサブディビジョンデータとを生成した後、この細分割した面を定義する各稜線に対して新しい頂点を生成する。内部頂点ビットフラグを用いて、新規に生成した頂点が内部頂点かどうか示す。新しい頂点が内部頂点ならば、次に標準（３／８、３／８、１／８、１／８）頂点重み付けシステムを用いて、稜線を共有する近傍の頂点に対する混合重みを二等分する。そして全ての頂点をずらして、より滑らかな細分割した面を生成する。
【０００９】
図面と請求項とを含む以下の明細書を参照することにより、本発明の他の特徴および利点について理解されるであろう。本発明のさらなる特徴および利点について、本発明のいろいろな実施の形態に関する構造および動作と共に、添付の図面について以下に詳細に説明する。同じ構成要素または機能的に同じ構成要素には同じ符号が付けられている。
【発明を実施するための最良の形態】
【００１０】
発明の詳細な説明
本発明について、各種の例示の実施の形態により説明する。本発明は一般に、リアルタイムの方法でサブディビジョンサーフェスを生成する、改良された方法に関する。一例の実施の形態によれば、この方法は、多数のインデックスプリミティブを用いる。これらのプリミティブは、頂点アレイと、これらの頂点に割出された面アレイと、サブディビジョンデータとを含む。サブディビジョンデータは、他の情報のなかでも、１組の頂点から定義される稜線と、頂点の数と、面の数と、一意の稜線の数とを含む。これらのプリミティブがどのように導出されて、これらをどのように用いてサブディビジョンサーフェスを生成するか、以下にさらに詳細に説明する。
【００１１】
全てのサブディビジョンサーフェスは、オリジナルの多角形の表面から開始される。１つ以上のオリジナルの多角形の表面が、生成されるグラフィカルモデルに対するオブジェクトを構成する。グラフィカルモデルは、オブジェクトのグラフィカル表現である。各オリジナルの多角形の表面を、さらに多角形に、あるいはサブディビジョンサーフェスに細分割する。次に、各サブディビジョンサーフェスをオリジナルの多角形の表面のように扱って、所望ならば、サブディビジョンサーフェスをさらに細分割する。形成する細分割の数は、例えば、設計上の選択といった要因の数による。
【００１２】
例示の一実施の形態によれば、本発明の方法は、サブディビジョンサーフェスを生成する３つのステップを実行する。図１を参照すると、例示の方法の３つのステップは、（１）繰り返し用いられる面情報の生成と、（２）新しい頂点の生成と、（３）既存の頂点をずらすこととを含む。これらの３つのステップについてそれぞれ、以下にさらに詳細に説明する。
【００１３】
繰り返し用いられる面情報を生成する際には、再分割される各表面または面のそれぞれについて面情報を生成する。例示の一実施の形態によれば、各オリジナルの多角形の表面は三角形と見なされている。すなわち、再分割される各面は三角形であると見なされている。その結果、以下に示すように、各細分割ステップを実行してから生成される全てのサブディビジョンサーフェスは、三角形であると見なされている。図２は、再分割される三角形を有するオリジナルの多角形の表面（すなわちサブディビジョンサーフェス）２０を示す。表面すなわち面２０は、３つの頂点（０、１、２）から定義される。つまり、面２０は、３つの頂点（０、１、２）につながる３つの一意の稜線から形成される。すなわち、１組の頂点（０、１）で区切られる稜線と、１組の頂点（１、２）で区切られる稜線と、１組の頂点（２、０）で区切られる稜線とである。一意の稜線は、頂点を２つだけつなぐことにより形成される稜線と定義される。すなわち、１組の頂点で区切られる稜線のことである。
【００１４】
各細分割ステップでは、面２０を形成する３つの稜線に、さらに頂点を加える。すなわち、各既存の稜線の中央に、さらに頂点を加える。図２に示すように、１組の頂点（０、１）から定義される稜線と、１組の頂点（１、２）から定義される稜線と、１組の頂点（２、０）から定義される稜線とに、それぞれ新しい頂点（３、４、５）を加える。符号（３、４、５）はまた、それぞれ新しい頂点を含む稜線を参照するのに用いることができる。例えば、参照番号（３）は、頂点（０、１）の間の稜線を参照するのに用いることができる。参照番号（４）は、頂点（１、２）の間の稜線を参照するのに用いることができる。そして、参照番号（５）は、頂点（２、０）の間の稜線を参照することに用いることができる。
【００１５】
各細分割ステップを行う間に、面２０の各既存の稜線を、２つの細分割した稜線に分割する。例えば、図２に示すように、稜線（３）を２つの同じ細分割した稜線に分ける。すなわち、頂点（０、３）の間の細分割した稜線と、頂点（３、１）の間の細分割した稜線とである。同様に、稜線（４）と（５）とについても、それぞれ２つの同じ細分割した稜線に分割する。
【００１６】
また、各細分割ステップ行う間に、新規に生成した頂点（３、４、５）を用いて、さらに３つの新しい稜線を面２０の中央に生成する。図２に示すように、新しく加えた稜線は、頂点（３、５）の間にさらに加えた稜線と、頂点（３、４）の間にさらに加えた稜線と、頂点（４、５）の間にさらに加えた稜線である。次に、順にこれらの追加した稜線を用いて面２０を細分割することにより、さらに細分割表面を生成する。図２を参照すると、面２０に対して、それぞれ頂点（３、１、４）と、（４、２、５）と、（５、０、３）と、（３、４、５）とから定義される４つのサブディビジョンサーフェスを生成する。
【００１７】
上述のように、各細分割ステップにより、面の数と、頂点と、稜線とが増加する。例えば面２０といった三角形の表面を用いることにより、各細分割ステップから各既存の面に対して４つの新しい面が形成されるので、面の数が四倍に増加する。面の数は、次の計算式により表される。Ｆａｓｅｓｎ＋１＝Ｆａｃｅｓｎ＊４、”ｎ”はｎ番目の細分割ステップを示し、”ｎ＋１”はｎ番目の細分割ステップのすぐ次の細分割ステップを示す。
【００１８】
頂点の数は、一意の稜線の数だけ増加する。これは、各一意の稜線の中央に、さらに頂点を生成するからである。次の計算式は、ｎ＋１番目の細分割ステップの後の頂点の数を示す。
Ｖｅｒｔｉｃｅｓｎ＋１＝Ｖｅｒｔｉｃｅｓｎ＋Ｅｄｇｅｓｎ
新しい頂点を一意の稜線の中央に追加すると、この新しい頂点が他の新しい頂点につながって、さらに一意の稜線を形成する。次の計算式は、ｎ＋１番目の細分割ステップの後の一意の稜線の数を示す。
Ｅｄｇｅｓｎ＋１＝Ｅｄｇｅｓｎ＊２＋Ｆａｃｅｎ＊３
さらに、方法の一例によれば、２つ以下の面を同じ一意の稜線につなぐことができる。すなわち、１つの一意の稜線を２つの面で共有する、もしくは使用することができる。２つの面が同じ稜線を使用するには、ある順序に従うことになるが、これについてさらに以下に述べる。各稜線の状態を常に把握するために、各面２０を形成する稜線に２つの面ビットフラグを対応付ける。第一の面ビットフラグを用いて、対応付けられた稜線が”稜線の再使用”なのかどうか示す。すなわち、この対応付けられた稜線の使用が二度目なのかどうかである。第二の面ビットフラグを用いて、対応付けられた稜線が”二面を持つ”のかどうか示す。すなわち、対応付けられた稜線が、複数の面に含まれる、もしくは共有されるかどうかである。また、さらに以下に述べるように、再分割される各稜線に対応付けられた内部頂点ビットフラグが存在する。稜線を細分割すると、稜線の中央に位置する新しい頂点も形成される。内部頂点ビットフラグを用いて、新規に生成した頂点が”内部”頂点かどうか示す。これらのビットフラグの使い方についてはさらに以下に述べる。これらのビットフラグを実施するには、通常ソフトウェアを用いて実施して、これらを重み付け表のルックアップポインタとして用いる。
【００１９】
簡単に述べると、図２に戻って、面２０を細分割するとすれば、以下の面情報とサブディビジョンデータとを生成して面２０を細分割する。
Ｆａｃｅ０［０］：頂点（０、１、２）および
Ｓｕｂ０［０］：（３、４、５）
Ｆａｃｅ０［０］：頂点（０、１、２）は、頂点（０、１、２）から定義される面２０を示し、ｓｕｂ００：（３、４、５）は、面２０を定義する３つの稜線を示す。稜線（３）は頂点（０、１）の間に、稜線（４）は、頂点（１、２）の間に、稜線（５）は頂点（２、０）の間にある。
【００２０】
面２０を細分割することにより、頂点（０、１）の間に頂点（３）を、頂点（１、２）の間に頂点（４）を、頂点（２、０）の間に頂点（５）を生成する。頂点の生成について、さらに以下に述べる。また、面２０を４つのサブディビジョンサーフェスに細分割しているので、さらに面情報が生成される。例えば、図２に続いて面２０を細分割することにより、次の面情報を生成する。
Ｆａｃｅ１［０］：頂点（３、１、４）−サブエレメント０、面エレメント１、サブエレメント１
Ｆａｃｅ１［１］：頂点（４、２、５）−サブエレメント１、面エレメント２、サブエレメント２
Ｆａｃｅ１［２］：頂点（５、０、３）−サブエレメント２、面エレメント０、サブエレメント０
Ｆａｃｅ１［３］：頂点（３、４、５）−サブエレメント０、サブエレメント１、サブエレメント２
Ｆａｃｅ１［０］：頂点（３、１、４）は、サブディビジョンサーフェスから定義される頂点（３、１、４）を示し、Ｆａｃｅ１［１］：頂点（４、２、５）は、第二のサブディビジョンサーフェスから定義される頂点（４、２、５）を示し、Ｆａｃｅ１［２］：頂点（５、０、３）は、第三のサブディビジョンサーフェスから定義される頂点（５、０、３）を示し、Ｆａｃｅ１［３］：頂点（３、４、５）は、第四のサブディビジョンサーフェスから定義される頂点（３、４、５）を示す。
【００２１】
細分割後に生成された面情報の右側についての情報は、後細分割面情報を生成するのに用いられる前細分割面情報と、細分割データとからのエレメントを示す。例えば、Ｆａｃｅ１［０］を生成するには、サブディビジョンデータＳｕｂ０［０］の第一のエレメントである稜線（３）と、面情報Ｆａｃｅ０［０］の第二のエレメントである（１）と、サブディビジョンデータＳｕｂ０［０］の第二のエレメントである稜線（４）とを用いると、（３、１、４）になる。Ｆａｃｅ１１を生成するには、サブディビジョンデータＳｕｂ０［０］の第二のエレメントである稜線（４）と、面情報Ｆａｃｅ０［０］の第三のエレメントである（２）と、サブディビジョンデータＳｕｂ０［０］の第三のエレメントである稜線（５）とを用いると、（４、２、５）になる。サブエレメント０は第一のサブエレメントを示し、エレメントの始めは”０”から開始することに留意されたい。同様に、Ｆａｃｅ１［２］およびＦａｃｅ１［３］を同じように生成する。
【００２２】
各細分割ステップで、上述のように各面２０についての面情報を生成する。細分割ステップをさらに行う場合は、すなわち、オリジナルの細分割表面から生成されたサブディビジョンサーフェスをさらに細分割し、細分割される各サブディビジョンサーフェスについての面情報とサブディビジョンデータとを、上述のように生成しなければならない。
【００２３】
第一の面ビットフラグの使い方について説明する。上述のように、第一の面ビットフラグを用いて、稜線の使用が二度目であるかどうか示す（”稜線の再使用”）。稜線の使用が二度目であれば、次にこの稜線を二回目の逆の順序で用いる。図３は、２つの面で稜線を用いることを示す図である。図３を参照すると、頂点（０、１、２、３）から定義される２つの面がある。第一の面であるＦａｃｅ［０］は、頂点（０、１、２）から定義され、第二の面であるＦａｃｅ［１］は、頂点（０、２、３）から定義される。稜線（６）は、頂点（０、２）の間の稜線である。図３に示すように、稜線（６）は、Ｆａｃｅ［０］とＦａｃｅ［１］との両方が共有する、あるいは使用する。方法の一例によれば、時計回りの方向を考えると、稜線（６）は、頂点（２）から頂点（０）への順序でＦａｃｅ［０］が使用する。Ｆａｃｅ［１］では、この順序を逆にする。すなわち、稜線（６）は、頂点（０）から頂点（２）の順序でＦａｃｅ［１］が使用する。同様に、頂点（６）は、Ｆａｃｅ［０］とＦａｃｅ［１］との両方からの細分割した面の出力が共有する。頂点（６）が頂点（０、２）の間の稜線に位置するので、頂点（０、２）は、頂点（６）の近傍の頂点であると見なされ、頂点（１、３）は、対向する頂点と見なされる。
【００２４】
稜線の再使用は、細分割データエレメントに文字”ｒ”を加えて示している。二面を持つ稜線は、細分割データエレメントに文字”ｄ”を加えて示している。二面を持つ稜線についてさらに以下に述べる。
【００２５】
図３に基づいて、Ｆａｃｅ［０］とＦａｃｅ［１］とについて以下の面情報を得る。
Ｆａｃｅ０［０］：頂点（０、１、２）−ｓｕｂ０［０］：（４、５、６ｄ）および
Ｆａｃｅ０［１］：頂点（０、２、３）−ｓｕｂ０［１］：（６ｒ、ｄ、７、８）
Ｆａｃｅ０［０］：頂点（０、１、２）は、Ｆａｃｅ［０］を構成する３つの頂点（０、１、２）を示す。Ｓｕｂ０［０］：（４、５、６ｄ）は、Ｆａｃｅ［０］を定義する３つの稜線（４、５、６）を示す。”６ｄ”は、稜線（６）を二回用いていることを示す。
【００２６】
Ｆａｃｅ０［１］：頂点（０、２、３）は、Ｆａｃｅ［１］を構成する３つの頂点（０、２、３）を示し、ｓｕｂ０［１］：（６ｒ、ｄ、７、８）は、Ｆａｃｅ［１］を定義する３つの稜線（６、７、８）を示す。”６ｒ、ｄ”は、稜線（６）が二回用いられて（すなわち、２つの面に共有されて）、この稜線の使用が二度目であることを示している。
【００２７】
上述のように、次の細分割により生成される稜線の数は、次の計算式に従う。Ｅｄｇｅｓｎ＋１＝ＥｄｇｅＳｎ＊２＋Ｆａｓｅｓｎ＊３。１つの稜線を細分割することにより、これらの稜線をつなぐ頂点を中央に有する２つの細分割した稜線を生成する。次に第二の細分割は、全部で４つの細分割した稜線と３つの頂点とになる。図４を参照すると、頂点（０、１）の間に形成された稜線が示されている。この稜線を細分割した後、頂点（０、２）と（２、１）との間に、１つの新しい頂点（２）と、２つの細分割した稜線とがそれぞれ生成される。頂点（０、２）と（２、１）との間に形成された２つの細分割した稜線を細分割することにより、頂点（０、３）、（３、２）、（２、４）、（４、１）の間に、２つの新しい頂点（３、４）と、４つの新しい細分割した稜線とがそれぞれさらに生成される。稜線を細分割した後、２つの細分割した稜線を記述するのに用いる頂点の組を、以下の順序で保つことに留意されたい。すなわち、第一の細分割した稜線については新しい頂点が頂点の組の第二の頂点になり、第二の細分割した稜線については新しい頂点が頂点の組の第一の頂点になる。例えば、図３では、頂点（０、１）の間の稜線から形成した２つの細分割した稜線は、次の頂点の組を有する。それぞれ（０、２）および（２、１）で、新規に生成した頂点である頂点（２）を有する。
【００２８】
次に細分割した稜線を、同じ順序で既存の稜線に加える。図５は、図３に示すＦａｃｅ［０］とＦａｃｅ［１］とを細分割した結果を示している。図５に示すように、細分割の後で稜線（４）は、２つの細分割した稜線（９）と（１０）になる。稜線（５）は、細分割した稜線（１１）と（１２）になる。稜線（６）は、細分割した稜線（１３）と（１４）とになり、以下同様である。上述のように稜線を細分割することにより、２つの細分割した稜線をつなぐ稜線の中央に加えられる、新しい頂点が生成されることにもなる。例えば、稜線（４）を細分割すると、新しい頂点（４）が生成されて、頂点（０、１）の間の稜線の中央に加えられる。これにより、細分割した稜線（９）と（１０）とをつなぐ。このように稜線を割り出すことにより、既存の稜線を２倍しオフセットを加えることによりある稜線の所定の細分割した稜線についての既存の頂点と２つの細分割した稜線のインデックスとを計算してから、新規に生成した頂点が加えられる。
【００２９】
図５を参照すると、細分割した稜線（ｓ．ｅ．）で記述される２つの面であるＦａｃｅ［０］およびＦａｃｅ［１］は、次の通りである。
Ｆａｃｅ［０］：頂点（０、１、２）−ｓｕｂ（４、５、６ｄ）−ｓ．ｅ．（９、１０）、（１１、１２）、（１３ｄ、１４ｄ）
Ｆａｃｅ［１］：頂点（０、２、３）−ｓｕｂ（６ｒ、ｄ、７、８）−ｓ．ｅ．（１４ｒ、ｄ、１３ｒ、ｄ）、（１５、１６）、（１７、１８）
Ｆａｃｅ［０］は、頂点（０、１、２）とｓｕｂ（４、５、６ｄ）について上述した。ｓ．ｅ．（９、１０）、（１１、１２）、（１３ｄ、１４ｄ）は、Ｆａｃｅ［０］の細分割から得られた全ての細分割した稜線を特定する。細分割した稜線に時計回りの方向で順次番号を付ける。Ｆａｃｅ［０］についてのサブディビジョンデータに特定された各稜線は、１組の細分割した稜線から定義される。例えば、稜線（４）はｓ．ｅ．（９、１０）から定義される。同様に、（１３ｄ、１４ｄ）は、細分割した稜線（１３）と（１４）とを二回用いる（すなわち、２つの面が共有する）ことを示している。これは、細分割した稜線（１３）と（１４）とが稜線（６）を構成し、前述のように稜線（６）を二回用いるという事実から続くものである。同様、Ｆａｃｅ［１］は、頂点（０、２、３）とｓｕｂ（６ｒ、ｄ、７、８）について上述した。ｓ．ｅ．（１４ｒ、ｄ、１３ｒ、ｄ）、（１５、１６）、（１７、１８）は、Ｆａｃｅ［１］の細分割から得られる全ての細分割した稜線を特定する。（１４ｒ、ｄ、１３ｒ、ｄ）は、細分割した稜線（１３）と（１４）とを二回用いて（すなわち、２つの面が共有する）、かつ、使用が二回目であることを示している。また、細分割した稜線に時計回りの方向で順次番号を付ける。さらに、共有の稜線を構成する細分割した稜線の順序を逆にする。これは、二回目に用いた稜線の結果である。例えば、Ｆａｃｅ［１］について、細分割した稜線（１３）と（１４）とを、ｓ．ｅ．（１３ｄ、１４ｄ）と対照的にｓ．ｅ．（１４ｒ、ｄ、１３ｒ、ｄ）として記憶する。
【００３０】
さらに、細分割した稜線を生成した後、各細分割した面にさらに稜線を追加する。各細分割した面に対しては、その細分割した面に対応付けられた追加の稜線を、その細分割した面から生成された細分割面の外側に存在する面が用いることはない。すなわち、細分割した面に対応付けられた追加の稜線を、その細分割した面から生成された細分割面だけが用いる。図６を参照すると、追加された稜線は（１９、２０、２１、２２、２３、２４）である。２つの面であるＦａｃｅ［０］とＦａｃｅ［１］とはそれぞれ、４つの細分割面に細分割されている。Ｆａｃｅ［０］とＦａｃｅ［１］とに対する第四の細分割面はそれぞれ、追加の稜線（１９、２０、２１）と（２２、２３、２４）とから定義される。図６に示すように、追加の稜線（１９、２０、２１）は、Ｆａｃｅ［０］を再分割して形成された細分割面だけが用いる。同様に、追加の稜線（２２、２３、２４）は、Ｆａｃｅ［１］を再分割して形成された細分割面だけが用いる。
【００３１】
上に示したように、Ｆａｃｅ［０］とＦａｃｅ［１］とに対する第一の細分割を行う前に、以下の面情報とサブディビジョンデータとが利用できる。
Ｆａｃｅ０［０］：頂点（０、１、２）−ｓｕｂ（４、５、６ｄ）
Ｆａｃｅ０［１］：頂点（０、２、３）−ｓｕｂ（６ｒ、ｄ、７、８）
Ｆａｃｅ［０］とＦａｃｅ［１］とに対する第一の細分割の後、次の面情報とサブディビジョンデータとが生成される。
Ｆａｃｅ１［０］：頂点（４、１、５）−ｓｕｂ（１０、ｌｌ、１９ｄ）
Ｆａｃｅ１［１］：頂点（５、２、６）−ｓｕｂ（１２、１３ｄ、２０ｄ）
Ｆａｃｅ１［２］：頂点（６、０、４）−ｓｕｂ（１４ｄ、９、２１ｄ）
Ｆａｃｅ１［３］：頂点（４、５、６）−ｓｕｂ（１９ｒ、ｄ、２０ｒ、ｄ、２１ｒ、ｄ）
Ｆａｃｅ１［４］：頂点（６、２、７）−ｓｕｂ（１３ｒ、ｄ、１５、２２ｄ）
Ｆａｃｅ１［５］：頂点（７、３、８）−ｓｕｂ（１６、１７、２３ｄ）
Ｆａｃｅ１［６］：頂点（８、０、６）−ｓｕｂ（１８、１４ｒ、ｄ、２４ｄ）
Ｆａｃｅ１［７］：頂点（６、７、８）−ｓｕｂ（２２ｒ、ｄ、２３ｒ、ｄ、２４ｒ、ｄ）
”稜線の再使用”および”二面を持つ稜線”に用いられる表示について説明する。図６を参照すると、Ｆａｃｅ［０］に関する面情報に対し、細分割した稜線（１３）および（１４）と、追加の稜線（１９）、（２０）および（２１）とが全て二回用いられていることがわかる。すなわち、細分割した稜線（１３）と（１４）とをＦａｃｅ［０］とＦａｃｅ［１］との両方に用い、追加の稜線（１９）、（２０）および（２１）を、Ｆａｃｅ［０］の再分割から生成された４つの細分割面の間で二回用いる。また、Ｆａｃｅ［０］に関する面情報は、表示”ｒ、ｄ”で示されているように、追加の稜線（１９）、（２０）および（２１）が、二回目の使用であることも示している。
【００３２】
同様に、Ｆａｃｅ［１］に関する面情報に対し、細分割した稜線（１３）および（１４）と、追加の稜線（２２）、（２３）および（２４）とが二回用いられていることがわかり、かつ、二回目の使用であることも示している。
【００３３】
Ｆａｃｅ１［０］〜Ｆａｃｅ１［３］についての面情報とサブディビジョンデータとを次のように生成する。上述のように、Ｆａｃｅ１［０］〜Ｆａｃｅ１［３］についての面情報に対し、この情報を、Ｆａｃｅ０［０］についての面情報とサブディビジョンデータとから導出できる。すなわち、頂点（０、１、２）−ｓｕｂ（４、５、６ｄ）である。上述の方法を用いることにより、Ｆａｃｅ１［０］をサブエレメント０（４）と、面エレメント１（１）と、サブエレメント１（５）とから導出する。これにより、Ｆａｃｅ１［０］：頂点（４、１、５）になる。同様に、Ｆａｃｅ１［１］〜Ｆａｃｅ１［３］についての面情報は、上述のように導出でき、Ｆａｃｅ１［１］：頂点（５、２、６）と、Ｆａｃｅ１［２］：頂点（６、０、４）と、Ｆａｃｅ１［３］：頂点（４、５、６）とになる。
【００３４】
第一の細分割の後で生成されるサブディビジョンデータは、細分割した稜線（ｓ．ｅ．）と追加の稜線（ａ．ｅ．）とに基づいて次のように生成できる。例として、Ｆａｃｅ０［０］からの面情報とサブディビジョンデータとを用いてＦａｃｅ０［０］、Ｆａｃｅ１［１］、Ｆａｃｅ１［２］およびＦａｃｅ１［３］についての面情報とサブディビジョンデータとを生成する。上に示したように、第一の細分割の前に次のデータが利用できる。
Ｆａｃｅ０［０］：頂点（０、１、２）−ｓｕｂ（４、５、６ｄ）−ｓ．ｅ．（９、１０）、（１１、１２）、（１３ｄ、１４ｄ）−ａ．ｅ．（１９、２０、２１）
Ｆａｃｅ１［０］についてのサブディビジョンデータを、第一の組の細分割した稜線の第二の部分である（１０）と、第二の組の細分割した稜線の第一の部分である（１１）と、第一の追加の稜線である（１９）とから導出する。これにより、ｓｕｂ（１０、１１、１９）を得る。
【００３５】
Ｆａｃｅ１［１］についてのサブディビジョンデータを、第二の組の細分割した稜線の第二の部分である（１２）と、第三の組の細分割した稜線の第一の部分である（１３）と、第二の追加の稜線である（２０）とから導出する。これにより、ｓｕｂ（１２、１３、２０）を得る。
【００３６】
Ｆａｃｅ１［２］についてのサブディビジョンデータを、第三の組の細分割した稜線の第二の部分である（１４）と、第一の組の細分割した稜線の第一の部分である（９）と、第三の追加の稜線である（２１）とから導出する。これにより、ｓｕｂ（１４、９、２１）を得る。
【００３７】
最後に、Ｆａｃｅ１［３］についてのサブディビジョンデータを、３つの追加の稜線である（１９、２０、２１）全てから導出する。これにより、ｓｕｂ（１９、２０、２１）を得る。
【００３８】
次に、各細分割した稜線に対する２つの面ビットフラグを決定する。稜線から２つの面ビットフラグを、その２つの細分割した稜線に持ち越す。これは、稜線を細分割することが、その２つの細分割した稜線が二面を持つのか、あるいは再使用なのかということで影響されないからである。すなわち、稜線が二面を持つならば、その２つの細分割した稜線もまた、細分割の後で二面を持つからである。従って、細分割した稜線（１３）と（１４）とに対する第二の面ビットフラグを”ｄ”に設定する。Ｆａｃｅ０［０］とＦａｃｅ０［１］とが一括して二回用いている稜線（６）から、細分割した稜線（１３）と（１４）とを細分割しているからである。３つの追加の稜線については、これらを二回用いて第四の細分割面に再使用する。従って、各追加の稜線に対する２つの面ビットフラグは一定である。３つの追加の稜線がＦａｃｅ１［０］〜Ｆａｃｅ１［２］に現れる場合は、３つの追加の稜線（１９、２０、２１）に対する第二の面ビットフラグを、”ｄ”に設定する。すなわち二面を持っている。３つの追加の稜線がＦａｃｅ１［３］に現れる場合は、”ｒ、ｄ”と設定する。すなわち二面を持ち、かつ再使用である。
【００３９】
Ｆａｃｅ１［０］〜Ｆａｃｅ１［３］に対する第一の細分割後の面情報と、サブディビジョンデータと、対応する面ビットフラグとを、上述のように導出する。同様に、同じ情報Ｆａｃｅ１［４］〜Ｆａｃｅ１［７］について導出できる。
【００４０】
各細分割ステップでは、面情報とサブディビジョンデータ（対応する面ビットフラグを含む）とを得た後、新しい頂点を生成する必要がある。一般に、細分割に用いられる２つのタイプの頂点がある。すなわち、内部頂点と、境界／折り目、つまり外部頂点とである。これら２つの頂点に対する細分割化規則は、若干異なっている。上述のように細分割する際に、サブディビジョンデータ内の各稜線に対して、稜線の中央に頂点を生成する。どのように頂点を生成するかは、頂点の位置による。別々の混合重みを異なるタイプの頂点に用いる。例えば、生成される頂点が内部頂点ならば、（３／８、３／８、１／８、１／８）の頂点重み付けシステムを用いる。生成される頂点が外部頂点ならば、（１／２、１／２）頂点重み付けシステムを用いる。内部頂点および外部頂点の生成に用いられる方法について、さらに以下に述べる。
【００４１】
図７を参照すると、内部頂点は頂点グリッドの中央に位置し、通常６つの他の頂点と稜線を共有する。内部頂点７０を生成する場合は、異なる頂点を別々に用いる。すなわち、稜線上の各頂点につき３／８と、頂点１つにつき１／８とで形成された稜線で１つの三角形を形成する。
【００４２】
図８は、内部頂点の生成に用いられる混合重みを示す。図８に示すように、生成される頂点（６）は、内部頂点である。頂点（６）を、次に基づいて生成する。
頂点（６）＝１つの近傍の頂点につき３／８＋１つの対向する頂点につき１／８
近傍の頂点は、稜線を共有する頂点、すなわち頂点（０、２）である。対向する頂点は、残余の三角形を共有する頂点、すなわち頂点（１、３）である。
【００４３】
図９に示すように、頂点（０、２）から定義される稜線（６）は、２つの面が共有する。すなわち、頂点（０、１、２）と（０、２、３）とからそれぞれ定義される面である。従って、これら頂点を二回加えるようにして、生成される頂点に対する頂点（０、２）の影響を二等分する。
【００４４】
数学的に頂点（６）を次のように計算する。
ｖ６＝（ｖ１＋ｖ３）／８＋（ｖ０＋ｖ２）＊３／８
しかし、２つの面があるために頂点（０、２）を二回加えているので、頂点（０、２）の影響を次のよう二等分する。
ｖ６＝（ｖ１＋ｖ３）／８＋（ｖ０＋ｖ２）＊（３／８）／２
＝（ｖ１＋ｖ３）／８＋（ｖ０＋ｖ２）＊３／１６
同じ頂点を二回加えることにより、前述の計算で効果的に問題を処理する。Ｆａｃｅ［０］を処理した後、頂点（６）に対し、次の式を得る。
ｖ６＝ｖ１／８＋（ｖ０＋ｖ２）＊３／１６
そして、Ｆａｃｅ［１］を処理する。Ｆａｃｅ［１］が稜線（６）をＦａｃｅ［０］と共有するので、Ｆａｃｅ［１］も頂点（６）を形成することに留意されたい。そして、次のようにして頂点（６）を得る。
ｖ６＝（ｖ１／８＋（ｖ０＋ｖ２）＊３／１６）＋（ｖ３／８＋（ｖ０＋ｖ２）＊３／１６）
＝（ｖ１＋ｖ３）／８＋（ｖ０＋ｖ２）＊３／８
図８を参照すると、境界／折り目、つまり外部頂点９０を形成する際に、他の境界／折り目の稜線の頂点（実線で示す）それぞれの半分（１／２）を用いる。外部頂点の生成は、内部頂点の生成よりも単純である。外部頂点については定義上、外部頂点が存在する稜線を１つの面にだけ用いる。この面を使って２つの稜線の頂点を合計し、その結果を２で割ることにより外部頂点を計算する。
【００４５】
図１０に示すように、１つの面だけを稜線（４）に用いるので、頂点（４）を生成するための混合重みは、１つの近傍につき１／２である。つまり、頂点（０、１）の１／２を加えて、稜線の中央（４）に位置する頂点（４）を生成する。稜線（４）は二面を持たない稜線である。すなわち、Ｆａｃｅ［０］だけがこれを用いる。
【００４６】
各稜線に対し頂点を生成する際には、生成される頂点は、内部頂点または外部頂点のいずれかである。つまり、頂点が存在する稜線は、二面を持つか一面を持つかのいずれかである。生成される頂点の性質により、異なる混合重みを用いる。上述のように、各稜線に対応付けられた２つの面ビットフラグがある。第二の面ビットフラグは、稜線が二面を持っているかいないかを示す。従って、各稜線に対する第二の面ビットフラグに含まれる情報を用いることにより、頂点を生成するために用いる適切な混合重みを選択できる。
【００４７】
さらに上述のように、各頂点に対応付けられた内部頂点ビットフラグがある。内部頂点ビットフラグを用いて、頂点が内部頂点かどうか示す。この内部頂点ビットフラグを生成するには、稜線を細分割する際に第二の面ビットフラグの内容をコピーする。細分割した稜線が二面を持たなければ、かかる稜線は、境界または折り目に存在する。その結果、細分割する際に、細分割した稜線の中央に生成した頂点もまた、境界または折り目に存在する。
【００４８】
図６を例にとると、内部頂点ビットフラグを含む面情報は次の通りである。
Ｆａｃｅ１［０］：頂点（４、１、５）−ｓｕｂ（１０、１１、１９ｄ）
Ｆａｃｅ１［１］：頂点（５、２、６ｉ）−ｓｕｂ（１２、１３ｄ、２０ｄ）
Ｆａｃｅ１［２］：頂点（６ｉ、０、４）−ｓｕｂ（１４ｄ、９、２１ｄ）
Ｆａｃｅ１［３］：頂点（４、５、６ｉ）−ｓｕｂ（１９ｒ、ｄ、２０ｒ、ｄ、２１ｒ、ｄ）
Ｆａｃｅ１［４］：頂点（６ｉ、２、７）−ｓｕｂ（１３ｒ、ｄ、１５、２２ｄ）
Ｆａｃｅ１［５］：頂点（７、３、８）−ｓｕｂ（１６、１７、２３ｄ）
Ｆａｃｅ１［６］：頂点（８、０、６ｉ）−ｓｕｂ（１８、１４ｒ、ｄ、２４ｄ）
Ｆａｃｅ１［７］：頂点（６ｉ、７、８）−ｓｕｂ（２２ｒ、ｄ、２３ｒ、ｄ、２４ｒ、ｄ）
”ｉ”は、頂点が内部頂点であることを示す。上記は、頂点（６）は内部頂点だけであることを示す図６の構成要素である。通常、より大きなメッシュでは、大抵の頂点は内部頂点であり、閉じたメッシュでは、全ての頂点は内部頂点である。
【００４９】
稜線に対して新しい頂点を生成した後、既存の頂点をずらす。ループサーフェス細分割方法により、既存の頂点と稜線を共有する周囲の頂点に基づいて、各既存の頂点をずらす（移動する）。対応する既存の頂点が内部頂点ならば、（ずらした既存の頂点に対応する）各出力頂点は、１／１６の重みで対応する既存の頂点と各周囲の頂点とから影響を受ける。
【００５０】
図１１は、既存の内部頂点のずれを示す。図１１に示すように、通常のメッシュ内の大抵の頂点は、６の価を持つ内部頂点である。（ずらした既存の頂点（０）１１０に対応する）出力頂点は、既存の頂点（０）１１０の１０／１６と、稜線を既存の頂点（０）１１０と共有する各周囲の頂点の１／１６の重みで影響を受ける。すなわち、ずらした既存の頂点（０）１１０に対応する出力頂点は、ずらした既存の頂点（０）１１０の１０／１６と、稜線を共有する頂点（１、２、３、４、５、６）毎の１／１６とを含む。
【００５１】
ずらされる既存の頂点が境界／折り目、つまり外部頂点ならば、既存の頂点に対応する出力頂点は、境界または折り目上の他の頂点だけから影響を受ける。この状態で、既存の頂点を次のようにずらす。図１２は、外部頂点のずれを示す。図１２は３つの面、すなわち、Ｆａｃｅ０：頂点（０、１、２）、ＦＡｃｅ１：頂点（０、２、３）、Ｆａｃｅ２：頂点（０、３、４）を示す。頂点（０）１２０は、境界／折り目の頂点である。従って、ずらした頂点（Ｑ）１２０に対応する出力頂点に対する混合重みは、１つの近傍頂点につき１／８と、頂点（０）１２０の３／４とである。
【００５２】
図１２を参照すると、５つの頂点（０、１、２、３、４）を有するメッシュが示されている。ずらした頂点（０）１２０に対応する出力頂点は、頂点（１、４）と頂点（０）１２０とから影響を受ける。頂点（０）１２０は境界上にあるので、頂点（０）１２０は頂点（１、４）と境界を共有する。上に示したように、出力頂点対する混合重みは、１つの近傍頂点（または境界を共有する頂点につき）につき１／８と、ずらした頂点（０）１２０の６／８である。実施の一例では、図１３に示すように、内部頂点ビットフラグと第二の面ビットフラグ（”二面を持つ”ビットフラグ）とを用いて、混合重みを持つアレイを割り出す。
【００５３】
既存の頂点が外部頂点である既存の頂点のずれを完成するために、既存の頂点をまず、出力頂点アレイにコピーする。次に、各混合ステップでは、次のように適当な混合重みに頂点を掛け、既存の頂点を引いて各出力頂点を計算する。
Ｖｏｕｔ＝Ｖｏｕｔ＋ｗｅｉｇｈｔ＊（Ｖｘ−Ｖｓｒｃ）
ｖｏｕｔは、出力（つまりずらした）頂点で、ｖｓｒｃは、既存の（つまりずらしていない）頂点で、ｖｘは、稜線を共有する頂点である。前述が意味することは、既存の頂点の小数部を除去するが、稜線を共有する頂点の同じ小数部を混合することである。
【００５４】
ここに説明したことに基づいて、本発明の例示の方法を実施して、より効率的にリアルタイムのやり方でサブディビジョンサーフェスを生成できることが、当業者にとって明らかであろう。上述のような面情報とサブディビジョンデータとは、比較的少ない量のデータを表しており、従って、かかる情報とデータとを最小限の記憶領域に格納して、より効率的にリアルタイムのやり方で処理することができる。
【００５５】
実施の一例では、例えばＭｉｃｒｏｓｏｆｔ社のＤｉｒｅｃｔ３Ｄといったグラフィクス拡張ソフトウェア、および／または例えばＣやＣ＋＋といったコンピュータプログラミング言語を用いて本発明の方法の一例を実施する。例示の実施は、一体型の方式、あるいは各種のモジュールを有するモジュールの方式で設計できる。例示の実施は、例えば、ＣＤやＤＶＤ等のコンピュータ読み取り可能媒体に常駐させることができる。各種のビットフラグを含む面情報とサブディビジョンデータとに対するデータ構造を示す、ソフトウェアの実施の形態の一例を以下の表１に示す。
【００５６】
【表１】
2005521168.tif 000003
【００５７】
本発明は、ハードウェアを用いて実施できることも理解されたい。かかるハードウェアは、ビデオゲーム機内の集積回路またはチップ、あるいはコンピュータで用いられるグラフィックカードとすることができる。制御論理を、例えば、マイクロコードプログラミング命令の形式で用いて、かかるハードウェアを制御できる。ソフトウェアとハードウェアとを組み合わせて本発明を実施することもできる。ここでの説明に基づいて、当業者は、本発明を実現し、実施する他のやり方および／または方法を理解するであろう。
【００５８】
ここに説明した例と実施の形態とは、説明のためのものであり、これに照らし合わせた各種の変形や変更についても当業者に示唆し、また、この応用の精神と範囲と、添付の請求の範囲の範囲との中に包含されるものであることを理解されたい。ここに引用される全ての刊行物、特許、特許出願は、全て参照としてここに包含されている。
【図面の簡単な説明】
【００５９】
【図１】図１は、本発明の方法の一例による、サブディビジョンサーフェスを生成するステップを示すフロー図である。
【図２】図２は、本発明の方法の一例による、細分割される三角形を有するオリジナルの多角形の表面（またはサブディビジョンサーフェス）を示す図である。
【図３】図３は、本発明の方法の一例による、２つの面により稜線を用いることを示す図である。
【図４】図４は、本発明の方法の一例による、稜線の細分割を示す図である。
【図５】図５は、図３に示す２つの面の細分割の結果を示す図である。
【図６】図６は、図３に示す２つの面の細分割の結果と、細分割した面にさらに稜線を追加したことを示す図である。
【図７】図７は、内部頂点の構成を示す図である。
【図８】図８は、内部頂点の構成に用いられる混合重みを示す図である。
【図９】図９は、境界／折り目または外部頂点の構成を示す図である。
【図１０】図１０は、外部頂点の構成に用いられる混合重みを示す図である。
【図１１】図１１は、内部頂点のずれを示す図である。
【図１２】図１２は、外部頂点のずれを示す図である。
【図１３】図１３は、本発明による、２つのビットフラグを用いる混合重み付けインデックスを示す表である。
【図１】
2005521168.tif 000004
【図２】
2005521168.tif 000005
【図３】
2005521168.tif 000006
【図４】
2005521168.tif 000007
【図５】
2005521168.tif 000008
【図６】
2005521168.tif 000009
【図７】
2005521168.tif 000010
【図８】
2005521168.tif 000011
【図９】
2005521168.tif 000012
【図１０】
2005521168.tif 000013
【図１１】
2005521168.tif 000014
【図１２】
2005521168.tif 000015
【図１３】
2005521168.tif 000016
【国際調査報告】
2005521168.tif 000017