(57)【要約】【課題】リアルタイムレンダリングにおいてノードベースで設計されたエフェクトを実現する。【解決手段】視覚効果の適用に先立って、視覚効果用データを展開領域に参照用情報として展開する。また描画処理において視覚効果を適用する場合に、視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する。そして実行用ノード群の各々が有する出力について、参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当て、実行用ノード群の各々が有する入力について、参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートにより受け付けられる入力情報を返す関数を割り当てる。実行用ノード群に割り当てられた関数を実行し、描画処理における視覚効果の適用に係る演算結果を出力する。【選択図】図６
2017045335.tif 000002
【特許請求の範囲】
【請求項１】
描画処理の実行時に適用される視覚効果用データを生成するプログラムであって、
コンピュータに、
各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する処理と、
取得された前記設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する１つの合成ノードに置換する処理と、
取得された前記設計情報から、前記置換する処理を経て前記視覚効果用データを生成する処理と、
を実行させるプログラム。
【請求項２】
前記設計情報は、含まれるノード群のうちの少なくとも一部にグループを定義する情報を含み、
前記置換する処理において、前記１つの合成ノードへの置換対象となる前記複数のノードは同一の前記グループ内に定義されたノードである請求項１に記載のプログラム。
【請求項３】
前記置換する処理において、前記グループを跨いでリンクが接続される２つのノードは、同一の前記１つの合成ノードに置換されない請求項２に記載のプログラム。
【請求項４】
前記グループは、視覚効果の適用時に該グループ内のノードの展開及び解放時期を定義する請求項２または３に記載のプログラム。
【請求項５】
前記グループは、視覚効果の適用時に一括して解放するノード群を定義する請求項２乃至４のいずれか１項に記載のプログラム。
【請求項６】
前記プログラムは、取得された前記設計情報に含まれるノード群のうち、視覚効果の適用に際し複数回生じ得る共通化可能な動作に対応するノードを識別する識別情報を付す処理をさらに前記コンピュータに実行させ、
前記視覚効果用データは、前記置換する処理及び前記識別情報を付す処理を経て前記視覚効果用データを生成する請求項１乃至５のいずれか１項に記載のプログラム。
【請求項７】
前記プログラムは、前記１つの合成ノードに対応する動作を規定するデータの出力形式を選択する処理を、前記コンピュータにさらに実行させる請求項１乃至６のいずれか１項に記載のプログラム。
【請求項８】
視覚効果の適用を含む描画処理を実行するプログラムであって、
視覚効果を適用する処理において必要な視覚効果用データは、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された設計情報から生成されたデータであり、
コンピュータに、
視覚効果の適用に先立って、前記視覚効果用データを展開領域に参照用情報として展開する処理と、
前記描画処理において視覚効果を適用する場合に、前記視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する処理と、
前記実行用ノード群の各々が有する出力について、前記参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当てる処理と、
前記実行用ノード群の各々が有する入力について、前記参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートにより受け付けられる入力情報を返す関数を割り当てる処理と、
前記実行用ノード群に割り当てられた関数を実行し、前記描画処理における視覚効果の適用に係る演算結果を出力する処理と、
を実行させるプログラム。
【請求項９】
前記演算結果を出力する処理において、前記参照用情報として展開されたデータが使用される請求項８に記載のプログラム。
【請求項１０】
前記入力情報を返す関数を割り当てる処理において、前記参照用情報に含まれる前記同一のノードにおいてリンクが定義されていない入力ポートに係る入力には、該入力ポートに予め割り当てられた初期値を返す関数が割り当てられる請求項８または９に記載のプログラム。
【請求項１１】
前記プログラムは、前記演算結果を出力する処理において、前記実行用ノード群に割り当てられた前記入力情報を返す関数の実行タイミングを制御する処理をさらに前記コンピュータに実行させる請求項８乃至１０のいずれか１項に記載のプログラム。
【請求項１２】
前記視覚効果用データは、前記ノード群のうちの少なくとも一部にグループを定義する情報を含み、
前記プログラムは、前記演算結果を出力する処理の実行後に、前記視覚効果用データにより定義された対応する前記グループ内の前記実行用ノードを一括して解放する処理を、前記コンピュータにさらに実行させる請求項８乃至１１のいずれか１項に記載のプログラム。
【請求項１３】
前記実行用ノード群を展開する処理において、前記視覚効果用データにおいて定義される前記グループ単位で、該グループ内に含まれる実行用ノードの展開が行われる請求項１２に記載のプログラム。
【請求項１４】
前記実行用ノード群を展開する処理において、前記視覚効果用データにおいて定義される前記グループ単位で、該グループ内に含まれる前記実行用ノードに応じた展開領域が確保され、展開に用いられる請求項１２または１３に記載のプログラム。
【請求項１５】
前記プログラムは、前記視覚効果用データのうち、視覚効果の適用に際し複数回生じうる場合に共通化可能な動作及びデータは前記参照用情報として展開させ、動的に変化し得る動作及びデータは前記実行用ノード群として展開させるよう制御する処理をさらに前記コンピュータに実行させる請求項８乃至１４のいずれか１項に記載のプログラム。
【請求項１６】
請求項１乃至１５のいずれか１項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１７】
描画処理の実行時に適用される視覚効果用データを生成する情報処理装置であって、
各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する取得手段と、
前記取得手段により取得された前記設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する１つの合成ノードに置換する置換手段と、
前記取得された設計情報から、前記置換手段による前記１つの合成ノードへの置換を経て、前記視覚効果用データを生成する生成手段と、
を有する情報処理装置。
【請求項１８】
視覚効果の適用を含む描画処理を実行する情報処理装置であって、
視覚効果を適用する処理において必要な視覚効果用データは、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された設計情報から生成されたデータであり、
前記情報処理装置は、
視覚効果の適用に先立って、前記視覚効果用データを展開領域に参照用情報として展開する第１の展開手段と、
前記描画処理において視覚効果を適用する場合に、前記視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する第２の展開手段と、
前記第２の展開手段により展開された前記実行用ノード群の各々が有する出力について、前記第１の展開手段により展開された前記参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当てる第１の割り当て手段と、
前記第２の展開手段により展開された前記実行用ノード群の各々が有する入力の各々について、前記第１の展開手段により展開された前記参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートにより受け付けられる入力情報を返す関数を割り当てる第２の割り当て手段と、
前記第１の割り当て手段または前記第２の割り当て手段により前記実行用ノード群に割り当てられた関数を実行し、前記描画処理における視覚効果の適用に係る演算結果を出力する出力手段と、
を有する情報処理装置。
【請求項１９】
描画処理の実行時に適用される視覚効果用データを生成する情報処理装置の制御方法であって、
各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する取得工程と、
前記取得工程において取得された前記設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する１つの合成ノードに置換する置換工程と、
前記取得された設計情報から、前記置換工程における前記１つの合成ノードへの置換を経て、前記視覚効果用データを生成する生成工程と、
を有する情報処理装置の制御方法。
【請求項２０】
視覚効果の適用を含む描画処理を実行する情報処理装置の制御方法であって、
視覚効果を適用する処理において必要な視覚効果用データは、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、前記入力ポートまたは前記出力ポートに接続されるリンク群とで構成された設計情報から生成されたデータであり、
前記情報処理装置の制御方法は、
視覚効果の適用に先立って、前記視覚効果用データを展開領域に参照用情報として展開する第１の展開工程と、
前記描画処理において視覚効果を適用する場合に、前記視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する第２の展開工程と、
前記第２の展開工程において展開された前記実行用ノード群の各々が有する出力について、前記第１の展開工程において展開された前記参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当てる第１の割り当て工程と、
前記第２の展開工程において展開された前記実行用ノード群の各々が有する入力の各々について、前記第１の展開工程において展開された前記参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートリンクにより受け付けられる入力情報を返す関数を割り当てる第２の割り当て工程と、
記第１の割り当て工程または前記第２の割り当て工程において前記実行用ノード群に割り当てられた関数を実行し、前記描画処理における視覚効果の適用に係る演算結果を出力する出力工程と、
を有する情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、記録媒体、情報処理装置及び制御方法に関し、特にリアルタイム性が要求されるグラフィックコンテンツにおける視覚効果（ＶＦＸ：Visual Effects）の提示技術に関する。
【背景技術】
【０００２】
従来、電子ゲーム等のインタラクティブコンテンツは、ユーザによりなされた操作入力や経時要素等によって動的に発生する状態に応じたグラフィックを生成し、表示装置へ出力することでユーザに提示される。一方で、映画等の観賞を主たる目的とするような動画コンテンツは、予め定められた挙動に応じて状態を遷移させながら展開するグラフィックをフレームごとに生成し、提示することがなされている。前者のようなグラフィック生成手法は、状況に応じて態様が変化する動的要素を考慮した描画内容を生成するリアルタイムレンダリング、後者は、生成結果の再生時において描画内容が不変である（動的要素がない）オフラインレンダリングと呼ばれている。
【０００３】
オフラインレンダリングにより提供されるコンテンツは、再生前には描画処理の全ての演算が完了しているものであり、基本的には処理に要する時間についての制限はない。一方で、リアルタイムレンダリングにより提供されるコンテンツは、予め定められたフレーム間隔で画面更新を行わなければならないため、フレーム時間内で描画処理を完了する時間的な制約がある。また、このように動的要素を考慮するインタラクティブコンテンツでは、描画処理の他にフレーム時間内に種々の演算を完了しなければならないため、それぞれの処理に割り当て可能な演算リソースについても制限がある。
【０００４】
リアルタイムレンダリングを使用するコンテンツの提供において、再現度の高い（与える現実感が高い）視覚効果（以下、単にエフェクト）を適用するためには複雑な演算が必要になるため、好適に演算量や演算リソースの占有量を低減する工夫が必要であった。特許文献１では、例えば閃光、煙、火花等を用いた爆発を表現するエフェクトを効率的に適用するために、予め構成や表示時間等がパターン化された、所謂タイムラインベースで規定されたエフェクトに係るオブジェクトを、適用対象の要素の座標に応じて配置する手法が採用されている。
【０００５】
このようにタイムラインベースで一連の動作が規定されたリアルタイムエフェクトを適用する際には、例えば特許文献１のように適用対象となる要素の座標を入力として指定する必要がある。しかしながら、例えば適用対象となる要素がツリー構造等で構成された一定の拘束条件を有する要素群である場合、各子要素へのリアルタイムエフェクトの提供は、親要素の座標または親要素の座標と子要素の座標のオブセット値を指定する等、予め定められた入力方式のいずれかによってのみ選択できる。即ち、事前に設計されたリアルタイムエフェクトを適用するようなケースでは、エフェクト設計の段階でエフェクトの適用に必須となるパラメータが限定的に定められており、該パラメータに対応する処理のみが実行可能となっている。つまり、入力のパラメータを定められていない方式を利用することや、エフェクトにゲーム中の異なる要素に応じたバリエーションを加えること等ができず、これらの実装のためには、エフェクト設計においてより多くの演算パターンを用意する必要があった。このため、タイムラインベースのリアルタイムエフェクトを用いる方式は、近年の美麗なグラフィックが求められるインタラクティブコンテンツにとっては、柔軟性や拡張性が不足し、デザイナ所望の表現の実現が現実的でない可能性があった。
【０００６】
ところで、エフェクトのような画面の外観や見栄えを良好にすべく適用される要素は、プログラマではなくデザイナによりその設計がなされる。故に、近年では所謂レンダリングエンジン等の開発ツールにおいて、エフェクト用の設計（編集）ツールが提供されているものもある。このような設計ツールでは、例えば現在のパラメータからの演算により得られた様々な要素や経過時間を変数として用いる所定の関数に従った並進や回転等の演算を含むような複雑なエフェクトを、ＧＵＩベースで設計することができるため、プログラムの専門的知識を有さないデザイナであってもエフェクト設計を行うことができる。
【０００７】
このようなエフェクト設計ツールの１つには、ノードベースのエフェクト設計ツールがある。ノードベースのエフェクト設計ツールでは、四則演算、時間計測、並進や回転に基づく行列演算等の各種基本的な演算や入力パラメータ等のユニットであるノードを設計領域内に配置し、それらの入力と出力とを接続（リンク）させることで、エフェクト設計が可能である。つまり、デザイナが使用を所望する要素や処理の順番を直感的に設計することができ、デザイナは可視化された情報の流れを理解しつつ所望のエフェクト設計が可能なである。また予め用意されたノードを追加することで様々なバリエーションのエフェクトが設計できるため、柔軟性及び拡張性に富んでいる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−１１９２２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、ノードベースで一連の動作が規定されたエフェクトを適用したグラフィックスを生成する場合、設計時と同様、
・所定の動作（関数）等が割り当てられたノードオブジェクト、
・ノードが有する入力や出力のポートを規定するポートオブジェクト、さらに
・ノード間を結合するためにポートの参照関係を規定するリンクオブジェクト
をインスタンス化する必要がある。つまり、メモリ空間には、エフェクト設計において配置されたノード、ポート及びリンクの数に応じた領域が、同エフェクトを適用する要素の数だけ確保される必要がある。
【００１０】
故に、例えば特許文献１のような火花等の多数のパーティクルで構成されるエフェクトを実現するためには、パーティクルの各々について上記のようなインスタンス化が必要であり、メモリリソースを多量に消費し得る。またさらに、ノード等の各々についてインスタンス化のタイミングや解放のタイミングが異なるため、これらを監視し、適宜解放する必要がある。即ち、演算リソースの観点からしても、インスタンス化した多量のノード等のオブジェクトの各々に係る演算、ノード間のリンク先参照に係る探索等の演算、及びメモリリソースと処理の進行を考慮した解放判断に係る演算等の全ての演算を、フレーム時間内に完了する必要があった。このため、ノードベースにより規定されたエフェクトを適用したグラフィックスの生成はリアルタイムレンダリングには不向きであり、これまでノードベースのエフェクト設計はオフラインレンダリングについてのみ利用されるものであった。
【００１１】
本発明の少なくとも１つの実施形態は、上述の問題点に鑑みてなされたものであり、リアルタイムレンダリングにおいてノードベースで設計されたエフェクトを実現するプログラム、記録媒体、情報処理装置及び制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
前述の目的を達成するために、本発明の少なくとも１つの実施形態の一態様に係るプログラムは、描画処理の実行時に適用される視覚効果用データを生成するプログラムであって、コンピュータに、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、入力ポートまたは出力ポートに接続されるリンク群とで構成された、視覚効果の設計情報を取得する処理と、取得された設計情報に含まれるノード群のうち、予め定められたカテゴリの動作に対応する複数のノードを、該複数のノードに対応する動作を実行する１つの合成ノードに置換する処理と、取得された設計情報から、置換する処理を経て視覚効果用データを生成する処理と、を実行させる。
【００１３】
また前述の目的を達成するために、本発明の少なくとも１つの実施形態の別態様に係るプログラムは、視覚効果の適用を含む描画処理を実行するプログラムであって、視覚効果を適用する処理において必要な視覚効果用データは、各々が、視覚効果の適用時に実行される種々の単位の動作が定義され、動作に必要な情報を受け付ける入力ポート及び動作の結果を返す出力ポートの少なくともいずれかを有するノード群と、ノード間における情報のやり取りを定義する、入力ポートまたは出力ポートに接続されるリンク群とで構成された設計情報から生成されたデータであり、コンピュータに、視覚効果の適用に先立って、視覚効果用データを展開領域に参照用情報として展開する処理と、描画処理において視覚効果を適用する場合に、視覚効果用データにより定義されるノード群を、ノード間のやり取りを定義しない状態で実行用ノード群として展開領域に展開する処理と、実行用ノード群の各々が有する出力について、参照用情報に含まれる該実行用ノードと同一のノードに定義された動作の結果情報を返す関数を割り当てる処理と、実行用ノード群の各々が有する入力について、参照用情報に含まれる該実行用ノードと同一のノードの、対応する入力ポートにより受け付けられる入力情報を返す関数を割り当てる処理と、実行用ノード群に割り当てられた関数を実行し、描画処理における視覚効果の適用に係る演算結果を出力する処理と、を実行させる。
【発明の効果】
【００１４】
このような構成により本発明の少なくとも１つの実施形態によれば、リアルタイムレンダリングにおいてノードベースで設計されたエフェクトを実現することが可能となる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態に係るＰＣ１００の機能構成を示したブロック図
【図２】本発明の実施形態に係るＰＣ１００において実行されるグラフ編集アプリケーションを説明するための図
【図３】本発明の実施形態に係るグラフ編集アプリケーションにおけるノード数の削減に係る処理を説明するための図
【図４】本発明の実施形態に係るＰＣ１００において実行されるグラフ出力処理を例示したフローチャート
【図５】本発明の実施形態に係るＰＣ１００において実行される視覚効果適用アプリケーションにおける視覚効果用データの展開を説明するための図
【図６】本発明の実施形態に係るＰＣ１００において実行されるグラフ適用処理を例示したフローチャート
【発明を実施するための形態】
【００１６】
［実施形態］
以下、本発明の例示的な実施形態について、図面を参照して詳細に説明する。なお、以下に説明する一実施形態は、情報処理装置の一例としての、描画処理の実行時に適用される視覚効果用データを生成し、該視覚効果用データに係る視覚効果（エフェクト）を適用した描画処理を実行可能なＰＣ１００に、本発明を適用した例を説明する。しかし、本発明は、上記視覚効果用データの生成処理、及び視覚効果用データに係る視覚効果を適用した描画処理の少なくともいずれかを実行することが可能な任意の機器に適用可能である。
【００１７】
また、本明細書において、ノードベースでの視覚効果の設計に係り、ノード群を配置し、各ノードの入力または出力用に設けられているポート間をリンクで接続することで構成された視覚効果に係る一単位の処理を示す概念を「グラフ」として言及する。また本明細書においてグラフは、「編集時」、「参照用」及び「実行時」のいずれかを付すことで状態や役割を峻別する。
【００１８】
「編集時グラフ」は、後述のグラフ編集アプリケーションにおいてユーザが設計中の状態のグラフを示す。編集時グラフは、ユーザの所望したノードの配置や、ノードにおける演算に用いられるデータやノードにおける演算結果またはノードにより取得可能となるデータのデータフロー、また該グラフのインスタンス化や解放等に係る制御フローを定義することが可能な状態である。編集時グラフは、ユーザの要求に基づいて適宜変更を加えることが可能な状態であり、視覚効果用データに変換される前の状態である。
【００１９】
「参照用グラフ」及び「実行時グラフ」は、双方、視覚効果の適用を含む描画処理の実行に際し、視覚効果用データを読み込むことでメモリ上に展開された状態であり、編集時グラフのようにユーザが視認可能な態様ではない。詳細は後述するが、参照用グラフと実行時グラフとはその特性が異なっている。「参照用グラフ」は、視覚効果の適用に際し、対応する視覚効果用データを出力した際の編集時グラフにおけるノード間のデータフロー等、編集時グラフ全体を再現し得るようにメモリ展開される。一方で、「実行時グラフ」は、参照用グラフと同一の視覚効果用データに基づくものであっても、該データを出力した際の編集時グラフにおける一部の情報（例えばノードの情報のみ）をメモリ展開するものである。視覚効果の適用においては、適用対象のオブジェクトが確定すると、該オブジェクトの各々に対して実行時グラフがメモリ展開されるが、この際該実行時グラフと同一の視覚効果用データに基づく参照用グラフを参照して、視覚効果適用に係る演算やメモリ消費を効率化する種々の処理が実行される。
【００２０】
《ＰＣ１００の構成》
図１は、本発明の実施形態に係るＰＣ１００の機能構成を示すブロック図である。
【００２１】
制御部１０１は、例えばＣＰＵであり、ＰＣ１００が有する各ブロックの動作を制御する。制御部１０１は、記録媒体１０２に記録された後述のアプリケーションに係る各種プログラムや各ブロックの動作を規定した動作プログラムを読み出し、メモリ１０３に展開して実行することにより各ブロックの動作を制御する。
【００２２】
記録媒体１０２は、例えばＰＣ１００に内蔵される半導体メモリや、ＰＣ１００に着脱可能に接続されるＨＤＤや光学メディア等の、恒久的に情報を保持可能な不揮発性の記録装置である。記録媒体１０２は、上述のプログラムだけでなく、各ブロックの動作において必要となるパラメータや描画処理において必要となる各種描画データ（モデルデータ、テクスチャデータ、描画用プログラム（シェーダ等）他）や視覚効果用データを記録する。メモリ１０３は、揮発性メモリである。メモリ１０３は、各種プログラムの展開領域としてだけでなく、各ブロックの動作において出力される中間データ等を一時的に記憶する格納領域としても用いられる。本実施形態では、視覚効果用データから読み出された参照用グラフや実行時グラフは、メモリ１０３に必要な領域が確保された後、展開されることで視覚効果を適用する処理において用いられる。
【００２３】
ノード情報ＤＢ１０４は、後述のグラフ編集アプリケーションにおいて、設計する編集時グラフに配置可能なノードの情報が格納されるデータベースである。ノードの各々はデータ入力用のポート及びデータ出力用のポートの少なくともいずれかを有しており、ノード情報ＤＢ１０４は、これらの情報を管理する。ノードは、例えば所定の演算を実行する関数（基本的な四則演算を含む）や予め定義されたデータを取得する関数等が割り当てられた概念であってよい。この場合、ノードの有する入力用ポートは引数を指し、出力用ポートは戻り値を指すものであってもよい。また１つのノードは、オーバーロード（多重定義）された同一名の複数の関数を指すものであってよく、この場合各関数の引数に応じて入力用ポートが設けられ、１つの入力用ポートは複数の関数において使用されうる。入力用ポートは、呼び出し元のプロセスにより与えられる引数に限らず、例えば関数の実行において使用される初期値や、他の関数で定義された静的な定数や変数の値を取得するものであってもよい。また本実施形態のグラフ編集アプリケーションは、既に設計された別の編集時グラフをノードとしても配置可能に構成され、これにより階層的な処理構造の視覚効果の設計が可能となる。
【００２４】
編集部１０５は、グラフ編集アプリケーションを用いた編集時グラフの設計を可能ならしめる。本実施形態ではアプリケーションとして実現される処理も、ＰＣ１００の機能構成として図１のブロック図では示すが、その処理の実体は制御部１０１や後述の描画部１０９のいずれであってもよい。
【００２５】
出力部１０７は、グラフ編集アプリケーションにおいて設計された編集時グラフ、もしくは描画対象の所定のシーンや視覚効果について設計された一連の編集時グラフについて、出力要求がなされたことに応じて対応する視覚効果用データを出力する。視覚効果用データは、例えばバイナリデータとして出力されてよく、編集時グラフについて所定の演算が適用されることでデータが生成される。また詳細は後述するが、視覚効果用データの出力に際し、該視覚効果適用時の演算やメモリ占有を効率化するために、変換部１０６により編集時グラフの最適化に係る変換処理がなされた後、視覚効果用データは生成される。
【００２６】
実行部１０８は、グラフ編集アプリケーションにより生成（出力）された視覚効果用データに係る視覚効果を適用するための各種処理を実行する。本実施形態では実行部１０８は、リアルタイムレンダリングを行う後述の視覚効果適用アプリケーションにつき、描画される画面に含まれる視覚効果に係るデータ展開及び演算を行う。
【００２７】
描画部１０９は、視覚効果適用アプリケーションに係る画面の描画処理を行う。本実施形態の描画部１０９は、描画処理において視覚効果の適用がなされる描画オブジェクトについては、実行部１０８によりなされた演算結果に基づき対応する画素の描画を行う。なお、視覚効果は例えば火花を示すようなパーティクルを付加するものを含むものであってもよく、基準となる描画オブジェクトに加えて、実行部１０８の演算結果として新たな描画オブジェクトを追加描画するものであってもよい。
【００２８】
操作入力部１１０は、例えばマウスやキーボード等のＰＣ１００が有するユーザインタフェースである。操作入力部１１０は、各種ユーザインタフェースに対して操作入力がなされたことを検出すると、該操作入力に対応する制御信号を制御部１０１に出力する、もしくは入力イベントの発生を制御部１０１に通知する。
【００２９】
表示部１１１は、ＰＣ１００に内蔵、あるいはＰＣ１００に外部接続された表示装置である。表示部１１１は、ＰＣ１００からの画像信号（画面）の出力を受けて、表示内容が更新される。本実施形態では表示部１１１には、後述の視覚効果適用アプリケーションの実行時、描画部１０９によるリアルタイムレンダリングで生成された画面が、所定の時間間隔で出力され、表示される。
【００３０】
《グラフ編集アプリケーション》
次に、本実施形態のＰＣ１００において実行される、編集時グラフの編集及び視覚効果用データの出力を実現するグラフ編集アプリケーションについて、その動作概要を説明する。
【００３１】
視覚効果に係る１つの編集時グラフの設計に際し、ユーザはグラフ編集アプリケーションにおいて、上述したノード情報ＤＢ１０４に登録されているノードを図２に示されるようなグラフ設計フィールド内に配置することができる。図２に示される編集時グラフは、視覚効果が適用される基準となる位置（RC_WorldMatrixにより定義）から、時間に応じて変化する曲線を示す関数（FloatFCurve_1）により得られる値を回転角として回転させたスプライトを表示（RC_DrawShape_1）し、時間差で同一の位置（回転後）にさらに別のスプライトを表示（RC_DrawShape_2）する視覚効果を定義したものである。
【００３２】
ノード情報ＤＢ１０４に登録されているノード群は、例えば後述の視覚効果適用アプリケーションに係るプログラムにおいて予め定義された関数に対応して登録されるものであってもよいし、この他四則演算やアプリケーションについてデフォルトで用意される基本関数や、使用されるライブラリに定義された関数に対応して登録されるものであってもよい。例えば図２に示されるTransform44_1の名称（ノード名２００）が割り当てられたノード２０１は、入力用ポート２０２（Matrix(m44)）に入力された４行４列のマトリクスを、他の入力用ポートに入力された情報に基づき変換（変形）し、得られた４行４列のマトリクスを出力用ポート２０３（(m44)Transformed）から出力する関数（処理ロジック）もしくは動作・機能種別（Transform44()）が割り当てられたノードである。割り当てられた動作等は、ノード種別２０５としてノード名２００の下部に示されている。図２の例では、該ノード２０１は、変換に用いられる情報として別のノード２０６（FloastFCurve_1）から出力された値を入力用ポート２０４（Rot(f3)）で受け付け、該値を回転角としたマトリクスの変換（回転用マトリクスの適用）を行う。また、各ノードに設けられた入力用ポートについては、対応する関数の実行に際し、入力がない場合は各入力用ポートについて予め定められた初期値が使用されるものであってよい。例えばノード２０１の場合は、入力用ポート２０２と入力用ポート２０４は他のノードの出力用ポートと接続され、該他のノードの実行により得られた値が対応する変数に入力されるが、その他の入力用ポート（Scale(f3), Trans(f3), RotateType(e), SRTType(e)）に対応する変数については関数Transform44()の実行に際し、予め定められた各変数の初期値が使用される。
【００３３】
また図２において展開可能なアイコン２１１が付され、ノード種別２１２を有する例えばRC_WorldMatrix_1のようなノード２１３は、既に内部設計がなされた別の編集時グラフを１つのノードとして構成したものである。ノード２１３は、４行４列のワールドマトリクスを取得するノード種別RC_WorldMatrixとして設計されたグラフを１つのノードとして取り扱っており、内部構造（ノード群）は示されないが該ノード２１３の実行時には、内部のノード群に係る処理が行われて値の出力がなされる。このように所定の単位で設計されたノード群を１つのノードとして取り扱うことで、グラフ設計フィールド内の視認性を向上させることができる。
【００３４】
〈SpawnTrayの導入〉
基本的にリアルタイムレンダリングにおいて視覚効果が適用される場合、連続して描画されるフレームの各々について適用に係る演算が行われるが、フレーム時間内に視覚効果の適用に割ける演算リソースは限られている。上述したように、ノードには各々異なる処理が割り当てられておりメモリから解放可能となるタイミングが異なる。従って、通常リアルタイムレンダリングにおいてノードベースで視覚効果を実現しようとした場合、視覚効果について割り当てられたメモリ占有率に納まるよう、各ノードについてメモリ上に対応オブジェクトを保持すべきかまたは解放すべきかを監視することが必要となる。一方で、特に描画範囲に含まれるシーン内の描画オブジェクトの数が多い場合等、視覚効果として処理を行うべきノードの全体数が増大し得る状況下では、例えば全てのノードについて、各ノードによる処理結果を使用し得るノードが存在しなくなったかを監視するために演算リソースを割くことは現実的でない。またさらに、ノードオブジェクトの解放に伴い、該ノードオブジェクトにリンクオブジェクトを介して参照がなされていたリンク先のノードについても、解放するノードへの参照を削除する（リンクを切断する）必要がある。
【００３５】
このように、状況に応じて多数のノードオブジェクトが展開（インスタンス化）されうるリアルタイムレンダリングにおいてノードベースの視覚効果を実現するためには、ノードオブジェクトの解放管理に係る処理の演算量を低減する仕組みが必要となる。従って、本実施形態のグラフ編集アプリケーションでは、ノードベースで設計され、適用される視覚効果に係る演算を効率化させるために、SpawnTrayというノード群をグループ化する概念を導入する。
【００３６】
図２に示されるようにSpawnTray２２１は、複数のノード群を内部に有して定義される。SpawnTray２２１内には、同一のタイミングにおいて一括して解放してよいものとして判断されたノード群を配置することができ、視覚効果用データの生成時にはSpawnTray２２１に属するノード群を示す情報が含められる。例えば実行時（視覚効果の適用時）において、SpawnTray２２１の展開命令に係る制御フロー２２２が生じた場合（入力用ポート２２３（Create）への入力が生じた場合）、SpawnTray２２１内に含まれるノード群分の領域がメモリ１０３上に一括して確保され、SpawnTray２２１に含まれるノード群のノードオブジェクトがインスタンス化される。一方で解放は、SpawnTray２２１の展開命令に係る制御フロー２２４が生じた場合（入力用ポート２２５（Destroy）への入力が生じた場合）に一括して行われる。即ち、SpawnTray２２１内のノード群については制御フローに合わせてSpawnTray２２１内の全オブジェクトが一括して解放され、個々のノード間でのリンクの切断等に係る処理を実行部１０８は実行する必要がない。つまり、SpawnTray２２１が定義されてグループ化されているこれらのノードオブジェクトについては、実行部１０８は解放に係る管理処理をノードオブジェクトごとに行わず、例えばSpawnTray２２１からの出力値を使用するよう設計された不図示のノードオブジェクトについて、リンク切断に対応する処理のみを行えばよい。従って、SpawnTrayは下位層（内部）にノード群の情報を有するが、処理上は入出力ポートを有する１つのノードと同等に扱うことができる。
【００３７】
このようにすることで、実行時におけるノードオブジェクトの解放に係る処理（監視・管理、及び切断・解放等）の演算量を低減することができる。
【００３８】
また図２の例では、SpawnTray２２１（親トレイ）内にはさらにSpawnTray２２６（子トレイ）が配置されている。このような構造を用いることで、例えば解放のタイミングは親トレイ内の他のノード群と同一であってよいが、展開領域確保のタイミングを遅延させることを意図している、あるいは演算の関係等で遅延させることが可能であると判明しているノード群を、さらに細分化して子トレイにまとめることができる。これにより、より厳密にメモリ１０３の占有を制御することができる。
【００３９】
また、１つの視覚効果について定義するこのような編集時グラフも、他の編集時グラフにおいてノード２１３のように１つのノードとして配置可能であることを踏まえれば、１つのSpawnTrayとして扱うことができる。この場合、図２の編集時グラフは、入力用ポートとしてポート２３１（GraphOn）とポート２３２（GraphOff）を有するSpawnTrayとなる。
【００４０】
〈共通化可能な情報の分類〉
SpawnTrayを導入することにより解放管理に係る演算量の低減については説明したが、本実施形態のグラフ編集アプリケーションはさらに、視覚効果の適用を行う際に編集時グラフに含まれるノード、ポート、リンクや各種データを、上述した参照用グラフ及び実行時グラフのいずれとしてメモリ展開するかを、予め定義することができる。
【００４１】
上述したように、リアルタイムレンダリングでは視覚効果を適用し得る対象が動的に増減するため、例えば同様の視覚的態様（色味変化、適用テクスチャ）を示すが、挙動が各々異なって制御されるような、共通の視覚効果に係る多数の描画オブジェクトが生成されることがある。共通の視覚効果に係るグラフに対して異なる入力を与える、あるいは入力を与えるタイミングを異ならせることで、例えば多数の火花のパーティクル群を生成するような場合、単純に個々のパーティクルのインスタンスについて対象の視覚効果のグラフに含まれるオブジェクト（ノード、ポート、リンク）群や各ノードにおける処理で利用するデータをメモリ展開するのでは展開領域占有の問題だけでなく、演算量が増大する懸念がある。
【００４２】
一方で、１つの火花のパーティクルやその他の視覚効果に係る描画表現についてインスタンス化する必要がある情報の中には、このような描画表現を複数、同時並行して実現する場合に、１度のインスタンス化で共用できる所謂静的（static）な情報も存在する。例えば、所定の位置にオブジェクトを描画する動作を含む視覚効果では、
・該オブジェクトに適用するテクスチャデータ及びその展開に係る処理
・該オブジェクトの描画に係り適用される描画用プログラム（シェーダ等）
・常に同一の出力（初期値等を含む）を返すノードやポートのインスタンス化
・ノードの動作を規定する特定の関数オブジェクトのインスタンス化
・ノードに係るポート間の接続情報の規定
等の動作や処理は、同様の視覚効果を並行して複数適用する場合であっても、全ての適用処理について、１度インスタンス化されれば共用または参照することができ、十分である。即ち、１つの視覚効果が適用される複数の対象のインスタンスについて、インスタンスごとに変化しない視覚効果に係るデータは共用でき、インスタンスごとに変化する視覚効果に係るデータは動的に対応できるよう構成することが好ましい。
【００４３】
従って、本実施形態のグラフ編集アプリケーションでは、編集時グラフの設計において、配置するノード、ポート、ノードに対応する動作において展開される静的データ等の情報については、適用対象の数に依らず１度だけ参照用グラフとしてインスタンス化されればその後は共用できるよう、共通化可能であることを識別する識別情報を視覚効果用データの出力時に付与する。共通化可能であるかの識別は、例えば設計するユーザにより該当のノードやポート等に属性として設定された情報を基に判断されるものであってもよいし、視覚効果用データの出力時に出力部１０７が予め共通化可能であるものと定められた属性のノードやポートであるかの情報に基づいて判断を行うものであってもよい。
【００４４】
なお、本実施形態では、識別情報を付与することで視覚効果用データを使用する後述の視覚効果適用アプリケーションに共通化可能であるノードを知らしめる構成について説明するが、本発明の実施はこれに限られるものではない。例えば、グラフ編集アプリケーションと視覚効果適用アプリケーションの間で共通化可能なノード等の種別を予め共有するよう構成されている場合は、識別情報を付与する必要はない。
【００４５】
また、特に効率化する状況として、視覚効果を並行して複数適用する状況を説明したが、共通化可能な動作の定義はこれに限られるものではない。即ち、実行時において適用し得る状況が（異なるタイミングで）複数回生じうる動作のうち、１度インスタンス化されればその内容を共用できる動作については、共通化可能な動作としてよい。
【００４６】
〈ノード数の削減〉
さらに、本実施形態のグラフ編集アプリケーションでは、視覚効果用データの生成に係り、変換部１０６は編集時グラフに存在するノード数を低減させる処理を行う。ノード数を低減させる処理は、使用されていないノード等の所定の演算により不要であると判断可能なノードを除去する処理に加え、変換部１０６は予め定められたカテゴリの動作に対応する複数のノードを１つのノードに置換することでノード数を低減させる処理を行う。
【００４７】
以下、予め定められたカテゴリの動作に対応する複数のノードを１つの合成ノードに置換することでノード数を低減させる処理について図を用いて詳細を説明する。
【００４８】
予め定められたカテゴリの動作は、例えば四則演算等の簡易的な演算式や関数で表すことができる（以下、単に式化可能として言及する）動作であってよく、変換部１０６は対応する動作が式化可能であるか否かを編集時グラフ内の各ノードについて判断する。図３（ａ）に示されるように、例えば１つのSpawnTray内に
・２つの入力値を乗算して出力するノード３０１（Mul）
・２つの入力値に基づいて移動を行わせた後、移動後の位置の値を出力するノード３０２（Move）
・一方の入力値から他方の入力値を減算して出力するノード３０３（Sub）
・２つの入力値を加算して出力するノード３０４（Add）
の４つが配置された編集時グラフを想定する。このとき、例えばノード３０１、３０３及び３０４に対応する動作が式化可能として予め定められたカテゴリに属するノードであるとすると、変換部１０６は視覚効果用データの出力の指示を受けた際に、これらのノードを１つの合成ノードに変換する。以下、合成ノードへの変換手法の一態様について例示する。
【００４９】
まず変換部１０６は、図３（ｂ）に示されるように該３つのノード（対象ノード）が有するポートに対して以下のルールに従ったポート名（名称＋ナンバリング）を設定する。
１．対象ノード以外からの入力を受け付ける入力用ポートには「in」
２．少なくとも対象ノード以外への出力を行う出力用ポートには「out」
３．対象ノード間でのみ入出力を行う出力用ポートには「var」
４．対象ノード間でのみ入出力を行う入力用ポートには名称設定しない
該ルールに依れば、図３（ｂ）に示されるように対象ノードの各々には４つの入力用ポート（in1〜4）と３つの出力用ポート（out1〜2、val1）の７つのポート名が設定される。
【００５０】
次に変換部１０６は、対象ノードの各々を、動作に対応する関数と設定したポート名とを用いて式化する。図３（ｂ）の例では対象ノードの各々は２つの入力値を引数として、１つの値を出力する関数であり、各々
ノード３０１：Out1 = Mul(in1, in2)
ノード３０３：var1 = Sub(out1, in3)
ノード３０４：Out2 = Add(in4, var1)
と式化することができる。
【００５１】
そして変換部１０６は、式化に依られた対象ノードの式群をトポロジカルソートして整合性のある処理の順に並べ、合成ノードの動作を規定する。即ち、図３（ｂ）の例では合成ノードの動作を示す各式はトポロジカルソートにより、
Out1 = Mul(in1, in2), var1 = Sub(out1, in3), Out2 = Add(in4, var1)  …(1)
と最適化することができる。またこれに伴い３つの対象ノードは、inで示された入力用ポートとoutで示された出力用ポートを有する合成ノードに変換される。このとき変換部１０６は内部の処理上の変数としてのみ用いられるもので、合成ノードのポートとして設ける必要がないvar1については省略する。故に、図３（ａ）に示したSpawnTrayは、図３（ｃ）に示されるように式（１）の動作を行う合成ノード３０５とノード３０２の２つのノードのみで構成されるSpawnTrayに変換することができる。これにより、インスタンス化するノードの数が低減できるだけでなく、式化してまとめることでリンク先の参照等に要する処理を排除することが可能となり、結果的に視覚効果適用に係る全体の演算量及び演算時間を低減することができる。
【００５２】
なお、合成ノードについてまとめた式群は、所望の最適化レベルに応じてインタプリタやネイティブコード、あるいはシェーダプログラムとして視覚効果用データに含める、または別ファイルとして出力すればよい。最適化レベルの選択は、該視覚効果適用時の並行実行し得る処理やメモリリソースの使用状況、該視覚効果の実行頻度等を考慮して設計ユーザにより選択されるものであってよく、例えば変換時に変換部１０６がユーザの選択指示を受け付けるよう構成されてもよい。
【００５３】
本実施形態ではMoveが式化可能ではないものとして説明したが、図３を用いた説明はあくまでも例示であり、これに限定されるものではないことは理解されよう。また図３の例では四則演算を行う関数に対応するノードのみを対象ノードとしたが、式化において対象ノードには必ずしも定義された関数が割り当てられている必要はなく、ノードに対応する動作をノード名を用いた関数として形式的に表すことを式化として扱ってもよい。
【００５４】
また、図３の例ではSpawnTray内のノード群について合成ノードへの変換を説明したが、上述したようにSpawnTrayは同時解放を規定するものであるため、変換部１０６はSpawnTrayを跨いでリンクされたノード群の合成ノードへの変換は行わない。即ち、同時のタイミングで解放されないノード群は、合成ノードとしてしまうことで好ましいタイミングでの解放ができない、あるいは入力元や出力先が存在しない状況が生じうるため、変換部１０６はSpawnTray単位でこのような合成ノードへの変換処理を実行する。
【００５５】
《グラフ出力処理》
上述のような構成をもつ本実施形態のＰＣ１００において実行される、グラフ編集アプリケーションにおいて設計された編集時グラフから視覚効果用データを生成するグラフ出力処理について、図４のフローチャートを用いて具体的な処理を説明する。該フローチャートに対応する処理は、制御部１０１が、例えば記録媒体１０２に記録されている対応する処理プログラムを読み出し、メモリ１０３に展開して実行することにより実現することができる。なお、本グラフ出力処理は、例えばグラフ編集アプリケーションにおいて視覚効果用データの出力指示がなされた際に開始されるものとして説明する。
【００５６】
Ｓ４０１で、制御部１０１は、編集部１０５により生成された編集時グラフもしくは編集時グラフ群の情報を取得し、グラフに含まれるSpawnTrayを把握する。上述したようにSpawnTrayは１つの視覚効果に係る編集時グラフごとに、またさらにその内部に定義されるため、制御部１０１は含まれる全てのSpawnTrayについて、例えば下位層から順に把握する。
【００５７】
Ｓ４０２で、変換部１０６は、Ｓ４０１において把握されたSpawnTrayの情報を考慮し、SpawnTrayごとに式化可能なノードをまとめてノード数を削減する最適化処理を行う。本実施形態のグラフ編集アプリケーションでは、視覚効果の１単位として設計される編集時グラフ全体が１つのSpawnTrayとして扱われるため、変換部１０６は、少なくとも編集時グラフごとに式化可能なノード群があるか否かの判断を行う。故に、変換部１０６は、１つのSpawnTray内に式化可能であるとして予め定められたカテゴリのノードが２以上存在すると判断した場合に本ステップの最適化処理を行う。このとき、最適化処理の対象となる複数のノードは、上述したポート定義、関数化、トポロジカルソートを経た後、１つのノードに変換される。また該１つのノードに対応する動作の処理内容は、予め定められた形式のデータに変換される。
【００５８】
Ｓ４０３で、出力部１０７は、視覚効果用データの出力対象であるノード群（もしくはノードに関連付けられているデータやポート）のうちから、視覚効果の適用時に動作やデータを共用可能として定められているノード（もしくはデータやポート）に対して共通化可能であることを示す識別情報を付す。該識別情報は、上述したように１つの視覚効果の適用を並行してあるいは順次的に行う場合に、１度だけメモリ１０３への展開を行えばよい、動作や出力結果あるいはデータの共有が可能なノードである（もしくはデータを有する）ことを実行時に識別できるように付す情報である。
【００５９】
Ｓ４０４で、出力部１０７は、最適化処理後のノード群について、属するSpawnTrayの情報、各ノードの入力及び出力の少なくともいずれか用のポートについて入力される情報またはリンクされるノードの情報を視覚効果用データとして出力する。該情報は、後述する参照用グラフにおけるリンクオブジェクトのインスタンス化、及び実行時グラフにおける各ポートオブジェクトの設定に用いられる。
【００６０】
このようにすることで、以下の視覚効果適用アプリケーションにおける、ノードベースの視覚効果適用に係る処理を効率化可能な視覚効果用データを生成することができる。
【００６１】
《視覚効果適用アプリケーション》
次に、上述のグラフ出力処理により生成された視覚効果用データに基づく視覚効果の適用を含む、本実施形態の視覚効果適用アプリケーションについて説明する。なお、視覚効果適用アプリケーションは、リアルタイムレンダリングにより画面生成を行うものである。視覚効果適用アプリケーションは、例えばゲームアプリケーションのように、操作入力や時間経過等により生じた変化を予め定められた応答時間内に反映した画面を、所定の時間間隔で描画して出力する。
【００６２】
通常、リアルタイムレンダリングは出力する画面において動的な変化要素があるコンテンツに利用される。特に、近年では現実世界であるかのように知覚されうる、美麗なグラフィックスやキャラクタや物体の振る舞いを提示しつつ、よりユーザにとって自由度の高い世界を体験可能に提供する、所謂オープンワールドを実現するコンテンツにおいて、リアルタイムレンダリングは必須である。またこのようなコンテンツでは、リアルタイムレンダリングに際し、操作入力に基づく各種変動要素の状態を更新する処理、ＡＩ等のキャラクタの意思／行動決定に係る処理、照明演算等の美麗なグラフィックスとするための様々な処理を描画処理に先立って、あるいは描画処理と並行して行う必要がある。視覚効果の適用に係る処理も同様であり、制御部１０１は、これらの並行実行する処理に対して演算リソースやメモリリソースを適切に分配し、毎フレームの画面生成を実現する必要がある。
【００６３】
そこで、本実施形態の視覚効果適用アプリケーションでは、演算に要する時間を低減すべく、視覚効果用データに基づくノードベースの視覚効果適用を実現する後述のグラフ適用処理において、データのインスタンス化に係る以下の仕組みを用いる。
【００６４】
〈参照用グラフ〉
参照用グラフは、グラフ編集アプリケーションにおいて設計された編集時グラフを、視覚効果用データ出力の際の最適化処理適用後の状態で、視覚効果適用アプリケーションにおいて使用可能なように再現（メモリ展開）した情報である。
【００６５】
グラフ編集アプリケーションについて上述したように、実行中に複数回適用されうる視覚効果は、都度対応するグラフのノード群やその他のデータを展開すれば、共通化可能な動作やデータを複数インスタンス化してしまうことにつながり、割り当てられたメモリ領域の逼迫を招きうる。従って、本実施形態の視覚効果適用アプリケーションでは、リアルタイムレンダリング中における視覚効果適用に係るデータの展開を効率化するため、描画対象のシーンについての描画に先立って必要となりうる各種データを展開する際に、視覚効果用データ中の該シーンで生じうる視覚効果のグラフに係る全ての情報（ノード、ポート、リンク及び対応する動作を規定する関数のオブジェクト、動作において使用されるデータや初期値等）を参照用グラフとしてメモリ１０３に展開する。
【００６６】
参照用グラフは、その視覚効果の適用が画面生成に係る描画処理において発生するか否かに関わらず、図５（ａ）に示されるように変換部１０６による変換後の編集時グラフと同様のノード群及びリンク関係を再現する形で展開される。より詳しくは、視覚効果用データに含まれる１つのグラフについて、対応するメモリ領域の確保が行われた後、例えば次のような手順で該グラフに係る参照用グラフがメモリ１０３に展開されてよい。
【００６７】
まず対象のグラフに含まれるすべてのノードの各々について、ノードオブジェクトと各ノードオブジェクトが有する入出力ポートに係るポートオブジェクトがインスタンス化される。参照用グラフに係るノードオブジェクトのインスタンス化は、対応するノードの処理ロジックを規定した関数オブジェクト（静的なデータの展開をインスタンス化動作に含んでよい）のインスタンス化を含む。ポートオブジェクトは、少なくとも対応する関数オブジェクトのインスタンス化により初期値が割り当てられる変数に対応付けられている。なお、関数オブジェクトに係る関数において定義される入力（宣言される変数や定数）は、必ずしも全てが上記グラフ編集アプリケーションにおいて他のノードや呼び出し元のプロセスから入力が可能なように入力用ポートとして規定されるものである必要はない。即ち、各ノードについて対応付けられた関数は入力として、
・入力用ポートに対応する値が代入（情報が格納）される変数
・入力用ポートとしては設けないが、自身で設定した初期値を設定する、または外部の関数やプロセスにおいて参照可能に宣言された所定の変数や定数の値を参照する変数
の２種類を有し得る。これらの変数はインスタンス化時に予め定められた初期値や参照先の情報が割り当てられる。
【００６８】
次に、インスタンス化されたポートオブジェクトについて、視覚効果用データでリンクが定義されている場合は、ポートオブジェクト間をリンクするリンクオブジェクトをインスタンス化する。リンクオブジェクトは、別のノードの出力用ポートから、またはグラフに係る視覚効果に係る処理の呼び出し元のプロセスから入力される値が入力される、既にインスタンス化した入力用ポートに係るポートオブジェクトに対して入力元の情報を定義する。即ち、リンクオブジェクトにより、入力用ポートを有するノードに係る関数の実行において、入力用ポートに対応する変数に代入する値の参照先の情報が定義される。
【００６９】
またリンクオブジェクトは、例えば１つのノードに対応する動作が行われた際に、出力用ポートの値が格納されるメモリアドレスを別のノードの入力用ポートにおいて参照する、または出力用ポートの参照先が存在することを示す情報を関連付ける。これは、既にコーディングされたプログラムを実行する場合と異なり、ノードベースで設計された視覚効果の適用においては、ノードごとに定められた動作を動的に実行していく必要があるため、参照先のアドレスが確定しているわけではなく、都度ノードのポートごとに設定（リンクしていることの情報を設定）する必要があることによる。従って、ノード間の接続（参照アドレスの設定）や参照先が存在する、あるいは被参照先であることを示す情報を参照用グラフでは規定する。このようにすることで、ノードベースで設計されたノード群に基づく専用ネイティブコードやシェーダ等を生成せずとも、ノードごとの動作を連携して行わせて、デザイナの意図する視覚効果を実現することができるようになる。
【００７０】
なお、参照用グラフは、例えば「ローディング中」等の実際の画面描画処理が行われるよりも前に展開が行われるものであるため、実行時においてその視覚効果が発生するか、同様の視覚効果を適用する対象がいくつ存在するか等は考慮せずに展開が行われる。故に、使用する静的データが共通である視覚効果について１つの参照用グラフがメモリ１０３に展開される。
【００７１】
〈実行時グラフ〉
一方、画面描画処理の開始後の動的変化を考慮して発生させる視覚効果を決定する場合、実行部１０８は、視覚効果用データをうちの該発生させる視覚効果に対応するデータを実行時グラフとしてメモリ１０３に展開する。実行時グラフは、概略的には図５（ｂ）に示されるように、ノード間のリンク関係の情報を含まず展開される。また実行中に複数回発生し得る視覚効果の適用につき使用する静的なデータ等については、既に参照用グラフとして展開済みのものを利用するよう構成され、実行時グラフは変換後の編集時グラフを完全には再現する構成とはならない。実行時グラフは、展開済みの参照用グラフに基づいて後述の処理を適用することで、該当の視覚効果を実現することが可能となる。
【００７２】
本実施形態では視覚効果用データに含まれる各グラフについて、該グラフについて使用される情報を実行時グラフとしてデータ展開する必要があるか否かは、視覚効果用データにおいて上述した共通化可能な動作やデータを識別する識別情報が付されていないか否かにより判断されるものとして説明する。しかしながら、上述したように予め実行時グラフのインスタンス化時にデータ展開するデータが定められている場合は、展開有無の判断は識別情報に基づいてなされなくてよい。また静的データ等は全て参照用グラフとして展開済みのものを用いるものとして、実行時グラフではいずれの静的データの展開も行わないよう構成してもよい。
【００７３】
図５（ｂ）に示されるように、実行時グラフの展開は参照用グラフとは異なり、対象のグラフ内のノードについてポートオブジェクト及びリンクオブジェクトのインスタンス化を含まずに行われる。しかしながら、このようにいずれのリンクの状態も定義しない状態では視覚効果の適用ができない。
【００７４】
故に、本実施形態の視覚効果適用アプリケーションでは、視覚効果の適用が可能なように、実行時グラフの各ノード間のリンクを処理するのではなく、実行時グラフに含まれるノードの入力（上記２種類の入力）のうちの入力用ポートに対応する変数に、参照先のデータへの参照を割り当てる（バインドする）ことで実現する。具体的には実行部１０８は、例えば実行時グラフに含まれる各ノードに対応付けられた関数に伴う入力情報取得処理（実行時グラフ固有の、該関数が有する全ての種類の入力（変数）について値を取得する処理）の実行時に処理されるよう、
・同一の視覚効果に係る参照用グラフの対応する入力用ポートに対して入力される値を返す関数
・入力用ポートに係るリンク先のノードの出力を返す関数
のいずれかを割り当てる（バインドする）。なお、入力情報取得処理では、リンクが定義されていない入力用ポートに対応する変数にはその初期値を返す関数をバインドし、入力用ポートが設けられていない入力に係る変数には初期値や参照先の変数の値を返す関数をバインドする。
【００７５】
一方で、実行時グラフに含まれるノードの出力（出力用ポートに対応）には、該ノードの入力に係る各種変数を用いて表現されている関数がバインドされる。なお、１つのノードについて上記入力情報取得処理の対象となる入力の把握は、先に出力に係る関数のバインドがなされたことに応じて、該関数を基になされる。
【００７６】
例えば図５（ａ）の参照用グラフでは、ノード５０１には、入力用ポート５０２及び５０３に対応する変数を入力に含む関数Moveが割り当てられており、該関数の戻り値が出力用ポート５０４から出力される。一方、図３を用いて説明したノード３０１、３０３及び３０４の合成で生成されたノード５０５には、入力用ポート５０６及び５０７に対応する変数を入力に含む関数Mulが処理ロジックにあり、該関数の戻り値が出力用ポート５０８から出力されるとともに、処理ロジックのうちの関数Subの変数の入力としても取得される。また関数Subは入力用ポート５０９に対応する変数を入力に含み、該関数の戻り値は処理ロジックのうちの関数Addの変数の入力としても取得される。一方で、関数Addは入力用ポート５１０に対応する変数を入力に含み、該関数の戻り値が出力用ポート５１１から出力される。
【００７７】
このような構造を有する参照用グラフに対応して生成される図５（ｂ）に示される実行時グラフでは、まずノード５０１及び５０５に対応するノード（オブジェクト）５２１及び５２２のノードオブジェクトが展開された後、出力５２３、５２４、５２５に対し、それぞれ出力用ポート５０４、５０８、５１１の戻り値を出力する関数オブジェクトがバインドされる。即ち、出力５２３には関数Move、出力５２４には関数Mul、出力５２５にはトポロジカルソートされた関数Sub及びAddのオブジェクトが、参照用グラフを参照してバインドされる。
【００７８】
バインドされたそれぞれの関数オブジェクトは、その実行にあたり必要な入力が宣言されており、各ノードについて入力情報取得処理がなされた場合には必要な情報が取得されるよう、各ノードの入力２２６及び２２７に含まれる全ての変数について、入力情報取得処理の実行時に実行される関数オブジェクトがバインドされる。例えば、図５（ｂ）においてノード５２１の出力５２３にバインドされた関数Moveを参照すると、入力５２６は入力用ポート５０２及び５０３に対応する変数を含んで構成される。このうち、入力用ポート５０２に対応する変数には参照用グラフにおいてリンクが定義されていないため、該変数には参照用グラフにおいてインスタンス化された該変数の初期値を返す関数オブジェクトが入力５２６の該変数にバインドされる。一方で、入力用ポート５０３に対応する変数には参照用グラフにおいてリンクが定義されているため、リンク先である出力用ポート５０８に対応する出力５２４にバインドされた関数オブジェクト、即ち関数Mulのオブジェクトが入力５２６の該変数にバインドされる。
【００７９】
また図５（ｂ）においてノード５２２の出力５２４及び５２５にバインドされた関数オブジェクトを参照し、入力５２７に含まれる入力用ポート５０６、５０７、５０９及び５１０に対応する変数について同様に、入力情報取得処理の実行時に実行される関数オブジェクトがバインドされる。このうち、入力用ポート５０６、５０７及び５０９に対応する変数には、参照用グラフにおいてリンクが定義されているが、そのリンク先は呼び出し側のプロセスであるため、該プロセスにより実行時グラフに入力される値を返す関数が、入力５２７の対応する変数の各々にバインドされる。一方で、入力用ポート５１０に対応する変数には参照用グラフにおいてノード５０１の出力用ポート５０４へのリンクが定義されているため、出力用ポート５０４に対応する出力５２３にバインドされた関数オブジェクト、即ち関数Moveのオブジェクトが入力５２７の該変数にバインドされる。
【００８０】
このようにすることで、通常ノードベースで設計された視覚効果をオフラインレンダリングにて適用する場合の以下の処理
１．各ノードに対応する展開領域の確保、必要なデータ（変数、処理ロジック含む）及びノードオブジェクトのインスタンス化
２．対応するポートオブジェクトのインスタンス化
３．入力用ポートに係るポートオブジェクトについて、リンク先に存在するノードのノードオブジェクトを探索し、該ノードの出力用ポートの値が格納されるアドレスの情報の関連付け
４．３においてリンク先であると検出されたノードの出力用ポートに係るポートオブジェクトについて、リンク関係にあるノードオブジェクトを関連付け（解放可否の判断用）
５．ノードの状態を監視、解放時期にオブジェクト解放及びリンク切断処理
のうち、ポートオブジェクトのインスタンス化、リンク先の探索やリンク接続の処理、及び一部の切断処理を省略することが可能となる。特に、このようなリンクに係る処理は、視覚効果の適用対象のオブジェクトが多数存在する場合において演算リソース及びメモリリソースを消費しうるため、本実施形態のように参照用グラフに共通化可能な動作・データやリンク用の情報をまとめ、実行時グラフでは不要なデータ展開やリンクオブジェクトのインスタンス化を省略可能とし、効率化を行う。
【００８１】
《グラフ適用処理》
以下、本実施形態のＰＣ１００において実行される、視覚効果適用アプリケーションにおける描画処理においてノードベースでの視覚効果の適用を実現するグラフ適用処理について、図６のフローチャートを用いて具体的な処理を説明する。該フローチャートに対応する処理は、制御部１０１が、例えば記録媒体１０２に記録されている対応する処理プログラムを読み出し、メモリ１０３に展開して実行することにより実現することができる。なお、本グラフ適用処理は、ノードベースの視覚効果が適用された画面の描画処理を含む視覚効果適用アプリケーションの実行が開始された際に開始されるものとして説明する。
【００８２】
Ｓ６０１で、制御部１０１は、視覚効果適用アプリケーションにおける描画処理に先立って、描画対象シーンに含まれる描画オブジェクトに関連する視覚効果について、視覚効果用データから該当の情報を読み出し、メモリ１０３に展開する。このとき展開される視覚効果用データのうちの該当の情報は、視覚効果用データにおいて共通化可能な動作を示す識別情報が付されたノードに係るノードオブジェクト、及びノード間のリンクを示すリンクオブジェクトを含み、参照用グラフとして展開される。
【００８３】
Ｓ６０２で、実行部１０８は制御部１０１の制御の下、視覚効果を適用する状況が生じたか否かを判断する。実行部１０８は、視覚効果を適用する状況が生じたと判断した場合は処理をＳ６０３に移し、生じていないと判断した場合は処理をＳ６０６に移す。
【００８４】
Ｓ６０３で、実行部１０８は、適用する視覚効果に係る実行時グラフを視覚効果用データに基づいてメモリ１０３に展開する。具体的には実行部１０８は、対応する視覚効果に含まれるノード群の情報に従ってメモリ１０３に展開領域を確保し、実行時グラフに含まれるノードに係るノードオブジェクト及びそれらに付随するポートオブジェクトを展開する。上述したように実行時グラフは、リンクオブジェクトを含まず、本ステップの時点では視覚効果に係る処理を実行することはできない状態でメモリ１０３に展開される。
【００８５】
なお、本ステップにおいて展開領域の確保及び展開は、適用する視覚効果について定められたSpawnTrayごとに行われる。実行部１０８は、SpawnTrayごとに定められた展開時期を把握し、展開を行うタイミングのSpawnTrayについて該SpawnTray内のノード群に応じた展開領域をメモリ１０３に確保し、展開する。このとき展開されたSpawnTrayごとに解放時期を管理するよう、実行部１０８は処理を行う。
【００８６】
Ｓ６０４で、実行部１０８は、展開した実行時グラフに対応する参照用グラフを参照し、実行時グラフに含まれる各ノードの入力及び出力について、対応する関数オブジェクトをバインドする。なお、図５を用いて上述した関数オブジェクトバインドに関する説明では、各ノードの入力または出力のうち、入力用ポートまたは出力用ポートに対応する変数等について関数オブジェクトを割り当てることを説明したが、入力情報取得処理において入力値を取得するためにバインドされる関数オブジェクトは、これに限られない。即ち、上述したように各ノードの処理ロジックに対応する関数にはポートに対応しない変数も宣言されるため、これらについて入力用情報取得処理において初期値や定数、参照先に代入されている値を返す関数オブジェクトをバインドすることも、本ステップの処理に含まれていてよい。このようにすることで、リンクオブジェクトを生成することなく、実行時グラフ単体で、適用する視覚効果に係るノード群の処理を行うことが可能となる。
【００８７】
Ｓ６０５で、実行部１０８は、適用する視覚効果に係るＳ６０４において展開した実行時グラフの処理を実行し、視覚効果の適用を開始する。実行時グラフの処理は、グラフ内の最後段の出力にバインドされた関数オブジェクトを実行することで、該実行の過程でグラフ内の必要となる変数の値を取得する入力情報取得処理と、ノードの処理ロジックに係る関数ロジックが適宜実行され、出力を行う。即ち、結果として実行時グラフは、関数オブジェクトのバインドによって、グラフ全体の処理を実行時グラフに係る１つの関数のように実行できる。
【００８８】
なお、視覚効果は通常１フレーム（１回の呼び出し）で完了するものではないため、複数のフレームに渡って結果出力するよう実行されるが、入力情報取得処理は必ずしも毎回の出力に係り実行される必要はなく、予め定められた間隔で実行、参照値の変更が生じた場合のみ実行等、適宜実行が制御されるものであってよい。入力情報取得処理に係る実行の制御は、グラフ編集アプリケーションにおいてユーザにより定義可能に構成されるものであってもよいし、予めノードごとに定められるものであってもよい。
【００８９】
Ｓ６０６で、実行部１０８は、解放を行うSpawnTrayに係るオブジェクトが存在するか否か判断する。実行部１０８は、解放を行うSpawnTrayに係るオブジェクトが存在すると判断した場合は処理をＳ６０６に移し、存在しないと判断した場合は処理をＳ６０２に戻す。
【００９０】
Ｓ６０７で、実行部１０８は、解放を行うSpawnTrayに係るオブジェクトをメモリ１０３から解放させる。即ち、実行部１０８は、解放を行うSpawnTrayに含まれるノード群のオブジェクトを、一括してメモリ１０３から解放させる。またSpawnTrayに係るオブジェクトの出力用ポートに係る関数オブジェクトがバインドされた入力用ポートのポートオブジェクトについては、例えばバインドを解消する、もしくは予め定められた値を返す関数オブジェクトに変更する等の処理を実行部１０８が行えばよい。
【００９１】
以上説明したように、本実施形態の視覚効果用データの生成及び該データを使用した視覚効果の適用の仕組みを用いることで、必要な演算リソース及びメモリリソースを低減しつつ、リアルタイムレンダリングにおいてノードベースで設計された視覚効果の適用を好適に実現することができる。
【００９２】
［その他の実施形態］
本発明は上記実施の形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。また本発明に係る情報処理装置は、１以上のコンピュータを該情報処理装置として機能させるプログラムによっても実現可能である。該プログラムは、コンピュータが読み取り可能な記録媒体に記録されることにより、あるいは電気通信回線を通じて、提供／配布することができる。
【符号の説明】
【００９３】
１０１：制御部、１０２：記録媒体、１０３：メモリ、１０４：ノード情報ＤＢ、１０５：編集部、１０６：変換部、１０７：出力部、１０８：実行部、１０９：描画部、１１０：操作入力部、１１１：表示部
【図１】
2017045335.tif 000003
【図２】
2017045335.tif 000004
【図３】
2017045335.tif 000005
【図４】
2017045335.tif 000006
【図５】
2017045335.tif 000007
【図６】
2017045335.tif 000008