以下の詳細な説明において、本明細書の一部をなす添付の図面に対する参照がなされる。図面において、概して、同様の符号は、文脈がそうでないことを示さない限り、同様の構成要素を特定する。詳細な説明、図面、および請求項に記載の例示的な実施形態は、限定的であるように意図されていない。本明細書において提示される対象の精神または範囲を逸脱することなく、その他の実施形態が利用される場合があり、その他の変更がなされる場合がある。本明細書において全体的に説明され、図に図示される本開示の態様は、多種多様な異なる構成で配置され、置き換えられ、組み合わされ、分割され、設計されることが可能であり、それらの構成のすべては、本明細書において想定されている。
「一実施形態」、「実施形態」、「例示的な実施形態」などの本明細書における言及は、説明された実施形態が特定の特徴、構造、または特性を含む可能性があるが、あらゆる実施形態が特定の特徴、構造、または特性を含むとは限らない可能性があることを示す。その上、そのような語句は、必ずしも同じ実施形態への言及であるとは限らない。さらに、特定の特徴、構造、または特性が実施形態に関連して説明されるとき、そのような特徴、構造、または特性は、明示的に説明されているか否かにかかわらずその他の実施形態に関連して実現される場合がある。
本開示は、3Dアバターのための自動ケージ間フィッティング(cage-to-cage fitting)技術を説明する。本技術は、衣服のレイヤが衣服の下層のレイヤの上にフィッティングされることを可能にすることを含め、任意のボディのジオメトリが任意の衣服のジオメトリとフィッティングされることを可能にし、それによって、予め定義されたジオメトリによって課せられる制限、またはアバターの任意のボディ形状もしくはその他の衣服アイテムに衣服アイテムを適合させるための複雑な計算を必要とすることなく、カスタマイズを提供する。また、ケージ間フィッティングは、アバター作成者(アバターボディ作成者もしくはボディ作成者とも呼ばれる)または衣服アイテム作成者が複雑な計算を実行することを必要とすることなく、ゲームプラットフォームまたはゲームソフトウェア(または3D環境を提供するために動作するその他のプラットフォーム/ソフトウェア)によってアルゴリズム的に実行される。本明細書において使用される用語「衣服」または「1つの衣服」は、衣服およびアクセサリ、ならびにアバターケージの特定の部分に関連してアバター上に配置され得る任意のその他のアイテムのグラフィック表現を含むと理解される。
1つの衣服がアバターのボディパーツの上および/または別の衣服の上に重ねられるとき、隠面消去(HSR)のための技術が、本明細書において開示される。たとえば、計算性能および美的理由で、特定の衣服を被せられる/特定の衣服によって覆われる(下層の衣服およびボディパーツの)表面は、レンダリングされる(たとえば、可視にされる)べきでない。HSRは、どの表面(またはその一部)が特定の視角から見えないかを特定し、それから、そのような表面が隠される(またはそうでなければレンダリングされない)ようにレンダリングを実行するプロセスを含み、それによって、グラフィック(たとえば、重ねられた衣服をその上に配置されたアバター)の必然的に見ることができる部分が可視であることを可能にする。
純粋に例示および説明の目的で、様々な実施形態が、本明細書においては、ゲームプラットフォームによって提供される3Dゲームで使用される3Dアバターの文脈で説明される。そのようなゲーム環境が例であるに過ぎないことは理解される。本明細書において説明されるケージ同士を重ねる技術(cage-to-cage layering technique)のその他の実施形態は、仮想現実(VR)会議、3Dセッション(たとえば、3Dアバターを含むオンライン講義もしくはその他の種類のプレゼンテーション)、拡張現実(AR)セッションなどのその他の種類の3D環境に、または1つもしくは複数の3Dアバターによって3D環境内に表される1人もしくは複数のユーザを含む場合があるその他の種類の3D環境において適用されてよい。
ゲームまたはその他の3Dセッション中の実行時に、プレイヤー/ユーザは、ボディライブラリにアクセスして特定のアバターボディを選択し、衣服ライブラリにアクセスして、選択されたボディ上に配置する衣服を選択する。それから、アバターを提示する3D環境プラットフォームは、ケージ間フィッティング技術を実施して、ボディの形状に適合するように衣服を(自動的に決定された好適な変形によって)調整し、それによって、衣服をボディ(およびアバターによって着用されている場合は任意の中間レイヤ)に自動的にフィッティングする。1つの衣服がボディおよび/または下層の衣服にフィッティングされるとき、レンダリングされた結果において隠面が可視でないように、HSRが実行される場合がある。ユーザは、さらに、下層の衣服の上にフィッティングする追加の衣服を選択することができ、追加の衣服は、下層の衣服のジオメトリに一致するように変形される。
本明細書において説明される実施形態は、「ケージ」および「メッシュ」の概念に基づく。ボディ「メッシュ」(または「レンダメッシュ(render mesh)」)は、アバターの実際の可視のジオメトリである。ボディ「メッシュ」は、腕、脚、胴体、頭部などのボディパーツのグラフィック表現を含み、任意の形状、サイズ、および幾何学的トポロジーであることが可能である。同様に、衣服「メッシュ」(「レンダメッシュ」)は、シャツ、ズボン、帽子、靴などの衣服、またはその一部をグラフィカルに表すいかなる任意のメッシュであることも可能である。
比較すると、「ケージ」は、ボディのメッシュよりも単純で、ボディのメッシュの対応する頂点との弱い対応を有する、アバターボディの周りの特徴点のエンベロープ(envelope)を表す。下でさらに詳細に説明されるように、ケージは、アバターボディ上の1組の特徴点だけでなく、衣服上の1組の特徴点も表すために使用されてもよい。
図1は、一部の実装による例示的なボディケージ100を示す。図1の例のボディケージ100は、マネキンとして働く人型ボディ形状の外面/輪郭を包むか、またはそのような外面/輪郭の上に重ね合わされる外側ケージである。ボディケージ100によって包まれる下層の人型ボディ形状(マネキン、図示せず)は、複数のポリゴンおよびそれらの頂点を含むボディメッシュによって表されるかまたは構成されてよい。ボディメッシュのポリゴン(および衣服メッシュのポリゴン)は、三角形である場合があり、各三角形の表面エリアが、「面」または「メッシュ面(mesh face)」を提供する。
ボディケージ100は、マネキンの形状を定義するか、またはそうでなければ特定するか、またはマネキンの形状に対応する複数の特徴点102を含む。一部の実施形態において、特徴点102は、マネキン上の複数のポリゴン(またはその他の幾何学的形状)の線分/辺104の頂点によって形成される。様々な実施形態によれば(図1にはそのように描かれていないが)、ポリゴンは、三角形である場合があり、各三角形の表面エリアが、「面」または「ケージ面(cage face)」を提供する。一部の実施形態において、特徴点102は、必ずしもいずれかのポリゴンの頂点によって形成されず、離散点である場合がある。
図1のボディケージ100は、指を除いた人型のボディのジオメトリに関する642個の特徴点(または何らかのその他の数の特徴点)を持つ低解像度のボディケージの例を提供する。その他の例は、475個の特徴点を持つボディケージを使用する場合がある。たとえば、指を含む人型ジオメトリのボディケージは、1164個の特徴点(または何らかのその他の数の特徴点)を有する可能性がある。より高い解像度のボディケージは、2716個の特徴点(または何らかのその他の数の特徴点)を含む場合がある。特徴点のこれらの数(およびその範囲)は、単なるいくつかの例である--特徴点の数は、所望の解像度、3Dプラットフォームの処理能力、ユーザの好み、マネキンのサイズ/形状などの要因に依存して実装ごとに異なってよい。
ケージは、いかなる任意のアバターのボディ形状または衣服の形状にも提供される場合がある。たとえば、図2は、一部の実施形態による別の例示的なボディケージ200を示す。図2の例のボディケージ200は、汎用的なゲームアバターのボディ形状のボディメッシュの外面/輪郭を包むか、またはそのような外面/輪郭の上に重ね合わされる外側ケージである。図1のボディケージ100と比較して、図2のボディケージ200は、同じ数の特徴点を有していてよい。一部の実施形態において、ボディケージ200は、ゲームアバターの異なる(より単純またはより複雑な)幾何学的形状の結果として、および/またはその他の要因に基づいて、より少ないまたはより多い数の特徴点202など、ボディケージ100と比較して数が異なる多数の特徴点の数を有する場合がある。したがって、ボディケージごとの特徴点の数は、異なるボディ形状またはその他のボディのプロパティのために適宜選択されてよい。
一部の実施形態においては、帯域幅および性能/効率の目的でまたはその他の理由で、ケージの特徴点の数が、475個の特徴点(または何らかのその他の数の特徴点)など、上で与えられた数よりも少ない数に減らされる場合がある。さらに、一部の実施形態において、ボディケージ内の特徴点(頂点)は、それぞれがボディ形状の一部を表す複数のグループ(たとえば、15個のグループ)に配置される場合がある。図3は、一部の実施形態による、対応するボディパーツにグループ分けされるボディケージ300の部分の例を示す。
より詳細には、図3に示される15個のボディパーツは、(人型マネキンに関して)頭、胴体、股関節部(hip)、右足、左足、左下腿(lower leg)、右下腿、左上腿(upper leg)、右上腿、左手、右手、左前腕、右前腕、左上腕、および右上腕である。いずれのボディ形状のパーツの数も、示された15個のボディパーツよりも多いまたは少ない場合がある。たとえば、「片腕の」アバターキャラクタは、手、前腕、および上腕が省略されているため、(15個ではなく)12個のボディパーツを有する可能性がある。さらに、その他のボディ形状は、ボディのジオメトリ、所望の解像度、処理能力、アバターキャラクタの種類(たとえば、動物、エイリアン、モンスターなど)などの要因に応じて、より少ないまたはより多い数のボディパーツを含む場合がある。
図3の15個のグループ/パーツの各々は、アバターボディのそのパーツを定義する特徴点を含む。そして今度は、特徴点のそのようなグループが、対応する衣服にマッピングされ得る。たとえば、左/右の前腕、左/右の上腕、および胴体を定義するボディケージ300内の特徴点は、ジャケットのグラフィック表現が、アバターボディの左/右の腕および胴体に論理的におよび対応して合うジャケットの左/右の腕および胴体をレンダリングするグラフィカルなメッシュからなるという点で、ジャケットの内側ケージにマッピングされる外側ケージとして使用されてよい。
さらに、(図3に示されたような)複数のグループへのこの分割は、典型的でないボディ形状への衣服のカスタマイズされたフィッティングを可能にする。たとえば、3Dアバターは、左腕がない「片腕の」アバターキャラクタの形態であってよい。したがって、その3Dアバターのボディケージは、左手、左前腕、および左上腕に対応する特徴点のグループを欠いている。その後、ジャケットが3Dアバターの上にフィッティングするために選択されるとき、ジャケットの右前腕、右上腕、および胴体は、3Dアバター(ボディマネキン)の対応する右前腕、右上腕、および胴体に合うように変形されることが可能であり、ジャケットの左前腕および左上腕は、変形の対象となるべきボディマネキンの左腕のケージが存在しないので変形されない(たとえば、その親空間(parent space)からのその元の形態で固まったままである)。
図4は、一部の実施形態による、(図3に示されたボディケージ300などの)ボディケージの上で変形された衣服レイヤ400の例を示す。衣服レイヤ400は、頂点、辺、および(三角形の面またはその他のポリゴンの面である場合がある)面の集合によって構成されるポリゴンメッシュ402(たとえば、衣服メッシュ)を使用して生成/レンダリングされてよいパーツを有する(図4において灰色の色分けで示される)ジャケットのグラフィック表現である。
衣服レイヤ400は、ボディケージ300の特徴点に対応する特徴点を有する内側ケージ(図4に示さず)を含む。特に、衣服レイヤ400の内側ケージの特徴点は、左および右の前腕、左および右の上腕、ならびに胴体を構成するボディケージ300の特徴点にマッピングされる。一部の実施形態において、このマッピングは、衣服レイヤ400の内側ケージの特徴点を、ボディケージ300の腕および胴体の対応する特徴点の座標位置に直接マッピングすることを含む。そのようなマッピングは、両方のケージが同じ数の特徴点を有するときには1:1の対応を含む場合があり、マッピングは、n:1または1:n(nは1よりも大きい整数である)である場合があり、その場合は、一方のケージ内の複数の特徴点が、他方のケージの同じ特徴点にマッピングされる場合がある(または一部の特徴点がマッピングされない場合がある)。
衣服レイヤ400は、衣服レイヤ400のその内側ケージの対応する特徴点から離間され、それらの対応する特徴点にリンクされる特徴点を有する外側ケージをさらに含む。衣服レイヤ400の外側ケージの特徴点は、ジャケットのフード404、袖口406、ストレートカットの胴体408などの特徴を定義するように、ジャケットの外面の輪郭/ジオメトリを定義するか、またはそうでなければジャケットの外面の輪郭/ジオメトリに沿って位置する。
様々な実施形態によれば、空間的距離(たとえば、衣服レイヤ400の内側ケージの特徴点と衣服レイヤ400の外側ケージの対応する特徴点との間の空間的距離)は、既存のレイヤ(またはアバターボディ)の外側ケージへの衣服レイヤ400のフィッティング中、一定に保たれる。このようにして、衣服レイヤ400の内側ケージの特徴点が、アバターの胴体および腕にジャケットの内側を「フィッティングする」ように、ボディケージ300の特徴点にマッピングされてよい。そして、衣服レイヤ400の内側ケージの特徴点と衣服レイヤ400の外側ケージの対応する特徴点との間の距離が一定に保たれるようにして、ジャケットの外側の輪郭も、アバターボディの形状に一致するように変形され、それによって、図4に示されるように、アバターボディの形状に同時に一致しながら、ジャケットのフード、袖口、ストレートカットの胴体、およびその他の表面の特徴の視覚的外観(グラフィック表現)を少なくとも部分的に維持する結果をもたらすことができる。このようにして、衣服レイヤ400は、背が高い、背が低い、スリム、筋肉質、人型、動物、エイリアンなどの、アバターボディ(ボディケージ)のいかなる任意の形状/サイズにも合うように、任意の適切な方法で変形され得る。
一部の実施形態においては、その他の衣服レイヤの上の追加の衣服レイヤが、(たとえば、ユーザの選択に応答して)配置され得る。図5は、一部の実施形態による、図4の衣服レイヤおよびボディケージ300の一部が外側ケージ500を形成するために使用される例を示す。より詳細には、図4の衣服レイヤ400の外側ケージの特徴点が、ボディケージ300の露出した部分の特徴点およびジャケットの外面に沿った特徴点からなる複合外側ケージ500をもたらすように、今や、ボディケージ300の特徴点と組み合わされる。たとえば、(ジャケットの本体、フード、および袖によって形成される)ジャケットの露出した外面502が、1組の特徴点を提供し、ジャケットによって覆われていない露出した脚、手、頭、およびボディの胸の一部が、別の1組の特徴点を提供し、(組み合わされた)これら2組の特徴点が、外側ケージ500の特徴点を提供する。
ジャケットの外面/形状に対応し、ジャケットの外面/形状を定義する図5の外側ケージ500の特徴点は、図4の衣服レイヤ400の外側ケージの特徴点と同じであってよい。一部の実施形態においては、図4のジャケット(衣服レイヤ400)の外側ケージの特徴点と比較して、異なる、および/または追加の、および/またはより少ない特徴点が、図5の外側ケージ500のジャケットの領域のために使用される場合がある。たとえば、外側ケージ500の上の衣服の次のレイヤのためにより高い解像度またはより厳密なフィッティングが望まれる場合、(図4の衣服レイヤ400の外側ケージと比較して)ジャケットのエリアによって包含される外側ケージ500に関して、追加の特徴点が計算される場合がある。同様に、外側ケージ500の上の衣服の次のレイヤのためにより低い解像度もしくはより厳密でないフィッティングが望まれる場合、および/または可能な限り少ない特徴点を使用することによって提供される処理/帯域幅の効率の改善などのその他の考慮事項が原因で、(衣服レイヤ400の外側ケージと比較して)ジャケットのエリアに包含される外側ケージ500に関して、特徴点が計算される場合がある。
動作中、ユーザがジャケット(衣服レイヤ400)の上および/またはアバターボディのその他の部分の上に(オーバーコートまたはその他の衣服などの)追加の衣服レイヤをフィッティングするための入力を提供する場合、そのような追加の衣服レイヤの内側ケージの特徴点が、外側ケージ500の対応する特徴点にマッピングされる。したがって、変形が、図4に関連して説明された方法と同様の方法で実行され得る。
したがって、衣服を重ねることに関する図4および図5の例によれば、アバターボディの「外側ケージ」(ボディケージ300)の特徴点を、衣服の第1のレイヤの「内側ケージ」の特徴点とマッチングすることによって、衣服の第1のレイヤ(衣服レイヤ400)が、ボディに巻き付けられる。このマッチングは、内側ケージと外側ケージとの間で厳密に一致する特徴点の数に依存する必要がないように、ケージのUV空間(UVは座標系を指す)において行われてよい。たとえば、特徴点は、位置とテクスチャ空間座標との両方を持つ頂点であってよい。テクスチャ空間座標は、通常、U、V座標に関してそれぞれ[0,1]の範囲で表される。テクスチャ空間は、頂点に関する「ラップされていない(unwrapped)」正規化された座標空間と考えられてよい。UV空間において頂点の2つの組の対応を実行し、それらの頂点の位置を使用しないことによって、頂点間の対応が、正規化された空間において行われ、それによって、厳密な頂点間のインデックスのマッピングという難しい要件を取り除くことができる。
本明細書において説明される技術によれば、各アバターボディおよび衣服アイテムは、したがって、「内側ケージ」および「外側ケージ」に関連付けられる。アバターボディの場合、内側ケージは、デフォルトの「マネキン」を表し(異なるアバターのボディ形状のために異なるマネキンが提供されてよい)、アバターボディの「外側ケージ」は、アバターボディの形状の周りのエンベロープを表す。衣服アイテムに関して、「内側ケージ」は、衣服アイテムがどのように下層のボディを(または前の衣服レイヤがその上に既にフィッティングされているボディを)包むかを定義するために使用される内側のエンベロープを表し、「外側ケージ」は、アバターボディに着用されるときに、次の衣服レイヤがこの特定の衣服アイテムに巻き付けられる方法を表す。
上で既に説明されたように、メッシュは、アバターおよび/またはその衣服の実際の可視のジオメトリである。たとえば、ボディメッシュは、アバターのボディの腕、脚、胴体、頭部などのグラフィック表現を含み、衣服メッシュは、衣服のグラフィック表現を含む。比較すると、上で示され、説明されたケージは、下層のメッシュの対応する頂点とのいくらかの量の対応を有する場合がある、アバターのボディおよび/または衣服の周りの特徴点のエンベロープを表す。
図6は、一部の実施形態によるメッシュ602およびケージ604の例を示す図600である。より詳細には、図600は、メッシュ602の上に重なる/メッシュ602を包むケージ604の側面図を表す。
メッシュ602は、(たとえば、手、腕などのアバターのボディの一部をグラフィカルに描写する)ボディメッシュである場合があり、または(たとえば、袖、フードなどの1つの衣服の一部をグラフィカルに描写する)衣服メッシュである場合がある。メッシュ602は、ポリゴン(たとえば、三角形)の外向きの表面によって形成されたメッシュ面606を含んでよい。メッシュ602は、複数のポリゴンおよびそれらの対応するメッシュ面を含んでよく、ポリゴンは、それらの線分の辺および頂点において互いに接続されている。
同様に、ケージ604は、上で既に示され、説明されたような複数のポリゴン(たとえば、三角形)およびそれらの対応するケージ面を含んでよい。図6の図600は、ケージ604のそれぞれのポリゴンの外向きの表面によって形成された2つのケージ面608および610を示す。これらのポリゴンは、線分または頂点である場合がある612において互いにつなぎ合わされてよい。
メッシュまたはケージの面606、608、610および/もしくはその他の面またはそれらの一部は、さらなる衣服がメッシュ602およびケージ604の上に重ねられるとき、隠されるかまたは潜在的に隠される場合がある。下でさらに説明されるように、本明細書において開示されるHSR技術は、そのような面/表面またはそれらの一部が隠されるべきかどうかを判定し、それから、隠面がレンダリングされないように、隠面の消去を実行する。
図6の図600に示されたように、および上で既に説明されたように、ケージ604は、メッシュ602の上に重なる/メッシュ602を包む。様々な実施形態によれば、ケージ604が生成され、メッシュ602の上に配置されるとき、メッシュ602とケージ604との間に距離S(たとえば、メッシュ602の表面に対する法線/垂直方向の、ピクセルを単位とする距離)が存在してよい。
距離Sは、メッシュ602およびケージ604の異なる領域上で変化する場合がある。たとえば、距離Sは、ケージ604がメッシュ602に接する一部の領域においては実質的にゼロである場合があり、距離Sは、メッシュ602とケージ604との間に空間的な隔たりがあるその他の領域においてはゼロより大きい場合がある。
さらに、図600は、単一のメッシュ面606が2つのケージ面608および610によって包まれることを示す。これは、単なる例に過ぎない。一部の領域においてはメッシュ面へのケージ面の一対一の重なりがあり、一部の領域においてはメッシュ面へのケージ面の一対多の重なりがあり、一部の領域においてはメッシュ面へのケージ面の多対一の重なりがあるなどの場合がある。さらに、メッシュ面の端とケージ面の端とは、必ずしも互いに位置が揃っている必要はない。たとえば、図6の図600において、ケージ面608の左端は、メッシュ面606の左端と実質的に位置を揃えられている。比較すると、ケージ面610の右端は、メッシュ面606の右端を越えて延びるか、またはそれ以外の形でメッシュ面606の右端と位置を揃えられていない。
様々な実施形態によれば、図1~図5に関して上で示され、説明されたように、ケージは、ボディの上および/または衣服メッシュ(たとえば、1つの衣服もしくは衣服のレイヤ)の上で包まれ、したがって、そのようなケージは、下層の表面の形状および輪郭に適合する外側ケージになる。衣服の次のレイヤは、衣服のこの次のレイヤの変形が、衣服のこの次のレイヤの内側ケージの点を、下層のボディまたは衣服のレイヤの外側ケージの対応する点にマッピングするか、マッチングするか、またはその他の方法で関連付けることによって達成されるように、内側ケージおよび外側ケージを与えられてよい。一部の実施形態においては、下層のボディまたは衣服のレイヤの外側ケージ自体が、衣服の次のレイヤの内側ケージであるか、または衣服の次のレイヤの内側ケージになる。
特定の1つの衣服/衣服の特定のレイヤの内側ケージおよび外側ケージに関して、これらの内側ケージおよび外側ケージの点は、この特定のレイヤの内側ケージの点が下層の外側ケージの点に対して関連付けられる/位置決めされるとき、衣服の特定のレイヤの変形が、その外側ケージの点がその内側ケージの点の変位を追跡/追従するときに生じるように、互いにマッピングされてよい。
一部の実施形態によれば、下層のボディパーツまたは衣服レイヤに適合するための衣服レイヤの変形は、放射基底関数(RBF)技術の使用をともなう場合がある。変形するおよび順に重ねるために使用されてよいRBF技術のいくつかの例は、参照により本明細書に組み込まれる米国特許出願第17/375,066号に記載されている。
次に図7を参照すると、図700が、個々の衣服レイヤ702の表現を示す。レイヤ702は、一対のケージ(たとえば、外側ケージ704および内側ケージ706)によって画定されるか、そのような一対のケージを含むか、またはそのような一対のケージによって包まれる。レイヤ702は、塗りつぶされたドットとして示された特徴点(頂点)を有する外側ケージ704および塗りつぶされていないドットとして示された特徴点(頂点)を有する内側ケージ706と一緒に突出部708も含む。内側ケージ706内の特徴点と外側ケージ704内の特徴点との間に1対1の対応がない(たとえば、特徴点の一方が存在しないかまたは位置が合っていない)場合がある一部のレイヤのジオメトリにおいては、補間技術が、欠落した特徴点を定義する(たとえば、欠落した値を再構築するかまたは埋める)ために使用されてよい。
(突出部708の外の)対応するドットの間の距離D1は、外側ケージ704内の特徴点と内側ケージ706内の対応する特徴点との間の距離である。距離D1は、たとえば、0ピクセル以上の値を有することができる。距離D2は、突出部708に沿った外側ケージ704内の特徴点と内側ケージ706内の対応する特徴点との間の距離である。距離D2は、たとえば、距離D2が距離D1より大きくなるように、1ピクセル、2ピクセル、またはそれよりも多い数のピクセルの値を有することができる。
距離D1およびD2は、新しいレイヤが既存のレイヤの上にぴったりフィッティングされるときに維持され得る。このようにして、衣服のレイヤの表面の特徴の視覚的外観が、レイヤが変形されるときに少なくとも部分的に維持され得る。たとえば、アバターの上にフィッティングされた「だぶだぶ」のズボンは、たとえアバターボディまたは下層の衣服レイヤが(スリムであるか、またはそれ以外の形でだぶだぶでない)異なる形状/輪郭を有する場合があるとしても、依然として「だぶだぶ」に見える。別の例として、「スパイク付きジャケット」がアバターの上にフィッティングされることが可能であり、それから、スカーフが、各スパイクの山および谷に追従するのではなくジャケットの「スパイク」によって吊り下げられているスカーフの視覚的外観を提供するようにスパイク付きジャケットの上にぴったりフィッティングされることが可能である。
場合によっては、下層のレイヤの上に1つまたは複数の衣服を重ねることは、アバターが不自然または非現実的に見える膨らんだ(「ふっくらした」)外観を持つ結果となり得る。様々な実施形態によれば、ふくらみ(puffiness)抑制技術が、ふっくらした外観をなくすかまたはそうでなければ軽減するために使用される場合がある。
たとえば、距離D1および/またはD2の値は、レイヤ702全体を通じて一様にならないように、レイヤ702の特定の部分に沿って調整され得る。この調整は、たとえば、RBF関数に補間または変動(variance)値を加えるか、またはそうでなければRBF関数によって使用される値を操作/変更することによって実行される場合がある。
一部の実施形態においては、ふくらみに関する1つまたは複数の閾値が、与えられる場合がある。たとえば、既存のレイヤの上にレイヤ702を追加することがふくらみの閾値が超過されることを引き起こす場合、レイヤの距離D1および/またはD2は、結果として生じるふくらみの値が閾値未満になるように短くされ得る。最も下の表面(たとえば、ボディの表面)と最も上の表面(たとえば、衣服の最後のレイヤの外側表面)との間の最大の許容可能な距離、別のレイヤに対する1つのレイヤの厚さの割合(percentage thickness)、許容可能なレイヤの数、またはその他の方法、およびそれらの組合せなどの様々な技術が、ふくらみの閾値を設定または決定するために使用されてよい。
図8および図9は、一部の実施形態による、HSRが適用される前および後のアバターを示す。図8においては、いくつかの衣服(または髪などのその他のアセット)が、アバターの下層のボディ形状および/または衣服の下層のレイヤに適合するように変形され、それから、アバターの上にフィッティング/配置された(たとえば、レンダリングされた)。図8に示された複数の衣服は、ブーツ、スカート、セーター、およびジャケットを含む。
複数の衣服の重なりに関して、重なりは、アバターのボディを覆う下着、下着を覆うスカート、下着およびスカートの少なくとも一部を覆うセーター、セーターおよびスカートの少なくとも一部を覆うジャケットを含む場合がある。HSRが実行されずに、図8は、衣服の重なるレイヤによって覆われているために可視であることが期待されない下層の衣服の少なくともいくつかの部分/表面がレンダリングされており、したがって、実際には可視であることを示す。様々な衣服の透明度の設定も、これらの下層の表面の可視性の度合いに影響を与える場合がある。
非効率的なグラフィック処理(たとえば、可視であるべきでない様々な表面を不必要にレンダリングすること)に加えて、図8の例におけるHSRの欠如は、望ましくない外観も与える。たとえば、隠されることが期待されていた下層の複数の衣服の表面の裏抜け(bleed-through)(たとえば、可視性)が、不自然な外観をもたらす。
図8に描かれているものと比較して、図9は、本明細書で説明されるHSRが適用された後のアバターを示す。図9のアバターおよび衣服レイヤは、覆い隠される下層のボディパーツおよび衣服の表面がレンダリングされず、したがって可視でないようにレンダリングされた。次に説明されるのは、図9に描かれたような視覚的外観を実現するためにHSRを実行するための技術である。
図10は、一部の実施形態による、表面が潜在的に可視であるかどうかを判定するための例示的な技術を示す図1000である。より詳細には、ケージの1つまたは複数の面1002が、面の潜在的可視集合(PVS:potentially visible set)の一部を形成し、図10に描かれた技術は、ポリゴン1004~1010を有する衣服メッシュによって構成された衣服のレイヤ/1つの衣服によって覆われる場合に、ケージの面1002が可視であるかどうかを判定する。
様々な実施形態によれば、図10の衣服のレイヤ/1つの衣服は、その元の(変形前の)状態にあるのとは対照的に、上で既に説明されたような方法で、下層のレイヤの上に合うように既に変形されている。可視性の判定/計算が実行されているときに変形された状態であることによって、衣服の変形されたレイヤ/変形された1つの衣服が、下層のケージ面のポリゴンの配置および/または位置により密接に一致し、それによって、これらのケージ面の可視性の正確な評価を可能にする。
上で既に説明されたように、(面1002を含む複数の面を有する)ケージは、下層のボディメッシュおよび/または衣服メッシュを包み、したがって、下層のボディ/衣服メッシュの代理であると考えられ得る。図10の例示的な衣服メッシュ(衣服のレイヤ)のポリゴン1004~1010は、衣服のレイヤに開口部1012を画定するように配置され、形作られる。たとえば、開口部1012は、布地が存在しない衣服の端の隙間、布地の穴などである場合がある。開口部1012は、ゴーグルのレンズ、フェイスシールド、プラスチック/ガラス部分などの透明な要素である場合もある。
衣服メッシュのポリゴン1004~1010によって覆われる場合に面1002が可視であるかどうかを判定するために、複数の光線(ray)1014~1026が、面1002の点1028(または複数の点)から概ね円錐状の方向に投射される。点1028は、面1002上の複数の点のうちの1つであってよい。そのような点は、面1002上にランダムに置かれる場合があり、および/または予め定義された位置にある場合がある。
図8に示されたように、光線1020および1022は、ポリゴンに当たらず、開口部1012を貫通し、一方、その他の光線1014、1016、1018、1024、および1026は、衣服メッシュのポリゴン1004、1006、および1010のうちの1つまたは複数に当たる。様々な実施形態によれば、少なくとも1つの光線が衣服メッシュのポリゴン(面)に当たらない場合、面1002は、可視であるとみなされる。その他の実施形態においては、面を可視であるとみなすために、光線の最小の数(たとえば、1より大きい数)が使用される場合がある。
様々な実施形態によれば、上記の可視性の判定は、1つの点から光線を投射し、それから、別の点からの光線の投射などを順に繰り返すことによって実行される。特定の点からの光線が衣服メッシュを貫通しない場合、光線が、次の点から投射される。面1002は、特定の点からの1つまたは複数の光線が衣服メッシュに当たらないと判定された後、可視であると判定され、面1002上のその他の点からさらなる光線が投射される必要はない。
図11~図14は、上で既に説明されたメッシュおよびケージの配置、変形、および重ねの技術、可視性の判定の技術などに少なくとも部分的に基づいてよい、一部の実施形態によるHSRを実行するための方法を示す図である。まず図11を参照すると、1つの衣服(たとえば、太い実線で長袖シャツとして描かれた衣服メッシュ1100)が、アバターボディの胴体1102および各腕1104に合うように変形された。
図10の可視性の判定の技術を使用して、胴体1102および腕1104に対応し、衣服メッシュ1100の下にあるアバターボディのボディケージのケージ面は、可視でない(隠されている)と判定される。したがって、胴体1102および腕1104に対応するボディケージの一部分は、不可視として設定され(図11において破線によって描かれる)、一方、(衣服メッシュ1100の外に位置する)ボディケージの一部分は、可視として設定される。したがって、衣服メッシュ1100の面だけでなく、頭部1106、各脚1108、および各手1110に対応するボディケージの面も、可視として設定される(図11において実線で描かれる)。
次に、図12において、衣服メッシュ1100、ボディメッシュの可視の部分(たとえば、頭部1106、各脚1108、および各手1110)、ならびに/またはアバターボディのすべてのその他の可視の表面のために、(太い実線によって描かれる)外側ケージ1200が形成されるか、重ね合わされるか、またはそれ以外の方法で提供され、衣服メッシュ1100、ボディメッシュの可視の部分、および/またはアバターボディのすべてのその他の可視の表面のすべては、図12において太くない実線でまとめて描かれる。次に、(円1202に示される)袖および手の部分が、メッシュの面を上に重なるケージの対応する面にマッピングするためにHSRの一部として実行される動作に関連して、図13に関連する例として説明される。
特に、図13において、衣服メッシュ1100の袖は、腕1104のために提供される。図12において上で既に説明されたように、および図13にも示されるように、外側ケージ1200は、衣服メッシュ1100および手1110を包む。
衣服メッシュ1100は、袖の手元の末端の(太い実線で示される)特定の面1300を含む複数のメッシュ面を含む。同様に、外側ケージ1200は、やはり太い実線で示される面1302および1304を含む複数のケージ面を含む。面1302は、袖のところの面1300を包み、面1304は、袖のところの面1300の一部分と、さらに、手首付近の/手首のところの手1110の一部分とを包む。
衣服メッシュ1100の各面に関して、HSRの方法は、外側ケージ1200のどの面が衣服メッシュ1100のその面に関連している(またはそうでなければ関連付けられるもしくはマッピングされる)かを判定する。したがって、図13の例に関して、HSRの方法は、外側ケージ1200の面1302および1304が衣服メッシュ1100の面1300に関連していると判定する。
面の間の関係のこの判定は、外側ケージ1200の面1302および1304が衣服メッシュ1100の面1300に影響を与えるという判定に対応する。一部の実施形態によれば、関連する面1302および1304は、面1300の各頂点を特定し、それから、頂点に最も近い外側ケージ1200上の面を特定することによって特定されてよい。たとえば、面1302および面1304は、面1300の頂点1306に最も近い。衣服メッシュ1300の各面の頂点からの距離は、(図6に示されたような)距離Sに基づくことができ、および/または衣服メッシュ1300の面からの何らかのその他の非法線方向距離もしくは法線方向距離に基づくことができる。
図13において関連する面の判定を行うと、対応するデータが、衣服メッシュ1100に関する1つまたは複数のベクトル、構成データ、メタデータ、またはその他のデータ構造として保存されてよい。たとえば、ベクトルは、2つの値、すなわち、衣服メッシュ1100の特定の面1300の識別子と、面1300に関連付けられた外側ケージ1200の面1302および1304の識別子とを有する場合がある。また、(図11に破線で描かれたような)ボディケージの隠された部分、および/または衣服メッシュ1100によって隠されているすべてのその他の下層の表面に関するデータも、衣服メッシュ1100に関するベクトルまたはその他の種類のデータ構造として記憶されてよい。衣服メッシュ1100およびその他のメッシュ、ケージ、面などに関するこのデータのすべては、衣服メッシュ1100がロード/再ロードされるときにはいつも、可視性の判定、関連する表面の判定などの再計算(繰り返し)の回数を減らすように、将来の使用のためにサーバおよび/またはその他の場所に記憶されてよい。
図11~図13に関連して上で決定されたデータ(たとえば、可視性および関連する面)を用いて、HSRの方法は、それから、後続の衣服を重ねるときにこのデータを利用してよい。様々な実施形態によれば、衣服(またはアバターボディ)の下層の(内側)レイヤの上に衣服の外側レイヤを適用するとき、3つの構成要素、すなわち、内側レイヤのメッシュ、内側レイヤの外側ケージ、および外側レイヤの内側ケージが、HSRの方法によって考慮される。
たとえば、図14は、既に説明された衣服メッシュ1100と、衣服メッシュ1100の外側ケージ1200とを示す。衣服メッシュ1100は、(図14には示されておらず、図11には破線として示された)ボディケージの隠された部分の上に重なる可視の面1300を含む。外側ケージ1200は、関連する面1302および1304を含む。
そして、図14は、衣服の次の(外側)レイヤ(たとえば、次の衣服メッシュ、図示せず)の内側ケージ1400を描く。衣服のこの外側レイヤが衣服メッシュ1100の上に(たとえば、長袖シャツの上に)合うように変形されるとき、衣服の外側レイヤの内側ケージ1400の面1402および1404が、外側ケージ1200のそれぞれの面1302および1304にマッピングされる。一部の実施形態において、外側ケージ1200自体が、内側ケージ1400であるか、または内側ケージ1400になる。内側ケージ1400のケージ面1402および1404は、衣服の外側レイヤの1つまたは複数のメッシュ面またはメッシュ面の一部分に対応する場合がある。
そのとき、(図10に関連して上で説明されたような)可視性の判定が、面1302および1304が可視であるのか、または内側ケージ1400に対応する外側の衣服メッシュによって隠されているのかを判定するために実行され得る。図14の例においては、外側ケージ1200の面1302が、図14において破線によって表されるような内側ケージ面1402に対応する(外側の衣服メッシュの)1つまたは複数のメッシュ面によって隠されていると判定される。外側ケージ1200の(および内側ケージ面1404に対応する)面1304は、図14において実線によって表されるような外側の衣服メッシュを通して可視であると判定される。
面1302および1304が、衣服メッシュ1100の可視の面1300の関連する面であり、これらの関連する面のうちの少なくとも1つ(たとえば、面1304)が、(内側ケージ1400を有する)衣服の外側レイヤがフィッティングされるときに可視であると判定されるので、内側/下層の衣服メッシュの面1300全体は、可視であるとみなされ、衣服の外側レイヤがアバターボディにフィッティングされるときにレンダリングされる。外側ケージ1200の面1302と面1304との両方が衣服の外側レイヤのメッシュ面によって隠されていると判定される異なる状況においては、衣服メッシュ1100の面1300全体が、不可視/隠されているとして印を付けられ、衣服の外側レイヤがアバターボディにフィッティングされるときにレンダリングされない。
そして、HSRの方法に関して上で説明された動作が、さらなるメッシュ面に関して繰り返される/反復されることが可能であり、衣服のさらなるレイヤが、変形され、アバターボディおよび/またはその既存の衣服のレイヤの上にフィッティングされる。
図15は、一部の実施形態による、重ねられた衣服を持つ3Dアバターをサポートすることができる3D環境プラットフォームを含む例示的なシステムアーキテクチャ1500の図である。図15の例において、3D環境プラットフォームは、純粋に説明の目的でゲームプラットフォーム1502の文脈で説明され、様々なその他実施形態は、オンライン会議プラットフォーム、仮想現実(VR)もしくは拡張現実(AR)プラットフォーム、または3Dコンテンツを提供することができるその他の種類のプラットフォームなどのその他の種類の3D環境プラットフォームを提供し得る。システムアーキテクチャ1500のゲームプラットフォーム1502およびその他の要素に関して本明細書において提供される説明は、そのようなその他の種類の3D環境プラットフォームで使用可能であるように適合され得る。
オンラインゲームプラットフォーム(「ユーザ生成コンテンツプラットフォーム」または「ユーザ生成コンテンツシステム」とも呼ばれる)は、ユーザが電子ゲームをプレイしている間などにユーザが互いにインタラクションするための様々な方法を提供する。たとえば、オンラインゲームプラットフォームのユーザは、共通の目標に向かって一緒に働く、様々な仮想的なゲームアイテムを共有する、互いに電子メッセージを送信するなどする場合がある。オンラインゲームプラットフォームのユーザは、ユーザが電子ゲームのレンダリングされた3D世界の中をナビゲートすることができる上述のHSR特徴を用いて重ねられた衣服を有する3Dアバターのようなキャラクタを使用してゲームをプレイする場合がある。
また、オンラインゲームプラットフォームは、プラットフォームのユーザがアバターを作成し、アニメーションさせることを可能にし、ユーザが3D世界に配置するためのその他のグラフィックオブジェクトを作成することを可能にする場合がある。たとえば、オンラインゲームプラットフォームのユーザは、アバターを作成し、設計し、カスタマイズすることと、様々な衣服を作成し、設計し、アバターにフィッティングすることとを可能にされる場合がある。
図15において、例示的なシステムアーキテクチャ1500(本明細書においては「システム」とも呼ばれる)は、オンラインゲームプラットフォーム1502、第1のクライアントデバイス1510A、および少なくとも1つの第2のクライアントデバイスX 1510X(本明細書においては概して「クライアントデバイス1510」と呼ばれる)を含む。オンラインゲームプラットフォーム1502は、とりわけ、ゲームエンジン1504および1つまたは複数の電子ゲーム1506を含み得る。システムアーキテクチャ1500は、1つの可能な実施形態の説明のために提供される。その他の実施形態において、システムアーキテクチャ1500は、図15に示されたのと同じまたは異なる方法で構成された同じ、より少ない、より多い、または異なる要素を含んでよい。
オンラインゲームプラットフォーム1502とクライアントデバイス1510との間、および/またはシステムアーキテクチャ1500のその他の要素の間の通信のために、通信ネットワーク1522が使用されてよい。ネットワーク1522は、パブリックネットワーク(たとえば、インターネット)、プライベートネットワーク(たとえば、ローカルエリアネットワーク(LAN)もしくは広域ネットワーク(WAN))、有線ネットワーク(たとえば、イーサネットネットワーク)、ワイヤレスネットワーク(たとえば、802.11ネットワーク、Wi-Fiネットワーク、もしくはワイヤレスLAN(WLAN))、セルラネットワーク(たとえば、ロングタームエボリューション(LTE)ネットワーク)、ルータ、ハブ、スイッチ、サーバコンピュータ、またはこれらの組合せを含んでよい。
クライアントデバイス1510Aは、ゲームアプリケーション1512および1つまたは複数のユーザインターフェース1514(たとえば、オーディオ/ビデオ入力/出力デバイス)を含み得る。同様に、クライアントデバイスX 1510Xは、ゲームアプリケーション1520およびユーザインターフェース1518(たとえば、オーディオ/ビデオ入力/出力デバイス)を含み得る。オーディオ/ビデオ入力/出力デバイスは、マイクロフォン、スピーカ、ヘッドフォン、ディスプレイデバイス、カメラなどのうちの1つまたは複数を含み得る。
システムアーキテクチャ1500は、1つまたは複数のストレージデバイス1524をさらに含んでよい。ストレージデバイス1524は、たとえば、オンラインゲームプラットフォーム1502内にあるか、または(図15に示されるように)ネットワーク1522を介してオンラインゲームプラットフォーム1502に通信可能なように結合されたストレージデバイスであってよい。ストレージデバイス1524は、たとえば、ゲームエンジン04またはゲームアプリケーション1512/1520によってゲーム1506内でレンダリングされるグラフィックオブジェクトと、(ケージを生成するためおよび上述のような変形のために使用可能な特徴点の座標情報、サイズ寸法などの)グラフィックオブジェクトの構成/プロパティ情報とを記憶してよい。一部の実施形態において、ストレージデバイス1524は、衣服メッシュおよびボディメッシュ、ならびに衣服ケージおよびボディケージについて、可視または不可視である表面、互いに関連している面などを特定するベクトルまたはその他のデータ構造などのHSR関連情報をさらに記憶してよい。
一部の実施形態において、ストレージデバイス1524は、ゲーム1506内でレンダリングされるグラフィックオブジェクトを提供する1つまたは複数の別個のコンテンツ配信ネットワークの一部であることが可能である。たとえば、アバター作成者は、第1のストレージデバイスにおいてアクセス可能なライブラリにアバターのテンプレートを公開することができ、衣服作成者は、(アバター作成者とは別に独立して)第2のストレージデバイスにおいてアクセス可能なライブラリに衣服のテンプレートを公開することができる。そして、ゲームアプリケーション1512は、ゲームをプレイしている最中に提示するために実行時に計算/コンパイル/変形するために、第1の/第2のストレージデバイスに記憶されたグラフィックオブジェクト(アバターおよび衣服アイテム)をプルしてよい(またはゲームアプリケーション1512にプッシュさせてよい)。
一部の実施形態において、ストレージデバイス1524は、非一時的コンピュータ可読メモリ(たとえば、ランダムアクセスメモリ)、キャッシュ、ドライブ(たとえば、ハードドライブ)、フラッシュドライブ、データベースシステム、またはデータおよびその他の内容を記憶することができる別の種類の構成要素もしくはデバイスであってよい。また、ストレージデバイス1524は、複数のコンピューティングデバイス(たとえば、複数のサーバコンピュータ)に広がる場合もある複数のストレージ構成要素(たとえば、複数のドライブまたは複数のデータベース)を含んでよい。
一部の実施形態において、オンラインゲームプラットフォーム1502は、1つまたは複数のコンピューティングデバイスを有するサーバ(たとえば、クラウドコンピューティングシステム、ラックマウントサーバ、サーバコンピュータ、物理サーバのクラスタなど)を含み得る。一部の実施形態において、サーバは、オンラインゲームプラットフォーム1502に含まれるか、独立したシステムであるか、または別のシステムもしくはプラットフォームの一部であってよい。
一部の実施形態において、オンラインゲームプラットフォーム1502は、オンラインゲームプラットフォーム1502上で動作を実行し、ユーザにオンラインゲームプラットフォーム1502へのアクセスを提供するために使用されてよい(ラックマウントサーバ、ルータコンピュータ、サーバコンピュータ、パーソナルコンピュータ、メインフレームコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、デスクトップコンピュータなどの)1つまたは複数のコンピューティングデバイス、データストア(たとえば、ハードディスク、メモリ、データベース)、ネットワーク、ソフトウェア構成要素、および/またはハードウェア構成要素を含んでよい。また、オンラインゲームプラットフォーム1502は、ユーザにオンラインゲームプラットフォーム1502によって提供されるコンテンツへのアクセスを提供するために使用されてよいウェブサイト(たとえば、ウェブページ)またはアプリケーションバックエンドソフトウェアを含んでよい。たとえば、ユーザは、クライアントデバイス1510上のゲームアプリケーション1512を使用してオンラインゲームプラットフォーム1502にアクセスしてよい。
一部の実施形態において、オンラインゲームプラットフォーム1502は、ユーザ間のつながりを提供するある種のソーシャルネットワーク、またはユーザ(たとえば、エンドユーザもしくはコンシューマ)がオンラインゲームプラットフォーム1502上でその他のユーザとコミュニケーションすることを可能にするある種のユーザ生成コンテンツシステムであってよく、コミュニケーションは、音声チャット(たとえば、同期および/もしくは非同期音声コミュニケーション)、ビデオチャット(たとえば、同期および/もしくは非同期ビデオコミュニケーション)、またはテキストチャット(たとえば、同期および/もしくは非同期のテキストに基づくコミュニケーション)を含んでよい。本開示の一部の実施形態において、「ユーザ」は、1人の個人として表される場合がある。しかし、この開示のその他の実施形態は、「ユーザ」(たとえば、作成ユーザ)が1組のユーザによって制御されるエンティティ(entity)または自動化されたソースであることを包含する。たとえば、ユーザ生成コンテンツシステム内のコミュニティまたはグループとして連合した1組の個人ユーザが、「ユーザ」とみなされる場合がある。
一部の実施形態において、オンラインゲームプラットフォーム1502は、仮想ゲームプラットフォームである場合がある。たとえば、ゲームプラットフォームは、ネットワーク1522を介してクライアントデバイス1510を使用してゲームにアクセスするかまたはゲームとインタラクションしてよいユーザのコミュニティにシングルプレイヤーゲームまたはマルチプレイヤーゲームを提供する場合がある。一部の実施形態において、ゲーム(本明細書においては「ビデオゲーム」、「オンラインゲーム」、または「仮想ゲーム」とも呼ばれる)は、たとえば、2次元(2D)ゲーム、3次元(3D)ゲーム(たとえば、3Dのユーザによって生成されたゲーム)、仮想現実(VR)ゲーム、または拡張現実(AR)ゲームであってよい。一部の実施形態において、ユーザは、その他のユーザとともにゲームプレイに参加する場合がある。一部の実施形態において、ゲームは、ゲームのその他のユーザと一緒にリアルタイムでプレイされる場合がある。
一部の実施形態において、ゲームプレイは、ゲーム(たとえば、ゲーム1506)内のクライアントデバイス(たとえば、クライアントデバイス1510)を使用する1人もしくは複数のプレイヤーのインタラクション、またはクライアントデバイス1510のディスプレイもしくはその他のユーザインターフェース(たとえば、ユーザインターフェース1514/1518)上のインタラクションの提示を指す場合がある。
一部の実施形態において、ゲーム1506は、エンティティにゲームコンテンツ(たとえば、デジタルメディアアイテム)を提示するように構成されたソフトウェア、ファームウェア、またはハードウェアを使用して実行またはロードされることが可能である電子ファイルを含み得る。一部の実施形態においては、ゲームアプリケーション1512が、ゲームエンジン1504に関連して実行される場合があり、ゲーム1506が、ゲームエンジン1504に関連してレンダリングされる場合がある。一部の実施形態において、ゲーム1506は、共通の1組の規則または共通の目標を有する場合があり、ゲーム1506の環境は、共通の1組の規則または共通の目標を共有する。一部の実施形態において、異なるゲームは、互いに異なる規則または目標を有する場合がある。
一部の実施形態において、ゲームは、(本明細書においては「ゲーム環境」または「仮想環境」とも呼ばれる)1つまたは複数の環境を有する場合があり、複数の環境が、リンクされる場合がある。環境の例は、3D環境である可能性がある。ゲーム1506の1つまたは複数の環境は、本明細書においては集合的に「世界」または「ゲーム世界」または「仮想世界」または「ユニバース」と呼ばれる場合がある。たとえば、ユーザは、別のユーザによって作成された別の仮想環境にリンクされる仮想環境を構築してよい。(本明細書において説明されるように隠面が消去されるような重ねられた衣服を有する3Dアバターなどの)仮想ゲームのキャラクタは、隣接する仮想環境に入るために仮想的な境界を越える場合がある。
3D環境または3D世界は、ゲームコンテンツを表す幾何学データの3次元表現を提供する(または少なくとも、幾何学データの3D表現が使用されるか否かにかかわらず3Dコンテンツに見えるようにゲームコンテンツを提示する)グラフィックスを使用することが留意されてよい。2D環境または2D世界は、ゲームコンテンツを表す幾何学データの2次元表現を提供するグラフィックスを使用する。
一部の実施形態において、オンラインゲームプラットフォーム1502は、1つまたは複数のゲーム1506をホストすることができ、クライアントデバイス1510のゲームアプリケーション1512を使用してユーザがゲーム1506とインタラクションすることを可能にし得る。オンラインゲームプラットフォーム1502のユーザは、ゲーム1506をプレイするか、ゲーム1506を作成するか、ゲーム1506とインタラクションするか、もしくはゲーム1506を構築する、その他のユーザとコミュニケーションする、および/またはゲーム1506のオブジェクト(たとえば、本明細書においては「アイテム」もしくは「ゲームオブジェクト」もしくは「仮想ゲームアイテム」もしくは「グラフィックオブジェクト」とも呼ばれる)を作成し、構築する場合がある。たとえば、ユーザ生成仮想アイテムを生成する際、ユーザは、とりわけ、キャラクタ、キャラクタのためのアニメーション、キャラクタのための装飾(たとえば、衣服、スキン、アクセサリなど)、インタラクティブゲームのための1つもしくは複数の仮想環境を作成するか、またはゲーム1506内で使用される構造物を構築する場合がある。一部の実施形態において、ユーザは、プラットフォーム内通貨(たとえば、仮想的な通貨)などのゲームの仮想ゲームオブジェクトを買うか、売るか、またはオンラインゲームプラットフォーム1502のその他のユーザと取引する場合がある。
一部の実施形態において、オンラインゲームプラットフォーム1502は、ゲームアプリケーション(たとえば、ゲームアプリケーションは1512)にゲームコンテンツを送信してよい。一部の実施形態において、ゲームコンテンツ(本明細書においては「コンテンツ」とも呼ばれる)は、オンラインゲームプラットフォーム1502またはゲームアプリケーションに関連する任意のデータまたはソフトウェア命令(たとえば、ゲームオブジェクト、ゲーム、ユーザ情報、ビデオ、画像、コマンド、メディアアイテムなど)を指す場合がある。一部の実施形態において、ゲームオブジェクト(たとえば、本明細書においては「アイテム」または「オブジェクト」または「仮想ゲームアイテム」とも呼ばれる)は、オンラインゲームプラットフォーム1502のゲーム1506またはクライアントデバイス1510のゲームアプリケーション1512もしくは1520において使用されるか、作成されるか、共有されるか、またはそうでなければ示されるオブジェクトを指す場合がある。たとえば、ゲームオブジェクトは、パーツ、モデル、キャラクタまたは(顔、腕、唇などのような)その構成要素、ツール、武器、衣類、建物、乗り物、通貨、植物相、動物相、上述のものの構成要素(たとえば、建物の窓)などを含んでよい。
ゲーム1506をホストするオンラインゲームプラットフォーム1502は、説明を目的として与えられることが留意されてよい。一部の実施形態において、オンラインゲームプラットフォーム1502は、1人のユーザから1人または複数のその他のユーザへのコミュニケーションメッセージを含み得る1つまたは複数のメディアアイテムをホストする場合がある。メディアアイテムは、デジタルビデオ、デジタルムービー、デジタル写真、デジタル音楽、オーディオコンテンツ、メロディー、ウェブサイトコンテンツ、ソーシャルメディアの最新記事、電子ブック、電子雑誌、デジタル新聞、デジタルオーディオブック、電子ジャーナル、ウェブブログ、リアルシンプルシンジケーション(RSS: real simple syndication)フィード、電子漫画、ソフトウェアアプリケーションなどを含み得るがこれらに限定されない。一部の実施形態において、メディアアイテムは、エンティティにデジタルメディアアイテムを提示するように構成されたソフトウェア、ファームウェア、またはハードウェアを使用して実行またはロードされることが可能である電子ファイルであってよい。
一部の実施形態において、ゲーム1506は、特定のユーザまたはユーザの特定のグループに関連付けられる場合があり(たとえば、非公開のゲーム)、またはオンラインゲームプラットフォーム1502のユーザに広く利用され得るようにされる場合がある(たとえば、公開されたゲーム)。オンラインゲームプラットフォーム1502が1つまたは複数のゲーム1506を特定のユーザまたはユーザのグループに関連付ける一部の実施形態において、オンラインゲームプラットフォーム1502は、ユーザアカウント情報(たとえば、ユーザ名およびパスワードなどのユーザアカウント識別子)を使用して特定のユーザをゲーム1506に関連付ける場合がある。
一部の実施形態において、オンラインゲームプラットフォーム1502またはクライアントデバイス1510は、ゲームエンジン1504またはゲームアプリケーション1512/1520を含んでよい。一部の実施形態において、ゲームエンジン1504は、ゲーム1506の開発または実行のために使用されてよい。たとえば、ゲームエンジン1504は、特徴の中でもとりわけ、2D、3D、VR、もしくはARグラフィックスのためのレンダリングエンジン(「レンダラ」)、物理エンジン、衝突検出エンジン(および衝突応答(collision response))、サウンドエンジン、スクリプティング機能、アニメーションエンジン、人工知能エンジン、ネットワーキング機能、ストリーミング機能、メモリ管理機能、スレッディング機能、シーングラフ機能、または映画製作技術(cinematics)のためのビデオサポートを含んでよい。ゲームエンジン1504の構成要素は、アバターを選択するコマンド、アバターをカスタマイズするコマンド、衣服アイテムを選択するコマンド、衣服アイテムをアバター上のレイヤとして変形するコマンド、HSRを実行するコマンド、および本明細書において説明される様々なその他の動作を含む、ゲームを計算し、レンダリングするのに役立つコマンド(たとえば、レンダリングコマンド、衝突コマンド、アニメーションコマンド、物理コマンドなど)を生成する場合がある。一部の実施形態において、クライアントデバイス1510のゲームアプリケーション1512/1520は、実行時に隠面が消去されるようにして重ねられた衣服を変形およびレンダリングすることに関連する本明細書において説明される動作を実行するために、独立して、オンラインゲームプラットフォーム1502のゲームエンジン1504と協力して、またはそれら両方の組合せで働く場合がある。
一部の実施形態においては、オンラインゲームプラットフォーム1502とクライアントデバイス1510との両方が、ゲームエンジンまたはゲームアプリケーション(それぞれ1504、1512、1520)を実行する。ゲームエンジン1504を使用するオンラインゲームプラットフォーム1502は、一部のもしくはすべてのゲームエンジンの機能を実行する(たとえば、上述の衣服レイヤの変形および隠面の消去を含め、物理コマンド、アニメーションコマンド、レンダリングコマンドなどを生成する)か、または一部のもしくはすべてのゲームエンジンの機能をクライアントデバイス1510のゲームアプリケーション1512にオフロードする場合がある。一部の実施形態において、各ゲーム1506は、オンラインゲームプラットフォーム1502において実行されるゲームエンジンの機能とクライアントデバイス1510において実行されるゲームエンジンの機能との間の異なる比率を有してよい。
たとえば、オンラインゲームプラットフォーム1502のゲームエンジン1504が、少なくとも2つのゲームオブジェクトの間の衝突が存在する場合に物理コマンドを生成するために使用される場合がある一方、さらなるゲームエンジンの機能(たとえば、隠面が消去されるようにして重ねられた衣服を変形し、表示することを含む、レンダリングコマンドの生成)は、クライアントデバイス1510にオフロードされる場合がある。一部の実施形態において、オンラインゲームプラットフォーム1502において実行されるゲームエンジンの機能とクライアントデバイス1510において実行されるゲームエンジンの機能との比率は、ゲームプレイの条件に基づいて(たとえば、動的に)変更されてよい。たとえば、特定のゲーム1506のゲームプレイに参加するユーザの数が閾値の数を超える場合、オンラインゲームプラットフォーム1502は、クライアントデバイス1510によって前に実行された1つまたは複数のゲームエンジンの機能を実行する場合がある。
たとえば、ユーザは、クライアントデバイス1510上でゲーム1506をプレイしている可能性があり、オンラインゲームプラットフォーム1502に制御命令(たとえば、右、左、上、下、ユーザ選択、またはキャラクタ位置および速度情報など)を送信する可能性がある。クライアントデバイス1510から制御命令を受信した後、オンラインゲームプラットフォーム1502は、制御命令に基づいてクライアントデバイス1510にゲームプレイ命令(たとえば、グループゲームプレイに参加するキャラクタの位置および速度情報、またはレンダリングコマンド、衝突コマンドなどのコマンド)を送信してよい。たとえば、オンラインゲームプラットフォーム1502は、クライアントデバイス1510のためのゲームプレイ命令を生成するために制御命令に関して(たとえば、ゲームエンジン1504を使用して)1つまたは複数の論理的な動作を実行してよい。その他の場合、オンラインゲームプラットフォーム1502は、1つのクライアントデバイス1510からゲーム1506に参加するその他のクライアントデバイスに制御命令のうちの1つまたは複数を渡してよい。クライアントデバイス1510は、ゲームプレイ命令を使用し、上述のHSRを用いて重ねられた衣服を持つアバターを含め、クライアントデバイス1510のディスプレイ上に提示するためにゲームプレイをレンダリングしてよい。
一部の実施形態において、制御命令は、ユーザのキャラクタのゲーム内アクションを示す命令を指す場合がある。たとえば、制御命令は、右、左、上、下、ユーザ選択、ジャイロスコープの位置および向きデータ、力センサデータなどの、ゲーム内アクションを制御するためのユーザ入力を含んでよい。制御命令は、キャラクタ位置および速度情報を含んでよい。一部の実施形態において、制御命令は、オンラインゲームプラットフォーム1502に直接送信される。その他の実施形態において、制御命令は、クライアントデバイス1510から別のクライアントデバイスに送信される場合があり、別のクライアントデバイスが、ローカルのゲームエンジンアプリケーション1520を使用してゲームプレイ命令を生成する。制御命令は、オーディオデバイス(たとえば、スピーカ、ヘッドフォンなど)で別のユーザからの音声コミュニケーションメッセージまたはその他の音、たとえば、本明細書において説明されるようにオーディオ空間化(audio spatialization)技術を使用して生成された音声コミュニケーションまたはその他の音を再生するための命令を含んでよい。
一部の実施形態において、ゲームプレイ命令は、クライアントデバイス1510がマルチプレイヤーゲームなどのゲームのゲームプレイをレンダリングすることを可能にする命令を指す場合がある。ゲームプレイ命令は、ユーザ入力(たとえば、制御命令)、キャラクタ位置および速度情報、またはコマンド(たとえば、物理コマンド、アニメーションコマンド、レンダリングコマンド、衝突コマンドなど)のうちの1つまたは複数を含んでよい。
一部の実施形態において、クライアントデバイス1510は、パーソナルコンピュータ(PC)、モバイルデバイス(たとえば、ラップトップ、モバイル電話、スマートフォン、タブレットコンピュータ、またはネットブックコンピュータ)、ネットワークに接続されたテレビ、ゲームコンソールなどのコンピューティングデバイスをそれぞれ含んでよい。一部の実施形態において、クライアントデバイス1510は、「ユーザデバイス」とも呼ばれる場合がある。一部の実施形態において、1つまたは複数のクライアントデバイス1510は、いつでもオンラインゲームプラットフォーム1502に接続する可能性がある。クライアントデバイス1510の数は、限定ではなく例示として与えられることが留意されてよい。一部の実施形態においては、任意の数のクライアントデバイス1510が使用される場合がある。
一部の実施形態において、各クライアントデバイス1510は、ゲームアプリケーション1512または1520のインスタンスをそれぞれ含んでよい。1つの実施形態において、ゲームアプリケーション1512または1520は、オンラインゲームプラットフォーム1502によってホストされる仮想ゲームの仮想的なキャラクタを制御するか、またはゲーム1506、画像、ビデオアイテム、ウェブページ、ドキュメントなどのコンテンツを見るもしくはアップロードするなど、ユーザがオンラインゲームプラットフォーム1502を使用し、オンラインゲームプラットフォーム1502とインタラクションすることを可能にしてよい。一例において、ゲームアプリケーションは、ウェブサーバによって提供されるコンテンツ(たとえば、仮想環境内の仮想的なキャラクタなど)にアクセスするか、そのようなコンテンツを取り出すか、提示するか、またはナビゲートすることができるウェブアプリケーション(たとえば、ウェブブラウザと連携して動作するアプリケーション)であってよい。別の例において、ゲームアプリケーションは、クライアントデバイス1510のローカルにインストールされ、実行され、ユーザがオンラインゲームプラットフォーム1502とインタラクションすることを可能にするネイティブアプリケーション(たとえば、モバイルアプリケーション、アプリ、またはゲームプログラム)であってよい。ゲームアプリケーションは、ユーザに対してコンテンツ(たとえば、ウェブページ、メディアビュワー)をレンダリングするか、表示するか、または提示する場合がある。実施形態において、ゲームアプリケーションは、ウェブページに埋め込まれる埋め込みメディアプレイヤー(たとえば、Flash(登録商標)プレイヤー)も含む場合がある。
本開示の態様によれば、ゲームアプリケーション1512/1520は、ユーザがコンテンツを構築し、作成し、編集し、オンラインゲームプラットフォーム1502にアップロードし、オンラインゲームプラットフォーム1502とインタラクションする(たとえば、オンラインゲームプラットフォーム1502によってホストされるゲーム1506をプレイする)ためのオンラインゲームプラットフォームアプリケーションであってよい。したがって、ゲームアプリケーション1512/1520は、オンラインゲームプラットフォーム1502によってクライアントデバイス1510に提供されてよい。別の例において、ゲームアプリケーションは、サーバからダウンロードされるアプリケーションである場合がある。
一部の実施形態において、ユーザは、ゲームアプリケーションを介してオンラインゲームプラットフォーム1502にログインする場合がある。ユーザは、ユーザアカウント情報(たとえば、ユーザ名およびパスワード)を提供することによってユーザアカウントにアクセスする場合があり、ユーザアカウントは、オンラインゲームプラットフォーム1502の1つまたは複数のゲーム1506に参加するために利用可能な1つまたは複数のキャラクタに関連付けられる。
概して、オンラインゲームプラットフォーム1502によって実行されるものとして1つの実施形態において説明される機能は、その他の実施形態において、適宜、クライアントデバイス1510またはサーバによって実行されることも可能である。加えて、特定の構成要素に帰せられる機能が、一緒に動作する異なるまたは複数の構成要素によって実行されることが可能である。また、オンラインゲームプラットフォーム1502は、適切なアプリケーションプログラミングインターフェース(API)を通じてその他のシステムまたはデバイスに提供されるサービスとしてアクセスされることが可能であり、したがって、ウェブサイトにおける使用に限定されない。
図16は、一部の実施形態による、3Dアバター上の、HSRを用いて重ねられた衣服を提供するためのコンピュータによって実装される方法1600を示す流れ図である。簡単にするために、方法1600の様々な動作は、クライアントデバイス1510のゲームアプリケーション1512が動作を実行する文脈で説明される。しかし、図15に関連して上で既に説明されたように、動作の一部は、代替的または追加的に、ゲームプラットフォーム1502においてゲームエンジン1504によってすべてまたは一部が実行されてよい。例示的な方法1600は、ブロック1602から1612などの1つまたは複数のブロックによって示される1つまたは複数の動作を含む可能性がある。本明細書において説明される方法1616および/または任意のその他のプロセスの様々なブロックは、実施形態に基づいて、より少ないブロックに組み合わされる、追加のブロックに分割される、さらなるブロックによって補足される、および/または削除される場合がある。
図16の方法1600は、図1~図15、および他の図に示された要素に関連して本明細書において説明され得る。一実施形態において、方法1600の動作は、パイプライン化された逐次的な方法で実行されてよい。その他の実施形態において、一部の動作は、順不同、並列などで実行される場合がある。
ブロック1602(「3Dアバターのボディケージのボディの特徴点を特定する」)において、ユーザは、ゲームアプリケーション1512を起動し、アバターボディのライブラリにアクセスして、(オンラインゲームまたは仮想体験などの)3D環境内で使用するアバターを選択した。選択されたアバターは、一般的な形状/サイズを持つ汎用的なテンプレートである場合があり、またはスキンを設定した特定の種類(人型、エイリアン、動物など)のより詳細なアバターのテンプレートである場合がある。ライブラリから選択されたアバターは、その上に構成されたボディケージ(たとえば、図1~図3参照)を既に有している場合があり、および/またはゲームアプリケーション1512が、実行時にボディケージの少なくとも一部を生成する場合がある。ゲームアプリケーションは、アバターの形状を定義するボディケージの特徴点を特定する。ブロック1602は、後にブロック1604が続く場合がある。
ブロック1604(「第1の衣服の内側ケージの内側特徴点をボディケージのボディの特徴点にマッピングする」)において、ユーザは、衣服アイテムのライブラリにアクセスし、第1の衣服を選択した。ブロック1602におけるアバターボディと同様に、ライブラリの第1の衣服は、その上に構成されたケージを有する場合があり、および/またはゲームアプリケーション1512が、実行時にケージの少なくとも一部を生成する場合がある。第1の衣服のそのようなケージは、内側ケージおよび外側ケージ(たとえば、図7参照)を含む。ブロック1604において、ゲームアプリケーション1512は、アバターボディに適合するように第1の衣服を変形する(たとえば、第1の衣服のメッシュを変形する)ように、RBF技術を利用して第1の衣服の内側ケージの内側特徴点をボディケージのボディの特徴点にマッピングしてよい。ブロック1604は、後にブロック1606が続く場合がある。
ブロック1606(「第1のHSRを実行する:可視性および関連する面を判定する」)においては、反復的なHSR関連動作の第1のセットが、実行されてよい。たとえば、図10の可視性の技術を使用して、HSRの方法は、(ボディメッシュの面に対応するか、またはそうでなければボディメッシュの面の代理として働く)ボディケージの面が第1の衣服のメッシュの1つまたは複数の面によって隠されるかどうかを判定してよい。この判定は、ボディケージの各面に関して繰り返し実行され(またはボディケージの様々な面に関して並行して実行され)、ボディケージの面が、ポリゴンの頂点を可視または不可視と設定することによるなどして、可視または隠されている(不可視)のどちらかとして印を付けられる。
一部の実施形態では、ブロック1606において、ボディケージのどの面がボディメッシュの特定の面に関連しているかに関しても判定が行われてよい。この判定は、図13および図14に関連して上で示され、説明されているものと類似している/同様である。その他の実施形態において、ボディメッシュ面とボディケージ面との間のこの関係の判定は、実行されなくてもよい。ブロック1606は、後にブロック1608が続く場合がある。
ブロック1608(「第1の衣服をアバターボディにフィッティングする」)において、ゲームアプリケーション1512は、第1の衣服をアバターボディにフィッティングする。このフィッティングは、変形された第1の衣服でアバターボディを少なくとも部分的に包むレンダリングプロセスによって、ブロック1608において、ゲームアプリケーション1512により実行される場合がある。たとえば、(第1の衣服の内側ケージの)内側特徴点の少なくとも一部の座標位置は、変形された第1の衣服の衣服メッシュがアバターボディの上にレンダリングされるとき、ボディケージのボディの特徴点の座標位置の値を取る。
図11に例として描かれたように、衣服メッシュ1100は、したがって、アバターボディの上にレンダリングされ、可視であるとして印を付けられてよく、アバターボディの(破線で示され、既に隠されていると印を付けられた/判定された)下層の隠面は、レンダリングされない。また、ブロック1606および/またはブロック1608において、第1の衣服のメッシュの各面に関して、第1の衣服の外側ケージのどの面が第1の衣服のメッシュのその面に関連しているかに関しての判定が行われる。この動作は、図12および図13に関連して上で説明されており、(たとえば)外側ケージの関連するポリゴンの頂点を第1の衣服のメッシュの対応する面のデータに追加することを含む場合がある。ブロック1608は、後にブロック1610が続く場合がある。
ブロック1610(「第2の衣服の内側ケージの内側特徴点を第1の衣服の外側ケージの外側特徴点にマッピングする」)において、ユーザは、ライブラリから第2の衣服を選択する(または第2の衣服は、自動的に選択される場合がある)。ブロック1604の第1の衣服と同様に、ブロック1610の第2の衣服は、内側ケージおよび外側ケージを有する。ゲームアプリケーション1512は、上にフィッティングされた第1の衣服を有するアバターボディに適合するように第2の衣服を変形するように、(第2の衣服の内側ケージの)内側特徴点を、アバターボディに既にフィッティングされている変形された第1の衣服の外側ケージの外側特徴点にマッピングする。ブロック1610は、後にブロック1612が続く場合がある。
ブロック1612(「第2のHSRを実行する:可視性および関連する面を判定する」)においては、反復的なHSR関連動作の第2のセットが、実行されてよい。やはり図10の可視性の技術を使用して、HSRの方法は、(第1の衣服のメッシュの面に対応するか、またはそうでなければ第1の衣服のメッシュの面の代理として働く)外側ケージの面が第2の衣服のメッシュの1つまたは複数の面によって隠されるかどうかを判定してよい。この判定は、第1の衣服の外側ケージの各面に関して反復的に/繰り返し実行され、第1の衣服のメッシュの面は、可視または隠されている(不可視)のどちらかとして印を付けられる。
図14に関連して上で説明されたように、第1の衣服のメッシュの特定の面を可視または不可視であるものとして印を付けること/特定することは、第1の衣服の外側ケージの関連する面に基づく。これらの関連する面のうちの少なくとも1つが第2の(次の)衣服を通して可視であると判定される場合、第1の衣服のメッシュの特定の面は、可視であるものとして印を付けられる/特定される。ブロック1612は、後にブロック1614が続く場合がある。
ブロック1614(「第2の衣服をアバターボディにフィッティングする」)において、ゲームアプリケーション1512は、第2の衣服を、(上に既にフィッティングされた第1の衣服を有する)アバターボディにフィッティングする。このフィッティングは、変形された第2の衣服で(上に既にフィッティングされた第1の衣服を有する)アバターボディを少なくとも部分的に包むレンダリングプロセスによって、ブロック1614において、ゲームアプリケーション1512により実行される場合がある。たとえば、(第2の衣服の内側ケージの)内側特徴点の少なくとも一部の座標位置は、変形された第2の衣服の衣服メッシュが上にフィッティングされた第1の衣服を有するアバターボディの上にレンダリングされるとき、変形された第1の衣服の外側ケージの外側特徴点の座標位置の値を取る。
したがって、第2の衣服の衣服メッシュは、(上にフィッティングされた第1の衣服を有する)アバターボディの上にレンダリングされ、可視として印を付けられてよく、第1の衣服および/またはアバターの下層の隠面は、レンダリングされない。また、ブロック1612および/またはブロック1614において、第2の衣服のメッシュの各面に関して、第2の衣服の外側ケージのどの面が第2の衣服のメッシュのその面に関連しているかに関しての判定が行われる。図12および図13に関連して上で説明されたように、(第2の衣服の)外側ケージのこれらの関連する面は、第3の衣服が第2の衣服の上に重ねられるときに、第2の衣服のメッシュの対応する面が可視になるかどうかを判定するために使用されてよい。
ブロック1614は、後にブロック1616が続く場合がある。
ブロック1616(「反復する」)において、既存のレイヤの上にさらなる衣服を重ね、変形するように、上述の動作に類似した動作が実行されてよく、可視性の判定およびその他のHSR関連動作が、隠面のレンダリングをしないようにするために必要とされるときに実行される。たとえば、ブロック1602~1608に関連して上で説明された最初の反復においては、第1の衣服がボディケージの上に(HSRを用いて)フィッティングされる。ブロック1610~1614において実行されてよい2回目の反復においては、追加の(第2の)衣服が、ボディケージの上に纏っている第1の衣服の上に(HSRを用いて)フィッティングされてよい。反復は、任意の数のアイテムに関して、追加の衣服アイテムをフィッティングするために実行され得る。一部の実施形態において(たとえば、連続したフィッティングにおける衣服アイテムが、その段階で、外側ケージの異なる重なり合わない部分に関連するとき)、フィッティングは、並行して実行されてよい(たとえば、帽子のフィッティングが靴のフィッティングと同時に実行されてよく、シャツのフィッティングがズボンのフィッティングと同時に実行されてよく、靴下のフィッティングが手袋のフィッティングと同時に実行されてよいなど)。
性能および結果を改善するために、上述のHSR技術に様々な強化がなされ得る。たとえば、図17~図19は、一部の実装による、HSRのための可視性の判定を改善することに関する図である。
文脈を示すためにまず図17を参照すると、図1700が、ケージのポリゴン(たとえば、三角形)の面1702の正面図を示す。上の図10に描かれているものと同様の方法で、複数の光線1704が、面1702上のサンプル点1706から射出される。図(側面図)1708は、光線1704の大部分/多くが衣服メッシュ1710に当たる/交差することを示す。しかし、1本の光線1712は、メッシュ1710に当たらず、それによって、面1702を、位置1714の見る人に可視にする。したがって、図1700および図1708から、面1700の可視性は、見る人の位置と、射出されている光線の起点および方向とのどちらかまたは両方に依存し得ると結論づけられることが可能である。
次に図18を参照すると、図1800は、ケージ1802と、ケージ1802の(すべてではなく)一部の上に重なる衣服メッシュ1804とを示す。図18に描かれるように、(ケージ1802の面1810上の点1808から点1812に向かって射出された)光線1806は、衣服メッシュ1804に当たらない場合があるが、ケージ1802のその他の面に当たる。
通常、図10の可視性の判定の技術では、光線1806が衣服メッシュ1804に当たらなかったという事実が、面1810が可視とみなされるようにする場合がある。しかし、HSR技術の一部の実施形態において、可視性の判定は、光線1806がケージ1802のその他の部分に当たる/交差することを考慮に入れる。したがって、面1810は、可視ではなく、不可視/隠されているとみなされ得る。図18に描かれた状況は、たとえば、アバターの1つのボディパーツがアバターの別のボディパーツによって部分的に覆われており、覆われているボディパーツの近くに位置する隙間を有する上に重なる衣服があるときに当てはまる場合がある。
図19は、光線が射出される方向を符号化することによって可視性の計算を改善することに関する。文脈を示すために、上述の可視性の判定の技術は、下層のケージの面から光線を射出することと、これらの光線が上に重なる衣服のメッシュに交差する/当たるかどうかを検出することとを含む。光線は、ランダムな方向から照射されてよく、これらの光線のいずれかが上に重なる衣服のメッシュに当たらない場合、下層のケージの面は、可視として印を付けられる。
しかし、例として、アバターボディ上の領域(たとえば、ボディメッシュの複数の面のうちの特定の面)が、ズボンだけを着用しているときには可視である、またはシャツだけを着用しているときには可視であるが、ズボンとシャツとの両方を着用しているときにはボディメッシュの面が隠されるようになる状況がある場合がある。たとえば、アバターの体がズボンだけを着用しているとき、上から見下ろすときにボディメッシュの面は可視であり、シャツだけを着用しているとき、下から見上げるときにボディメッシュの面は可視であり、したがって、ズボンとシャツとの両方が着用されるとき、ボディメッシュの面は可視として印を付けられる場合があり、これは、正しくない。したがって、HSR技術の可視性の判定の強化は、ズボンとシャツとの両方(またはその他の衣服)が同時に着用されるときに、ボディメッシュの面(および/または下層の衣服メッシュの面)が隠されていると判定されるような方法で、ズボンおよびシャツの可視性の方向/判定を組み合わせる。
そのような強化は、図19に示される例示的な球1900に基づいて可視性の計算の光線方向を符号化することによって実行されてよい。例示的な球1900は、その南北軸を中心に10個のスライスに細分化されており、個々の特定のスライス1902が、図19において強調されている。そして今度は、各スライスが、その高さに沿って10個の領域1904に細分化されている。
球1900は、すべての可能な光線方向を表し、各スライスは、スライスを構成する二面角内に入る方向の所定の範囲をカバーする。たとえば、スライス1902は、10個の領域1904の各々に対応する10個の異なる光線方向を表す場合がある。
各スライスは、単一のビット値、すなわち、隠されているに値0、可視に値1を使用して符号化される。したがって、スライス1902に関して、領域1904の光線方向に対応する0および1の文字列が存在する場合がある。そのため、(図10に描かれたような)ランダムな方向に光線を射出する代わりに、光線はスライスごとに射出され、スライスに関して可視性が印を付けられる。したがって、内側ケージのメッシュは、一部の方向からは可視であるとして印を付けられ、その他の方向からは隠されているとして印を付けられることが可能であり、これらのすべては、各スライスに関する1および0の配列に符号化される場合がある。
ズボンだけを着用しているアバターの先の例において、スライス1902に関する配列が少なくとも1つの符号化方向値1(可視)を持つので、ボディの領域/面は可視として印を付けられ得る。同様に、アバターがシャツだけを着用しているとき、スライス1902に関する配列がやはり少なくとも1つの符号化方向値1(可視)を持つので、ボディの領域/面は可視として印を付けられ得る。そして、(たとえば、ズボンとシャツとの両方を着用している)マルチレイヤ配置に関して可視性をチェックするとき、2つのスライスの符号化されたビット列に対して論理AND演算が実行され得る。AND演算が値0という結果になる場合、対応するボディの領域/面は、隠されているとして印を付けられる。そうでない場合、AND演算が値1という結果になるので、そのボディ/メッシュ面は、可視として印を付けられる。
様々な実施形態によれば、図19の技術のさらなる最適化が、実行され得る。たとえば、可視であり得るスライスに関してのみ光線を射出することによって可視性の計算が最適化されることが可能であり、これは、計算コストを削減することができる。これは、まず、面の法線とスライスの方向(たとえば、その中間点(middle point)から)との間の内積を実行し、面の裏側にあるスライス(たとえば、負の内積値)を無視することによって行われてよい。
HSR技術の強化のさらに別の例として、次に、図20が参照される。図20は、HSRを実行するときに遭遇する場合がある問題の例を示す。特に、アバター2000~2004のボディまたは衣服の一部の面が、たとえそのような面が消去されるべきでなくても、HSRが実行されるときに消去される場合があり、それによって、奇妙または不自然に見える結果をもたらす。図20においては、2006~2012に示されるように、アバターの耳の一部が消去されており、一方、同じ耳のその他の部分は可視にされる場合がある(またはされない場合がある)。
図20に描かれた問題に対処するために、HSR技術の実施形態は、一緒に隠れる(または見える)面が単一のグループに入れられるクラスタリング動作を実行してよい。クラスタリングアルゴリズムの例は、以下の通りである。
1. 閾値を計算する。
a. 外側ケージ上の各面に関して(calculateCloseToCageThreshold)
i. 外側ケージ上の面とレンダメッシュ上の最も近い面との間の距離を計算する
b. 距離の中間値を閾値として取得する
2. クラスタリングされる必要があるレンダメッシュ上のすべての面を見つける(meshFacesOutsideOfOuterCage)
a. アルゴリズムは、レンダメッシュ上の面が外側ケージの外にあるときにのみクラスタリングしたい
b. レンダメッシュ上の各面に関して、
i. 最も近い外側ケージまでの面の距離が閾値より大きい
ii. および、光線が面から射出されるとき、少なくとも1つの光線が外側ケージに当たらない場合、
iii. 面は、おそらく外側ケージの外にあるので、クラスタリングされる必要がある
3. 外側ケージの外にあると上で判定されたレンダメッシュの面を一緒にグループ化する(generateClusterForFacesOnMeshOutsideOfOuterCage)
a. クラスタリングを必要とするレンダメッシュ上の各面に関して、
i. レンダメッシュ上の面の隣接面を見つける
ii. 隣接面がクラスタリングを必要とする場合、面を1つのグループに追加する
4. 関連する外側ケージへのレンダメッシュのマップ(map)を更新する
a. レンダ面(render face)の各クラスタに関して、
i. クラスタ内の各レンダ面に関して、
1. すべての関連する外側ケージ面を見つける
2. これらの外側ケージ面を関連する外側ケージ面のクラスタに加える
3. 関連する外側ケージ面のクラスタ内のすべての面の関連する外側ケージ面を、レンダ面クラスタのクラスタ内の各レンダ面に更新する
次に、HSRが実行されるとき、クラスタ内のすべての面は、レンダメッシュ上の1つの「大きな面」として扱われ、外側ケージ上の同じ関連する面を共有する。したがって、レンダメッシュ内のクラスタリングされた面は、一緒に見えるかまたは隠れる。
一部のシナリオでは、クラスタリングを実行するときに対称性の問題に遭遇する場合がある。たとえば、アバターが、2つの耳および髪を有する場合がある。髪が一方の耳を覆い、他方の耳を覆わない場合、アバターは、片方の耳が覆われる(隠される/消去される)ようにしてレンダリングされる場合がある。たとえば、図20のアバター2004を参照されたい。
別の例として、クラスタリングは、面が互いに接続されているのかまたは切り離されているのかに基づいてよい。しかし、一部のアバターの問題は、特定の部分が接続されているように見える場合があるが、それらが接続されていない、または特定の部分が接続されるように意図されていないが、それでもなお一緒に隠れてしまうもしくは見えてしまうことであるHSRの結果、レンダリングされたアバターは、「浮いている」切り離された部分を有する場合があり、または奇妙に/不自然にくっつけられた部分を有する場合がある。
さらにその他の例として、一部の面が、外側ケージに近すぎる場合があり、それが、実際にはそのような面が隠されるべきであるときに、これらの面の不適当な透過/可視性をもたらすクラスタリングを引き起こす場合があり、閾値(上記のクラスタリングアルゴリズムのステップ1参照)が、あまりにも大きくまたはあまりにも小さく設定または計算される場合があり、一部の面が完全に覆われる場合があるが、これらの表面/パーツがアバターにとって特別である可能性があるために、ユーザがこれらの表面を隠したくない、といったことがある。
上記のおよびその他のクラスタリングの問題は、一部の実施形態においては、ユーザ(たとえば、開発者、クリエータなど)が一緒にクラスタリングする面を選択することを可能にするためのユーザインターフェース(UI)上のツールを提供することによって対処される。たとえば、ユーザは、HSRのためにどの面が常に可視であるべきかを定義すること、頂点を使用する特定の代わりに、隠されるまたは見せられる面を色で塗るかまたはそれ以外の方法で特定すること、どの面が常に可視であるのかまたは可視でないのかを定義するメッシュをインポートすることなどが可能である。
一部の実施形態において提供されるさらに別の強化に関して、HSRは、ケージの隠されたエリア(面)を縮小することによって実行される場合がある。文脈を示すために、上で既に説明されたように、HSRは、外側レイヤによって覆われる三角形などのほとんどのポリゴン(面)を消去する。しかし、一部の部分は、消去されない場合があり、したがって、これらの部分は、透過、クリッピングの問題、合わない変形などとして現れる望ましくないにじみ(bleeding)を引き起こし得る。
前述の問題に対する解決策は、ケージの隠された領域/面を、これらの領域の下のメッシュの面/三角形がにじまないように縮小することである。理想的には、隠されたケージ面の下の三角形が、HSRによって消去されるが、一部の三角形は、(たとえば、光線が衣服の外側レイヤのメッシュと下層のケージ面との間の狭い隙間をくぐり抜けた結果として、そのような三角形が可視であると判定されることが原因で)消去されない場合がある。下層のケージを縮小することによって、ケージの下の対応するメッシュも縮小され、それによって、にじみの問題を軽減する。
衣服の単一のレイヤのみが存在するとき、縮小は、ボディの下層の面にのみ適用されてよい。衣服の2つ以上のレイヤが存在するとき、一番上のレイヤを除いて、各レイヤの面が縮小されてよい。この縮小は、一番上の(一番外側の)レイヤから一番下の(一番内側の)レイヤに向かって進みながら、にじみが取り除かれるかまたはそうでなければ許容可能なレベルまで減らされるまで実行されてよい。
縮小を実行するために、第1の動作は、縮小されるべきケージの三角形(面)を決定することを含む場合がある。この決定を行うために、知られている三角形が存在する場合があり、または三角形の少なくとも1つの頂点が知られている場合がある。たとえば、三角形が知られている場合、三角形の頂点が知られている。そのとき、知られている三角形に隣接する三角形は、知られている頂点の少なくともサブセットを共有する三角形として決定され得る。このプロセスが、縮小される適切な三角形のすべてが特定されるまで、ある頂点/三角形から別の頂点/三角形へと繰り返されてよい。
三角形が特定された後、(上述のプロセスを含む)任意の適切な方法を使用して、三角形の縮小が実行されてよい。様々な実施形態によれば、アンブレラ-ラプラシアン縮小(umbrella-Laplacian shrink)技術および/または法線縮小(normal shrink)技術が、使用される場合がある。
法線縮小技術は、負の法線方向に沿って頂点を動かす。したがって、法線縮小は、単一の平面に横たわる個々の三角形、共通の平面に横たわる2つ以上の三角形、またはケージの尖っていない特徴の頂点のために使用されてよい。しかし、法線縮小技術は、一部の尖った特徴の頂点ではうまくいかない場合があり、それが、にじみにつながり得る。
アンブレラ-ラプラシアン縮小技術は、にじみの可能性を減らすように尖った特徴を滑らかにするために使用されてよい。図21は、隠されたケージの縮小技術、特に、アンブレラ-ラプラシアン縮小技術の例を示す。
図2100は、尖った頂点Vにおいてそれらの頂上が一緒に結合された複数の三角形を示す。頂点Vから点Cへのベクトル2102を計算するために、アンブレラ演算子(umbrella operator)が使用される。点Cは、隣接する頂点0、1、2、3、および4の平均である場合がある。
(図2104に示されるように)頂点Vがアンブレラ演算子によって頂点V'まで下に動かされる場合、頂点Vによって与えられる尖った特徴が軽減される。そして、同様の動作が、縮小されたケージ/メッシュを取得するためにその他の頂点0、1、2、3、および4のすべてに関して実行され得る。アンブレラ-ラプラシアン縮小技術は、平滑化されたケージ/メッシュをやはり生成する場合がある。
一部の実施形態によれば、ケージの面の縮小は、レンダリングが何らかのにじみが生じたことを示す場合に実行されてよい。その他の実施形態において、縮小は、レンダリングの前に実行されてよく、そして、縮小を調整することによって軽減され得るにじみまたはその他の望ましくない視覚的な効果が存在する場合、縮小に対する調整が、このレンダリングの後に実行されることが可能である。
図22は、本明細書において説明された1つまたは複数の特徴を実装するために使用されてよい例示的なコンピューティングデバイス2200のブロック図である。図15のクライアントデバイス1510ならびに/またはゲームプラットフォーム1502は、図22のコンピューティングデバイス2200の形態で提供されてよい。一例において、コンピューティングデバイス2200は、本明細書において説明された方法を実行するために使用されてよい。コンピューティングデバイス2200は、任意の好適なコンピュータシステム、サーバ、またはその他の電子もしくはハードウェアデバイスであることが可能である。たとえば、コンピューティングデバイス2200は、メインフレームコンピュータ、デスクトップコンピュータ、ワークステーション、ポータブルコンピュータ、または電子デバイス(ポータブルデバイス、モバイルデバイス、セル電話、スマートフォン、タブレットコンピュータ、テレビ、TVセットトップボックス、携帯情報端末(PDA)、メディアプレイヤー、ゲームデバイス、ウェアラブルデバイスなど)であることが可能である。一部の実施形態において、コンピューティングデバイス2200は、プロセッサ2202、メモリ2204、入力/出力(I/O)インターフェース2206、およびオーディオ/ビデオ入力/出力デバイス2214を含む。
プロセッサ2202は、プログラムコードを実行し、コンピューティングデバイス2200の基本動作を制御するための1つまたは複数のプロセッサおよび/または処理回路であることが可能である。「プロセッサ」は、データ、信号、またはその他の情報を処理する任意の好適なハードウェアおよび/またはソフトウェアシステム、メカニズム、または構成要素を含む。プロセッサは、汎用中央演算処理装置(CPU)、複数の処理ユニット、機能を実現するための専用回路を有するシステム、またはその他のシステムを含んでよい。処理は、特定の地理的場所に限定されるまたは時間的な制限を有するとは限らない。たとえば、プロセッサは、「リアルタイム」、「オフライン」、「バッチモード」などでそのプロセッサの機能を実行する場合がある。処理の一部は、異なる(または同じ)処理システムによって異なる時間に異なる場所で実行される場合がある。コンピュータは、メモリと通信する任意のプロセッサであってよい。
メモリ2204は、プロセッサ2202によるアクセスのためにコンピューティングデバイス2200内に設けられてよく、プロセッサによる実行のために命令を記憶するのに好適であり、プロセッサ2202と分けて置かれたおよび/またはプロセッサ2202と統合された任意の好適なプロセッサ可読ストレージ媒体、たとえば、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電気的消去可能読み出し専用メモリ(EEPROM)、フラッシュメモリなどであってよい。メモリ2204は、オペレーティングシステム2208、1つまたは複数のアプリケーション2210、およびその関連するデータ2212を含む、プロセッサ2202によってコンピューティングデバイス2200上で実行され得るソフトウェアを記憶することができる。アプリケーション2210は、ゲームアプリケーション2212/2220またはゲームエンジン1504を具現化するために使用され得るツールの例である。一部の実施形態において、アプリケーション2210は、プロセッサ2202による実行に応じて、アバターボディの上で重ねられた衣服を変形/フィッティングすることおよびHSR関連動作を実行することに関連して本明細書において説明された動作をプロセッサ2202が実行するかまたはそれらの動作の実行を制御することを可能にする命令を含み得る。
メモリ2204内のソフトウェアのいずれも、代替的に、任意のその他の好適な記憶場所またはコンピュータ可読媒体に記憶され得る。さらに、メモリ2204(および/またはその他の接続されたストレージデバイス)は、本明細書において説明された特徴において使用される命令およびデータを記憶することができる。メモリ2204および任意のその他の種類のストレージ(磁気ディスク、光ディスク、磁気テープ、またはその他の有形の媒体)は、「ストレージ」または「ストレージデバイス」とみなされ得る。
I/Oインターフェース2206は、コンピューティングデバイス2200とその他のシステムおよびデバイスとのインターフェースを取ることを可能にするための機能を提供することができる。たとえば、ネットワーク通信デバイス、ストレージデバイス、および入力/出力デバイスは、I/Oインターフェース2206を介してコンピューティングデバイス2200と通信することができる。一部の実施形態において、I/Oインターフェース2206は、入力デバイス(キーボード、ポインティングデバイス、タッチスクリーン、マイクロフォン、カメラ、スキャナなど)および/または出力デバイス(ディスプレイデバイス、スピーカデバイス、プリンタ、モニタなど)を含むインターフェースデバイスに接続することができ、それらのインターフェースデバイスは、集合的に、少なくとも1つのオーディオ/ビデオ入力/出力デバイス2214として示される。
オーディオ/ビデオ入力/出力デバイス2214は、オーディオメッセージを入力として受け取るために使用され得るオーディオ入力デバイス(たとえば、マイクロフォンなど)、オーディオ出力デバイス(たとえば、スピーカ、ヘッドフォンなど)、ならびに/または上述の重ねられた衣服を持つ例示的なレンダリングされた3Dアバターなどのグラフィカルなおよび視覚的な出力を提供するために使用され得るディスプレイデバイスを含むことが可能である。
図示を容易にするために、図22は、プロセッサ2202、メモリ2204、I/Oインターフェース2206、アプリケーションの2210などの各々に関して1つのブロックを示す。これらのブロックは、1つまたは複数のプロセッサもしくは処理回路、オペレーティングシステム、メモリ、I/Oインターフェース、アプリケーション、および/またはソフトウェアモジュールを表す場合がある。その他の実施形態において、コンピューティングデバイス2200は、示された構成要素のすべてを有するわけではない可能性があり、および/または本明細書に示された要素の代わりにもしくは本明細書に示された要素に加えてその他の種類の要素を含むその他の要素を有する可能性がある。
ユーザデバイスが、本明細書において説明された特徴を実装するおよび/または本明細書において説明された特徴とともに使用されることも可能である。例示的なユーザデバイスは、コンピューティングデバイス2200と同様のいくつかの構成要素、たとえば、プロセッサ2202、メモリ2204、およびI/Oインターフェース2206を含むコンピュータデバイスであることが可能である。クライアントデバイスに好適なオペレーティングシステム、ソフトウェア、およびアプリケーションが、メモリに備えられ、プロセッサによって使用され得る。クライアントデバイスのためのI/Oインターフェースは、ネットワーク通信デバイスならびに入力および出力デバイス、たとえば、音をキャプチャするためのマイクロフォン、画像もしくはビデオをキャプチャするためのカメラ、音を出力するためのオーディオスピーカデバイス、画像もしくはビデオを出力するためのディスプレイデバイス、またはその他の出力デバイスに接続され得る。たとえば、オーディオ/ビデオ入力/出力デバイス2214内のディスプレイデバイスは、本明細書において説明されるように画像の前および後処理を表示するためにコンピューティングデバイス2200に接続される(または含まれる)ことが可能であり、そのようなディスプレイデバイスは、任意の好適なディスプレイデバイス、たとえば、LCD、LED、またはプラズマディスプレイスクリーン、CRT、テレビ、モニタ、タッチスクリーン、3-Dディスプレイスクリーン、プロジェクタ、またはその他の視覚表示デバイスを含み得る。一部の実施形態は、オーディオ出力デバイス、たとえば、テキストをしゃべる音声出力または合成を提供し得る。
本明細書において説明された1つまたは複数の方法(たとえば、方法1600)は、コンピュータ上で実行され得るコンピュータプログラム命令またはコードによって実装されることが可能である。たとえば、コードは、1つまたは複数のデジタルプロセッサ(たとえば、マイクロプロセッサまたはその他の処理回路)によって実施されることが可能であり、非一時的コンピュータ可読媒体(たとえば、ストレージ媒体)、たとえば、半導体またはソリッドステートメモリ、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、フラッシュメモリ、硬質磁気ディスク、光ディスク、ソリッドステートメモリドライブなどを含む磁気式、光学式、電磁式、または半導体ストレージ媒体を含むコンピュータプログラム製品に記憶されることが可能である。プログラム命令は、たとえば、サーバ(たとえば、分散型システムおよび/またはクラウドコンピューティングシステム)から配信されるサービスとしてのソフトウェア(SaaS)の形態で電子信号に含まれ、電子信号として提供されることも可能である。代替的に、1つまたは複数の方法は、ハードウェア(論理ゲートなど)に、またはハードウェアとソフトウェアとの組合せに実装され得る。例示的なハードウェアは、プログラミング可能なプロセッサ(たとえば、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブルロジックデバイス)、汎用プロセッサ、グラフィックスプロセッサ、特定用途向け集積回路(ASIC)などであることが可能である。1つまたは複数の方法は、システム上で実行されるアプリケーションの一部もしくは構成要素として、またはその他のアプリケーションおよびオペレーティングシステムと連携して実行されるアプリケーションもしくはソフトウェアとして実行され得る。
本明細書において説明された1つまたは複数の方法は、任意の種類のコンピューティングデバイス上で実行され得るスタンドアロンのプログラム、ウェブブラウザ上で実行されるプログラム、モバイルコンピューティングデバイス(たとえば、セル電話、スマートフォン、タブレットコンピュータ、ウェアラブルデバイス(腕時計、腕章、装身具、帽子、ゴーグル、眼鏡など)、ラップトップコンピュータなど)上で実行されるモバイルアプリケーション(「アプリ」)内で実行され得る。一例においては、クライアント/サーバアーキテクチャが、使用されることが可能であり、たとえば、(クライアントデバイスとしての)モバイルコンピューティングデバイスが、サーバデバイスにユーザ入力データを送信し、出力するための(たとえば、表示するための)最終出力データをサーバから受信する。別の例においては、すべての計算が、モバイルコンピューティングデバイス上のモバイルアプリ(および/またはその他のアプリ)内で実行され得る。別の例においては、計算が、モバイルコンピューティングデバイスと1つまたは複数のサーバデバイスとの間に分けられ得る。
説明がその特定の実施形態に関連して説明されたが、これらの特定の実施形態は例示的であるに過ぎず、限定的でない。例において示された概念は、その他の例および実装に適用される場合がある。
本開示において説明された機能ブロック、動作、特徴、方法、デバイス、およびシステムは、当業者に知られているようにシステム、デバイス、および機能ブロックの異なる組合せに統合されるかまたは分けられる場合があることに留意されたい。任意の好適なプログラミング言語およびプログラミング技術が、特定の実施形態のルーチンを実装するために使用されてよい。異なるプログラミング技術、たとえば、手続き型またはオブジェクト指向プログラミング技術が、使用される場合がある。ルーチンは、単一の処理デバイスまたは複数のプロセッサ上で実行される場合がある。ステップ、動作、または計算が特定の順序で示される場合があるが、順序は異なる特定の実施形態において変更されてよい。一部の実施形態では、本明細書において逐次的であるものとして示された複数のステップまたは動作が、同時に実行される場合がある。