(57)【要約】【課題】  誇張画像を3Dモデルから簡便に描画することを目的とする。【解決手段】  本発明の一側面によれば、三次元空間に存在する、複数のノードを含む三次元モデルを複数の視点を用いて描画する装置であって、前記複数のノードの各々と前記複数の視点の各々との対応関係、前記三次元モデルを構成する複数のポリゴンの各頂点の描画位置に関して前記複数のノードの各々が与える影響度、及び前記複数の視点の各々が持つ描画パラメータを含む、描画情報を格納するメモリと、前記描画情報を用いて、前記複数のポリゴンによって、前記三次元モデルを画像に変換するＣＰＵと、を有する描画装置であって、前記ＣＰＵは、前記複数のポリゴンの頂点の各々に対して、前記頂点が属しているノードに対応する視点を用いて前記頂点の描画位置を算出し、前記影響度に基づいて、算出された前記頂点の前記描画位置を修正する、描画装置が提供される。【選択図】図４
2014149748.tif 000002
【特許請求の範囲】
【請求項１】
三次元空間に存在する、複数のノードを含む三次元モデルを複数の視点を用いて描画する装置であって、
前記複数のノードの各々と前記複数の視点の各々との対応関係、前記三次元モデルを構成する複数のポリゴンの各頂点の描画位置に関して前記複数のノードの各々が与える影響度、及び前記複数の視点の各々が持つ描画パラメータを含む、描画情報を格納するメモリと、
前記描画情報を用いて、前記複数のポリゴンによって、前記三次元モデルを画像に変換するＣＰＵと、
を有する描画装置であって、
前記ＣＰＵは、前記複数のポリゴンの頂点の各々に対して、
前記頂点が属しているノードに対応する視点を用いて前記頂点の描画位置を算出し、
前記影響度に基づいて、算出された前記頂点の前記描画位置を修正する、
描画装置。
【請求項２】
前記ＣＰＵは、
前記修正された描画位置を用いて、前記三次元モデルの画像に衝突があるか否かを判定し、
衝突があると判定された場合には、前記描画パラメータを修正し、
前記修正された前記描画パラメータに基づいて、前記三次元モデルを画像に変換する、
請求項１記載の描画装置。
【請求項３】
アニメーションを構成する複数のフレーム画像のうちの特定のフレームにおいて、前記衝突があると判断された場合、前記特定のフレームに対して時間的に前及び／又は後の所定の数のフレームに対して、修正された前記描画パラメータの修正前後の差分値を、前記特定のフレームから所定のフレーム数のフレームのそれぞれに対して、フレームの位置に応じて補間した値を適用することによって、前記複数のフレームの各々に平滑化された修正値を与える、
請求項２記載の描画装置。
【請求項４】
三次元空間に存在する、複数のノードを含む三次元モデルを複数の視点を用いて描画する方法であって、
メモリに保存された、前記複数のノードの各々と前記複数の視点の各々との対応関係、前記三次元モデルを構成する複数のポリゴンの各頂点の描画位置に関して前記複数のノードの各々が与える影響度、及び前記複数の視点の各々が持つ描画パラメータを含む、描画情報を用いて、ＣＰＵが、前記複数のポリゴンの頂点の各々に対して、
前記頂点が属しているノードに対応する視点を用いて前記頂点の描画位置を算出するステップと、
前記影響度に基づいて、算出された前記頂点の前記描画位置を修正するステップと、
を有する描画方法。
【請求項５】
前記修正された描画位置を用いて、前記三次元モデルの画像に衝突があるか否かを判定するステップと、
衝突があると判定された場合には、前記描画パラメータを修正するステップと、
前記修正された前記描画パラメータに基づいて、前記三次元モデルを画像に変換するステップと、
を更に有する請求項４記載の描画方法。
【請求項６】
アニメーションを構成する複数のフレーム画像のうちの特定のフレームにおいて、前記衝突があると判断された場合、前記特定のフレームに対して時間的に前及び／又は後の所定の数のフレームに対して、修正された前記描画パラメータの修正前後の差分値を、前記特定のフレームから所定のフレーム数のフレームのそれぞれに対して、フレームの位置に応じて補間した値を適用することによって、前記複数のフレームの各々に平滑化された修正値を与えるステップ、
を更に有する請求項５記載の描画方法。
【請求項７】
請求項４ないし６のうち何れか１項記載の方法を、コンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、三次元オブジェクトを複数の視点からの射影によって、描画を行う技術に関する。
【背景技術】
【０００２】
従来の手書きのアニメ及びマンガには、強い臨場感、又は迫力を与えるために、透視図法（パース）において、遠い部分と近い部分の見た目の大きさの差を過剰に誇張した表現が多く用いられている。
【０００３】
図１は、誇張された画像を比較した例を示している。図１(A)と図１(B)の画像を比べると、図１(B)は、足先１０２が、図１(A)の足先１０１と比較して、大きく表描画されており、奥行き表現がはっきりして印象的である。正確な透視投影図法でレンダリングした画像は図１(A)である。これに対し、図１(B)の画像は前に突き出した足先の見た目の大きさの差を拡大することで、奥行表現が誇張された画像になっている。本明細書では、このような画像を「誇張画像」と呼ぶ。
【０００４】
たとえばロボットアニメ、又はスポーツなど、迫力を必要とする場面において、パースを極端に誇張する表現が多用されてきた。だが、このような柔軟な二次元表現は、手書きでは自由に描画できるが、カメラパラメータと3Dモデルから構成されるCG（コンピュータグラフィックス）の映像では表現に困難を伴う場合がある。このため、手書きの映像とCGの映像を合成する際に、相互の描画の手法の矛盾が露呈して違和感を与えることもあった。
【０００５】
立体映像のディスプレイ面表から飛び出した物体を拡大して表現することで、視差を削減させる技術がある（たとえば、特許文献１参照）。
【０００６】
複数の視点（カメラ）からの画像を合成して、二次元平面にレンダリングする技術が存在する（たとえば、非特許文献１、非特許文献２、非特許文献３、非特許文献４参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−２９３７９２号公報
【非特許文献】
【０００８】
【非特許文献１】CGWORLD.jp日本アニメCGの新たな原動力  Autodesk  3ds  Max  2011×PSOFT  Pencil+3（第4回）http://cgworld.jp/feature/review/pencil+3-vol4.html
【非特許文献２】Multi-perspective  Modeling,  Rendering,  and  Imaging  SIGGRAPH  ASIA  2008  Course  Note,  http://www.csbio.unc.edu/mcmillan/pubs/siga08-yu.pdf
【非特許文献３】E-IMPACT  〜日本のアニメーションにおける誇張表現を模した3DCG〜  特集・最新のディジタルコンテンツ制作技術、映像情報メディア学会誌2012年2月号、66(2),  102-105
【非特許文献４】"E-IMPACT:  Exaggerated  Illustrations  using  Multi-perspective  Animation  Control  Tree  Structure",  ACE  2011  -International  Conference  on  Advances  in  Computer  Entertainment  Technology  and  DIMEA  2011  -  Digital  Interactive  Media  Entertainment  and  Arts  Conference  (Nov  08  -  Nov  11  2011).
【発明の概要】
【発明が解決しようとする課題】
【０００９】
誇張画像を3Dモデルから簡便に描画することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一側面によれば、三次元空間に存在する、複数のノードを含む三次元モデルを複数の視点を用いて描画する装置であって、前記複数のノードの各々と前記複数の視点の各々との対応関係、前記三次元モデルを構成する複数のポリゴンの各頂点の描画位置に関して前記複数のノードの各々が与える影響度、及び前記複数の視点の各々が持つ描画パラメータを含む、描画情報を格納するメモリと、前記描画情報を用いて、前記複数のポリゴンによって、前記三次元モデルを画像に変換するＣＰＵと、を有する描画装置であって、前記ＣＰＵは、前記複数のポリゴンの頂点の各々に対して、前記頂点が属しているノードに対応する視点を用いて前記頂点の描画位置を算出し、前記影響度に基づいて、算出された前記頂点の前記描画位置を修正する、描画装置が提供される。
【発明の効果】
【００１１】
実施例によれば、誇張画像を3Dモデルから簡便に描画することができる。
【図面の簡単な説明】
【００１２】
【図１】誇張画像の例を示す図である。
【図２】ベクトルの変換処理を示す図である。
【図３】人体の剛体関節モデル示す図である。
【図４】ＣＧ映像作成の工程を示す図である。
【図５】Forward  Kinematicsによるアニメーションの例を示す図である。
【図６】円筒のパース誇張表現の例を示す図である。
【図７】カメラの移動と画角操作によるパースの制御を示す図である。
【図８】関節モデルの誇張表現の例を示す図である。
【図９】人間型モデルへ適用したボーンの例を示す図である。
【図１０】ジョイントとエンベロープの例を示す図である。
【図１１】ボーンの影響度を加味したポリゴンの頂点の変換のフローを示す図である。
【図１２】実施例２の変形例による頂点の変換のフローを示す図である。
【図１３】描画において、重なりが生じる例を示した図である。
【図１４】誇張描画による像の拡張がもたらす重畳を回避する例を示す図である。
【図１５】重畳を回避するフローの例を示す図である。
【図１６】疑似視点位置の二次元像の移動によるターゲット点の移動を示す図である。
【図１７】アニメーション平滑化のための処理フローを示す図である。
【図１８】モデルの各部位への誇張パラメータの設定のフローを示す図である。
【図１９】3Dモデルとエンベロープの重ね合わせを示す図である。
【図２０】ハードウエアの構成例を示す図である。
【発明を実施するための形態】
【００１３】
本発明の実施例の基本的な作業工程を説明するため、通常の映像生成と、誇張画像表現について以下に記述する。なお、本明細書では、以下の手法及び表記に従うが、本発明の各実施例は、これらの手法及び表記に限定されるものではない点に留意すべきである。
【００１４】
まず、比較対象として通常のCGでの映像描画手法を説明する。続いて映像誇張の具体的事例を説明し、その中で本発明の実施例に共通する基本実施例として、マルチカメラを用いた誇張描画の仕組みの例について説明する。
【００１５】
本明細書では、3Dモデルをオブジェクトと呼ぶ場合がある。また、3Dモデル（オブジェクト）の一部を部分オブジェクトと呼ぶ場合がある。
【００１６】
［基本実施例］
［頂点と行列変換］
CGモデルの形状データは、たとえば、多数の三角形面で構成ことができる。各三角形の頂点データは三次元の浮動小数点データの組（三次元ベクトル(x,y,z)）として保持される。以下の説明では、OpenGL又はDirect3DなどのCG処理機構に準拠する。三次元ベクトル(x,y,z)に四次元めの要素w=1を追加した列ベクトル[x,y,z,1]Tとして表記し（「T」は行列の転置を意味し、ここでは行ベクトルの転置で列ベクトルを表している)、変換処理を4×4行列で表現する。これは三次元ベクトルに対する移動・回転・サイズ変換と射影変換の処理をアフィン変換のみで表現できる。
【００１７】
図２は、ベクトルの変換処理を示している。図２(A)は、回転行列Rにより、ベクトルv0がベクトルv1にｘ軸周りに角度θだけ回転している例を示している。この変換処理は、v0=[x,y,z,1]Tとすれば、以下のように表せる。
【００１８】
【数１】
2014149748.tif 000003
図２(B)は、移動行列Tにより、ベクトルv0がベクトルv2に、x軸方向にtx、y軸方向にty、z軸方向にtzだけ平行移動している例を示している。この変換処理は、以下のように表せる。
【００１９】
【数２】
2014149748.tif 000004
図２(C)は、スケーリング変換行列Sにより、ベクトルv0がベクトルv3に、拡大又は縮小される例を示している。x軸方向にsx、ｙ軸方向にsy、z軸方向にszだけ拡大又は縮小される変換処理は、以下のように表せる。
【００２０】
【数３】
2014149748.tif 000005
これらの処理を統合した結果は、物体の位置、及び形状を変形することに相当するため、モデリング行列Mと呼ぶ。たとえばMは、以下のように表現される。
【００２１】
M=TRS          (3.5)
なお、上記の式3.5において、行列の掛け合わせる順番が異なれば、異なる変換結果となる点に留意すべきである。また、以下の説明では、ベクトルvのx成分を用いる場合にはv.x、ベクトルvのx成分とy成分を用いる場合にはv.xyのように、省略記法を用いて記述する。さらに、Mv.xyのように行列を掛けた場合は、(Mv).xyを表すものする。
【００２２】
［関節構造］
CGモデルがジョイント（関節）構造を持っている場合には、モデル全体は部分要素の集まりとして分解できる。なお、本明細書では、「部分要素」を「ボーン」と呼ぶ場合がある。ある部分要素に属する頂点データの集合をセグメントと呼ぶ。各部分要素は隣接する部分要素と「ジョイント点」（「関節点」）で繋がっており、ジョイント点で互いのまわりを回転する以外には変形しないモデルを、剛体関節モデルと呼ぶ。本明細書では、ジョイントとセグメントで構成されるひとかたまりの単位を「ノード」と呼ぶ。特定の部分要素を示すときには、下付きのサフィックスで表現する。たとえば、部分要素を特定するID番号がmであるノードのモデリング行列はMmと記述する。また、ノードmのジョイント点（下記の親子関係における親と繋がる点）を「ジョイントm」とし、その位置を表すベクトルをjmと表記する。
【００２３】
図３は、人体の剛体関節モデルを示している。本明細書では、説明を分かりやすくするために剛体関節モデルを例にして説明する。なお、本発明は剛体関節モデルに限定されるものではない。図３(A)に示すように、剛体関節モデルにおいては、互いに繋がったノードの間には親子関係を設定することが望ましい。図３(B)に示すように最上位の親ノード（ルートノード）から連なる木構造で表現する。このように単純な木構造で上位から順に計算できる関節モデルを制御する方法論は順運動学（Forward  Kinematics）と呼ばれる。該当ノードのID番号をm、親ノードのID番号をn、移動前の基本姿勢におけるジョイント点（ジョイントm）の位置を表すベクトルをj0mとするとき、親ノード302（ノードn）でのモデリング行列Mnが定まると、ジョイントmの位置jmはjm=Mnj0mとして一意に定まる。子ノード３０４（ノードm）はこのジョイントmを中心とした回転運動のみを自由度として持ち得る。
【００２４】
［視点行列と射影行列］
三次元位置を二次元画像に変換するために、視点行列Vと射影行列Pが用いられる。視点行列はカメラ（視点）の位置と方向をあらわすものであり、射影行列は三次元情報を二次元に射影するためのルールを示すものである。
【００２５】
視点行列Vは、視点の位置e0を原点に変換する平行移動と、カメラの方向θ0をZ軸に設定する回転行列を合成することで定義する。
【００２６】
射影行列Pは、たとえば以下の形式の行列である。
【００２７】
【数４】
2014149748.tif 000006
この行列で頂点座標を変換した結果[x,y,z,w]Tを、wの値で割って正規化した量
[x/w,y/w,z/w,1]Tは、視野空間と呼ばれる。x/w,y/wはそれぞれ二次元画像上での座標位置に対応し、-1<x/w<1,-1<y/w<1,0<z/w<1は描画対象を示す四角錐の領域になる。この射影行列の作成についてはhttp://www.terathon.com/gdc07_lengyel.pdfなどの参考文献に記載されている。
【００２８】
［描画工程］
CG映像で、毎フレーム行う描画処理の工程は、以下のようになる。
【００２９】
図４は、CG映像作成の工程例を示している。  この工程例は、具体的には、以下のように構成される。
【００３０】
ステップ４０２において、シーンにキャラクタモデルを配置する条件と、関節モデルのポーズを定める。
【００３１】
ステップ４０４において、カメラパラメータを与え、視点位置、方向、及び／又は画角を設定する。
【００３２】
ステップ４０６において、モデルを構成する各頂点の座標を計算し、射影変換を行う。
【００３３】
ステップ４０８において、頂点に張られた面の画素を塗り潰す（ラスタライズを行う）。
【００３４】
複数のノードの各々と複数の視点の各々との対応関係、三次元モデルを構成する複数のポリゴンの各頂点の描画位置に関して複数のノードの各々が与える影響度、及び複数の視点の各々が持つ描画パラメータを含む情報を、描画情報と呼ぶ。
【００３５】
［ステップ４０２：ポーズの決定］
図５は、Forward  Kinematicsによるアニメーションの例を示している。順運動学の手順に基づいて、各ノードのモデリング行列を決定する。
（なお、この決定手順は、例えば、以下の参考文献に例示されている。http://www.tmps.org/index.php?%BD%E7%B1%BF%C6%B0%B3%D8）
（ア）キャラクタのポーズを決定するために、各ノードの向きを定める（図５(A)）。全てのノード(m=0,1,2,…,M-1)について、ジョイント部(m)での回転角度の情報R0mを読み出す。
【００３６】
（イ）親のノードから連結している順に、ノードの位置を定めてゆく。ノードmが、その親であるノードnに、ジョイントmによってつながっている。基本ポーズでのジョイントmの位置をj0m、ポーズを読み込んで回転した後のジョイントmの位置をjmとする。親のモデリング行列Mnがすでに定まっているとき、このノードのモデリング行列Mmを以下のように定める（図５(B))。
【００３７】
変換Mmpは、ノードmに付随する点pにポーズ情報を適用する処理であり、ジョイントmを中心としてRmだけ回転させる操作と、ジョイントmの位置jm（親ノードの変換Mnによって定められる）から得られる。すなわち：
jm=Mnj0m
Rm=R0mRn
Mmp=Rm(p-j0m)+Mnj0m
（ウ）操作(イ)を、親ノードから子ノードに繰り返し、全てのノードについてモデリング行列Mを求めることができる。
【００３８】
［ステップ４０４：カメラの配置（カメラパラメータの設定）］
カメラパラメータ（視点の位置e、カメラの方向θ、画角）を設定し、これらの情報から、視点行列V、射影行列Pを作成する。画角は、カメラのレンズにおける焦点距離に対応する。
【００３９】
視点行列Vは、視点位置eを原点とする移動行列T（pをp-eに平行移動する）と、視線方向θをZ軸に回転する回転行列RによってV=RTとして定義される。
【００４０】
射影行列には、既に述べた形式の行列を以下のように設定する。
【００４１】
【数５】
2014149748.tif 000007
このときp00,p11が、それぞれ水平方向・垂直方向の画角（その半分の正接の逆数）になる。
【００４２】
［ステップ４０６：頂点の変換］
モデルの各頂点（変形前の位置座標をpとする）に対し、変形後の位置を計算する。頂点が属しているノードをmとするとき、[x,y,z,w]T=PVMmpを計算する。
【００４３】
頂点は、最終的に二次元画像上の点(x/w,y/w)に写像される。
【００４４】
またこの計算から深度値z/wを得る。この深度値は面の奥行き順序を比較するソートに用いられる。この点についての詳細は後述する。
【００４５】
［ステップ４０８：画素の塗り潰し］
二次元画像上の画素を塗り潰す（ラスタライズ処理を行う）。
【００４６】
この塗り潰しにおいては、最終的に手前の三角形の色が見えなければならないので、描画順序が重要になる。この描画の奥行き順序を守るために、頂点の変換によって得られた深度値z/wを用いて面をソートしておき、最も遠い面から描き、近い面で上書きしながら描画してゆく。
【００４７】
ソートされた各三角形面について、構成される三つの頂点を参照する。それらの頂点で囲まれた領域の画素を、面に指定された色に塗り潰す。
【００４８】
上記の標準的な描画手法は、透視投影行列Pによって、三次元から二次元への幾何射影を行っている。次に、この映像の生成手順と比較して、誇張映像の生成手法を説明する。
【００４９】
［誇張映像の生成について］
誇張画像を生成するには、おもに、二種類の手法がある。一つ目はCGモデルの当該個所の形状自体を大きくする手法であり、もうひとつは遠近法を生み出すカメラパラメータを加工する技法Multi-perspective  Rendering  (MPR)を用いる手法である。
【００５０】
「１．形状加工」
前者のCGモデルの当該個所を加工する方法の実現例には、Pencil+3パース変形モディファイヤの例などが存在する(たとえば、非特許文献１参照)。
【００５１】
この例は、CGのZ深度に応じて異なるレンズパラメータを与えたような映像を作成する。なお、Z深度に応じてモデル形状を加工するため、キャラクタ以外の物体、たとえば背景モデルなどが同じシーンの中に写っている場合には、該当する深度のモデルがひずんでしまう可能性がある。
【００５２】
［２．マルチパースペクティブ］
後者のMPRは異なる透視投影の効果を一枚の絵に合成する方式である。MPRの既存技術の詳細は、非特許文献２に、例示されている。
【００５３】
このMPRは、異なった視点からの画像の断片を、一枚の絵の中に合成して映像を作る。モデルの各部がひずんで接合され、キュービズムの絵画のような映像を作る例などが先行事例として挙げられている。
【００５４】
また特許文献１では、この手法を用いて立体映像のディスプレイ面表から飛び出した物体を拡大して表現することで、視差を削減させる方法が提案されている。
【００５５】
また、MPRを用いて、上記の誇張画像を作成する手法は、非特許文献３及び非特許文献４によって、その例が提案されている。
【００５６】
［マルチパースペクティブ合成による誇張画像］
非特許文献１の例では形状を変化させることで誇張表現を行うのに対して、非特許文献３及び非特許文献４で示された誇張描画アルゴリズムは透視投影Pを適用する段階でパースの効果を誇張する。
【００５７】
［基本概念］
図６は、円筒のパース誇張表現の例を示している。ノードmに相当する円筒と、その中心軸を描いたものである。図６(A)は通常のパースである。これに対し、図６(B)では、距離による見た目の拡大率の差（円６０２と円６０４との差）を大きく誇張できる。円筒に中心軸を設定し、その両端点を特徴点とする。円筒の根元にある三次元の点をジョイントmとし、その位置を点jmとする。また、円筒先端の三次元の点を「ターゲットm」と呼び、その位置をtmとする。
【００５８】
このように、親の疑似視点パラメータで作成した画像と、子の疑似視点パラメータが、互いにジョイント点とターゲット点を共有するようにカメラパラメータを定めることで、最終画像上で互いの軸がなす角度が不自然にならないようになる。
【００５９】
図７は、カメラの移動と画角操作によるパースの制御を示している。この処理におけるカメラと画角の関係を示した模式図である。カメラの位置をd2からd1に接近させ、画角（の半分）をθ2からθ1に広げて、円筒の上面tmを大きく見せつつも、円筒の底面jmを含んだ平面の見え方が略変わらないようにすることができる。
【００６０】
［多段階の合成］
図８はこの手法によって関節モデルを描画した場合の模式図である。図８のように、関節で区切られた部位それぞれに専用のカメラを用意し、それらを「疑似カメラ」と呼ぶ。これらの疑似カメラをそれぞれ異なる位置に配置し、各部位を撮影する。図８(B)〜図８(D)は、同じポーズのモデルを、三つの異なる疑似カメラで撮影したものである。図８(A)は、矢印８０２、８０４、及び８０６に示すように、これらの３種類の画像を関節部分でつなぎ合わせて作成した誇張画像である。
【００６１】
図８は、関節モデルの誇張表現の例を示している。このようなパースの異なる画像をつなぎ合わせて、手書きアニメでの誇張表現を実現できる。このようなMPRを用いると、パースの誇張表現は「形状変化」ではなく「距離変化」として記述できる。このことにより、パースの誇張表現がより自然に表現できるようになる。
【００６２】
［制約条件］
それぞれの疑似カメラをモデルに近づけるだけでは、二次元画像上でのポーズのバランスが崩れてしまう場合がある。二次元画像上のポーズの印象を残したまま、パースの遠小近大の表現だけを変化させるためには、それぞれの疑似カメラの配置場所を連携させることが望ましい。この場合、以下の制約条件を満たすように、疑似射影行列Pmと疑似視点行列Vmを作成するのが望ましい。
【００６３】
［制約条件１］
ジョイントmの近傍では、ノードmの疑似カメラの画像と親ノードnの疑似カメラの画像の間で、位置とサイズを略一致させることが望ましい。この制約により、関節が「つながって」見える。
【００６４】
ジョイント点jmを含み、視線方向に垂直な平面をL(m,n)とする。このL(m,n)上の点pについて、親階層（ノードn）の疑似射影処理PnVnによって、点pが写される二次元座標と、この階層（ノードm）の疑似射影処理PmVmによって、点pが写される二次元座標が一致する。
【００６５】
すなわち、式の関係が成立する。
【００６６】
【数６】
2014149748.tif 000008
［制約条件２］
ターゲットmが射影される二次元位置が略一致するようにすることが望ましい。この制約により、オブジェクトの向きが一致して見える.
ターゲット点tmについて、親階層（ノードn）の疑似射影処理PnVnによって、点pが写される平面上の位置と、この階層（ノードm）の疑似射影処理PmVmによって、点pが写される平面上の位置とが略一致する。
【００６７】
すなわち、式の関係が成立する。
【００６８】
【数７】
2014149748.tif 000009
これらの制約条件を満たした場合、円筒の軸を示すjmからtmに向かう線分が、二次元的には同じ位置を占めたままで、点tmの周りの見た目のパースが大きくなる映像を作ることができる。なお、本発明は、上述の手法に限定されるものではない。
【００６９】
［描画手法の構成要素］
描画手法によって映像を描画する際に必要となるデータ構成要素について以下に説明する。
【００７０】
ノード部は以下のデータを保持する：
（ア）あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置t0m
・基本ポーズにおけるジョイント点の位置j0m
・誇張係数ηm
・親ノードへのリンクn  
（イ）動的に定められる情報は以下の通りである。
・現在のターゲット点の位置tm
・現在のジョイント点の位置jm
・モデリング行列Mm
・疑似視点位置em
・疑似視点行列Vm
・疑似射影行列Pm
各頂点の構成は以下の通りである。  
（ウ）あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおける頂点位置p0=[x,y,z,1]T
・ノードへのリンクm
（エ）動的に定められる情報は以下の通りである。
・現在の頂点位置p=Mmp0
［基本手法の描画工程］
本発明における描画工程の基本手法では、以下のような手順を用いてもよい。
【００７１】
基本手法の描画工程は、図４に類似しているが、以下に示す実施例においては、以下に示す基本的手法を用いることを前提に説明する。なお、本発明は、この基本的手法に限定されるものではない。
カメラの配置（ステップ４０４）と、頂点の変換（ステップ４０６）において、複数の視点行列と射影行列を用意し、使用することが望ましい。以下、この詳細について、図４を再度用いて説明する。
【００７２】
［ステップ４０２：ポーズの決定］
先に述べた手法に基づき、各ノードmに、モデリング行列Mmを設定する。また、このモデリング行列によって変換されたターゲット点の現在位置tm=Mmt0mと、ジョイント点の現在位置jm=Mmj0mとをそれぞれ計算する。
【００７３】
［ステップ４０４：カメラの配置］
まず、基本となるカメラパラメータ（視点の位置e0、カメラの方向θ0、画角）を設定する。これらの情報から、視点行列V0、射影行列P0を作成する。
【００７４】
視点行列V0は、視点位置e0を原点とする移動行列T（pをp‐e0に平行移動する）と、視線方向θをZ軸に回転する回転行列R0によってV0=R0T0として定義される。
射影行列には、既に記載した形式の行列を設定する。
【００７５】
【数８】
2014149748.tif 000010
このときp00,p11が、それぞれ水平方向・垂直方向の画角（その半分の正接の逆数）になる。
【００７６】
各セグメントmに、カメラパラメータ（視点の位置、カメラ方向、画角）を設定する。これらの情報から、視点行列Vm、射影行列Pmを作成する。
【００７７】
［ステップ４０４その１：擬似視点の仮位置を定める］
疑似視点の位置を定める。
【００７８】
親階層の疑似視点位置enとtmを結んだ直線の上に、疑似視点位置emを設定する。
em=(en+ηmtm)/(1+ηm)
本明細書では、この比率を「誇張係数」と呼び、値をηmとする。この値には、ノード構造体にあらかじめ保存されている定数パラメータを読み出して利用することが望ましい。誇張係数によって、誇張される度合いを調整することができる。誇張係数が大きくなるほど、誇張される度合いが高くなる。誇張係数が0であれば、親階層の擬似視点から見える画像と等しくなる。
【００７９】
疑似視点位置emとカメラ方向から、疑似視点行列Vmを作る。疑似カメラの方向は基本カメラ（疑似でないカメラ）の方向と同じ方向にすることが望ましい。
【００８０】
［ステップ４０４その２：擬似射影行列のズーム補正量を決定する］
疑似射影行列の画角（カメラのレンズの焦点距離に相当する）を補正し、ジョイント点jm含む平面z=Vnjm.z（en視点座標系）において、親ノードの疑似射影行列で写した画像のスケールと、このノードの疑似射影行列で写した画像のスケールが、一致するようにする。
【００８１】
親ノードの疑似射影行列Pnが既に確定しており、
【００８２】
【数９】
2014149748.tif 000011
であるとする。これを元に、ノードmの射影行列Pmを求める。Pmの成分は次のとおりとする。
【００８３】
【数１０】
2014149748.tif 000012
まず、以下のように画角のみを修正した疑似射影行列P'mを作る。
【００８４】
【数１１】
2014149748.tif 000013
［ステップ４０４その３：擬似射影行列の斜め補正量を決定する］
疑似射影行列の斜め補正量を修正し、ジョイント点jmを含む平面z=Vnjm.z（en視点座標系）において、親ノードの疑似射影行列で写した画像と、このノードの疑似射影行列で写した画像が、一致するようにシフト量を設定する。
【００８５】
シフト量を設定する前の疑似射影行列P'mに対して、(0,2)成分及び(1,2)成分を以下のように修正し、これをPmとする。
【００８６】
【数１２】
2014149748.tif 000014
以上のステップ４０４のその１〜ステップ４０４その３の手順に従って、トップダウンで親ノードから順に疑似カメラを配置することができる。
【００８７】
［ステップ４０６：頂点の変換］
モデルの各頂点（基本ポーズにおける位置座標をp0とする）に対し対応するノードmを検索し、そのノードの疑似視点行列と疑似射影行列を用いて、以下の式によって誇張表現での視野空間の位置を計算する。
[x,y,z,w]T=PmVmMmp0
頂点は、二次元画像上の点(x/w,y/w)に写像される。
【００８８】
また、別途通常の視点行列と射影行列を用いて、通常の視野空間の位置（基本カメラを使って射影変換された座標値）
[x0,y0,z0,w0]T=PVMmp0
の値を計算し、z0/w0を奥行き深度の値とすることが望ましい。これは、異なる疑似カメラで描画されたオブジェクト間の深度値比較に、一貫性を持たせるためである。この奥行きの深度の値は、たとえばＺバッファを用いて、以下のステップ４０８において、塗りつぶすべき手前にある画像を描画するときに用いてもよい。
【００８９】
［ステップ４０８：画素の塗り潰し］
各面について、頂点で囲まれた領域の画素を塗り潰す。またその際、深度値z0/w0が最も遠い面から描き、近い面で上書きしながら描画する。
【００９０】
これらの手順に従って描画することで、パースの効果を誇張した映像生成が行われる。
【００９１】
以上、基本実施例として、誇張映像の描画方法について説明した。この技法を発展させて、更に以下の実施例を開示する。
【００９２】
実施例１：関節部位の滑らかな接合
実施例２：誇張の非整合の解消
実施例３：アニメーションの平滑処理
実施例４：誇張係数パメラータの設定
実施例５：誇張量の動的な調整
実施例６：ピッキング処理
【実施例１】
【００９３】
関節部位の滑らかな接合
【００９４】
剛体関節モデルに特定のポーズをとらせる場合には、各部位ごとに回転と移動をすれば良い。しかしながら、人間又は動物のようなモデルの関節部位の結合を自然に見せるためには、関節が曲がってもそれを覆う皮膚を滑らかに接合させることが望ましい。
【００９５】
このようなモデルを表現する手法として、スキンメッシュ又はエンベロープと呼ばれる技法を用いてもよい。
【００９６】
これらの技法では、非表示のオブジェクトを用意し、その変形にあわせてモデルの形状を変化させてもよい。たとえば、人型のモデルをスキンメッシュで稼働させる場合には、モデルの内部にスケルトン又はボーンと呼ばれる非表示の剛体オブジェクトを骨組み（ボーン）として設定し、この骨組みを動かしてポーズを表現する。
図９は、人間型モデルへ適用したボーン９００の例である。
【００９７】
ボーンの回転変換と移動変換にあわせて、モデル表面の各頂点の位置が定められる。特にセグメントの間にある関節周辺の頂点では、二つ以上のボーンから影響を受け、各ボーンの変換に従って定められるそれぞれの位置を補間した点を頂点の位置としてもよい。
【００９８】
エンベロープ処理を適用したモデルに対して映像を作成するための手法を以下に例示する。
【００９９】
誇張表現においてもこの動作を実現するため、各頂点が影響を受けるボーンと影響度の重み付け値を保持することが望ましい。
【０１００】
［処理の概要］
スキンメッシュ処理を用いるモデルに対しては、前述の基本技法のみではマルチカメラを用いた誇張描画を実現することが困難な場合がある。そこで、スキンメッシュを用いたオブジェクトに誇張描画を行うための処理として、頂点に視点行列と射影行列を適用して同次表現の四次元ベクトルの値を作った後、w値で除算して通常の二次元画像上の位置情報に変換することが望ましい。そのあとで、影響度に合わせた補間処理を行うことが望ましい。
【０１０１】
［構成要素］
図１０にジョイントとエンベロープの例を示す。既に述べたように、三次元のモデル１００２は、たとえば多数の三角形面（ポリゴン）で構成されており、各三角形の頂点データを三次元ベクトルとして保持している。
【０１０２】
ボーンは頂点に影響を与える範囲を持つ。本明細書では、このボーン１００４が影響を与える範囲を示すための幾何データを、エンベロープと呼ぶ。
【０１０３】
エンベロープによる影響範囲の設定例を以下に説明する。ボーンの周辺に内部境界面１０１０、その周りに外部境界面１０２０を設定する。ボーンから頂点への影響度qとして、内部境界面１０１０の内側にある頂点には1.0、外部境界面１０２０の外側にある頂点には0.0、その間にある頂点には、二つの境界面からの距離に応じて補間した値（ポリゴンの頂点の値）を与えてもよい。
【０１０４】
関節の周辺部においては、一つの頂点が、複数のエンベロープから影響度が与えられる。各頂点は、参照すべきノード（ボーン）のID番号をリスト化したデータ[m0,m1,m2,…,mK−1]と、それぞれのノードが頂点に与える影響度をリスト化したデータ[q0,q1,q2,…,q K−1]をもつ。影響度の総和は1、すなわちΣqk=1に設定することが望ましい。以下の説明では影響度の総和を1とする。
【０１０５】
（ア）ノードの構成：
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置t0m
・基本ポーズにおけるジョイント点の位置j0m
・内部境界面を示す幾何モデル（非可視頂点の集合）
・外部境界面を示す幾何モデル（非可視頂点の集合）
・誇張係数ηm
・親ノードへのリンクn
動的に定められる情報は以下の通りである。
・現在のターゲット点の位置tm
・現在のジョイント点の位置jm
・内部境界面を示す幾何モデルの現在姿勢（非可視頂点の集合）
・外部境界面を示す幾何モデルの現在姿勢（非可視頂点の集合）
・モデリング行列Mm
・疑似視点位置em
・疑似視点行列Vm
・疑似射影行列Pm
（イ）頂点の構成は以下の通りである。
【０１０６】
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおける頂点位置p0
・ノードへのリンク（リスト）[m0,m1,m2,…,mK−1]
・影響度（リスト）[q0,q1,q2,…,qK−1]
動的に定められる情報は以下の通りである。
・現在の頂点位置ΣqkMmkp0
［描画工程］
描画のための工程全体の例を以下に示す。図４のフローを用いて説明する。
【０１０７】
［全体の流れ］
本実施例の工程全体の流れは、他の実施例とほぼ同様の構成となる（図４）。ただし、ステップ４０６「頂点の変換」には主要な変更が加えられている点に留意すべきである。
【０１０８】
［ステップ４０２：ポーズの決定］
先に述べた手法に基づき、各ノードmに、モデリング行列Mmを設定する。また、このモデリング行列によって変換されたターゲット点の現在位置tm=Mmt0mと、ジョイント点の現在位置jm=Mmj0mとをそれぞれ計算する。この具体方法については前述の基本実施例に準じて実行してもよい。
【０１０９】
［ステップ４０４：カメラの配置］
各ノードmに、カメラパラメータ（視点の位置、カメラ方向、画角）を設定する。これらの情報から、視点行列Vm、射影行列Pmを作成する。この具体方法については前述の基本実施例に準じて実行してもよい。
【０１１０】
［ステップ４０６：頂点の変換］
頂点の変換についても基本実施例に準じて実行してもよい。なお、以下の点で変更を加えてもよい。
【０１１１】
図１１は、ボーンの影響度を加味したポリゴンの頂点の変換のフローの詳細を示している。
【０１１２】
ステップ１１０２において、基本ポーズにおけるポリゴンの頂点の位置座標p0を読み込む。
【０１１３】
ステップ１１０４において、パラメータを初期化する。
【０１１４】
ステップ１１０６において、ポリゴンの各頂点に、関連付けられたボーンのリスト[m0,m1,m2,…,mK−1]と頂点に与える影響度[q0,q1,q2,…,qK−1]を呼び出す。Kは、頂点に影響を与えるボーンの数を表し、頂点ごとに固有の値を持っている。
【０１１５】
ステップ１１０８において、mk(k=0,1,…,K‐1)のそれぞれについて、頂点の座標変換を計算する。
[xk,yk,zk,wk]T=PmkVmkMmkp0
ステップ１１１０において、頂点を、二次元画像上の点に写像し、影響度を掛けて足し合わせる。
(Σqk(xk/wk),Σqk(yk/wk))
ステップ１１１２、及びステップ１１２０において、K回繰り返す。
【０１１６】
ステップ１１１２において、以下の計算式により、通常の射影行列で深度値を計算し、z0/w0を奥行き深度の値とする。
[x0,y0,z0,w0]T=PVΣqkMmkp0
ステップ１１１６において、ポリゴンの頂点座標のx,yとzを合成。
【０１１７】
ステップ１１１８において、ポリゴンの全頂点において、上記の計算を繰り返す。
【０１１８】
［ステップ４０８：画素の塗り潰し］
各面について、頂点で囲まれた領域の画素を塗り潰す。またその際、深度値z0/w0が最も遠い面から描き、近い面で上書きしながら描画する。（前述の手法と同様であってもよい。）
［実施例１の変形例］
誇張表現の描画における頂点の補間処理を、異なるバリエーションで実現する例を以下に挙げる。
【０１１９】
図１２は、実施例２の変形例による頂点の変換のフローを示している。
【０１２０】
前述の実施例１の手法における「ステップ４０６：頂点の変換」フェーズにおいて、以下のように計算を行ってもよい。
【０１２１】
ステップ１２０２において、基本ポーズにおけるポリゴンの頂点の位置座標p0を読み込む。
【０１２２】
ステップ１２０４において、パラメータを初期化する。
【０１２３】
ステップ１２０６において、ポリゴンの各頂点に、関連付けられたボーンのリスト[m0,m1,m2,…,mK−1]と頂点に与える影響度[q0,q1,q2,…,qK−1]を呼び出す。
【０１２４】
ステップ１２０８において、頂点に影響を与えるノード[m0,m1,m2,…,mK−1]のそれぞれについて、通常のスキンメッシュと同様に補間した座標位置p'を、たとえば下記の計算式により計算する。
p'=ΣqkMmkp0
ステップ１２１０において、このp'を用いて、mk(k=0,1,…,K−1)のそれぞれについて、疑似視点行列と疑似射影行列を適用した誇張視野空間の座標を、たとえば下記の計算式により計算する。
[xk,yk,zk,wk]T=PmkVmkp'
ステップ１２１２において、この頂点の変換結果を、たとえば下記の計算式により二次元画像上の点に写像する。
(Σqk(xk/wk),Σqk(yk/wk))
ステップ１２１４、ステップ１２２０において、K回繰り返す。
【０１２５】
ステップ１２１６において、以下の計算式により、通常の射影行列で深度値を計算し、z0/w0を奥行き深度の値とする。
[x0,y0,z0,w0]T=PVΣqkMmkp0
ステップ１２１８において、ポリゴンの頂点座標のx,yとzを合成する。
【０１２６】
ステップ１２１９において、ポリゴンの全頂点において、上記の計算を繰り返す。
【０１２７】
すなわち、この変形例の場合には、影響度qkによる補間作業は、モデリング行列と、視点・射影行列の二回行われることになる。
【実施例２】
【０１２８】
誇張の非整合の解消
【０１２９】
以下に示す実施例２は、それぞれのパーツに異なる射影行列を適用するために起こる不具合を改善することができる。基本技法では、関節部位のそれぞれに対して異なるカメラパラメータで映像を作る。このため、誇張されたパーツの位置関係に矛盾を生じることがある。
【０１３０】
図１３は、描画において、重なりが生じる例を示している。パース誇張なしの画像（図１３(A)）と、パース誇張の処理により、両手先の描画が重なってしまった画像（図１３(B)）とが示されている。  パース誇張なしの画像（図１３(A)）では、近接して両手を前に出している場合などにおいて、本来は重ならない。しかしなら、図１３(B)では、物体（両手先）が誇張されて大きく表示される結果、互いに重なって表示されることがある。この理由は、右手と左手に設定されたカメラのパラメータがそれぞれ独立に作成されたため、出来上がった誇張画像では手の画像が重なってしまうからである。図１３(C)は、この重なりを回避する処理を施した例である。
【０１３１】
カメラの位置を三次元的な重心点に動かして違和感を緩和させてもよい。この場合は、カメラを移動させる量が特定できないため、重なりを回避できるまで移動操作を繰り返せばよい。なお、この場合、画面内の見た目の大きさと配置位置が同時に制御されるため、適切なカメラパラメータが求められないことがある。そして、反復の初期条件によって結果が変化する。このため、必ずしも画像上の制約を満たす結果をもたらすとは限らない。さらに、この手法をアニメーションに適用した場合には、時間的に連続したフレームの映像であっても、映像的には互いに連続したものにならず不自然な映像となることがある。（この点については、実施例３で後述する）
以下に示す実施例２は、このような課題にも対応できる。
【０１３２】
［処理の概要］
以下に詳述する実施例３では、たとえば視線方向に対して垂直な方向へ疑似視点位置を移動させる方法を用いる。また、疑似視点位置の移動量に対する、画面上での像の移動量の比率を計算し、仮配置したオブジェクトが重畳しているのに合わせて疑似視点の移動距離を算出する。
【０１３３】
［構成要素］
図１４は、誇張描画による像の拡張がもたらす重畳を回避する例を示している。図１４を用いて、画像の重畳を回避する例を概念的に説明する。図１４(A)は、誇張を行ったために、描画が重なってしまった状態を表している。第１のターゲット点の位置tmと、第２のターゲット点の位置tkが表示されている。各ターゲット点には、予め衝突半径が定義されているものとする。図１４(A)においては、誇張を行わない場合の衝突半径１４０８が示されている。その他の衝突半径についても、同様に定義されている（不図示）。そして、誇張表示を行わない場合の衝突領域１４０４と、衝突領域１４１４が示されている。また、誇張表示を行った場合の衝突領域１４０６と衝突領域１４１６が示されており、両者は重畳して描画されている。重畳して描画される理由は、両者の点に対して、異なる２つの視点（２つのカメラ）を用いて誇張を行っているためである。
【０１３４】
図１４(B)は、２つの視点の位置等を変更して、画像上のターゲット点tmとターゲット点tkの位置を、それぞれベクトル１４５０及びベクトル１４６０だけずらす操作を行った例を示している。この操作の詳細は後述する。この操作によって、画像１４０６は画像１４２６に移動し、画像１４１６は画像１４３６に移動する。その結果、誇張された画像１４２６と誇張された画像１４３６は、衝突しない状態で描画される。
【０１３５】
以下に、画像の重畳を回避する具体例を説明する。
【０１３６】
シーン内には、頂点データで構成された3Dモデルが配置される。頂点データは特定のノードに関連づけられており、ノードの配置の変化に応じてアニメーションする場合を想定する。
【０１３７】
また、シーンを観察する基本視点位置と方向が決められているとする。この位置と方向から視点行列を定めることができる。また、映像の画角情報が決められている。この画角から射影行列が定められる。これらの視点位置、方向、及び画角の情報は、入力情報に応じてユーザーが決定するか、又はあらかじめ保存された情報によって決定され得る。これらの変化による画像の変化をいわゆるカメラアニメーションと呼ぶ。
【０１３８】
ノードの構成を以下のように定める。
【０１３９】
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置t0m
・基本ポーズにおけるジョイント点の位置j0m
・衝突半径rm
・誇張係数ηm
・親ノードへのリンクn
動的に定められる情報は以下の通りである。
・現在のターゲット点の位置tm
・現在のジョイント点の位置jm
・モデリング行列Mm
・疑似視点位置em
・疑似視点行列Vm
・疑似射影行列Pm
・点座標pに対する誇張画像内での見た目の拡大率ρm(p)
・画像内でのターゲット点の衝突半径rmρm(tm)
頂点の構成は以下の通りである。
・基本ポーズにおける位置座標p0=[x,y,z,1]T
・現在の位置座標p=Mmp0
・ノードへのリンクm
［描画工程］
描画のための工程全体を以下に説明する。
【０１４０】
［全体の流れ］
工程全体の流れは、既に説明した実施例とほぼ同様の構成となる。なお、以下に説明するように、疑似視点位置の配置計算方法に主要変形を加えることが望ましい。図４に示したステップを用いて説明する。
【０１４１】
［ステップ４０２：ポーズの決定］
先に述べた手法に基づき、各ノードmに、モデリング行列Mmを設定する。また、このモデリング行列によって変換されたターゲット点の現在位置tm=Mmt0mと、ジョイント点の現在位置jm=Mmj0mとをそれぞれ計算する。
【０１４２】
［ステップ４０４：カメラの配置］
この実施例２では、既に述べた手法によってカメラ配置方法に基づいて射影中心を一旦設定し、その後にカメラ位置の修正を行うことが望ましい。
【０１４３】
上記の制約条件を満たすPmVmは、図に１５示す手順で作成することができる。
【０１４４】
ステップ１５００において、ジョイントとターゲットの位置を設定する。
【０１４５】
読み出した各ジョイントmの回転角度情報Rm等によって、セグメントの向きと位置を定め、キャラクタのポーズを決定する。これらの情報を前述の基本手法に適用し、各セグメントmの移動変換を行う行列Mmを作成する。
【０１４６】
ステップ１５０１において、疑似視点の仮位置を定める。親階層の疑似視点位置enと自分のターゲット点位置tmとを結んだ直線の上に、以下の式を用いて、疑似視点位置emを設定する。
em=(en+ηmtm)/(1+ηm)
本実施例では、ηmには、ノード構造体にあらかじめ保存されている定数パラメータを読み出して利用する。
【０１４７】
疑似視点位置emとカメラ方向から、疑似視点行列Vmを作る。疑似カメラの方向は基本カメラ（疑似でないカメラ）の方向と同じ方向にすることが望ましい。
【０１４８】
ステップ１５０２において、疑似射影行列のズーム補正量を決定する。疑似射影行列の画角を補正し、ジョイント点jmを含む平面z=Vnjm.z（en視点座標系）において、親ノードの疑似射影行列で写した画像のスケール（射影された画像の置きさ）と、このノードの疑似射影行列で写した画像のスケール（射影された画像の大きさ）とが、略一致するようにする。
【０１４９】
親ノードの疑似射影行列Pnが既に確定しており、
【０１５０】
【数１３】
2014149748.tif 000015
であるとする。これを元に、ノードmの射影行列Pmを求める。Pmの成分は次のとおりとする。
【０１５１】
【数１４】
2014149748.tif 000016
まず、以下のように画角のみを修正した疑似射影行列P'mを作る。
【０１５２】
【数１５】
2014149748.tif 000017
ステップ１５０３において、疑似射影行列の斜め補正量を決定する。すなわち、疑似射影行列の斜め補正量を修正し、ジョイント点jmを含む平面z=Vnjm.z（en視点座標系）において、親ノードの疑似射影行列で写した画像と、このノードの疑似射影行列で写した画像が、一致するようにシフト量を設定する。
【０１５３】
シフト量を設定する前の疑似射影行列であるP'mに対して、(0,2)及び(1,2)成分を以下のように修正し、これをPmとする。
【０１５４】
【数１６】
2014149748.tif 000018
ステップ１５０４において、疑似射影行列での各種情報を求める。画像が互いに衝突していないかを検討するために、各ノードの疑似射影行列について、以下の値を計算する。
【０１５５】
（１５０４−１）ターゲット点の二次元像位置を計算する。疑似射影処理PmVmによって写された画面上の座標(x,y)は、-1<x<1,-1<y<1となっている。この値に対して画面の縦横比を調整し、-1<x<1,-Sa<y<Saにした二次元座標値を二次元像と呼ぶことにする。ただし、Saは画面の縦横比(縦サイズ/横サイズ)である。
【０１５６】
ターゲット点tmの二次元像をt'mとする。t'mは次式により求められる。
t'm.x=PmVmtm.x/PmVmtm.w
t'm.y=[PmVmtm.y/PmVmtm.w]Sa
（１５０４−２）ターゲット点の周りの二次元像のサイズを計算する。ターゲット点を中心とする微小三次元球（半径δ、δ<<1とする)の、二次元像の半径をρm(tm)δとし、このρm(tm)を計算する。ターゲット点を視点座標系のx方向にδだけ移動させたときの二次元像の移動量を使って近似してもよい。
ρm(tm)=[Pm(Vmtm+[δ,0,0,0]T).x/Pm(Vmtm+[δ,0,0,0]T).w-PmVmtm.x/PmVmtm.w]/δ
=Pm[δ,0,0,0]T.x/PmVmtm.w/δ
=pm00/PmVmtm.w
このρm(tm)をターゲット点の周りでの二次元像の拡大率と呼ぶ。
【０１５７】
（１５０４−３）擬似視点位置の移動に対する、二次元像の移動比率を求める。疑似視点位置emがem視点座標系のx方向に微小量(δ,0,0)だけ移動した場合に、画像上でターゲット点が移動する量を計算する。射影行列Pmを固定したまま、ジョイント点jmが(δ,0,0)だけ微小移動した場合に、ジョイント点の二次元像が移動する量は、ジョイント点の周りでの二次元像の拡大率ρm(jm)を用いて、ρm(jm)δと表現できる。したがって視点位置が(−δ,0,0)だけ移動した場合にも、ジョイント点はρm(jm)δだけ移動することとなる。
【０１５８】
疑似射影行列では、斜め補正の量を調整することで、ジョイント点の画像上の位置を一定に保つ。この斜め補正を行った場合、ターゲット点は
[Vm(jm−tm).z/Vm(jm−em).z]ρm(jm)δ
だけ移動する。したがって、疑似視点位置emが視点座標系のx方向に微小量(δ,0,0)だけ移動した場合には、ターゲット点は画像上で
S(tm)δ=−ρm(jm)[Vm(jm−tm).z/Vm(jm−em).z]δ
だけ移動することとなる。この
S(tm)=−ρm(jm)[Vm(jm−tm).z/Vm(jm−em).z]
を、疑似視点位置の移動に対するターゲット点の二次元像の移動比率として保存しておくことが望ましい。
【０１５９】
図１６は、疑似視点位置の移動によるターゲット点の移動を示している。
【０１６０】
点１６１０が、元の擬似視点位置を用いた場合のターゲット点の像の位置を示している。そして、点１６２０が擬似視点をδだけ移動した場合のターゲット点の像の位置を示している。
【０１６１】
図１５に戻る。
【０１６２】
ステップ１５０５において、誇張画像のノード間で衝突判定を行う。誇張画像の全てのノードの組み合わせのペアに対して、誇張画像上で衝突が起こっていないかをチェックする。修正前の疑似視点位置を、e'mと表記して、詳細を以下に説明する。
【０１６３】
（１５０５−１）ＸＹ方向での衝突が起こっているか否かの判断を行う。この判断は、以下のようにして行ってもよい。
【０１６４】
二つのセグメントのペアを選び出す。それぞれのノード番号をm,kとする。それらのセグメントのターゲット点の二次元像t'm、t'kに対して、二次元平面上での距離を調べる。
【０１６５】
d0=((t'm.x−t'k.x)2+(t'm.y−t'k.y)2)1/2
また、各ノードの衝突半径の、二次元平面上での大きさは、ターゲット点の衝突半径をそれぞれrm,rkとしたとき、ρm(tm)rm、ρk(tk)rkとなる。この和を
d1=ρm(tm)rm+ρk(tk)rk
とする。
【０１６６】
d0<d1、すなわち衝突半径の、二次元平面上での大きさの和が二次元平面上での距離よりも大きいならば、二次元平面上で衝突が起こっているとみなしてもよい。そして、以下のステップ（１５０５−２）に進む。
【０１６７】
（１５０５−２）Ｚ方向で衝突範囲にあるかを確認する。ノードの奥行き方向の差をd2=|Vmtm.z−Vmtk.z|と設定する。
d2<rm+rk、すなわち奥行きの差が衝突半径の和よりも小さいならば、奥行き方向について衝突が起こりうるものとみなし、ステップ（１５０５−３）に進む。
【０１６８】
（１５０５−３）衝突の回避量を計算する。衝突を回避するために、それぞれの二次元像を移動させるべき量を計算する。衝突の回避に必要な二次元画像上で移動距離は、上記（１５０５−１）における変数によってd1−d0として計算できる。
【０１６９】
ノードごとにあらかじめ重さを設定しておき、この重さを使って移動量を配分してもよい。ノードm,kの重さを、それぞれαm、αkとする。ターゲット点tmの二次元画像上での移動量は、必要な移動距離にαm/(αm+αk)を掛けたものにしてもよい。
【０１７０】
二次元画像上でのターゲット点tmの移動方向（単位長の二次元ベクトル）は、
τ0m=(t'm−t'k)/|t'm−t'k|
で表せる。
【０１７１】
これに移動量を掛け、ターゲット点tmの二次元画像上の移動量（二次元ベクトル）は、
τ1m=(d1−d0)(αm/(αm+αk))τ0m
となる。
【０１７２】
この画像上の移動量τ1mを実現する疑似視点位置の修正量（視点座標系）をμmとし、これを次式により求めることができる。
μm.xy=[τ1m/S(tm)].xy
μm.zw=(0,0)
（１５０５−４）擬似視点位置を修正する。最終的な修正後の疑似視点位置は、次式を満たすemとなる。
Vmem=Vme'm+μm
得られたemを使ってVmを作り直す。この修正を行うことによって、各セグメントのターゲット点の周辺物体が、不自然に重なり合うことを回避する。
【０１７３】
ステップ１５０６において、修正された疑似視点に合わせて射影行列のズーム補正量を再計算する。  ステップ１５０７において、修正された疑似視点に合わせて射影行列の斜め補正量を再計算する。このように擬似視点位置を修正することは、描画のためのパラメータの修正を意味する。
【０１７４】
［ステップ４０６：頂点の変換］
図４に戻り、ステップ４０６において頂点の変換を行う。モデルの各頂点（基本ポーズにおける位置座標をp0とする）に対し対応するノードmを検索し、そのノードの疑似視点行列と疑似射影行列を用いて、誇張表現での視野空間の位置を計算する。
[x,y,z,w]T=PmVmMnp0を計算する。
【０１７５】
頂点は、最終的に二次元画像上の点(x/w,y/w)に写像される。
【０１７６】
また、別途通常の視点行列と射影行列を用いて、通常の視野空間の位置（基本カメラを使って射影変換された座標値）
[x0,y0,z0,w0]T=PVMmp0
の値を計算し、z0/w0を奥行き深度の値とする。
【０１７７】
［ステップ４０８：画素の塗り潰し］
二次元画像上の画素を塗り潰す（ラスタライズ処理を行う）。
【０１７８】
この塗り潰しにおいては、最終的に手前の三角形の色が見えなければならないので、描画順序が重要になる。この描画の奥行き順序を守るために、頂点の変換によってえられた深度値z0/w0を用いて面をソートしておき、最も遠い面から描き、近い面で上書きしながら描画してもよい。
【０１７９】
上述の実施例２の手法による物体の重畳回避では、奥行き方向（視点座標系のz方向）のカメラの移動を行わなくてもよく、射影面に平行な方向（視点座標系のxy面）にカメラの移動を行ってもよい。またこの際、たとえば、射影面に平行な方向に疑似視点位置を動かす量と、画像上でオブジェクトが動いて見える量の比率をあらかじめ計算している。この比率を用いて、画像上でのオブジェクト重畳の回避に必要な量だけ疑似視点位置を動かしている。
【０１８０】
［その他の変形例について］上記実施例２の手法以外に、セグメントが衝突した場合、二つの疑似視点位置em,ekを、三次元的な重心(em+ek)/2の方向に向けてそれぞれ移動させてもよい。なお、この場合、移動量が不確定なため、微小量の移動を問題が解決するまで反復させることが望ましい。
【実施例３】
【０１８１】
アニメーションの平滑処理
【０１８２】
実施例２で取り上げた誇張描画の手法をアニメーションに用いた場合には、アニメーションの一部のフレームで、急激な姿勢の移動が起こる場合がある。これは、見た目上の重畳が起こった場合にのみ修正処理の調整効果が加わることに起因する。
【０１８３】
この場合、以下の手順を導入することで、アニメーションにおいて、よりスムーズにオブジェクトの重畳を回避することができる。
【０１８４】
実施例３の以下の説明は、冗長を避けるために、実施例２と異なる部分を中心に説明する。
【０１８５】
［処理の概要］
アニメーションの各フレームfについて、疑似視点の仮位置e'm(f)を定める。この時、アニメーションの途中で、物体同士が衝突・接近したために表示位置を修正する処理が発生することがある。たとえば、このような修正が行われるフレームfcをあらかじめ検出し、その前後のフレームfc+1,fc−1の修正量を、フレームfcの修正量に近づける。この補正処理をN回反復処理して繰り返すと、修正量が伝播されて平滑化を行うことができる。
【０１８６】
［構成要素］
視点位置・方向・画角の情報は、入力情報に応じてユーザーが決定するか、又はあらかじめ保存された情報によって決定され得る。これらの変化による画像の変化をカメラアニメーションと呼ぶ。カメラアニメーションにおいては、視点行列Vと射影行列Pが、それぞれフレームfの関数になる。
【０１８７】
また、キャラクタのポーズの変化に伴うアニメーションを、ポーズアニメーションと呼ぶ。ポーズアニメーションではモデリング行列Mmがフレームfの関数になる。
【０１８８】
ノードの構成を以下に示す。
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置t0m
・基本ポーズにおけるジョイント点の位置j0m
・衝突半径rm
・誇張係数ηm
・親ノードへのリンクn
動的に定められる情報は以下の通りである。
・現在のターゲット点の位置tm=Mm(f)t0m
・現在のジョイント点の位置jm=Mm(f)j0m
・モデリング行列Mm(f)
・疑似視点位置em(f)
・疑似視点行列Vm(f)
・疑似射影行列Pm(f)
・時間フレーム数に比例した疑似視点距離のデータ
頂点の構成は以下の通りである。
・基本ポーズにおける位置座標p0=[x,y,z,1]T
・現在の位置座標p=Mm(f)p0
［描画工程］
描画のための工程全体を示す。
【０１８９】
［全体の流れ］
工程全体の流れは先の実施例とほぼ同様の構成となるが、アニメーション時間に応じてフレーム数だけのパラメータを生成し、互いの影響を考慮することが望ましい。また、後述するように、疑似視点位置の修正を伝播させる計算を導入することが望ましい。他の実施例と同様に、図４を用いて処理の流れを順に説明する。
【０１９０】
［ステップ４０２：ポーズの決定］
各フレームfごとに、全ノードmのモデリング行列Mmを設定する。また、このモデリング行列によって変換されたターゲット点の位置tm(f)=Mm(f)t0mと、ジョイント点の位置jm(f)=Mm(f)j0mとをそれぞれ計算する。
【０１９１】
［ステップ４０４：カメラの配置］
カメラの配置は、たとえば実施例２での処理に基づき、以下の工程手順を経て決定してもよい。
【０１９２】
ただし、実施例２におけるステップ１５００〜ステップ１５０４の各処理工程では、フレームfに応じた値をそれぞれ計算し、保存する。また、ステップ１５０５の「誇張画像のノード間での衝突判定」においては、フレーム間の平滑化処理のために以下の１５０５−ａ１〜１５０５−ａ４の各処理を行う。
【０１９３】
図１７は、アニメーション平滑化のための処理フローを示している。以下では、図１５及び図１７を用いて実施例２と異なる部分について説明を行う。
【０１９４】
（１５０５−ａ１）
全フレームに渡って以下の１５０５−ａ１の詳細処理を行い、修正量μn(f)を設定する（fはフレーム番号、nはノード番号）。
【０１９５】
（１５０５−ａ１−０）修正量の初期値の代入
ステップ１７０２において、初期値の代入を行う。すなわち、
μn(f).xy=(0,0)
とする。
【０１９６】
（１５０５−ａ１−１）修正量の設定
ステップ１７０４ないしステップ１７１２によって、全てのノードの組み合わせ(k,m)について、以下の１５０５−ａ１−１−１〜１５０５−ａ１−１−２の処理を行う。
【０１９７】
（１５０５−ａ１−１−１）衝突確認
ステップ１７０４において、ノードの対の選択を行う。そして、ステップ１７０６において、フレームfでxy方向での衝突が起こっているかを確認する。また、フレームfで、z方向で衝突範囲にあるかを確認する（ステップ１７０８）。衝突していれば、１５０５−ａ１−１−２でμm(f)、μk(f)を設定する。
【０１９８】
（１５０５−ａ１−１−２）修正量の計算
フレームfで衝突を回避するための、疑似視点位置（視点座標系）の修正量μm(f)を計算する。μk(f)についても同様に計算を行うことができる（ステップ１７１０）。
τ0m=(t'm−t'k)/|t'm−t'k|
τ1m=(d1−d0)(αm/(αm+αk))τ0m
μm(f).xy=[τ1m/S(tm)].xy
μm(f).zw=(0,0)
（１５０５−ａ２）フレーム間修正量の平滑化
ステップ１７１４で隣接ノードを選択する。そして、ステップ１７１６において、フレーム間で、修正量μn(f)の平滑化処理を行う。各フレームfに対して、以下の１５０５−ａ２−１及び１５０５−ａ２−２の処理を行う。
【０１９９】
（１５０５−ａ２−１）修正量の平滑化
全てのノードについて、次式によって、フレームfの修正量μm(f)を平滑化する（mはノード番号）。
μm(f).xy←μm(f).xy+σ(μm(f+1).xy−μm(f).xy)+σ(μm(f−1).xy−μm(f).xy)
この式は、μm(f).xyの値をμm(f−1).xy及びμm(f+1).xyに近づける働きをする。σの値としては例えば0.5が挙げられる。本発明は、この値に限定されるものではない。この平滑化によって、１５０５−ａ１−１で設定した修正量が減ることも起こり得るが、下記１５０５−ａ４の反復により再度修正が行われる。
【０２００】
（１５０５−ａ２−２）衝突再判定
ステップ１７１８において、全てのノードの組み合わせ(k,m)について、１５０５−ａ１−１−１のルーチン処理を用いて、フレームfの画像上での衝突が再び発生していないかを判定する（ステップ１７２２）。衝突している場合、フレームfの修正量平滑化をキャンセルしてもよい（ステップ１７２０）。そして、次のフレームに処理を進める。
【０２０１】
（１５０５−ａ３）擬似視点位置を修正する
修正量μm(f)に基づいて、以下の式を利用して、疑似視点位置を修正する。
Vm(f)em(f)=Vm(f)e'm(f)+μm(f)
以上の処理を全隣接ノードに対して行う（ステップ１７２４）。
【０２０２】
（１５０５−ａ４）修正の反復
ステップ１７２６において、上記の１５０５−ａ１〜１５０５−ａ３の処理を繰り返す。計N回反復する。
【０２０３】
以上の処理によって、カメラ位置の移動量が決定される（ステップ１７２８）。  ［ステップ４０６：頂点の変換］
各フレームfに対して、頂点の変換を行う。
【０２０４】
モデルの各頂点（基本ポーズにおける位置座標をp0とする）に対し対応するノードmを検索し、そのノードの疑似視点行列と疑似射影行列を用いて、誇張表現での視野空間の位置を計算する。
[x,y,z,w]T=Pm(f)Vm(f)Mm(f)p0
頂点は、最終的に二次元画像上、別途通常の視点行列と射影行列を用いて、他の実施例と同様に、通常の視野空間の位置（基本カメラを使って射影変換された座標値）を求めればよい。すなわち、
[x0,y0,z0,w0]T=P(f)V(f)Mm(f)p0
の値を計算し、z0/w0を奥行き深度の値とすることができる。
【０２０５】
［ステップ４０８：画素の塗り潰し］
各フレームfに対して、二次元画像上の画素を塗り潰す（ラスタライズ処理を行ってもよい）。この塗り潰しにおいては、最終的に手前の三角形の色が見えなければならないので、描画順序が重要になる。この描画の奥行き順序を守るために、頂点の変換によってえられた深度値z0/w0を用いて面をソートしておき、最も遠い面から描き、近い面で上書きしながら描画してゆくことが望ましい。
【実施例４】
【０２０６】
誇張係数パメラータの設定
【０２０７】
以上の実施例では、関節部位のそれぞれに対して、カメラの位置を制御するためのパラメータ（誇張係数）をあらかじめ設定することが望ましい。なお、類似のモデルを既に作成した場合には、誇張係数として同じ値、又は略同じ値を用いることで作業を効率化することが期待できる。しかしながら、新しいモデルを作成したときに、以下のような理由でパラメータの流用が困難な場合が想定される。
（１）全てのモデルで関節部位が一対一に対応しているとは限らない。例えば、スカートのような洋服の部位、長い髪の毛等にもボーンを設定し、ポーズを定められるようにしたモデルがある。このような場合に、各部位に対してそれぞれ誇張係数を定める場合には、調整の手間が大きい。
（２）異なる体型の人型物体のモデルを作成した場合には、適切なパラメータを新たに設定しなければならない場合がある。
【０２０８】
以下に述べる実施例４は、誇張係数が定められていない新たなモデルに対しても、基本となる形状タイプを選択することによって誇張係数のパラメータが類推されて設定され得る。
【０２０９】
［処理の概要］
標準的な形状のモデル（標準エンベロープ）を用いる。ある特定のモデルに、既に適切な誇張係数が設定されていると仮定する。標準エンベロープ（あるいはモデル）のポーズ又は各部位寸法を調整することで、モデルの関節位置と標準エンベロープの対応する関節位置を概ね一致させることができる。その状態で、たとえば、標準エンベロープの各頂点に対して、最も近いターゲット点に関連付けられた誇張係数の値を、その頂点の誇張係数として保存する。
【０２１０】
誇張係数の値が保存された標準エンベロープをデータベースに保存し、新規モデル作成時に、この標準エンベロープの情報を呼び出して使うことができる。
【０２１１】
たとえば、新しいモデルの各ターゲット点に対して、標準エンベロープの最も近い頂点を探し、その頂点の誇張係数の値をターゲット点の誇張係数とする。
【０２１２】
標準エンベロープは、キャラクタの種類（体型など）に応じて複数用意してもよい。
【０２１３】
構成要素として、たとえば以下のものが挙げられる。
・モデル形状
・関節構造
・標準エンベロープモデル
標準エンベロープモデルの頂点データとして、たとえば以下のものが挙げられる。
・頂点の位置
・誇張係数
［全体の流れ］
全体の流れは、誇張係数を割り当て済みのモデルから、エンベロープに誇張係数をコピーする工程と、誇張係数が割り当てられていないモデルに、エンベロープから誇張係数をコピーする工程の二つに大きく分けられる。
【０２１４】
図１８は、モデルの各部位への誇張パラメータの設定のフローを示す図である。図１８(A)は、標準エンベロープ作成段階のフローの例を示している。図１８(B)は、新規モデルへの誇張係数のコピーのフローの例を示している。以下、実施例４の詳細を説明する。
【０２１５】
［Ａ．エンベロープ作成段階］
図１９は、3Dキャラクタとエンベロープの重ね合わせを示している。3Dキャラクタ１９０２は、すでに誇張係数が設定されていると仮定する。
【０２１６】
ステップ１８１２において、人間の標準形態を表す簡易形状のモデルである標準エンベロープ１９０４を読み込む。この標準エンベロープ１９０４は、複数の頂点から構成されているが、3Dキャラクタ１９０２よりは粗い（頂点数が少ない）作りであってもよい。
【０２１７】
ステップ１８１４において、関節点の位置のフィットが行われる。具体的には、3Dキャラクタ１９０２の関節点と、標準エンベロープ１９０４の関節点（たとえば、エンベロープの間節位置１９０６）の位置を略一致させる処理を行ってもよい。標準エンベロープ１９０４の関節点と同じ名前の関節点が3Dキャラクタ１９０２に設定されている場合には、標準エンベロープ１９０４の関節点の位置を3Dキャラクタ１９０２の関節点の位置に移動してもよい。関節の対応関係が誤りである場合、又は適切な関節が存在していない場合には、オペレータに関節点の位置を動かすよう促してもよい。
【０２１８】
標準エンベロープ１９０４の頂点pは、以下の手順で関節点の位置１９０６に合わせて移動させる。まず、標準エンベロープ１９０４の頂点Pの近傍の3Dキャラクタの関節点の位置(j0,j1,j2,…,jK-1)を抽出し、頂点Pから関節点の位置までの距離(d0,d1,d2,…,dK-1)を計算する。それらの関節点の移動量(v0,v1,v2,…,vK-1)を補間して、頂点Pの移動量vを以下のように決定してもよい。
【０２１９】
【数１７】
2014149748.tif 000019
ステップ１９１６において、誇張係数のコピーを行う。エンベロープの各頂点pについて、近傍のターゲット点を上位N個だけ探す。頂点pの近傍にあるターゲット点を(t0,t1,t2,…,tN-1)とし、pからターゲット点までの距離(d0,d1,d2,…,dN-1)を計算する。
【０２２０】
それらのターゲット点の誇張係数(η0,η1,η2,…,ηN-1)を補間して、誇張係数ηを以下のように決定してもよい。
【０２２１】
【数１８】
2014149748.tif 000020
ステップ１８１８において、エンベロープデータの保存が行われる。関節位置を変更し、エンベロープの各頂点の情報（誇張係数、3D情報、ターゲット点から頂点までの距離）を、データベースに保存してもよい。またこの際に、コピー元となった3Dキャラクタの画像と、作成者の名前、又は設定コンセプトの意図を記したテキスト情報も併せて保存してもよい。
【０２２２】
一般に、誇張の度合いをどのように設定するかについては必ずしも最適値がある訳ではなく、モデルの種類（男性キャラクタ／女性キャラクタ／ロボット／ぬいぐるみなど）、又は作家の個性などによってばらつきがある。そこで、誇張係数を設定するコンセプトとして、たとえば特定のアニメーション会社、又は特定の作家の作風をシミュレーションした場合には、シミュレーションのモデルとなった作家の名前を、設定コンセプトの意図を記したテキスト情報として記載してもよい。
【０２２３】
［Ｂ．新規モデルへの誇張係数のコピー］
まだ誇張係数が指定されていない3Dキャラクタのモデルに対して、以下の手順で誇張係数をコピーすることができる。
【０２２４】
ステップ１８３２において、前記のステップ１８１８で保存した標準エンベロープを呼び出す。標準エンベロープが複数用意されている場合には、キャラクタの種類（体型など）に応じて適切なものを選ぶ。選択の方法の一例を挙げる。データベースに蓄えられた既存の標準エンベロープ情報と、そのエンベロープ作成時に使われた3Dキャラクタの画像をデータベースから呼び出して、一覧画面上に提示する。この際、関節間の距離の比率が現在のモデルに近いものから順にソートして並べてもよい。またこの際に、作成者の名前、又は設定コンセプトの意図を記したテキスト情報も併せて表示してもよい。
【０２２５】
利用者はこの一覧の中から一つのモデルを指定し、その保存された標準エンベロープを呼び出す。複数の候補がある場合には、補間データの影響度を手動で操作する機構を用意してもよい。表示画面には、モデルの元情報が記載されており、誇張係数の設定コンセプトが保存されている。手動入力画面を用いることで、複数の選択肢の中から、状況に有った誇張パラメータを選び出すことができる。
【０２２６】
或いは、パターン認識技術を利用して、キャラクタとのマッチングを行ってもよい。所定のパターン認識技術を用いて、最も近い標準エンベロープを読み出してもよい。或いは、キャラクタに近い複数種類の標準エンベロープを取り出して、選択できるように表示してもよい。オペレータに複数種類のエンベロープから、１つの標準エンベロープを選択するよう促してもよい。
【０２２７】
ステップ１８３４において、関節位置のフィットを行う。標準エンベロープの関節位置を3Dキャラクタの関節位置に移動する。上述の手法を持用いて、エンベロープの関節位置をモデルの対応する関節位置に移動し、関節点の移動量(v0,v1,v2,…,vK-1)からエンベロープ頂点の移動量vを以下のように決定してもよい。
【０２２８】
【数１９】
2014149748.tif 000021
この移動量vに基づいて、エンベロープの頂点を移動させてもよい。
【０２２９】
ステップ１８３６において、拡張計数のコピーを行う。現在の3Dキャラクタのターゲット点について、もっとも近傍にある標準エンベロープの頂点を上位N個だけ探す。このN個の頂点からターゲット点までの距離及び頂点の誇張係数を、それぞれ(d0,d1,d2,…,dN-1)、及び(η0,η1,η2,…,ηN-1)とする。このN個の誇張係数を補間して、新しい誇張係数ηを以下のように決定してもよい。ただし、右辺のηkは標準エンベロープの頂点の誇張係数、左辺のηは新しい3Dモデルのターゲット点に保存される誇張係数である。
【０２３０】
【数２０】
2014149748.tif 000022
［複数モデルの混合］
また、複数のモデルを指定して読み込むことが必要になる場合がある。たとえば現在のモデルが長い髪の毛のボーンなどを保持しており、コピー対象としたいエンベロープにおいては対応するパーツが存在しない場合がある。この場合、その部分だけは別のモデルから誇張係数を呼び出して用いたいという要望が想定される。この場合に、以下のような処理を行ってもよい。
「ステップ１８３２のエンベロープの選択と読込」の工程において、複数（H個）のエンベロープデータと、それぞれの影響度q0,q1,q2,…,qH-1を入力する。
「ステップ１８３６の誇張係数のコピー」の工程において、以下のように誇張係数を計算してもよい。
【０２３１】
【数２１】
2014149748.tif 000023
ただし、右辺のηh,kはエンベロープから呼び出された誇張係数であり、左辺のηは新しい3Dモデルのターゲット点に保存される誇張係数である。この処理によって、関節点の近くにあるデータがより大きな重みづけをされるようになるため、参照するデータのうちで対応するボーンが存在しないモデルからの影響が小さくなる。
【０２３２】
［ボーンの利用］
ボーン構造を持った3Dキャラクタを扱う場合には、エンベロープの替わりにボーンを使う方法も可能である。標準エンベロープの替わりに標準ボーンモデルを用意してもよい。標準ボーンモデルの各ボーンに誇張係数を保存しておいてもよい。新しいキャラクタモデルを使う際には、まず標準ボーンモデルとの間で対応する部位のボーンどうし（複数対複数）に対応関係を付けてもよい。次にキャラクタの各ターゲット点に対して標準ボーンから誇張係数をコピーしてもよい。
【０２３３】
また、ブレンド比率を手動入力する機構を付与することによって、作家の誇張作風をブレンドするシミュレーションを行うこともできるようになる。
【実施例５】
【０２３４】
誇張量の動的な調整
【０２３５】
上述の基本技法では、関節部位の位置だけで、誇張の量が自動的に決まってしまう。しかしながら、実際にはパースの誇張を行いたい場合と行いたくない場合が存在することがある。例えば、視点に向けて手を突き出している場合には誇張を行う方がインパクトのある映像が作れるが、目の前のペン（誇張されていない物体）に手を伸ばしている場合にはパースの誇張表現を行わない方が、ペンと手の大きさの矛盾が顕著とならない。
【０２３６】
また、画面奥方向に向かって伸びている物体に対しては、パースの誇張を用いる作風と用いない作風がある。また特に画面奥行き方向に誇張する場合にも、例えば地面と足が接している場所では矛盾が生じることもある。
【０２３７】
実施例５では、このよう各状況に応じて、誇張操作を用いるか用いないかを自動で使い分ける機能を実現する例を示す。
【０２３８】
［処理の概要］
実施例５では、各ノードが特定の意味条件を満たしているかを判断し、その結果に応じて誇張係数を変動させてもよい。たとえば、以下の三条件を判断基準とすることができる。
（１）物体の近接判定：ターゲット点が、特定の物体と接近しているか。
（２）方向指示の判定：ジョイント点からターゲット点に向かう方向が、特定の物体に向いているか。
（３）ポーズの判定：モデルの関節構造が、あらかじめ定められたポーズと類似しているか。
【０２３９】
この条件の何れかを満たしているノードの組み合わせが有った場合、誇張量の制御グラフ上に補助枝を追加してもよい。そして、グラフ内で誇張係数を伝播させて、制約条件を満たすような距離を調達してもよい。この誇張量を制御するために用いる距離を、疑似視点距離と呼ぶ。
【０２４０】
疑似視点距離は、基本視点位置e0から疑似視点位置emに向かうベクトルの、視点座標系におけるz方向成分として定義され、これをezmとする。この疑似視点距離の設定に際しては、誇張量の比較対象となる点を親ノードに限らずに自由に設定してもよい。この点を比較母点とよび、比較母点を含むノードのIDをbで表現する。
【０２４１】
基本技法では、疑似視点の位置は、上段ノードでの比率をあらわす誇張係数を用いて設定された。この実施例では、たとえば、疑似視点距離ezm=V0(em−e0).zを先に決定し、この値に合わせて疑似視点位置を移動させる。
【０２４２】
以下に述べる実施例では、カメラと被写体の距離を制御して非整合を起こしている特定領域の見た目の大きさを調整する操作を、スクリーン平面に沿ったカメラ位置を調整する操作とは独立に行ってもよい。
【０２４３】
［構成要素］
ノードの構成
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置t0m
・基本ポーズにおけるジョイント点の位置j0m
・衝突半径rm
・誇張距離係数ψm
・親ノードへのリンクn0
・比較母点を含むノードへのリンクb
・基本ポーズにおける比較母点の位置j0b
動的に定められる情報は以下の通りである。
・現在のターゲット点の位置tm
・現在のジョイント点の位置jm
・現在の比較母点の位置jb
・一時接続ノードへのリンク[n1,n2,n3,…]
・一時接続ノードへの影響度[q1,q2,q3,…]
・疑似視点位置em
・疑似視点行列Vm
・疑似射影行列Pm
・視線方向の影響値νm
頂点の構成は以下の通りである。
・基本ポーズにおける位置座標p0=[x,y,z,1]T
・現在位置p=Mmp0
ポーズ（関節の角度）のパターン（ポーズc）は以下の通りである。
・ノードのID番号[m0,m1,m2,…,mK-1]
・ノード（関節）の角度[R0,R1,R2,…,RK-1]
・誇張距離調整係数φc
［描画工程］
［全体の流れ］
本実施例では、ポーズ決定時に、3Dモデルにおける物体との衝突判定、モーションのパターン、視線との向きなどの意味条件を判別する。たとえば、その値に応じて、疑似視点距離を変更する。以下、図４のフローを再度用いて、処理の流れを説明する。なお、重複した説明を避けるため、本実施例に特有の変更点を主に説明する。
【０２４４】
［ステップ４０２：ポーズの決定］
１−１  モデリング行列の設定
シーンに物体を配置する。関節モデルについては、ポーズをそれぞれ設定する。各ノードmについて、回転角度のデータRmを呼び出し、先に述べた順運動学に基づいた手法に基づき、ノードmごとに、モデリング行列Mmを設定する。
【０２４５】
１−２  ターゲット点、ジョイント点の確定
モデリング行列によって変換されたターゲット点の現在位置tm=Mmt0mと、ジョイント点の現在位置jm=Mmj0mとを計算する。
【０２４６】
１−３  物体の接続判定
シーン内にあるノードの組み合わせ(m0,m1)について、たとえば、接触判定を行う。ノードm0,m1として想定される例としては、m0が身体部位（例えば手）で、m1が物体（例えば拳銃）、が挙げられる。
【０２４７】
ノードのターゲット点の距離|tm0−tm1|が、衝突距離rm0+rm1より小さい場合には、接触がある（例えば拳銃を手に持っている）とみなし、ノードm0の一時接続ノードリストに、ノードm1を登録する。またノードm1の一時接続ノードリストに、ノードm0を登録することが望ましい。
【０２４８】
この際、いくつかの特別な物体には、たとえば、値φcを関連付けて登録しておき、接触したノードの誇張距離係数をψm←ψmφcと変化させてもよい。これにより、物体に接触した場合にパースの誇張を更に強調することができる。たとえば、拳銃、日本刀など、保持するポーズにインパクトを与えたいオブジェクトについては、このような処理を行うと効果的である。
【０２４９】
１−４  方向指示の判定
母点b0からターゲット点m0に向かう方向が、特定の物体m1に向いているかの判定を行ってもよい。想定される例としては、母点ノードb0のジョイントが肩、ノードm0のターゲットが指先、ノードm1のターゲットが宝箱である場合が挙げられる。たとえば、方向tm0−jb0（例えば肩から指先に向かう方向）と、方向tm1−jb0（例えば肩から宝箱に向かう方向）のなす角度が閾値角度以下であった場合には、特定の物体に向いている（例えば宝箱を指さしている）とみなす。そして、ノードm0の一時接続ノードリストに、ノードm1を登録する。またノードm1の一時接続ノードリストに、ノードm0を登録してもよい。
【０２５０】
この際、いくつかの特別な物体には、たとえば、値φcを関連付けて登録しておき、誇張距離係数をψm←ψmφcと変化させてもよい。これにより、身体部位の方向が特定の物体に向いている場合、例えば宝箱を指さすなどの動作が行われた場合に、パースの誇張を強調して行うことができる。
【０２５１】
１−５  ポーズの判定
モデルの一部の関節角度が、あらかじめ設定された関節角度に近いかを判定してもよい。たとえば、手首から先のノード関節情報[m1,m2,m3,…]について、あらかじめピースサインのポーズの関節角度[R1,R2,R3,…]を登録しておく。この角度に近い場合にはピースサインのポーズであると判定してもよい。
【０２５２】
特定のポーズであると判定された場合には、たとえば、モデルのノードの誇張距離係数ψmに、そのポーズに関連付けて登録されていた値φcを掛け合わせ、ψm←ψmφcと調整する。たとえば、ピースサイン、ガッツポーズなど、特定のポーズにインパクトを与えたい場合は、このような処理を行うと効果的である。
【０２５３】
１−６  視線方向の影響による調整
視線方向影響値νを使って、誇張距離係数ψmを調整することができる。ノードの特徴的な方向を表すのに適した母点を、ノード上に設定しておく。例えば、前腕に相当するノードのターゲット点が手首の位置に設定されているときに、肘付近に母点を設定する。すると、母点からターゲット点に向かう方向が、前腕がどの方向を向いているかを表すことになる。
【０２５４】
たとえば、母点からターゲット点に向かう方向tm−jbと、母点から視点位置への方向e0−jbとのなす角度θを計算する。cosθが正、すなわち対象ノードが視点の方向を向いている場合にはνm=cosθ、そうでない場合にはνm=0を保存する。そして、νmが正の場合、誇張距離係数ψmにνmを掛け合わせ、ψm←ψmνmと調整してもよい。
【０２５５】
１−７  擬似視点距離の導出
モデルのノードに対して、たとえば、以下のように疑似視点距離ezmを定めることができる。
【０２５６】
【数２２】
2014149748.tif 000024
１−８  擬似視点距離の伝搬
疑似視点までの距離に矛盾が生じて、画像上での大きさの狂いが生まれないように、疑似視点距離を伝播させることができる。例えば、手の誇張量と手に持った物の誇張量が大きく異なると不自然であるため、両者の誇張量を調整することができる。
【０２５７】
上述の１−７で設定した値ezmに対して、疑似視点距離の補正値ζmを与える。互いに親子関係にあるか、一時接続ノードとして登録されている条件を満たしたノードの組み合わせをCとしたとき、以下の評価関数Φを最小化するようにζmを調整してもよい。
【０２５８】
【数２３】
2014149748.tif 000025
この式の右辺第１項は、親子関係又は一時接続関係にあるノード（m0とm1）について、両者の誇張程度をなるべく同程度にする効果を持つ。また右辺第２項は、修正量ζm自体をなるべく小さくする効果を持つ。βは、両効果の強さ（両者の比）を調整するパラメータである。
【０２５９】
得られたζmを使って、以下のようにしてezmを調整することができる。
【０２６０】
ezm←ezm＋ζm
［ステップ４０４：カメラの配置］
他の実施例との変更点を主として説明する。たとえば、基本となるカメラパラメータ（視点の位置e0、カメラの方向θ0、画角）を設定する。これらの情報から、視点行列V0、射影行列P0を作成する。視点行列V0は、視点位置e0を原点とする移動行列T（pをp−e0に平行移動する）と、視線方向θをz軸に回転する回転行列R0によってV0=R0T0として定義される。
【０２６１】
射影行列には、既に説明した形式の行列を以下のように設定する。
【０２６２】
【数２４】
2014149748.tif 000026
、それぞれ水平方向・垂直方向の画角（その半分の正接の逆数）になる。たとえば、各セグメントmに、カメラパラメータ（視点の位置、カメラ方向、画角）を設定する。これらの情報から、視点行列Vm、射影行列Pmを作成してもよい。
【０２６３】
２−１  擬似視点の位置を定める
疑似視点距離ezmを使って、疑似視点の位置を定める。たとえば、親階層の疑似視点位置enと自分のターゲット点位置tmとを結んだ直線の上に、以下のように疑似視点位置emを設定する。
【０２６４】
【数２５】
2014149748.tif 000027
２−２  擬似射影行列のズーム補正量を決定する
疑似射影行列の画角を補正し、ジョイント点jmを含む平面z=Vnjm.z（en視点座標系）において、親ノードの疑似射影行列で写した画像のスケールと、このノードの疑似射影行列で写した画像のスケールが、略一致するようにする。
親ノードの疑似射影行列Pnが以下のように既に確定しており、
【０２６５】
【数２６】
2014149748.tif 000028
であるとする。これを元に、ノードmの射影行列Pmを求める。Pmの成分は次のとおりとする。
【０２６６】
【数２７】
2014149748.tif 000029
まず、以下のように画角のみを修正した疑似射影行列P'mを作る。
【０２６７】
【数２８】
2014149748.tif 000030
２−３  擬似射影行列の斜め補正量を決定する
疑似射影行列の斜め補正量を修正し、ジョイント点jmを含む平面z=Vnjm.z（en視点座標系）において、親ノードの疑似射影行列で写した画像と、このノードの疑似射影行列で写した画像が、略一致するようにシフト量を設定する。
【０２６８】
シフト量を設定する前の疑似射影行列P'mに対して、(0,2,)成分及び(1,2)成分を以下のように修正し、これをPmとする。
【０２６９】
【数２９】
2014149748.tif 000031
以上の２−１から２−３の手順に従って、たとえば、トップダウンで親ノードから順に疑似カメラを配置してゆく。
【０２７０】
［ステップ４０６：頂点の変換］
モデルの各頂点（基本ポーズにおける位置座標をp0とする）に対し対応するノードmを検索し、そのノードの疑似視点行列と疑似射影行列を用いて、誇張表現での視野空間の位置を以下の式により計算してもよい。
[x,y,z,w]T=PmVmMmp0
頂点は、最終的に二次元画像上の点(x/w,y/w)に写像される。また、別途通常の視点行列と射影行列を用いて、通常の視野空間の位置（基本カメラを使って射影変換された座標値）
[x0,y0,z0,w0]T=PVMmp0
の値を計算し、z0/w0を奥行き深度の値とする。
【０２７１】
［ステップ４０８：画素の塗り潰し］
二次元画像上の画素を塗り潰す（ラスタライズ処理）。この塗り潰しにおいては、最終的に手前の三角形の色が見えなければならないので、描画順序が重要になる。この描画の奥行き順序を守るために、たとえば、頂点の変換によってえられた深度値z0/w0を用いて面をソートしておき、最も遠い面から描き、近い面で上書きしながら描画してゆく。
【０２７２】
［アニメーションとの組合せ］
実施例３に記載したようなアニメーションに対する平滑化処理を適用する場合には、「工程１−８  疑似視点距離の伝播」での評価関数Φに、フレーム内の変動をあらわす項として、
【０２７３】
【数３０】
2014149748.tif 000032
を加え、以下のように変化させて、最適化処理の処理を行ってもよい。
【０２７４】
【数３１】
2014149748.tif 000033
【実施例６】
【０２７５】
ピッキング処理
【０２７６】
ピッキング処理とは、画面上に表示された三次元オブジェクトの一部をポインティングデバイス、又は指等によってポイントした場合に、どのオブジェクトがポイントされたかを認識する処理を言う。
【０２７７】
上述の各種実施例においては、三次元オブジェクトが複数のカメラによって二次元にレンダリングされているため、ピッキング処理における対処が必要となる。ピッキングの処理を実現させる実装例としては、以下のものが挙げられる。
(a)ボーン、又は関節等を選択してオブジェクトのポーズを変えるもの。
(b)メッシュを選択してオブジェクトの細部を調整するもの。
【０２７８】
上記(a)の場合には、実際のオブジェクトのボーン、及び関節の数には、限りがあるため、ボーン及び関節の位置情報を記憶部に記憶させておいてもよい。そして、画面上の点がポイントされた場合には、そのポイント点に最も近いボーン又は関節が選択されたと判定してもよい。
【０２７９】
上記(b)の場合には、たとえば、ポリゴンの各頂点に対して画像上の二次元を保存するバッファ領域を与える。このバッファ領域にレンダリング時の二次元位置の情報を保存することで、ピッキング処理の認識を行うようにしてもよい。
【０２８０】
図２０は、本明細書において説明した各種の実施例をインプリメントするシステム２０００のハードウエアの構成例を示している。システム２０００は、ＣＰＵ２００１、ディスプレイ２００２、タッチスクリーン２００４、キーボード２００６、マウス２００８、ＲＯＭ２０１０、ＲＡＭ２０１２、可搬記録媒体２０１５を読み書きする外部メモリインターフェース２０１４、ネットワークとの通信を行う通信インターフェース２０１６、及び各ハードウエアを接続するバス２０２０を含む。なお、ディスプレイ２００２、タッチスクリーン２００４、キーボード２００６、マウス２００８などの入力出力デバイスは、例示であり、これらの全てを含む必要はない。また、他の入出力デバイスが利用されてもよいことは言うまでもない。
【０２８１】
なお、本実施例の全部又は一部はプログラムによってインプリメントされ得る。このプログラムは、可搬記録媒体２０１５に格納することができる。可搬記録媒体２０１５とは、１つ以上の非一時的（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ）な記憶媒体を言う。例示として、可搬記録媒体８１６としては、磁気記録媒体、光ディスク、光磁気記録媒体、不揮発性メモリなどがある。磁気記録媒体には、ＨＤＤ、フレキシブルディスク（ＦＤ）、磁気テープ（ＭＴ）などがある。光ディスクには、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ（Ｒｅｃｏｒｄａｂｌｅ）／ＲＷ（ＲｅＷｒｉｔａｂｌｅ）などがある。また、光磁気記録媒体には、ＭＯ（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  ｄｉｓｋ）などがある。可搬型記録媒体に格納されたプログラムが読み込まれ、プロセッサによって実行されることにより、本発明の実施例の全部又は一部が実施され得る。
【０２８２】
なお、本明細書の［発明を実施するための形態］及び［実施例］の項に記載した上述の記載は、発明を理解するためのものであり、本発明の範囲を限定するためのものではない点に留意すべきである。また、上述の複数の［発明を実施するための形態］及び［実施例］に記載された内容は、相互に排他的なものではない。したがって、矛盾が生じない限り、異なる箇所に記載された各要素を組み合わせることも意図されていることに留意すべきである。また、請求項に記載された方法、及びプログラムに係る発明は、矛盾のない限り処理の順番を入れ替えてもよい。あるいは、複数の処理を同時に実行してもよい。そして、これらの実施例も、請求項に記載された発明の技術的範囲に包含されることは言うまでもない。
【０２８３】
また、コンピュータが読み出したプログラムコードを実行することにより、上述の実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ、仮想マシンモニタＶＭＭ、ファームウエア、ＢＩＯＳなどのプログラムが実際の処理の一部又は全部を行ない、その処理によって実施例の機能が実現される場合も、本発明に含まれることは言うまでもない。
【０２８４】
また、本発明の各種実施例のそれぞれの構成要素は、物理的に分離された複数のハードウエアで実現されてもよい。また、本発明の各種実施例のそれぞれの構成要素は、１つ以上のサーバ上で動作することによって実現されてもよい。また、本発明に係るプログラムを実行するＣＰＵは複数であってもよく、また、各ＣＰＵは複数のコアを含んでいてもよい。
【０２８５】
また、本発明は、汎用コンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、携帯電話、テレビジョン、ゲーム機器など、少なくともＣＰＵとメモリとを具備するその他の装置にインプリメントすることができる。
【符号の説明】
【０２８６】
４０２  ポーズの決定
４０４  カメラの配置
４０６  頂点の変換
４０８  画像の塗り潰し
【図１】
2014149748.tif 000034
【図２】
2014149748.tif 000035
【図３】
2014149748.tif 000036
【図４】
2014149748.tif 000037
【図５】
2014149748.tif 000038
【図６】
2014149748.tif 000039
【図７】
2014149748.tif 000040
【図８】
2014149748.tif 000041
【図９】
2014149748.tif 000042
【図１０】
2014149748.tif 000043
【図１１】
2014149748.tif 000044
【図１２】
2014149748.tif 000045
【図１３】
2014149748.tif 000046
【図１４】
2014149748.tif 000047
【図１５】
2014149748.tif 000048
【図１６】
2014149748.tif 000049
【図１７】
2014149748.tif 000050
【図１８】
2014149748.tif 000051
【図１９】
2014149748.tif 000052
【図２０】
2014149748.tif 000053