Quartz Composerは、 macOSのXcode開発環境の一部として提供されるノードグラフシステムで、グラフィックデータの処理とレンダリングに使用されます。Keynoteやプレゼンテーション用の高度なアニメーションを作成したり、アニメーションスクリーンセーバーを作成したりできます。[ 1 ]
Quartz Composer は、 OpenGL ( GLSLを含む)、OpenCL (Mac OS X Snow Leopard 以降のみ)、OpenAL、Core Image、Core Video、JavaScriptなどのテクノロジーを使用して、シンプルなビジュアル プログラミング パラダイムに基づいたAPIと開発者ツールを作成します。Apple は Quartz テクノロジーをオペレーティングシステムに深く組み込んでいます。Quartz Composer で作成されたコンポジションは、QuickTime対応アプリケーション[ 2 ] (ただし Mac OS X Tiger 以降のみ)、システムスクリーン セーバー[ 3 ]、iTunes ビジュアライザー、Quartz Composer アプリケーション内、または付属のユーザー インターフェイスウィジェットを介してCocoaまたはCarbonアプリケーションに埋め込むことができます。Quartz Composer は iPhone SDK に含まれていますが、2015 年12 月現在 iOSデバイスで Quartz Compositions を実行する方法はありません。macOS Catalina以降、Quartz Composer フレームワークは非推奨になりましたが、互換性のためにまだ存在しています。[ 4 ]
Quartz Composer を介した Quartz プログラミングは、パッチを実装して接続することによって機能します。[ 5 ]従来のプログラミング言語のルーチンと同様に、パッチは基本処理ユニットです。パッチは実行され、結果を生成します。パフォーマンスを向上させるために、パッチの実行は遅延評価アプローチに従います。つまり、パッチは出力が必要になったときにのみ実行されます。パッチには、マウスのクリック、スクロール、移動、MIDIとオーディオ、キーボード、またはその他の動きを受信および出力できるコンシューマー、プロセッサ、外部入力パッチの 3 つのタイプがあります。パッチのコレクションは、マクロと呼ばれる 1 つのパッチに統合できます。マクロはネストでき、そのサブルーチンも編集できます。
レンダリング順序を制御するため、各レンダラーには右上隅にレイヤーが割り当てられます。レイヤーは低いものから高いものへと順番にレンダリングされます。レンダラーは有効または無効にすることができ、これは基本的に特定のレイヤーのオン/オフを切り替えることを意味します。使用されていないレイヤーをオフにすると、評価する必要のある上位パッチが少なくなるため、パフォーマンスが向上することがよくあります。
パッチによってはサブパッチを持つことができ、これにより、含まれるサブパッチのみにグローバルパラメータの変更を適用できます。これは、ライティング、3D変換、GLSLシェーダーなどに役立ちます。サブパッチのサポートは、パッチの角が通常の丸みを帯びた角ではなく、四角い角で示されます。

バージョン3.0では、コンポジションを仮想パッチに変換することが可能になりました。これにより、各コンポジションに重複コピーを保存することなく、機能を再利用できます。Quartz Composer Editorでは、仮想パッチが完全に展開された「フラット化」コピーを保存できるため、配布が容易になります。バージョン4.0では、この機能がさらに拡張され、ホストシステムに目的の仮想パッチがインストールされていない場合の代替として、仮想パッチの「フラット化」コピーが自動的に含まれるようになりました。これにより、コンポジションの配布が大幅に簡素化されます。
Leopardのリリースにより、ネットワーク機能が大幅に向上しました。ネットワークインターフェースを介したデータ送信と同期が可能になり、Open Sound Controlの送受信にも対応しました。

バージョン3.0の新機能として、 Xcodeテンプレートを使用してカスタムパッチプラグインを作成できる機能と、プラグインやその他の安全でないパッチの読み込みに失敗する「セーフモード」の概念が導入されました。これにより、悪意のあるコンポジションが危険な操作やセキュリティ上の問題のある操作を実行することを防ぎます。AppleのXcodeテンプレートを使用したカスタムパッチは、常に安全でないとみなされます。
バージョン2.0用のカスタムパッチプラグインを開発することは可能でしたが、APIは文書化されておらず非公開で、Appleによってサポートされることはありませんでした。最終的に、この手順を簡素化するためのテンプレートがリリースされました。[ 6 ]
Quartz Composer エディタで、Option キーを押しながらメニューから「環境設定...」を選択すると、ユーザーが設定できるオプションのタブが 3 つ追加されます。これらのオプションには、システム設定、エディタ設定、QuickTime 統合設定が含まれます。注目すべきオプションには、拡張ツールチップ、ソフトウェアレンダリング、フレームレート制限なしレンダリングなどがあります。バージョン 4.0 では、マルチサンプル アンチエイリアシング (MSAA) が隠しオプションとして追加され、QC エディタ内でアンチエイリアシングが可能になりましたが、MSAA をサポートする GPU でのみ動作します。
QC内のデータは、以下のいずれかのタイプになります。
バージョン4.0では、さらに2つのタイプが追加されました。
データは通常、透過的に他の型に変換できます。Quartz Composer 3.0 では、パッチ間の接続が色を変えて、行われている変換を示します。黄色の接続は変換が行われていないことを意味し、オレンジ色は変換によるデータ損失の可能性(数値からインデックスへの変換など)を示し、赤色は深刻な変換(画像からブール値への変換など)を示します。
Quartz Composer のドキュメントはコンポジションと呼ばれます。コンポジションはバイナリプロパティ リスト( XMLバージョンもサポートされています) で、ファイル名拡張子は.qtz、com.apple.quartz-composer-compositionUTIを持ちます。[ 7 ]パッチ、その接続、入力ポートの状態はコンポジション ファイルに保存されます。コンポジション内に画像も保存できるため、埋め込みグラフィックを含む自己完結型のコンポジションを作成できます。ムービー ファイルを Quartz Composer エディタにドラッグすると、ムービー ファイルへの参照が作成され、レンダラーに接続できる変化する画像が提供されます。
楽曲には、作曲者、著作権、説明などのメタデータも保存されます。ユーザーは必要に応じて、任意のメタデータ項目を追加することもできます。
JPEG、JPEG2000、GIF、PNG、TIFF、TGA、OpenEXR、BMP、ICO、PDF、PICT、ICNS 、および一部のRAWデジタルカメラタイプなど、多くの画像フォーマットがサポートされています。 [ 8 ]画像は、表示用にラスタライズされる前に、可能な限りネイティブ形式で保持されます。つまり、Quartz Composerは、切り抜き、拡大縮小、回転、または移動を行う際にベクター画像をベクターとして保持するため、大量のメモリや処理時間を消費することなく、非常に大きな論理画像寸法を扱うことができます。このような機能は、テキストベースの画像やPDFを扱う場合に最も顕著になります。
バージョン3.0では、楽曲の特定の部分に注釈(ノート)を追加する機能が追加されました。これらのノートは、他のプログラミング言語におけるコメントに相当します。ノートの色は黄色、赤、緑、青、灰色から選択でき、他のノートと重ねて表示することも可能です。
バージョン3.0では、構成プロトコルの概念が導入されました。プロトコルは、さまざまな目的に適合する構成を認定するための、必須およびオプションの入力と出力のテンプレートを提供します。以下のプロトコルがデフォルトで利用可能です。
Appleが独自のAPIで使用している追加のプロトコルがあります。
バージョン4.0では、新しいプロトコルが1つ追加されました。
Quartz Composer にプロトコルを追加するための公式にサポートされている方法はありません。ただし、将来的にこれが可能になる可能性のある、文書化されていない方法がいくつかあります。[ 9 ]
In addition to protocols, compositions can also conform to different runtimes where Quartz Composer is available. In Leopard, there are runtimes for Tiger (32-bit), as well as 32-bit and 64-bit versions of the Leopard Quartz Composer runtime. The editor can also indicate used patches that are unsafe, or unavailable in Tiger to aid in making compatible compositions.
A System-wide Composition Repository is available as of Version 3.0.[10] This allows applications to share and make use of common compositions for effects and processing. It is also possible for applications to query the repository for compositions that match certain criteria, such as protocol conformance.
The Repository is spread across 3 file system locations:
Adding compositions to the repository is as simple as adding the composition file to one of these locations.
It became possible to compare compositions in Quartz Composer 3.0. This feature allows the user to compare inputs, rendered output and graph appearance of any two compositions.
A developer tool called Quartz Composer Visualizer was released with Quartz Composer 3.0 that allows compositions to be rendered across multiple screens on a single machine, or even spanned across several machines and displays.
Support for some Automator actions was added with the release of Leopard.