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

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

▶ 株式会社スクウェア・エニックスの特許一覧

<>
  • 特許6196265-プログラム、情報処理装置及び制御方法 図000002
  • 特許6196265-プログラム、情報処理装置及び制御方法 図000003
  • 特許6196265-プログラム、情報処理装置及び制御方法 図000004
  • 特許6196265-プログラム、情報処理装置及び制御方法 図000005
  • 特許6196265-プログラム、情報処理装置及び制御方法 図000006
  • 特許6196265-プログラム、情報処理装置及び制御方法 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6196265
(24)【登録日】2017年8月25日
(45)【発行日】2017年9月13日
(54)【発明の名称】プログラム、情報処理装置及び制御方法
(51)【国際特許分類】
   G06T 13/80 20110101AFI20170904BHJP
   A63F 13/52 20140101ALI20170904BHJP
【FI】
   G06T13/80 B
   A63F13/52
【請求項の数】15
【全頁数】23
(21)【出願番号】特願2015-168362(P2015-168362)
(22)【出願日】2015年8月27日
(65)【公開番号】特開2017-45335(P2017-45335A)
(43)【公開日】2017年3月2日
【審査請求日】2016年8月22日
(73)【特許権者】
【識別番号】308033283
【氏名又は名称】株式会社スクウェア・エニックス
(74)【代理人】
【識別番号】100076428
【弁理士】
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100115071
【弁理士】
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100112508
【弁理士】
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100116894
【弁理士】
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100130409
【弁理士】
【氏名又は名称】下山 治
(74)【代理人】
【識別番号】100134175
【弁理士】
【氏名又は名称】永川 行光
(72)【発明者】
【氏名】長谷川 勇
(72)【発明者】
【氏名】小野 哲平
(72)【発明者】
【氏名】野副 竜太
(72)【発明者】
【氏名】石田 卓
【審査官】 千葉 久博
(56)【参考文献】
【文献】 特開2015−135618(JP,A)
【文献】 米国特許出願公開第2014/0267277(US,A1)
【文献】 ”FINAL FANTASY XV TechDEMO Vol.2 − 理想の表現を追い求める!FF15で採用された「Luminous Studio 1.5」の技術紹介映像第二弾!”, [online],2015年 6月 8日,[平成29年6月20日検索], インターネット<URL:http://3dnchu.com/archives/ff15-techdemo-vol-2/>
【文献】 武田かおり,”Unreal Engine 4 テストシーン 『打ち捨てられた廃墟』”,CG WORLD,日本,株式会社ボーンデジタル,2015年 6月 1日,第202巻,p.52-55
【文献】 ”西川善司の3Dゲームファンのための「WITCH CHAPTER 0[cry]」講座”, [online],2015年 5月29日,[平成29年6月15日検索], インターネット<URL:http://pc.watch.impress.co.jp/docs/topic/feature/704317.html>
【文献】 高橋一郎,”AVSを手軽に使うための可視化システム VisPlus”,情報処理,日本,社団法人情報処理学会,2002年 5月15日,第43巻, 第5号,p.537-544
【文献】 秋山知子,”部品化・再利用に向け進化するビジュアルなソフト開発環境”,日経コンピュータ,日本,日経BP社,1994年 2月 7日,第330号,p.79-87
(58)【調査した分野】(Int.Cl.,DB名)
G06T 13/00−13/80
A63F 9/24,13/00−13/98
G06F 9/06
(57)【特許請求の範囲】
【請求項1】
描画処理の実行時に適用される視覚効果用データを生成するプログラムであって、
コンピュータに、
各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する処理と、
取得された前記設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する1つの合成ノードに置換する処理と、
取得された前記設計情報から、前記置換する処理を経て前記視覚効果用データを生成する処理と、
を実行させ
前記設計情報は、含まれるノード群のうちの少なくとも一部にグループを定義する情報を含み、
前記置換する処理において、
前記1つの合成ノードへの置換対象となる前記複数のノードは同一の前記グループ内に定義されたノードであり、
前記グループを跨いでリンクが接続される2つのノードは、同一の前記1つの合成ノードに置換されないプログラム。
【請求項2】
描画処理の実行時に適用される視覚効果用データを生成するプログラムであって、
コンピュータに、
各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する処理と、
取得された前記設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する1つの合成ノードに置換する処理と、
取得された前記設計情報から、前記置換する処理を経て前記視覚効果用データを生成する処理と、
を実行させ、
前記設計情報は、含まれるノード群のうちの少なくとも一部にグループを定義する情報を含み、
前記置換する処理において、前記1つの合成ノードへの置換対象となる前記複数のノードは同一の前記グループ内に定義されたノードであり、
前記グループは、視覚効果の適用時に該グループ内のノードの展開及び解放時期を定義するプログラム。
【請求項3】
描画処理の実行時に適用される視覚効果用データを生成するプログラムであって、
コンピュータに、
各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する処理と、
取得された前記設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する1つの合成ノードに置換する処理と、
取得された前記設計情報から、前記置換する処理を経て前記視覚効果用データを生成する処理と、
を実行させ、
前記設計情報は、含まれるノード群のうちの少なくとも一部にグループを定義する情報を含み、
前記置換する処理において、前記1つの合成ノードへの置換対象となる前記複数のノードは同一の前記グループ内に定義されたノードであり、
前記グループは、視覚効果の適用時に一括して解放するノード群を定義するプログラム。
【請求項4】
描画処理の実行時に適用される視覚効果用データを生成するプログラムであって、
コンピュータに、
各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する処理と、
取得された前記設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する1つの合成ノードに置換する処理と、
取得された前記設計情報に含まれるノード群のうち、視覚効果の適用に際し複数回生じ得る共通化可能な動作に対応するノードを識別する識別情報を付す処理と、
取得された前記設計情報から、前記置換する処理を経て前記視覚効果用データを生成する処理と、を実行させ、
前記視覚効果用データは、前記置換する処理及び前記識別情報を付す処理を経て生成されるプログラム。
【請求項5】
描画処理の実行時に適用される視覚効果用データを生成するプログラムであって、
コンピュータに、
各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する処理と、
取得された前記設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する1つの合成ノードに置換する処理と、
取得された前記設計情報から、前記置換する処理を経て前記視覚効果用データを生成する処理と、
前記1つの合成ノードに対応する動作を規定するデータの出力形式を選択する処理と、を実行させるプログラム。
【請求項6】
視覚効果の適用を含む描画処理を実行するプログラムであって、
視覚効果を適用する処理において必要な視覚効果用データは、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された設計情報から生成されたデータであり、
コンピュータに、
視覚効果の適用に先立って、前記視覚効果用データを展開領域に参照用情報として展開する処理と、
前記描画処理において視覚効果を適用する場合に、前記視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する処理と、
前記実行用ノード群の各々が有する出力について、前記参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当てる処理と、
前記実行用ノード群の各々が有する入力について、前記参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートにより受け付けられる入力情報を返す関数を割り当てる処理と、
前記実行用ノード群に割り当てられた関数を実行し、前記描画処理における視覚効果の適用に係る演算結果を出力する処理と、
を実行させるプログラム。
【請求項7】
前記演算結果を出力する処理において、前記参照用情報として展開されたデータが使用される請求項に記載のプログラム。
【請求項8】
前記入力情報を返す関数を割り当てる処理において、前記参照用情報に含まれる前記同一のノードにおいてリンクが定義されていない入力ポートに係る入力には、該入力ポートに予め割り当てられた初期値を返す関数が割り当てられる請求項またはに記載のプログラム。
【請求項9】
前記プログラムは、前記演算結果を出力する処理において、前記実行用ノード群に割り当てられた前記入力情報を返す関数の実行タイミングを制御する処理をさらに前記コンピュータに実行させる請求項乃至のいずれか1項に記載のプログラム。
【請求項10】
前記視覚効果用データは、前記ノード群のうちの少なくとも一部にグループを定義する情報を含み、
前記プログラムは、前記演算結果を出力する処理の実行後に、前記視覚効果用データにより定義された対応する前記グループ内の前記実行用ノードを一括して解放する処理を、前記コンピュータにさらに実行させる請求項乃至のいずれか1項に記載のプログラム。
【請求項11】
前記実行用ノード群を展開する処理において、前記視覚効果用データにおいて定義される前記グループ単位で、該グループ内に含まれる実行用ノードの展開が行われる請求項1に記載のプログラム。
【請求項12】
前記実行用ノード群を展開する処理において、前記視覚効果用データにおいて定義される前記グループ単位で、該グループ内に含まれる前記実行用ノードに応じた展開領域が確保され、展開に用いられる請求項1または1に記載のプログラム。
【請求項13】
前記プログラムは、前記視覚効果用データのうち、視覚効果の適用に際し複数回生じうる場合に共通化可能な動作及びデータは前記参照用情報として展開させ、動的に変化し得る動作及びデータは前記実行用ノード群として展開させるよう制御する処理をさらに前記コンピュータに実行させる請求項乃至1のいずれか1項に記載のプログラム。
【請求項14】
視覚効果の適用を含む描画処理を実行する情報処理装置であって、
視覚効果を適用する処理において必要な視覚効果用データは、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された設計情報から生成されたデータであり、
前記情報処理装置は、
視覚効果の適用に先立って、前記視覚効果用データを展開領域に参照用情報として展開する第1の展開手段と、
前記描画処理において視覚効果を適用する場合に、前記視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する第2の展開手段と、
前記第2の展開手段により展開された前記実行用ノード群の各々が有する出力について、前記第1の展開手段により展開された前記参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当てる第1の割り当て手段と、
前記第2の展開手段により展開された前記実行用ノード群の各々が有する入力の各々について、前記第1の展開手段により展開された前記参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートにより受け付けられる入力情報を返す関数を割り当てる第2の割り当て手段と、
前記第1の割り当て手段または前記第2の割り当て手段により前記実行用ノード群に割り当てられた関数を実行し、前記描画処理における視覚効果の適用に係る演算結果を出力する出力手段と、
を有する情報処理装置。
【請求項15】
視覚効果の適用を含む描画処理を実行する情報処理装置の制御方法であって、
視覚効果を適用する処理において必要な視覚効果用データは、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された設計情報から生成されたデータであり、
前記情報処理装置の制御方法は、
視覚効果の適用に先立って、前記視覚効果用データを展開領域に参照用情報として展開する第1の展開工程と、
前記描画処理において視覚効果を適用する場合に、前記視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する第2の展開工程と、
前記第2の展開工程において展開された前記実行用ノード群の各々が有する出力について、前記第1の展開工程において展開された前記参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当てる第1の割り当て工程と、
前記第2の展開工程において展開された前記実行用ノード群の各々が有する入力の各々について、前記第1の展開工程において展開された前記参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートリンクにより受け付けられる入力情報を返す関数を割り当てる第2の割り当て工程と、
記第1の割り当て工程または前記第2の割り当て工程において前記実行用ノード群に割り当てられた関数を実行し、前記描画処理における視覚効果の適用に係る演算結果を出力する出力工程と、
を有する情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム、記録媒体、情報処理装置及び制御方法に関し、特にリアルタイム性が要求されるグラフィックコンテンツにおける視覚効果(VFX:Visual Effects)の提示技術に関する。
【背景技術】
【0002】
従来、電子ゲーム等のインタラクティブコンテンツは、ユーザによりなされた操作入力や経時要素等によって動的に発生する状態に応じたグラフィックを生成し、表示装置へ出力することでユーザに提示される。一方で、映画等の観賞を主たる目的とするような動画コンテンツは、予め定められた挙動に応じて状態を遷移させながら展開するグラフィックをフレームごとに生成し、提示することがなされている。前者のようなグラフィック生成手法は、状況に応じて態様が変化する動的要素を考慮した描画内容を生成するリアルタイムレンダリング、後者は、生成結果の再生時において描画内容が不変である(動的要素がない)オフラインレンダリングと呼ばれている。
【0003】
オフラインレンダリングにより提供されるコンテンツは、再生前には描画処理の全ての演算が完了しているものであり、基本的には処理に要する時間についての制限はない。一方で、リアルタイムレンダリングにより提供されるコンテンツは、予め定められたフレーム間隔で画面更新を行わなければならないため、フレーム時間内で描画処理を完了する時間的な制約がある。また、このように動的要素を考慮するインタラクティブコンテンツでは、描画処理の他にフレーム時間内に種々の演算を完了しなければならないため、それぞれの処理に割り当て可能な演算リソースについても制限がある。
【0004】
リアルタイムレンダリングを使用するコンテンツの提供において、再現度の高い(与える現実感が高い)視覚効果(以下、単にエフェクト)を適用するためには複雑な演算が必要になるため、好適に演算量や演算リソースの占有量を低減する工夫が必要であった。特許文献1では、例えば閃光、煙、火花等を用いた爆発を表現するエフェクトを効率的に適用するために、予め構成や表示時間等がパターン化された、所謂タイムラインベースで規定されたエフェクトに係るオブジェクトを、適用対象の要素の座標に応じて配置する手法が採用されている。
【0005】
このようにタイムラインベースで一連の動作が規定されたリアルタイムエフェクトを適用する際には、例えば特許文献1のように適用対象となる要素の座標を入力として指定する必要がある。しかしながら、例えば適用対象となる要素がツリー構造等で構成された一定の拘束条件を有する要素群である場合、各子要素へのリアルタイムエフェクトの提供は、親要素の座標または親要素の座標と子要素の座標のオブセット値を指定する等、予め定められた入力方式のいずれかによってのみ選択できる。即ち、事前に設計されたリアルタイムエフェクトを適用するようなケースでは、エフェクト設計の段階でエフェクトの適用に必須となるパラメータが限定的に定められており、該パラメータに対応する処理のみが実行可能となっている。つまり、入力のパラメータを定められていない方式を利用することや、エフェクトにゲーム中の異なる要素に応じたバリエーションを加えること等ができず、これらの実装のためには、エフェクト設計においてより多くの演算パターンを用意する必要があった。このため、タイムラインベースのリアルタイムエフェクトを用いる方式は、近年の美麗なグラフィックが求められるインタラクティブコンテンツにとっては、柔軟性や拡張性が不足し、デザイナ所望の表現の実現が現実的でない可能性があった。
【0006】
ところで、エフェクトのような画面の外観や見栄えを良好にすべく適用される要素は、プログラマではなくデザイナによりその設計がなされる。故に、近年では所謂レンダリングエンジン等の開発ツールにおいて、エフェクト用の設計(編集)ツールが提供されているものもある。このような設計ツールでは、例えば現在のパラメータからの演算により得られた様々な要素や経過時間を変数として用いる所定の関数に従った並進や回転等の演算を含むような複雑なエフェクトを、GUIベースで設計することができるため、プログラムの専門的知識を有さないデザイナであってもエフェクト設計を行うことができる。
【0007】
このようなエフェクト設計ツールの1つには、ノードベースのエフェクト設計ツールがある。ノードベースのエフェクト設計ツールでは、四則演算、時間計測、並進や回転に基づく行列演算等の各種基本的な演算や入力パラメータ等のユニットであるノードを設計領域内に配置し、それらの入力と出力とを接続(リンク)させることで、エフェクト設計が可能である。つまり、デザイナが使用を所望する要素や処理の順番を直感的に設計することができ、デザイナは可視化された情報の流れを理解しつつ所望のエフェクト設計が可能なである。また予め用意されたノードを追加することで様々なバリエーションのエフェクトが設計できるため、柔軟性及び拡張性に富んでいる。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2008−119222号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかしながら、ノードベースで一連の動作が規定されたエフェクトを適用したグラフィックスを生成する場合、設計時と同様、
・所定の動作(関数)等が割り当てられたノードオブジェクト、
・ノードが有する入力や出力のポートを規定するポートオブジェクト、さらに
・ノード間を結合するためにポートの参照関係を規定するリンクオブジェクト
をインスタンス化する必要がある。つまり、メモリ空間には、エフェクト設計において配置されたノード、ポート及びリンクの数に応じた領域が、同エフェクトを適用する要素の数だけ確保される必要がある。
【0010】
故に、例えば特許文献1のような火花等の多数のパーティクルで構成されるエフェクトを実現するためには、パーティクルの各々について上記のようなインスタンス化が必要であり、メモリリソースを多量に消費し得る。またさらに、ノード等の各々についてインスタンス化のタイミングや解放のタイミングが異なるため、これらを監視し、適宜解放する必要がある。即ち、演算リソースの観点からしても、インスタンス化した多量のノード等のオブジェクトの各々に係る演算、ノード間のリンク先参照に係る探索等の演算、及びメモリリソースと処理の進行を考慮した解放判断に係る演算等の全ての演算を、フレーム時間内に完了する必要があった。このため、ノードベースにより規定されたエフェクトを適用したグラフィックスの生成はリアルタイムレンダリングには不向きであり、これまでノードベースのエフェクト設計はオフラインレンダリングについてのみ利用されるものであった。
【0011】
本発明の少なくとも1つの実施形態は、上述の問題点に鑑みてなされたものであり、リアルタイムレンダリングにおいてノードベースで設計されたエフェクトを実現するプログラム、記録媒体、情報処理装置及び制御方法を提供することを目的とする。
【課題を解決するための手段】
【0012】
前述の目的を達成するために、本発明の少なくとも1つの実施形態の一態様に係るプログラムは、描画処理の実行時に適用される視覚効果用データを生成するプログラムであって、コンピュータに、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、入力ポートまたは出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する処理と、取得された設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する1つの合成ノードに置換する処理と、取得された設計情報から、置換する処理を経て視覚効果用データを生成する処理と、を実行させる。
【0013】
また前述の目的を達成するために、本発明の少なくとも1つの実施形態の別態様に係るプログラムは、視覚効果の適用を含む描画処理を実行するプログラムであって、視覚効果を適用する処理において必要な視覚効果用データは、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、入力ポートまたは出力ポートに接続されるリンク群とで構成された設計情報から生成されたデータであり、コンピュータに、視覚効果の適用に先立って、視覚効果用データを展開領域に参照用情報として展開する処理と、描画処理において視覚効果を適用する場合に、視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する処理と、実行用ノード群の各々が有する出力について、参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当てる処理と、実行用ノード群の各々が有する入力について、参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートにより受け付けられる入力情報を返す関数を割り当てる処理と、実行用ノード群に割り当てられた関数を実行し、描画処理における視覚効果の適用に係る演算結果を出力する処理と、を実行させる。
【発明の効果】
【0014】
このような構成により本発明の少なくとも1つの実施形態によれば、リアルタイムレンダリングにおいてノードベースで設計されたエフェクトを実現することが可能となる。
【図面の簡単な説明】
【0015】
図1】本発明の実施形態に係るPC100の機能構成を示したブロック図
図2】本発明の実施形態に係るPC100において実行されるグラフ編集アプリケーションを説明するための図
図3】本発明の実施形態に係るグラフ編集アプリケーションにおけるノード数の削減に係る処理を説明するための図
図4】本発明の実施形態に係るPC100において実行されるグラフ出力処理を例示したフローチャート
図5】本発明の実施形態に係るPC100において実行される視覚効果適用アプリケーションにおける視覚効果用データの展開を説明するための図
図6】本発明の実施形態に係るPC100において実行されるグラフ適用処理を例示したフローチャート
【発明を実施するための形態】
【0016】
[実施形態]
以下、本発明の例示的な実施形態について、図面を参照して詳細に説明する。なお、以下に説明する一実施形態は、情報処理装置の一例としての、描画処理の実行時に適用される視覚効果用データを生成し、該視覚効果用データに係る視覚効果(エフェクト)を適用した描画処理を実行可能なPC100に、本発明を適用した例を説明する。しかし、本発明は、上記視覚効果用データの生成処理、及び視覚効果用データに係る視覚効果を適用した描画処理の少なくともいずれかを実行することが可能な任意の機器に適用可能である。
【0017】
また、本明細書において、ノードベースでの視覚効果の設計に係り、ノード群を配置し、各ノードの入力または出力用に設けられているポート間をリンクで接続することで構成された視覚効果に係る一単位の処理を示す概念を「グラフ」として言及する。また本明細書においてグラフは、「編集時」、「参照用」及び「実行時」のいずれかを付すことで状態や役割を峻別する。
【0018】
「編集時グラフ」は、後述のグラフ編集アプリケーションにおいてユーザが設計中の状態のグラフを示す。編集時グラフは、ユーザの所望したノードの配置や、ノードにおける演算に用いられるデータやノードにおける演算結果またはノードにより取得可能となるデータのデータフロー、また該グラフのインスタンス化や解放等に係る制御フローを定義することが可能な状態である。編集時グラフは、ユーザの要求に基づいて適宜変更を加えることが可能な状態であり、視覚効果用データに変換される前の状態である。
【0019】
「参照用グラフ」及び「実行時グラフ」は、双方、視覚効果の適用を含む描画処理の実行に際し、視覚効果用データを読み込むことでメモリ上に展開された状態であり、編集時グラフのようにユーザが視認可能な態様ではない。詳細は後述するが、参照用グラフと実行時グラフとはその特性が異なっている。「参照用グラフ」は、視覚効果の適用に際し、対応する視覚効果用データを出力した際の編集時グラフにおけるノード間のデータフロー等、編集時グラフ全体を再現し得るようにメモリ展開される。一方で、「実行時グラフ」は、参照用グラフと同一の視覚効果用データに基づくものであっても、該データを出力した際の編集時グラフにおける一部の情報(例えばノードの情報のみ)をメモリ展開するものである。視覚効果の適用においては、適用対象のオブジェクトが確定すると、該オブジェクトの各々に対して実行時グラフがメモリ展開されるが、この際該実行時グラフと同一の視覚効果用データに基づく参照用グラフを参照して、視覚効果適用に係る演算やメモリ消費を効率化する種々の処理が実行される。
【0020】
《PC100の構成》
図1は、本発明の実施形態に係るPC100の機能構成を示すブロック図である。
【0021】
制御部101は、例えばCPUであり、PC100が有する各ブロックの動作を制御する。制御部101は、記録媒体102に記録された後述のアプリケーションに係る各種プログラムや各ブロックの動作を規定した動作プログラムを読み出し、メモリ103に展開して実行することにより各ブロックの動作を制御する。
【0022】
記録媒体102は、例えばPC100に内蔵される半導体メモリや、PC100に着脱可能に接続されるHDDや光学メディア等の、恒久的に情報を保持可能な不揮発性の記録装置である。記録媒体102は、上述のプログラムだけでなく、各ブロックの動作において必要となるパラメータや描画処理において必要となる各種描画データ(モデルデータ、テクスチャデータ、描画用プログラム(シェーダ等)他)や視覚効果用データを記録する。メモリ103は、揮発性メモリである。メモリ103は、各種プログラムの展開領域としてだけでなく、各ブロックの動作において出力される中間データ等を一時的に記憶する格納領域としても用いられる。本実施形態では、視覚効果用データから読み出された参照用グラフや実行時グラフは、メモリ103に必要な領域が確保された後、展開されることで視覚効果を適用する処理において用いられる。
【0023】
ノード情報DB104は、後述のグラフ編集アプリケーションにおいて、設計する編集時グラフに配置可能なノードの情報が格納されるデータベースである。ノードの各々はデータ入力用のポート及びデータ出力用のポートの少なくともいずれかを有しており、ノード情報DB104は、これらの情報を管理する。ノードは、例えば所定の演算を実行する関数(基本的な四則演算を含む)や予め定義されたデータを取得する関数等が割り当てられた概念であってよい。この場合、ノードの有する入力用ポートは引数を指し、出力用ポートは戻り値を指すものであってもよい。また1つのノードは、オーバーロード(多重定義)された同一名の複数の関数を指すものであってよく、この場合各関数の引数に応じて入力用ポートが設けられ、1つの入力用ポートは複数の関数において使用されうる。入力用ポートは、呼び出し元のプロセスにより与えられる引数に限らず、例えば関数の実行において使用される初期値や、他の関数で定義された静的な定数や変数の値を取得するものであってもよい。また本実施形態のグラフ編集アプリケーションは、既に設計された別の編集時グラフをノードとしても配置可能に構成され、これにより階層的な処理構造の視覚効果の設計が可能となる。
【0024】
編集部105は、グラフ編集アプリケーションを用いた編集時グラフの設計を可能ならしめる。本実施形態ではアプリケーションとして実現される処理も、PC100の機能構成として図1のブロック図では示すが、その処理の実体は制御部101や後述の描画部109のいずれであってもよい。
【0025】
出力部107は、グラフ編集アプリケーションにおいて設計された編集時グラフ、もしくは描画対象の所定のシーンや視覚効果について設計された一連の編集時グラフについて、出力要求がなされたことに応じて対応する視覚効果用データを出力する。視覚効果用データは、例えばバイナリデータとして出力されてよく、編集時グラフについて所定の演算が適用されることでデータが生成される。また詳細は後述するが、視覚効果用データの出力に際し、該視覚効果適用時の演算やメモリ占有を効率化するために、変換部106により編集時グラフの最適化に係る変換処理がなされた後、視覚効果用データは生成される。
【0026】
実行部108は、グラフ編集アプリケーションにより生成(出力)された視覚効果用データに係る視覚効果を適用するための各種処理を実行する。本実施形態では実行部108は、リアルタイムレンダリングを行う後述の視覚効果適用アプリケーションにつき、描画される画面に含まれる視覚効果に係るデータ展開及び演算を行う。
【0027】
描画部109は、視覚効果適用アプリケーションに係る画面の描画処理を行う。本実施形態の描画部109は、描画処理において視覚効果の適用がなされる描画オブジェクトについては、実行部108によりなされた演算結果に基づき対応する画素の描画を行う。なお、視覚効果は例えば火花を示すようなパーティクルを付加するものを含むものであってもよく、基準となる描画オブジェクトに加えて、実行部108の演算結果として新たな描画オブジェクトを追加描画するものであってもよい。
【0028】
操作入力部110は、例えばマウスやキーボード等のPC100が有するユーザインタフェースである。操作入力部110は、各種ユーザインタフェースに対して操作入力がなされたことを検出すると、該操作入力に対応する制御信号を制御部101に出力する、もしくは入力イベントの発生を制御部101に通知する。
【0029】
表示部111は、PC100に内蔵、あるいはPC100に外部接続された表示装置である。表示部111は、PC100からの画像信号(画面)の出力を受けて、表示内容が更新される。本実施形態では表示部111には、後述の視覚効果適用アプリケーションの実行時、描画部109によるリアルタイムレンダリングで生成された画面が、所定の時間間隔で出力され、表示される。
【0030】
《グラフ編集アプリケーション》
次に、本実施形態のPC100において実行される、編集時グラフの編集及び視覚効果用データの出力を実現するグラフ編集アプリケーションについて、その動作概要を説明する。
【0031】
視覚効果に係る1つの編集時グラフの設計に際し、ユーザはグラフ編集アプリケーションにおいて、上述したノード情報DB104に登録されているノードを図2に示されるようなグラフ設計フィールド内に配置することができる。図2に示される編集時グラフは、視覚効果が適用される基準となる位置(RC_WorldMatrixにより定義)から、時間に応じて変化する曲線を示す関数(FloatFCurve_1)により得られる値を回転角として回転させたスプライトを表示(RC_DrawShape_1)し、時間差で同一の位置(回転後)にさらに別のスプライトを表示(RC_DrawShape_2)する視覚効果を定義したものである。
【0032】
ノード情報DB104に登録されているノード群は、例えば後述の視覚効果適用アプリケーションに係るプログラムにおいて予め定義された関数に対応して登録されるものであってもよいし、この他四則演算やアプリケーションについてデフォルトで用意される基本関数や、使用されるライブラリに定義された関数に対応して登録されるものであってもよい。例えば図2に示されるTransform44_1の名称(ノード名200)が割り当てられたノード201は、入力用ポート202(Matrix(m44))に入力された4行4列のマトリクスを、他の入力用ポートに入力された情報に基づき変換(変形)し、得られた4行4列のマトリクスを出力用ポート203((m44)Transformed)から出力する関数(処理ロジック)もしくは動作・機能種別(Transform44())が割り当てられたノードである。割り当てられた動作等は、ノード種別205としてノード名200の下部に示されている。図2の例では、該ノード201は、変換に用いられる情報として別のノード206(FloastFCurve_1)から出力された値を入力用ポート204(Rot(f3))で受け付け、該値を回転角としたマトリクスの変換(回転用マトリクスの適用)を行う。また、各ノードに設けられた入力用ポートについては、対応する関数の実行に際し、入力がない場合は各入力用ポートについて予め定められた初期値が使用されるものであってよい。例えばノード201の場合は、入力用ポート202と入力用ポート204は他のノードの出力用ポートと接続され、該他のノードの実行により得られた値が対応する変数に入力されるが、その他の入力用ポート(Scale(f3), Trans(f3), RotateType(e), SRTType(e))に対応する変数については関数Transform44()の実行に際し、予め定められた各変数の初期値が使用される。
【0033】
また図2において展開可能なアイコン211が付され、ノード種別212を有する例えばRC_WorldMatrix_1のようなノード213は、既に内部設計がなされた別の編集時グラフを1つのノードとして構成したものである。ノード213は、4行4列のワールドマトリクスを取得するノード種別RC_WorldMatrixとして設計されたグラフを1つのノードとして取り扱っており、内部構造(ノード群)は示されないが該ノード213の実行時には、内部のノード群に係る処理が行われて値の出力がなされる。このように所定の単位で設計されたノード群を1つのノードとして取り扱うことで、グラフ設計フィールド内の視認性を向上させることができる。
【0034】
〈SpawnTrayの導入〉
基本的にリアルタイムレンダリングにおいて視覚効果が適用される場合、連続して描画されるフレームの各々について適用に係る演算が行われるが、フレーム時間内に視覚効果の適用に割ける演算リソースは限られている。上述したように、ノードには各々異なる処理が割り当てられておりメモリから解放可能となるタイミングが異なる。従って、通常リアルタイムレンダリングにおいてノードベースで視覚効果を実現しようとした場合、視覚効果について割り当てられたメモリ占有率に納まるよう、各ノードについてメモリ上に対応オブジェクトを保持すべきかまたは解放すべきかを監視することが必要となる。一方で、特に描画範囲に含まれるシーン内の描画オブジェクトの数が多い場合等、視覚効果として処理を行うべきノードの全体数が増大し得る状況下では、例えば全てのノードについて、各ノードによる処理結果を使用し得るノードが存在しなくなったかを監視するために演算リソースを割くことは現実的でない。またさらに、ノードオブジェクトの解放に伴い、該ノードオブジェクトにリンクオブジェクトを介して参照がなされていたリンク先のノードについても、解放するノードへの参照を削除する(リンクを切断する)必要がある。
【0035】
このように、状況に応じて多数のノードオブジェクトが展開(インスタンス化)されうるリアルタイムレンダリングにおいてノードベースの視覚効果を実現するためには、ノードオブジェクトの解放管理に係る処理の演算量を低減する仕組みが必要となる。従って、本実施形態のグラフ編集アプリケーションでは、ノードベースで設計され、適用される視覚効果に係る演算を効率化させるために、SpawnTrayというノード群をグループ化する概念を導入する。
【0036】
図2に示されるようにSpawnTray221は、複数のノード群を内部に有して定義される。SpawnTray221内には、同一のタイミングにおいて一括して解放してよいものとして判断されたノード群を配置することができ、視覚効果用データの生成時にはSpawnTray221に属するノード群を示す情報が含められる。例えば実行時(視覚効果の適用時)において、SpawnTray221の展開命令に係る制御フロー222が生じた場合(入力用ポート223(Create)への入力が生じた場合)、SpawnTray221内に含まれるノード群分の領域がメモリ103上に一括して確保され、SpawnTray221に含まれるノード群のノードオブジェクトがインスタンス化される。一方で解放は、SpawnTray221の展開命令に係る制御フロー224が生じた場合(入力用ポート225(Destroy)への入力が生じた場合)に一括して行われる。即ち、SpawnTray221内のノード群については制御フローに合わせてSpawnTray221内の全オブジェクトが一括して解放され、個々のノード間でのリンクの切断等に係る処理を実行部108は実行する必要がない。つまり、SpawnTray221が定義されてグループ化されているこれらのノードオブジェクトについては、実行部108は解放に係る管理処理をノードオブジェクトごとに行わず、例えばSpawnTray221からの出力値を使用するよう設計された不図示のノードオブジェクトについて、リンク切断に対応する処理のみを行えばよい。従って、SpawnTrayは下位層(内部)にノード群の情報を有するが、処理上は入出力ポートを有する1つのノードと同等に扱うことができる。
【0037】
このようにすることで、実行時におけるノードオブジェクトの解放に係る処理(監視・管理、及び切断・解放等)の演算量を低減することができる。
【0038】
また図2の例では、SpawnTray221(親トレイ)内にはさらにSpawnTray226(子トレイ)が配置されている。このような構造を用いることで、例えば解放のタイミングは親トレイ内の他のノード群と同一であってよいが、展開領域確保のタイミングを遅延させることを意図している、あるいは演算の関係等で遅延させることが可能であると判明しているノード群を、さらに細分化して子トレイにまとめることができる。これにより、より厳密にメモリ103の占有を制御することができる。
【0039】
また、1つの視覚効果について定義するこのような編集時グラフも、他の編集時グラフにおいてノード213のように1つのノードとして配置可能であることを踏まえれば、1つのSpawnTrayとして扱うことができる。この場合、図2の編集時グラフは、入力用ポートとしてポート231(GraphOn)とポート232(GraphOff)を有するSpawnTrayとなる。
【0040】
〈共通化可能な情報の分類〉
SpawnTrayを導入することにより解放管理に係る演算量の低減については説明したが、本実施形態のグラフ編集アプリケーションはさらに、視覚効果の適用を行う際に編集時グラフに含まれるノード、ポート、リンクや各種データを、上述した参照用グラフ及び実行時グラフのいずれとしてメモリ展開するかを、予め定義することができる。
【0041】
上述したように、リアルタイムレンダリングでは視覚効果を適用し得る対象が動的に増減するため、例えば同様の視覚的態様(色味変化、適用テクスチャ)を示すが、挙動が各々異なって制御されるような、共通の視覚効果に係る多数の描画オブジェクトが生成されることがある。共通の視覚効果に係るグラフに対して異なる入力を与える、あるいは入力を与えるタイミングを異ならせることで、例えば多数の火花のパーティクル群を生成するような場合、単純に個々のパーティクルのインスタンスについて対象の視覚効果のグラフに含まれるオブジェクト(ノード、ポート、リンク)群や各ノードにおける処理で利用するデータをメモリ展開するのでは展開領域占有の問題だけでなく、演算量が増大する懸念がある。
【0042】
一方で、1つの火花のパーティクルやその他の視覚効果に係る描画表現についてインスタンス化する必要がある情報の中には、このような描画表現を複数、同時並行して実現する場合に、1度のインスタンス化で共用できる所謂静的(static)な情報も存在する。例えば、所定の位置にオブジェクトを描画する動作を含む視覚効果では、
・該オブジェクトに適用するテクスチャデータ及びその展開に係る処理
・該オブジェクトの描画に係り適用される描画用プログラム(シェーダ等)
・常に同一の出力(初期値等を含む)を返すノードやポートのインスタンス化
・ノードの動作を規定する特定の関数オブジェクトのインスタンス化
・ノードに係るポート間の接続情報の規定
等の動作や処理は、同様の視覚効果を並行して複数適用する場合であっても、全ての適用処理について、1度インスタンス化されれば共用または参照することができ、十分である。即ち、1つの視覚効果が適用される複数の対象のインスタンスについて、インスタンスごとに変化しない視覚効果に係るデータは共用でき、インスタンスごとに変化する視覚効果に係るデータは動的に対応できるよう構成することが好ましい。
【0043】
従って、本実施形態のグラフ編集アプリケーションでは、編集時グラフの設計において、配置するノード、ポート、ノードに対応する動作において展開される静的データ等の情報については、適用対象の数に依らず1度だけ参照用グラフとしてインスタンス化されればその後は共用できるよう、共通化可能であることを識別する識別情報を視覚効果用データの出力時に付与する。共通化可能であるかの識別は、例えば設計するユーザにより該当のノードやポート等に属性として設定された情報を基に判断されるものであってもよいし、視覚効果用データの出力時に出力部107が予め共通化可能であるものと定められた属性のノードやポートであるかの情報に基づいて判断を行うものであってもよい。
【0044】
なお、本実施形態では、識別情報を付与することで視覚効果用データを使用する後述の視覚効果適用アプリケーションに共通化可能であるノードを知らしめる構成について説明するが、本発明の実施はこれに限られるものではない。例えば、グラフ編集アプリケーションと視覚効果適用アプリケーションの間で共通化可能なノード等の種別を予め共有するよう構成されている場合は、識別情報を付与する必要はない。
【0045】
また、特に効率化する状況として、視覚効果を並行して複数適用する状況を説明したが、共通化可能な動作の定義はこれに限られるものではない。即ち、実行時において適用し得る状況が(異なるタイミングで)複数回生じうる動作のうち、1度インスタンス化されればその内容を共用できる動作については、共通化可能な動作としてよい。
【0046】
〈ノード数の削減〉
さらに、本実施形態のグラフ編集アプリケーションでは、視覚効果用データの生成に係り、変換部106は編集時グラフに存在するノード数を低減させる処理を行う。ノード数を低減させる処理は、使用されていないノード等の所定の演算により不要であると判断可能なノードを除去する処理に加え、変換部106は予め定められたカテゴリの動作に対応する複数のノードを1つのノードに置換することでノード数を低減させる処理を行う。
【0047】
以下、予め定められたカテゴリの動作に対応する複数のノードを1つの合成ノードに置換することでノード数を低減させる処理について図を用いて詳細を説明する。
【0048】
予め定められたカテゴリの動作は、例えば四則演算等の簡易的な演算式や関数で表すことができる(以下、単に式化可能として言及する)動作であってよく、変換部106は対応する動作が式化可能であるか否かを編集時グラフ内の各ノードについて判断する。図3(a)に示されるように、例えば1つのSpawnTray内に
・2つの入力値を乗算して出力するノード301(Mul)
・2つの入力値に基づいて移動を行わせた後、移動後の位置の値を出力するノード302(Move)
・一方の入力値から他方の入力値を減算して出力するノード303(Sub)
・2つの入力値を加算して出力するノード304(Add)
の4つが配置された編集時グラフを想定する。このとき、例えばノード301、303及び304に対応する動作が式化可能として予め定められたカテゴリに属するノードであるとすると、変換部106は視覚効果用データの出力の指示を受けた際に、これらのノードを1つの合成ノードに変換する。以下、合成ノードへの変換手法の一態様について例示する。
【0049】
まず変換部106は、図3(b)に示されるように該3つのノード(対象ノード)が有するポートに対して以下のルールに従ったポート名(名称+ナンバリング)を設定する。
1.対象ノード以外からの入力を受け付ける入力用ポートには「in」
2.少なくとも対象ノード以外への出力を行う出力用ポートには「out」
3.対象ノード間でのみ入出力を行う出力用ポートには「var」
4.対象ノード間でのみ入出力を行う入力用ポートには名称設定しない
該ルールに依れば、図3(b)に示されるように対象ノードの各々には4つの入力用ポート(in1〜4)と3つの出力用ポート(out1〜2、val1)の7つのポート名が設定される。
【0050】
次に変換部106は、対象ノードの各々を、動作に対応する関数と設定したポート名とを用いて式化する。図3(b)の例では対象ノードの各々は2つの入力値を引数として、1つの値を出力する関数であり、各々
ノード301:Out1 = Mul(in1, in2)
ノード303:var1 = Sub(out1, in3)
ノード304:Out2 = Add(in4, var1)
と式化することができる。
【0051】
そして変換部106は、式化に依られた対象ノードの式群をトポロジカルソートして整合性のある処理の順に並べ、合成ノードの動作を規定する。即ち、図3(b)の例では合成ノードの動作を示す各式はトポロジカルソートにより、
Out1 = Mul(in1, in2), var1 = Sub(out1, in3), Out2 = Add(in4, var1) …(1)
と最適化することができる。またこれに伴い3つの対象ノードは、inで示された入力用ポートとoutで示された出力用ポートを有する合成ノードに変換される。このとき変換部106は内部の処理上の変数としてのみ用いられるもので、合成ノードのポートとして設ける必要がないvar1については省略する。故に、図3(a)に示したSpawnTrayは、図3(c)に示されるように式(1)の動作を行う合成ノード305とノード302の2つのノードのみで構成されるSpawnTrayに変換することができる。これにより、インスタンス化するノードの数が低減できるだけでなく、式化してまとめることでリンク先の参照等に要する処理を排除することが可能となり、結果的に視覚効果適用に係る全体の演算量及び演算時間を低減することができる。
【0052】
なお、合成ノードについてまとめた式群は、所望の最適化レベルに応じてインタプリタやネイティブコード、あるいはシェーダプログラムとして視覚効果用データに含める、または別ファイルとして出力すればよい。最適化レベルの選択は、該視覚効果適用時の並行実行し得る処理やメモリリソースの使用状況、該視覚効果の実行頻度等を考慮して設計ユーザにより選択されるものであってよく、例えば変換時に変換部106がユーザの選択指示を受け付けるよう構成されてもよい。
【0053】
本実施形態ではMoveが式化可能ではないものとして説明したが、図3を用いた説明はあくまでも例示であり、これに限定されるものではないことは理解されよう。また図3の例では四則演算を行う関数に対応するノードのみを対象ノードとしたが、式化において対象ノードには必ずしも定義された関数が割り当てられている必要はなく、ノードに対応する動作をノード名を用いた関数として形式的に表すことを式化として扱ってもよい。
【0054】
また、図3の例ではSpawnTray内のノード群について合成ノードへの変換を説明したが、上述したようにSpawnTrayは同時解放を規定するものであるため、変換部106はSpawnTrayを跨いでリンクされたノード群の合成ノードへの変換は行わない。即ち、同時のタイミングで解放されないノード群は、合成ノードとしてしまうことで好ましいタイミングでの解放ができない、あるいは入力元や出力先が存在しない状況が生じうるため、変換部106はSpawnTray単位でこのような合成ノードへの変換処理を実行する。
【0055】
《グラフ出力処理》
上述のような構成をもつ本実施形態のPC100において実行される、グラフ編集アプリケーションにおいて設計された編集時グラフから視覚効果用データを生成するグラフ出力処理について、図4のフローチャートを用いて具体的な処理を説明する。該フローチャートに対応する処理は、制御部101が、例えば記録媒体102に記録されている対応する処理プログラムを読み出し、メモリ103に展開して実行することにより実現することができる。なお、本グラフ出力処理は、例えばグラフ編集アプリケーションにおいて視覚効果用データの出力指示がなされた際に開始されるものとして説明する。
【0056】
S401で、制御部101は、編集部105により生成された編集時グラフもしくは編集時グラフ群の情報を取得し、グラフに含まれるSpawnTrayを把握する。上述したようにSpawnTrayは1つの視覚効果に係る編集時グラフごとに、またさらにその内部に定義されるため、制御部101は含まれる全てのSpawnTrayについて、例えば下位層から順に把握する。
【0057】
S402で、変換部106は、S401において把握されたSpawnTrayの情報を考慮し、SpawnTrayごとに式化可能なノードをまとめてノード数を削減する最適化処理を行う。本実施形態のグラフ編集アプリケーションでは、視覚効果の1単位として設計される編集時グラフ全体が1つのSpawnTrayとして扱われるため、変換部106は、少なくとも編集時グラフごとに式化可能なノード群があるか否かの判断を行う。故に、変換部106は、1つのSpawnTray内に式化可能であるとして予め定められたカテゴリのノードが2以上存在すると判断した場合に本ステップの最適化処理を行う。このとき、最適化処理の対象となる複数のノードは、上述したポート定義、関数化、トポロジカルソートを経た後、1つのノードに変換される。また該1つのノードに対応する動作の処理内容は、予め定められた形式のデータに変換される。
【0058】
S403で、出力部107は、視覚効果用データの出力対象であるノード群(もしくはノードに関連付けられているデータやポート)のうちから、視覚効果の適用時に動作やデータを共用可能として定められているノード(もしくはデータやポート)に対して共通化可能であることを示す識別情報を付す。該識別情報は、上述したように1つの視覚効果の適用を並行してあるいは順次的に行う場合に、1度だけメモリ103への展開を行えばよい、動作や出力結果あるいはデータの共有が可能なノードである(もしくはデータを有する)ことを実行時に識別できるように付す情報である。
【0059】
S404で、出力部107は、最適化処理後のノード群について、属するSpawnTrayの情報、各ノードの入力及び出力の少なくともいずれか用のポートについて入力される情報またはリンクされるノードの情報を視覚効果用データとして出力する。該情報は、後述する参照用グラフにおけるリンクオブジェクトのインスタンス化、及び実行時グラフにおける各ポートオブジェクトの設定に用いられる。
【0060】
このようにすることで、以下の視覚効果適用アプリケーションにおける、ノードベースの視覚効果適用に係る処理を効率化可能な視覚効果用データを生成することができる。
【0061】
《視覚効果適用アプリケーション》
次に、上述のグラフ出力処理により生成された視覚効果用データに基づく視覚効果の適用を含む、本実施形態の視覚効果適用アプリケーションについて説明する。なお、視覚効果適用アプリケーションは、リアルタイムレンダリングにより画面生成を行うものである。視覚効果適用アプリケーションは、例えばゲームアプリケーションのように、操作入力や時間経過等により生じた変化を予め定められた応答時間内に反映した画面を、所定の時間間隔で描画して出力する。
【0062】
通常、リアルタイムレンダリングは出力する画面において動的な変化要素があるコンテンツに利用される。特に、近年では現実世界であるかのように知覚されうる、美麗なグラフィックスやキャラクタや物体の振る舞いを提示しつつ、よりユーザにとって自由度の高い世界を体験可能に提供する、所謂オープンワールドを実現するコンテンツにおいて、リアルタイムレンダリングは必須である。またこのようなコンテンツでは、リアルタイムレンダリングに際し、操作入力に基づく各種変動要素の状態を更新する処理、AI等のキャラクタの意思/行動決定に係る処理、照明演算等の美麗なグラフィックスとするための様々な処理を描画処理に先立って、あるいは描画処理と並行して行う必要がある。視覚効果の適用に係る処理も同様であり、制御部101は、これらの並行実行する処理に対して演算リソースやメモリリソースを適切に分配し、毎フレームの画面生成を実現する必要がある。
【0063】
そこで、本実施形態の視覚効果適用アプリケーションでは、演算に要する時間を低減すべく、視覚効果用データに基づくノードベースの視覚効果適用を実現する後述のグラフ適用処理において、データのインスタンス化に係る以下の仕組みを用いる。
【0064】
〈参照用グラフ〉
参照用グラフは、グラフ編集アプリケーションにおいて設計された編集時グラフを、視覚効果用データ出力の際の最適化処理適用後の状態で、視覚効果適用アプリケーションにおいて使用可能なように再現(メモリ展開)した情報である。
【0065】
グラフ編集アプリケーションについて上述したように、実行中に複数回適用されうる視覚効果は、都度対応するグラフのノード群やその他のデータを展開すれば、共通化可能な動作やデータを複数インスタンス化してしまうことにつながり、割り当てられたメモリ領域の逼迫を招きうる。従って、本実施形態の視覚効果適用アプリケーションでは、リアルタイムレンダリング中における視覚効果適用に係るデータの展開を効率化するため、描画対象のシーンについての描画に先立って必要となりうる各種データを展開する際に、視覚効果用データ中の該シーンで生じうる視覚効果のグラフに係る全ての情報(ノード、ポート、リンク及び対応する動作を規定する関数のオブジェクト、動作において使用されるデータや初期値等)を参照用グラフとしてメモリ103に展開する。
【0066】
参照用グラフは、その視覚効果の適用が画面生成に係る描画処理において発生するか否かに関わらず、図5(a)に示されるように変換部106による変換後の編集時グラフと同様のノード群及びリンク関係を再現する形で展開される。より詳しくは、視覚効果用データに含まれる1つのグラフについて、対応するメモリ領域の確保が行われた後、例えば次のような手順で該グラフに係る参照用グラフがメモリ103に展開されてよい。
【0067】
まず対象のグラフに含まれるすべてのノードの各々について、ノードオブジェクトと各ノードオブジェクトが有する入出力ポートに係るポートオブジェクトがインスタンス化される。参照用グラフに係るノードオブジェクトのインスタンス化は、対応するノードの処理ロジックを規定した関数オブジェクト(静的なデータの展開をインスタンス化動作に含んでよい)のインスタンス化を含む。ポートオブジェクトは、少なくとも対応する関数オブジェクトのインスタンス化により初期値が割り当てられる変数に対応付けられている。なお、関数オブジェクトに係る関数において定義される入力(宣言される変数や定数)は、必ずしも全てが上記グラフ編集アプリケーションにおいて他のノードや呼び出し元のプロセスから入力が可能なように入力用ポートとして規定されるものである必要はない。即ち、各ノードについて対応付けられた関数は入力として、
・入力用ポートに対応する値が代入(情報が格納)される変数
・入力用ポートとしては設けないが、自身で設定した初期値を設定する、または外部の関数やプロセスにおいて参照可能に宣言された所定の変数や定数の値を参照する変数
の2種類を有し得る。これらの変数はインスタンス化時に予め定められた初期値や参照先の情報が割り当てられる。
【0068】
次に、インスタンス化されたポートオブジェクトについて、視覚効果用データでリンクが定義されている場合は、ポートオブジェクト間をリンクするリンクオブジェクトをインスタンス化する。リンクオブジェクトは、別のノードの出力用ポートから、またはグラフに係る視覚効果に係る処理の呼び出し元のプロセスから入力される値が入力される、既にインスタンス化した入力用ポートに係るポートオブジェクトに対して入力元の情報を定義する。即ち、リンクオブジェクトにより、入力用ポートを有するノードに係る関数の実行において、入力用ポートに対応する変数に代入する値の参照先の情報が定義される。
【0069】
またリンクオブジェクトは、例えば1つのノードに対応する動作が行われた際に、出力用ポートの値が格納されるメモリアドレスを別のノードの入力用ポートにおいて参照する、または出力用ポートの参照先が存在することを示す情報を関連付ける。これは、既にコーディングされたプログラムを実行する場合と異なり、ノードベースで設計された視覚効果の適用においては、ノードごとに定められた動作を動的に実行していく必要があるため、参照先のアドレスが確定しているわけではなく、都度ノードのポートごとに設定(リンクしていることの情報を設定)する必要があることによる。従って、ノード間の接続(参照アドレスの設定)や参照先が存在する、あるいは被参照先であることを示す情報を参照用グラフでは規定する。このようにすることで、ノードベースで設計されたノード群に基づく専用ネイティブコードやシェーダ等を生成せずとも、ノードごとの動作を連携して行わせて、デザイナの意図する視覚効果を実現することができるようになる。
【0070】
なお、参照用グラフは、例えば「ローディング中」等の実際の画面描画処理が行われるよりも前に展開が行われるものであるため、実行時においてその視覚効果が発生するか、同様の視覚効果を適用する対象がいくつ存在するか等は考慮せずに展開が行われる。故に、使用する静的データが共通である視覚効果について1つの参照用グラフがメモリ103に展開される。
【0071】
〈実行時グラフ〉
一方、画面描画処理の開始後の動的変化を考慮して発生させる視覚効果を決定する場合、実行部108は、視覚効果用データをうちの該発生させる視覚効果に対応するデータを実行時グラフとしてメモリ103に展開する。実行時グラフは、概略的には図5(b)に示されるように、ノード間のリンク関係の情報を含まず展開される。また実行中に複数回発生し得る視覚効果の適用につき使用する静的なデータ等については、既に参照用グラフとして展開済みのものを利用するよう構成され、実行時グラフは変換後の編集時グラフを完全には再現する構成とはならない。実行時グラフは、展開済みの参照用グラフに基づいて後述の処理を適用することで、該当の視覚効果を実現することが可能となる。
【0072】
本実施形態では視覚効果用データに含まれる各グラフについて、該グラフについて使用される情報を実行時グラフとしてデータ展開する必要があるか否かは、視覚効果用データにおいて上述した共通化可能な動作やデータを識別する識別情報が付されていないか否かにより判断されるものとして説明する。しかしながら、上述したように予め実行時グラフのインスタンス化時にデータ展開するデータが定められている場合は、展開有無の判断は識別情報に基づいてなされなくてよい。また静的データ等は全て参照用グラフとして展開済みのものを用いるものとして、実行時グラフではいずれの静的データの展開も行わないよう構成してもよい。
【0073】
図5(b)に示されるように、実行時グラフの展開は参照用グラフとは異なり、対象のグラフ内のノードについてポートオブジェクト及びリンクオブジェクトのインスタンス化を含まずに行われる。しかしながら、このようにいずれのリンクの状態も定義しない状態では視覚効果の適用ができない。
【0074】
故に、本実施形態の視覚効果適用アプリケーションでは、視覚効果の適用が可能なように、実行時グラフの各ノード間のリンクを処理するのではなく、実行時グラフに含まれるノードの入力(上記2種類の入力)のうちの入力用ポートに対応する変数に、参照先のデータへの参照を割り当てる(バインドする)ことで実現する。具体的には実行部108は、例えば実行時グラフに含まれる各ノードに対応付けられた関数に伴う入力情報取得処理(実行時グラフ固有の、該関数が有する全ての種類の入力(変数)について値を取得する処理)の実行時に処理されるよう、
・同一の視覚効果に係る参照用グラフの対応する入力用ポートに対して入力される値を返す関数
・入力用ポートに係るリンク先のノードの出力を返す関数
のいずれかを割り当てる(バインドする)。なお、入力情報取得処理では、リンクが定義されていない入力用ポートに対応する変数にはその初期値を返す関数をバインドし、入力用ポートが設けられていない入力に係る変数には初期値や参照先の変数の値を返す関数をバインドする。
【0075】
一方で、実行時グラフに含まれるノードの出力(出力用ポートに対応)には、該ノードの入力に係る各種変数を用いて表現されている関数がバインドされる。なお、1つのノードについて上記入力情報取得処理の対象となる入力の把握は、先に出力に係る関数のバインドがなされたことに応じて、該関数を基になされる。
【0076】
例えば図5(a)の参照用グラフでは、ノード501には、入力用ポート502及び503に対応する変数を入力に含む関数Moveが割り当てられており、該関数の戻り値が出力用ポート504から出力される。一方、図3を用いて説明したノード301、303及び304の合成で生成されたノード505には、入力用ポート506及び507に対応する変数を入力に含む関数Mulが処理ロジックにあり、該関数の戻り値が出力用ポート508から出力されるとともに、処理ロジックのうちの関数Subの変数の入力としても取得される。また関数Subは入力用ポート509に対応する変数を入力に含み、該関数の戻り値は処理ロジックのうちの関数Addの変数の入力としても取得される。一方で、関数Addは入力用ポート510に対応する変数を入力に含み、該関数の戻り値が出力用ポート511から出力される。
【0077】
このような構造を有する参照用グラフに対応して生成される図5(b)に示される実行時グラフでは、まずノード501及び505に対応するノード(オブジェクト)521及び522のノードオブジェクトが展開された後、出力523、524、525に対し、それぞれ出力用ポート504、508、511の戻り値を出力する関数オブジェクトがバインドされる。即ち、出力523には関数Move、出力524には関数Mul、出力525にはトポロジカルソートされた関数Sub及びAddのオブジェクトが、参照用グラフを参照してバインドされる。
【0078】
バインドされたそれぞれの関数オブジェクトは、その実行にあたり必要な入力が宣言されており、各ノードについて入力情報取得処理がなされた場合には必要な情報が取得されるよう、各ノードの入力226及び227に含まれる全ての変数について、入力情報取得処理の実行時に実行される関数オブジェクトがバインドされる。例えば、図5(b)においてノード521の出力523にバインドされた関数Moveを参照すると、入力526は入力用ポート502及び503に対応する変数を含んで構成される。このうち、入力用ポート502に対応する変数には参照用グラフにおいてリンクが定義されていないため、該変数には参照用グラフにおいてインスタンス化された該変数の初期値を返す関数オブジェクトが入力526の該変数にバインドされる。一方で、入力用ポート503に対応する変数には参照用グラフにおいてリンクが定義されているため、リンク先である出力用ポート508に対応する出力524にバインドされた関数オブジェクト、即ち関数Mulのオブジェクトが入力526の該変数にバインドされる。
【0079】
また図5(b)においてノード522の出力524及び525にバインドされた関数オブジェクトを参照し、入力527に含まれる入力用ポート506、507、509及び510に対応する変数について同様に、入力情報取得処理の実行時に実行される関数オブジェクトがバインドされる。このうち、入力用ポート506、507及び509に対応する変数には、参照用グラフにおいてリンクが定義されているが、そのリンク先は呼び出し側のプロセスであるため、該プロセスにより実行時グラフに入力される値を返す関数が、入力527の対応する変数の各々にバインドされる。一方で、入力用ポート510に対応する変数には参照用グラフにおいてノード501の出力用ポート504へのリンクが定義されているため、出力用ポート504に対応する出力523にバインドされた関数オブジェクト、即ち関数Moveのオブジェクトが入力527の該変数にバインドされる。
【0080】
このようにすることで、通常ノードベースで設計された視覚効果をオフラインレンダリングにて適用する場合の以下の処理
1.各ノードに対応する展開領域の確保、必要なデータ(変数、処理ロジック含む)及びノードオブジェクトのインスタンス化
2.対応するポートオブジェクトのインスタンス化
3.入力用ポートに係るポートオブジェクトについて、リンク先に存在するノードのノードオブジェクトを探索し、該ノードの出力用ポートの値が格納されるアドレスの情報の関連付け
4.3においてリンク先であると検出されたノードの出力用ポートに係るポートオブジェクトについて、リンク関係にあるノードオブジェクトを関連付け(解放可否の判断用)
5.ノードの状態を監視、解放時期にオブジェクト解放及びリンク切断処理
のうち、ポートオブジェクトのインスタンス化、リンク先の探索やリンク接続の処理、及び一部の切断処理を省略することが可能となる。特に、このようなリンクに係る処理は、視覚効果の適用対象のオブジェクトが多数存在する場合において演算リソース及びメモリリソースを消費しうるため、本実施形態のように参照用グラフに共通化可能な動作・データやリンク用の情報をまとめ、実行時グラフでは不要なデータ展開やリンクオブジェクトのインスタンス化を省略可能とし、効率化を行う。
【0081】
《グラフ適用処理》
以下、本実施形態のPC100において実行される、視覚効果適用アプリケーションにおける描画処理においてノードベースでの視覚効果の適用を実現するグラフ適用処理について、図6のフローチャートを用いて具体的な処理を説明する。該フローチャートに対応する処理は、制御部101が、例えば記録媒体102に記録されている対応する処理プログラムを読み出し、メモリ103に展開して実行することにより実現することができる。なお、本グラフ適用処理は、ノードベースの視覚効果が適用された画面の描画処理を含む視覚効果適用アプリケーションの実行が開始された際に開始されるものとして説明する。
【0082】
S601で、制御部101は、視覚効果適用アプリケーションにおける描画処理に先立って、描画対象シーンに含まれる描画オブジェクトに関連する視覚効果について、視覚効果用データから該当の情報を読み出し、メモリ103に展開する。このとき展開される視覚効果用データのうちの該当の情報は、視覚効果用データにおいて共通化可能な動作を示す識別情報が付されたノードに係るノードオブジェクト、及びノード間のリンクを示すリンクオブジェクトを含み、参照用グラフとして展開される。
【0083】
S602で、実行部108は制御部101の制御の下、視覚効果を適用する状況が生じたか否かを判断する。実行部108は、視覚効果を適用する状況が生じたと判断した場合は処理をS603に移し、生じていないと判断した場合は処理をS606に移す。
【0084】
S603で、実行部108は、適用する視覚効果に係る実行時グラフを視覚効果用データに基づいてメモリ103に展開する。具体的には実行部108は、対応する視覚効果に含まれるノード群の情報に従ってメモリ103に展開領域を確保し、実行時グラフに含まれるノードに係るノードオブジェクト及びそれらに付随するポートオブジェクトを展開する。上述したように実行時グラフは、リンクオブジェクトを含まず、本ステップの時点では視覚効果に係る処理を実行することはできない状態でメモリ103に展開される。
【0085】
なお、本ステップにおいて展開領域の確保及び展開は、適用する視覚効果について定められたSpawnTrayごとに行われる。実行部108は、SpawnTrayごとに定められた展開時期を把握し、展開を行うタイミングのSpawnTrayについて該SpawnTray内のノード群に応じた展開領域をメモリ103に確保し、展開する。このとき展開されたSpawnTrayごとに解放時期を管理するよう、実行部108は処理を行う。
【0086】
S604で、実行部108は、展開した実行時グラフに対応する参照用グラフを参照し、実行時グラフに含まれる各ノードの入力及び出力について、対応する関数オブジェクトをバインドする。なお、図5を用いて上述した関数オブジェクトバインドに関する説明では、各ノードの入力または出力のうち、入力用ポートまたは出力用ポートに対応する変数等について関数オブジェクトを割り当てることを説明したが、入力情報取得処理において入力値を取得するためにバインドされる関数オブジェクトは、これに限られない。即ち、上述したように各ノードの処理ロジックに対応する関数にはポートに対応しない変数も宣言されるため、これらについて入力用情報取得処理において初期値や定数、参照先に代入されている値を返す関数オブジェクトをバインドすることも、本ステップの処理に含まれていてよい。このようにすることで、リンクオブジェクトを生成することなく、実行時グラフ単体で、適用する視覚効果に係るノード群の処理を行うことが可能となる。
【0087】
S605で、実行部108は、適用する視覚効果に係るS604において展開した実行時グラフの処理を実行し、視覚効果の適用を開始する。実行時グラフの処理は、グラフ内の最後段の出力にバインドされた関数オブジェクトを実行することで、該実行の過程でグラフ内の必要となる変数の値を取得する入力情報取得処理と、ノードの処理ロジックに係る関数ロジックが適宜実行され、出力を行う。即ち、結果として実行時グラフは、関数オブジェクトのバインドによって、グラフ全体の処理を実行時グラフに係る1つの関数のように実行できる。
【0088】
なお、視覚効果は通常1フレーム(1回の呼び出し)で完了するものではないため、複数のフレームに渡って結果出力するよう実行されるが、入力情報取得処理は必ずしも毎回の出力に係り実行される必要はなく、予め定められた間隔で実行、参照値の変更が生じた場合のみ実行等、適宜実行が制御されるものであってよい。入力情報取得処理に係る実行の制御は、グラフ編集アプリケーションにおいてユーザにより定義可能に構成されるものであってもよいし、予めノードごとに定められるものであってもよい。
【0089】
S606で、実行部108は、解放を行うSpawnTrayに係るオブジェクトが存在するか否か判断する。実行部108は、解放を行うSpawnTrayに係るオブジェクトが存在すると判断した場合は処理をS606に移し、存在しないと判断した場合は処理をS602に戻す。
【0090】
S607で、実行部108は、解放を行うSpawnTrayに係るオブジェクトをメモリ103から解放させる。即ち、実行部108は、解放を行うSpawnTrayに含まれるノード群のオブジェクトを、一括してメモリ103から解放させる。またSpawnTrayに係るオブジェクトの出力用ポートに係る関数オブジェクトがバインドされた入力用ポートのポートオブジェクトについては、例えばバインドを解消する、もしくは予め定められた値を返す関数オブジェクトに変更する等の処理を実行部108が行えばよい。
【0091】
以上説明したように、本実施形態の視覚効果用データの生成及び該データを使用した視覚効果の適用の仕組みを用いることで、必要な演算リソース及びメモリリソースを低減しつつ、リアルタイムレンダリングにおいてノードベースで設計された視覚効果の適用を好適に実現することができる。
【0092】
[その他の実施形態]
本発明は上記実施の形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。また本発明に係る情報処理装置は、1以上のコンピュータを該情報処理装置として機能させるプログラムによっても実現可能である。該プログラムは、コンピュータが読み取り可能な記録媒体に記録されることにより、あるいは電気通信回線を通じて、提供/配布することができる。
【符号の説明】
【0093】
101:制御部、102:記録媒体、103:メモリ、104:ノード情報DB、105:編集部、106:変換部、107:出力部、108:実行部、109:描画部、110:操作入力部、111:表示部
図1
図2
図3
図4
図5
図6