Quartz Composer

**Quartz Composer**は、ノードベースのビジュアルプログラミング言語で、グラフィックデータ処理のためにmacOSの開発環境の一部として提供されている。

Quartz ComposerはOpenGL（GLSLなど）、OpenCL（Mac OS X v10.6以降）、Core Image、Core Video、JavaScript、およびその他の技術をシンプルなビジュアルプログラミングの形で提供する。 Appleはオペレーティングシステムに深くQuartz技術を埋め込んでいる。Quartz Composerで作成したコンポジションは、任意のQuickTimeアプリケーションでスタンドアロン再生することができる（ただし、Mac OS X v10.4以降）。例えばiTunesのビジュアライザ、スクリーンセーバなど。Quartz ComposerはアプリケーションとしてCocoaまたはCarbonを通してGUI部品を埋め込むことができる。このソフトは少なくとも32MBのVRAMを搭載したグラフィックカードが推奨されている。

Quartz ComposerにはiPhone SDKが含まれるが、現時点でiOSデバイスでコンポジションを実行する方法はない。macOS 10.15 Catalina以降、Quartz Composerは非推奨とされているが、互換性のために残されている。

## パッチ
Quartz ComposerによるQuartzプログラミングはパッチをつなぐことで実現される。パッチとは、他のプログラミング言語のルーチンと同様で、基本処理単位である。これは実行され結果を生成する。パフォーマンスを向上させるため、パッチはその出力が必要なときにのみ実行される遅延評価のアプローチに従う。パッチには3つのタイプがある：出力、データ処理、そしてMIDIやオーディオ、キーボード、マウス、その他入力を受け付ける外部入力である。パッチのコレクションはマクロと呼ばれ、一つに融合することができる。マクロは、入れ子になったサブルーチンを編集することができる。

レンダリング順を制御するため、各レンダラにはレイヤーが割り当てられる。レンダラパッチの右上に番号が割り振られていて、高ほうから低い方へ順次レンダリングされる。レンダラは有効/無効の切り替えができる。使用されていないレイヤーをオフにすると、多くの場合、性能が上がる。

いくつかのパッチは、パッチを内包することができる。そのパッチに適用されるパラメータの変更は下位のパッチにも適用される。例えば、照明、3D変換、およびGLSLシェーダである。このようなパッチは丸みを帯びた形ではなく、角が四角い形で示される。

バージョン3.0では、コンポジションを仮想パッチとして利用できるようになった。これにより、ユーザは、それぞれのコンポジションに重複コピーを作らずに作成した機能を再利用することができる。Quartz Composerのエディターでは、ユーザーが簡単に配布するために、"フラット"なコピーを（完全に中で展開する仮想パッチ）保存することができる。バージョン4.0ではさらに拡張され、目的の仮想パッチがホストにない場合にフォールバックとして使用するための仮想パッチの"フラット"コピーが保存される。これは、大幅にコンポジションの配布を簡略化する。

Leopardでのリリースでネットワーク機能が大幅に強化された。これによりネットワークを介してデータの同期ができる。そして、OpenSound Controlのサポートが追加された。

### プラグイン
バージョン3.0では、Xcodeのテンプレートを使ってカスタムパッチを書くことができ、"セーフモード"の概念が導入され、危険なパッチの読み込ませないようになった。これにより危険または安全でない操作を実行する悪意のあるコンポジションを防ぐことができる。 ただしApple純正のテンプレートを使用したカスタムパッチがいつも安全なわけではない。

バージョン2.0より、カスタムパッチのプラグインを開発することは可能であったが、APIは公開されていなかった。テンプレートは、この手順を簡略化するためにリリースされた。

## 隠しオプション

Quartz Composerエディターで、optionキーを押しながら"Preferences..."を選択すると、3つのオプションタブが追加されます。これらのオプションは、システムの設定、エディタの設定、およびQuickTime統合設定です。
ここで重要なのは、拡張ツールチップ、ソフトウェアレンダリングと、フレームレート無制限のレンダリングがあります。マルチサンプルアンチエイリアシングのオプションはバージョン4.0で追加されました。これによってエディタ内でアンチエイリアシングが有効になります。ただしGPUが対応している必要があります。

## データ型
QCは以下のデータ型を使うことが出来る:
* Boolean - 0 または 1
* Index - 0から2147483647までの正の整数
* Number - 倍精度浮動小数点数型
* String - Unicode文字列
* Color - RGBA、CMYKまたはグレースケール値
* Image - 任意のサイズの2D画像
* Structure - 入れ子構造の構造体配列
* Virtual - 上記どの型でも保持できる

バージョン4.0より以下の型も追加された:
* Mesh - 3次元座標に配置された頂点の集合とその法線、それらのテクスチャと色
* Interaction - コンポジションにおいて、インタラクティブにユーザーの入力を受け付けるための値のない型

### 型変換
データは通常、別の型に変換することができます。 Quartz Composerでは、パッチ間の接続の色は変換について示します。黄色の接続は、変換が行われていません。オレンジは変換によるデータの損失の可能性（例えばNumberからIndex）を示し、赤色は難しい変換を示します（ImageからBooleanなど）。

## コンポジション
Quartz Composerエディタで作成された書類は、コンポジションと呼ばれます。これは、バイナリのプロパティリスト（XMLバージョンもサポートされている）で、拡張子は.qtz UTIはcom.apple.quartz-composer-compositionです。パッチや、その接続、その入力ポートなどの状態はコンポジションファイルに保存される。
画像はコンポジション内に保存することが出来る。同様に、埋め込まれたグラフィックスを使用した自己完結型のコンポジションを作ることが出来る。Quartz Composerエディターに動画ファイルをドラッグすると、動画ファイルへの参照が作成される。

コンポジションは、作成者、著作権、および説明などのメタデータを格納することが出来る。

また、JPEG、JPEG2000、GIF、PNG、TIFF、TGA、OpenEXR、BMP、ICO、PDF、PICT、ICNS、一部のデジタルカメラのRawファイルなど、幅広い画像ファイルフォーマットに対応している。

### コンポジションプロトコル
バージョン3.0では、コンポジションプロトコルの概念が導入されました。このプロトコルは、それぞれの目的を達成するため必要となる的確な入力や出力などのテンプレートを提供します。以下のプロトコルは、最初から用意されています：

* Graphic Animation - これは入力も出力も必要としない、しかしスクリーンに必ず描画される。これはKeynoteのようなアプリケーションで背景のアニメーションとして使うのに便利である。
* Image Filter - フィルタによって画像を変化させます。Render In Image環境を使わないとImage Filterでレンダラーは許可されません。
* Graphic Transition - 元の画像から一定の間隔で次の画像へ遷移するトランジションを生成します。
* RSS Visualizer - RSSフィードを解析して表示します。
* Screen Saver - Finderのためのスクリーンセーバー
* Music Visualizer - iTunes内で使用するためのミュージックビジュアライザ

バージョン4.0で新しいプロトコルが一つ追加されました。

* Mesh Filter - 入力されたメッシュを変形

正式にプロトコルを追加する方法はありません。しかし将来的には、これを可能にする文書化されていない方法があります。

### ランタイム
プロトコルに加えて、コンポジションでは異なるランタイムを利用することができます。 Leopardでは、Tigerのランタイム（32ビット）と、
よりよいLeopardランタイム（32ビット、または64ビット）を利用できます。エディタは使われているパッチが危険か、Tigarで使用できないかを表示出来ます。これは互換性を保のに役立ちます。

### リポジトリ
バージョン3.0ではコンポジションリポジトリが利用可能になりました。アプリケーションで処理や効果のコンポジションを共有して利用できるようにします。
* /System/Library/Compositions - システム中核のコンポジション（ユーザーは通常、これらを変更することはありません）
* /Library/Compositions - すべてのユーザーが使えるコンポジション
* /Users/username/Library/Compositions - ログインしたユーザーのみが使えるコンポジション
リポジトリに追加するには、単純にコンポジションファイルをこれらの場所に入れるだけである。

### コンポジション比較
Quartz Composer 3.0においてコンポジション比較(compare compositions)が可能になりました。ユーザーが任意の二つのコンポジションにおいて、入力やレンダリングされた出力や画像を比較することが出来ます。

## 関連ソフトウェア
Quartz Composerは多くの点でMax/MSPやPure Dataに似ている。しかしこれらはどちらかというと音声の処理に重点を置かれている。
QCは、音声やMIDI信号に反応する映像のコンポジションを作成することができ、それをQuickTime対応アプリケーションから再生できることから、VJ達から大きな関心を集めた。

### Quartz Composer Visualizer

### Automatorのサポート
いくつかのAutomatorアクションは、Leopardで追加されました。
*画像ファイルにQuartzコンポジションフィルタを適用
*QuartzコンポジションをQuickTimeに変換
*画像ファイルにQuartz composerをレンダリング

### Syphonのサポート
プラグインをインストールすることで、Syphonに対応します。

## 歴史
Pierre-Olivier LatourはQuartz Composerの元となるPixelShox Studioを開発した。

## 外部リンク

### 書籍
*Quartz Composer Book 日本語
*Learning Quartz Composer Book & DVD 英語

### チュートリアルおよび記述
*Quartz Composerプログラミングガイド アップル
*Cocoaはやっぱり！
*Quartz Composer tutorials
*kineme.net QC Wiki
*George Toledo's Programming and Design Blog
*cybero's Quartz Composer JavaScript guide, blog & other Quartz Composer tutorials

### メーリングリスト
*Mailing List
*Mailing List Archives
*Kineme Quartz Composer, Patches & Plugins forum

### コンポジション
*ZUGAKOUSAKU
*kineme.net Composition Repository
*Quartz Composer Composition Directory
* GLSL, CoreImage & OpenCL Quartz Composer files from toneburst on machinesdontcare
*George Toledo's Programming and Design Blog
*QuartzCompositions.com Forum and Composition Repository

### カスタムパッチ/プラグイン
*vade v002 プラグインとエフェクト
*Kineme QCカスタムパッチ
*_1024 plugins by Francois Wunschel
*Tom Butterworthプラグイン
*Tamas NagyによるCoGeプラグイン
*George Toledo's Programming and Design Blog ( a variety of official and non-official api plugins and Xcode projects )
*I Love QC New Site dedicated to learning Quartz Composer, making files and supporting the Pearson Education book Learning Quartz Composer
*Google Quartz Composer Patches
*Paolo Manna QC LuaPlugin

### 画像や動画
*Quartz Composer on Flickr
*Quartz Composer on Vimeo