(57)【特許請求の範囲】
【請求項１】
グラフィカルプログラミング言語で定義されたプログラムを解釈して画像を出力するための制御装置における画像出力方法であって、
プログラム実行を表す少なくとも一つのエクスプレッションツリーを構成する構成工程と、
前記少なくとも一つのエクスプレッションツリーの部分ごとに別の表現を判定する判定工程と、
判定された前記別の表現と現在の表現とのそれぞれに対応する命令の集合の実行コストを評価して比較する比較工程と、
前記比較の結果、前記別の表現の方が現在の表現よりも実行コストが小さい場合に、対応する部分を当該別の表現へ変更することで前記エクスプレッションツリーを変更する変更工程と、
前記変更されたエクスプレッションツリーを対応する命令の集合に変換して命令記憶器に記憶する変換工程と、
前記命令記憶器から命令を読み出して実行することで出力機器に描画する描画工程とを有することを特徴とする画像出力方法。
【請求項２】
前記エクスプレッションツリーは結合したグラフィック要素を持つリーフノードと、グラフィック要素を組合わせるための結合したコードを持つ内部ノードとを含み、前記部分は内部ノードを含み、また、前記比較工程は、
現在のノードの子孫に対応する子孫グラフィック要素の大きさを決定する工程と、
前記子孫グラフィック要素の大きさからコストを決定する工程とを有することを特徴とする請求項１に記載の画像出力方法。
【請求項３】
前記画像は複数のグラフィック要素によって作られ、前記エクスプレッションツリーの前記変更は結果的に回数を削減し、前記命令の集合は該画像の部分を必ず節約することを特徴とする請求項１に記載の画像出力方法。
【請求項４】
前記内部ノードの結合したコードの少なくとも一つは結合性であり、前記エクスプレッションツリーの前記別の表現は前記部分の結合性順列を含むことを特徴とする請求項２に記載の画像出力方法。
【請求項５】
前記内部ノードの結合したコードの少なくとも一つは可換性であり、前記エクスプレッションツリーの前記別の表現は前記部分の可換性順列を含むことを特徴とする請求項２に記載の画像出力方法。
【請求項６】
前記内部ノードの結合したコードの少なくとも一つは対応する逆の形態を持ち、前記エクスプレッションツリーの前記別の表現は該逆の形態の利用を含むことを特徴とする請求項２に記載の画像出力方法。
【請求項７】
前記エクスプレッションツリーの前記変更は、対応する初めのエクスプレッションツリーに比べて右側への傾きが大きいことを特徴とする請求項１に記載の画像出力方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、静止画像とビデオ画像の両方の形態をしたコンピュータ生成画像の作成に関し、更に詳しくは、多数のサブコンポーネントから作られた画像の作成における合成方法に関する。
【０００２】
【従来の技術】
コンピュータ生成画像は、典型的には多数の異なる構成要素、つまり、「合成」、即ち最終画像を作成するために寄せ集めて描画されたグラフィック要素により構成されている。画像は、構成要素が独立して描画されるように、構成要素に分けられているため、小さい画像部分を使用することによって潜在的にかなりの時間が節約されている。それぞれの成分やオブジェクトは、特有のマット（ｍａｔｔｅ）情報、つまり、一般的には成分の形状や透明性を示すカバレージ情報を含む「アルファチャンネル」情報に関係してきた。マット情報、つまりアルファチャンネル情報は、通常、それぞれの画素について別々に記憶されている。更に、それぞれの画素は、それぞれの画素の色成分（たとえば、赤、緑、青（ＲＧＢ））を記憶する。従って、成分のそれぞれの画素は（Ｒ，  Ｇ，  Ｂ，  α）の４成分によって表すことができる。ここで、αは成分の透明度を表しており、一般に「アルファ」、つまり不透明チャンネルとして知られている。例えば、黒が、ＲＧＢ色成分（０，０，０）により表現されるとすると、黒色は（０，０，０，１）の４成分によって表現することができ、また、透明、つまり完全に透けてみえる色は（０，０，０，０）の４成分で表現することができる。
【０００３】
また、色成分をその不透明度で「前もって掛けておく」ことも、場合によっては効果がある。この場合、色（Ｒ，Ｇ，Ｂ）は（Ｒ，Ｇ，Ｂ）によって表現される。
【０００４】
図１から図３に画像合成の簡単な例を示す。図１は、円の端として定義される輪郭を持つ円形のグラフィック要素１の例を示す。円の内側は特定の色又はバリエーションで定義される。円の境界線の外側部分３は無限に続いているものとし、０アルファ値を取る（つまり、見えない）ものと定義する。図２は、図１の円１の色と異なる色５をした第２の円４を示す。図３は、図１及び図２の円１及び円４をそれぞれ１ページ上にコピーして合成して作られた、より複雑な画像６の例を示す。円が重なる部分７は、２つの円１と円４が組合わさった部分と定義し、より複雑な画像６を作成するために２つの円を組合わせる合成演算子によって決まる色値を取る。
【０００５】
トーマス・ポーターとトム・ダフは、１９８４年７月刊行のＣｏｍｐｕｔｅｒ  ｇｒａｐｈｉｃｓのＶｏｌ．１８、  Ｎｏ．３の２５３〜２５９ページに掲載された「デジタル画像の合成（Ｃｏｍｐｏｓｉｔｉｎｇ  Ｄｉｇｉｔａｌ  Ｉｍａｇｅｓ）」と題する記事において、「超要素（ｓｕｐｅｒ−ｅｌｅｍｅｎｔｓ）」を形成するための要素を取りまとめて合成する方法を発表している。ポーターとダフは、「α」チャンネルを持つ２つの画像を合成する方法についての検討もしている。単一画像の２つの部分を組合わせるには、主に１３の合成演算がある。これらの合成演算は下記の表１に示されている。この表において、Ｄｃは予め掛けられた目的色、つまり結果として生じる色であり、Ｄｏは目的値、つまり結果として生じるαチャンネル値であり、Ａｃは第１のソースＡの第１部分の予め掛けられた画素色であり、Ａｏは色がＡｃである画素に対応するα値であり、Ｂｃは第２のソースＢの部分画像の予め掛けられた画素色値であり、そして、ＢｏはソースＢの、Ｂｃに対応する画素のαチャンネル値である。
【０００６】
【表１】
0003618839.tif 000002
【０００７】
異なる演算子を利用して２つの異なる画像を組合わせる多種類の方法が表１に示されている。上記以外の演算子を利用することも可能である。上記以外の演算子は主に特殊効果を実行するために使用することもできる。
【０００８】
「ｐｕｌｓＷ」演算子の「包み込む」性質とは、例えばＡｃ  ＋  Ｂｃの和が色成分の最大値より大きい場合に、その色空間で最小値を参照しながら始めからやり直すように値が「包み込まれる」ものである。また、「ｐｌｕｓＣ」演算子に使用される「クランピング」処理は、例えばＡｃ  ＋  Ｂｃの和が色成分最大値より大きい場合に、その和を色成分最大値にクランプする動作を含む。
【０００９】
図４は、２つの完全に不透明な円Ａと円Ｂを表１に示す様々な演算子を用いて合成して得られた、様々な最終画像の例を示している。なお、演算子「ｒｏｖｅｒ」と、「ｒｉｎ」と、「ｒｏｕｔ」と、「ｒａｔｏｐ」とはオペランドを交換して「ｒ」（逆（ｒｅｖｅｒｓｅ））演算子にしたもので、それぞれ対応する「ｏｖｅｒ」と、「ｉｎ」と、「ｏｕｔ」と、「ａｔｏｐ」演算子に対して行われたものである。
【００１０】
近年、ＰＯＳＴＳＣＲＩＰＴ（商標）等のページ記述言語の形式によるグラフィックス言語が開発されている。これらの言語は比較的複雑なプログラミング言語に完全な機能性を提供するものであるため、反復概念や、制御の流れや、画像成分の一連の処理の定義を用いることによって、複雑な画像をコンパクトに表現することを可能にした。これらのページ記述言語は、アプリケーションの作者がプリンターの機種に付随するどのような詳細な制約にも束縛されないようにするために開発されたもので、プログラムの移植性向上に役立っている。また、これらの言語により、テキストや、スプラインを基本としたグラフィカルオブジェクトや、サンプルされた画像の拡張補助を行なうことができる。従って、この言語のインタープリタを製造し、例えば印刷機器に備えることもでき、そうすることによって簡潔に複雑な画像を表示することができる。言語の解釈は機器に従属するために、このようにページ記述言語は１つの出力機器から他の出力機器への移植性を助長する。ＰＯＳＴＳＣＲＩＰＴなどの言語は元来、ビットマップページまたはスクリーンの見え方を表し、ビットマップ画像上に不透明な画材で作画する概念に基づくグラフィックの原点を利用するために創られたものであった。
【００１１】
ほとんどのプログラミング言語に見られるように、ページ記述言語はしばしばオペランドと、新しい結果や効果を産み出すためにオペランドに作用する演算子とによって構成されている。オペランドは、線や、弧や、曲線や、線やスプラインの集合や、テキスト列や、サンプルされた画像などの基本的でグラフィカルなものを含むこともあり、演算子によって操作されるように設計されている。演算子は下記を含む数多くの異なるカテゴリーに分類されている。
【００１２】
１．  多種のオペランドやグローバルステータス（ｇｌｏｖａｌ  ｓｔａｔｕｓ）の変数の現在の属性を決定する演算子、
２．  基本的存在物が定義される様々な座標系を変更する演算子、
３．  多種の経路を定義するためにある基本的存在物を更新することによって、複雑なオブジェクトの構成を可能にする経路演算子、
４．  出力されたページに現れる個々のドットの色を最終的に決定する画像データを生成する、多種の「描画」演算子、
５．  特殊クラスの演算子は、通常、テキストやフォントを特定したり、更新したり、選択したりするために使用される。これは、準備されて定常的に使用される文字フォントの特殊な性質によるものである、
６．  プリンタやスクリーンなどの表示装置への画像の出力を制御する為に使用される、様々な機器セットアップ及び出力演算子。
【００１３】
【発明が解決しようとする課題】
残念ながら、ＰＯＳＴＳＣＲＩＰＴ等の言語は、フレームバッファ等の上に不透明な画材で描画を行う「機器のモデル」に左右される。フレームバッファの利用は膨大な記憶量を必要とし、また、現代における画像技術は高画質の出力を要求するため、画像を作成するためには膨大な記憶量と計算量とを必要とすることになる。更に、作画技術を利用するに当たっての不効率性は、出力解像度の向上に伴い一層悪化している。
【００１４】
近年、画像作成の為の新しい実行モデルの形態が提案された。本発明は上記従来例に鑑みてなされたもので、グラフィックプログラミング言語の効率的な解釈を可能とし、画像処理の実行効率を向上することを目的とする。
【００１５】
【課題を解決するための手段】
上記目的を達成するために本発明の画像出力方法は、以下の様な構成からなる。即ち、
グラフィカルプログラミング言語で定義されたプログラムを解釈して画像を出力するための制御装置における画像出力方法であって、
プログラム実行を表す少なくとも一つのエクスプレッションツリーを構成する構成工程と、
前記少なくとも一つのエクスプレッションツリーの部分ごとに別の表現を判定する判定工程と、
判定された前記別の表現と現在の表現とのそれぞれに対応する命令の集合の実行コストを評価して比較する比較工程と、
前記比較の結果、前記別の表現の方が現在の表現よりも実行コストが小さい場合に、対応する部分を当該別の表現へ変更することで前記エクスプレッションツリーを変更する変更工程と、
前記変更されたエクスプレッションツリーを対応する命令の集合に変換して命令記憶器に記憶する変換工程と、
前記命令記憶器から命令を読み出して実行することで出力機器に描画する描画工程とを有する。
【００１６】
【発明の実施の形態】
以下添付図面を参照して本発明の実施の形態を詳細に説明する。
【００１７】
発明の実施の形態において、基本となるグラフィック要素は下記の「基本的なタイプ」から構成される。即ち、
１．  様々なサイズで詳細に記された、様々なフォントを含むテキスト、
２．  経路としても知られるスプラインデータにより定義される輪郭を持つオブジェクト、
３．  走査された画像、またはグラフィック要素を形成する過去に作られた画像などの画素データ、
４．  ページの背景として使用され、少なくとも生成される画像と同じ大きさである「オール（ａｌｌ）」として知られるグラフィック要素、
である。
【００１８】
また、色及びテキストグラフィック要素は下記項目を含む属性を持つ。即ち、
（ａ）  色、濃淡のない色であるか、２色の混合色であるか、または画素単位を繰り返したタイルであるか、
（ｂ）  色データと同じくバリエーションの選択が可能である透明度、つまり、αチャンネルデータ、
（ｃ）  経路又はテキストグラフィック要素の描画を制御する塗りつぶし及び／又はストロークデータ。「グラフィカルコンテキスト」はそれぞれのグラフィック要素に関係する属性値を与える。新しい要素が作成されたとき、作成時のグラフィカルコンテキストにおける属性値は、新しいグラフィック要素に適用される。
【００１９】
従って、プログラミング言語自身は、下記のデータ形式を含む。即ち、
１．  フォントと、大きさと、位置と、他の望ましい特徴を定義するテキストオブジェクトで、テキストの色や、透明度や、塗りつぶし又はストロークパラメーターは定義しない、
２．  特定のオブジェクト形状の輪郭を定義する経路オブジェクトであって、その色や、透明度や、塗りつぶし又はストロークパラメーターは定義しない、
３．  画素データや、「オール」グラフィック要素や、グラフィック要素や、グラフィック要素を生産する為にいくつかの合成演算子による多数の他のグラフィック要素を集めた合成処理を表現するグラフィック要素、又はテキストオブジェクト、又は対応する画素形式で描画される経路オブジェクト。
【００２０】
画像合成は、画像をオペランドとして取り、画像を結果として生成する二項演算子１組を提供する。グラフィック要素の色情報は時折使用されない場合もあるが、画像は、それぞれすべての画素毎に色及びα、つまり透明度チャンネル情報を持つように定義される。全てのタイプのグラフィック要素を組合わせ又は合成できるようにするために、テキストと、経路と、「オール」のグラフィック要素とを含む全てのグラフィック要素が、それらが合成される前に画素画像へと走査変換されたように扱われる。加えて、グラフィック要素は、オペランドを形成するときに通常概念的に無限に広がるものとして取り扱われる。グラフィック要素の境界の外側の画素は完全に透明であるものとして扱われる。それぞれのグラフィック要素の拡張は、一画素が一オペランドの通常の拡張範囲内にあって、他のオペランドの範囲にない場合に、結果を定義することができるように実行される。更に、いくつかの特殊な演算子は色がいつも定義されていることを要件とするため、完全に透明な画素は描画色空間において０成分として表現される色を取る。
【００２１】
発明の実施の形態における描画言語は、通常のコンピューター言語と同様に多数の異なる方法で「実行」される。コンピュータ言語は通常、対応するコンピュータによって「解釈」又は「コンパイル」手段を介して「実行」され、これらの手段はコンピュータ言語コンパイラライティングの技術の当業者にとって公知である。
【００２２】
インタープリタ及びコンパイラは通常言語を定義し、コンテクストの無い、文法から構成されている言語記述の為の分析木、つまりエクスプレッションツリーを構成する。インタープリタ及びコンパイラの更なる説明については、標準的テキストである１９８６年にＡｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  Ｃｏｍｐａｎｙ，  Ｒｅａｄｉｎｇ，  ｍａｓｓａｃｈｕｓｅｔｔｓから出版されているアホ、セシ、及びウルマンの共著の「Ｃｏｍｐｉｌｅｒｓ  Ｐｒｉｎｃｉｐｌｅｓ，  Ｔｅｃｈｎｉｑｕｅｓ，  ａｎｄ  Ｔｏｏｌｓ」を参照するとよい。
【００２３】
本実施の形態においては、プログラミング言語で書かれたプログラムの実行は、実行速度、大きさ、実行し易さのためにインタープリタにより行われる。
【００２４】
プログラミング言語のそれぞれの文については、インタープリタは文を分析し、実行可能な形式の文に変換する。そして、この実行可能な形式のものが実行される。この実行可能な形式の文が実行されている間に、グラフィック要素に対して演算が実行される。これらを行うために、即時実行や遅延実行等を含む多数の異なる技術を利用することが可能である。
【００２５】
［即時実行］
グラフィック要素に応用されるそれぞれの演算については、結果として得られる画素画像を保存するのに充分なラスター記憶が作られ、その演算は、オペランドを合成して出力ラスター画像領域の画素データを生成するために使用される。このラスター画像領域は演算の結果であるグラフィック要素となる。描画演算が実行されると、望ましいグラフィック要素のラスター画素が出力装置に送信される。
【００２６】
この技術は、多くの中間グラフィック要素がプログラムの実行中に使用された場合に、大容量の記憶装置を必要とするという欠点がある。また、グラフィック要素の次の使用に関する情報がその計算時又は生成時に提供されないため、以降の最適化が殆どできないという欠点がある。
【００２７】
図４から図６を参照しながら、即時実行モデルに関わるインタープリタの演算例を示す。下記の様な命令列の例を仮定する。即ち、
【００２８】
【表２】
0003618839.tif 000003
【００２９】
発明の実施の形態にかかるプログラミング言語において、上記の「Ａ  ＝  Ｂ」の表現はＡの値にＢの値を割り当てることを示す。また、「Ａ：  ＝  Ｂ」の表現は「Ａ  ＝  Ａ  ｒｏｖｅｒ  Ｂ」の表現を短縮したもので、「Ａ  ｒｏｖｅｒ  Ｂ」は「Ｂ  ｏｖｅｒ  Ａ」と同じ結果を導く。
【００３０】
「ｔｅｘｔ」関数は、発明の実施の形態において上記に示すように、色情報や透明度情報を持たず、文字情報と、フォント情報と、サイズ情報と、位置情報のみを持つテキストオブジェクトを生成する。しかし、Ａ：  ＝  ｔｅｘｔ  （”ａ”）  の文は「Ａ  ＝  Ａ  ｒｏｖｅｒ  ｔｅｘｔ  （”ａ”）」と同じである。演算子「ｒｏｖｅｒ」をテキストオペランドに対して実施するときは、テキストオペランドは先ずグラフィック要素に変換される。この変換は、属性を決定するようにテキストを観念的に描画することによって行われる。「ｔｅｘｔ」を呼び出す関数を実行するに当たり、現在点は、描画されたグラフィック要素のテキスト列の結果として得られる幅だけ動かされる。図５は第１命令完了後の対応するエクスプレッションツリーである。
【００３１】
表２の第１命令（１）は、文字「ａ」に対応するグラフィック要素をＡの値として割り当てることである。この割り当て結果は図１０に示されている。
【００３２】
インタープリタによって実行される第２命令は文字「ａ」の隣の文字「ｂ」に対応するグラフィック要素の描画を意味する。この命令の実行後の結果のエクスプレッションツリーは図６に示すとおりであり、Ａの値の状態は図１１に示すとおりである。
【００３３】
命令３は既に描画された文字のとなりの文字「ｃ」に対応するグラフィック要素の描画を意味する。一連の命令（１）から（３）に対応するエクスプレッションツリーを図７に示し、Ａの値の状態は図１２に示す。
【００３４】
命令４は円を含むグラフィック要素を作成し、値Ｂによって定義されるグラフィック要素に生成したグラフィック要素を割り当てる。この命令に対応するエクスプレッションツリーを図８に示し、値Ｂの状態を図１３に示す。
【００３５】
命令５はグラフィック要素Ｂをグラフィック要素Ａで定義されるグラフィック要素の上に合成する動作を含む。図９は、命令５を実行した後のグラフィック要素Ａの結果として得られるエクスプレッションツリーを表している。部分１０はＡの過去のエクスプレッションツリーである図７のエクスプレッションツリーを表し、命令５の右辺に現われている。図１４は、即時実行方法が使用されたときの値Ａに対応する状態を示す図である。
【００３６】
［遅延実行］
コンパイラの実行に対する第２のアプローチは、遅延実行モデルである。このモデルにおいて、プログラム文形態であるグラフィック要素に対して行うそれぞれの演算について、その演算を表すエクスプレッションツリーのノードが作成される。作成されたエクスプレッションツリーのノードは演算、または演算子を記録し、そのエクスプレッションツリーのノードの子は演算のオペランドである。そして、エクスプレッションツリーのノードは演算の結果であるグラフィック要素となる。１つ以上の命令が実行されると、前の演算によって作られたエクスプレッションツリーは、時折、図５から図９に示されるような方法で更に複雑なエクスプレッションツリーを創る演算と更に組み合わされる。
【００３７】
続いて描画演算が実行されると、希望するエクスプレッションツリーは、繰返して横断（ｔｒａｖｅｒｓｅ）され、希望する画像を作るために希望する演算が実行され、得られた画像は出力機器に送られる。
【００３８】
この技術は、グラフィック要素の後の使用についての情報が分かるまで、描画演算が延期され、生成されるという点において有効である。従って、プログラムの実行が終了するまでグラフィック要素のラスタ画素を記憶するメモリを割り当てる必要がなく、グラフィック要素の後の使用を考慮した最適化を行なうことができる。
【００３９】
次の２つのアプローチが、インタープリタの実施で使用することができる。
【００４０】
１．「ポストフィックス（ｐｏｓｔｆｉｘ）」、つまり「スタックベース」のアプローチであって、グラフィック要素はスタック上の成分に対して実行されるオペランド及び演算子として、合成スタック上にプッシュされる。従って、二項演算子は先頭から２つのスタック登録項目を合成して、得られた結果を元のスタックへ戻すことによって、それらを削除することができる。入力されたページ記述の全ての命令が終了すると、スタックの先頭が出力機器で描画される。
【００４１】
２．「挿入辞（ｉｎｆｉｘ）」、つまり「表現ベース」のアプローチであって、元来のグラフィック要素は直接演算されるか、変数中に記憶される。演算子はこの元来のグラフィック要素、既に変数中に記憶されているグラフィック要素、あるいは準表現（ｓｕｂｅｘｐｒｅｓｓｉｏｎｓ）を組合わせることによって、変数中に記憶されるか、更に他の演算子によって組合わせることのできる新しいグラフィック要素が作成される。「ページ」等のあらかじめ決められた変数を割り当てられたグラフィック要素は、出力機器にて描画され得る。
【００４２】
上記２つのアプローチの違いはプッシュダウンオートマトンとチューリングマシンのそれぞれのパワーの違いに類似している。
【００４３】
インタープリタの好適な実行として、第２の遅延実行モデルが利用される。そして、
１．  グラフィカル演算が延期されて、エクスプレッションツリーが作られる、
２．  「挿入辞」アプローチがエクスプレッションツリーの実行のために使用される、
３．  経路輪郭をもつ全てのオブジェクトと、文字と、画像とが、無限に続く画素画像によって構成される基礎グラフィック要素へと先ず概念的に変換される。そして、二項及び単項演算子の両方を含む表１で定義される演算子を利用して、合成が行われる。
【００４４】
一旦画像のためのエクスプレッションツリーが生成されると、画像は適切な出力機器で「描画」される準備が整う。出力機器のグラフィック要素を表す「ページ」などの予め定められた変数を利用し、この変数に対応するエクスプレッションツリーを描画することによって、出力画像が描画される。出力機器が１走査線毎に出力画像を受け付けるとすると、以下のような多数の異なる描画技術が可能である。
【００４５】
１．  それぞれの走査線毎に、出力された変数の為のエクスプレッションツリーは横断され、それぞれのグラフィック要素の描画と演算子の合成はその走査線について適切であるように行われる。
【００４６】
２．  走査線毎の二分木横断はコンピュータ時間の観点からすると時間のかかる工程であることを認知することによって、線形描画リストがエクスプレッションツリーから先ず生成される。続いて、それぞれの走査線について、それぞれのグラフィック要素は要求通りに描画され、それぞれの合成演算子はその走査線について適切であるように実行される。この実行形態は、エクスプレッションツリーの評価された準部分に相当する中間結果をスタックが保持することを必要とする。
【００４７】
３．  走査線毎の線形描画リストを全て走査することは非効率であることを認知することで、ある特定のグラフィック要素の走査線から線形描画リストのソートが始められる。それぞれの走査線を描画する時に、現在描画されるべき走査線に影響を与える線形描画リストのグラフィック要素全てを含むように、アクティブリストがメインテナンスされる。それぞれの走査線の始めでは、その走査線を開始する命令はアクティブリスト中に併合され、既に適切でない命令はアクティブリストから除かれる。これは当業者にとって公知の表示リスト命令のアクティブリストのメインテナンス技術と類似している。
【００４８】
上記第３のアプローチの概念が一度理解されると、この概念の解釈を助けるために、ページ記述プログラミング言語文の解釈はコンパイラによって行われる演算に擬せられる。元々のエクスプレッションツリーはコンパイラの分類木に擬することができ、描画リストの生成はコンパイラのコード生成フェーズに擬することができ、分類木から作成される線形描画リストは組立命令又はいくつかのコンパイラで利用される中間コードに擬することができ、そして線形描画リスト描画はコンピュータによる組立言語命令の実行に擬することができる。
【００４９】
ページ記述言語命令のある特定の集合に対するエクスプレッションツリーは、ページ記述中に含まれる文を実行することによりインタープリタによって構築される。このページ記述中に含まれる文は、Ｃ、Ｐａｓｃａｌ、Ａｌｇｏｌ等の現代のプログラミング言語に於て提供される、「ｗｈｉｌｅ」ループや、条件文や、他の通常の構造を含み、これらはプログラミング言語の一部を形成すると見做される。ある特定の変数に記憶されたどのエクスプレッションツリーも、ページ記述内又はページ記述言語プログラム中の後続のページのページ記述内で再利用することができ、どのエクスプレッションツリーも外部又はユーザーの視点から更新されていない状態で残しておくのが非常に望ましい。しかし、一度インタープリタがエクスプレッションツリーの構成を終了すると、エクスプレッションツリーの構成を並べ変える可能性のあるコンパイラ形態の最適化が可能である。従って、表現処理の一端としてこれらの最適化を可能にするためにツリー中で２組のポインタが使用される。これらのポインタは、ユーザーポインタと、ワーキングポインタと呼ばれる。インタープリタが初めにページレイアウトプログラム記述からエクスプレッションツリーを構成するとき、ユーザーポインタが利用される。ページレイアウトを表現するエクスプレッションツリーが描画の為に後で処理されるとき、ワーキングポインタが使用され、ユーザーセットポインタはそのまま残される。
【００５０】
エクスプレッションツリーの構成が完成すると、描画リスト生成処理が開始される。この描画処理は、エクスプレッションツリーに対して多数の最適化工程を実施することによって開始される。これらの工程は、描画リスト生成処理を説明した後に説明する。
【００５１】
描画リスト生成処理は、通常のコンパイラによって実行される組立コード又は中間コード生成に類似している。描画リストの項目は、グラフィック要素を合成する命令や、又はその他の行動を実行させる命令と考えることができる。
【００５２】
描画リスト生成へのアプローチは２通りある。１つはハードウエア補助の描画装置に、より適するものであり、他方は「ソフトウエアのみ」による実施に適している。これらのアプローチは共に、将来実施する合成のために最新の合成演算結果を保存するための描画スタックを使用しなければならない。このソフトウエア指向のアプローチは、グラフィック要素をスタックへプッシュする命令か、またはスタック上のオペランドに対して演算を行う命令のどちらかに従って、描画スタックを用いるとうまく作動する。ハードウエア補助のアプローチは「アキュムレータ」の利用を前提とする。命令は、アキュムレータへグラフィック要素をロードするか、またはグラフィック要素を合成し、アキュムレータの内容を描画スタックへプッシュするか、スタックからポップした成分をアキュムレータへ合成する。
【００５３】
勿論、もし指示された非周期的なグラフが許可されるとすると、描画スタック自身では不十分であり、共通の準表現を記憶するために一時記憶空間を追加することが必要となる。
【００５４】
ハードウエア補助の「アキュムレータ」アプローチについては、「命令集合」が表３に示すとおりに実施される。
【００５５】
【表３】
0003618839.tif 000004
【００５６】
表３において、「ａｃｃ」はアキュムレータ（ａｃｃｕｍｕｌａｔｏｒ）を指し、「Ｍ」は希望する色変換関数を指す。
【００５７】
変数Ａはあらかじめ定義されたどのグラフィック要素または、スタックの先頭にあるグラフィック要素をポップさせるオペランド「ｐｏｐ」でもよく、それを命令のオペランドとして使用してもよい。
【００５８】
上記全ての命令は、バウンディングボックスを与えられ、その内部で演算が行われる。
【００５９】
ハードウエアのために設計された累算ベースのアプローチとソフトウエアのために設計されたスタックベースのアプローチの対応は、下記のとおりである。
１．  「ｃｌｅａｒ」及び「ｌｏａｄ」命令は、「ｃｌｅａｒ」命令が最適化されたとき以外は、片方が他方の後に実施される。それらは不透明度０の領域に囲まれたスタック上にオペランドをプッシュすることに対応する。従って、「ｃｌｅａｒ」命令は続けてロードするものがないときはそれだけを送る。
２．  「ｐｕｓｈ」命令は飛ばしてもよい。
３．  「ｏｖｅｒ」命令などの命令に対して行われるオペランド「ｐｏｐ」は、スタックの先頭から２つの成分を合成し、結果の合成成分をスタックに残すことを意味する。
４．  グラフィック要素であるオペランド「Ａ」は、グラフィック要素Ａをスタックへプッシュし、スタックの先頭から２つの成分を合成し、結果の合成成分をスタックの先頭に残すことを意味する。
【００６０】
エクスプレッションシンタックスツリーが描画リストへ変換されるとき、エクスプレッションシンタックスツリーを介していくつかのパス（ｐａｓｓｅｓ）が作られる。これらのパスは以下の仕事を行う。
１．  描画ハードウエア（又はソフトウエア）によって補佐されない基本事項を表現に拡張する。
２．  単項最適化を行う。
３．  エクスプレッションツリーのリーフノードと内部ノードのバウンディングボックスを決定する。
４．  バウンディングボックスの最小化を行う。
５．  クリッピング経路を検出し、クリップノードにラベルをつける。
６．  最適化を行う。
７．  エクスプレッションツリーを対応する描画命令集合リストへ変換する。
８．  ソートされた表現命令リストを作成する。
【００６１】
上記のパスは分割された見出し毎に、詳しく説明される。
【００６２】
＜１．描画ハードウエア（又はソフトウエア）によって補佐されない基本事項の拡張＞
多種類の基本関数はハードウエア又はソフトウエアの実行によって補佐されないことが多い。一例として、２つの独立画素列が１つのオペランドを形成するために組合わせられなければいけない、というようなことがある。例えば、もし色及び不透明さが共に画像の一部を形成し、しかしながらそれらが２つの異なる変数からきている場合、ハードウエアは色を表す１つの画素列を、不透明さを表す第２の画素列として同時に組合わせることができないこともある。こういう場合、この状況を表現する基本事項は、
「色＝Ａ、不透明さ＝Ｂ」
である。
【００６３】
この基本事項は、この時点で、
「（色＝Ａ、不透明さ＝完全に不透明）ｉｎ（色＝０、不透明さ＝Ｂ）」
によって置き換えらることができる。
【００６４】
＜７．エクスプレッションツリーの、対応する描画命令集合リストへの変換＞エクスプレッションツリーを、対応する描画リスト（パート７）へ変換する処理は、下記の疑似コードによって記述することができる。即ち、
0003618839.tif 000005
となる。
【００６５】
上記の翻訳処理において、  関数「ｒｅｖｅｒｓｅ（ｎ．ｏｐｅｒａｔｉｏｎ）ｐｏｐ」はパラメータ「ｎ．ｏｐｅｒａｔｉｏｎ」の逆の演算を作る。例えば、「ｒｏｖｅｒ」は「ｏｖｅｒ」の代わりに創られ、「ｏｖｅｒ」は「ｒｏｖｅｒ」の代わりに作られる。更に正式には、演算子「ｏｐ」が与えられているとすると、「ｒｅｖｏｐ」で定義される逆の演算子はＡ  ｏｐ  Ｂ  ＝  Ｂ  ｒｅｖｏｐ  Ａのような演算子である。
【００６６】
上記の翻訳処理はルートノードを飛ばして、命令「ｃｌｅａｒ  ｒｏｏｔ．ｂｏｕｎｄｉｎｇ−ｂｏｘ」を先ず発行する動作へと移ることによって開始され、そして、ルートノードを主題とするｄｏ＿ｎｏｄｅ（ｒｏｏｔ）を呼び出す動作を行う。
【００６７】
更なる最適化の実行として、クリップされる形状の「クリッピングスタック」を利用することもできる。描画スタック上の中間結果ではないグラフィック要素の組合わせ動作は、クリッピングスタックの全てのクリッピング形状の共通部分にクリップされる。これは描画演算の効率を向上させる。従って、例えば「ｌｏａｄ  ｎ．ｏｐｅｒａｎｄ」  又は「ｎ．ｏｐｅｒａｔｉｏｎ  ｎ．ｌｅｆｔ−ｏｐｅｒａｎｄ」等のグラフィック要素にかかる命令が生成されたときはいつでも、オペランドがクリップされるべき状態に対応する状態にクリッピングスタックを置く必要のある「ｐｕｓｈ  ｃｌｉｐ」又は「ｐｏｐ  ｃｌｉｐ」命令によって行うのがよい。
【００６８】
＜３＆４．バウンディングボックスの決定と、バウンディングボックスの最小化＞
上記に於ては、それぞれのグラフィック要素が観念的に無限に広がるものと仮定した。明らかに、２つの無限のグラフィック要素を合成するためには、無限の時間でないとしても、膨大な時間がかかる。バウンディングボックスを使用する技術は、それぞれの合成処理の対象となる画素数を大幅に減らす為に利用される。バウンディングボックス最小化処理は、最終画像を作るために必要なそれぞれのグラフィック要素の最小領域部分を探すために設計されたものである。バウンディングボックス最小化は、合成する画素数を更に最小化するために、エクスプレッションシンタックスツリーのそれぞれの内部ノードの最小領域を探す役割をも果たす。更に、バウンディングボックス最小化は、最終画像に対して寄与しないエクスプレッションシンタックスツリーのリーフ、または、全ての部分木を検知する。エクスプレッションツリーによって表現される、完全にクリップアウトされたピクチャー表現成分を削除する処理は、「カリング（ｃｕｌｌｉｎｇ）」と呼ばれる。バウンディングボックス最小化処理の結果は、それぞれのノードに、そのノードに対応する画像を作成しているときに作画者が必ず塗潰さなければならないバウンディングボックスを与える為のものである。反対に、バウンディングボックスは描画スタックへ記憶したり読み出したりできる唯一の領域であるため、作画者は画像を作成しているときに、決してバウンディングボックスの外側を塗ってはならない。
【００６９】
つぎに、図１５から図１８を参照にして、ボックス最小化処理の簡単な例を説明する。図１５は、例えば下記の文から形成される画像を示す図である。
【００７０】
【表４】
0003618839.tif 000006
【００７１】
この文の集合のエクスプレッションツリーを図１６に示す。
【００７２】
バウンディングボックス最小化は、２つのパス上で行われる。第１のパスはエクスプレッションツリーの深さ優先ポスト順横断である。この第１のパスにおいて、それぞれのノードの「自然な」バウンディングボックスが決定される。リーフでは、これがグラフィック要素のバウンディングボックスとなる。内部ノードでは、左右の部分木のバウンディングボックスは現ノードの合成演算に対応する方法で組合わせられる。この組合わせを表５に示す。
【００７３】
【表５】
0003618839.tif 000007
【００７４】
つぎに図１７を参照にして、上記の文と図１６のエクスプレッションツリーに関連させながらこの処理の例を示す。上記の文で描画される画像の第１の部分は文字Ｔ２０に対応するグラフィック要素である。この描画はページ２１で起こり、あらかじめ定義された空間、つまりページ２１に置かれる走査変換された部分Ｔの唯一の部分である「バウンディングボックス」２２の内部でしか起こらない。つぎの文（７）は、現在のページ画像を文字Ｅ２４に対応するグラフィック要素と組合わせる。この場合も、この文字はあらかじめ決められたバウンディングボックス２５を持つ。この２つの文字ＥとＴはｏｖｅｒ演算子２６を使用して組合わせられる。従って、ｏｖｅｒ演算子２６のノードと共に記憶されるバウンディングボックス２７は、２つのバウンディングボックス２２と２５の組合わせである。バウンディングボックス最小化ルーチンが深度優先ポスト順のエクスプレッションツリー横断をするので、与えられたノードの子孫ノードは、現在のノードがビジットされるまえにビジットされ、全てのリーフノードを先にビジットする。それぞれのリーフノード２８から３２にとって、描画されるべきグラフィック要素のバウンディングボックスは図示のとおりに、先ず計算される。リーフノードのバウンディングボックスの計算に続いて、内部ノードのバウンディングボックスが計算される。
【００７５】
内部ノード２６のバウンディングボックス２７を計算した後、バウンディングボックス２７と２８がｏｖｅｒ演算子を再度用いて組合わせられて３４となる。同様に、バウンディングボックス３５は、バウンディングボックス２９と３４をｏｖｅｒ演算子３７を用いて組合わせて作られたものである。
【００７６】
図４に示されるように、２つのグラフィカルオブジェクトＡとＢがｏｖｅｒ演算子を用いて組合わせられた場合、結果として得られる画像はＡがＢの上位にあるＡとＢの組合わせである。従って、バウンディングボックスはＡとＢの組合わせ領域上にまで広がることが要求される。「ｉｎ」演算子を用いたＡとＢの組合わせは、画像のＡとＢがオーバーラップする部分に対してのみ定義される。よって、その組み合わせ領域のバウンディングボックスは、ＡとＢの２つのバウンディングボックスの共通部分である。
【００７７】
ノード３９で２つのバウンディングボックス３０と３５はｉｎ演算子を用いて組合わせられ、その結果、バウンディングボックス４０は２つの領域３０と３５の共通部分となる。
【００７８】
ノード４１では、２つのバウンディングボックス３１と３２がｏｕｔ演算子を使用して組合わせられる。図１７に示すとおり、ノード４１におけるバウンディングボックス４２はバウンディングボックス３２と同じものとなる。最後にノード４３において、バウンディングボックス４０と４２がｏｖｅｒ演算子を用いて組合わせられる。ノード４３におけるバウンディングボックス４４は、２つのバウンディングボックス４０と４２を一体にしたものである。こうして、バウンディングボックス判定の第１段階を完了する。図１７から分かるように、バウンディングボックス処理は、演算子を利用して複合した結果の領域によって決定される合成されたバウンディングボックスの大きさを持つ、組合わされた２つのグラフィック要素のバウンディングボックスを決定する処理を含む。
【００７９】
バウンディングボックス最小化の第２段階つまりパスは、深さ優先プリオーダーのシンタックスエクスプレッションツリーの横断を含む。第２のパスでは、それぞれの内部ノードの子孫のバウンディングボックスが親のバウンディングボックスによって重ねられる。新しい子のバウンディングボックスがその子孫のバウンディングボックスへ重ねたり、最小化に使用することができるように、この処理は繰り返し行われる。つぎに図１８を参照して、この処理の例を説明する。図１８において、図１６と図１７と同じエクスプレッションシンタックスツリーを示す。プレオーダーな横断は、先ず現在のノード、そしてその左右の子へのビジットを行う。従って、ノード４３から始めると、バウンディングボックス４４はバウンディングボックス４０はノード３９で重なり、変化は起こらない。バウンディングボックス４４はまた、バウンディングボックス４２と重なるが、変化は起こらない。そして、バウンディングボックス４０はリーフノード４５に記憶されているバウンディングボックス３０と重なる。この重なりの結果がバウンディングボックス４７である。
【００８０】
従って、最終画像で必要とされる画像又はグラフィック要素の唯一の部分は、古いバウンディングボックス３０ではなく、バウンディングボックス４７によって定義される部分である。これは、画像４７の部分が合成処理で必ず使用されなければならない全てのものあるであるために、合成時間を実質的に削減することになる。同様に、ノード３７では、バウンディングボックス４０はバウンディングボックス３５（図１７）と組合わせられ、削減された大きさのバウンディングボックス４８となり、結果として実質的な削減となる。そしてバウンディングボックス４８は、ノード５０でバウンディングボックス２９（図１７）と重なる。バウンディングボックス領域４８と２９の共通部分は空となり、ノード５０が最終画像を形成しないことを示す。従って、このノード（及び、もしあれば子ノード）はすべてのエクスプレッションシンタックスツリーから削除することができ、結果的に、ツリーを簡素な形態にすることができる。
【００８１】
そしてバウンディングボックス３４（図１７）はノード３６でバウンディングボックス４８で区切られ、削減された大きさのバウンディングボックス５１を創る。
【００８２】
バウンディングボックス４２はノード５２でバウンディングボックス３２（図１７）と組合わせられ、削減は行われない。そして、このバウンディングボックス４２はノード５３でバウンディングボックス３１（図１７）と重ねられ、以前のバウンディングボックス３１と比べて削減された大きさのバウンディングボックス５４を創る。
【００８３】
この処理は最終画像の部分を形成するために描画されるべき領域において、できれば実質的な削減が行われるように、エクスプレッションシンタックスツリーのそれぞれのノードについて行われる。更に、バウンディングボックスが空領域に削減された場所は、エクスプレッションシンタックスツリーのこれらの部分は最終画像部分を形成しないので、全ての部分木を削除することができる。
【００８４】
バウンディングボックスの大きさを更に縮小するために利用される更なる最適化は、オペランドの１つが不透明なオブジェクトの下にある時を検知することである。例えば、そのオペランドが「ｏｖｅｒ」オペランドで、右側のオペランドのバウンディングボックスが完全又は部分的に左側の不透明なオペランドのバウンディングボックスに覆い隠されているならば、右側オペランドのバウンディングボックスを削減又は削除することができる。例として、図３０にバウンディングボックス１０２を持つオブジェクトＡ１００とバウンディングボックス１０３を持つオブジェクトＢ１０１の２つオブジェクトを示す。また、図３１にオブジェクトＢが部分的にオブジェクトＡの不透明部分に覆われていることを示すＡｏｖｅｒＢの演算を示す。オブジェクトＢの相当の部分はオブジェクトＡの不透明部分の影に隠されているので、これに対応するバウンディングボックスのオブジェクトＡによって完全に覆われる部分を削減することができる。このことを図３２に視覚的に示す。図３２において、オブジェクトＢの為のバウンディングボックスの一辺１０５は１０６となり、バウンディングボックスが削減される。
【００８５】
この処理の実行の簡易な１つの形態は、不透明で、バウンディングボックス内が完全に塗りつぶされたグラフィック要素Ａの為のエクスプレッションツリーのそれぞれのリーフノードを確認することである。この場合、バウンディングボックスＢはバウンディングボックスＡによって完全に覆い隠されるかどうかによって削減もしくは削除することができる。
【００８６】
＜５．クリップ経路の検出、及びクリップノードのラベリング＞
図４から分かるとおり、もし「ｉｎ」又は「ｏｕｔ」演算が完全に不透明な右オペランドによって行われたとすると、その効果は左のオペランドが右オペランドの境界線にクリップされた物と同じ効果である。「ｉｎ」演算では、効果は右オペランドの内側にある左オペランドの部分を示すことだけであり、「ｏｕｔ」オペランドでは、その効果は右オペランドの外側にある左オペランドの経路を示すことだけである。右オペランドの境界線が分かっているとすると、これら「ｉｎ」及び「ｏｕｔ」演算は組合わせではなく、クリッピングによって行われる。
【００８７】
この処理の簡単な例を図１９から図２２に示す。先ず図１９において、実行したい演算は「円中の四角形」である。ここで、「四角形」とはグラフィック要素６０を指し、「円」はグラフィック要素６１を指す。
【００８８】
この処理を実行するための通常の組合わせ方法を図２０に示す。図２０において、円６１に対応するグラフィック要素はロードされ画像平面６２上に表される。続いて、図２１に示すように、画像６２（図２０）は、グラフィック要素６０からの色データ情報を持つ円６３を創るための、四角形グラフィック要素に対する台紙として使用される。
【００８９】
図２２に、図１９の動作を行う更に効果的な方法を示す。この場合、グラフィック要素６０は、最終出力６４を作成するために、グラフィック要素６１の境界線に対してすぐにクリップされる。
【００９０】
合成とクリッピングのどちらがコンピュータ時間と必要メモリ空間の面でより効果的な方法であるかということは、いつも明らかなわけではない。しかしながら、下記の観察は注目するに値するものである。
１．  不透明のグラフィック要素が右オペランドであるときに、グラフィック要素が「ｉｎ」演算の左オペランドとして使用されるならば、クリッピングは左側のオペランドの可視部分の選択と、それらを合成することのみを含む。反対に合成は、現在の絵を保存したり、右側オペランドのグラフィック要素全体を描画したり、左側オペランド全体を合成したり、記憶された絵を最終的に合成し直す動作を含む。
２．  画像をクリッピングすることにより、合成されるべき画素データの量を大幅に削減すると共に、合成処理以前に生成される画素データの量を減らすことができるので、多大な節約がなされる。
３．  クリッピングオブジェクトが非常に複雑であるため、クリップされるべきオブジェクトをクリッピングオブジェクトに重ねるための総計算が、削減した合成処理の利益に値しないときがある。クリッピングオブジェクトが、小サイズのテキストや、非常に複雑な経路で構成されているときに、このようなことが起こる。
【００９１】
なお、上記の任意のエクスプレッションツリーにおけるクリッピングによる最適化の実施において、クリッピング、つまり、完全に不透明な右オペランドの「ｉｎ」又は「ｏｕｔ」、又は、完全に不透明な左オペランドの「ｒｉｎ」又は「ｒｏｕｔ」は全ての二項合成演算子に分配される（つまり、これらの演算子が２つの題目を持っている。）従って、完全に不透明なグラフィック要素Ｃが与えられているとすると、全ての二項合成演算子ｏｐについて、下記の関係が成り立つ。
（ａ  ｏｐ  ｂ）  ｉｎ  ｃ  ＝  （ａ  ｉｎ  ｃ）  ｏｐ  （ｂ  ｉｎ  ｃ）      式１
このクリッピング処理は、全ての単成分演算子にも分配されており、不可視領域を、可視領域にマッピングする。この後者の場合が考慮されることはまれで、特殊ケースとして扱われる。
【００９２】
クリッピングの例を、図２３と図２４を参照にして説明する。図２３はエクスプレッションツリー６５の部分の合成処理の例を示す図である。このエクスプレッションツリー６５の部分は、対応する機械命令リスト６６にコンパイルされる。このリスト６６は現在の画像をスタック上へプッシュする動作（ｐｕｓｈ）と、不透明な右側オペランドをアキュムレータへ描画する動作（ｌｏａｄ  Ｐ）と、左側のオペランドを「ｉｎ」演算子を使用して合成する動作（ｉｎ  Ｂ）と、保存された絵を合成しなおす動作（ｒｏｖｅｒ  ｐｏｐ）とを含む。
【００９３】
図２４は、右側のオペランドが不透明なオブジェクトである場合に、合成ではなくクリッピングをする処理を説明する図である。この場合、図２３のエクスプレッションツリー６５は、例えば６８のような（図２３）「ｉｎ」又は「ｏｕｔ」演算子を用いて、グラフィック要素を不透明なグラフィック要素にクリップする場合を全てロケートするために先ず実施される。それぞれの場合、これは特殊ノードインディケーター６９によって置き換えられ、クリッピングオブジェクトの境界線はばらばらのクリップリスト７０に置かれる。新しいエクスプレッションツリー６７が完成すると、コード列７２が結果としてできる。このコード列に於て、クリップリスト７０に要素１として記憶された境界Ｐに対応するクリップオブジェクトは、Ｐへのクリッピングを含むその他の命令の前に、描画リストにおける「クリップ」命令として配置される（ｃｌｉｐ  Ｐ，  １）。その他の命令のすぐ前に、境界Ｐに対応するクリップリストの要素１はクリッピングスタックへとプッシュされる（ｐｕｓｈｃｌｉｐ  １）。そして、Ｂはクリッピングスタック中の全ての境界の共通部分を通してで描画され（ｏｖｅｒ  Ｂ）、クリッピングスタックの先頭のオブジェクトはポップされ、命令列は図２３に示されているように続けられる。
【００９４】
従って、下記の実施構想が考えられる。
【００９５】
１．  エクスプレッションツリーのポインタのワーキングセットは、上記の方法で変換することのできる経路のために検索される。経路又はオブジェクトが見つかると、それはワーキングツリーポインタの集合から除かれ、クリップリストと呼ばれる配列に入れられる。この配列へのインデックス（クリップＩＤ）は、最適化がｉｎまたはｏｕｔ演算の結果であるかどうかの記録に加えて、現在のノードへ記録される。
【００９６】
２．  エクスプレッションツリーを繰り返すとき、クリップＩＤによるクリップを必要とするエクスプレッションツリーの後続する部分のリーフノードを付加することができるように、クリップリスト上でクリップオブジェクトに変換された全てのグラフィック要素のクリップＩＤの動きを追うことが必要である。始めにクリップされた部分木はどれでもクリッピングの輪郭へ変換するのに適する部分を含むため、クリップＩＤのスタックを保存する必要がある。クリッピングの輪郭に変換すべきグラフィック要素を見つける時はいつでもそのクリップＩＤをスタックへプッシュすることができ、そしてクリップされた部分木は横断され、これに応じて、スタックの先頭のクリップＩＤをポップすることができる。横断中にリーフノードに当たったときは、その時にスタックに存在する全てのクリップＩＤをそれに付加する。
【００９７】
３．  描画リストが生成されたときは、クリップへ変換されてクリップリストに記憶されたそれぞれのグラフィック要素が使用される前に（例えばプログラムの始めなど）、そのグラフィック要素の生成の為に必要な「ｃｌｉｐ」命令が生成される。
【００９８】
４．  描画時間「ｃｌｉｐ  ｓｔａｃｋ」は、様々な合成命令を取り囲む「ｐｕｓｈ  ｃｌｉｐ」と「ｐｏｐ  ｃｌｉｐ」命令によって操作される。グラフィカルオブジェクトが合成されるときは、同時にクリップスタック中の全てのクリップオブジェクトへクリップする。従って、命令の描画リストの生成に当たっては、グラフィック要素が合成されるときのクリップスタックの状態を追わなければならない。もし、このクリップスタック状態がグラフィカルオブジェクトによって要求される状態になければ、クリップスタックを要求される状態にするために、命令を生成しなければならない。不可視画素を可視画素へ変換する単項演算子については、それらが利用されるときに追加のクリッピングが必要となる。つまり、演算子をグラフィック要素の可視部のみに応用し、不可視のクリップされた領域の状態をそのまま残すことが必要である。
【００９９】
上記のクリッピング処理に加えて、グラフィック要素はそれらのバウンディングボックスが最小化されたことに起因する、更なるクリッピングを要求することができることは言うまでもない。
【０１００】
＜２．単項最適化の実施＞
命令集合は、Ｍによって定義されるマッピングに対応して、特定のグラフィック要素の色を変化させるための命令（ｃｍａｐ  Ｍ）を供給する。
【０１０１】
時々、ページ記述言語において利用できる色マップ演算は、描画中ではなく、エクスプレッションツリー段階で実施することができる。例えば、色マップを用いてグラフィック要素の色を変えることを要求されたとすると、描画処理が行われる前に要素の色を変えることが可能になり、従って、色マップ演算をエクスプレッションツリーから除くことを可能にする。しかし、時折、色マップ演算中にグラフィック要素の色がその透明度、つまりαチャンネル値と反応することがある。色マップ演算をエクスプレッションツリー段階で適用することができる否かを決定するために、この色マップ演算を慎重に分析しなければならない。
【０１０２】
また、グラフィック要素の色を考慮すると、どのグラフィック要素も簡略化することができる。例えば、図３３を参照にすると、普通は１０８で示されるグラフィカルオブジェクトは、色が混ざり合った複雑な形態を持つ領域１０９と、一定の色混合である第２領域１１０とを含んでもよい。上記で概略説明したバウンディングボックス最適化処理は、領域１０９を囲むことのない境界を持つ最適化されたバウンディングボックス１１１を作るかも知れない。従って、対応するエクスプレッションツリーを評価するときに、オブジェクト１０８の色を領域１１０の一定色に相当する色へ変えることができる。
【０１０３】
＜６．最適化＞
エクスプレッションツリーにおいて、異なる形態の最適化が可能である。まず、上述したとおり、空ボックスに最小化されたバウンディングボックスを持つエクスプレッションツリー部分は、エクスプレッションツリーから削除することができる。
【０１０４】
演算子合成の数学的性質は、可能であればいつでもより無駄の多い演算をより効果的な演算に置き換えるように、エクスプレッションツリーを配置し直すために利用することができる。これらの代数学的性質は、結合性、可換性、及び様々な演算子の逆化を含む本質である。最適化処理はあらかじめ決められた順序どおりにツリーを横断し、それぞれのノードにおいて、最適化装置は数学的特徴から導きだされた規則のそれぞれの集合が現在のノードに適合するか否かをテストする。どの規則を応用すべきかを決定するに当たって、数学的特徴に応じてエクスプレッションツリーを更新することにより、エクスプレッションツリーの描画のコストのおおまかな進歩が評価される。与えられたノードのコストは、左部分木のバウンディングボックスの高さ（ｈ）と領域（ｈ  ×  ｗ）の線形の組合わせとして評価される。更に詳しくは、結合性の性質は、描画処理中に要求されるスタック深度を大幅に削減するために、エクスプレッションツリーを右へ傾けることに使用することもできる。可換又は逆演算子を応用してのノードの部分木の取り替えは、合成されるべき領域に関するコストが減少する場合に限り、応用するとよい。これはスタック深度を上昇させることになるが、これに対応して実行時間が減少する。
【０１０５】
エクスプレッションシンタックスツリーのそれぞれのノードは、バウンディングボックスの走査線数ｈと領域ｈｗとを記憶する。これらは画素を単位とし表される。従って、「Ａ  ｏｖｅｒ  Ｂ」などの共通の演算子のコストを決定するためには、下記の要素を評価する必要がある。
・  Ｃ１ｏｖｅｒは、単純なグラフィック要素に対して「ｏｖｅｒ」を実行するための、一走査線当たりのコストである、
・  Ｃ２ｏｖｅｒは、単純なグラフィック要素に対して「ｏｖｅｒ」を実行するための、一画素当たりのコストである、
・  Ｃ３ｏｖｅｒは、単純なグラフィック要素の組合わせによって構成される複雑なグラフィック要素に対して「ｏｖｅｒ」を実行するための、一画素当たりのコストである、
・  Ｃ４ｏｖｅｒは、複雑なグラフィック要素に対して「ｏｖｅｒ」を実行するための、一走査線当たりのコストである、
・  ｈは、境界Ａ内の走査線数である、
・  ｈｗは、境界Ａ内の画素数である。
【０１０６】
従って、総コストは下記のとおりである。即ち、
0003618839.tif 000008
となる。
【０１０７】
結合性質は、エクスプレッションツリーを傾けるために利用することができる。傾いたエクスプレッションツリーは、しばしば実行のための時間とメモリを削減する描画命令の対応する集合となる。図２５に、対応する右に傾いた部分７６を形成するためにエクスプレッションツリーの部分７５を右に傾ける例を示す。図２５に示される演算を実行するか否かを計算する式は下記のとおりである。
【０１０８】
0003618839.tif 000009
となる。ここで、ｆｏｖｅｒ（Ｚ）は、グラフィック要素Ｚの「ｏｖｅｒ」合成を行うコストである。
【０１０９】
Ｂのバウンディングボックスがいつも部分７５においてＹ以下であり、ほとんどの場合、複雑なグラフィック要素を合成することは単純なグラフィック要素を合成することよりも難しいため、この結合性の演算はほとんどの場合は、今までよりも速いか、同じ速さで描画するシンタックスエクスプレッションツリーを提供する。ツリーはポインタを７５から７６へ変えるだけで変更することができる。
【０１１０】
可換性のこれらの演算子に関して、可換性演算子のオペランドのいくつかを互換させることも有利である。例えば、図２６に示すように、「ｘｏｒ」演算子のオペランドは図では互換されている。互換するかどうかは左ツリーのコストと、右ツリーのコストによって決まる。従って、もし、
ｆｘｏｒ（Ａ）  ＞  ｆｘｏｒ  （Ｂ）                                  式３
ならば、オペランドは交換される。これは大抵は２つの領域ＡとＢを描画するのに要求される記憶装置の大きさに関係し、ポインタを図２６に示すように変更するだけで簡単に実施することができる。
【０１１１】
時々、いくつかの演算子をその逆演算子に交換しても便利である。例えば、図２７は「ｉｎ」演算子を、対応するポインタの交換動作によりその逆演算子「ｒｉｎ」に変換する処理を示す。２つの方法の提案されたコストの計算は、交換が行われるべきかどうかを決定する。下記の変換について、多数の他の最適化が可能である。
【０１１２】
【表６】
0003618839.tif 000010
【０１１３】
また、特に、含まれる部分木が「ｉｎ」又は「ｏｕｔ」演算子の右オペランド（又は同等の「ｒｉｎ」又は「ｒｏｕｔ」演算子の左オペランド）である場合は、応用可能な様々な他の変換がある。
【０１１４】
エクスプレッションツリーに対する上記全ての最適化及び変更は、ユーザーのポインタセットが代わることがないように使用中のポインタのセットに対して行われるため、エクスプレッションツリーを変更する必要のないときには、変化は検知されない。
【０１１５】
一度エクスプレッションツリーが最適化されると、既に説明したように、描画リスト命令を生成するためにそれを利用することができる。
【０１１６】
つぎに、図２８と図２９を参照して、エクスプレッションツリーの操作の更に複雑な例を開示する。エクスプレッションツリー８０の元の部分は、一連の中間コード命令に変換される。変換の第１の方法は、エクスプレッションツリー８１の対応する最適化された部分を形成するために図２８のエクスプレッションツリー８０の部分を最適化することだけである。ツリーに対して行われた最適化は、「ｉｎ」であるオペランド８３を「ｒｉｎ」８４へ変更する動作を含む。この演算子の変更はそのオペランドの結果的な順列を持ち、オペランドＰがルートが「ｏｖｅｒ」演算子８６である部分木オペランドより実質的に小さい場合の結果として起こるものである。そして、最適化されたエクスプレッションシンタックスツリー８１は、中間コード命令８７へと変換される。この最適化の論理的根拠は、ツリー８０は２つのプッシュと、ポップを必要とするのに対して、ツリー８１は１つづつしか必要としないことである。従って、ツリー８１に起因するより単純な命令集合は、実行速度が速く、また必要なメモリを少なくするようである。
【０１１７】
図２９は、クリッピングが利用されたときのエクスプレッションツリー８０の部分変形形式を示す。これは、図２８のグラフィック要素Ｐ８５が不透明なオブジェクトであって、その結果として、「ｏｖｅｒ」演算子８６によって生成されたグラフィック要素が不透明なグラフィック要素８５と「ｉｎ」演算子８３を使って組合わせられることとする。図１９から図２２を参照して説明したとおり、不透明なオブジェクトＰ８５に対するクリッピングを「ｉｎ」演算子の代わりに使用することができる。従って、Ｐの輪郭はクリップリストに８９として、オペランド８５に関連して使用される図２８の演算子８３と共に記憶される。
【０１１８】
クリッピング処理は、全てのほかの二項合成演算子（式１参照）に分配されるため、Ｐ８５へのクリッピングは図２８の演算子８６と９１へ分配することができる。その結果、リーフノード９２から９４のそれぞれが、クリップリストに記憶された輪郭８９に対してクリップする為にマークされることになる。
【０１１９】
結果として得られるエクスプレッションツリー９６は、最適化されたエクスプレッションツリー９７を形成するために最適化される。最適化されたエクスプレッションツリー９７は、（Ａ  ｏｖｅｒ  Ｂ）  ｏｖｅｒ  Ｃ  ＝  Ａ  ｏｖｅｒ  （Ｂ  ｏｖｅｒ  Ｃ）の形態を持つ「ｏｖｅｒ」演算子（表４に示す）のための結合規則の繰り返し実施によって、エクスプレッションツリー９６から形成される。
【０１２０】
そして、最適化されたエクスプレッションツリー９７は、中間命令９８を生成するために利用される。命令リスト８７（図２８）を命令リスト９８（図２９）と比べると、リスト８７は、Ｐをオペランドとする「ｒｉｎ」命令を対象とする前に、Ｂ１，Ｂ２，Ｂ３の全てのロードや合成に加えて、アキュムレータの現在の内容をスタックへプッシュするプッシュ命令を含んでいることが分かる。そして、この演算結果はスタックの先頭と（「ｒｏｖｅｒ  ｐｏｐ」命令により）合成される。第２の命令集９８において、クリップリストは最初に輪郭Ｐと共にロードされ、そして、Ａは現在のアキュムレータの内容と合成され、輪郭Ｐをクリップスタックへプッシュし、続いて、クリップスタックの先頭にある輪郭Ｐを通してＢ１，Ｂ２，Ｂ３の合成を行う。そして、クリップスタックの先頭は、Ｃがアキュムレータの残りの内容に合成される前にポップされる（「ｐｏｐｃｌｉｐ」命令）。命令列９８は命令列８７よりも実際的にはより効果的なようであり、結合性演算子の使用を合成する代わりにクリッピングすることによって実行速度が早められる。
【０１２１】
上述の通り、エクスプレッションシンタックスツリーから作られる命令列は、ソフトウエア又はハードウエアベースの機器での実行に用いられる。例として、ハードウエアベースのアプローチを、図３４を参照にして説明する。図３４に、例えば表３にあるような命令列を実行することのできる、一例であるハードウエア構造物１２０を示す。ハードウエア構造物１２０は、例えば、Ｍｏｒｇａｎ  Ｋａｕｆｍａｎｎ  Ｐｕｂｌｉｓｈｅｒｓ  Ｉｎｃ．から１９９０年に出版されているＪｏｈｎ  Ｈｅｎｎｅｓｓｙ  とＤａｖｉｄ  Ｐａｔｔｅｒｓｏｎ共著の「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  −  Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ」の第３章から第８章のような、標準的テキストに示されている標準的なコンピュータ構造技術を用いることにより実現することができる。
【０１２２】
ハードウエア構造物１２０は、標準タイプの入力／出力インターフェイス１２３を使ってハードウエア構造物１２０とインターフェイスする、標準的な外部コンピュータシステム１２５の制御下において作動するように設計されている。
【０１２３】
上記のとおり、命令列は通常、走査線順にソートされ、アクティブリストは現走査線について外部コンピュータシステム１２５によって維持される。ハードウエア構造物１２０において、ある特定の現在アクティブな走査線の為の命令列は入力／出力インターフェイス１２３を介して外部コンピュータシステム１２５から命令記憶器１２１へロードされ、命令列に要求されるグラフィック要素はメモリ記憶器１２２へクリップリストに加えてロードされる。制御部１２６は活発化され、命令記憶器１２１から命令を読み始め、そして、再び標準技術を使用して、制御部１２６内に記憶されたマイクロプログラムされたメモリによって、命令列の実行を開始する。
【０１２４】
アキュムレータ１２８は一走査線分の色情報及び透明度情報を記憶するのに充分な記憶空間を持つ。スタック記憶空間１３０は、ある一行でスタックが成長できる最高深度を表わす、あらかじめ決められた最高数の走査線を記憶するだけの充分な空間を持つ。
【０１２５】
命令列中の「ｐｕｓｈｃｌｉｐ」命令に制御部１２６が当たる度に、メモリ記憶器１２２中のクリッピングリスト内に記憶された適切なクリッピングオブジェクトがその時のクリッピングスタック１３２の先頭の内容に重ねられ、その結果が新しいクリッピングスタック１３２の先頭の構成要素として記憶される。「ｐｏｐｃｌｉｐ」命令に当たると、クリッピングスタック１３２のその時の先頭がポップされる。
【０１２６】
それぞれの合成命令については、制御部１２６は、２つの画素色及び不透明さ情報列に対して表１の合成演算を実施する合成部１２７の演算を制御する。２つの情報列のうち、第１の列はアキュムレータ１２８からのもので、第２の列はスタック記憶空間１３０からのものである（必要時）。制御部１２６は、クリッピングスタック１３２のその時の先頭要素からの画素列を合成する境界線を決定する。合成部１２７の結果の色と透明度の出力は１３１を介してアキュムレータ１２８へフィードバックされる。
【０１２７】
一旦命令列が完了すると、制御部１２６は、現在の走査線のためにアキュムレータ１２８から結果を読みだすコンピュータシステム１２５に通知し、その結果を望むとおりに出力又は記憶する。
【０１２８】
上記の発明の実施の形態は、コンピュータグラフィックスや、アルゴリズムや、データ構成や、コンピュータ構成や、コンパイラ記述の技術者にとって最大限に明確に理解しやすいような形態で表現されたものである。また、種々の最適化が可能であることは言うまでもない。例えば、ツリー横断の繰り返しの使用は、テール繰り返し、又は維持バックポインタなどの公知の方法を用いることにより削除することができる。
【０１２９】
更に、ページ記述言語などの標準プログラミング言語において、多様な設備を手に入れることが可能である。これらの設備は通常、言語によって異なるため、特定の言語の実際的な詳細については仮定していない。当業者はページ記述言語による上記の実施の形態を実施することが可能であることは言うまでもない。
【０１３０】
上記の説明は好適な実施例の動作の説明を含んでなされたがこれは発明の範囲を限定するものではない。発明の範囲は以下の請求項によってのみ限定される。関係分野の当業者には、発明の精神と範囲を越えない程度で、上記の説明から多数の変形例が可能であることが明らかとなるであろう。
【０１３１】
以上述べた様に上記実施の形態によれば、以下に示すような効果が得られる。即ち、
１．  グラフィック要素とそれらの組合わせは言語のデータタイプであり、グラフィック要素の任意の組合わせが可能である、
２．  グラフィック演算子はグラフィック要素をそのオペランドとして取り、２つの新しいグラフィック要素またはそれらの組合わせを評価する、
３．  グラフィカルオブジェクトが関わる演算子のタイプ制限を条件として、グラフィカルオブジェクトは、他の標準的言語データタイプと同じ方法で使用される（例えば、除算演算子は数学的なオペランドのみを演算するが、課題演算子はどの種類のオペランドにも使用することができる）、
４．  全てのグラフィック要素と、グラフィック演算子を利用したグラフィック要素の組合わせ結果は、更なるグラフィック演算に適したオペランドである、
５．  ページ記述言語の実行によって生成されたある特定のグラフィック要素の描画による出力のために、画像を生成することができる。
【０１３２】
なお、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。また、本発明はシステム或は装置にプログラムを供給することによって達成される場合にも適用できることは言うまでもない。この場合、本発明に係るプログラムを格納した記憶媒体が、本発明を構成することになる。そして、該記憶媒体からそのプログラムをシステム或は装置に読み出すことによって、そのシステム或は装置が、予め定められた仕方で動作する。
【０１３３】
【発明の効果】
以上説明したように本発明によれば、グラフィックプログラミング言語の解釈処理においてエクスプレッションツリーが好適に変更され、画像の実行効率が向上する。
【０１３４】
【図面の簡単な説明】
【図１】２つの単純なグラフィック要素を表す図である。
【図２】２つの単純なグラフィック要素を表す図である。
【図３】グラフィック要素の合成を表す図である。
【図４】様々な合成演算子と、最終的に得られる出力を表す、発明の実施の形態にかかる図である。
【図５】第１の記述のエクスプレッションツリー（ｅｘｐｒｅｓｓｉｏｎ  ｔｒｅｅ）の構成を示す図である。
【図６】第１の記述のエクスプレッションツリー（ｅｘｐｒｅｓｓｉｏｎ  ｔｒｅｅ）の構成を示す図である。
【図７】第１の記述のエクスプレッションツリー（ｅｘｐｒｅｓｓｉｏｎ  ｔｒｅｅ）の構成を示す図である。
【図８】第１の記述のエクスプレッションツリー（ｅｘｐｒｅｓｓｉｏｎ  ｔｒｅｅ）の構成を示す図である。
【図９】第１の記述のエクスプレッションツリー（ｅｘｐｒｅｓｓｉｏｎ  ｔｒｅｅ）の構成を示す図である。
【図１０】第１の記述の合成処理を示す図である。
【図１１】第１の記述の合成処理を示す図である。
【図１２】第１の記述の合成処理を示す図である。
【図１３】第１の記述の合成処理を示す図である。
【図１４】第１の記述の合成処理を示す図である。
【図１５】第２の記述の結果として得られる最終画像を示す図である。
【図１６】第２の記述のエクスプレッションツリーを示す図である。
【図１７】エクスプレッションツリー上で行われるバウンディングボックス（ｂｏｕｎｄｉｎｇ  ｂｏｘ）処理を示す図である。
【図１８】更なるバウンディングボックス最小値化を表現する、発明の実施の形態にかかる図である。
【図１９】「ｉｎ」演算子を使用して組合わされる２つのグラフィック要素を示す図である。
【図２０】図１９のグラフィック要素の第１の組合わせ方法を示す図である。
【図２１】図１９のグラフィック要素の第１の組合わせ方法を示す図である。
【図２２】図１９のグラフィック要素の第２の組合わせ方法を示す図である
【図２３】エクスプレッションツリーを対応する「中間レベル」命令に変換する第１の方法を示す図である。
【図２４】エクスプレッションツリーを対応する命令に変換する第２の方法を示す図である。
【図２５】エクスプレッションツリー上において実施される第１の最適化を示す図である。
【図２６】エクスプレッションツリー上において実施される第２の最適化を示す図である。
【図２７】エクスプレッションツリー上において実施可能な第３の最適化を示す図である。
【図２８】エクスプレッションツリーの部分の最適化の第１の方法を示す図である。
【図２９】エクスプレッションツリーの部分の最適化の第２の方法を示す図である。
【図３０】２つのグラフィック要素と、それらに対応するバウンディングボックスを示す図である。
【図３１】図３０の２つのグラフィック要素を合成する図である。
【図３２】図３０のグラフィック要素の一方の削減されたバウンディングボックスを示す図である。
【図３３】発明の実施の形態で行われる色最適化を表す図である。
【図３４】発明の実施の形態にかかる、命令を実施するコンピュータ構造を示す図である。
【図１】
0003618839.tif 000011
【図２】
0003618839.tif 000012
【図３】
0003618839.tif 000013
【図４】
0003618839.tif 000014
【図５】
0003618839.tif 000015
【図６】
0003618839.tif 000016
【図７】
0003618839.tif 000017
【図８】
0003618839.tif 000018
【図９】
0003618839.tif 000019
【図１０】
0003618839.tif 000020
【図１１】
0003618839.tif 000021
【図１２】
0003618839.tif 000022
【図１３】
0003618839.tif 000023
【図１４】
0003618839.tif 000024
【図１５】
0003618839.tif 000025
【図１６】
0003618839.tif 000026
【図１７】
0003618839.tif 000027
【図１８】
0003618839.tif 000028
【図１９】
0003618839.tif 000029
【図２０】
0003618839.tif 000030
【図２１】
0003618839.tif 000031
【図２２】
0003618839.tif 000032
【図２３】
0003618839.tif 000033
【図２４】
0003618839.tif 000034
【図２５】
0003618839.tif 000035
【図２６】
0003618839.tif 000036
【図２７】
0003618839.tif 000037
【図２８】
0003618839.tif 000038
【図２９】
0003618839.tif 000039
【図３０】
0003618839.tif 000040
【図３１】
0003618839.tif 000041
【図３２】
0003618839.tif 000042
【図３３】
0003618839.tif 000043
【図３４】
0003618839.tif 000044