特許第5792210号(P5792210)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社セルシスの特許一覧 ▶ 株式会社日立製作所の特許一覧

特許5792210三次元オブジェクトの多視点描画装置、方法、及びプログラム
<>
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000033
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000034
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000035
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000036
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000037
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000038
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000039
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000040
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000041
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000042
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000043
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000044
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000045
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000046
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000047
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000048
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000049
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000050
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000051
  • 特許5792210-三次元オブジェクトの多視点描画装置、方法、及びプログラム 図000052
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5792210
(24)【登録日】2015年8月14日
(45)【発行日】2015年10月7日
(54)【発明の名称】三次元オブジェクトの多視点描画装置、方法、及びプログラム
(51)【国際特許分類】
   G06T 13/40 20110101AFI20150917BHJP
   G06T 13/80 20110101ALI20150917BHJP
【FI】
   G06T13/40
   G06T13/80 B
【請求項の数】5
【全頁数】45
(21)【出願番号】特願2013-18911(P2013-18911)
(22)【出願日】2013年2月1日
(65)【公開番号】特開2014-149748(P2014-149748A)
(43)【公開日】2014年8月21日
【審査請求日】2015年5月14日
【早期審査対象出願】
(73)【特許権者】
【識別番号】596021562
【氏名又は名称】株式会社セルシス
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】宇都木 契
(72)【発明者】
【氏名】川上 陽介
(72)【発明者】
【氏名】山口 兼太郎
【審査官】 真木 健彦
(56)【参考文献】
【文献】 特開2005−141545(JP,A)
【文献】 特開2000−242811(JP,A)
【文献】 宇都木 契 苗村 健,日本のアニメーションにおける誇張表現を模した3D CG "E-IMPACT" の実装,日本バーチャルリアリティ学会研究報告 サイバースペースと仮想都市研究会,日本,日本バーチャルリアリティ学会,2012年 4月12日,Vol.17, No.CS-1, CSVS2012-5,P.23-28
【文献】 宇都木 契 苗村 健,特集 最新のディジタルコンテンツ制作技術 E-IMPACT 日本のアニメーションにおける誇張表現を模した3DC,映像情報メディア学会誌,日本,社団法人 映像情報メディア学会,2012年 2月 1日,Vol.66, No.2,P.102-105
(58)【調査した分野】(Int.Cl.,DB名)
G06T 13/40
G06T 13/80
(57)【特許請求の範囲】
【請求項1】
三次元空間に存在する、複数のノードを含む三次元モデルを複数の視点を用いて描画する装置であって、
前記複数のノードの各々と前記複数の視点の各々との対応関係、及び前記複数の視点の各々に係る描画パラメータを含む、描画情報を格納するメモリと、
前記描画情報を用いて、前記三次元モデルを構成する複数のポリゴンによって、前記三次元モデルを画像に変換するCPUと、
を有する描画装置であって、
前記CPUは、
前記複数のポリゴンの頂点の各々に対して、前記頂点が属しているノードに対応する視点を用いて前記頂点の描画位置を算出し
前記算出された描画位置を用いて、前記三次元モデルの画像に衝突があるか否かを判定し、
衝突があると判定された場合には、前記描画情報を修正し、
前記修正された前記描画情報に基づいて、前記三次元モデルを画像に変換する、 描画装置。
【請求項2】
アニメーションを構成する複数のフレーム画像のうちの特定のフレームにおいて、前記衝突があると判断された場合、前記特定のフレームに対して時間的に前及び/又は後の所定の数のフレームに対して、修正された前記描画情報の修正前後の差分値を、前記特定のフレームから所定のフレーム数のフレームのそれぞれに対して、フレームの位置に応じて補間した値を適用することによって、前記複数のフレームの各々に平滑化された修正値を与える、
請求項記載の描画装置。
【請求項3】
三次元空間に存在する、複数のノードを含む三次元モデルを複数の視点を用いて描画する方法であって、
メモリに保存された、前記複数のノードの各々と前記複数の視点の各々との対応関係、及び前記複数の視点の各々に係る描画パラメータを含む、描画情報を用いて、CPUが、
前記三次元モデルを構成する複数のポリゴンの頂点の各々に対して、前記頂点が属しているノードに対応する視点を用いて前記頂点の描画位置を算出するステップと、
前記算出された描画位置を用いて、前記三次元モデルの画像に衝突があるか否かを判定するステップと、
衝突があると判定された場合には、前記描画情報を修正するステップと、
前記修正された前記描画情報に基づいて、前記三次元モデルを画像に変換するステップと、
を有する描画方法。
【請求項4】
アニメーションを構成する複数のフレーム画像のうちの特定のフレームにおいて、前記衝突があると判断された場合、前記特定のフレームに対して時間的に前及び/又は後の所定の数のフレームに対して、修正された前記描画情報の修正前後の差分値を、前記特定のフレームから所定のフレーム数のフレームのそれぞれに対して、フレームの位置に応じて補間した値を適用することによって、前記複数のフレームの各々に平滑化された修正値を与えるステップ、
を更に有する請求項記載の描画方法。
【請求項5】
請求項3又は4記載の方法を、コンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、三次元オブジェクトを複数の視点からの射影によって、描画を行う技術に関する。
【背景技術】
【0002】
従来の手書きのアニメ及びマンガには、強い臨場感、又は迫力を与えるために、透視図法(パース)において、遠い部分と近い部分の見た目の大きさの差を過剰に誇張した表現が多く用いられている。
【0003】
図1は、誇張された画像を比較した例を示している。図1(A)と図1(B)の画像を比べると、図1(B)は、足先102が、図1(A)の足先101と比較して、大きく表描画されており、奥行き表現がはっきりして印象的である。正確な透視投影図法でレンダリングした画像は図1(A)である。これに対し、図1(B)の画像は前に突き出した足先の見た目の大きさの差を拡大することで、奥行表現が誇張された画像になっている。本明細書では、このような画像を「誇張画像」と呼ぶ。
【0004】
たとえばロボットアニメ、又はスポーツなど、迫力を必要とする場面において、パースを極端に誇張する表現が多用されてきた。だが、このような柔軟な二次元表現は、手書きでは自由に描画できるが、カメラパラメータと3Dモデルから構成されるCG(コンピュータグラフィックス)の映像では表現に困難を伴う場合がある。このため、手書きの映像とCGの映像を合成する際に、相互の描画の手法の矛盾が露呈して違和感を与えることもあった。
【0005】
立体映像のディスプレイ面表から飛び出した物体を拡大して表現することで、視差を削減させる技術がある(たとえば、特許文献1参照)。
【0006】
複数の視点(カメラ)からの画像を合成して、二次元平面にレンダリングする技術が存在する(たとえば、非特許文献1、非特許文献2、非特許文献3、非特許文献4参照)。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2006−293792号公報
【非特許文献】
【0008】
【非特許文献1】CGWORLD.jp日本アニメCGの新たな原動力 Autodesk 3ds Max 2011×PSOFT Pencil+3(第4回)http://cgworld.jp/feature/review/pencil+3-vol4.html
【非特許文献2】Multi-perspective Modeling, Rendering, and Imaging SIGGRAPH ASIA 2008 Course Note, http://www.csbio.unc.edu/mcmillan/pubs/siga08-yu.pdf
【非特許文献3】E-IMPACT 〜日本のアニメーションにおける誇張表現を模した3DCG〜 特集・最新のディジタルコンテンツ制作技術、映像情報メディア学会誌2012年2月号、66(2), 102-105
【非特許文献4】"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).
【発明の概要】
【発明が解決しようとする課題】
【0009】
誇張画像を3Dモデルから簡便に描画することを目的とする。
【課題を解決するための手段】
【0010】
本発明の一側面によれば、三次元空間に存在する、複数のノードを含む三次元モデルを複数の視点を用いて描画する装置であって、前記複数のノードの各々と前記複数の視点の各々との対応関係、前記三次元モデルを構成する複数のポリゴンの各頂点の描画位置に関して前記複数のノードの各々が与える影響度、及び前記複数の視点の各々が持つ描画パラメータを含む、描画情報を格納するメモリと、前記描画情報を用いて、前記複数のポリゴンによって、前記三次元モデルを画像に変換するCPUと、を有する描画装置であって、前記CPUは、前記複数のポリゴンの頂点の各々に対して、前記頂点が属しているノードに対応する視点を用いて前記頂点の描画位置を算出し、前記影響度に基づいて、算出された前記頂点の前記描画位置を修正する、描画装置が提供される。
【発明の効果】
【0011】
実施例によれば、誇張画像を3Dモデルから簡便に描画することができる。
【図面の簡単な説明】
【0012】
図1】誇張画像の例を示す図である。
図2】ベクトルの変換処理を示す図である。
図3】人体の剛体関節モデル示す図である。
図4】CG映像作成の工程を示す図である。
図5】Forward Kinematicsによるアニメーションの例を示す図である。
図6】円筒のパース誇張表現の例を示す図である。
図7】カメラの移動と画角操作によるパースの制御を示す図である。
図8】関節モデルの誇張表現の例を示す図である。
図9】人間型モデルへ適用したボーンの例を示す図である。
図10】ジョイントとエンベロープの例を示す図である。
図11】ボーンの影響度を加味したポリゴンの頂点の変換のフローを示す図である。
図12】実施例2の変形例による頂点の変換のフローを示す図である。
図13】描画において、重なりが生じる例を示した図である。
図14】誇張描画による像の拡張がもたらす重畳を回避する例を示す図である。
図15】重畳を回避するフローの例を示す図である。
図16】疑似視点位置の二次元像の移動によるターゲット点の移動を示す図である。
図17】アニメーション平滑化のための処理フローを示す図である。
図18】モデルの各部位への誇張パラメータの設定のフローを示す図である。
図19】3Dモデルとエンベロープの重ね合わせを示す図である。
図20】ハードウエアの構成例を示す図である。
【発明を実施するための形態】
【0013】
本発明の実施例の基本的な作業工程を説明するため、通常の映像生成と、誇張画像表現について以下に記述する。なお、本明細書では、以下の手法及び表記に従うが、本発明の各実施例は、これらの手法及び表記に限定されるものではない点に留意すべきである。
【0014】
まず、比較対象として通常のCGでの映像描画手法を説明する。続いて映像誇張の具体的事例を説明し、その中で本発明の実施例に共通する基本実施例として、マルチカメラを用いた誇張描画の仕組みの例について説明する。
【0015】
本明細書では、3Dモデルをオブジェクトと呼ぶ場合がある。また、3Dモデル(オブジェクト)の一部を部分オブジェクトと呼ぶ場合がある。
【0016】
[基本実施例]
[頂点と行列変換]
CGモデルの形状データは、たとえば、多数の三角形面で構成ことができる。各三角形の頂点データは三次元の浮動小数点データの組(三次元ベクトル(x,y,z))として保持される。以下の説明では、OpenGL又はDirect3DなどのCG処理機構に準拠する。三次元ベクトル(x,y,z)に四次元めの要素w=1を追加した列ベクトル[x,y,z,1]Tとして表記し(「T」は行列の転置を意味し、ここでは行ベクトルの転置で列ベクトルを表している)、変換処理を4×4行列で表現する。これは三次元ベクトルに対する移動・回転・サイズ変換と射影変換の処理をアフィン変換のみで表現できる。
【0017】
図2は、ベクトルの変換処理を示している。図2(A)は、回転行列Rにより、ベクトルv0がベクトルv1にx軸周りに角度θだけ回転している例を示している。この変換処理は、v0=[x,y,z,1]Tとすれば、以下のように表せる。
【0018】
【数1】
図2(B)は、移動行列Tにより、ベクトルv0がベクトルv2に、x軸方向にtx、y軸方向にty、z軸方向にtzだけ平行移動している例を示している。この変換処理は、以下のように表せる。
【0019】
【数2】
図2(C)は、スケーリング変換行列Sにより、ベクトルv0がベクトルv3に、拡大又は縮小される例を示している。x軸方向にsx、y軸方向にsy、z軸方向にszだけ拡大又は縮小される変換処理は、以下のように表せる。
【0020】
【数3】
これらの処理を統合した結果は、物体の位置、及び形状を変形することに相当するため、モデリング行列Mと呼ぶ。たとえばMは、以下のように表現される。
【0021】
M=TRS (3.5)
なお、上記の式3.5において、行列の掛け合わせる順番が異なれば、異なる変換結果となる点に留意すべきである。また、以下の説明では、ベクトルvのx成分を用いる場合にはv.x、ベクトルvのx成分とy成分を用いる場合にはv.xyのように、省略記法を用いて記述する。さらに、Mv.xyのように行列を掛けた場合は、(Mv).xyを表すものする。
【0022】
[関節構造]
CGモデルがジョイント(関節)構造を持っている場合には、モデル全体は部分要素の集まりとして分解できる。なお、本明細書では、「部分要素」を「ボーン」と呼ぶ場合がある。ある部分要素に属する頂点データの集合をセグメントと呼ぶ。各部分要素は隣接する部分要素と「ジョイント点」(「関節点」)で繋がっており、ジョイント点で互いのまわりを回転する以外には変形しないモデルを、剛体関節モデルと呼ぶ。本明細書では、ジョイントとセグメントで構成されるひとかたまりの単位を「ノード」と呼ぶ。特定の部分要素を示すときには、下付きのサフィックスで表現する。たとえば、部分要素を特定するID番号がmであるノードのモデリング行列はMmと記述する。また、ノードmのジョイント点(下記の親子関係における親と繋がる点)を「ジョイントm」とし、その位置を表すベクトルをjmと表記する。
【0023】
図3は、人体の剛体関節モデルを示している。本明細書では、説明を分かりやすくするために剛体関節モデルを例にして説明する。なお、本発明は剛体関節モデルに限定されるものではない。図3(A)に示すように、剛体関節モデルにおいては、互いに繋がったノードの間には親子関係を設定することが望ましい。図3(B)に示すように最上位の親ノード(ルートノード)から連なる木構造で表現する。このように単純な木構造で上位から順に計算できる関節モデルを制御する方法論は順運動学(Forward Kinematics)と呼ばれる。該当ノードのID番号をm、親ノードのID番号をn、移動前の基本姿勢におけるジョイント点(ジョイントm)の位置を表すベクトルをj0mとするとき、親ノード302(ノードn)でのモデリング行列Mnが定まると、ジョイントmの位置jmはjm=Mnj0mとして一意に定まる。子ノード304(ノードm)はこのジョイントmを中心とした回転運動のみを自由度として持ち得る。
【0024】
[視点行列と射影行列]
三次元位置を二次元画像に変換するために、視点行列Vと射影行列Pが用いられる。視点行列はカメラ(視点)の位置と方向をあらわすものであり、射影行列は三次元情報を二次元に射影するためのルールを示すものである。
【0025】
視点行列Vは、視点の位置e0を原点に変換する平行移動と、カメラの方向θ0をZ軸に設定する回転行列を合成することで定義する。
【0026】
射影行列Pは、たとえば以下の形式の行列である。
【0027】
【数4】
この行列で頂点座標を変換した結果[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などの参考文献に記載されている。
【0028】
[描画工程]
CG映像で、毎フレーム行う描画処理の工程は、以下のようになる。
【0029】
図4は、CG映像作成の工程例を示している。 この工程例は、具体的には、以下のように構成される。
【0030】
ステップ402において、シーンにキャラクタモデルを配置する条件と、関節モデルのポーズを定める。
【0031】
ステップ404において、カメラパラメータを与え、視点位置、方向、及び/又は画角を設定する。
【0032】
ステップ406において、モデルを構成する各頂点の座標を計算し、射影変換を行う。
【0033】
ステップ408において、頂点に張られた面の画素を塗り潰す(ラスタライズを行う)。
【0034】
複数のノードの各々と複数の視点の各々との対応関係、三次元モデルを構成する複数のポリゴンの各頂点の描画位置に関して複数のノードの各々が与える影響度、及び複数の視点の各々が持つ描画パラメータを含む情報を、描画情報と呼ぶ。
【0035】
[ステップ402:ポーズの決定]
図5は、Forward Kinematicsによるアニメーションの例を示している。順運動学の手順に基づいて、各ノードのモデリング行列を決定する。
(なお、この決定手順は、例えば、以下の参考文献に例示されている。http://www.tmps.org/index.php?%BD%E7%B1%BF%C6%B0%B3%D8)
(ア)キャラクタのポーズを決定するために、各ノードの向きを定める(図5(A))。全てのノード(m=0,1,2,…,M-1)について、ジョイント部(m)での回転角度の情報R0mを読み出す。
【0036】
(イ)親のノードから連結している順に、ノードの位置を定めてゆく。ノードmが、その親であるノードnに、ジョイントmによってつながっている。基本ポーズでのジョイントmの位置をj0m、ポーズを読み込んで回転した後のジョイントmの位置をjmとする。親のモデリング行列Mnがすでに定まっているとき、このノードのモデリング行列Mmを以下のように定める(図5(B))。
【0037】
変換Mmpは、ノードmに付随する点pにポーズ情報を適用する処理であり、ジョイントmを中心としてRmだけ回転させる操作と、ジョイントmの位置jm(親ノードの変換Mnによって定められる)から得られる。すなわち:
jm=Mnj0m
Rm=R0mRn
Mmp=Rm(p-j0m)+Mnj0m
(ウ)操作(イ)を、親ノードから子ノードに繰り返し、全てのノードについてモデリング行列Mを求めることができる。
【0038】
[ステップ404:カメラの配置(カメラパラメータの設定)]
カメラパラメータ(視点の位置e、カメラの方向θ、画角)を設定し、これらの情報から、視点行列V、射影行列Pを作成する。画角は、カメラのレンズにおける焦点距離に対応する。
【0039】
視点行列Vは、視点位置eを原点とする移動行列T(pをp-eに平行移動する)と、視線方向θをZ軸に回転する回転行列RによってV=RTとして定義される。
【0040】
射影行列には、既に述べた形式の行列を以下のように設定する。
【0041】
【数5】
このときp00,p11が、それぞれ水平方向・垂直方向の画角(その半分の正接の逆数)になる。
【0042】
[ステップ406:頂点の変換]
モデルの各頂点(変形前の位置座標をpとする)に対し、変形後の位置を計算する。頂点が属しているノードをmとするとき、[x,y,z,w]T=PVMmpを計算する。
【0043】
頂点は、最終的に二次元画像上の点(x/w,y/w)に写像される。
【0044】
またこの計算から深度値z/wを得る。この深度値は面の奥行き順序を比較するソートに用いられる。この点についての詳細は後述する。
【0045】
[ステップ408:画素の塗り潰し]
二次元画像上の画素を塗り潰す(ラスタライズ処理を行う)。
【0046】
この塗り潰しにおいては、最終的に手前の三角形の色が見えなければならないので、描画順序が重要になる。この描画の奥行き順序を守るために、頂点の変換によって得られた深度値z/wを用いて面をソートしておき、最も遠い面から描き、近い面で上書きしながら描画してゆく。
【0047】
ソートされた各三角形面について、構成される三つの頂点を参照する。それらの頂点で囲まれた領域の画素を、面に指定された色に塗り潰す。
【0048】
上記の標準的な描画手法は、透視投影行列Pによって、三次元から二次元への幾何射影を行っている。次に、この映像の生成手順と比較して、誇張映像の生成手法を説明する。
【0049】
[誇張映像の生成について]
誇張画像を生成するには、おもに、二種類の手法がある。一つ目はCGモデルの当該個所の形状自体を大きくする手法であり、もうひとつは遠近法を生み出すカメラパラメータを加工する技法Multi-perspective Rendering (MPR)を用いる手法である。
【0050】
「1.形状加工」
前者のCGモデルの当該個所を加工する方法の実現例には、Pencil+3パース変形モディファイヤの例などが存在する(たとえば、非特許文献1参照)。
【0051】
この例は、CGのZ深度に応じて異なるレンズパラメータを与えたような映像を作成する。なお、Z深度に応じてモデル形状を加工するため、キャラクタ以外の物体、たとえば背景モデルなどが同じシーンの中に写っている場合には、該当する深度のモデルがひずんでしまう可能性がある。
【0052】
[2.マルチパースペクティブ]
後者のMPRは異なる透視投影の効果を一枚の絵に合成する方式である。MPRの既存技術の詳細は、非特許文献2に、例示されている。
【0053】
このMPRは、異なった視点からの画像の断片を、一枚の絵の中に合成して映像を作る。モデルの各部がひずんで接合され、キュービズムの絵画のような映像を作る例などが先行事例として挙げられている。
【0054】
また特許文献1では、この手法を用いて立体映像のディスプレイ面表から飛び出した物体を拡大して表現することで、視差を削減させる方法が提案されている。
【0055】
また、MPRを用いて、上記の誇張画像を作成する手法は、非特許文献3及び非特許文献4によって、その例が提案されている。
【0056】
[マルチパースペクティブ合成による誇張画像]
非特許文献1の例では形状を変化させることで誇張表現を行うのに対して、非特許文献3及び非特許文献4で示された誇張描画アルゴリズムは透視投影Pを適用する段階でパースの効果を誇張する。
【0057】
[基本概念]
図6は、円筒のパース誇張表現の例を示している。ノードmに相当する円筒と、その中心軸を描いたものである。図6(A)は通常のパースである。これに対し、図6(B)では、距離による見た目の拡大率の差(円602と円604との差)を大きく誇張できる。円筒に中心軸を設定し、その両端点を特徴点とする。円筒の根元にある三次元の点をジョイントmとし、その位置を点jmとする。また、円筒先端の三次元の点を「ターゲットm」と呼び、その位置をtmとする。
【0058】
このように、親の疑似視点パラメータで作成した画像と、子の疑似視点パラメータが、互いにジョイント点とターゲット点を共有するようにカメラパラメータを定めることで、最終画像上で互いの軸がなす角度が不自然にならないようになる。
【0059】
図7は、カメラの移動と画角操作によるパースの制御を示している。この処理におけるカメラと画角の関係を示した模式図である。カメラの位置をd2からd1に接近させ、画角(の半分)をθ2からθ1に広げて、円筒の上面tmを大きく見せつつも、円筒の底面jmを含んだ平面の見え方が略変わらないようにすることができる。
【0060】
[多段階の合成]
図8はこの手法によって関節モデルを描画した場合の模式図である。図8のように、関節で区切られた部位それぞれに専用のカメラを用意し、それらを「疑似カメラ」と呼ぶ。これらの疑似カメラをそれぞれ異なる位置に配置し、各部位を撮影する。図8(B)〜図8(D)は、同じポーズのモデルを、三つの異なる疑似カメラで撮影したものである。図8(A)は、矢印802、804、及び806に示すように、これらの3種類の画像を関節部分でつなぎ合わせて作成した誇張画像である。
【0061】
図8は、関節モデルの誇張表現の例を示している。このようなパースの異なる画像をつなぎ合わせて、手書きアニメでの誇張表現を実現できる。このようなMPRを用いると、パースの誇張表現は「形状変化」ではなく「距離変化」として記述できる。このことにより、パースの誇張表現がより自然に表現できるようになる。
【0062】
[制約条件]
それぞれの疑似カメラをモデルに近づけるだけでは、二次元画像上でのポーズのバランスが崩れてしまう場合がある。二次元画像上のポーズの印象を残したまま、パースの遠小近大の表現だけを変化させるためには、それぞれの疑似カメラの配置場所を連携させることが望ましい。この場合、以下の制約条件を満たすように、疑似射影行列Pmと疑似視点行列Vmを作成するのが望ましい。
【0063】
[制約条件1]
ジョイントmの近傍では、ノードmの疑似カメラの画像と親ノードnの疑似カメラの画像の間で、位置とサイズを略一致させることが望ましい。この制約により、関節が「つながって」見える。
【0064】
ジョイント点jmを含み、視線方向に垂直な平面をL(m,n)とする。このL(m,n)上の点pについて、親階層(ノードn)の疑似射影処理PnVnによって、点pが写される二次元座標と、この階層(ノードm)の疑似射影処理PmVmによって、点pが写される二次元座標が一致する。
【0065】
すなわち、式の関係が成立する。
【0066】
【数6】
[制約条件2]
ターゲットmが射影される二次元位置が略一致するようにすることが望ましい。この制約により、オブジェクトの向きが一致して見える.
ターゲット点tmについて、親階層(ノードn)の疑似射影処理PnVnによって、点pが写される平面上の位置と、この階層(ノードm)の疑似射影処理PmVmによって、点pが写される平面上の位置とが略一致する。
【0067】
すなわち、式の関係が成立する。
【0068】
【数7】
これらの制約条件を満たした場合、円筒の軸を示すjmからtmに向かう線分が、二次元的には同じ位置を占めたままで、点tmの周りの見た目のパースが大きくなる映像を作ることができる。なお、本発明は、上述の手法に限定されるものではない。
【0069】
[描画手法の構成要素]
描画手法によって映像を描画する際に必要となるデータ構成要素について以下に説明する。
【0070】
ノード部は以下のデータを保持する:
(ア)あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置t0m
・基本ポーズにおけるジョイント点の位置j0m
・誇張係数ηm
・親ノードへのリンクn
(イ)動的に定められる情報は以下の通りである。
・現在のターゲット点の位置tm
・現在のジョイント点の位置jm
・モデリング行列Mm
・疑似視点位置em
・疑似視点行列Vm
・疑似射影行列Pm
各頂点の構成は以下の通りである。
(ウ)あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおける頂点位置p0=[x,y,z,1]T
・ノードへのリンクm
(エ)動的に定められる情報は以下の通りである。
・現在の頂点位置p=Mmp0
[基本手法の描画工程]
本発明における描画工程の基本手法では、以下のような手順を用いてもよい。
【0071】
基本手法の描画工程は、図4に類似しているが、以下に示す実施例においては、以下に示す基本的手法を用いることを前提に説明する。なお、本発明は、この基本的手法に限定されるものではない。
カメラの配置(ステップ404)と、頂点の変換(ステップ406)において、複数の視点行列と射影行列を用意し、使用することが望ましい。以下、この詳細について、図4を再度用いて説明する。
【0072】
[ステップ402:ポーズの決定]
先に述べた手法に基づき、各ノードmに、モデリング行列Mmを設定する。また、このモデリング行列によって変換されたターゲット点の現在位置tm=Mmt0mと、ジョイント点の現在位置jm=Mmj0mとをそれぞれ計算する。
【0073】
[ステップ404:カメラの配置]
まず、基本となるカメラパラメータ(視点の位置e0、カメラの方向θ0、画角)を設定する。これらの情報から、視点行列V0、射影行列P0を作成する。
【0074】
視点行列V0は、視点位置e0を原点とする移動行列T(pをp‐e0に平行移動する)と、視線方向θをZ軸に回転する回転行列R0によってV0=R0T0として定義される。
射影行列には、既に記載した形式の行列を設定する。
【0075】
【数8】
このときp00,p11が、それぞれ水平方向・垂直方向の画角(その半分の正接の逆数)になる。
【0076】
各セグメントmに、カメラパラメータ(視点の位置、カメラ方向、画角)を設定する。これらの情報から、視点行列Vm、射影行列Pmを作成する。
【0077】
[ステップ404その1:擬似視点の仮位置を定める]
疑似視点の位置を定める。
【0078】
親階層の疑似視点位置enとtmを結んだ直線の上に、疑似視点位置emを設定する。
em=(enmtm)/(1+ηm)
本明細書では、この比率を「誇張係数」と呼び、値をηmとする。この値には、ノード構造体にあらかじめ保存されている定数パラメータを読み出して利用することが望ましい。誇張係数によって、誇張される度合いを調整することができる。誇張係数が大きくなるほど、誇張される度合いが高くなる。誇張係数が0であれば、親階層の擬似視点から見える画像と等しくなる。
【0079】
疑似視点位置emとカメラ方向から、疑似視点行列Vmを作る。疑似カメラの方向は基本カメラ(疑似でないカメラ)の方向と同じ方向にすることが望ましい。
【0080】
[ステップ404その2:擬似射影行列のズーム補正量を決定する]
疑似射影行列の画角(カメラのレンズの焦点距離に相当する)を補正し、ジョイント点jm含む平面z=Vnjm.z(en視点座標系)において、親ノードの疑似射影行列で写した画像のスケールと、このノードの疑似射影行列で写した画像のスケールが、一致するようにする。
【0081】
親ノードの疑似射影行列Pnが既に確定しており、
【0082】
【数9】
であるとする。これを元に、ノードmの射影行列Pmを求める。Pmの成分は次のとおりとする。
【0083】
【数10】
まず、以下のように画角のみを修正した疑似射影行列P'mを作る。
【0084】
【数11】
[ステップ404その3:擬似射影行列の斜め補正量を決定する]
疑似射影行列の斜め補正量を修正し、ジョイント点jmを含む平面z=Vnjm.z(en視点座標系)において、親ノードの疑似射影行列で写した画像と、このノードの疑似射影行列で写した画像が、一致するようにシフト量を設定する。
【0085】
シフト量を設定する前の疑似射影行列P'mに対して、(0,2)成分及び(1,2)成分を以下のように修正し、これをPmとする。
【0086】
【数12】
以上のステップ404のその1〜ステップ404その3の手順に従って、トップダウンで親ノードから順に疑似カメラを配置することができる。
【0087】
[ステップ406:頂点の変換]
モデルの各頂点(基本ポーズにおける位置座標をp0とする)に対し対応するノードmを検索し、そのノードの疑似視点行列と疑似射影行列を用いて、以下の式によって誇張表現での視野空間の位置を計算する。
[x,y,z,w]T=PmVmMmp0
頂点は、二次元画像上の点(x/w,y/w)に写像される。
【0088】
また、別途通常の視点行列と射影行列を用いて、通常の視野空間の位置(基本カメラを使って射影変換された座標値)
[x0,y0,z0,w0]T=PVMmp0
の値を計算し、z0/w0を奥行き深度の値とすることが望ましい。これは、異なる疑似カメラで描画されたオブジェクト間の深度値比較に、一貫性を持たせるためである。この奥行きの深度の値は、たとえばZバッファを用いて、以下のステップ408において、塗りつぶすべき手前にある画像を描画するときに用いてもよい。
【0089】
[ステップ408:画素の塗り潰し]
各面について、頂点で囲まれた領域の画素を塗り潰す。またその際、深度値z0/w0が最も遠い面から描き、近い面で上書きしながら描画する。
【0090】
これらの手順に従って描画することで、パースの効果を誇張した映像生成が行われる。
【0091】
以上、基本実施例として、誇張映像の描画方法について説明した。この技法を発展させて、更に以下の実施例を開示する。
【0092】
実施例1:関節部位の滑らかな接合
実施例2:誇張の非整合の解消
実施例3:アニメーションの平滑処理
実施例4:誇張係数パメラータの設定
実施例5:誇張量の動的な調整
実施例6:ピッキング処理
【実施例1】
【0093】
関節部位の滑らかな接合
【0094】
剛体関節モデルに特定のポーズをとらせる場合には、各部位ごとに回転と移動をすれば良い。しかしながら、人間又は動物のようなモデルの関節部位の結合を自然に見せるためには、関節が曲がってもそれを覆う皮膚を滑らかに接合させることが望ましい。
【0095】
このようなモデルを表現する手法として、スキンメッシュ又はエンベロープと呼ばれる技法を用いてもよい。
【0096】
これらの技法では、非表示のオブジェクトを用意し、その変形にあわせてモデルの形状を変化させてもよい。たとえば、人型のモデルをスキンメッシュで稼働させる場合には、モデルの内部にスケルトン又はボーンと呼ばれる非表示の剛体オブジェクトを骨組み(ボーン)として設定し、この骨組みを動かしてポーズを表現する。
図9は、人間型モデルへ適用したボーン900の例である。
【0097】
ボーンの回転変換と移動変換にあわせて、モデル表面の各頂点の位置が定められる。特にセグメントの間にある関節周辺の頂点では、二つ以上のボーンから影響を受け、各ボーンの変換に従って定められるそれぞれの位置を補間した点を頂点の位置としてもよい。
【0098】
エンベロープ処理を適用したモデルに対して映像を作成するための手法を以下に例示する。
【0099】
誇張表現においてもこの動作を実現するため、各頂点が影響を受けるボーンと影響度の重み付け値を保持することが望ましい。
【0100】
[処理の概要]
スキンメッシュ処理を用いるモデルに対しては、前述の基本技法のみではマルチカメラを用いた誇張描画を実現することが困難な場合がある。そこで、スキンメッシュを用いたオブジェクトに誇張描画を行うための処理として、頂点に視点行列と射影行列を適用して同次表現の四次元ベクトルの値を作った後、w値で除算して通常の二次元画像上の位置情報に変換することが望ましい。そのあとで、影響度に合わせた補間処理を行うことが望ましい。
【0101】
[構成要素]
図10にジョイントとエンベロープの例を示す。既に述べたように、三次元のモデル1002は、たとえば多数の三角形面(ポリゴン)で構成されており、各三角形の頂点データを三次元ベクトルとして保持している。
【0102】
ボーンは頂点に影響を与える範囲を持つ。本明細書では、このボーン1004が影響を与える範囲を示すための幾何データを、エンベロープと呼ぶ。
【0103】
エンベロープによる影響範囲の設定例を以下に説明する。ボーンの周辺に内部境界面1010、その周りに外部境界面1020を設定する。ボーンから頂点への影響度qとして、内部境界面1010の内側にある頂点には1.0、外部境界面1020の外側にある頂点には0.0、その間にある頂点には、二つの境界面からの距離に応じて補間した値(ポリゴンの頂点の値)を与えてもよい。
【0104】
関節の周辺部においては、一つの頂点が、複数のエンベロープから影響度が与えられる。各頂点は、参照すべきノード(ボーン)のID番号をリスト化したデータ[m0,m1,m2,…,mK−1]と、それぞれのノードが頂点に与える影響度をリスト化したデータ[q0,q1,q2,…,q K−1]をもつ。影響度の総和は1、すなわちΣqk=1に設定することが望ましい。以下の説明では影響度の総和を1とする。
【0105】
(ア)ノードの構成:
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置t0m
・基本ポーズにおけるジョイント点の位置j0m
・内部境界面を示す幾何モデル(非可視頂点の集合)
・外部境界面を示す幾何モデル(非可視頂点の集合)
・誇張係数ηm
・親ノードへのリンクn
動的に定められる情報は以下の通りである。
・現在のターゲット点の位置tm
・現在のジョイント点の位置jm
・内部境界面を示す幾何モデルの現在姿勢(非可視頂点の集合)
・外部境界面を示す幾何モデルの現在姿勢(非可視頂点の集合)
・モデリング行列Mm
・疑似視点位置em
・疑似視点行列Vm
・疑似射影行列Pm
(イ)頂点の構成は以下の通りである。
【0106】
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおける頂点位置p0
・ノードへのリンク(リスト)[m0,m1,m2,…,mK−1]
・影響度(リスト)[q0,q1,q2,…,qK−1]
動的に定められる情報は以下の通りである。
・現在の頂点位置ΣqkMmkp0
[描画工程]
描画のための工程全体の例を以下に示す。図4のフローを用いて説明する。
【0107】
[全体の流れ]
本実施例の工程全体の流れは、他の実施例とほぼ同様の構成となる(図4)。ただし、ステップ406「頂点の変換」には主要な変更が加えられている点に留意すべきである。
【0108】
[ステップ402:ポーズの決定]
先に述べた手法に基づき、各ノードmに、モデリング行列Mmを設定する。また、このモデリング行列によって変換されたターゲット点の現在位置tm=Mmt0mと、ジョイント点の現在位置jm=Mmj0mとをそれぞれ計算する。この具体方法については前述の基本実施例に準じて実行してもよい。
【0109】
[ステップ404:カメラの配置]
各ノードmに、カメラパラメータ(視点の位置、カメラ方向、画角)を設定する。これらの情報から、視点行列Vm、射影行列Pmを作成する。この具体方法については前述の基本実施例に準じて実行してもよい。
【0110】
[ステップ406:頂点の変換]
頂点の変換についても基本実施例に準じて実行してもよい。なお、以下の点で変更を加えてもよい。
【0111】
図11は、ボーンの影響度を加味したポリゴンの頂点の変換のフローの詳細を示している。
【0112】
ステップ1102において、基本ポーズにおけるポリゴンの頂点の位置座標p0を読み込む。
【0113】
ステップ1104において、パラメータを初期化する。
【0114】
ステップ1106において、ポリゴンの各頂点に、関連付けられたボーンのリスト[m0,m1,m2,…,mK−1]と頂点に与える影響度[q0,q1,q2,…,qK−1]を呼び出す。Kは、頂点に影響を与えるボーンの数を表し、頂点ごとに固有の値を持っている。
【0115】
ステップ1108において、mk(k=0,1,…,K1)のそれぞれについて、頂点の座標変換を計算する。
[xk,yk,zk,wk]T=PmkVmkMmkp0
ステップ1110において、頂点を、二次元画像上の点に写像し、影響度を掛けて足し合わせる。
(Σqk(xk/wk),Σqk(yk/wk))
ステップ1112、及びステップ1120において、K回繰り返す。
【0116】
ステップ1112において、以下の計算式により、通常の射影行列で深度値を計算し、z0/w0を奥行き深度の値とする。
[x0,y0,z0,w0]T=PVΣqkMmkp0
ステップ1116において、ポリゴンの頂点座標のx,yとzを合成。
【0117】
ステップ1118において、ポリゴンの全頂点において、上記の計算を繰り返す。
【0118】
[ステップ408:画素の塗り潰し]
各面について、頂点で囲まれた領域の画素を塗り潰す。またその際、深度値z0/w0が最も遠い面から描き、近い面で上書きしながら描画する。(前述の手法と同様であってもよい。)
[実施例1の変形例]
誇張表現の描画における頂点の補間処理を、異なるバリエーションで実現する例を以下に挙げる。
【0119】
図12は、実施例2の変形例による頂点の変換のフローを示している。
【0120】
前述の実施例1の手法における「ステップ406:頂点の変換」フェーズにおいて、以下のように計算を行ってもよい。
【0121】
ステップ1202において、基本ポーズにおけるポリゴンの頂点の位置座標p0を読み込む。
【0122】
ステップ1204において、パラメータを初期化する。
【0123】
ステップ1206において、ポリゴンの各頂点に、関連付けられたボーンのリスト[m0,m1,m2,…,mK−1]と頂点に与える影響度[q0,q1,q2,…,qK−1]を呼び出す。
【0124】
ステップ1208において、頂点に影響を与えるノード[m0,m1,m2,…,mK−1]のそれぞれについて、通常のスキンメッシュと同様に補間した座標位置p'を、たとえば下記の計算式により計算する。
p'=ΣqkMmkp0
ステップ1210において、このp'を用いて、mk(k=0,1,…,K1)のそれぞれについて、疑似視点行列と疑似射影行列を適用した誇張視野空間の座標を、たとえば下記の計算式により計算する。
[xk,yk,zk,wk]T=PmkVmkp'
ステップ1212において、この頂点の変換結果を、たとえば下記の計算式により二次元画像上の点に写像する。
(Σqk(xk/wk),Σqk(yk/wk))
ステップ1214、ステップ1220において、K回繰り返す。
【0125】
ステップ1216において、以下の計算式により、通常の射影行列で深度値を計算し、z0/w0を奥行き深度の値とする。
[x0,y0,z0,w0]T=PVΣqkMmkp0
ステップ1218において、ポリゴンの頂点座標のx,yとzを合成する。
【0126】
ステップ1219において、ポリゴンの全頂点において、上記の計算を繰り返す。
【0127】
すなわち、この変形例の場合には、影響度qkによる補間作業は、モデリング行列と、視点・射影行列の二回行われることになる。
【実施例2】
【0128】
誇張の非整合の解消
【0129】
以下に示す実施例2は、それぞれのパーツに異なる射影行列を適用するために起こる不具合を改善することができる。基本技法では、関節部位のそれぞれに対して異なるカメラパラメータで映像を作る。このため、誇張されたパーツの位置関係に矛盾を生じることがある。
【0130】
図13は、描画において、重なりが生じる例を示している。パース誇張なしの画像(図13(A))と、パース誇張の処理により、両手先の描画が重なってしまった画像(図13(B))とが示されている。 パース誇張なしの画像(図13(A))では、近接して両手を前に出している場合などにおいて、本来は重ならない。しかしなら、図13(B)では、物体(両手先)が誇張されて大きく表示される結果、互いに重なって表示されることがある。この理由は、右手と左手に設定されたカメラのパラメータがそれぞれ独立に作成されたため、出来上がった誇張画像では手の画像が重なってしまうからである。図13(C)は、この重なりを回避する処理を施した例である。
【0131】
カメラの位置を三次元的な重心点に動かして違和感を緩和させてもよい。この場合は、カメラを移動させる量が特定できないため、重なりを回避できるまで移動操作を繰り返せばよい。なお、この場合、画面内の見た目の大きさと配置位置が同時に制御されるため、適切なカメラパラメータが求められないことがある。そして、反復の初期条件によって結果が変化する。このため、必ずしも画像上の制約を満たす結果をもたらすとは限らない。さらに、この手法をアニメーションに適用した場合には、時間的に連続したフレームの映像であっても、映像的には互いに連続したものにならず不自然な映像となることがある。(この点については、実施例3で後述する)
以下に示す実施例2は、このような課題にも対応できる。
【0132】
[処理の概要]
以下に詳述する実施例3では、たとえば視線方向に対して垂直な方向へ疑似視点位置を移動させる方法を用いる。また、疑似視点位置の移動量に対する、画面上での像の移動量の比率を計算し、仮配置したオブジェクトが重畳しているのに合わせて疑似視点の移動距離を算出する。
【0133】
[構成要素]
図14は、誇張描画による像の拡張がもたらす重畳を回避する例を示している。図14を用いて、画像の重畳を回避する例を概念的に説明する。図14(A)は、誇張を行ったために、描画が重なってしまった状態を表している。第1のターゲット点の位置tmと、第2のターゲット点の位置tkが表示されている。各ターゲット点には、予め衝突半径が定義されているものとする。図14(A)においては、誇張を行わない場合の衝突半径1408が示されている。その他の衝突半径についても、同様に定義されている(不図示)。そして、誇張表示を行わない場合の衝突領域1404と、衝突領域1414が示されている。また、誇張表示を行った場合の衝突領域1406と衝突領域1416が示されており、両者は重畳して描画されている。重畳して描画される理由は、両者の点に対して、異なる2つの視点(2つのカメラ)を用いて誇張を行っているためである。
【0134】
図14(B)は、2つの視点の位置等を変更して、画像上のターゲット点tmとターゲット点tkの位置を、それぞれベクトル1450及びベクトル1460だけずらす操作を行った例を示している。この操作の詳細は後述する。この操作によって、画像1406は画像1426に移動し、画像1416は画像1436に移動する。その結果、誇張された画像1426と誇張された画像1436は、衝突しない状態で描画される。
【0135】
以下に、画像の重畳を回避する具体例を説明する。
【0136】
シーン内には、頂点データで構成された3Dモデルが配置される。頂点データは特定のノードに関連づけられており、ノードの配置の変化に応じてアニメーションする場合を想定する。
【0137】
また、シーンを観察する基本視点位置と方向が決められているとする。この位置と方向から視点行列を定めることができる。また、映像の画角情報が決められている。この画角から射影行列が定められる。これらの視点位置、方向、及び画角の情報は、入力情報に応じてユーザーが決定するか、又はあらかじめ保存された情報によって決定され得る。これらの変化による画像の変化をいわゆるカメラアニメーションと呼ぶ。
【0138】
ノードの構成を以下のように定める。
【0139】
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置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
[描画工程]
描画のための工程全体を以下に説明する。
【0140】
[全体の流れ]
工程全体の流れは、既に説明した実施例とほぼ同様の構成となる。なお、以下に説明するように、疑似視点位置の配置計算方法に主要変形を加えることが望ましい。図4に示したステップを用いて説明する。
【0141】
[ステップ402:ポーズの決定]
先に述べた手法に基づき、各ノードmに、モデリング行列Mmを設定する。また、このモデリング行列によって変換されたターゲット点の現在位置tm=Mmt0mと、ジョイント点の現在位置jm=Mmj0mとをそれぞれ計算する。
【0142】
[ステップ404:カメラの配置]
この実施例2では、既に述べた手法によってカメラ配置方法に基づいて射影中心を一旦設定し、その後にカメラ位置の修正を行うことが望ましい。
【0143】
上記の制約条件を満たすPmVmは、図に15示す手順で作成することができる。
【0144】
ステップ1500において、ジョイントとターゲットの位置を設定する。
【0145】
読み出した各ジョイントmの回転角度情報Rm等によって、セグメントの向きと位置を定め、キャラクタのポーズを決定する。これらの情報を前述の基本手法に適用し、各セグメントmの移動変換を行う行列Mmを作成する。
【0146】
ステップ1501において、疑似視点の仮位置を定める。親階層の疑似視点位置enと自分のターゲット点位置tmとを結んだ直線の上に、以下の式を用いて、疑似視点位置emを設定する。
em=(enmtm)/(1+ηm)
本実施例では、ηmには、ノード構造体にあらかじめ保存されている定数パラメータを読み出して利用する。
【0147】
疑似視点位置emとカメラ方向から、疑似視点行列Vmを作る。疑似カメラの方向は基本カメラ(疑似でないカメラ)の方向と同じ方向にすることが望ましい。
【0148】
ステップ1502において、疑似射影行列のズーム補正量を決定する。疑似射影行列の画角を補正し、ジョイント点jmを含む平面z=Vnjm.z(en視点座標系)において、親ノードの疑似射影行列で写した画像のスケール(射影された画像の置きさ)と、このノードの疑似射影行列で写した画像のスケール(射影された画像の大きさ)とが、略一致するようにする。
【0149】
親ノードの疑似射影行列Pnが既に確定しており、
【0150】
【数13】
であるとする。これを元に、ノードmの射影行列Pmを求める。Pmの成分は次のとおりとする。
【0151】
【数14】
まず、以下のように画角のみを修正した疑似射影行列P'mを作る。
【0152】
【数15】
ステップ1503において、疑似射影行列の斜め補正量を決定する。すなわち、疑似射影行列の斜め補正量を修正し、ジョイント点jmを含む平面z=Vnjm.z(en視点座標系)において、親ノードの疑似射影行列で写した画像と、このノードの疑似射影行列で写した画像が、一致するようにシフト量を設定する。
【0153】
シフト量を設定する前の疑似射影行列であるP'mに対して、(0,2)及び(1,2)成分を以下のように修正し、これをPmとする。
【0154】
【数16】
ステップ1504において、疑似射影行列での各種情報を求める。画像が互いに衝突していないかを検討するために、各ノードの疑似射影行列について、以下の値を計算する。
【0155】
(1504−1)ターゲット点の二次元像位置を計算する。疑似射影処理PmVmによって写された画面上の座標(x,y)は、-1<x<1,-1<y<1となっている。この値に対して画面の縦横比を調整し、-1<x<1,-Sa<y<Saにした二次元座標値を二次元像と呼ぶことにする。ただし、Saは画面の縦横比(縦サイズ/横サイズ)である。
【0156】
ターゲット点tmの二次元像をt'mとする。t'mは次式により求められる。
t'm.x=PmVmtm.x/PmVmtm.w
t'm.y=[PmVmtm.y/PmVmtm.w]Sa
(1504−2)ターゲット点の周りの二次元像のサイズを計算する。ターゲット点を中心とする微小三次元球(半径δ、δ<<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)をターゲット点の周りでの二次元像の拡大率と呼ぶ。
【0157】
(1504−3)擬似視点位置の移動に対する、二次元像の移動比率を求める。疑似視点位置emがem視点座標系のx方向に微小量(δ,0,0)だけ移動した場合に、画像上でターゲット点が移動する量を計算する。射影行列Pmを固定したまま、ジョイント点jmが(δ,0,0)だけ微小移動した場合に、ジョイント点の二次元像が移動する量は、ジョイント点の周りでの二次元像の拡大率ρm(jm)を用いて、ρm(jm)δと表現できる。したがって視点位置が(−δ,0,0)だけ移動した場合にも、ジョイント点はρm(jm)δだけ移動することとなる。
【0158】
疑似射影行列では、斜め補正の量を調整することで、ジョイント点の画像上の位置を一定に保つ。この斜め補正を行った場合、ターゲット点は
[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]
を、疑似視点位置の移動に対するターゲット点の二次元像の移動比率として保存しておくことが望ましい。
【0159】
図16は、疑似視点位置の移動によるターゲット点の移動を示している。
【0160】
点1610が、元の擬似視点位置を用いた場合のターゲット点の像の位置を示している。そして、点1620が擬似視点をδだけ移動した場合のターゲット点の像の位置を示している。
【0161】
図15に戻る。
【0162】
ステップ1505において、誇張画像のノード間で衝突判定を行う。誇張画像の全てのノードの組み合わせのペアに対して、誇張画像上で衝突が起こっていないかをチェックする。修正前の疑似視点位置を、e'mと表記して、詳細を以下に説明する。
【0163】
(1505−1)XY方向での衝突が起こっているか否かの判断を行う。この判断は、以下のようにして行ってもよい。
【0164】
二つのセグメントのペアを選び出す。それぞれのノード番号をm,kとする。それらのセグメントのターゲット点の二次元像t'm、t'kに対して、二次元平面上での距離を調べる。
【0165】
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となる。この和を
d1m(tm)rmk(tk)rk
とする。
【0166】
d0<d1、すなわち衝突半径の、二次元平面上での大きさの和が二次元平面上での距離よりも大きいならば、二次元平面上で衝突が起こっているとみなしてもよい。そして、以下のステップ(1505−2)に進む。
【0167】
(1505−2)Z方向で衝突範囲にあるかを確認する。ノードの奥行き方向の差をd2=|Vmtm.z−Vmtk.z|と設定する。
d2<rm+rk、すなわち奥行きの差が衝突半径の和よりも小さいならば、奥行き方向について衝突が起こりうるものとみなし、ステップ(1505−3)に進む。
【0168】
(1505−3)衝突の回避量を計算する。衝突を回避するために、それぞれの二次元像を移動させるべき量を計算する。衝突の回避に必要な二次元画像上で移動距離は、上記(1505−1)における変数によってd1−d0として計算できる。
【0169】
ノードごとにあらかじめ重さを設定しておき、この重さを使って移動量を配分してもよい。ノードm,kの重さを、それぞれαm、αkとする。ターゲット点tmの二次元画像上での移動量は、必要な移動距離にαm/(αmk)を掛けたものにしてもよい。
【0170】
二次元画像上でのターゲット点tmの移動方向(単位長の二次元ベクトル)は、
τ0m=(t'm−t'k)/|t'm−t'k|
で表せる。
【0171】
これに移動量を掛け、ターゲット点tmの二次元画像上の移動量(二次元ベクトル)は、
τ1m=(d1−d0)(αm/(αmk))τ0m
となる。
【0172】
この画像上の移動量τ1mを実現する疑似視点位置の修正量(視点座標系)をμmとし、これを次式により求めることができる。
μm.xy=[τ1m/S(tm)].xy
μm.zw=(0,0)
(1505−4)擬似視点位置を修正する。最終的な修正後の疑似視点位置は、次式を満たすemとなる。
Vmem=Vme'mm
得られたemを使ってVmを作り直す。この修正を行うことによって、各セグメントのターゲット点の周辺物体が、不自然に重なり合うことを回避する。
【0173】
ステップ1506において、修正された疑似視点に合わせて射影行列のズーム補正量を再計算する。 ステップ1507において、修正された疑似視点に合わせて射影行列の斜め補正量を再計算する。このように擬似視点位置を修正することは、描画のためのパラメータの修正を意味する。
【0174】
[ステップ406:頂点の変換]
図4に戻り、ステップ406において頂点の変換を行う。モデルの各頂点(基本ポーズにおける位置座標をp0とする)に対し対応するノードmを検索し、そのノードの疑似視点行列と疑似射影行列を用いて、誇張表現での視野空間の位置を計算する。
[x,y,z,w]T=PmVmMnp0を計算する。
【0175】
頂点は、最終的に二次元画像上の点(x/w,y/w)に写像される。
【0176】
また、別途通常の視点行列と射影行列を用いて、通常の視野空間の位置(基本カメラを使って射影変換された座標値)
[x0,y0,z0,w0]T=PVMmp0
の値を計算し、z0/w0を奥行き深度の値とする。
【0177】
[ステップ408:画素の塗り潰し]
二次元画像上の画素を塗り潰す(ラスタライズ処理を行う)。
【0178】
この塗り潰しにおいては、最終的に手前の三角形の色が見えなければならないので、描画順序が重要になる。この描画の奥行き順序を守るために、頂点の変換によってえられた深度値z0/w0を用いて面をソートしておき、最も遠い面から描き、近い面で上書きしながら描画してもよい。
【0179】
上述の実施例2の手法による物体の重畳回避では、奥行き方向(視点座標系のz方向)のカメラの移動を行わなくてもよく、射影面に平行な方向(視点座標系のxy面)にカメラの移動を行ってもよい。またこの際、たとえば、射影面に平行な方向に疑似視点位置を動かす量と、画像上でオブジェクトが動いて見える量の比率をあらかじめ計算している。この比率を用いて、画像上でのオブジェクト重畳の回避に必要な量だけ疑似視点位置を動かしている。
【0180】
[その他の変形例について]上記実施例2の手法以外に、セグメントが衝突した場合、二つの疑似視点位置em,ekを、三次元的な重心(em+ek)/2の方向に向けてそれぞれ移動させてもよい。なお、この場合、移動量が不確定なため、微小量の移動を問題が解決するまで反復させることが望ましい。
【実施例3】
【0181】
アニメーションの平滑処理
【0182】
実施例2で取り上げた誇張描画の手法をアニメーションに用いた場合には、アニメーションの一部のフレームで、急激な姿勢の移動が起こる場合がある。これは、見た目上の重畳が起こった場合にのみ修正処理の調整効果が加わることに起因する。
【0183】
この場合、以下の手順を導入することで、アニメーションにおいて、よりスムーズにオブジェクトの重畳を回避することができる。
【0184】
実施例3の以下の説明は、冗長を避けるために、実施例2と異なる部分を中心に説明する。
【0185】
[処理の概要]
アニメーションの各フレームfについて、疑似視点の仮位置e'm(f)を定める。この時、アニメーションの途中で、物体同士が衝突・接近したために表示位置を修正する処理が発生することがある。たとえば、このような修正が行われるフレームfcをあらかじめ検出し、その前後のフレームfc+1,fc−1の修正量を、フレームfcの修正量に近づける。この補正処理をN回反復処理して繰り返すと、修正量が伝播されて平滑化を行うことができる。
【0186】
[構成要素]
視点位置・方向・画角の情報は、入力情報に応じてユーザーが決定するか、又はあらかじめ保存された情報によって決定され得る。これらの変化による画像の変化をカメラアニメーションと呼ぶ。カメラアニメーションにおいては、視点行列Vと射影行列Pが、それぞれフレームfの関数になる。
【0187】
また、キャラクタのポーズの変化に伴うアニメーションを、ポーズアニメーションと呼ぶ。ポーズアニメーションではモデリング行列Mmがフレームfの関数になる。
【0188】
ノードの構成を以下に示す。
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置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
[描画工程]
描画のための工程全体を示す。
【0189】
[全体の流れ]
工程全体の流れは先の実施例とほぼ同様の構成となるが、アニメーション時間に応じてフレーム数だけのパラメータを生成し、互いの影響を考慮することが望ましい。また、後述するように、疑似視点位置の修正を伝播させる計算を導入することが望ましい。他の実施例と同様に、図4を用いて処理の流れを順に説明する。
【0190】
[ステップ402:ポーズの決定]
各フレームfごとに、全ノードmのモデリング行列Mmを設定する。また、このモデリング行列によって変換されたターゲット点の位置tm(f)=Mm(f)t0mと、ジョイント点の位置jm(f)=Mm(f)j0mとをそれぞれ計算する。
【0191】
[ステップ404:カメラの配置]
カメラの配置は、たとえば実施例2での処理に基づき、以下の工程手順を経て決定してもよい。
【0192】
ただし、実施例2におけるステップ1500〜ステップ1504の各処理工程では、フレームfに応じた値をそれぞれ計算し、保存する。また、ステップ1505の「誇張画像のノード間での衝突判定」においては、フレーム間の平滑化処理のために以下の1505−a1〜1505−a4の各処理を行う。
【0193】
図17は、アニメーション平滑化のための処理フローを示している。以下では、図15及び図17を用いて実施例2と異なる部分について説明を行う。
【0194】
(1505−a1)
全フレームに渡って以下の1505−a1の詳細処理を行い、修正量μn(f)を設定する(fはフレーム番号、nはノード番号)。
【0195】
(1505−a1−0)修正量の初期値の代入
ステップ1702において、初期値の代入を行う。すなわち、
μn(f).xy=(0,0)
とする。
【0196】
(1505−a1−1)修正量の設定
ステップ1704ないしステップ1712によって、全てのノードの組み合わせ(k,m)について、以下の1505−a1−1−1〜1505−a1−1−2の処理を行う。
【0197】
(1505−a1−1−1)衝突確認
ステップ1704において、ノードの対の選択を行う。そして、ステップ1706において、フレームfでxy方向での衝突が起こっているかを確認する。また、フレームfで、z方向で衝突範囲にあるかを確認する(ステップ1708)。衝突していれば、1505−a1−1−2でμm(f)、μk(f)を設定する。
【0198】
(1505−a1−1−2)修正量の計算
フレームfで衝突を回避するための、疑似視点位置(視点座標系)の修正量μm(f)を計算する。μk(f)についても同様に計算を行うことができる(ステップ1710)。
τ0m=(t'm−t'k)/|t'm−t'k|
τ1m=(d1−d0)(αm/(αmk))τ0m
μm(f).xy=[τ1m/S(tm)].xy
μm(f).zw=(0,0)
(1505−a2)フレーム間修正量の平滑化
ステップ1714で隣接ノードを選択する。そして、ステップ1716において、フレーム間で、修正量μn(f)の平滑化処理を行う。各フレームfに対して、以下の1505−a2−1及び1505−a2−2の処理を行う。
【0199】
(1505−a2−1)修正量の平滑化
全てのノードについて、次式によって、フレーム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が挙げられる。本発明は、この値に限定されるものではない。この平滑化によって、1505−a1−1で設定した修正量が減ることも起こり得るが、下記1505−a4の反復により再度修正が行われる。
【0200】
(1505−a2−2)衝突再判定
ステップ1718において、全てのノードの組み合わせ(k,m)について、1505−a1−1−1のルーチン処理を用いて、フレームfの画像上での衝突が再び発生していないかを判定する(ステップ1722)。衝突している場合、フレームfの修正量平滑化をキャンセルしてもよい(ステップ1720)。そして、次のフレームに処理を進める。
【0201】
(1505−a3)擬似視点位置を修正する
修正量μm(f)に基づいて、以下の式を利用して、疑似視点位置を修正する。
Vm(f)em(f)=Vm(f)e'm(f)+μm(f)
以上の処理を全隣接ノードに対して行う(ステップ1724)。
【0202】
(1505−a4)修正の反復
ステップ1726において、上記の1505−a1〜1505−a3の処理を繰り返す。計N回反復する。
【0203】
以上の処理によって、カメラ位置の移動量が決定される(ステップ1728)。 [ステップ406:頂点の変換]
各フレームfに対して、頂点の変換を行う。
【0204】
モデルの各頂点(基本ポーズにおける位置座標を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を奥行き深度の値とすることができる。
【0205】
[ステップ408:画素の塗り潰し]
各フレームfに対して、二次元画像上の画素を塗り潰す(ラスタライズ処理を行ってもよい)。この塗り潰しにおいては、最終的に手前の三角形の色が見えなければならないので、描画順序が重要になる。この描画の奥行き順序を守るために、頂点の変換によってえられた深度値z0/w0を用いて面をソートしておき、最も遠い面から描き、近い面で上書きしながら描画してゆくことが望ましい。
【実施例4】
【0206】
誇張係数パメラータの設定
【0207】
以上の実施例では、関節部位のそれぞれに対して、カメラの位置を制御するためのパラメータ(誇張係数)をあらかじめ設定することが望ましい。なお、類似のモデルを既に作成した場合には、誇張係数として同じ値、又は略同じ値を用いることで作業を効率化することが期待できる。しかしながら、新しいモデルを作成したときに、以下のような理由でパラメータの流用が困難な場合が想定される。
(1)全てのモデルで関節部位が一対一に対応しているとは限らない。例えば、スカートのような洋服の部位、長い髪の毛等にもボーンを設定し、ポーズを定められるようにしたモデルがある。このような場合に、各部位に対してそれぞれ誇張係数を定める場合には、調整の手間が大きい。
(2)異なる体型の人型物体のモデルを作成した場合には、適切なパラメータを新たに設定しなければならない場合がある。
【0208】
以下に述べる実施例4は、誇張係数が定められていない新たなモデルに対しても、基本となる形状タイプを選択することによって誇張係数のパラメータが類推されて設定され得る。
【0209】
[処理の概要]
標準的な形状のモデル(標準エンベロープ)を用いる。ある特定のモデルに、既に適切な誇張係数が設定されていると仮定する。標準エンベロープ(あるいはモデル)のポーズ又は各部位寸法を調整することで、モデルの関節位置と標準エンベロープの対応する関節位置を概ね一致させることができる。その状態で、たとえば、標準エンベロープの各頂点に対して、最も近いターゲット点に関連付けられた誇張係数の値を、その頂点の誇張係数として保存する。
【0210】
誇張係数の値が保存された標準エンベロープをデータベースに保存し、新規モデル作成時に、この標準エンベロープの情報を呼び出して使うことができる。
【0211】
たとえば、新しいモデルの各ターゲット点に対して、標準エンベロープの最も近い頂点を探し、その頂点の誇張係数の値をターゲット点の誇張係数とする。
【0212】
標準エンベロープは、キャラクタの種類(体型など)に応じて複数用意してもよい。
【0213】
構成要素として、たとえば以下のものが挙げられる。
・モデル形状
・関節構造
・標準エンベロープモデル
標準エンベロープモデルの頂点データとして、たとえば以下のものが挙げられる。
・頂点の位置
・誇張係数
[全体の流れ]
全体の流れは、誇張係数を割り当て済みのモデルから、エンベロープに誇張係数をコピーする工程と、誇張係数が割り当てられていないモデルに、エンベロープから誇張係数をコピーする工程の二つに大きく分けられる。
【0214】
図18は、モデルの各部位への誇張パラメータの設定のフローを示す図である。図18(A)は、標準エンベロープ作成段階のフローの例を示している。図18(B)は、新規モデルへの誇張係数のコピーのフローの例を示している。以下、実施例4の詳細を説明する。
【0215】
[A.エンベロープ作成段階]
図19は、3Dキャラクタとエンベロープの重ね合わせを示している。3Dキャラクタ1902は、すでに誇張係数が設定されていると仮定する。
【0216】
ステップ1812において、人間の標準形態を表す簡易形状のモデルである標準エンベロープ1904を読み込む。この標準エンベロープ1904は、複数の頂点から構成されているが、3Dキャラクタ1902よりは粗い(頂点数が少ない)作りであってもよい。
【0217】
ステップ1814において、関節点の位置のフィットが行われる。具体的には、3Dキャラクタ1902の関節点と、標準エンベロープ1904の関節点(たとえば、エンベロープの間節位置1906)の位置を略一致させる処理を行ってもよい。標準エンベロープ1904の関節点と同じ名前の関節点が3Dキャラクタ1902に設定されている場合には、標準エンベロープ1904の関節点の位置を3Dキャラクタ1902の関節点の位置に移動してもよい。関節の対応関係が誤りである場合、又は適切な関節が存在していない場合には、オペレータに関節点の位置を動かすよう促してもよい。
【0218】
標準エンベロープ1904の頂点pは、以下の手順で関節点の位置1906に合わせて移動させる。まず、標準エンベロープ1904の頂点Pの近傍の3Dキャラクタの関節点の位置(j0,j1,j2,…,jK-1)を抽出し、頂点Pから関節点の位置までの距離(d0,d1,d2,…,dK-1)を計算する。それらの関節点の移動量(v0,v1,v2,…,vK-1)を補間して、頂点Pの移動量vを以下のように決定してもよい。
【0219】
【数17】
ステップ1916において、誇張係数のコピーを行う。エンベロープの各頂点pについて、近傍のターゲット点を上位N個だけ探す。頂点pの近傍にあるターゲット点を(t0,t1,t2,…,tN-1)とし、pからターゲット点までの距離(d0,d1,d2,…,dN-1)を計算する。
【0220】
それらのターゲット点の誇張係数(η012,…,ηN-1)を補間して、誇張係数ηを以下のように決定してもよい。
【0221】
【数18】
ステップ1818において、エンベロープデータの保存が行われる。関節位置を変更し、エンベロープの各頂点の情報(誇張係数、3D情報、ターゲット点から頂点までの距離)を、データベースに保存してもよい。またこの際に、コピー元となった3Dキャラクタの画像と、作成者の名前、又は設定コンセプトの意図を記したテキスト情報も併せて保存してもよい。
【0222】
一般に、誇張の度合いをどのように設定するかについては必ずしも最適値がある訳ではなく、モデルの種類(男性キャラクタ/女性キャラクタ/ロボット/ぬいぐるみなど)、又は作家の個性などによってばらつきがある。そこで、誇張係数を設定するコンセプトとして、たとえば特定のアニメーション会社、又は特定の作家の作風をシミュレーションした場合には、シミュレーションのモデルとなった作家の名前を、設定コンセプトの意図を記したテキスト情報として記載してもよい。
【0223】
[B.新規モデルへの誇張係数のコピー]
まだ誇張係数が指定されていない3Dキャラクタのモデルに対して、以下の手順で誇張係数をコピーすることができる。
【0224】
ステップ1832において、前記のステップ1818で保存した標準エンベロープを呼び出す。標準エンベロープが複数用意されている場合には、キャラクタの種類(体型など)に応じて適切なものを選ぶ。選択の方法の一例を挙げる。データベースに蓄えられた既存の標準エンベロープ情報と、そのエンベロープ作成時に使われた3Dキャラクタの画像をデータベースから呼び出して、一覧画面上に提示する。この際、関節間の距離の比率が現在のモデルに近いものから順にソートして並べてもよい。またこの際に、作成者の名前、又は設定コンセプトの意図を記したテキスト情報も併せて表示してもよい。
【0225】
利用者はこの一覧の中から一つのモデルを指定し、その保存された標準エンベロープを呼び出す。複数の候補がある場合には、補間データの影響度を手動で操作する機構を用意してもよい。表示画面には、モデルの元情報が記載されており、誇張係数の設定コンセプトが保存されている。手動入力画面を用いることで、複数の選択肢の中から、状況に有った誇張パラメータを選び出すことができる。
【0226】
或いは、パターン認識技術を利用して、キャラクタとのマッチングを行ってもよい。所定のパターン認識技術を用いて、最も近い標準エンベロープを読み出してもよい。或いは、キャラクタに近い複数種類の標準エンベロープを取り出して、選択できるように表示してもよい。オペレータに複数種類のエンベロープから、1つの標準エンベロープを選択するよう促してもよい。
【0227】
ステップ1834において、関節位置のフィットを行う。標準エンベロープの関節位置を3Dキャラクタの関節位置に移動する。上述の手法を持用いて、エンベロープの関節位置をモデルの対応する関節位置に移動し、関節点の移動量(v0,v1,v2,…,vK-1)からエンベロープ頂点の移動量vを以下のように決定してもよい。
【0228】
【数19】
この移動量vに基づいて、エンベロープの頂点を移動させてもよい。
【0229】
ステップ1836において、拡張計数のコピーを行う。現在の3Dキャラクタのターゲット点について、もっとも近傍にある標準エンベロープの頂点を上位N個だけ探す。このN個の頂点からターゲット点までの距離及び頂点の誇張係数を、それぞれ(d0,d1,d2,…,dN-1)、及び(η012,…,ηN-1)とする。このN個の誇張係数を補間して、新しい誇張係数ηを以下のように決定してもよい。ただし、右辺のηkは標準エンベロープの頂点の誇張係数、左辺のηは新しい3Dモデルのターゲット点に保存される誇張係数である。
【0230】
【数20】
[複数モデルの混合]
また、複数のモデルを指定して読み込むことが必要になる場合がある。たとえば現在のモデルが長い髪の毛のボーンなどを保持しており、コピー対象としたいエンベロープにおいては対応するパーツが存在しない場合がある。この場合、その部分だけは別のモデルから誇張係数を呼び出して用いたいという要望が想定される。この場合に、以下のような処理を行ってもよい。
「ステップ1832のエンベロープの選択と読込」の工程において、複数(H個)のエンベロープデータと、それぞれの影響度q0,q1,q2,…,qH-1を入力する。
「ステップ1836の誇張係数のコピー」の工程において、以下のように誇張係数を計算してもよい。
【0231】
【数21】
ただし、右辺のηh,kはエンベロープから呼び出された誇張係数であり、左辺のηは新しい3Dモデルのターゲット点に保存される誇張係数である。この処理によって、関節点の近くにあるデータがより大きな重みづけをされるようになるため、参照するデータのうちで対応するボーンが存在しないモデルからの影響が小さくなる。
【0232】
[ボーンの利用]
ボーン構造を持った3Dキャラクタを扱う場合には、エンベロープの替わりにボーンを使う方法も可能である。標準エンベロープの替わりに標準ボーンモデルを用意してもよい。標準ボーンモデルの各ボーンに誇張係数を保存しておいてもよい。新しいキャラクタモデルを使う際には、まず標準ボーンモデルとの間で対応する部位のボーンどうし(複数対複数)に対応関係を付けてもよい。次にキャラクタの各ターゲット点に対して標準ボーンから誇張係数をコピーしてもよい。
【0233】
また、ブレンド比率を手動入力する機構を付与することによって、作家の誇張作風をブレンドするシミュレーションを行うこともできるようになる。
【実施例5】
【0234】
誇張量の動的な調整
【0235】
上述の基本技法では、関節部位の位置だけで、誇張の量が自動的に決まってしまう。しかしながら、実際にはパースの誇張を行いたい場合と行いたくない場合が存在することがある。例えば、視点に向けて手を突き出している場合には誇張を行う方がインパクトのある映像が作れるが、目の前のペン(誇張されていない物体)に手を伸ばしている場合にはパースの誇張表現を行わない方が、ペンと手の大きさの矛盾が顕著とならない。
【0236】
また、画面奥方向に向かって伸びている物体に対しては、パースの誇張を用いる作風と用いない作風がある。また特に画面奥行き方向に誇張する場合にも、例えば地面と足が接している場所では矛盾が生じることもある。
【0237】
実施例5では、このよう各状況に応じて、誇張操作を用いるか用いないかを自動で使い分ける機能を実現する例を示す。
【0238】
[処理の概要]
実施例5では、各ノードが特定の意味条件を満たしているかを判断し、その結果に応じて誇張係数を変動させてもよい。たとえば、以下の三条件を判断基準とすることができる。
(1)物体の近接判定:ターゲット点が、特定の物体と接近しているか。
(2)方向指示の判定:ジョイント点からターゲット点に向かう方向が、特定の物体に向いているか。
(3)ポーズの判定:モデルの関節構造が、あらかじめ定められたポーズと類似しているか。
【0239】
この条件の何れかを満たしているノードの組み合わせが有った場合、誇張量の制御グラフ上に補助枝を追加してもよい。そして、グラフ内で誇張係数を伝播させて、制約条件を満たすような距離を調達してもよい。この誇張量を制御するために用いる距離を、疑似視点距離と呼ぶ。
【0240】
疑似視点距離は、基本視点位置e0から疑似視点位置emに向かうベクトルの、視点座標系におけるz方向成分として定義され、これをezmとする。この疑似視点距離の設定に際しては、誇張量の比較対象となる点を親ノードに限らずに自由に設定してもよい。この点を比較母点とよび、比較母点を含むノードのIDをbで表現する。
【0241】
基本技法では、疑似視点の位置は、上段ノードでの比率をあらわす誇張係数を用いて設定された。この実施例では、たとえば、疑似視点距離ezm=V0(em−e0).zを先に決定し、この値に合わせて疑似視点位置を移動させる。
【0242】
以下に述べる実施例では、カメラと被写体の距離を制御して非整合を起こしている特定領域の見た目の大きさを調整する操作を、スクリーン平面に沿ったカメラ位置を調整する操作とは独立に行ってもよい。
【0243】
[構成要素]
ノードの構成
あらかじめ保存されていることが望ましい情報は以下の通りである。
・基本ポーズにおけるターゲット点の位置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モデルにおける物体との衝突判定、モーションのパターン、視線との向きなどの意味条件を判別する。たとえば、その値に応じて、疑似視点距離を変更する。以下、図4のフローを再度用いて、処理の流れを説明する。なお、重複した説明を避けるため、本実施例に特有の変更点を主に説明する。
【0244】
[ステップ402:ポーズの決定]
1−1 モデリング行列の設定
シーンに物体を配置する。関節モデルについては、ポーズをそれぞれ設定する。各ノードmについて、回転角度のデータRmを呼び出し、先に述べた順運動学に基づいた手法に基づき、ノードmごとに、モデリング行列Mmを設定する。
【0245】
1−2 ターゲット点、ジョイント点の確定
モデリング行列によって変換されたターゲット点の現在位置tm=Mmt0mと、ジョイント点の現在位置jm=Mmj0mとを計算する。
【0246】
1−3 物体の接続判定
シーン内にあるノードの組み合わせ(m0,m1)について、たとえば、接触判定を行う。ノードm0,m1として想定される例としては、m0が身体部位(例えば手)で、m1が物体(例えば拳銃)、が挙げられる。
【0247】
ノードのターゲット点の距離|tm0−tm1|が、衝突距離rm0+rm1より小さい場合には、接触がある(例えば拳銃を手に持っている)とみなし、ノードm0の一時接続ノードリストに、ノードm1を登録する。またノードm1の一時接続ノードリストに、ノードm0を登録することが望ましい。
【0248】
この際、いくつかの特別な物体には、たとえば、値φcを関連付けて登録しておき、接触したノードの誇張距離係数をψm←ψmφcと変化させてもよい。これにより、物体に接触した場合にパースの誇張を更に強調することができる。たとえば、拳銃、日本刀など、保持するポーズにインパクトを与えたいオブジェクトについては、このような処理を行うと効果的である。
【0249】
1−4 方向指示の判定
母点b0からターゲット点m0に向かう方向が、特定の物体m1に向いているかの判定を行ってもよい。想定される例としては、母点ノードb0のジョイントが肩、ノードm0のターゲットが指先、ノードm1のターゲットが宝箱である場合が挙げられる。たとえば、方向tm0−jb0(例えば肩から指先に向かう方向)と、方向tm1−jb0(例えば肩から宝箱に向かう方向)のなす角度が閾値角度以下であった場合には、特定の物体に向いている(例えば宝箱を指さしている)とみなす。そして、ノードm0の一時接続ノードリストに、ノードm1を登録する。またノードm1の一時接続ノードリストに、ノードm0を登録してもよい。
【0250】
この際、いくつかの特別な物体には、たとえば、値φcを関連付けて登録しておき、誇張距離係数をψm←ψmφcと変化させてもよい。これにより、身体部位の方向が特定の物体に向いている場合、例えば宝箱を指さすなどの動作が行われた場合に、パースの誇張を強調して行うことができる。
【0251】
1−5 ポーズの判定
モデルの一部の関節角度が、あらかじめ設定された関節角度に近いかを判定してもよい。たとえば、手首から先のノード関節情報[m1,m2,m3,…]について、あらかじめピースサインのポーズの関節角度[R1,R2,R3,…]を登録しておく。この角度に近い場合にはピースサインのポーズであると判定してもよい。
【0252】
特定のポーズであると判定された場合には、たとえば、モデルのノードの誇張距離係数ψmに、そのポーズに関連付けて登録されていた値φcを掛け合わせ、ψm←ψmφcと調整する。たとえば、ピースサイン、ガッツポーズなど、特定のポーズにインパクトを与えたい場合は、このような処理を行うと効果的である。
【0253】
1−6 視線方向の影響による調整
視線方向影響値νを使って、誇張距離係数ψmを調整することができる。ノードの特徴的な方向を表すのに適した母点を、ノード上に設定しておく。例えば、前腕に相当するノードのターゲット点が手首の位置に設定されているときに、肘付近に母点を設定する。すると、母点からターゲット点に向かう方向が、前腕がどの方向を向いているかを表すことになる。
【0254】
たとえば、母点からターゲット点に向かう方向tm−jbと、母点から視点位置への方向e0−jbとのなす角度θを計算する。cosθが正、すなわち対象ノードが視点の方向を向いている場合にはνm=cosθ、そうでない場合にはνm=0を保存する。そして、νmが正の場合、誇張距離係数ψmにνmを掛け合わせ、ψm←ψmνmと調整してもよい。
【0255】
1−7 擬似視点距離の導出
モデルのノードに対して、たとえば、以下のように疑似視点距離ezmを定めることができる。
【0256】
【数22】
1−8 擬似視点距離の伝搬
疑似視点までの距離に矛盾が生じて、画像上での大きさの狂いが生まれないように、疑似視点距離を伝播させることができる。例えば、手の誇張量と手に持った物の誇張量が大きく異なると不自然であるため、両者の誇張量を調整することができる。
【0257】
上述の1−7で設定した値ezmに対して、疑似視点距離の補正値ζmを与える。互いに親子関係にあるか、一時接続ノードとして登録されている条件を満たしたノードの組み合わせをCとしたとき、以下の評価関数Φを最小化するようにζmを調整してもよい。
【0258】
【数23】
この式の右辺第1項は、親子関係又は一時接続関係にあるノード(m0とm1)について、両者の誇張程度をなるべく同程度にする効果を持つ。また右辺第2項は、修正量ζm自体をなるべく小さくする効果を持つ。βは、両効果の強さ(両者の比)を調整するパラメータである。
【0259】
得られたζmを使って、以下のようにしてezmを調整することができる。
【0260】
ezm←ezm+ζm
[ステップ404:カメラの配置]
他の実施例との変更点を主として説明する。たとえば、基本となるカメラパラメータ(視点の位置e0、カメラの方向θ0、画角)を設定する。これらの情報から、視点行列V0、射影行列P0を作成する。視点行列V0は、視点位置e0を原点とする移動行列T(pをp−e0に平行移動する)と、視線方向θをz軸に回転する回転行列R0によってV0=R0T0として定義される。
【0261】
射影行列には、既に説明した形式の行列を以下のように設定する。
【0262】
【数24】
、それぞれ水平方向・垂直方向の画角(その半分の正接の逆数)になる。たとえば、各セグメントmに、カメラパラメータ(視点の位置、カメラ方向、画角)を設定する。これらの情報から、視点行列Vm、射影行列Pmを作成してもよい。
【0263】
2−1 擬似視点の位置を定める
疑似視点距離ezmを使って、疑似視点の位置を定める。たとえば、親階層の疑似視点位置enと自分のターゲット点位置tmとを結んだ直線の上に、以下のように疑似視点位置emを設定する。
【0264】
【数25】
2−2 擬似射影行列のズーム補正量を決定する
疑似射影行列の画角を補正し、ジョイント点jmを含む平面z=Vnjm.z(en視点座標系)において、親ノードの疑似射影行列で写した画像のスケールと、このノードの疑似射影行列で写した画像のスケールが、略一致するようにする。
親ノードの疑似射影行列Pnが以下のように既に確定しており、
【0265】
【数26】
であるとする。これを元に、ノードmの射影行列Pmを求める。Pmの成分は次のとおりとする。
【0266】
【数27】
まず、以下のように画角のみを修正した疑似射影行列P'mを作る。
【0267】
【数28】
2−3 擬似射影行列の斜め補正量を決定する
疑似射影行列の斜め補正量を修正し、ジョイント点jmを含む平面z=Vnjm.z(en視点座標系)において、親ノードの疑似射影行列で写した画像と、このノードの疑似射影行列で写した画像が、略一致するようにシフト量を設定する。
【0268】
シフト量を設定する前の疑似射影行列P'mに対して、(0,2,)成分及び(1,2)成分を以下のように修正し、これをPmとする。
【0269】
【数29】
以上の2−1から2−3の手順に従って、たとえば、トップダウンで親ノードから順に疑似カメラを配置してゆく。
【0270】
[ステップ406:頂点の変換]
モデルの各頂点(基本ポーズにおける位置座標をp0とする)に対し対応するノードmを検索し、そのノードの疑似視点行列と疑似射影行列を用いて、誇張表現での視野空間の位置を以下の式により計算してもよい。
[x,y,z,w]T=PmVmMmp0
頂点は、最終的に二次元画像上の点(x/w,y/w)に写像される。また、別途通常の視点行列と射影行列を用いて、通常の視野空間の位置(基本カメラを使って射影変換された座標値)
[x0,y0,z0,w0]T=PVMmp0
の値を計算し、z0/w0を奥行き深度の値とする。
【0271】
[ステップ408:画素の塗り潰し]
二次元画像上の画素を塗り潰す(ラスタライズ処理)。この塗り潰しにおいては、最終的に手前の三角形の色が見えなければならないので、描画順序が重要になる。この描画の奥行き順序を守るために、たとえば、頂点の変換によってえられた深度値z0/w0を用いて面をソートしておき、最も遠い面から描き、近い面で上書きしながら描画してゆく。
【0272】
[アニメーションとの組合せ]
実施例3に記載したようなアニメーションに対する平滑化処理を適用する場合には、「工程1−8 疑似視点距離の伝播」での評価関数Φに、フレーム内の変動をあらわす項として、
【0273】
【数30】
を加え、以下のように変化させて、最適化処理の処理を行ってもよい。
【0274】
【数31】
【実施例6】
【0275】
ピッキング処理
【0276】
ピッキング処理とは、画面上に表示された三次元オブジェクトの一部をポインティングデバイス、又は指等によってポイントした場合に、どのオブジェクトがポイントされたかを認識する処理を言う。
【0277】
上述の各種実施例においては、三次元オブジェクトが複数のカメラによって二次元にレンダリングされているため、ピッキング処理における対処が必要となる。ピッキングの処理を実現させる実装例としては、以下のものが挙げられる。
(a)ボーン、又は関節等を選択してオブジェクトのポーズを変えるもの。
(b)メッシュを選択してオブジェクトの細部を調整するもの。
【0278】
上記(a)の場合には、実際のオブジェクトのボーン、及び関節の数には、限りがあるため、ボーン及び関節の位置情報を記憶部に記憶させておいてもよい。そして、画面上の点がポイントされた場合には、そのポイント点に最も近いボーン又は関節が選択されたと判定してもよい。
【0279】
上記(b)の場合には、たとえば、ポリゴンの各頂点に対して画像上の二次元を保存するバッファ領域を与える。このバッファ領域にレンダリング時の二次元位置の情報を保存することで、ピッキング処理の認識を行うようにしてもよい。
【0280】
図20は、本明細書において説明した各種の実施例をインプリメントするシステム2000のハードウエアの構成例を示している。システム2000は、CPU2001、ディスプレイ2002、タッチスクリーン2004、キーボード2006、マウス2008、ROM2010、RAM2012、可搬記録媒体2015を読み書きする外部メモリインターフェース2014、ネットワークとの通信を行う通信インターフェース2016、及び各ハードウエアを接続するバス2020を含む。なお、ディスプレイ2002、タッチスクリーン2004、キーボード2006、マウス2008などの入力出力デバイスは、例示であり、これらの全てを含む必要はない。また、他の入出力デバイスが利用されてもよいことは言うまでもない。
【0281】
なお、本実施例の全部又は一部はプログラムによってインプリメントされ得る。このプログラムは、可搬記録媒体2015に格納することができる。可搬記録媒体2015とは、1つ以上の非一時的(non−transitory)な記憶媒体を言う。例示として、可搬記録媒体816としては、磁気記録媒体、光ディスク、光磁気記録媒体、不揮発性メモリなどがある。磁気記録媒体には、HDD、フレキシブルディスク(FD)、磁気テープ(MT)などがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc−Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。また、光磁気記録媒体には、MO(Magneto−Optical disk)などがある。可搬型記録媒体に格納されたプログラムが読み込まれ、プロセッサによって実行されることにより、本発明の実施例の全部又は一部が実施され得る。
【0282】
なお、本明細書の[発明を実施するための形態]及び[実施例]の項に記載した上述の記載は、発明を理解するためのものであり、本発明の範囲を限定するためのものではない点に留意すべきである。また、上述の複数の[発明を実施するための形態]及び[実施例]に記載された内容は、相互に排他的なものではない。したがって、矛盾が生じない限り、異なる箇所に記載された各要素を組み合わせることも意図されていることに留意すべきである。また、請求項に記載された方法、及びプログラムに係る発明は、矛盾のない限り処理の順番を入れ替えてもよい。あるいは、複数の処理を同時に実行してもよい。そして、これらの実施例も、請求項に記載された発明の技術的範囲に包含されることは言うまでもない。
【0283】
また、コンピュータが読み出したプログラムコードを実行することにより、上述の実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS、仮想マシンモニタVMM、ファームウエア、BIOSなどのプログラムが実際の処理の一部又は全部を行ない、その処理によって実施例の機能が実現される場合も、本発明に含まれることは言うまでもない。
【0284】
また、本発明の各種実施例のそれぞれの構成要素は、物理的に分離された複数のハードウエアで実現されてもよい。また、本発明の各種実施例のそれぞれの構成要素は、1つ以上のサーバ上で動作することによって実現されてもよい。また、本発明に係るプログラムを実行するCPUは複数であってもよく、また、各CPUは複数のコアを含んでいてもよい。
【0285】
また、本発明は、汎用コンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、携帯電話、テレビジョン、ゲーム機器など、少なくともCPUとメモリとを具備するその他の装置にインプリメントすることができる。
【符号の説明】
【0286】
402 ポーズの決定
404 カメラの配置
406 頂点の変換
408 画像の塗り潰し
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20