JP2005044346A - 画素のランのための合成計算の最適化 - Google Patents
画素のランのための合成計算の最適化 Download PDFInfo
- Publication number
- JP2005044346A JP2005044346A JP2004190406A JP2004190406A JP2005044346A JP 2005044346 A JP2005044346 A JP 2005044346A JP 2004190406 A JP2004190406 A JP 2004190406A JP 2004190406 A JP2004190406 A JP 2004190406A JP 2005044346 A JP2005044346 A JP 2005044346A
- Authority
- JP
- Japan
- Prior art keywords
- layers
- run
- pixel
- layer
- buffer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/503—Blending, e.g. for anti-aliasing
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
- Facsimile Image Signal Circuits (AREA)
- Color Image Communication Systems (AREA)
Abstract
【解決手段】ラスタスキャン法でレンダリングすべき画像レイヤの合成スタックを簡略化する方法である。2つ以上の画素にわたって動作可能であり、複数のレイヤを可変の透明度を有するレイヤに分離されるグループ毎に分割し、グループの最上の1つに対して、蓄積された貢献度を有する単一の等しいレイヤへ削減する。
【選択図】図6
Description
(i) 前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割する工程と、
(ii) 前記グループのうちの最上の1つに対して、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと削減する工程と
を備えることを特徴とする方法を提供する。
前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割する工程と、
前記グループのうちの最上の1つに対して、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと削減する工程と、
貢献度が計算され、前記ランにわたって色が一定でない各レイヤに対して、前記ラン中の各画素に対して画素値を生成する工程と、
前記生成された画素値を組み合わせることによって前記画素のランを生成する工程と
を備えることを特徴とする方法を提供する。
(a) 前記合成スタックを簡略化する工程であって、当該工程は
(i) 前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割する工程と、
(ii) 前記グループのうちの最上の1つに対して、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと合成することで削減する工程と
により行われ、
(b) ボトムアップ式で最上の可変透明度レイヤを含むこれより下方の全てのレイヤを合成する工程と、
(c) 前記工程(a)及び(b)の結果を合成する工程と
を備えることを特徴とする方法を提供する。
(a) 前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割する工程と、
(b) 各前記グループ内のレイヤのトップダウン合成を行なって、対応するグループ画素値を判定することによって、前記元のレイヤを前記可変透明度レイヤにより分離されるグループ画素値から構成される削減数へと分解する工程と、
(c) グループの前記貢献度が所定の閾値100%内に入る場合に全ての可変透明度レイヤ及び前記閾値グループの下方の各グループを貢献しないものとして無視することができるように前記それぞれのグループの貢献度を評価する工程と、
(d) 前記ラン中の画素ごとに、貢献するグループ及び可変透明度レイヤのボトムアップ合成を行なって、対応する画素値を判定する工程と
を備えることを特徴とする方法を提供する。
(a) 前記レイヤのうちの最上の1つで開始し、第1のバッファを使用して第1の可変透明度レイヤを含むこれより上方のレイヤに対してトップダウン合成を行なう工程と、
(b) 第2のバッファを使用して次の可変透明度レイヤを含むこれより上方の更なるレイヤのトップダウン合成を行なう工程と、
(c) 前記第2のバッファに対して前記第1のバッファを合成し、その合成結果を前記第1のバッファに格納する工程と、
(d) 前記工程(b)及び(c)を繰り返して前記レイヤのうちの残りのレイヤを合成する工程と
を備えることを特徴とする方法を提供する。
1.序論
1.1.座標空間
1.2.グラフィックオブジェクト
1.3.グリフ
1.4.z−レベル
1.5.ストローキング
1.6.モーフィング
2.ドライバモジュール
2.1.スプライト
2.1.1.スプライト:変換行列
2.1.2.グラフィックオブジェクトとその深度
2.2.表示リスト
2.2.1.フレームレンダリング
2.2.2.グラフィックオブジェクト及びz−レベル
2.2.3.ローカル深度及び絶対深度
3.変換、モーフィング、及びストローキング
3.1.モーフィング
3.2.変換
3.3.稜線の生成
3.4.ストロークの稜線及びz−レベルへの分解
3.4.1.直線稜線のストローキング
3.4.2.曲線稜線のストローキング
3.4.3.結合のストローキング
3.4.4.同方向又は逆方向稜線結合のストローキング
3.4.5.経路の終了でのエンドキャップの生成
3.4.6.ストロークされた稜線とストロークされていない稜線との間のエンドキャップ
3.4.7.不透明なストロークに対するz−レベル割当て
3.4.8.透明なストロークに対するz−レベル割当て
3.4.9.ストローキング基本要素の変換
3.5.フィルタリング
3.6.稜線トラッキングパラメータの生成
3.6.1.直線稜線トラッキングパラメータの生成
3.6.2.2次ベジェ曲線トラッキングパラメータの生成
3.6.3.符号の判定
3.6.4.楕円弧トラッキングパラメータの生成
3.6.5.グリフ稜線トラッキングパラメータの生成
4.ソーティング
5.稜線処理
5.1.入出力
5.2.トップレベルの動作
5.3.アクティブ稜線トラッキング
5.4.稜線処理の例
5.5.稜線のアクティブ稜線への変換及び稜線持続性
5.5.1.静止稜線の持続性
5.6.アクティブ稜線処理
5.7.稜線のトラッキング
5.7.1.直線のトラッキング
5.7.2.2次ベジェのトラッキング
5.7.3.2次多項フラグメントのトラッキング
5.7.4.楕円弧のトラッキング
5.7.5.グリフのトラッキング
5.8.アンチエイリアシング及び交差メッセージ生成
5.8.1.グリフに対する交差メッセージの生成
5.9.交差メッセージの例
5.9.1.別の例
5.10.アクティブ稜線及び交差メッセージの再順序付け
6.z−レベル活動化モジュール
6.1.注目z−レベルの順序付けられた集合
6.2.z−レベル活動化モジュールにおける制御のフロー
6.3.z−レベルの活動化及び非活動化:ワインディングカウント
6.4.続注目z−レベルの順序付けられた集合
6.5.注目z−レベルの順序付けられた集合への新規のz−レベルの追加
6.5.1.注目z−レベルの順序付けられた集合のハードウェアでの維持
6.6.ランの処理
6.7.S−bufferのA−bufferへの変換:ワインディング規則
6.8.続ランの処理
7.合成モジュール
7.1.中間生成物
7.2.z−レベル塗りつぶし
7.3.基本的なフロー
7.4.グラフィカルな概要
7.5.貢献度計算
7.6.ボトムアップ合成
7.7.トップダウン合成
7.8.代替の合成手法
7.9.トップダウンの利点
8.画素生成
8.1.線形傾斜画素生成
8.2.放射傾斜画素生成
8.3.ビットマップ画像画素生成
9.画素抽出
9.1.入力データ
9.2.フレームバッファへの出力
9.3.ディスプレイへの直接出力
9.4.ハーフトーン処理
10.実現例
1.序論
本文書は、最小限のコンピューティングリソースを使用して2Dグラフィックオブジェクトをレンダリングするシステムであるシン・クライアントイメージングエンジン(TCIE)について説明する。このリソースレベルが適用される場合の例として、小型のディスプレイを備えた又は備えていない携帯型装置と、プリンタ及び複写機などのオフィス機器とがある。ハンドヘルドのコンピューティング装置には携帯電話機及びゲームが含まれる。TCIEシステム699のトップレベルの図が図56に示される。図56において、TCIEシステム699は処理モジュールのパイプラインとして構成されている。各モジュールについては、システム内をデータが流れる順序で説明する。各モジュールは、概念的に表示リストコンパイラ608とレンダリングエンジン610とに分けられる。表示リストコンパイラ608は所望の出力を説明する情報を用意し、レンダリングエンジン610はこの情報を使用して出力画像を生成する(例えば、表示装置又はフレームバッファへのレンダリング)。TCIEシステム699は、時間的に間隔の空いた一連の出力画像を生成するのに使用することができる。この出力画像を以降は「フレーム」と呼ぶ。TCIEシステム699の使用により、アニメーション(すなわち、「動画」)が出力ディスプレイ上で再生される効果が生まれる。
図56において、システム699の第1のモジュールはドライバモジュール615である。ドライバモジュール615は、グラフィックオブジェクトの集合及びこれらの情報を維持する。図34は、システム699により使用される空間を示す。図34は、まず、オブジェクト空間335に描かれたグラフィックオブジェクトを示す。次に、同グラフィックオブジェクトがグローバル論理空間336へと変換された状態を示す。更に、同グラフィックオブジェクトがレンダ空間337へと変換された状態を示す。最後に、同グラフィックオブジェクトが表示空間338へと変換された状態を示す。
システム699への入力は、グラフィックオブジェクトの集合と関連するメタデータとから成る。図16(c)は、ディスプレイへとレンダリングされたグラフィックオブジェクト171を示し、対応する構成要素は図16(a)及び図16(b)に示されている。グラフィックオブジェクトは、1つ以上の描画基本要素(新規の描画位置、直線、及び曲線)から成る順序付けられた集合により記述される2次元表示基本要素である。描画基本要素はグラフィックオブジェクトの輪郭の一部を記述する。各基本要素は1つ以上の座標と関連付けられている。新規の描画位置は、オブジェクトの原点からの絶対オフセットとして指定されても、あるいは、前の基本要素の終点に対する相対オフセットとして指定されても良い。新規の描画位置は単一の座標により記述され、直線は1対の座標により記述され、曲線は3つの座標のシーケンスにより記述される。直線は1対の座標を使用して線の始点及び終点を定義する。曲線は2次ベジェ曲線として実現される。第1の座標はベジェ曲線の開始を定義し、第2の座標は制御点を定義し、第3の座標はベジェ曲線の終点を定義する。ベジェ曲線は当業者には周知である。
表1
基本要素の型 座標(MOVETO_ABS以外は相対)
MOVETO_ABS 173 (0,0)141
MOVETO_REL 174 (40,−50)177
LINETO 157 (0,80)142
LINETO 158 (10,0)143
LINETO 172 (0,−50)144
LINETO 159 (30,0)145
LINETO 160 (0,50)146
LINETO 161 (100,0)147
LINETO 162 (0,−80)178
LINETO 163 (−30,−30)148
LINETO 164 (−80,0)149
LINETO 165 (−30,30)177
LINETO 166 (140,0)178
MOVETO_REL 175 (−30,40)176
CURVETO 168 (0,−20)150、その後(−20,0)151
CURVETO 167 (−20,0)152、その後(0,20)153
CURVETO 169 (0,20)154、その後(20,0)155
CURVETO 170 (20,0)156、その後(0,−20)176
1.3.グリフ
グリフは、特殊な型のグラフィックオブジェクトである。グリフは、常に表示空間へと直接描画されるという更なる制限を有する。グリフは、レンダリング中の形状が
(i)小さく、
(ii)ちょうど画素境界上に配置されるように設計されている
状況向けに設計されている。
z−レベルはグラフィックオブジェクトの稜線の部分集合により包囲されるディスプレイの一部がどのように彩色されるべきかを記述するのに使用される表示基本要素である。例えば、z−レベルは包囲された領域を単色で塗りつぶされた領域として記述することができるだろう。また、z−レベルには絶対深度が割り当てられるが、この絶対深度はどのz−レベルがどのz−レベルの上に出現すべきかを指定する整数値である。高い絶対深度を有するz−レベルは、低い絶対深度を有するz−レベルの上でレンダリングされる。
表2
−−−−−−−−−−−−−−−−−−−−−−−−−−
|描画基本要素 | 左z−レベル | 右z−レベル|
|−−−−−−−+−−−−−−−−+−−−−−−−|
|316 | 332 | なし |
|317 | 332 | なし |
|330 | 332 | なし |
|318 | 332 | なし |
|319 | 332 | なし |
|320 | 332 | なし |
|321 | 332 | なし |
|322 | 333 | なし |
|323 | 333 | なし |
|324 | 333 | なし |
|325 | 333 | 332 |
|327 | 334 | 332 |
|326 | 334 | 332 |
|328 | 334 | 332 |
|329 | 334 | 332 |
−−−−−−−−−−−−−−−−−−−−−−−−−−
z−レベルの書式は、単色、1色以上により記述される線形ブレンド、1色以上により記述される放射状ブレンド、又はビットマップ画像を含んでも良いが、これに限定されない。また、これらのz−レベル書式の全ては透明度(アルファ)チャネルをサポートする。図33のz−レベル333、332、及び334は、単色書式z−レベルを表現する。これらのz−レベルはパイプラインの大部分において不変のまま使用される。
描画基本要素はペン幅と関連付けることができる。ペン幅を有する描画基本要素は複数の稜線(稜線には幅がない)へと変換される。これらの稜線は、ペンストロークを表現する閉じた塗りつぶし形状を形成する。詳細については、変換、モーフィング、及びストローキングの表題の節を参照のこと。
モーフィングも従来技術において周知である。モーフィングは、2つのグラフィックオブジェクト用の描画基本要素の集合とグラフィックオブジェクトが2つの集合間の補間に従って描かれることを指定する比率とを供給することとして定義することができる。これは、モーフィング、ストローキング、及び変換モジュールの表題の節においても詳細に説明されている。
ドライバモジュール615については、処理する情報とどの情報をレンダリングパイプラインの残りの部分に渡すかという観点で考察する。ドライバモジュール615の役割は、描画基本要素の集合を編成することである。描画基本要素は、まず、上述のようにグラフィックオブジェクトへとまとめられる。
ドライバモジュール615は、入力の一部としてスプライトを受け入れる。スプライトは従来技術において周知であり、ドライバモジュール615において、スプライトは変換行列と、深度と、スプライトのコンテキスト内に存在するグラフィックオブジェクトのリストとを有する基本要素を参照する。スプライトは0個以上のグラフィックオブジェクトと0個以上の他のスプライトとを包含することができる。「包含する」は、スプライトの変換行列が当該スプライトを所有する全グラフィックオブジェクト及び全スプライトに適用されることを意味する。他の基本要素を包含するスプライトの概念は、それが包含する全グラフィックオブジェクト及び全スプライトの深度がそのスプライトにとって「ローカル」であることを意味する。グラフィックオブジェクトが他のグラフィックオブジェクト又はスプライトを含むことはない。
変換行列は従来技術において周知である。スプライトの変換行列は、スプライトが所有する全てのグラフィックオブジェクトに適用される。変換行列はスプライトに対してローカルの空間を定義する。図17(b)において、2つのスプライト及び2つのグラフィックオブジェクトが提供される。これらをレンダリングする方法はツリーにより記述される。スプライト185は、スプライト189及びグラフィックオブジェクト180の双方を包含する。すなわち、リンク188及び186は所有関係を表現する。スプライト189は第2のグラフィックオブジェクト182を包含する。
グラフィックオブジェクトの深度は、そのオブジェクトを包含するスプライトにとってローカルである。これは図31(a)から図31(c)により示される。図31(a)に示すレンダリングツリーでは、ノード294は別のスプライト296及びグラフィックオブジェクト302を包含するスプライトを表現する。所有関係は有向線295及び301によりそれぞれ示される。スプライト296は、それぞれ所有関係297及び300により示されるグラフィックオブジェクト298及び299を包含する。表4はこれら全ての基本要素のローカル深度を提供する。
表4
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
|ラベル|基本要素 |ローカル深度| 絶対深度|
|−−−+−−−−−−−−−−−−−−−−−+−−−−−−+−−−−−|
|294|スプライト | 2 | なし |
|296|スプライト | 2 | なし |
|298|グラフィックオブジェクト(円) | 1 | 3 |
|299|グラフィックオブジェクト(四角形)| 2 | 4 |
|302|グラフィックオブジェクト(三角形)| 1 | 2 |
|309|背景z−レベル | 1 | 1 |
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ローカル深度の概念は図31(a)のサブツリーの外観を見ることによって説明することができる。図31(b)はスプライト296の外観を示す(個別にレンダリングされるオブジェクト298及び299)。オブジェクト298はオブジェクト299よりも深度値が小さいので、オブジェクト298はオブジェクト299の下方に出現する。図31(c)は、グラフィックオブジェクト302及びスプライト296の外観を示す。オブジェクト302の深度値の方が小さいので、オブジェクト296の下方に出現する。スプライト296の子のローカル深度はローカル深度凡例304に従って保管される。
単一のフレームに対する全スプライト及び全グラフィックオブジェクトリスト(所有関係、ローカル深度、及び変換を含む)は表示リストと呼ばれる。表示リストは従来技術において周知である。ドライバモジュール615はツリーの形態で表示リストを維持する。このツリーは、所有関係の観点からスプライト及びグラフィックオブジェクトをまとめ、ローカル深度の観点から順序付けられる。図31(a)はこの構成も示す。例えば、スプライト294の子はローカル深度により順序付けられる。第1の子302は最低ローカル深度1にあり、次の子296はより高いローカル深度2にある。
アニメーションの各フレームにおいて、表示リストはディスプレイへとレンダリングされる前に修正されても良い。表示リストはフレーム間で保持される。
スプライトが複数のグラフィックオブジェクトを参照可能であるのと同様に、グラフィックオブジェクトは複数のz−レベルを参照することができる。これらのz−レベルの各々は、グラフィックオブジェクト内に深度を有する。例えば、図33(c)のグラフィックオブジェクトは、図33(b)に示すような深度を伴う3つのz−レベルを必要とする。
ドライバモジュール615内ではローカル深度が使用されるが、後続の各モジュールは絶対深度を必要とする。ドライバモジュール615は各z−レベルに絶対深度を割り当てる。
図56のモーフ/変換/ストローキングモジュール616は、レンダリング対象の描画オブジェクトの1つ以上の輪郭をまとめて定義するドライバモジュール615からの座標の1つ以上の順序付けられた集合を入力とする。座標の順序付けられた集合は、以下のものを含む追加のパラメータにより達成されても良い:
−モーフ率
−変換行列
−ストローク幅
−左側z−レベルへの参照
−右側z−レベルへの参照、及び
−ストロークカラーz−レベルへの参照
モーフ率、変換行列、及びストローク幅のパラメータは、グラフィックオブジェクトの輪郭を記述する座標の順序付けられた集合をディスプレイ上にどのように配置すべきかを記述する。その他のパラメータは、座標の順序付けられた集合により定義される輪郭内の表示画素に対する色、ブレンド、又はテクスチャを示すz−レベルへの参照である。
−グリフ位置、
−グリフ高さ/幅、
−グリフビットマップ、
−「オン」z−レベルへの参照(NULLの可能性有)
−「オフ」z−レベルへの参照(NULLの可能性有)、及び
−ステージ470においてパイプラインに入るグリフ記述
3.1.モーフィング
モジュール616がモーフオブジェクトに対応する座標の順序付けられた集合を受信する場合(すなわち、図46のステージ464=yes)、各座標の2つのバージョンがモーフ率パラメータと共に受信される。受信された座標の一方のバージョンは開始バージョンと呼ばれる。受信された座標の第2のバージョンは終了バージョンと呼ばれる。ステージ467において、モジュール616はモーフ率パラメータを使用して受信された各座標の単一の中間バージョンを補間する。例えば、図35(a)及び図35(c)は、モーフ「開始」形状及びモーフ「終了」形状をそれぞれ表現する座標の順序付けられた集合を示す。座標の順序付けられた両集合は、「論理」座標空間中の起点342で開始/終了するのが示されている。モーフプロセスの目的は、図35(a)の「開始」バージョンと図35(c)の「終了」バージョンとの間で補間することによって、図35(b)に示されるような形状の中間バージョンを生成することである。各座標のバージョン(「開始」及び「終了」)は、座標対の順序付けられた集合として提示される。この例では、339と346とが第1の対であり、それに続くのが、343と340の対、344と347の対、及び最後の対341と342である。モーフ率は各座標対からの中間バージョンを補間するのに使用される。モーフ率0が図35(a)の「開始」形状を表現するのに使用され、モーフ率1が図35(c)の「終了」形状を表現するのに使用される場合、モーフ率0.25は図35(b)に示す形状に対応するであろう。従って、モーフプロセスは出力として350、351、352、及び353により示される座標の順序付けられた集合を生成するであろう。
次に、図46のステージ468において、変換行列が各座標に適用される。変換行列により、座標(及び描画オブジェクト)の回転、スケーリング、及び/又は平行移動を指定することができる。この記述では、変換行列は「論理空間」から「レンダ空間」へと座標(及びそれが記述する描画オブジェクト)を変換するものとされる。
座標の順序付けられた集合がモーフィングされ(必要に応じて)、変換された後、図46のフローチャートの後続のステージ465において、座標の順序付けられた集合が稜線の順序付けられた集合へと変換される。ステージ465の達成方法の例は図15のフローチャートにより示される。この例では、座標が3つの型の描画基本要素のうちの1つの一部を形成可能であることを想定している。3つの型とは、直線、2次ベジェ曲線、及び新規の描画位置である。例では、どの型の描画基本要素が後続するか及び描画基本要素の終了にいつ到達するかを示すために追加の情報(例えば、タグバイト)が設けられることも想定している。
図46に戻って、処理の次のステップはステップ471において任意で選択されるストローキングステップ466である。ストローキングは、ある特定の太さのペンを使用して曲線及びベクトルの経路をたどる効果を再現できるように1つ以上の輪郭を生成するプロセスである。ストローキングの例は、図50(a)から図50(e)に示される。図50(a)は、ストローク対象の3本の稜線523の順序付けられた集合を示す。生成されたストローク輪郭524は図50(b)に示される。図50(b)は、ある特定のペン幅525で先端が円形のペンでストローク対象の3本の稜線の経路をたどったときの効果を示している。
図49(a)は、ストローク対象の直線稜線473の一例を示す。この稜線は開始座標474及び終了座標472により記述される。図49(b)は、直線稜線473をストローキングした所望の結果を示す。結果は左側稜線477及び右側稜線478から構成される。
−直線稜線の方向に対して90度反時計回りの方向を有し、
−ストロークのペン幅の半分に等しい長さの
左法線ベクトル479が生成される。
Xs_left=Xs+Xn Ys_left=Ys+Yn
Xe_left=Xe+Xn Ye_left=Ye+Yn
現在の稜線の座標から法線ベクトルを差し引くことによって右側ストローク稜線478が生成される:
Xs_right=Xs-Xn Ys_right=Ys-Yn
Xe_right=Xe-Xn Ye_right=Ye-Yn
3.4.2.曲線稜線のストローキング
図49(c)は、ストローク対象の曲線稜線483を示す。曲線稜線(2次ベジェ曲線又は2次多項フラグメント−QPF)は、始点480、制御点481、及び終点482により記述される。
Xs_left=Xs+Xn1 Ys_left=Ys+Yn1
左側ストローク稜線の終点(Xe_left,Ye_left)は、平行移動482により計算され、曲線稜線の終了座標(Xe,Ye)は第2の左法線ベクトル488(Xn2,Yn2)により計算される:
Xe_left=Xe+Xn2 Ye_left=Ye+Yn2
左側ストローク稜線の制御点494は2本の直線の交点を使用して計算される。第1の直線は左側ストローク稜線始点493を通り、曲線稜線始点480から曲線稜線制御点481まで延出する直線に平行である。第2の直線は左側ストローク稜線終点495を通り、曲線稜線終点482から曲線稜線制御点481まで延出する直線に平行である。
Xs_right=Xs-Xn1 Ys_right=Ys-Yn1
Xe_right=Xe-Xn2 Ye_right=Ye-Yn2
右側ストローク稜線の制御点504は、2本の直線の交点を使用して計算される。第1の直線は右側ストローク稜線始点503を通り、曲線稜線始点480から曲線稜線制御点481まで延出する直線に平行である。第2の直線は右側ストローク稜線始点505を通り、曲線稜線終点482から曲線稜線制御点481まで延出する直線に平行である。
(Xn1Xn2+Yn1Yn2)2<1/2(Xn1 2+Yn1 2)×(Xn2 2+Yn2 2)
である場合、曲線は鋭角である。
追加の曲線は、経路の稜線が結合する領域をストロークするために生成されなければならない。結合は入口稜線及び出口稜線を有するように定義される。図45(a)は、結合444を形成する2本の直線稜線を示す。稜線443は結合が終点を形成するので入口稜線であり、稜線445は結合が始点を形成するので出口稜線である。左側ストローク稜線446及び447と右側ストローク稜線448及び449は上述のプロセスを使用して生成されたものである。左法線ベクトルは、入口稜線462の終了及び出口稜線463の開始に対して判定されるであろう。左側を先に考察する。入口稜線453の終了を出口稜線454の開始と接続する結合に対する曲線の輪郭を生成する必要があるか否かを判定するための検査が行なわれる。成分(Xn1,Yn1)を有する左法線ベクトル462がストローク対象の入口稜線の終点に対して既知であり、且つ成分(Xn2,Yn2)を有する左法線ベクトル463がストローク対象の稜線の開始に対して既知である場合、曲線の輪郭を生成する必要性を判定するために以下の検査を使用することができる:
Yn1Xn2<Yn2Xn1である場合、曲線稜線を使用してストロークの左側の各稜線をリンクし、直線稜線を使用してストロークの右側の各稜線をリンクする。
−弧の始点及び終点は点453及び454であり、
−弧の半径は左側ベクトル462の長さであり、
−弧の中心は元の経路点444であり、且つ
−弧は始点から終点まで時計回りに進む(弧は結合の右側が処理されている場合には反時計回りに進むであろう)。
結合をストロークする技術の上記説明では、ストローク対象の結合を形成する2本の元の稜線が同じ又は反対の方向をいつ有するのかを示すための検査について述べた:
Yn1Xn2=Yn2Xn1
ここで、(Xn1,Yn1)はストローク対象の入口稜線の終了に対する左法線ベクトルであり、(Xn2,Yn2)はストローク対称の出口稜線の開始に対する左法線ベクトルである。
エンドキャップは、ストローク対象の閉じられていない経路の終端点に対して生成される。また、エンドキャップは入口稜線及び出口稜線の方向が反対の場合(上述のように)に稜線間の結合に対して生成されなければならない。
−弧は左側終点196で開始し、右側終点198で終了し、
−弧の中心は元の経路点193であり、
−弧の半径は左法線ベクトル194の長さであり、
−弧は円の周りを時計回りに移動する。
有効な左z−レベル参照及び/又は有効な右z−レベル参照(有効なストロークz−レベル参照に加えて)を有する経路をストロークする際に、これはストロークされた経路が塗りつぶし対象の閉じた領域の一部を形成することを示す。このような経路に対して、任意のエンドキャップに追加の2本の直線稜線を追加する必要がある。
Xknee=Xj+Xn_knee,Yknee=Yj+Yn_knee
図18(b)は追加の2本の稜線207a及び207bを示す。両稜線はknee点197で開始し、ストローク対象の元の稜線193の終端点で終了する。第1の追加の稜線207aは追加の左側のストロークされた稜線であり、第2の追加の稜線207bは追加の右側のストロークされた稜線である。z−レベル参照が左側のストロークされた稜線及び右側のストロークされた稜線へと割り当てられる方法が以下に記述される。
エンドキャップは、ストローク塗りつぶしを参照する稜線がストローク塗りつぶしを参照しない稜線により経路においてたどられるときにも生成される。図28(a)は部分的にストロークされた三角形状を示す。頂点275は、ストロークされた稜線276がストロークされていない稜線277に結合する箇所である。エンドキャップが頂点275において生成される。
座標の順序付けられた集合が入力として提供され、その座標の順序付けられた集合がストロークされた経路を形成する場合、左z−レベル参照及び右z−レベル参照に加えて、有用ストロークz−レベル参照及びペン幅が入力として必要である。ストロークに使用されるz−レベルと経路を塗りつぶすのに使用されるz−レベルの書式には差がない。一度座標の順序付けられた集合が稜線の順序付けられた集合へと処理されると、上述の技術を使用してストロークすることができる。モジュール616は左側ストローク稜線の集合と右側ストローク稜線の集合とを生成する。モジュール616が左z−レベル、右z−レベル、及びストロークz−レベルを入力として受け取った場合、ストロークz−レベルは不透明であると判定され、生成された左側ストローク稜線は:
−入力として受信された左z−レベルを参照する左z−レベル参照、
−入力として受信されたストロークz−レベルを参照する右z−レベル参照を割り当てられ、生成された右側ストローク稜線は:
−入力として受信されたストロークz−レベルを参照する左z−レベル参照、
−入力として受信された右z−レベルを参照する右z−レベル参照を割り当てられる。
上述のものに対する代替のz−レベル割当てについて説明する。割当ては、ある程度の透明度のストロークz−レベルを有する稜線の順序付けられた集合のストローキングに特に適している。z−レベル割当てにおいて、生成された左側ストローク稜線には:
−ゼロの左z−レベル参照、
−入力として受信されるストロークz−レベルを参照する右z−レベル参照
が割り当てられ、生成された右側ストローク稜線には:
−入力として受信されるストロークz−レベルを参照する左z−レベル参照、
−ゼロの右z−レベル参照が割り当てられる。
ストローキングがレンダ空間において行なわれる場合、ストローキングモジュールにより生成される線、ベジェ曲線、及び弧は、変換する必要がない。しかし、ストローキングがオブジェクト空間で行なわれる場合、これらの基本要素は形状の元の稜線と同じ変換を受けなければならない。
tan2θ=(2ab+2cd)/(a2−b2+c2−d2)
ここで、
|a b|
Γ=| |
|c d|
は変換行列の非平行移動部分である。
|cosθ|
A=Γ| |
|sinθ|
これらの正規化された軸(又はその反対)A’は第1象限にあるだろう。事前に変換された円の半径を掛け合わせたこの軸ベクトルにより、楕円の長軸の長さ軸ベクトルが得られる。水平位置からの軸ベクトルの角度により楕円の回転が得られる。円の半径を掛け合わせた他方の軸ベクトルの長さにより楕円の短軸の長さが得られる。
|1| |0|
|0|及び|1|
を取り上げ、Gを適用し、結果のベクトルの水平位置からの回転を判別するだけで十分である。2つのベクトルは180度未満の角度を刻む。
Γ=| |
|0|
がこの角度の反時計回り側にある場合、変換は逆である。反時計回り側にない場合、変換は逆にならない。
開始座標(Xs,Ys)及び終了座標(Xe,Ye)の観点から、曲線に対してのみは追加の制御座標(Xc,Yc)の観点から稜線を記述する座標を生成した後は、次のプロセスは明らかに出力フレームに影響しない稜線を破棄することである。これは、図46に示されるフィルタリングプロセス470である。処理のこのステージでは、稜線の全ての座標は「レンダ空間」(変換済であるので)にあり、そのため、ディスプレイの境界座標と直接比較することができる。例えば、フレームが、幅w及び高さhを有し、フレームの左上が(0,0)、右下が(w−l,h−l)により記述される場合、直線稜線は以下の場合に安全にフィルタリング(すなわち、破棄)することができる:
(Xs>=w) AND (Xe>=w) //右側に外れる場合
OR
(Ys<0 ) AND (Ye< 0) //上側に外れる場合
OR
(Ys>=h) AND (Ye>=h) //下側に外れる場合
フィルタリングのために、グリフはグリフの右上端から左下端へと伸びる直線稜線であるかのように扱われる。
(Xs>=w)AND(Xc>=w)AND(Xe>=w) //右側に外れる場合
OR
(Ys< 0)AND(Yc< 0)AND(Ye< 0) //上側に外れる場合
OR
(Ys>=h)AND(Yc>=h)AND(Ye>=h) //下側に外れる場合
水平な直線稜線(すなわち、Ys == Ye)もフィルタリングされる。
尚、ディスプレイの左側から完全に外れた稜線は破棄されない−このような稜線は表示出力に影響しない。
図46において、以下のプロセス469の目的は、稜線を修正された表現へと変換することであり、トラッキングパラメータの計算を含んでも良い。この修正された表現は、後続のモジュールによる処理により適しており、修正された表現は少なくとも以下のものを含む:
−開始座標(X,Y)、
−左z−レベルへの参照及び/又は右z−レベルへの参照、
−終了Y座標、及び
−トラッキングパラメータ。
直線はトラッキングパラメータとしてデルタX項を使用することで記述できることについて既に説明した。しかし、デルタXは小数データを含むことが要求されることが多い。浮動小数点又は固定小数点形式を使用してデルタXを表現する代替の方法として、より正確な表現は整数部分と傾斜のための残り部分を格納することである。
Grad=(Xe−Xs)/(Ye−Ys)
Ient=(Xe−Xs)%(Ye−Ys)
ここで、(Xs,Ys)は稜線の開始座標であり、(Xe,Ye)は稜線の終了座標である。
(Xe< Xs)の場合、左フラグ = TRUE
(Xe>=Xs)の場合、 = FALSE
3.6.2.2次ベジェ曲線トラッキングパラメータの生成
上述の図46のステップ465は曲線ごとに以下のものを生成する:
−開始座標、
−制御座標、及び
−終了座標。
sign()をオペランドが正の場合にブール値TRUE(及びオペランドが負の場合FALSE)を戻す関数であるとすると:
(sign(Ys−Yc)=sign(Ys−2Yc+Ye))
AND
(|Ys−Yc|<|Ys−2Yc+Ye|)
である場合、ベジェは2つの曲線稜線を必要とする。
Xsplit={Xs(Ye−Yc)2+2Xc(Ys−Yc)(Ye−Yc)+Xe(Ys−Yc)2}/(Ys−2Yc+Ye)2
Ysplit=(YsYe−Yc2)/(Ys−2Yc+Ye)
ステップ409において、元の非単調2次ベジェを表現する2つの単調曲線稜線が以下のものを使用して作成される:
−開始座標(=元の非単調2次ベジェの開始座標(Xs,Ys))と、
−終了座標(Xsplit,Ysplit)とを有する
−第1の曲線稜線
−開始座標(Xsplit,Ysplit)と、
−終了座標(=元の非単調2次ベジェの終了座標(Xe,Ye))とを有する
−第2の曲線稜線
稜線(直線又は曲線)が開始Y座標よりも大きい終了Y座標を有するように指定される必要があることが既に示されている。これは、ステップ406において各曲線の開始Y座標と終了Y座標とを比較し、ステップ410において必要に応じて開始座標と終了座標とを取り換えることによって確実にすることができる。開始座標と終了座標とが取り換えられる場合、左z−レベル参照と右z−レベル参照も取り換えられなければならない。
次のステップ407では、曲線の一部がレンダリング中のフレームの上方にある(すなわち、Y=0がフレームの最上部を表現する場合に0未満である開始Y座標Ysを有する)場合に、曲線を切り取るように動作する。最上の座標Ytopは以下の式により判定される:
Ytop=max(0,Ys)
ここで、max(a,b)は、2つのオペラントa及びbのうちの大きい方を戻す関数である。s
次の検査では、曲線ごとに2次多項フラグメント(QPF)として曲線を記述する必要があるか否かを判定する。これは、後続の2次方程式を解く際に0での割り算を回避するのに必要である。開始点、終了点、及び制御点に基づくこの状況に対する簡易検査が以下に示すようにステップ413において行なわれる:
Ys+Ye=2Yc
は曲線がQPFであることを暗示する。
与えられる中間値は以下の通りである:
Ai={Ye(XsYe−XcYs)+Ys(XeYs−XcYe)}/(Ye−Ys)2
Ci=(4XcYc−2XsYe−2XeYs)/(Ye−Ys)2
Di=(Xs+Xe−2Xc)/(Ye−Ys)2
A、C、及びDは以下のようにして得られる:
A=Ai+CiYtop+DiYtop 2
C=Ci+Di(2Ytop+1)
D=2Di
ステップ413において曲線がQPFではないと判定される場合、トラッキングパラメータA、B、C、及びDはステップ408において生成される。A、B、C、及びDは以下の計算により開始座標、終了座標、制御座標、及び最上座標Ytopから得られる:
Xg=Xs−Xe
Yg=Ys−Ye
Xh=Xc−Xe
Yh=Yc−Ye
Yterm=Yg−2Yh
mix=XgYh−XhYg
とすると:
B=(Xg−2Xh)/Yterm 2
A=(2mix×Yh)/Yterm 2+B(Ytop−Ye)+Xe
D=(Yterm×mix2)/Yterm 4
C=(mix×Yh2)/Yterm 4+D(Ytop−Ye)
3.6.3.符号の判定
パラメータA、B、C、Dは後述のプロセスが以下の形式の式を使用して2次ベジェ曲線のX座標を追跡する際に使用する:
x=A±2√C
トラッキングパラメータを準備する際に図41の最終ステップ412は、平方根項がAに加算されるべきか、あるいは、Aから減算されるべきかを判定する。以下の擬似コードはA、Xs、Ys、Xe、Ye、及びDに基づいて使用することができる。ここで、「sign= +1」は平方根項の加算を示し、「sign= −1」は平方根項の減算を示す:
if (A > 0) sign = −1;
else if (A < 0) sign = +1;
else
{
if (Ys < Ye) sign = −1;
else sign = +1;
if (D < 0) sign = −sign;
if (Xs < Xe) sign = −sign;
}
3.6.4.楕円弧トラッキングパラメータの生成
ステップ466(図46を参照して説明)は弧ごとに以下のものを生成する:
−楕円長軸半径及び楕円短軸半径「a」及び「b」、
−水平「θ」からの楕円角(軸aの)、
−楕円中心(x,y)、
−弧の開始座標(xs,ys)及び終了座標(xe,ye)、及び
−左z−レベル参照及び右z−レベル参照
楕円はYに対してのみ曲がり、Xに対してのみスケーリングされた円として記述することができる。このため、楕円トラッキングを簡略化するために、TCIEシステム699は全ての楕円を変換された円として扱う。
h=√{b2cos2(θ)+a2sin2(θ)}
この線(最低点から中心にかけての)は以下の式により示される:
w={cosθsinθ(b2−a2)}/h
従って、曲がり「e」は:w/hとなる。
f=h2/(ab)
を楕円217に適用することで達成される。
グリフはTCIEシステムパイプライン699の下位の部分により特殊な稜線として扱われる。このため、ストローキング/モーフィング/変換モジュール616はグリフ記述を稜線記述へと変換しなければならない。
−グリフ稜線の開始座標は(Sx+W-1,Sy)であり、
−左z−レベルへの参照は「イン」z−レベルに設定され、
−右z−レベルへの参照は「アウト」z−レベルに設定され、
−終了Y座標はSy+Hである。
グリフ固有のトラッキングパラメータはグリフを表現するビットマップとグリフの幅とから成る。
ストローキング/モーフィング/変換モジュール616により生成される稜線の集合は、図56のソーティングモジュール617へと供給される。ソーティングモジュール617は、Y軸の値を1番目に優先して昇順とし、X軸の値を2番目に優先して昇順としながらこれらの稜線が順序付けられる(すなわち、稜線は厳密にYにおいてソートされ、Y値を共有する稜線の部分集合ごとにXにおいてソートされる)ように再度順序付けを行なう。レンダリングプロセスの後の各ステージが「画素順次式に」実行可能であるように、稜線はこのように順序付けられる必要がある。画素順次式とは、レンダリングが一度に1画素実行され、画面の左上の画素から開始し、画素の次の行へと下る前に画素の各行を左から右へ進み、最後に処理される画素は画面の右下にある画素である。画素順次式レンダリングは、従来のレンダリングシステムにより使用されるランダムアクセスフレーム格納を行なう必要がなく、メモリの使用を削減し、通常、レンダリング速度を向上させる。X軸及びY軸の方向及び優先順位に関してここで使用される規則は、上述のシステム699の動作に支障をきたすことなく、任意の代替の(ただし、直交の)規則と取り変えることができることは、当業者には明らかであるだろう。
図56において明らかなように、表示リストコンパイラ608の出力は、画面上に所望の出力(単一のフレームに対して)を記述する稜線の集合である。レンダリングエンジン610は、これらの稜線の順序付けられた集合を入力とする。尚、表示リストコンパイラ608が連続的なフレームに対して稜線を準備する間に、レンダリングエンジン610が1つのフレームに対して稜線を処理できるようにするのに2重バッファ609を使用することができる。
レンダリングエンジン610を介する表示データのフローは、稜線処理モジュール614の動作で開始する。この稜線処理モジュール614のデータフローパラメータは図22(a)及び図22(b)において要約される。動画における現在のフレームは新規の稜線の順序付けられた集合232及び静止稜線の順序付けられた集合233により記述される。新規の稜線の順序付けられた集合232は、現在のフレームに対して表示リストコンパイラ608(先に説明)により生成された稜線から構成される。これらの新規の稜線232は、前のフレームに存在しないか、あるいは、前のフレームの後に新規の位置へと移動した表示オブジェクトを記述する。静止稜線の順序付けられた集合233は、前のフレーム上に新規の稜線として導入されてから存続する(移動していない)オブジェクトを記述する。
単一のフレームに対する稜線処理242の要約が図24に示される。レンダリング対象のフレームごとに、稜線処理242はディスプレイを下りながら走査線から走査線へと(行から行へ)繰り返し、新規の稜線の順序付けられた集合又は静止稜線の順序付けられた集合中の任意の稜線が現在の走査線と交差する位置を計算することによって動作する。当業者は、基本的なアルゴリズムを他の走査方向へと適用することができる。
図22(b)は、現在の走査線257に対する稜線を処理する際の稜線処理239を介するデータのフローの概要を示す。現在の走査線と交差する(従って処理を必要とする)稜線はアクティブ稜線と呼ばれ、アクティブ稜線の順序付けられた集合236に走査順で格納される。新規の稜線又は静止稜線の開始座標が現在の走査線と交差する場合、稜線処理239は、新規の稜線234又は静止稜線235からアクティブ稜線を生成する。アクティブ稜線は新規の稜線又は静止稜線とは少々異なる書式を有する−例えば、開始座標(Xs,Ys)を有する代わりに、アクティブ稜線は走査線ごとに更新されるcurrent_Xフィールドを有する。current_Xフィールドは、稜線が現在の走査線と交差する箇所に対応する。アクティブ稜線が処理されるごとに、アクティブ稜線が後続の走査線と交差する場合、次の走査線238に対してアクティブ稜線の順序付けられた集合へとアクティブ稜線が走査順に配置される。
図2(a)における例は、三角形状15により部分的に覆われ閉塞される矩形形状14を示す動画の第1フレームの所望の出力を示す。表示画素の現在の走査線16は、この例の目的のために重畳される。現在の走査線の左端表示画素は13である。この表示画素はX座標0に対応し、右側に後続する画素はX座標1に対応し、以下同様に対応する。
図23に戻ると、処理する次の稜線が新規の稜線又は静止稜線の順序付けられた集合において始まる場合、ステップ250においてその稜線は最初に処理の都合上アクティブ稜線へと変換されなければならない。集合において始まらない場合、ステップ251において次のアクティブ稜線が得られる。処理する次の稜線が新規の稜線又は静止稜線であり、その新規の稜線又は静止稜線が削除のためにマーク付けされていない場合、新規の稜線又は静止稜線は次のフレームのために静止稜線237の順序付けられた集合へと配置されることになる。これにより、稜線は複数のフレームにわたって存続することができる。特定のフレーム上の稜線の削除を可能にするメカニズムを実現するのには種々の方法がある。1つの技術は、全ての稜線に識別フィールドを割り当てることであり、フレームごとにそのフレーム上で削除されるべき稜線に対応する識別フィールドの集合を提供することを考慮に入れている。代替の技術は、稜線により参照されるz−レベル内でフラグを提供し、全ての参照稜線が削除されることを示すことである。
静止稜線バッファの動作の一例が図68Aから図68C及び図69Aから図69Cにおいて示される。図68Aから図68Cは、アニメーションシーケンスの3つのフレーム6800、6802、及び6804を示す。図68Aは、家6806から成る第1のフレーム6800を示す。図68Bは、前のフレーム6800から家6806を保持するが、家6806の戸口に立つ人6806を追加する第2のフレーム6802を示す。図68Cは第3のフレーム6804を示し、このフレームは家6806を保持するが、人が戸口から家6806の右側の位置6810へと移動している。
ステップ252における次のアクティブ稜線の処理は、後続のモジュールz−レベル活動化モジュール613に渡す1つ以上の交差メッセージを生成することを伴う。各メッセージはアクティブ稜線の左z−レベル参照及び右z−レベル参照と共にcurrent−X座標を含む。
図23のステップ252において行なわれるように、走査線から走査線へと稜線のX座標を追跡するプロセスは、従来技術において「稜線トラッキング」と呼ばれることが多い。説明したシステム699では、稜線は直線、2次ベジェ曲線、楕円弧、又は2次多項フラグメントとすることができる。
Bresenhamの線アルゴリズムは、直線を描く方法として従来技術において周知である。ステップ252において、稜線処理239は、修正されたBresenhamのアルゴリズムを使用して走査線ごとにアクティブ直線稜線のX座標を計算する。図5のC言語ソースコードは、開始座標(Xs,Ys)から終了座標(Xe,Ye)までの直線を追跡(及び描画)するのに使用される修正されたBresenhamのアルゴリズムの一例を示す。この例は3つの事前に計算された値:err、delta_err1、及びdelta_err2に基づいてYsからYeの範囲でY座標ごとに増分的に計算される線のX座標を示す。
−開始座標(Xs,Ys)、
−終了Y座標(Ye)、
−整数傾斜項(grad)、
−残り傾斜項(ient)、
−左フラグ、及び
−左z−レベル及び/又は右z−レベル
ステップ250において直線稜線がアクティブ直線稜線へと変換されると、ient項がerr、delta_err1、及びdelta_err2により置き換えられる。err、delta_err1、及びdelta_err2は直線稜線のデータから以下に示すように計算される:
ty=Ye−Ys
とすると:
err=(2×ient)−ty
delta_err1=2×ient
delta_err2=2×(ient−ty)
走査線ごとに、アクティブ稜線に対する新規のcurrent−X座標が、修正されたBresenhamのアルゴリズムを使用してgrad、err、delta_err1、及びdelata_err2パラメータからステップ252に従って以下に示すように計算することができる:
errが0未満の場合:
err=err+delta_err1
current_X=current_X+grad
0以上の場合
err=err+delta_err2
current_X=current_X+grad
左フラグがTRUEの場合:
current_X=current_X−1
TRUEでない場合
current_X=current_X+1
5.7.2.2次ベジェのトラッキング
2次ベジェは、図7の例に示すように開始点、終了点、及び制御点により記述される。2次ベジェ曲線である稜線に対するデータが表示リストコンパイラ608により処理される場合(第3.6.2節−2次ベジェ曲線トラッキングパラメータ−参照)、2次ベジェ稜線記述は、少なくとも以下のものを含むように再度書式化され稜線処理239に提示される:
−開始座標(Xs,Ys)、
−終了Y座標(Ye)、
−トラッキングパラメータA、B、C、及びD、
−符号フラグ(+1又は−1)、及び
−左z−レベル及び/又は右z−レベルへの参照
図23のステップ252において、走査線ごとに、ベジェ曲線のcurrent_X位置が、以下に示すようにA、B、C、及びDに基づいて再計算される:
A=A+B
C=C+D
符号フラグが+1の場合:
Current_x=A+2√C
+1でない場合:
Current_x=A−2√C
5.7.3.2次多項フラグメントのトラッキング
表示リストコンパイラ608(第3.6.2節−2次ベジェ曲線トラッキングパラメータ−の生成参照)は、少なくとも以下のものを含むように2次多項フラグメントに対する稜線記述を生成する:
−開始座標(Xs,Ys)、
−終了Y座標(Ye)、
−トラッキングパラメータA、C、及びD、及び
−左z−レベル及び/又は右z−レベルへの参照
ステップ252において、走査線ごとに、2次多項フラグメントのcurrent_X位置が、以下に示すようにA、C、及びDに基づいて再計算される:
A=A+C
C=C+D
Current_X=A
5.7.4.楕円弧のトラッキング
表示リストコンパイラ608は少なくとも以下のものを含む楕円弧に対して稜線記述を生成する:
−等価な円中心(Cx,Cy)
−等価な円半径「R」、
−等価な円開始座標(Sx,Sy)、
−開始誤差値「E」、
−円から楕円への変換(曲がり「e」+スケーリング「f」)、
−終了Y座標「Ey」、及び
−左向き又は右向き
図23のステップ250がこのデータをアクティブ楕円弧へと変換する場合、現在の座標、現在のエラー値、及び現在のモード(後述)がこのデータにより初期化される。
トラッキングアルゴリズムは、円の中心に対する座標を追跡する。このため、現在の座標は開始座標−等価な円中心に設定される。現在のエラー値は表示リストコンパイラ608により提供されるエラー値に設定される。モードは現在走査中の8分角を追跡するのに使用され、ステップ250において提供された開始座標に基づいて初期化される。
尚、いずれのステージにおいても、絶対楕円座標は以下の公式を使用して相対的な現在座標(cx,cy)から得ることができる:
(SEx,SEy) (fcx+ecy+Cx,cy+Cy)
各円は、Bresenhamの円アルゴリズムを使用して追跡され、現在座標及びエラー値が繰り返し更新される。従来技術において周知のこのアルゴリズムは、円の右上の8分角(図14の8分角120)のみを追跡し、反映のシーケンスを使用して他の7つの8分角を生成する。更なる詳細については、「Computer Graphics: Principles and Practice」(Foley & Van Dam Second Edition)の第3.3節Scan Converting Circlesにおいて見出すことができるだろう。
アクティブグリフオブジェクトは、グリフビットマップへの現在のポインタを維持する。このポインタは、グリフ稜線が追跡されるにつれ行ごとに増分される。グリフの左側稜線は垂直であるので、現在のX位置は稜線が追跡されるに従って更新される必要はない。
アンチエイリアシングは、追加の(小画素)解像度を使用して稜線を追跡することによって達成される。従来技術においては周知であるが、この追加の解像度は各画素のどの部分がグラフィカル基本要素により占められるかを判定するのに使用することができる。この部分(一部の従来技術では画素カバレッジと呼ばれる)は、グラフィカル基本要素の各出力画素の色への貢献を弱めるのに使用することができ、レンダリング結果が大幅に改善される。例えば、稜線の座標において、X及びYの双方で解像度が2ビット追加することができるので、X及びYの双方において解像度が4倍となる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
|current_X|A−bufferの行 |
|の小数ビット |−−−−−−−−−−−−−−−−−−−−−−−−−−−|
| |左端spel 第2spel 第3spel 右端spel|
|−−−−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−|
| 00b | 1 1 1 1 |
| 01b | 0 1 1 1 |
| 10b | 0 0 1 1 |
| 11b | 0 0 0 1 |
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
図1(b)の例に戻ると、最上spel線3に対する処理中に、(current_spel_line=0)、アクティブ稜線0に対するcurrent_X値が非小数成分4(100b)と小数成分0.75(小数ビットは11b)とを有する。この場合、A−buffer12の最上行の右端spelのみが表5に従って設定される。
−X座標=current_pixel
−A−buffer
−活動化されたz−レベル参照(アクティブ稜線の左z−レベル参照からコピー)
−非活動化されたz−レベル参照(アクティブ稜線の右z−レベル参照からコピー)
尚、z−レベル参照はヌルの塗りつぶしを参照することができる。
レンダリングされたグリフの各行はバイト幅(すなわち、8画素幅)ブロックへと分割され、このブロックが順番に処理される。各バイトは256エントリルックアップテーブル(LUT)への索引として使用される。各エントリは32ビットを占める。LUTの単一のエントリは8画素行交差メッセージにおけるどの画素が生成されなければならないかを識別する。
図66は図26に示すのと同じ走査線を示す。この走査線上で単一の画素6601を考慮すると、交差メッセージ6602が生成される。交差メッセージ6602は全ての小画素が−1に設定されている。この交差メッセージにより画素全体6603が出力される。要するに、グリフはアンチエイリアシングされず、小画素は考慮されない。これは、「ゼロ交差」フラグを考慮して追加されるものを含むグリフに対して生成される全ての交差メッセージに関して真実である。
図2(c)に示す例を継続すると、図2(b)に示すように、アクティブ稜線に対して稜線処理モジュール614により生成される交差メッセージを示す。この例では4x4アンチエイリアシングが使用される。4x4アンチエイリアシングでは、アクティブ稜線座標が表示画素内の小画素(spel)に対応する追加の2ビットの解像度を伴って記述される。まず稜線19の処理が行なわれ、対応する交差メッセージ23が生成されるであろう。アクティブ稜線は矩形に対する塗りつぶしを記述する左z−レベル参照を持っているので、生成された交差メッセージ23の活動化されたz−レベル参照は矩形に対する塗りつぶしを記述する活動化されたz−レベル参照を有するであろう。
図70はS−bufferがゼロ交差メッセージの受信を伴って更新されるのを示す更なる例である。最初に、走査線における画素#1に関して、稜線交差はないので、この画素に対して交差メッセージ又はS−buffernは存在しない。このように、画素#1に対してS−buffernは0を伴って設定される。このS−buffernの右端列が、次の画素#2に対するS−buffern−1の第1(すなわち、左端)の列にコピーされる。この列はS−buffern−1の列をまたいでコピーされ、この場合、バッファもゼロを伴って設定される。図示するように、稜線が画素#2と交差し、下位線の交差(交差4、2又は1本の下位線)に対する説明した規則に従って、画素#2に対するゼロ交差メッセージが判定される。メッセージはより低い右側の1/4において+1が配置されるので、走査線と交差する稜線が補足される。画素#2に関して、ゼロ交差メッセージ及びS−buffern−1が合計され、その画素に対するS−buffernが与えられる。この場合、バッファはヌルであるので、これは単なる交差メッセージである。次の画素#3に関して、S−buffernから右端列がコピーされ、S−buffern−1に配置される。この場合では1が配置される。関連する稜線が画素の右上4分円において2本の下位線のみと交差することが明らかな場合、画素#3における交差メッセージが、交差規則に従って判定される。再度、交差メッセージ及びS−buffern−1が合計され、画素#3に対するS−buffernが与えられる。画素#4に関して、右端列がコピーされ、S−buffern−1をまたがって配置される。交差メッセージが規則を使用して判定され、合計されて画素#4に対してS−buffernが与えられる。交差メッセージ及びS−bufferを使用してアンチエイリアシングを実施するこの手法により、小画素ベースでレベルを合成することなしに、走査線上の画素位置に対するアクティブレベルを正確に判定できるようになる。全ての小画素プロセスは、S−buffer及び交差標識を使用して行なわれ、画素レベルで合成作業を残す。
走査線に対するアクティブ稜線は走査順に処理されるが、対応する交差メッセージは必ずしも走査順(Xの昇順)に生成・出力されなくても良い。例えば、稜線20が図2(b)において処理される場合、交差メッセージ25が最初に生成・出力され、それにメッセージ24が続く。交差メッセージ25は、メッセージ24よりも高いX座標を有するので、交差メッセージは走査順には出力されない。更に、稜線処理モジュール614の動作中に新規のcurrent_Xを計算すると、第1のアクティブ稜線がこの走査線上で既に処理された第2のアクティブ稜線よりも低い走査位置を有する結果となる恐れがある。
z−レベル活動化モジュール613は、稜線処理モジュール614から渡される稜線交点データを使用して、フレームがレンダリングされるときの出力色にどのz−レベルが貢献するかを追跡する。出力画素のストリームがレンダリングエンジン610により走査順に生成される。稜線処理モジュール614からの各交差メッセージは、走査順で生成されるときに所要の出力色が変化する表示座標を表現する。以下の説明では、特定のラスタ空間位置で開始する1つ以上の走査順の連続画素は画素のランと呼ばれる。この説明では、A−bufferが稜線交差に対して生成されることを、すなわち、レンダリングシステム610がアンチエイリアシングを行なう場合を想定する。
z−レベル活動化モジュール613は、図59に一般的に示されるように、「関心のある」z−レベルのリストを維持する。関心のあるとは、当該のz−レベルがz−レベル活動化モジュール613により考慮されなければならないことを意味する。z−レベル活動化モジュール613は、関心のあるz−レベルの順序付けられた集合を使用して交差メッセージの入力を現在の走査線に沿って画素のランに対する出力色に貢献するのがどのz−レベルであるかを示す領域メッセージの出力へと変換する。すなわち、ランは、2つの隣接する交差メッセージにより記述される各点内に位置する。
稜線処理モジュール614と同様に、z−レベル活動化モジュール613は、レンダリングのタスクを走査線ごとに考慮し、入力(交差メッセージ)を受信することを予期する。単一の走査線に対するz−レベル活動化モジュール613の機能は、図58により要約される。走査線に対する処理は、ステップ628においてアクティブz−レベルのリストを空に初期化し、Current_X値を0に設定することによって開始する。Current_Xは、現在処理中の画素を示すために使用され、0の値は走査線の最初(左端)の画素を表現する。
自己交差オブジェクトのレンダリングを促進するために、z−レベル活動化モジュール613はワインディング規則を利用する。z−レベルが活動化されたか否かのブール表現だけを格納するのではなく、モジュールはアクティブz−レベルごとに小さいワインディングカウント整数値を格納する。ワインディングカウントは当業者には周知である。使用可能なワインディング規則のうちの2つは、従来技術ではノンゼロと奇偶(パリティ)として広く記述されている。使用可能な第3の規則(やや一般性には掛けるが従来技術には記載されている)は、ネガティブワインディングである。これは第6.7節−S−bufferのA−bufferへの変換:ワインディング規則で説明される。
ワインディングカウントの2次元アレイは、図59に示すように、関心のあるz−レベルのリストにおけるz−レベルごとにz−レベル活動化モジュール613により格納される。ワインディングカウントの2次元アレイは「S−buffer」と呼ばれる。各ワインディングカウントは、レンダリング中の現在の画素(643、647、及び651)内の小画素のうちの1つに対してz−レベルの状態を表現する。これにより、z−レベル活動化モジュール613は現在の画素のどの部分において各z−レベルがアクティブであるかを追跡することができる。関心のあるz−レベルの順序付けられた集合の順序は深度順である。図59に示す例では、z−レベル640、644、及び648はその深度641、645、及び649により順序付けられる。塗りつぶしデータ642、646、及び650はz−レベル640、644、及び648の色を定義する。
図58に戻ると、新規の交差メッセージが活動化z−レベルを持たない場合(ステップ638=no)、活動化z−レベルに関連する処理ステップは行なわれない。同様に、交差メッセージが非活動化z−レベルを持たない場合(ステップ639=no)、非活動化z−レベルに関連する処理ステップは行なわれない。
考察は、ASICなどのハードウェア実現の考察へと転換することができる。z−レベル活動化モジュール613は、図52(b)に示すように、走査線ごとにz−レベル活動化テーブル(ZLAT)においてz−レベルを管理する。走査線は左から右へと処理されるので、交差メッセージにより参照されるz−レベルはZLATへと徐々に導入される。各入力z−レベルにはS−buffer573及び塗りつぶし情報572を格納するためのZLATエントリが割り当てられ、z−レベル深度571によりアドレス参照可能である。
z−レベルは、走査線上の交差メッセージにより最初に参照されるときにZLATに追加される。この後の参照では、各エントリは更新だけすれば良く、ZLAT内の同じ位置に残る。入力カウンタが、次の新規のz−レベルエントリが挿入されるZLAT中の位置を追跡するべく維持される。カウンタは、まず、走査線の開始で位置0にリセットされ、新規のz−レベルがZLATに追加されるたびに増分される。従って、ZLATが満杯になるまで、z−レベルエントリは交差メッセージにおいて受信された順序で維持されることになる。
拡張として、z−レベルエントリは、関心度とこれに続く降順のz−レベル深度の順でZLATにおいて維持することができる。関心のあるz−レベルは、塗りつぶし規則のS−bufferへの適用がノンゼロA−bufferになるz−レベルである。すなわち、関心のあるz−レベルは潜在的に貢献するものである。z−レベルの深度の変更が可能でない場合、z−レベルの状態が関心のある状態から関心のない状態へと変化する状況又はその逆の状況がある。これが起こるのは2つのシナリオにおいてである。z−レベル活動化モジュール613が、既にZLAT内にあるz−レベルを参照する交差メッセージを受信し、交差メッセージと関連付けられたA−bufferによりz−レベルが関心度の状態を変更する場合に起こり得る。また、ZLATエントリのS−bufferの右端spelがS−buffer全体にまたがってコピーされなければならないスパンの処理が終了する時に起こり得る。このステップは関心のあるz−レベルを関心のない状態にする効果がある。
メカニズムは現在の走査線上で非アクティブZLATエントリを削除するのに必要ではない。レイジー(lazy)方策を実現することができる。新規のz−レベルを追加することになったもののサイズに限りがあるためにZLATに余裕がない場合を除いては、非アクティブエントリは無視される。このような状況では、最低のローカル深度によりマップされるz−レベルエントリが削除され、追加されるz−レベルがZLATにエントリをとる。請求中のZLATのエントリが空であるかのようにマップテーブルが更新される。
図65A及び図65Bは、関心のあるz−レベルの順序付けられた集合が、図58で説明された方法により更新されて走査線上で変化する様子の概要を提供する。明確さを期すために、非アクティブz−レベル再利用の任意のレイジー方策(第6.5.1.3節で説明)は示されていない−非アクティブz−レベルはテーブルから削除される。
説明はハードウェアにより関係のある問題の考察から戻り、第6.5節からのより一般的な方法の説明を継続する。
合成モジュール612は関心のあるz−レベルと関連付けられたA−bufferを入力としてとる。従って、z−レベル活動化モジュール613は、ランデータを合成モジュール612に渡す前に、関心のあるz−レベルと関連付けられたS−bufferをA−bufferに変換する。そうする際に、z−レベル活動化モジュール613はワインディング規則を利用する。上述の3つのワインディング規則は図57(a)及び図57(b)において示され、S−buffer624及び620は、各ワインディング規則によりA−buffer621、622、623及び626、625、619へとそれぞれ変換される:
−奇偶:A−buffer623及び619に示すように、ワインディングカウントが0以外の場合、塗りつぶしは小画素に貢献する
−ノンゼロ:A−buffer621及び626に示すように、ワインディングカウントが奇数の場合、塗りつぶしは小画素に貢献する
−ネガティブワインディング:A−buffer622及び625に示すように、ワインディングカウントが負の数の場合、塗りつぶしは小画素に貢献する
形状全体421に対するワインディング規則の結果が図43(a)に示される。図43(a)において、走査線424に対する複数のワインディングカウント420、426、及び422が示される。同様に、走査線425に対するワインディングカウント429、427、及び423が存在する。図43(b)において、形状の稜線が図43(b)の表現において示される形状の範囲内の斜線の塗りつぶしを定義する場合、ノンゼロワインディング規則428、ネガティブワインディング規則430、及び奇偶規則431の適用結果が示される。
−全ての左側ストローク稜線355のうちのヌル左z−レベル366から左z−レベル参照まで、
−全ての左側ストローク稜線355のうちのストロークz−レベル365から右z−レベル参照まで、
−全ての右側ストローク稜線356のうちのストロークz−レベル365から左z−レベル参照まで、及び
−全ての右側ストローク稜線356のうちの右z−レベル367から右z−レベル参照まで
図36(c)は2本の走査線357及び358を示す。2本の走査線の各々の上方には、走査線に沿って異なる点において稜線の元の集合の右z−レベル参照367のワインディングカウントを表現する数字がある。奇偶ワインディング規則又はノンゼロワインディング規則が使用される場合、図36(c)において明らかなように、自己交差稜線により形成される不要三角領域368が右側ストローク稜線により囲まれ、z−レベル367でアクティブにレンダリングされるであろう。これは、この領域におけるワインディングカウントが「1」であるからである。ネガティブワインディング規則を使用することによって、ワインディングカウント「1」は非アクティブと見なされ、結合は正しくレンダリングされることになる。
図40−ランの処理−の考察に戻る。A−buffer及び関心のある塗りつぶしの順序付けられた集合を使用して、ステップ399の合成モジュール612は、単一の画素に対してアンチエイリアシングを行なった色を計算する。
合成モジュール612は:
−z−レベル活動化モジュール613により生成されたz−レベルの順序付けられた集合及びそれぞれのA−buffer、及び
−生成対象の出力画素のランの長さを定義する出力表示空間における座標の各々を入力とし:
−出力表示装置上での提示に適した画素のラン
を出力として生成する。
合成プロセス中に、中間合成バッファへのアクセスが必要になる。このバッファは、最大サイズ−すなわち、出力装置の幅−のランに対して中間の合成結果を保持するのに十分であるだろう。当業者は、合成バッファが任意のサイズであっても良く、説明したプロセスの繰り返しの利用を必要としても良いことを理解するであろう。
各z−レベルは塗りつぶしへの参照を含む。これは、以下の型のうちの1つであっても良い。
合成アルゴリズムの基本的なフローが図13に示される。これは、高レベルの概要であり、一部のステップの更に詳細な説明は後程提供する。
処理の各段階は、図9(a)、図9(b)、及び図10にグラフィカルに示される。これらの図は異なる合成シナリオを実証する。
図13のステップ113が、図11を参照して更に詳細に検査される。このプロセスは、ステップ112で見つかった最上の可変アルファ塗りつぶしの上方にある入力z−レベルの順序付けられた集合中の全ての塗りつぶしに対して行なわれる。入力集合に可変アルファ塗りつぶしが存在しない場合、このプロセスは入力集合中の全ての塗りつぶしに対して行なわれる。最上の可変アルファ塗りつぶしが入力集合中においても最上の塗りつぶしである場合、貢献度計算を行なう必要はない。
−−−−−−−−−−−−−−
|A=35%|A=0% |
|B=0% |B=0% |
|C=0% |C=100%|
|D=65%|D=0% |
|−−−−−+−−−−−−|
|A=35%|A=0% |
|B=26%|B=40% |
|C=0% |C=60% |
|D=39%|D=0% |
−−−−−−−−−−−−−−
図48により、レベルの数が小画素マスク(A−buffer)のサイズにより判定されるツリーが横断されることが明らかである。オブジェクトC 4802に対して明らかであるように、ツリーの任意の枝の横断は100%の不透明度に到達するとすぐに停止することができ、その小画素に対しては更なる貢献度が作成されないかもしれない。
current_contrib=current_alpha*(1-accumulated_opacity)*coverage_ratio
ここで、
current_alpha=current_fillのアルファ値、
accumulated_opacity=現在のパラメータ集合において与えられるようなaccumulated_opacity、
coverage_ratio=active_ratio (coverage? A-buffer)、
A-buffer=current_fillと関連付けられたA−buffer、及び
Active-ratio (A-buffer)=与えられたA-bufferにおけるspelの総数に対する与えられたA-bufferにおけるアクティブspelの数の比率。
current_fill ← current_fill
accumulated_opacity ← accumulated_opacity
coverage←coverage?(coverage?A-buffer)
次のステップ104は以下のように現在のパラメータ集合を更新する:
current_fill ← current_fill
accumulated_opacity ← (1-current_alpha)*(1-accumulated_opacity)
coverage ← coverage?A-buffer
尚、accumulated_opacity及びcurrent_alphaは範囲[0..1]の実数として表現される値として意図される。
図13に戻ると、ステップ114で入力集合において可変アルファ塗りつぶしが検出された場合、ボトムアップ合成ステップ115が行なわれる。
total_contrib = 0
最上の可変アルファ塗りつぶしの上方の塗りつぶしごとに
total_contrib=total_contrib+fill[n].contrib
botton_up_contrib=1−total_contrib
ここで、
fill[n].contrib=図13のフローチャートのステップ113において計算されるような、最上の可変アルファ塗りつぶしの上方のn番目の塗りつぶしの貢献度値
ボトムアップ合成結果に対する貢献度値が計算されると、以下のアルゴリズムに従って合成バッファへと倍増される:
合成バッファの画素ごとに
cb[n]=cb[n]*bottom_up_contrib
ここで、
cb[n]=合成バッファのn番目の画素
明度(cb[n])を乗じたスカラー値(bottom_up_contrib)の上述の表現は、色の全成分のスカラーによる乗算を指し示す。
composite_bufferの画素ごとに
cb[n]=cb[n]+work_alpha*(cb[n]−work)
ここで
cb[n]=合成バッファのn番目の画素
work_alpha=作業バッファの画素のアルファ
work=作業バッファの画素
ボトムアップ合成の実行はステップ51へと戻る。
合成バッファ及び塗りつぶしバッファの画素ごとに
cb[n]=cb[n]+fb[n].alpha*(cb[n]−fb[n]) 式1
ここで
cb[n]=合成バッファのn番目の画素
fb[n]=塗りつぶしバッファのn番目の画素
fb[n].alpha=塗りつぶしバッファのn番目の画素のアルファ
ボトムアップ合成の実行は51へと続く。
図13のステップ118において示されるトップダウン合成プロセスについて図55を参照して詳細に説明する。このプロセスは、ステップ112において判定されるような最上の可変アルファ塗りつぶしの上方の全ての塗りつぶしに適用される。可変アルファ塗りつぶしが入力集合に存在しない場合、トップダウンアルファプロセスが入力集合の全ての塗りつぶしに適用される。
wb=wb+current_fill.contrib*current_fill.color 式2
ここで
wb=作業バッファ
current_fill.contrib=current_fillのcontribution_value
current_fill.color=current_fillの明度
ステップ605では、x依存塗りつぶしが扱われ、以下のように進められる。x依存塗りつぶしの各画素が生成され、以下のアルゴリズムに従って合成バッファへとただちに合成される:
cb[n] = cb[n] + current_fill.contrib * gp
ここで
cb[n]=合成バッファのn番目の画素
Current_fill.contrib=current_fillのcontribution_value
gp=現在考慮中の生成された塗りつぶし画素
ステップ605又はステップ606が終了すると、実行はステップ601へと戻る。
composite_bufferの画素ごとに
cb[n]=cb[n]+wb
ここで
cb[n]=composite_bufferのn番目の画素
wb=作業バッファ
これでトップダウン合成は完了する。composite_bufferは出力ランの完全に合成された画素を含む。
合成プロセスの代替の手法について説明する。可能な限りトップダウン合成プロセスを使用する代わりにこの手法を使用することにより、可変アルファ層が遭遇する場合に大規模なボトムアップ合成を潜在的に行なう必要がなくなる。このため、トップダウン合成が提供する利点が最大になる。
(i) 可変アルファ層により分けられる各グループへと各層を分割する
(ii) 各グループに対してトップダウン合成を実行してグループ画素値を判定し、それにより、可変アルファ層により分けられるグループ画素値から構成される減少した数へと元の層を分割する
(iii) 任意の1つのグループの貢献度が所定の閾値100%(すなわち、完全に不透明)内にある場合、全ての可変アルファ層及び閾値グループの下方のグループは貢献しないものとして無視することができる
(iv) ラン中の画素ごとに、これらの貢献グループ及び可変アルファ層のボトムアップ合成を行ない、対応する画素値を判定する
合成プロセスの更なる実現は以下のように2つのバッファを使用することで達成することができる:
(i) 最上層から第1のバッファを使用して開始し、第1の可変アルファ層まで(第1の可変アルファ層を含む)トップダウン合成を行なう
(ii) 第2のバッファを使用して次の可変アルファ層まで(次の可変アルファ層を含む)これらの層のトップダウン合成を行なう
(iii) 第1の層を第2の層の上に合成し、結果を第1のバッファに保持する
(iv) 全ての層を合成し終わるまでステップ(ii)及び(iii)を繰り返す。かつてのように、可変アルファ層の上方の層の任意の集合の貢献度が所定の閾値100%(すなわち、ほぼ又は完全に不透明)に到達する場合、全ての可変アルファ層及び閾値グループの下方のグループは貢献しないものとして無視することができ、合成は中止することができる
尚、上述の更なる情報は、可変アルファ層の進歩的な包含が下方のグループから層の貢献度を正確に説明しないため、画像を正確に描くことはない。例えば、第1の可変アルファ層まで(第1の可変アルファ層を含まない)の全ての最上の層の貢献度が80%である場合、第1の可変アルファ層及び全ての下方の層の貢献度は20%となるはずである。第1の可変アルファ層を上述のものとの合成は、貢献度のバランスを歪め、不正確ではあるが高速な合成が得られる。これは、最終的な画像レンダリングには望ましくないかもしれないが、全ての層の詳細が正確でなくても良い画像構成のプレビュー段階では十分であるだろう。
(a) 作業バッファ1上の作業バッファ2が作業バッファ2に格納され、
(b) 次の可変不透明度層上の作業バッファ2が作業バッファ2に格納される
図64に示す合成手法6400を参照すると、ステップ6401は合成スタックから固定色を合成し、作業バッファ0において固定色を形成する。ステップ6402は、2つの可変色を作業バッファ1へと合成する。ステップ6403は、作業バッファ0を作業バッファ1上に合成し、結果を作業バッファ2に格納する。これらのステップは必然的に前の手法と一致する。ステップ6404において、作業バッファ1は第1の可変不透明度層上に合成され、結果は作業バッファ2に格納される。ステップ6405は前のように動作し、貢献度が作業バッファ0内にローカルで保持されることを除いては、次の2つの固定色を合成する。ステップ6406は作業バッファ2を作業バッファ0上に合成し、結果は作業バッファ2に格納される。ステップ6407は作業バッファ2を合成し、これは、次の可変不透明度層上の可変不透明度色であり、結果は作業バッファ2に格納される。ステップ6408から6410は、事実上、ステップ6401から6403を繰り返す。ステップ6411は、作業バッファ2を作業バッファ1上に合成し、結果は作業バッファ2に保持される。ステップ6412は、次の可変不透明度層上の作業バッファ2を処理することによって、合成プロセスを終了し、最終結果は作業バッファ2に保持される。
上述のトップダウン合成技術は、ボトムアップ合成技術よりも好まれる。トップダウン合成技術は、2つの層を合成するのに必要な計算の量においてより効率的である。これは、第7.6節及び第7.7節の式1及び2を参照することによって明らかである。
図56の画素生成モジュール611は、単一のz−レベルに対して画素値のランを生成することに関わっている。
−ステップ396における線形傾斜、
−ステップ397における放射状傾斜、及び
−ステップ398におけるビットマップ塗りつぶし
生成された明度は、合成モジュール612による合成に対して準備のできた合成バッファ又は塗りつぶし生成バッファへと格納される。
z−レベルは線形傾斜塗りつぶしを有しても良い。従来技術では、線形傾斜塗りつぶしは線形ブレンドと呼ばれることが多い。線形傾斜塗りつぶしは、指定の想像線から陰影をつけられる点の垂直距離によって決まる明度を使用して表面に陰影をつけることを伴う。
−ラスタ空間水平方向における画素ステップごとの傾斜空間水平位置における変化 ∂u/∂x、
−ラスタ空間垂直方向における画素ステップごとの傾斜空間水平位置における変化∂u/∂y 、及び
−ラスタ空間起点に対応する傾斜空間位置uo
これらの事前に計算された値は、ラスタ空間変換に対する傾斜に依存し、変換が修正された場合にのみ再計算を必要とする。
u=uo+xstart×∂u/∂x+ystart×∂u/∂y
従って、u値を直接使用することによって傾斜ルックアップテーブルへの実際の索引を判定することができる。このような索引値を使用することで、傾斜ルックアップテーブルからの対応する明度をステップ313で先に説明したように判定することができる。
un=un−1+∂u/∂x
このプロセスは、ラン中の全ての所要の画素が生成されるまで繰り返される。これに続いて、ステップ314において判定されたように、同じ線形傾斜を使用してレンダリングすることが必要なランが更に存在する場合、ステップ312においてレンダリングする新規のランの開始画素に対して最初の傾斜空間水平位置uを再計算し、ステップ313においてランの各画素に対して画素明度を生成するプロセスを繰り返すことによって同じプロセスを繰り返しても良い。
z−レベルは放射状傾斜塗りつぶしを有しても良い。放射状傾斜塗りつぶしは放射状ブレンドとも呼ばれる。放射状傾斜塗りつぶしは、放射状傾斜の指定の中心点から陰影をつけられる点の距離に依存する明度を使用して表面に陰影をつけることとして考えられる。放射状傾斜画素を生成するプロセスは先に説明した線形傾斜画素のプロセスに類似している。
(i) ラスタ空間水平方向における画素ステップごとの傾斜空間水平位置における変化 ∂u/∂x、
(ii) ラスタ空間水平方向における画素ステップごとの傾斜空間垂直位置における変化 ∂v/∂x、
(iii) ラスタ空間垂直方向における画素ステップごとの傾斜空間水平位置における変化 ∂u/∂y、
(iv) ラスタ空間垂直方向における画素ステップごとの傾斜空間垂直位置における変化 ∂v/∂y、及び
(v) ラスタ空間起点に対応する傾斜空間位置(uo,vo)
これらの事前に計算された値は、ラスタ空間変換に対する傾斜に依存し、変換が修正されたときに再計算のみを必要とする。これらの事前に計算された値を使用することにより、傾斜ルックアップテーブル索引の2乗(index2)の増分的トラッキングが可能になる。ラスタスキャンレンダリングへの指定の実現例において、indexはレンダリング中の画素位置に対する放射状傾斜の中心点からの距離と同等である。
これらの傾斜トラッキングパラメータのグラフィカル表現は図27に示されるであろう。尚、図では線形傾斜塗りつぶしを示すが、内容は放射状傾斜生成にも同様に適用可能である。図27において、ラスタ空間X−Y269のラスタ出力装置が示される。傾斜空間U−V270において定義される傾斜はラスタ装置空間269へとラスタ化される。ラスタ装置のラスタ走査線267は、走査線内の開始画素268で開始する傾斜塗りつぶし画素のランを含む。正の水平ラスタ空間方向における単一のラスタ画素ステップに対して、傾斜空間水平位置における対応する変化∂u/∂x271及び傾斜空間垂直位置における対応する変化∂v/∂x272が示される。正の垂直ラスタ空間方向における単一のラスタ画素ステップに対して、傾斜空間水平位置における対応する変化∂u/∂y273及び傾斜空間垂直位置における対応する変化∂v/∂y274が示される。
このため、塗りつぶし生成バッファへと出力されるランを形成する1つ以上の連続画素に対する画素明度を生成することに進むことが可能である。開始画素のラスタ空間座標位置(xstart,ystart)から判断して、対応する最初の傾斜空間位置(ustart,vstart)の計算が行なわれる。図27において、この開始ラスタ画素の例が268において示される。対応する最初の傾斜空間位置は以下の公式を使用して計算されるであろう:
ustart=uo+xstart×∂u/∂x+ystart×∂u/∂y
vstart=vo+xstart×∂v/∂x+ystart×∂v/∂y
これらの計算から、傾斜ルックアップテーブルへの索引を維持するのに使用される最初のトラッキング値が図42のステップ415で判定される。具体的には、この2乗された索引値∂(index2)/∂xに対する最初の2乗された傾斜ルックアップテーブル索引(index2)及び最初の増分値が以下のように計算される:
index2=u2 start+v2 start
∂(index2)/∂x=2×(ustart×∂u/∂x+vstart×∂v/∂x)+(∂u/∂x)2+(∂v/∂x)2
(index2)値が計算されると、先に説明したように傾斜ルックアップテーブルを使用してステップ416において対応する明度が参照できるように平方根が取られても良い。
index2 n=index2 n−1+∂(index2 n−1)/∂x
∂(index2 n)/∂x=∂(index2 n−1)/∂x+2×{(∂u/∂x)2+(∂v/∂x)2}
尚、値2×{(∂u/∂x)2+(∂v/∂x)2}は一定であり、事前に計算されても良い。
z−レベルはビットマップ画層塗りつぶしを有しても良い。これにより、z−レベルの塗りつぶしはある色空間における点サンプルを定義する画素データの列から構成されるデジタル画像に基づいても良いことを意味する。ビットマップ画像の画素データは、任意のフレームの前で更新されても良い。このような技術により、動画ビデオに類似する動画ビットマップ画像塗りつぶし効果を促進する。ビットマップ画像塗りつぶしは、傾斜塗りつぶしをレンダリングするために記述されたものと同様の手法を伴う。
(i) ラスタ空間水平方向における画素ステップごとのビットマップ空間水平位置における変化∂u/∂x、
(ii) ラスタ空間水平方向における画素ステップごとのビットマップ空間垂直位置における変化∂v/∂x、
(iii) ラスタ空間垂直方向における画素ステップごとのビットマップ空間水平位置における変化∂u/∂y、
(iv) ラスタ空間垂直方向における画素ステップごとのビットマップ空間垂直位置における変化∂v/∂y、及び
(v) ラスタ空間起点に対応するビットマップ空間位置(uo,vo)
これらの事前に計算された値は、ラスタ空間変換に対するビットマップに依存し、変換が修正されたときに再計算のみを必要とする。これらの事前に計算された値を使用することにより、ビットマップ画像データの現在の画素のアドレス(address)の増分的トラッキングが可能になる。
ustart=uo+xstart×∂u/∂x+ystart×∂u/∂y
vstart=vo+xstart×∂v/∂x+ystart×∂v/∂y
これらの計算から、ビットマップ画像データへの最初のアドレス(address)がステップ45で判定される。アドレスbitmapbaseで開始する走査順を伴うビットマップ画像に関して、ビットマップ画像データは画素ごとにbppバイトであり、rowstrideバイトの列ストライドを有し、ビットマップ画像データへの最初のアドレスは以下のように計算されても良い:
address=bitmapbase+vstart×rowstride+ustart×bpp
address値の計算が終わると、そのアドレスの画素明度は、現在の出力ラスタ画素に対する出力画素明度としてステップ46において使用されても良い。画素の明度の生成後、ステップ47において判定されるように、ビットマップ画像から生成される現在の画素のランに更なる画素明度が存在する場合、address値は以下の再帰関係に従ってステップ48において増分されても良い:
addressn=addressn−1+∂v/∂x×rowstride+∂u/∂x×bpp
尚、addressが増加する値は定数として事前に計算されても良い。このプロセスは、現在の画素のランの全ての画素が生成されるまで繰り返される。これに続いて、ステップ49において判定されるように同じビットマップ画像を使用するレンダリングを必要とする更なる画素のランが存在する場合、ステップ45において画素の次のランの開始画素に対する最初の索引addressを再度計算することによって同じプロセスが繰り返されても良い。要約すると、このモジュールにより、画素ごとに2つの加算のみを行なうことによって出力画素のランに沿ってレンダリングできるようになる。
図56の画素抽出モジュール618は、ラスタ化プロセスの最終ステップを行なって終了した画素を出力する。これらの画素は、直接表示装置へ出力することも、後で表示装置に出力できるようにフレームバッファメモリへと格納することもできる。画素出力の目標はシステム設計の選択である。一部のシステムは、画素出力目標のうちの1つのみを使用するであろうが、他のシステムは出力目標に関してランタイム構成可能であっても良い。
画素抽出モジュール618は、入力データとして「スパン」を受け入れる。スパンは、同じ色を有する表示装置走査順の一連の連続画素である。スパンの長さは、1画素の小ささであっても、画素のフルディスプレイの大きさであっても良い。各スパンはスパンの色及び画素におけるその長さという2つの値として画素抽出モジュール618へと入力される。
動作のこのモードでは、画素抽出モジュール618はフレームバッファメモリへと画素を出力する。このモードの動作を図37のフローチャートを参照して説明する。ステップ370において、処理が開始する。ステップ371において、フレームバッファ位置変数X及びYの双方がゼロに初期化される。これは、フレームバッファの右上の出力位置を示す。ステップ378において、画素抽出モジュール618は表示すべき次のスパンを受け入れる。ステップ377において、変数N及びCにはそれぞれスパンの長さ及び色が割り当てられる。ステップ376が続く。ステップ376において、画素抽出モジュール618はフレームバッファの位置(X,Y)における画素の色を色Cに設定する。ステップ375において、フレームバッファ位置X変数が増分される。ステップ379において、フレームバッファ変数Xはフレームバッファの幅と比較される。Xがフレームバッファの幅に到達又は幅を超える場合、処理はステップ374へと移る。幅に至らない場合、処理はステップステップ369で継続する。ステップ369において、スパン長さカウンタ変数Nが減分される。ステップ380において、スパン長さカウンタ変数Nがゼロと比較される。ゼロの場合、処理はステップ378へと移る。ゼロでない場合、ステップ376へと移る。図37のステップ374において、フレームバッファ変数Xがゼロに設定され、フレームバッファ変数Yが増分される。ステップ373において、フレームバッファ変数Yはフレームバッファ高さと比較される。Yが高さ以上である場合、処理はステップ372で終了し、未満である場合、ステップ369で継続する。
この動作モードでは、画素抽出モジュール618は、画素を直接表示装置へと出力する。画素抽出モジュール618に対するスパン情報の到達は、画素が表示装置上に表示される速度と非同期であることが多いので、画素抽出モジュール618はFIFO(先入れ先出し)バッファを使用してスパンを表示装置に出力する前に待ち行列に入れる。FIFOバッファは、入力スパンのタイミングと出力画素のタイミングとの間で弾性の尺度を提供する。
図29は、画素抽出モジュール618により使用されるハーフトーン技術を示す。この技術は誤差拡散の一種である。図29(a)は、次の走査線上の4つの画素を含む5つの隣接する画素に画素の量子化誤差を拡散する従来技術の誤差拡散技術を示す。図29(b)は画素抽出モジュール618の誤差拡散技術を示し、この技術では、画素の量子化誤差を現在の画素と同じ走査線上の1つの隣接する画素にのみ拡散する。図29(c)は画素抽出モジュール618の誤差拡散システム2900のシステムブロック図である。システム2900は単純な1次負帰還制御システムである。現在の画素の5ビット精度までの量子化によりもたらされる誤差が次の画素に追加され、負帰還がもたらされる。システム2900は、図29(c)に示すように結合された量子化器2901及び加算器2902を使用してハードウェアで構成されても良い。あるいは、図30に示す方法を使用してソフトウェアで誤差拡散システムが構成されても良い。誤差拡散アルゴリズムは説明を簡略にするために1つの色チャネルに関してのみ説明する。実際のシステムは、全ての色チャネルが同様に処理される。
上述のTCIEシステム699は、ハードウェア及びソフトウェアのいずれかにより実現されても、あるいは、これらの組み合わせにより実現されても良い。ハードウェア実現例では、図56の各モジュールは1つ以上のASIC装置へと統合され、携帯電話機のような目標装置へと組み込まれても良い。ソフトウェア実現例では、このようなソフトウェアは汎用に動作するように構成されても良いが、通常は、限られたコンピューティングシステムでは、限られた容量のプロセッサが使用されている。ハイブリッド実現例は、ソフトウェアで実現される表示リストコンパイラ608、あるいは、ハードウェアで実現されるレンダリングエンジン610又はその一部に向いている。このような例では、通常、データ(画像)入力の汎用性及びレンダリング速度の高速性がもたらされる。更に、システム699がシン・クライアント上での利用のために開発されているにも関わらず、このようなものでは、デスクトップコンピュータ、セットトップボックスなどの重要なコンピューティングリソースを有する装置に適用される同じイメージング/レンダリング手法を妨げない。
Claims (25)
- ラスタスキャン法でレンダリングすべき画像レイヤの合成スタックを簡略化する方法であって、2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しない方法において、
(i) 各々が可変の透明度を有するレイヤにより分離される複数のグループへと前記レイヤを分割する工程と、
(ii) 前記グループのうちの最上の1つに対して、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと削減する工程と
を備えることを特徴とする方法。 - 前記工程(ii)は、前記ラン中の一定色を有するレイヤを関連する蓄積された貢献度を有する単一の等しい色へと削減する工程を備えることを特徴とする請求項1に記載の方法。
- 前記工程(ii)は、可変色の一定の透明度のレイヤを前記削減されたレイヤの蓄積である関連する貢献度を有する単一の等しい可変色のランへと削減する工程を備えることを特徴とする請求項1に記載の方法。
- 前記削減は前記レイヤのトップダウン評価であり、
前記方法は更に、
前記蓄積された貢献度を監視する工程と、
前記蓄積された貢献度が所定の閾値100%以内であるときに前記削減を停止する工程と、
前記削減の最後に含まれるレイヤの下方にある全てのレイヤを破棄する工程と
を備えることを特徴とする請求項1に記載の方法。 - 前記所定の閾値は前記合成結果の所望の精度及び実行すべき動作の数に依存することを特徴とする請求項4に記載の方法。
- ラスタスキャン法でレンダリングすべき画像レイヤのスタックを合成する方法であって、2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しない方法において、
前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割する工程と、
前記グループのうちの最上の1つに対して、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと削減する工程と、
貢献度が計算され、前記ランにわたって色が一定でない各レイヤに対して、前記ラン中の各画素に対して画素値を生成する工程と、
前記生成された画素値を組み合わせることによって前記画素のランを生成する工程と
を備えることを特徴とする方法。 - 非一定色を有するレイヤに対して生成された画素は単一のバッファへと組み合わされることを特徴とする請求項6に記載の方法。
- 可変の透明度を有するレイヤの下方の各レイヤに対して、
(iii) 繰り返し前記工程(i)及び(ii)を実行する工程と、
(iv) 前記工程(iii)の結果を前記可変透明度レイヤの画素値とを組み合わせる工程と
を更に備えることを特徴とする請求項1に記載の方法。 - ラスタスキャン法でレンダリングすべき画像レイヤのスタックを合成する方法であって、2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しない方法において、
(a) 前記合成スタックを簡略化する工程であって、当該工程は
(i) 前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割する工程と、
(ii) 前記グループのうちの最上の1つに対して、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと合成することで削減する工程と
によって行われ、
(b) ボトムアップ式で最上の可変透明度レイヤを含むこれより下方の全てのレイヤを合成する工程と、
(c) 前記工程(a)及び(b)の結果を合成する工程と
を備えることを特徴とする方法。 - 関連する透明度値を有する少なくとも2つのレイヤを有する画像をレンダリングする方法であって、2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しない方法において、
(a) 前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割する工程と、
(b) それぞれの前記グループ内のレイヤのトップダウン合成を行なって、対応するグループ画素値を判定することによって、前記元のレイヤを前記可変透明度レイヤにより分離されるグループ画素値から構成される削減数へと分解する工程と、
(c) グループの貢献度が所定の閾値100%内に入る場合に全ての可変透明度レイヤ及び前記閾値グループの下方の各グループを貢献しないものとして無視することができるように前記それぞれのグループの貢献度を評価する工程と、
(d) 前記ラン中の画素ごとに、貢献するグループ及び可変透明度レイヤのボトムアップ合成を行なって対応する画素値を判定する工程と
を備えることを特徴とする方法。 - 関連する透明度値を有する少なくとも2つのレイヤを有する画像をレンダリングする方法であって、2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しない方法において、
(a) 前記レイヤのうちの最上の1つで開始し、第1のバッファを使用して第1の可変透明度レイヤを含むこれより上方のレイヤに対してトップダウン合成を行なう工程と、
(b) 第2のバッファを使用して次の可変透明度レイヤを含むこれより上方の更なるレイヤのトップダウン合成を行なう工程と、
(c) 前記第2のバッファに対して前記第1のバッファを合成し、その合成結果を前記第1のバッファに格納する工程と、
(d) 前記工程(b)及び(c)を繰り返して前記レイヤのうちの残りのレイヤを合成する工程と
を備えることを特徴とする方法。 - 前記工程(d)は、可変透明度レイヤの上方のレイヤの任意のグループの貢献度が所定の閾値100%以内であるときに、全ての可変透明度レイヤ及び閾値グループの下方の各グループを貢献しないものとして無視することができ、且つ合成を中断することができるという終了条件を含むことを特徴とする請求項11に記載の方法。
- プログラムを記録し、ラスタスキャン法でレンダリングすべき画像レイヤの合成スタックを簡略化する手順をコンピュータに実行させるように構成され、前記プログラムは2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しないコンピュータ読み取り可能な記憶媒体であって、
前記プログラムは、
前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割するコードと、
前記グループのうちの最上の1つに対して動作可能であり、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと削減するコードと
を備えることを特徴とするコンピュータ読み取り可能な記憶媒体。 - 前記削減コードは、前記ラン中の一定色を有するレイヤを関連する蓄積された貢献度を有する単一の等しい色へと削減するコードを備えることを特徴とする請求項13に記載のコンピュータ読み取り可能な記憶媒体。
- 前記削減コードは、可変色の一定の透明度のレイヤを前記削減されたレイヤの蓄積である関連する貢献度を有する単一の等しい可変色のランへと削減するコードを備えることを特徴とする請求項13に記載のコンピュータ読み取り可能な記憶媒体。
- 前記削減は前記レイヤのトップダウン評価であり、
前記プログラムは更に、
前記蓄積された貢献度を監視し、前記蓄積された貢献度が所定の閾値100%以内であるときに前記削減を停止するように動作し、評価される前記レイヤの下方にある全てのレイヤを破棄するコードを備えることを特徴とする請求項13に記載のコンピュータ読み取り可能な記憶媒体。 - 前記所定の閾値は合成結果の所望の精度及び実行すべき動作の数に依存していることを特徴とする請求項16に記載のコンピュータ読み取り可能な記憶媒体。
- プログラムを記録し、ラスタスキャン法でレンダリングすべき画像レイヤのスタックを合成する手順をコンピュータに実行させるように構成され、前記プログラムは2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しないコンピュータ読み取り可能な記憶媒体であって、
前記プログラムは、
前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割するコードと、
前記グループのうちの最上の1つに対して動作可能であり、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと合成することで削減するコードと、
貢献度が計算され、前記ランにわたって色が一定でない各レイヤに対して動作可能であり、前記ラン中の各画素に対して画素値を判定するコードと、
前記生成された画素値を組み合わせることによって前記画素のランを生成するコードと
を備えることを特徴とするコンピュータ読み取り可能な記憶媒体。 - 非一定色を有するレイヤに対して生成された画素は単一のバッファへと組み合わされることを特徴とする請求項18に記載のコンピュータ読み取り可能な記憶媒体。
- 更に、
可変の透明度を有するレイヤの下方の各レイヤに対して動作可能であり、
(i) 前記分割コード及び削減コードを繰り返し呼び出すように構成されたコードと、
(ii) 前記再帰的呼出しの結果を前記可変透明度レイヤの画素値と組み合わせるコードと
を備えることを特徴とする請求項13に記載のコンピュータ読み取り可能な記憶媒体。 - プログラムを記録し、ラスタスキャン法でレンダリングすべき画像レイヤのスタックを合成する手順をコンピュータに実行させるように構成され、前記プログラムは2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しないコンピュータ読み取り可能な記憶媒体であって、
前記プログラムは、
(a) 第1のコードであって、当該第1のコードは、
(i) 前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割するコードと、
(ii) 前記グループのうちの最上の1つに対して動作可能であり、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと合成することで削減するコードと、
(iii) 前記簡略化されたレイヤを合成するコードと
により構成されており、
(b) ボトムアップ式で最上の可変透明度レイヤを含むこれより下方の全てのレイヤを合成する第2のコードと、
(c) 前記第1のコード及び第2のコードの結果を合成するコードと
を備えることを特徴とするコンピュータ読み取り可能な記憶媒体。 - プログラムを記録し、関連する透明度値を有する少なくとも2つのレイヤを有する画像をレンダリングする手順をコンピュータに実行させるように構成され、前記プログラムは2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しないコンピュータ読み取り可能な記憶媒体であって、
前記プログラムは、
前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割するコードと、
各前記グループ内のレイヤのトップダウン合成を行なって、対応するグループ画素値を判定することによって、前記元のレイヤを前記可変透明度レイヤにより分離されるグループ画素値から構成される削減数へと分解するコードと、
グループの前記貢献度が所定の閾値100%内に入る場合に全ての可変透明度レイヤ及び前記閾値グループの下方の各グループを貢献しないものとして無視することができるように前記それぞれのグループの貢献度を評価するコードと、
前記ラン中の画素ごとに動作可能であり、これら貢献するグループ及び可変透明度レイヤのボトムアップ合成を行なって、対応する画素値を判定するコードと
を備えることを特徴とするコンピュータ読み取り可能な記憶媒体。 - プログラムを記録し、関連する透明度値を有する少なくとも2つのレイヤを有する画像をレンダリングする手順をコンピュータに実行させるように構成され、前記プログラムは2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しないコンピュータ読み取り可能な記憶媒体であって、
前記プログラムは、
前記レイヤのうちの最上の1つで開始し、第1のバッファを使用して第1の可変透明度レイヤを含むこれより上方のレイヤに対してトップダウン合成を行なう第1のコードと、
第2のバッファを使用して、次の可変透明度レイヤを含むこれより上方の更なるレイヤのトップダウン合成を行なう第2のコードと、
前記第2のバッファに対して前記第1のバッファを合成し、その合成結果を前記第1のバッファに格納するコードと、
前記第1のコード及び第2のコードの呼出しを繰り返して前記レイヤのうちの残りのレイヤを合成するコードと
を備えることを特徴とするコンピュータ読み取り可能な記憶媒体。 - 前記繰返しコードは、可変透明度レイヤの上方のレイヤの任意のグループの貢献度が所定の閾値100%以内であるときに全ての可変透明度レイヤ及び閾値グループの下方の各グループを貢献しないものとして無視することができ、且つ合成を中断することができるという終了条件を実行するコードを備えることを特徴とするコンピュータ読み取り可能な記憶媒体。
- ラスタスキャン法でレンダリングすべき画像レイヤの合成スタックを簡略化する装置であって、2つ以上の画素のランにわたって動作可能であり、前記画素内で前記ランに貢献するグラフィカルオブジェクトが変化しない装置であって、
前記複数のレイヤを、可変の透明度を有するレイヤにより分離されるグループ毎に分割する手段と、
前記グループのうちの最上の1つに対して、前記ラン中の前記グループのレイヤを関連する蓄積された貢献度を有する単一の等しいレイヤへと削減する手段と
を備えることを特徴とする装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
AU2003903445A AU2003903445A0 (en) | 2003-06-26 | 2003-06-26 | Optimising compositing calculations for a run of pixels |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2005044346A true JP2005044346A (ja) | 2005-02-17 |
JP2005044346A5 JP2005044346A5 (ja) | 2006-12-28 |
JP4035521B2 JP4035521B2 (ja) | 2008-01-23 |
Family
ID=31983078
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004190406A Expired - Fee Related JP4035521B2 (ja) | 2003-06-26 | 2004-06-28 | 画素のランのための合成計算の最適化 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7292256B2 (ja) |
JP (1) | JP4035521B2 (ja) |
AU (1) | AU2003903445A0 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012514263A (ja) * | 2008-12-31 | 2012-06-21 | エスティー‐エリクソン、ソシエテ、アノニム | 画像ブレンドプロセス及び画像ブレンド装置 |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7714865B2 (en) * | 2004-03-09 | 2010-05-11 | Canon Kabushiki Kaisha | Compositing list caching for a raster image processor |
US8631347B2 (en) * | 2004-11-15 | 2014-01-14 | Microsoft Corporation | Electronic document style matrix |
ATE501487T1 (de) * | 2004-12-21 | 2011-03-15 | Canon Kk | Segmentierung eines digitalen bildes und herstellung einer kompakten repräsentation |
US7701463B2 (en) * | 2005-05-09 | 2010-04-20 | Autodesk, Inc. | Accelerated rendering of images with transparent pixels using a spatial index |
US20080263070A1 (en) * | 2005-09-13 | 2008-10-23 | Microsoft Corporation | Common drawing objects |
US8294731B2 (en) * | 2005-11-15 | 2012-10-23 | Advanced Micro Devices, Inc. | Buffer management in vector graphics hardware |
US7734112B1 (en) * | 2005-12-12 | 2010-06-08 | Vy Corporation | Method and system for identifying an object in an electronically acquired image |
US7616203B1 (en) * | 2006-01-20 | 2009-11-10 | Adobe Systems Incorporated | Assigning attributes to regions across frames |
US7567259B2 (en) * | 2006-03-27 | 2009-07-28 | Lsi Corporation | System and method for display compositing |
CA2679358C (en) * | 2007-03-09 | 2015-12-01 | International Business Machines Corporation | Determining request destination |
US20090058863A1 (en) * | 2007-09-04 | 2009-03-05 | Apple Inc. | Image animation with transitional images |
AU2009212881B2 (en) * | 2009-08-31 | 2012-06-14 | Canon Kabushiki Kaisha | Efficient radial gradient fills |
AU2009225336B2 (en) * | 2009-10-13 | 2011-08-04 | Canon Kabushiki Kaisha | Method of compositing variable alpha fills supporting group opacity |
US8830300B2 (en) * | 2010-03-11 | 2014-09-09 | Dolby Laboratories Licensing Corporation | Multiscalar stereo video format conversion |
JP2012027572A (ja) * | 2010-07-21 | 2012-02-09 | Sony Corp | 画像処理装置および方法、並びにプログラム |
US20130120424A1 (en) * | 2011-11-14 | 2013-05-16 | Qualcomm Innovation Center, Inc. | Method and apparatus for improved rendering of images |
US8847970B2 (en) | 2012-04-18 | 2014-09-30 | 2236008 Ontario Inc. | Updating graphical content based on dirty display buffers |
US9262841B2 (en) * | 2013-11-15 | 2016-02-16 | Intel Corporation | Front to back compositing |
CN105701823A (zh) * | 2016-01-14 | 2016-06-22 | 无锡北邮感知技术产业研究院有限公司 | 由遮挡关系恢复深度次序的方法 |
CN105719288A (zh) * | 2016-01-19 | 2016-06-29 | 无锡北邮感知技术产业研究院有限公司 | 基于二叉树的单目图像中物体深度次序估计方法 |
CN107292945B (zh) * | 2016-03-31 | 2021-01-26 | 阿里巴巴集团控股有限公司 | 视频图像的图层渲染处理方法及其系统 |
DE102017114470B4 (de) * | 2017-06-29 | 2020-07-09 | Canon Production Printing Holding B.V. | Verfahren zur Stabilisierung eines Gebersignals |
US10540811B2 (en) * | 2018-06-05 | 2020-01-21 | Kyocera Document Solutions Inc. | Radial gradient module |
CN111583365B (zh) * | 2020-04-24 | 2023-09-19 | 完美世界(北京)软件科技发展有限公司 | 动画元素显示的处理方法及装置、存储介质、终端 |
CN112037287B (zh) * | 2020-08-26 | 2024-02-09 | 深圳市广宁股份有限公司 | 相机标定方法、电子设备及存储介质 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2690110B2 (ja) * | 1988-08-15 | 1997-12-10 | 沖電気工業株式会社 | 走査変換方法 |
JP3315464B2 (ja) * | 1992-04-29 | 2002-08-19 | キヤノン株式会社 | 画像描写方法及び装置 |
US5990904A (en) * | 1995-08-04 | 1999-11-23 | Microsoft Corporation | Method and system for merging pixel fragments in a graphics rendering system |
US6057855A (en) * | 1997-07-02 | 2000-05-02 | Hewlett-Packard Company | Method and apparatus for providing polygon pixel sub-sample information using incremental means |
US6128000A (en) * | 1997-10-15 | 2000-10-03 | Compaq Computer Corporation | Full-scene antialiasing using improved supersampling techniques |
JP4148377B2 (ja) | 1997-10-28 | 2008-09-10 | 松下電器産業株式会社 | 画像生成装置、画像生成方法、画像生成プログラム記録媒体、画像合成装置、画像合成方法、および画像合成プログラム記録媒体 |
US6362818B1 (en) * | 1998-01-07 | 2002-03-26 | Evans & Sutherland Computer Corporation | System and method for reducing the rendering load for high depth complexity scenes on a computer graphics display |
US6028583A (en) * | 1998-01-16 | 2000-02-22 | Adobe Systems, Inc. | Compound layers for composited image manipulation |
JP4399910B2 (ja) | 1998-09-10 | 2010-01-20 | 株式会社セガ | ブレンディング処理を含む画像処理装置及びその方法 |
WO2000068892A1 (en) * | 1999-05-07 | 2000-11-16 | Broadcom Corporation | Method and system for efficiently using fewer blending units for antialiasing |
US6369830B1 (en) * | 1999-05-10 | 2002-04-09 | Apple Computer, Inc. | Rendering translucent layers in a display system |
AUPS028702A0 (en) | 2002-02-01 | 2002-02-28 | Canon Kabushiki Kaisha | Efficient display update from changing object graphics |
-
2003
- 2003-06-26 AU AU2003903445A patent/AU2003903445A0/en not_active Abandoned
-
2004
- 2004-06-25 US US10/875,199 patent/US7292256B2/en not_active Expired - Fee Related
- 2004-06-28 JP JP2004190406A patent/JP4035521B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012514263A (ja) * | 2008-12-31 | 2012-06-21 | エスティー‐エリクソン、ソシエテ、アノニム | 画像ブレンドプロセス及び画像ブレンド装置 |
Also Published As
Publication number | Publication date |
---|---|
AU2003903445A0 (en) | 2003-07-17 |
US7292256B2 (en) | 2007-11-06 |
JP4035521B2 (ja) | 2008-01-23 |
US20050017984A1 (en) | 2005-01-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4073029B2 (ja) | グラフィックオブジェクトレンダリングにおけるアンチエイリアシング合成 | |
JP4035521B2 (ja) | 画素のランのための合成計算の最適化 | |
JP4101275B2 (ja) | 走査線ベースのラスタ画像プロセッサにおける奥行き追跡の方法 | |
JP2005050317A (ja) | グラフィックオブジェクトシステムにおける連続フレームのレンダリング | |
JP4366387B2 (ja) | 画像処理装置及び方法 | |
US7872648B2 (en) | Random-access vector graphics | |
US7417645B2 (en) | Markup language and object model for vector graphics | |
JP4343344B2 (ja) | ラスタ形式のグラフィックオブジェクトを用いたイメージの高速レンダリング方法 | |
US5307451A (en) | Method and apparatus for generating and manipulating graphical data for display on a computer output device | |
US5977982A (en) | System and method for modification of the visual characteristics of digital 3D objects | |
US7714865B2 (en) | Compositing list caching for a raster image processor | |
US20090009526A1 (en) | Method and system for rendering a shape | |
AU2004202826B2 (en) | Antialiasing Compositing in Graphic Object Rendering | |
AU2004250268B2 (en) | A method for tracking depths in a scanline based raster image processor | |
AU2004202827B2 (en) | Rendering Successive Frames in a Graphic Object System | |
AU2004202825B2 (en) | Optimising Compositing Calculations for a Run of Pixels | |
KR100624455B1 (ko) | 3차원 그래픽스 환경에서의 라이트맵 처리 방법 및 장치 | |
AU2004202775A1 (en) | A Method for Efficient Generation of Radial Gradient Fills | |
Barghiel | Feature oriented composition of B-spline surfaces | |
AU2004202779A1 (en) | Rendering of Generalized Ellipses in a Graphical Object Environment | |
AU2004202778A1 (en) | Method and Apparatus for Stroke Substitution in Computer Graphics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061114 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070416 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070615 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070713 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070911 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20071005 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071029 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101102 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4035521 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101102 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111102 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121102 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131102 Year of fee payment: 6 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |