本発明の主題は、法定要件を満たすために本明細書における特異性を用いて説明する。しかしながら、説明自体は、本特許の範囲を制限することを意図するものではない。むしろ、本発明者等は、他の現在または今後の技術に関連して本明細書で説明されたものと同様の様々なステップまたはステップの組み合わせを含めるために、請求された主題が他の方法でも具体化可能であることを企図している。さらに、本明細書における「ステップ」および/または「ブロック」という用語は、採用された方法の様々な要素を暗示するために使用することが可能であるが、これらの用語は、個々のステップの順序が明示的に記載されていない限り、および記載されている場合を除いて、本明細書で開示された様々なステップの中またはステップ間の任意の特定順序を暗示するものと解釈されるべきではない。
本発明の諸実施形態は、エフェクトグラフを利用してデジタルイメージデータを処理するためのシステムおよび方法を提供する。以上、本発明の概要について簡単に説明したが、以下では、本発明に関する例示的動作環境について説明する。
図面全体、特に最初に図1を参照すると、様々な図において、同じ参照番号は同じ構成要素を識別しており、本発明を実施するための例示的動作環境が示され、コンピューティングシステム環境100全体として指定されている。コンピューティングシステム環境100は、好適なコンピューティング環境の一例に過ぎず、本発明の用途または機能の範囲に関していかなる制限をも示唆することを意図しない。また、コンピューティング環境100は、例示的動作環境100に示されたいかなる構成要素または構成要素の組み合わせに関するいかなる依存性または要件を有するものとしても、解釈されるべきではない。
本発明は、多数の他の汎用または特定用途向けのコンピューティングシステム環境または構成と共に、動作可能である。本発明と共に使用するのに好適な可能性のある良く知られたコンピューティングシステム、環境、および/または構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、プログラム可能な大衆消費者向け電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、前述のシステムまたはデバイスのいずれかを含む分散型コンピューティング環境、などが含まれるが、これらに限定されるものではない。
本発明について、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令との一般的な関連において説明する。一般に、プログラムモジュールは、特定のタスクを実行するか、または特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。本発明は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散コンピューティング環境でも実施可能である。分散コンピューティング環境では、プログラムモジュールを、メモリ記憶デバイスを含む、ローカルおよびリモートの両方のコンピュータ記憶媒体内に配置することができる。
図1を参照すると、本発明を実施するための例示的システムは、コンピュータ110の形の汎用コンピューティングデバイスを含む。コンピュータ110の構成要素は、処理ユニット120、システムメモリ130、および、システムメモリを含む様々なシステム構成要素を処理ユニット120に結合するシステムバス121を含むが、これらに限定されることはない。システムバス121は、メモリバスまたはメモリコントローラ、周辺バス、および、様々なバスアーキテクチャのうちのいずれかを使用するローカルバスを含む、いくつかのタイプのバス構造のうちのいずれかとすることができる。限定ではなく、例を挙げると、こうしたアーキテクチャは、Industry Standard Architecture(ISA)バス、Micro Channel Architecture(MCA)バス、拡張ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカルバス、および、メザニンバスとしても知られるPeripheral Component Interconnect(PCI)バスを含む。
コンピュータ110は、通常、様々なコンピュータ読み取り可能媒体を含む。コンピュータ読み取り可能媒体は、コンピュータ110がアクセス可能な任意の使用可能媒体とすることが可能であり、揮発性および不揮発性の媒体、取り外し可能および取り外し不能の媒体の、両方を含む。限定ではなく、例を挙げると、コンピュータ読み取り可能媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するための任意の方法または技術で実施された、揮発性および不揮発性、取り外し可能または取り外し不能の、両方の媒体を含むことができる。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル汎用ディスク(DVD)または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは、所望の情報を格納するために使用可能であり、コンピュータ110がアクセス可能な、任意の他の媒体を含むが、これらに限定されることはない。通信媒体は、通常、搬送波または他の移送メカニズムなどの変調データ信号内の、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、または他のデータを具体化し、任意の情報送達媒体を含む。「変調データ信号」という用語は、その特徴の1つまたは複数が信号内の情報を符号化する方法で設定または変更された、信号を意味する。限定ではなく、例を挙げると、通信媒体は、有線ネットワークまたは直接配線式接続などの有線媒体、ならびに、音波、RF、赤外線、および他の無線媒体などの無線媒体を含む。前述の任意の組み合わせも、コンピュータ読み取り可能媒体の範囲内に含まれるものとする。
システムメモリ130は、読み取り専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132などの、揮発性および/または不揮発性メモリの形のコンピュータ記憶媒体を含む。起動時などにコンピュータ110内の要素間で情報を転送する際に役立つ基本ルーチンを含む、基本入力/出力システム(BIOS)133が、通常、ROM 131に格納される。RAM 132は、通常、処理ユニット120が即時アクセス可能、および/または処理ユニット120によって現在動作中の、データおよび/またはプログラムモジュールを含む。限定ではなく、例を挙げると、図1は、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137を示す。
コンピュータ110は、他の取り外し可能/取り外し不能、揮発性/不揮発性コンピュータ記憶媒体も含むことができる。単なる例として、図1は、取り外し不能不揮発性磁気媒体からの読み取りまたはこれへの書き込みを行うハードディスクドライブ141と、取り外し可能不揮発性磁気ディスク152からの読み取りまたはこれへの書き込みを行う磁気ディスクドライブ151と、CD ROMまたは他の光媒体などの取り外し可能不揮発性光ディスク156からの読み取りまたはこれへの書き込みを行う光ディスクドライブ155と、を示す。例示的オペレーティング環境で使用可能な他の取り外し可能/取り外し不能、揮発性/不揮発性コンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、デジタル汎用ディスク(DVD)、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどを含むが、これらに限定されることはない。ハードディスクドライブ141は、通常、インターフェース140などの取り外し不能メモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、通常、インターフェース150などの取り外し可能メモリインターフェースによってシステムバス121に接続される。
前述の、および図1に示された、ドライブおよびそれらの関連付けられたコンピュータ記憶媒体は、コンピュータ110に関するコンピュータ読み取り可能命令、データ構造、プログラムモジュール、および他のデータに、記憶域を提供する。たとえば図1では、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147を格納しているものとして示される。これらの構成要素は、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137と同じであるか、または異なるかの、いずれかが可能であることに留意されたい。オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147には、最低でも、これらが異なるコピーであることを示すために、ここでは異なる番号が与えられている。ユーザは、キーボード162、および、一般にはマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス161などの、入力デバイスを介して、コンピュータ110にコマンドおよび情報を入力することができる。他の入力デバイス(図示せず)は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナ、などを含むことができる。これらおよび他の入力デバイスは、しばしば、システムバスに結合されたユーザ入力インターフェース160を介して処理ユニット120に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの他のインターフェースおよびバス構造によって接続することも可能である。モニタ191または他のタイプのディスプレイデバイスも、ビデオインターフェース190などのインターフェースを介して、システムバス121に接続される。コンピュータは、モニタ191に加えて、出力周辺インターフェース195を介して接続可能な、スピーカ197およびプリンタ196などの他の周辺出力デバイスを含むこともできる。
コンピュータ110は、リモートコンピュータ180などの1つまたは複数のリモートコンピュータへの論理接続を使用する、ネットワーク化環境で動作可能である。リモートコンピュータ180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、または他の共通ネットワークノードとすることが可能であり、図1にはメモリストレージデバイス181のみが示されているが、通常は、コンピュータ110に関して上記で述べた要素のうちの多くまたはすべてを含む。図1に示された論理接続は、ローカルエリアネットワーク(LAN)171およびワイドエリアネットワーク(WAN)173を含むが、他のネットワークを含むこともできる。こうしたネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットで一般的である。
LANネットワーキング環境で使用される場合、コンピュータ110は、ネットワークインターフェースまたはアダプタ170を介してLAN 171に接続される。WANネットワーキング環境で使用される場合、コンピュータ110は、通常、モデム172、または、インターネットなどのWAN173を介して通信を確立するための他の手段を含む。モデム172は内蔵型または外付けとすることが可能であり、ネットワークインターフェース170または他の適切なメカニズムを介して、システムバス121に接続することができる。ネットワーク化環境では、コンピュータ110に関して示されたプログラムモジュール、またはその一部を、リモートメモリストレージデバイスに格納することができる。限定ではなく、例を挙げると、図1は、リモートアプリケーションプログラム185を、メモリデバイス181上に常駐しているものとして示す。図示されたネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段を使用することができることが理解されよう。
コンピュータ110の多くの他の内部構成要素は図示されていないが、当業者であれば、こうした構成要素および相互接続が周知であることを理解されよう。したがって、コンピュータ110の内部構造に関する追加の細部については、本発明に関連して開示する必要がない。
コンピュータ110の電源がオンになるかまたはリセットされた場合、ROM 131に格納されたBIOS 133は、オペレーティングシステムまたはその必要部分をハードディスクドライブ141からRAM 132にロードするよう、処理ユニット120に命じる。オペレーティングシステム144によって指定されたオペレーティングシステムのコピーされた部分が、RAM 132にロードされると、処理ユニット120はオペレーティングシステムコードを実行し、オペレーティングシステム134のユーザインターフェースに関連付けられた視覚要素がモニタ191上に表示されることになる。通常、アプリケーションプログラム145がユーザによってオープンされると、プログラムコードおよび関連データがハードディスクドライブ141から読み取られ、必要部分がRAM 132にコピーされるが、このコピーされた部分は、本明細書では参照番号135によって表される。
前述のように、本発明の諸実施形態は、デジタルイメージ処理においてビデオカードまたはGPUの加速機能を利用するためのシステムおよび方法を提供する。こうした方法およびシステムは、たとえば図1のビデオインターフェース190を利用することができる。当業者であれば、本明細書で利用される「デジタルイメージ」という用語は、静的および/または動的なデジタルイメージを含む任意のデジタルイメージデータを言い表すこと、ならびに、そのいずれかおよびすべての組み合わせまたは変形が本発明の範囲内にあるものと企図されることを、理解されよう。本明細書で説明されるシステムおよび方法を利用すると、加速されたペースで、すなわちCPUがそれ自体で実行できる速度よりも速く、ピクセルデータを様々な方法で変形することができる。
加えて、本発明の諸実施形態は、非破壊的編集をGPU加速と統合する。本明細書で使用される「非破壊的編集」または「非破壊的処理」という用語は、レンダリングが要求されるイメージデータのみが要求時にレンダリングされることになる、すなわち、データを中間ステップに平坦化または保存することのない、編集(または処理)を言い表す。言い換えれば、レンダリングは、イメージがレンダリングされる場合は必ず、変形されていない最初にロードされたイメージデータから、オンデマンドで実施される。
従来のアプリケーションでは、程度の差は様々であるがCPU処理と組み合わせた非破壊的編集が試行された。しかしながら、CPU処理が十分に低速である場合、性能は、その当時は一般的であった相対的に小さなイメージでの平坦化されたモデルの性能に合わせられないことが、完全には理解されていなかった。しかしながら最近では、非常に大規模な(メガピクセル)写真イメージの人気が高まっており、非破壊的編集モデルがより魅力的になっている。
本発明の諸実施形態によって企図されるように、GPUを非破壊的編集と組み合わせて利用することにより、イメージ処理の性能は、従来のCPUベースの平坦化モデルに比べて非常にしばしば桁違いに高いものになる。実際のところ、GPUのメモリ占有スペースは相対的に小さく(平坦化はメモリをかなり多用する)、GPUからCPUメモリへイメージデータを読み取るための帯域幅が限られているため、平坦化モデルは、GPU実施に適していない。
GPUと組み合わせた非破壊的編集によって、レンダリングに必要なビットのみの、オンデマンドでのGPUへのローディングが可能になる。したがって、編集のたびに元のピクセルすべてがフル解像度で処理されることを確認する必要がなくなる。
本発明の諸実施形態に従った方法およびシステムは、GPU加速機能をCPUデジタルイメージ処理モデルに統合する。すなわち、GPUは、単なる特殊な機能などとして周辺に提供されるとは対照的に、デジタルイメージ処理モデルアーキテクチャに統合される。この場合、デジタルイメージ処理の作業を行っているユーザ(たとえばプログラマまたは開発者)が、長所または機能がターゲットデバイスと共にある2つのモダリティを交互に用いることができる、たとえば、CPU処理またはGPU処理のいずれかを単独で選択する必要がないように、CPUおよびGPU処理は一体化される。
システムアーキテクチャに統合される一方で、GPUの使用はオプション構成要素として提供されることに留意されたい。したがって、レンダリングデバイスがビデオカードの機能を含む場合、システムはその加速機能を、必要に応じてまたは所望に応じて呼び出すことができる。しかしながら、システムがビデオカードの機能を含まない場合も、依然としてデジタルイメージ処理に利用することができる。
本発明の方法およびシステムは、エフェクトグラフを作成するため、および、GPU、CPU、またはこの2つの何らかの組み合わせを使用してこれを連結するための機能を提供する。本発明の諸実施形態に従ったデジタルイメージ処理モデルアーキテクチャは、本明細書ではエフェクトと呼ばれる要素からなる。本明細書で使用されるエフェクトという用語は、基本的なイメージ処理クラスである。すなわち、エフェクトは基本的にピクセル演算子である。それらはバッファおよびピクセルデータを取り込み、データを操作し、修正されたピクセルを出力する。たとえば、鮮明化エフェクトはイメージピクセルを取り込み、そのピクセル縁部を鮮明にし、取り込んだイメージピクセルよりも鮮明化されたイメージを出力する。他の例では、露光エフェクトはイメージピクセルデータを取り込み、このピクセルの色バランスを調節し、取り込んだものから修正された色バランスを有するイメージを出力する。したがって、エフェクトの主な機能はピクセルを処理することである。
様々なイメージ処理アルゴリズムを実施するために、たとえばマスキング、混合、回転などの、異なるエフェクトを定義することができる。以下でより完全に説明するように、ユーザは、所望の結果を達成するために、事前に定義されたエフェクトをまとめて連結することができる。所望であれば、ユーザは、関心のあるイメージ処理アルゴリズムを実施するために新しいエフェクトを定義することもできる。エフェクトは、任意数の入力イメージを処理し、任意数の出力イメージを生成することができる。入力および出力の数は構築時に決定され、エフェクトを再作成することなく変更することはできない。各入力または出力の意味は、エフェクト自体によって定義される。ほとんどの場合、この意味は順序に依存する。
単なる例として挙げると、図2は、3つの入力および2つの出力を有する混合エフェクトを示す概略図である。この特定の混合エフェクトは、その第3の入力(入力2)に与えられるマスクによって変調された、その最初の2つの入力(入力0および入力1)を混合する。この例では、第1の出力(出力0)がカラーイメージを生成し、第2の出力(出力1)がグレーの陰影でイメージを生成する。多くのエフェクトは1つの出力のみを生成する。
ある意味では、各エフェクトが互いに連結する前に何を実行するかをユーザが理解しなければならないという点で、エフェクトは集積回路のような働きをする。集積回路と同様、互いに連結されたエフェクトの集合は、各部分の合計を超える複雑な結果を達成することができる。
エフェクトは互いに連結されると、エフェクトグラフを形成する。本明細書で使用されるエフェクトグラフという用語は、有向非巡回グラフ(DAG)である。すべての接続が(1つのエフェクトの出力から次の入力までの)データフローの方向を暗示しているため、「有向」である。ループは禁止、すなわちグラフを通過するどの経路もエフェクトの出力をその入力の1つとして戻さないため、「非巡回」である。あるエフェクトの出力を複数のエフェクトの入力に送ることができるため、「ツリー」ではなく「グラフ」である。エフェクトグラフは複数のエフェクトを互いに接続して、複数の単純な構築ブロックから構築された複雑な出力を達成する。
図3を参照すると、入力イメージの領域をマスクによって指示されたとおりに選択的にぼかす、例示的エフェクトグラフ300の概略図が示される。イメージエフェクトオブジェクト310が、ぼかしエフェクトオブジェクト312および混合エフェクトオブジェクト314の両方に、イメージデータをどのように供給するかに留意されたい。これは、ツリー構造では不可能であろう。加えて、エフェクトグラフ300には循環が存在しない。すなわち、たとえば混合エフェクトオブジェクト314の出力は、他のエフェクトオブジェクト(イメージエフェクトオブジェクト310、ぼかしエフェクトオブジェクト314、またはマスクエフェクトオブジェクト316)のうちの1つの入力ではない。本発明のモデルは、エフェクトグラフがレンダリングおよび/または変更される場合、無限ループを防止するために、循環を自動的にチェックする。
レンダリングのためにエフェクトが呼び出されると、各エフェクトにいくつかの興味ある出来事が生じる。第1に、各エフェクトは、既存のキャッシュに入ったバッファを使用して、要求を満たすことができるかどうかを判別する。キャッシュストラテジについては、以下でより詳細に論じるが、ここでは、その作業の出力が適切なキャッシュ内にすでに存在している場合、何の作業も実行不要であることを企図すれば十分である。既存のキャッシュバッファによって要求を部分的に満たすことが可能である場合(これはたとえば、ユーザがイメージをパンしているか、またはウィンドウのサイズを変更している場合に、頻繁に発生する)、重複するピクセルがキャッシュから新しいイメージバッファにコピーされ、その後、残りのピクセルがレンダリングされて、新しいバッファの適切な部分にコピーされる。
エフェクトは、CPUを動作させる必須レンダリング方法(ソフトウェアレンダリング)と、GPUを動作させるオプションレンダリング方法(各エフェクトが、ハードウェア(GPU)またはソフトウェア(CPU)のどちらでレンダリングを試行するべきかを決定する、ハードウェアレンダリング)の、2つの異なる方法を使用してレンダリングすることができる。選択は、ユーザによって(各エフェクトに関連付けられた、ソフトウェアレンダリング専用の指定変更がある)、アプリケーションによって、および/または現在のコンテキストによって(このコンテキストでは、ソフトウェアレンダリング専用の指定変更によって、サブグラフのソフトウェアレンダリングを強制するために、クライアントまたは任意のエフェクトを、グラフ内でより高位にすることができる)、命じることができる。ソフトウェアの指定変更が命じられない場合、基本クラスは、ハードウェアにおけるエフェクトのレンダリングを試行し、可能であれば、要求された結果を含むイメージバッファが戻されることになる。ハードウェアにおいてエフェクトがレンダリングできない場合、ソフトウェアレンダリングが実施されることになる。
どちらのレンダリング方法を呼び出すかに影響を与える可能性のある、動的条件も存在することに留意されたい。たとえば、エフェクトは、ハードウェアレンダリングを呼び出すが、メモリ不足例外をキャッチした場合、ビデオカードの使用可能メモリを超える一時バッファを割り振るように試行する。エフェクトに対するデフォルト応答は、ソフトウェアレンダリング(CPU)を呼び出して、必要な結果を取得することである。すなわち、モデルはGPUメモリを使い果たした場合、CPUまで後退することができる。この場合、リソースの可用度に基づいて性能を最適化することができる。
イメージバッファは、システムメモリ(CPUメモリ)、ビデオメモリ(GPUメモリ)、またはその両方に格納されたイメージ(ピクセル)データを表し、1つのエフェクトから他のエフェクトへ、エフェクトグラフを介して渡される。ユーザは単に、処理したい場所に処理したいデータがあればよいため、一般にデータの実際の場所はユーザにとっては重要ではなく、イメージバッファは必要であれば自動的にデータをその場所にコピーすることになる。すなわち、イメージバッファはピクセルデータが格納されている場所の詳細を隠し、エフェクトにとって適切な場所で自動的に使用できるようにする。
イメージバッファとは、イメージデータの読み取りおよび書き込みを行うためにエフェクトが使用するメインクラスである。イメージバッファの最大サイズは、一般に、ユーザがレンダリングを希望する可能性のあるイメージのサイズに比べてかなり小さい。たとえば、一実施形態では、ハードウェア制限によって指示される最大幅または高さは、いずれも2Kピクセルを超えない可能性がある。特定のエフェクトグラフは、単一のパスで2Kピクセルさえもレンダリングできない可能性がある。最大サイズは、グラフに含まれる特定のエフェクトに依存する。たとえば、大型半径のぼかしエフェクトは、書き込むピクセルよりもかなり多くのピクセルを読み取らなければならないため、生成可能な最大バッファサイズは、その入力をオーバーサンプリングする量だけ少なくなる。
ユーザは、レンダリングを要求する場合、これらの制限を容易に予想することができない。したがってユーザは、それらが必要とするものを要求するだけである。しかしながら、戻されたバッファが要求されたサイズとは異なる可能性がある。
イメージバッファのインスタンスは、割り振られたメモリを保持し、再請求することはできない。イメージバッファは、エフェクトによってアクティブに読み取られているかまたは書き込まれているイメージデータを保持するのに有用である。
時に、エフェクトは、レンダリングパス間でイメージデータをキャッシュに入れようとする場合がある。しかしながら、このデータがイメージバッファに保持されている場合、再請求することはできない。残りのエフェクトグラフがレンダリングされる際にビデオメモリが少なくなった場合、十分なリソースを再請求できない限り、エンジンはソフトウェアレンダリングに戻らなければならない。
イメージキャッシュオブジェクトは、イメージデータをキャッシュに入れる代替方法である。イメージキャッシュオブジェクトは、エフェクトが、後続のレンダリング中に再使用する可能性のあるイメージデータへの参照を維持できるようにするが、再使用しなければならない場合は再生成することができる。イメージキャッシュオブジェクトを保持すること、およびイメージバッファオブジェクトを解放することによって、エフェクトは、ビデオメモリが一杯になった場合にメモリを再請求することができる。目標は、メモリが少なくなったシナリオで、ソフトウェア(CPU)レンダリングに戻るのではなく、他のエフェクトがハードウェア(GPU)加速を使用できるようにすることである。ユーザは、後で読みたくなる可能性のあるイメージキャッシュインスタンスを任意のイメージバッファから獲得する。その後、イメージキャッシュを引き続き保持しながら、イメージバッファを解放することができる。これにより、イメージデータへの参照は維持され、必要であればそのコンテンツを再請求することができる。
エフェクトをツリーではなくグラフに編成することで、レンダリング時に何らかの問題が提示される。たとえば、図4の概略図に示されたようなエフェクトグラフを企図してみる。例示されたエフェクトグラフ400では、イメージデータが、下部のイメージエフェクトオブジェクト410から、上部の混合エフェクトオブジェクトである混合エフェクトB 418の出力へと流れるための、4通りの方法がある。第1にイメージデータは、イメージエフェクトオブジェクト410から、混合エフェクトオブジェクトA 414、混合エフェクトオブジェクトB 418へと流れることができる。第2にイメージデータは、イメージエフェクトオブジェクト410から、レベルエフェクトオブジェクト412、混合エフェクトオブジェクトA 414、混合エフェクトオブジェクトB 418へと流れることができる。第3にイメージデータは、イメージエフェクトオブジェクト410から、レベルエフェクトオブジェクト412、混合エフェクトオブジェクトA 414、ぼかしエフェクトオブジェクト416、混合エフェクトオブジェクトB 418へと流れることができる。第4にイメージデータは、イメージエフェクトオブジェクト410から、混合エフェクトオブジェクトA 414、ぼかしエフェクトオブジェクト416、混合エフェクトオブジェクトB 418へと流れることができる。
エフェクトグラフを通る4つのパスは管理不可能とは思えないが、組み合わせの可能性は指数関数的である。追加の混合エフェクトに数個のエフェクトを結合すると、グラフを通る固有パスの数は何百倍または何千倍にも増加する。単純なレンダリングモデルは、グラフの下部近くのエフェクトを何回もレンダリングしなければならず、そのたびに同じ出力が生成される。この指数関数的な増加および同一エフェクトのレンダリングの反復により、デジタルイメージ処理は極度に効率が悪く、速度が遅くなる。
本発明の諸実施形態のモデルは、各エフェクトでの自動バッファキャッシュを含めることによって、この過度のレンダリングのすべてではなくとも一部を軽減する。たとえば、図4のエフェクトグラフにおいて、混合エフェクトオブジェクトA 414がキャッシュを保持する場合、その入力をレンダリングするためにレベルエフェクト412およびイメージエフェクト410にさらに2回要求を出すのではなく、後でレンダリングを要求するごとにキャッシュを戻すだけでよい。この例では、イメージエフェクトオブジェクト410は、その出力を4回ではなく2回要求されるだけである。
とりわけ、エフェクトグラフを使用してローイメージから最終出力に到達するためには、パスに沿って各エフェクトにその出力について照会しなければならない。しかしながら、エフェクトは、その入力バッファがレンダリングされるまでその出力をレンダリングできない。したがって各エフェクトは、その出力が要求されるとその入力を照会する(すなわち、その入力エフェクトのイメージバッファで動作可能なように、そのイメージバッファについて照会する)。しかしながら、エフェクトの入力は、それらそれぞれの入力バッファがレンダリングされるまでそれらの出力をレンダリングすることができないため、その独自の入力を照会しなければならない。この照会プロセスは、エフェクトグラフの上部(最終出力がレンダリングされる場所)から、入力(たとえばローイメージ、JPEGなど)がレンダリングされる下部まで、すべてにわたって継続される。さらにこのプロセスは、一度にエフェクトグラフを通る1つの潜在パスに従って行くことによって、照会ごとに完了しなければならない。たとえば、図4のエフェクトグラフを利用する前述の例では、混合エフェクトオブジェクトB 418は2つの入力のみを有するが、それら入力のそれぞれが、その出力をレンダリングするために、2つの異なるパスに沿ってその入力を照会しなければならない。各エフェクトは、各潜在パスについてイメージバッファを生成し、最終エフェクト(この例では、混合エフェクトオブジェクトB 418)に、最終出力を出力するために必要な入力のうちの1つを提供する。
しかしながら、エフェクトグラフ内の中間エフェクト(たとえば、レベルエフェクトオブジェクト412、混合エフェクトオブジェクトA 414、およびぼかしエフェクトオブジェクト416)によってキャッシングが利用される場合、各中間エフェクトは、エフェクトグラフがレンダリングされる前の最も直近に計算された照会結果を、保持するかまたはキャッシュに入れることができる。このようにして、エフェクトグラフの上部で照会が開始された場合、調べられている2つのパス間で共通の中間エフェクトに達したときに、エフェクトグラフの下部まで戻って照会する必要がない。すなわち、照会は、調べられているパス間で共通の第1のエフェクトまで戻ればよい。エフェクトグラフの2つのパス間でこの共通のエフェクトを見つけること、および、その時点で情報をキャッシングまたは保持することによって、前述の潜在的な指数関数的計算が緩和される。
エフェクトグラフを最初に通過する間、どのエフェクトでキャッシュを保持するべきかを決定するため(および、それ以上照会されないエフェクトでの不必要なキャッシングを防ぐため)に、レンダリングが開始される前に、グラフの事前レンダリングパスが実行される。事前レンダリングパスは、いずれかの実際の計算がピクセル上で実行される前に、エフェクトグラフのどの領域が照会されようとしているかを識別し、レンダリング時に複数回要求されようとしているその領域の部分、ならびに、予測可能な照会インスタンスの数を識別する。その後、レンダリング時に、複数回の照会が必要であると識別されたエフェクトがあれば、それらは、最大回数要求されるまで、照会された情報を関連するイメージバッファ内にキャッシングすることができる。その時点で、含まれる情報が再度要求されることはないものとして、イメージバッファを解放することができる。
図4に示された例では、ぼかしエフェクトオブジェクト416が、書き込むよりも多くのピクセルを読み取る場合、混合エフェクトオブジェクト414は、2つの異なるサイズを有するイメージバッファについて照会される。この場合、第1に大きい方のイメージバッファが要求され、それ以上のレンダリングなしに第2の要求が満たされれば幸運である。しかしながら、大きい方のイメージバッファ要求が小さい方のイメージバッファ要求より後に来た場合、要求は容易に満たされるというわけには行かない。
レンダリングがサイズの昇順で要求される場合の不適切な実行を避けるために、本発明のモデルは、事前レンダリングパスの実行を提供する。事前レンダリングパスについては、同じ情報についての複数回の照会の対象となるエフェクトグラフの部分を識別することに関して、上記で論じた。事前レンダリングパスの間、各エフェクトは、同様のレンダリング要求を含む境界矩形も累積する。したがって、その後のレンダリングの間、エフェクトは、追加の費用なしでさらなる要求を満たすために、同じキャッシュを使用することを予想して、現在の要求に必要な出力バッファより大きい出力バッファを生成することができる。
これらのイメージキャッシュは1つの問題を回避するが、多くのビデオメモリがキャッシュバッファを保持するために予約開始され、そのうちの一部は今後決して使用されないであろうという点で、別の問題を発生させる。単純な解決策は、キャッシュバッファの割り振りが試みられ、メモリ不足例外が返された場合は必ず、最も直近に使用されたということに基づいてキャッシュバッファを再請求することである。しかしこれは、ビデオメモリがフル容量で頻繁に実行される(ビデオメモリの他のユーザにとって望ましくない)ことを意味し、ほぼすべての割り振りで例外処理のオーバヘッドを被る。
図5を参照すると、各エフェクトについてカウントが示されたエフェクトグラフの概略図が示されており、全体が参照番号500として指定されている。各エフェクトは、いくつのコネクタがその出力に接続されるかをカウントする、その出力それぞれに関連付けられたカウンタを有する。エフェクトはその入力バッファのうちの1つの使用を完了するごとに、対応する入力エフェクトに出力バッファを解放するように要求し、その出力に関するカウンタが減分される。カウンタがゼロに達すると、エフェクトは、現在のレンダリングパス中には、その出力バッファに関する要求をそれ以上受け取らないものと想定するため、エフェクトはその出力キャッシュを解放する。ビデオカード(GPU)メモリが制限されているため、必要以上の情報を保持することは望ましくないことから、イメージバッファは単一のレンダリングパス中のみ保持される。
たとえエフェクトがキャッシュを有する場合であっても、その入力エフェクトに、たとえレンダリングする必要がなくともそれらの出力バッファキャッシュを解放するように伝えなければならない。これは、エフェクトカウンタが適切に調整されること(したがって、キャッシュが適切に解放されること)を保証するために必要である。
レンダリングが完了した後、上部エフェクトはグラフ内に1つだけキャッシュを保持することになる。実際には、以下でより詳細に論じるように、対話型レンダリングを加速させるためにユーザが追加のキャッシュを保持しようとする理由は他にある。本明細書では、この例は、どのようにキャッシングを使用して指数関数的レンダリングを防ぐのかを示すためにのみ与えられる。
対話型レンダリングを加速させるために、1つのレンダリングパスから次のパスへと変更しなかったエフェクトグラフの部分について、キャッシュを維持することが有用である。通常、ユーザがプロジェクトを構築する方法は、1回につき1レイヤまたは1エフェクトである(レイヤについては、以下でより詳細に論じる)。たとえばユーザは、イメージの露光を調節するためにエフェクトを追加し、その後、イメージの温度を調節するために別のエフェクトを追加し、さらにその後、イメージを鮮明にするために第3のエフェクトを追加する。このように1つずつエフェクトを追加していくため、ユーザは一般に、1回について一番最近追加されたエフェクトのみを調節し、たとえばユーザは、すべての露光調節を完了した後に温度エフェクトを追加することになる。しかしながら、複数の露光調整が必要であり、それぞれの調節がレンダリングパスを必要とする可能性がある。
この典型的なプロジェクトシナリオに対処し、以前のレンダリングパス以降変更されていないエフェクトグラフの部分を不必要に再レンダリングすることを避けるために、エフェクト基本クラスは、最後のレンダリングパス以降エフェクトが変更された場合に設定される「ダーティフラグ」を含む。事前レンダリンググラフ走査(事前レンダリングパス)中に、ダーティさはエフェクトグラフを介して上方に伝搬され、ダーティエフェクトとグラフのルートとの間の任意のパス上にキャッシュを配置する。
ダーティさは、変更されないグラフの部分についてキャッシュを維持するために使用される。ダーティエフェクトは、次のレンダリングパスについても同様にダーティとなる可能性があることが想定される。これは、ユーザがパラメータ値を調整している場合、またはそれ以外の方法で1回に1つのエフェクトを修正している場合である。
たとえば、図6の概略図に示されたエフェクトグラフにおいて、ユーザがぼかしエフェクトに関連付けられたマスク上でペイントしていると想定する。事前レンダリングパス中に、上部の混合エフェクトである混合エフェクトB 618は、ダーティでない2つの入力エフェクト(混合エフェクトA 614およびぼかしエフェクト616)と、ダーティな第3の入力エフェクト(マスクエフェクト620)とを有することを検出する。エフェクトがその入力間でのこのダーティさの不一致を検出した場合は必ず、マスクエフェクト620が、次のレンダリングパスで修正されることになる唯一の入力であると想定され、非ダーティ入力エフェクトにそれらのキャッシュ上で保持するように指示する。例示されたシナリオでは、混合エフェクトB 618は、ぼかしエフェクト616および混合エフェクトA 614にそれらのキャッシュ上で保持するように指示し、マスクエフェクト620に、そのキャッシュを解放するように指示する。(イメージエフェクト610およびレベルエフェクト612は、混合エフェクトA 614に入力を提供するため、次のレンダリングパスでは照会されないことに留意されたい。)この選択的キャッシングは「相互レンダリングキャッシング」と呼ばれる場合があり、混合エフェクトB 618およびマスクエフェクト620のみが各レンダリングパスについて実際に作業を行う必要があるため、加速される対話型レンダリングに関する性能の向上が顕著である。
前述のように、ほとんどのユーザは自分のプロジェクトを1回につき1レイヤまたは1エフェクトで構築し、通常、ユーザは、通常はエフェクトグラフの上部にある自分が最後に追加したレイヤまたはエフェクトを調節すると想定すると、この相互レンダリングキャッシングの利点は、特に興味深い。本発明の諸実施形態の動的レンダリングモデルでは、ユーザは、いついかなるレイヤまたはエフェクトを変更することも自由である。相互レンダリングキャッシングを使用すると、エフェクトグラフの上部近くでの調節は、下部近くでの調節よりも高速になる。
相互レンダリングキャッシングを使用すると、キャッシュは、処理操作の指数関数的増加を避ける目的でのキャッシングに関する場合と同様に、単一のレンダリングパス中のみではなく、特定のデジタルイメージデータ(すなわち単一イメージ)に対するレンダリング操作にまたがって保持されることに留意されたい。
エフェクトグラフにおける「レイヤ」の概念には、これまで何回か触れてきた。本発明の諸実施形態のエフェクトグラフモデルでは、エフェクトは「アトミック」イメージ処理要素である。レイヤは、興味深いシナリオに対処する有用な方法で、エフェクトを結合する。レイヤはエフェクトグラフを構築するが、それらの処理またはレンダリングには直接関係しない。
なぜレイヤが有用であるかを理解するために、調節レイヤモデルについて考えてみる。様々なタイプの調節がサポートされているが、それらすべてがマスクおよび混合モードをサポートするものと企図する。これは、マスキングおよび混合機能を個々のエフェクトに分割し、その後、達成されることが望ましい複雑な結果を達成するために、いくつかの単純なエフェクトをまとめて連結することによって実施される。しかしながら、反復される編集単位が存在する場合、ユーザは、同じエフェクトを繰り返し連結しなければならず、グラフを最適化するためにローカライズされたインテリジェンスを開発することは困難である。たとえば、マスクが空の場合、マスクエフェクトを省略することが可能であり、混合モードおよびマスクが存在しない場合、混合エフェクトを省略することが可能である。
レイヤを、標準イメージ編集パイプラインの作成を単純化する、スマートマクロと考える人もあろう。実際、パイプラインの概念はレイヤによって導入される。レイヤは単一のイメージ入力を取り込み、単一の出力を生成する。もちろん、レイヤ内のエフェクトは、任意に複雑なサブグラフに編集することができる。
レイヤは任意のエフェクトを取り込み、オプションのマスクによって制御される任意の混合モードに対するサポートを追加する。一例では、これは図7に示される概略図のようになり、レイヤは全体が参照番号700として指定される。各レイヤはそのエフェクトを所有し、エフェクトグラフのその一部を作成するためにそれらを動的に(すなわちランタイム時に)まとめて連結する。スマートな動的最適化をグラフに適用することができる。たとえば、レイヤはそのエフェクトが変更された場合にイベントを受け取るので、混合エフェクト710のミキシングパラメータがその最小値に変更されたことを通知する場合、混合エフェクトおよびマスクエフェクト712を、構築するエフェクトグラフから除外することができる。
図7のエフェクトグラフは、混合エフェクト710、マスクエフェクト712、およびメインエフェクト714を互いに連結することが可能な、最も一般的な方法を示す。しかしながら、レイヤは、これら3つのエフェクト間のより複雑な関係をサポートする。場合によっては、マスクエフェクトは、レイヤの入力イメージに基づいて自動的にマスクデータを生成している可能性がある。メインエフェクトは、入力イメージデータに依存する場合、または依存しない場合がある。場合によっては、メインエフェクトがマスクデータにアクセスする必要がある可能性がある。
完全に接続されたレイヤは、図8の概略図のようになる可能性がある。もちろんレイヤは、図8に示されたよりもさらに複雑になる可能性がある。レイヤは、図に示されたエフェクトのいずれかを、任意に連結された複数のエフェクトと置き換えることができる。
単一チャネルのイメージバッファを出力するエフェクトは、マスクエフェクトとして働くことができる。マスクは、一定ピクセルベースのマスク(すなわち単一チャネルのイメージエフェクト)、または一定ベクトルベースのマスク(すなわち、ベクトルベースのデータを単一チャネルの出力バッファにラスタライズする)とすることができる。加えて、状況によって、マスクは入力データから動的に生成される場合がある。一般にこれは、何らかの基準、たとえば特定の色範囲を満たすピクセルを、ユーザが動的に選択することによって実施されることになる。
たとえば、図8のマスクエフェクトを参照すると、ユーザが、パイプラインを上ってきた特定のイメージにおける陰影を明るくすることを希望すると想定する。したがって、ユーザは、露光レイヤをエフェクトグラフに追加し、そのレイヤ上にマスクを配置して、マスクがイメージの陰影付けされた領域内にのみ配置されるようにする。一般に、マスクは、ピクセル選択に基づいてペイントまたは貼り付けされるため、静的である。しかしながら、本発明の諸実施形態によれば、ピクセルデータおよびマスクは、たとえば暗くする空をユーザが選択することができるようにする命令を含めることによって、動的にすることができる。これは、空の特定の色範囲の基準を満たすピクセルをユーザが動的に選択することによって実施されることになる。その後、パイプラインが(たとえば回転レイヤの追加によって)変更されると必ず、マスクは、ユーザによって再ペイントしなければならないのではなく、自動的に再計算される。
動的マスキングなどの自動訂正がGPUで実行可能な場合、マスクは入力イメージと同じ解像度で生成されることになるため、これは非常に説得力のあるシナリオである。一定マスクとは異なり、ベクトルのラスタライズまたはイメージサンプルの補間が不要である。
動的マスキングの主な利点の1つが、動的マスクによりユーザがパイプラインを変更できるようにすること、および、適切であればそれらの変更にマスクを適合させることである。一例が赤目であろう。赤目は、彩度低減エフェクトレイヤ上に瞳を位置づけるためにマスクを使用して瞳の領域の彩度を減じることによって、訂正することができる。マスクを静的に設定すること(赤いピクセルに関する選択をアルゴリズム的に使用するか、または手作業によって)は、基礎となるイメージが移動(たとえば変形、回転、または縮尺)した場合は失敗する。しかしながら、動的マスクは、イメージ内のどこに赤い瞳があったかを再検出し、マスクをリセットすることができる。
レイヤクラスは、混合エフェクトが3つの入力(混合する2つのイメージおよびマスク)を有するものと予期する。各混合アルゴリズムは、別々のエフェクトサブクラスによって表される。一般に、共通基本クラスを保証するだけの十分な共通コードが存在することになる。ユーザがレイヤの混合モードを変更する場合、以前の混合エフェクトは廃棄され、エフェクトグラフが再構築される際に新しい混合エフェクトに入れ替わる。
混合エフェクトに接続されるマスクエフェクトがない場合、混合エフェクトは不要であり(レイヤの出力は単にメインエフェクトの出力である)、完全に不透明なマスクが想定される。
「単一入力、単一出力」レイヤモデルは、エフェクトグラフの構築プロセスを大幅に簡略化する。ユーザが、作成したパイプラインの構成を保存したい場合、レイヤの追加の利点が明らかとなる。エフェクトグラフを使用する場合、保存は実際には実施がむしろ困難なタスクである。各エフェクトは、それ自体をシリアル化するように(すなわちその設定などを保存するように)要求されなければならず、エフェクトグラフはその情報を使用して、たとえばXMLで記述されなければならない。レンダリングエンジン自体が、グラフがいくつかのレイヤを含むことに気づいており、それらをそれぞれ記述することができるため、レイヤモデルはこれをより単純にする。その後レイヤは、それら自体を記述するように要求される。各レイヤがそのそれぞれのグラフを内部に構築した場合、その情報を格納する必要はない。
エフェクトのシリアル化に優るレイヤのシリアル化の追加利点は、レイヤがツリー内にあり、エフェクトが(一般には)DAGとすることが可能なグラフ内にあることである。ツリーの欲張りな深さ優先再帰的シリアル化を実行することができる(たとえば各ノードで、エフェクトはその子等に照会してそれら自体を記述し、その後自らを記述することができる)。DAGでは、これは、エフェクトDAGでレンダリングが指数関数的になるのを防ぐために、キャッシングに関して上記で論じた理由とすべて同じ理由で、指数関数的に実行される。したがって、この問題をレイヤレベルで対処することは、エフェクトレベルで対処するよりもかなり障害が少ない。
本発明の諸実施形態に従った動的なデジタル処理イメージモデルでは、品質および性能の両方に関して、いつどこでデータが変形されるかがかなり重要である。品質の問題を理解するために、ユーザが従来のイメージ処理モデルを使用してイメージを回転しようとしていると想定する。イメージが所望の方向を向いているものと決定されると、レンダリングエンジンは、新しい回転値でイメージを再サンプリングし、そのデータから新しいピクセルセットを生成しなければならない。その後ユーザがイメージを再度回転させる場合、従来のレンダリングエンジンは、以前の回転の前にイメージが開始された場所を記憶していない。したがって、単にイメージを再度回転させ(以前に回転したことには気づかず)、完了すると、イメージを再サンプリングして、新しいイメージを再度生成する。このプロセスは、追加の回転訂正が実行されるにつれて延々と続けられ、その都度データが再サンプリングされ、新しいイメージが作成される。この手法の問題点は、データが再サンプリングされるたびに劣化することである。
しかしながら、本発明の諸実施形態に従った動的デジタル処理イメージモデルでは、すべての調節が動的である。したがって、ユーザがイメージを回転させた場合、レンダリングエンジンは回転された累積量を記憶している。すなわち、回転修正を行うように要求されるごとに、オリジナルのデータに戻って回転を適用する。したがって、回転修正に続いてイメージが再生成される場合、オリジナルのイメージデータから1回だけ再サンプリングされる。これにより、イメージが耐えなければならない劣化の量が大幅に低減される。
さらに、毎回何らかの回転が追加される、プロジェクトの異なるレベルでの異なる変形が存在する場合であっても、この挙動は保存可能である。エフェクトグラフ全体を通じたすべての変形の累積結果が合計され、1回だけ適用される。すべての変形を累積し、それらが適用される前にそれらをさらにパイプラインの下方へできる限り押し下げるメカニズムが、レンダリングエンジン内に存在するため、この適用は、通常、パイプラインの下部レイヤ付近で実行される。このようにして、変形は、正確なレンダリングを生成するために必要な最小数のピクセルに対してであり、必要以上に頻繁には実行されない。
変形がエフェクトグラフを通過するのを2つのことによって止められることに留意されたい。たとえば、変形されたピクセル上でどのように動作するかを理解していないエフェクトに遭遇する可能性があり、その特定のエフェクトは未変形イメージ上で動作しなければならず、変形はエフェクトが適用された後にだけ適用される。
こうした状況に対処するために、以下でより詳細に説明するように、各エフェクトは事前レンダリングパス中に、どの種類の変形を処理できるか、およびどの種類の変形を処理できないかをエンジンに通知する。
前述のように、いつ変形が実施されるかに性能の観点からも、重要である。エフェクトグラフパイプラインでは、処理するデータをできる限り少なくすることが最も効率的である。ユーザが非常に大型(たとえば10億ピクセル)のイメージをロードし、そのイメージの編集を開始したいものと想定する。そのイメージの解像度で操作する代わりに(たとえば、10億ピクセルで操作する代わりに)、本発明の諸実施形態の動的レンダリングモデルは、たとえば200万ピクセルなどのユーザが実際に見ている解像度、または使用されているディスプレイデバイスがイメージを出力する解像度で、操作する。イメージを扱っているあらゆるエフェクトが、その後、かなり低い解像度でデータを扱うように、イメージの解像度は、パイプライン内で可能な最も早い時点で下げることが望ましい。したがってエフェクトは、イメージをかなり高速に操作し、大幅に少ないGPUまたはCPUイメージメモリを使用することが可能である。この結果を可能にするための倍率がデータに適用されていることに留意されたい。しかしながら、品質に関して上記で述べたように、スケーリングを処理できないエフェクト、すなわちスケーリングされたデータを扱う方法を知らないエフェクトが存在する。したがって、事前レンダリングパス中で、各エフェクトはこの種の変形を処理できないかどうかをエンジンに通知し、そのエフェクトがスケーリングされていないデータを処理してしまうまで、スケーリングは実施されないことになる。
さらに、レンダリングエンジンが、実際にはエフェクトグラフ内のさらに下方の別の変形場所で適用可能であると決定した場合、可能な限りパイプラインのさらに下方へ変形を押し下げる効果により、結果として、ユーザが指定した場所では特定の変形が実行されないことになることに留意されたい。
単なる例として挙げると、ユーザが、ぼかしエフェクト(ピクセル半径5のぼかし)、およびその後のダウンサンプリングまたはスケーリングエフェクト(10倍)を備える、エフェクトグラフを生成したと考えてみる。ユーザは、ぼかし半径を適用した後、イメージがスケーリングされると予測する。しかしながら実際には、ダウンサンプリングエフェクトは変形であるため、グラフの下方に押し下げることができた場合、最初にサンプルに適用され、その後、下方解像度イメージにぼかしが適用されることになる。ぼかしエフェクトは、このインスタンスで、ユーザの(表示)観点からすれば同じになるように、たとえばエフェクト全体について1/2ピクセルぼかしまで修正されなければならないことに留意されたい。ぼかしエフェクトが、スケーリングされたイメージのぼかしを処理できないことをレンダリングエンジンに宣言した場合、スケーリングエフェクトはパイプライン内のその下まで押し下げられないことになる。
次に図9を見ると、本発明の実施形態に従って、エフェクトグラフを利用してデジタルイメージデータを処理するための方法900を示す流れ図が示される。最初に、ブロック910で示されるように、複数のエフェクトオブジェクトが受け取られる。エフェクトオブジェクトについては、上記で広範囲にわたって論じてきており、単なる例として挙げると、混合エフェクトオブジェクト、マスクエフェクトオブジェクト、ぼかしエフェクトオブジェクトなどを含むことができる。複数のエフェクトオブジェクトが受け取られると、ブロック912に示されるように、エフェクトグラフが複数のエフェクトオブジェクトの少なくとも一部を利用してエフェクトグラフに連結される。エフェクトグラフは、必要に応じて、および/または所望であれば、CPUメモリ、GPUメモリ、ならびに、CPUメモリとGPUメモリの組み合わせのうちのいずれかを使用して、レンダリングすることができる。
その後、ブロック914に示されるように、処理されることになるデジタルイメージデータが受け取られる。デジタルイメージデータは、その後、ブロック916に示されるように、エフェクトグラフを利用して処理される。一実施形態では、デジタルイメージデータの処理は、受け取ったデジタルイメージデータの少なくとも一部を非破壊的に処理することを含むことができる。次に、処理されたデジタルイメージデータを、少なくとも1つのイメージバッファに関連して、CPUメモリおよびGPUメモリのうちの少なくとも1つに格納することができる。これはブロック918に示される。
本発明の諸実施形態に従ったイメージバッファは、GPUとCPUの間で、自動的かつユーザの介入なしに、渡されることが可能であることに留意されたい。加えて、本発明の諸実施形態に従ったイメージバッファは、第1のピクセルデータフォーマットと第2のピクセルデータフォーマットとの間で、自動的かつユーザの介入なしに変換されることが可能である。
図10を参照すると、本発明の実施形態に従い、デジタルイメージデータがエフェクトグラフの下部からエフェクトグラフの上部へと処理される、垂直に配向されたエフェクトグラフを利用して、デジタルイメージデータを処理するための方法1000を示す流れ図が示される。最初に、ブロック1010に示されるように、2つの分岐パスが開始される分岐合流点に位置づけられたエフェクトオブジェクトを有する、垂直に配向されたエフェクトグラフが受け取られる。その後、または同時に、ブロック1012に示されるように、エフェクトグラフを利用して処理されることになるデジタルイメージデータが受け取られる。次に、ブロック1014に示されるように、2つの分岐パスのうちの第1に沿って、エフェクトグラフの第1の処理パスが下から上へと実行される。
処理中に、デジタルイメージデータの少なくとも一部が、エフェクトオブジェクトの出力に関連付けられたイメージバッファ内にキャッシングされる。これがブロック1016に示される。その後、ブロック1018に示されるように、エフェクトグラフの第2の処理パスが実行され、この第2のパスはエフェクトオブジェクトに関連付けられたイメージバッファから延在する。
図11を参照すると、本発明の実施形態に従い、デジタルイメージデータがエフェクトグラフの下部からエフェクトグラフの上部へと処理される、垂直に配向されたエフェクトグラフを利用して、デジタルイメージデータを処理するための方法1100を示す流れ図が示される。最初に、ブロック1110に示されるように、垂直に配向されたエフェクトグラフが受け取られる。エフェクトグラフは第1および第2のエフェクトオブジェクトを含む。その後、または同時に、ブロック1112に示されるように、エフェクトグラフを利用して処理されることになるデジタルイメージが受け取られる。続いて、ブロック1114に示されるように、第1および第2のエフェクトオブジェクトを含むエフェクトグラフの少なくとも一部のうちの第1の処理パスが実行される。次に、ブロック1116に示されるように、デジタルイメージデータの少なくとも一部が、第1のエフェクトオブジェクトの出力に関連付けられたイメージバッファ内にキャッシングされる。
その後、ブロック1118に示されるように、第2のエフェクトオブジェクトに関連付けられた1つまたは複数のユーザ修正が検出される。次に、ブロック1120に示されるように、エフェクトグラフの第2の処理パスが実行され、この第2の処理パスは、エフェクトオブジェクトの出力に関連付けられたイメージバッファから延在する。
次に図12を見ると、本発明の実施形態に従い、エフェクトグラフを利用してデジタルイメージデータを処理するための方法1200を示す流れ図が示される。最初に、ブロック1210に示されるように、エフェクトグラフが受け取られる。エフェクトグラフは、それぞれが、デジタルイメージデータを格納するための、関連付けられたイメージバッファを有する、複数のエフェクトオブジェクトを含む。その後、または同時に、ブロック1212に示されるように、エフェクトグラフを利用して処理されることになるデジタルイメージデータが受け取られる。次に、ブロック1214に示されるように、エフェクトグラフの事前レンダリングパスが実行される。その後、ブロック1216に示されるように、エフェクトグラフを利用してデジタルイメージデータが処理される。
図13を参照すると、本発明の実施形態に従い、エフェクトグラフを利用してデジタルイメージデータを処理するための方法1300を示す流れ図が示される。最初に、ブロック1310に示されるように、エフェクトグラフが受け取られる。エフェクトグラフは、それぞれが、デジタルイメージデータを格納するための、関連付けられたイメージバッファを有する、複数のエフェクトオブジェクトを含む。その後、または同時に、ブロック1312に示されるように、エフェクトグラフを利用して処理されることになるデジタルイメージデータが受け取られる。次に、デジタルイメージデータを処理するために、エフェクトグラフに関連付けられたGPU内で十分なメモリが使用可能であるかどうかが判別される。これはブロック1314に示される。デジタルイメージデータを処理するために、エフェクトグラフに関連付けられたGPU内で十分なメモリが使用可能である場合、ブロック1316に示されるように、デジタルイメージデータはGPUを利用して処理される。しかしながら、デジタルイメージデータを処理するために、GPU内で十分なメモリが使用可能でないと判別された場合、デジタルイメージデータは、少なくとも一部が、エフェクトグラフに関連付けられたCPUを利用して処理される。これはブロック1318に示される。
次に図14を見ると、本発明の実施形態に従い、デジタルイメージデータを処理するためにエフェクトグラフを作成するための方法1400を示す流れ図が示される。最初に、ブロック1410に示されるように、1つまたは複数のエフェクトレイヤが提供され、各エフェクトレイヤは、複数の論理エフェクトを含む、それに関連付けられた論理エフェクトサブグラフを有する。その後、ブロック1412に示されるように、デジタルイメージデータの処理に関する入力が受け取られる。こうした入力は、単なる例として挙げると、レイヤに含まれるメインエフェクトのタイプ、レイヤインターフェースに適用される設定(たとえば100%に等しい不透明性)、ならびに、他の設定および特性を含むことができる。その後、ブロック1414に示されるように、受け取った入力が、デジタルイメージデータの処理時に、それぞれの論理エフェクトに対して有することになる影響が決定される。次に、ブロック1416に示されるように、決定された影響に従って、物理エフェクトサブグラフが作成される。その後、ブロック1418に示されるように、物理エフェクトサブグラフを利用してイメージをレンダリングすることができる。
図15を参照すると、本発明の実施形態に従った、エフェクトグラフを利用してデジタルイメージデータを処理するための方法を示す流れ図が示される。最初に、ブロック1510に示されるように、少なくとも1つのマスクエフェクトオブジェクトを有するエフェクトグラフが受け取られ、マスクエフェクトオブジェクトはエフェクトレイヤに関連付けられている。その後、または同時に、ブロック1512に示されるように、デジタルイメージデータが受け取られる。次に、ブロック1514に示されるように、基準を満たす受け取ったデジタルイメージデータの少なくとも一部の選択に関する入力が受け取られる。その後、ブロック1516に示されるように、少なくとも1つのマスクエフェクトオブジェクトが、受け取ったデジタルイメージデータに適用される。
一実施形態では、請求項15の方法が、図16に示されるような処理ステップをさらに含むことができる。最初に、ブロック1610に示されるように、デジタルイメージデータの修正に関する入力が受け取られる。その後、ブロック1612に示されるように、修正されたデジタルイメージデータを作成するために、受け取った入力に従ってデジタルイメージデータが修正される。次に、ブロック1614に示されるように、少なくとも1つのマスクエフェクトオブジェクトが、修正されたデジタルイメージデータに適用され、少なくとも1つのマスクエフェクトオブジェクトが基準を満たすように自動的に修正される。
図17を参照すると、本発明の実施形態に従って、垂直に配向されたエフェクトグラフを利用してデジタルイメージデータを処理するための方法1700を示す流れ図が示され、このデジタルイメージデータは、エフェクトグラフの下からその上へと処理される。最初に、ブロック1710に示されるように、垂直に配向されたエフェクトグラフが受け取られ、このエフェクトグラフは、その中の第1の垂直位置に配置された第1の変形エフェクトオブジェクトを有する。その後、ブロック1712に示されるように、第1の変形エフェクトオブジェクトが、第1の垂直位置よりもエフェクトグラフの下部に近い第2の垂直位置で、デジタルイメージデータに適用できるかどうかが判別される。第1の変形エフェクトオブジェクトが、第2の垂直位置でデジタルイメージデータに適用できないと判別された場合、ブロック1714に示されるように、第1の変形エフェクトオブジェクトは第1の垂直位置で適用される。
しかしながら、第1の変形エフェクトオブジェクトが第2の垂直位置でデジタルイメージデータに適用できると判別された場合、次に、第2の垂直位置に配置された変形エフェクトオブジェクトがあるかどうかが判別される。これがブロック1716に示される。第2の垂直位置に配置された変形エフェクトオブジェクトがない場合、ブロック1718に示されるように、第1の変形エフェクトオブジェクトが、第1の垂直位置ではなく第2の垂直位置で適用される。しかしながら、第2の垂直位置に配置された変形エフェクトオブジェクトがあると判別された場合、ブロック1720に示されるように、第1および第2の変形エフェクトオブジェクトが第2の垂直位置で累積的に適用される。
次に図18を見ると、本発明の実施形態に従った、垂直に配向されたエフェクトグラフを利用してデジタルイメージデータを処理するための方法1800を示す流れ図が示される。最初に、ブロック1810に示されるように、初期変形値を有するデジタルイメージデータが受け取られる。その後、または同時に、ブロック1812に示されるように、少なくとも1つの変形エフェクトオブジェクトを有するエフェクトグラフが受け取られる。次に、ブロック1814に示されるように、受け取ったデジタルイメージデータが、変形エフェクトオブジェクトで、初期変形値から第1の変形済み変形値へと変形される。その後、ブロック1816に示されるように、デジタルイメージデータは、変形エフェクトオブジェクトで初期変形値から第2の変形済み変形値へと変形される。
上記に鑑み、本発明の実施形態は、デジタルイメージデータを編集するためのシステムを対象とする。このシステムは、それに関連付けられたGPUメモリを有するグラフィックス処理ユニット(GPU)と、GPUメモリを利用してデジタルイメージデータの少なくとも一部を非破壊的に編集するための編集構成要素とを含む。一実施形態では、編集構成要素は、GPUメモリ、ならびにGPUメモリおよびCPUメモリの組み合わせのうちの1つを利用して、受け取ったデジタルイメージデータの少なくとも一部を非破壊的に編集することができる。
さらにこのシステムは、エフェクトグラフを形成するためにまとめて連結された複数のエフェクトオブジェクトを受け取るためのエフェクトグラフ受け取り構成要素を含むことが可能であり、エフェクトグラフは、デジタルイメージデータを編集するために使用することができる。加えて、さらにシステムは、編集されることになるデジタルイメージデータを受け取るためのデータ受け取り構成要素を備えることができる。
他の実施形態では、本発明は、エフェクトグラフを利用してデジタルイメージデータを処理するための方法を対象とする。この方法は、複数のエフェクトオブジェクトを受け取るステップと、複数のエフェクトオブジェクトの少なくとも一部をまとめてエフェクトグラフ内に連結するステップとを含み、エフェクトグラフは、CPUメモリおよびGPUメモリのうちの少なくとも1つを利用して連結することができる。一実施形態では、受け取ったデジタルイメージデータを処理するステップは、デジタルイメージデータの少なくとも一部を非破壊的に処理するステップを含むことができる。さらにこの方法は、所望であれば、処理されることになるデジタルイメージデータを受け取るステップ、および/またはエフェクトグラフを利用して受け取ったデジタルイメージデータを処理するステップを含むことができる。さらにこの方法は、イメージバッファと関連して、デジタルイメージデータをCPUメモリおよびGPUメモリのうちの少なくとも1つに格納するステップを含むことができる。
追加の実施形態では、本発明はデジタルイメージデータを処理するためのシステムを対象とする。このシステムは、処理されることになるデジタルイメージデータを受け取るためのデータ受け取り構成要素と、受け取ったデジタルイメージデータの処理に利用されることになる、複数のエフェクトオブジェクトを含むエフェクトグラフを取得するための、エフェクトグラフ取得構成要素と、エフェクトグラフならびにCPUメモリおよびGPUメモリのうちの少なくとも1つを利用してデジタルイメージデータを処理するための処理構成要素と、を含む。一実施形態では、エフェクトグラフ取得構成要素は、エフェクトグラフを作成するために、複数のエフェクトオブジェクトの少なくとも一部をまとめて連結することができる。他の実施形態では、処理構成要素は、エフェクトグラフと、GPUメモリならびにGPUメモリおよびCPUメモリの組み合わせのうちの少なくとも1つを利用して、デジタルイメージデータの少なくとも一部を非破壊的に処理することができる。所望であれば、システムは、CPUメモリおよびGPUメモリのうちの少なくとも1つにデジタルイメージデータを格納するためのストレージ構成要素を、さらに含むことができる。
追加の実施形態では、本発明は、垂直に配向されたエフェクトグラフを利用してデジタルイメージデータを処理するための方法に関し、デジタルイメージデータは、エフェクトグラフの下部からエフェクトグラフの上部へと処理されていく。この方法は、垂直に配向されたエフェクトグラフを受け取るステップであって、エフェクトグラフは2つの分岐パスが開始される分岐合流点に位置づけられたエフェクトオブジェクトを含む、受け取るステップと、エフェクトグラフを利用して処理されることになるデジタルイメージデータを受け取るステップと、エフェクトグラフの第1の処理パスを2つの分岐パスのうちの第1のパスに沿ってその下部から上部へと実行するステップと、デジタルイメージデータの少なくとも一部を処理中にエフェクトオブジェクトの出力に関連付けられたイメージバッファ内にキャッシングするステップと、を含む。
他の実施形態では、本発明は、垂直に配向されたエフェクトグラフを利用してデジタルイメージデータを処理するための方法を対象とし、デジタルイメージデータは、エフェクトグラフの下部からエフェクトグラフの上部へと処理されていく。この方法は、垂直に配向されたエフェクトグラフを受け取るステップであって、エフェクトグラフは、少なくとも第1のエフェクトオブジェクトおよび第2のエフェクトオブジェクトを含み、第2のエフェクトオブジェクトは第1のエフェクトオブジェクトよりもエフェクトグラフの上部に近い、受け取るステップと、エフェクトグラフを利用して処理されることになるデジタルイメージデータを受け取るステップと、第1および第2のエフェクトオブジェクトを含むエフェクトグラフの少なくとも一部の第1の処理パスを実行するステップと、デジタルイメージデータの少なくとも一部を第1のエフェクトオブジェクトの出力に関連付けられたイメージバッファ内にキャッシングするステップと、を含む。この方法は、第2のエフェクトオブジェクトに関連付けられたユーザ修正を検出するステップをさらに含むことができる。
他の実施形態では、本発明は、垂直に配向されたエフェクトグラフを利用してデジタルイメージデータを処理するためのシステムを対象とし、デジタルイメージデータは、エフェクトグラフの下部からエフェクトグラフの上部へと処理されていく。このシステムは、垂直に配向されたエフェクトグラフを受け取るための第1の受け取り構成要素を含み、エフェクトグラフは2つの分岐パスが開始される分岐合流点に位置づけられたエフェクトオブジェクトを含む。このシステムは、エフェクトグラフを利用して処理されることになるデジタルイメージデータを受け取るための第2の受け取り構成要素と、エフェクトグラフの処理パスをその下部から上部へと実行するための第1の処理構成要素と、処理中にエフェクトオブジェクトの出力に関連付けられたバッファ内にデジタルイメージデータの少なくとも一部をキャッシングするためのキャッシング構成要素と、2つの分岐パスのうちの1つに関連付けられたエフェクトグラフの第2の処理パスを実行するための第2の処理構成要素とをさらに含み、第2の処理パスは、エフェクトオブジェクトの出力に関連付けられたイメージバッファから延在する。
他の実施形態では、本発明はエフェクトグラフを利用してデジタルイメージデータを処理するための方法に関する。この方法は、エフェクトグラフを受け取るステップであって、エフェクトグラフは、それぞれがデジタルイメージデータを格納するためのそれに関連付けられたイメージバッファを有する複数のエフェクトオブジェクトを含む、受け取るステップと、エフェクトグラフを利用して処理されることになるデジタルイメージデータを受け取るステップと、デジタルイメージデータの処理に先立ち、エフェクトグラフの事前レンダリングパスを実行するステップとを含む。
さらに他の実施形態では、本発明はエフェクトグラフを利用してデジタルイメージデータを処理するための方法に関する。この方法は、エフェクトグラフを受け取るステップであって、受け取ったエフェクトグラフは、それぞれがデジタルイメージデータを格納するためのそれに関連付けられたイメージバッファを有する複数のエフェクトオブジェクトを含む、受け取るステップと、エフェクトグラフを利用して処理されることになるデジタルイメージデータを受け取るステップと、デジタルイメージデータを処理するためにエフェクトグラフに関連付けられたグラフィックス処理ユニット(GPU)内で十分なメモリが使用可能であるかどうかを判別するステップと、を含む。
さらに、本発明の実施形態は、エフェクトグラフを利用してデジタルイメージデータを処理するための方法に関する。この方法は、エフェクトグラフを受け取るステップであって、エフェクトグラフは、それぞれがデジタルイメージデータを格納するためのそれに関連付けられたイメージバッファを有する複数のエフェクトオブジェクトを含む、受け取るステップと、エフェクトグラフを利用して処理されることになるデジタルイメージデータを受け取るステップと、デジタルイメージデータの処理中に、複数のエフェクトオブジェクトに関連付けられたイメージバッファのうちの1つまたは複数がキャッシュに入れられるかどうかを判別するステップと、を含む。
他の実施形態では、本発明は、デジタルイメージデータを処理するためのエフェクトグラフを作成するための方法に関する。この方法は、1つまたは複数のエフェクトレイヤを提供するステップであって、各エフェクトレイヤは複数の論理エフェクトを含むそれに関連付けられた論理エフェクトサブグラフを有する、提供するステップと、デジタルイメージデータの処理に関する入力を受け取るステップと、受け取った入力が、デジタルイメージデータの処理時に、それぞれの論理エフェクトに対して有することになる影響を決定するステップと、決定された影響に従って物理エフェクトサブグラフを作成するステップと、を含む。
他の実施形態では、本発明は、エフェクトグラフを利用してデジタルイメージデータを処理するための方法に関する。この方法は、エフェクトグラフを受け取るステップであって、エフェクトグラフはエフェクトレイヤに関連付けられた少なくとも1つのマスクエフェクトオブジェクトを有する、受け取るステップと、デジタルイメージデータを受け取るステップと、基準を満たすデジタルイメージデータの少なくとも一部の選択に関する入力を受け取るステップと、少なくとも1つのマスクエフェクトオブジェクトを受け取ったデジタルイメージデータに適用するステップと、を含む。
他の実施形態では、本発明はデジタルイメージデータを処理するためのシステムに関する。このシステムは、1つまたは複数のエフェクトレイヤを提供するための提供構成要素であって、各エフェクトレイヤは3つまたはそれ以上の論理エフェクトを含むそれに関連付けられた論理エフェクトサブグラフを有する、提供構成要素と、デジタルイメージデータの処理時に、それぞれの論理エフェクトが有することになる影響に従って論理エフェクトサブグラフを物理エフェクトサブグラフに変形するための変形構成要素と、物理エフェクトサブグラフを利用してイメージをレンダリングするためのレンダリング構成要素と、を含む。システムは、所望であれば、抽出されたデジタルイメージデータを分析結果に変換するための変換構成要素、および/または分析結果をメインエフェクトに転送するための転送構成要素と、をさらに含む。
他の実施形態では、本発明は、垂直に配向されたエフェクトグラフを利用してデジタルイメージデータを処理するための方法に関し、デジタルイメージデータはエフェクトグラフの下部からその上部へと処理されていく。この方法は、垂直に配向されたエフェクトグラフを受け取るステップであって、エフェクトグラフは第1の垂直位置に配置された第1の変形エフェクトオブジェクトを有する、受け取るステップと、第1の変形エフェクトオブジェクトが第2の垂直位置でデジタルイメージデータに適用可能であるかどうかを判別するステップであって、第2の垂直位置は第1の垂直位置よりもエフェクトグラフの下部に近い、判別するステップと、を含む。第1の変形エフェクトオブジェクトが第2の垂直位置でデジタルイメージデータに適用可能であると判別された場合、さらにこの方法は、第1の垂直位置ではなく第2の垂直位置で、第1の変形オブジェクトを適用するステップをさらに含むことができる。しかしながら、第1の変形エフェクトオブジェクトが第2の垂直位置でデジタルイメージデータに適用可能でないと判別された場合、この方法は、第1の垂直位置で第1の変形エフェクトオブジェクトを適用するステップをさらに含むことができる。
追加の実施形態では、本発明は、垂直に配向されたエフェクトグラフを利用してデジタルイメージデータを処理するためのシステムに関する。このシステムは、垂直に配向されたエフェクトグラフを受け取るための受け取り構成要素であって、エフェクトグラフは第1の垂直位置に配置された第1の変形エフェクトオブジェクトを有する、受け取り構成要素と、第1の変形エフェクトオブジェクトが第2の垂直位置でデジタルイメージデータに適用可能であるかどうかを判別するための判別構成要素であって、第2の垂直位置は第1の垂直位置よりもエフェクトグラフの下部に近い、判別構成要素と、第1の変形エフェクトオブジェクトが第2の垂直位置で適用可能であると判別された場合、第1の垂直位置ではなく第2の垂直位置で、第1の変形エフェクトオブジェクトを適用するための適用構成要素と、を含む。
さらなる実施形態では、本発明は、垂直に配向されたエフェクトグラフを利用してデジタルイメージデータを処理するための方法に関する。この方法は、初期変形値を有するデジタルイメージデータを受け取るステップと、エフェクトグラフを受け取るステップであって、エフェクトグラフは少なくとも1つの変形エフェクトオブジェクトを有する、受け取るステップと、少なくとも1つの変形エフェクトオブジェクトで受け取ったデジタルイメージデータを初期変形値から第1の変形済み変形値へ変形するステップと、少なくとも1つの変形エフェクトオブジェクトで受け取ったデジタルイメージデータを初期変形値から第2の変形済み変形値へ変形するステップと、を含む。
さらに本発明の諸実施形態は、本明細書に記載された方法を実行するためのコンピュータ実行可能命令を有する1つまたは複数のコンピュータ読み取り可能媒体、ならびにこの方法を実行するようにプログラミングされたコンピュータに関する。
以上、本発明について、すべての点で限定的ではなく例示的であることが意図される、特定の諸実施形態に関して説明してきた。当業者であれば、本発明の範囲を逸脱することなく本発明に関する代替の諸実施形態が明らかとなろう。
前述の内容から、システムおよび方法にとって明らかであり固有の他の利点と共に、本発明が前述のすべての目標および目的を達成するように首尾よく適合されたものであることがわかるであろう。ある種の特徴および副結合が有用であり、他の特徴および副結合を参照することなく採用可能であることを理解されよう。これは、特許請求の範囲によって企図され、その範囲内にある。