JP4817792B2 - テクスチャベースのピクセルパッキング - Google Patents

テクスチャベースのピクセルパッキング Download PDF

Info

Publication number
JP4817792B2
JP4817792B2 JP2005299093A JP2005299093A JP4817792B2 JP 4817792 B2 JP4817792 B2 JP 4817792B2 JP 2005299093 A JP2005299093 A JP 2005299093A JP 2005299093 A JP2005299093 A JP 2005299093A JP 4817792 B2 JP4817792 B2 JP 4817792B2
Authority
JP
Japan
Prior art keywords
bit
computer
pixel
bits
texture
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.)
Expired - Fee Related
Application number
JP2005299093A
Other languages
English (en)
Other versions
JP2006134309A (ja
Inventor
スコット ウェッツェル マイケル
オースティン マイケル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US10/979,962 external-priority patent/US7532221B2/en
Priority claimed from US10/979,963 external-priority patent/US7643032B2/en
Priority claimed from US10/980,404 external-priority patent/US7358975B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2006134309A publication Critical patent/JP2006134309A/ja
Application granted granted Critical
Publication of JP4817792B2 publication Critical patent/JP4817792B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Image Generation (AREA)

Description

3次元グラフィックスをレンダリングするための方法に関する。
コンピュータグラフィックスの進歩により、2次元空間(例えばコンピュータ画面またはモニタ)での3次元グラフィカルオブジェクト(例えばビデオゲームにおけるキャラクタ)の表示が可能となった。ビデオゲームおよび3次元グラフィックスを使用するその他のアプリケーションは、ユーザにとってかなり真に迫って見える、ユーザの体験をおもしろくする物である。3次元グラフィックスを生成するための技法の1つにテクスチャの使用が含まれる。テクスチャとは、通常は、シーンの3次元レンダリングにおいて普通であれば平坦なジオメトリで描画する際に、実世界のテクスチャ細部(例えば木、穀類、カーペット、など)をシミュレートするために使用される2次元のビットマップである。いくつかのケースでは、テクスチャは複数の2次元ピクセルで構成される。各ピクセルは位置、カラー、輝度、および深さのプロパティを有する。テクスチャはいったん作成されると、テキストまたは記号を提示するイメージを含む多くのタイプのイメージをレンダリングするために使用することができる。テクスチャはテキストを必要に応じて容易に投影、拡大縮小、および回転することができるため、2次元テキストをレンダリングするためにテクスチャを使用することは、一般に、他のテキストレンダリング技法全体にわたって望ましい。
ビデオゲームは視覚的に目立つものでなければ売れないため、1つのシーンで複数の魅力的なフォントが使用されることが望ましい。したがって、アプリケーション(例えば3次元ビデオゲーム)でのテキストレンダリングで使用するための単一のテクスチャは、大規模セットのグリフ(例えばある種のフォントまたはテキストのスタイルに付随するテキスト文字、記号、および/またはイメージ)を含むことができる。いくつかのケースでは、グリフは個別に色付けするか、あるいはアウトラインが黒の白文字、黒のドロップシャドウ、および/またはアンチエイリアシング効果とすることができる。アウトラインおよびドロップシャドウ機能は、典型的には、特に背景カラーによってそれほどコントラストが得られない場合に低解像度ディスプレイ(例えばテレビジョン)上での読みやすさを改善する。アンチエイリアシングは、ピクセルが生成したラインの階段状のギザギザ効果を削減し、グリフのアウトライン近くにグレーまたは淡い色のピクセルを使用することを含む。図1は、アンチエイリアシング、アウトライニング、およびドロップシャドウ機能を使用したグリフ102の一例を示す図である。こうした機能を組み合わせるために、テクスチャビットマップ内の各ピクセルは、各カラーチャネル(例えば赤、緑、青)につき8ビット、透明因子として使用されるアルファチャネルに8ビットの、通常32ビットである。ほとんどのケースでは、中規模サイズセットのグリフは256×256テクスチャビットマップに収まる。図1は、512×256テクスチャビットマップ104の一例も示す。
テクスチャからのテキストレンダリングは、通常、所望のグリフがテクスチャ内に常駐する場合に適合するテクスチャ座標のセットを選択することを含む(例えば文字「G」を構成する座標)。より複雑なシステムでは、フォント用の組込みサポートおよび同様のテキストレンダリングソリューションが、アプリケーションエンドでのテキストレンダリングを簡略化する。しかしながら、こうした組込みソリューションが必ずしもビデオゲームのコンテキストで使用できるとは限らない。例えば、現世代のビデオゲームコンソースにはフォント用の組込みサポートがない。同様に、パーソナルコンピュータ用に開発されたゲームは、典型的な場合では、通常はパーソナルコンピュータのオペレーティングシステムによって提供されるテキストレンダリングソリューションよりも高性能のテキストレンダリングソリューションを必要とする。
これらの理由により、現在のビデオゲームはしばしばそれら自体のテキストレンダリングサポートを提供している。ビデオゲームでのテキストレンダリングには主に2つの方法がある。第1の方法では、コンピュータまたはコンソールのCPUがレンダリングターゲットに直接ビットを書き込む。この技法はテキストを業界標準のトゥルータイプフォントファイルでレンダリングできるようにするものであるが、高いメモリの使用率および性能に関する多数の致命的な欠点がある。例えば、すべてのビデオゲームコンソールがこうした潜在的に大規模なフォントファイルに充てるだけの十分なメモリを持っているわけではないため、CPUはしばしばファイルのキャッシュという手段に頼り、これがさらにランタイム性能を損なうことになる。さらに、ほとんどのCPUはビットマップのレンダリングにはあまり適していない。例えば典型的なCPUのフォントのレンダリングは、グラフィックス処理ユニット(GPU)よりも100から1000倍遅い。
第2の方法は、フォントをビットマップ化されたテクスチャとして格納し、個々のグリフをスクリーン空間整合クワッド(screen−space aligned quads)として(例えば、GPUのテクスチャラスタライザを使用して)レンダリングする。この技法は、GPUの本来の機能を使用して、GPUに関連付けられたハードウェアの最高フィルレート(full fill rate)(1秒当たりのピクセル数で測定)でビットマップベースのフォントをレンダリングする。この技法の制限の1つは、大規模文字セット(例えばユニコード文字セット)で使用される場合、現在のハードウェア機能を超え大量のメモリを使用するテクスチャサイズを必要とする可能性があることである。
現在のテキストレンダリング技法に伴う問題は、国際市場向けのビデオゲームを作成する場合に悪化する。例えば、中国語テキストを含むゲームは約5000〜8000のグリフを必要とする場合がある。各グリフが事前にテクスチャビットマップの20×20ピクセルセクションにレンダリングされた場合、全体のテクスチャビットマップは1800×1800ピクセル、すなわち3.24Mピクセルとなる。ほとんどのゲームコンソールは限られた量のテクスチャフォーマットしかサポートしていないため、1ピクセル当たり8ビットのテクスチャを使用している場合、最低スペース要件は3.24MBである。1ピクセル当たり16ビットのテクスチャ(赤、緑、青、およびアルファチャネルのそれぞれにつき4ビット)では、最低スペース要件は6.48MBである。典型的なビデオゲームコンソールには約32〜64MBの物理メモリおよび約26〜58MBの使用可能メモリしかないため、このように多くのメモリをテキストおよびフォントに充てるのは不合理である。
本発明の目的は、テキストを含む3次元グラフィックスをレンダリングするための方法およびシステムを提供することにある。
テキストを含む3次元グラフィックスをレンダリングするための方法およびシステムは、未圧縮のテクスチャビットマップを圧縮することができる。圧縮されたテクスチャビットマップは、テキスト記号および他のグリフをレンダリングする際に使用可能な出力ピクセルにアンパック可能な値を含む。圧縮されたテクスチャビットマップの各ピクセルは、複数の別個の記号に対応する圧縮されたピクセルに関する値を含む複数の値に関する情報を格納する。例えば、圧縮されたテクスチャビットマップは、それぞれがm個までの値(例えば4つの値)を格納するnビットサイズのピクセル(例えば16ビットピクセル)を有することができる。m個の値はそれぞれn/mビット(例えば4ビット)までのサイズの圧縮された値を有することができる。例えばピクセルに関連付けられた別個の赤、緑、青、およびアルファ(RGBA)チャネルを使用して、複数の値を単一のピクセルに格納する。
圧縮されたテクスチャビットマップは、典型的にはビット単位演算を実行しないピクセルシェーダ(shader)などの従来のピクセルシェーダによってアンパックするように構成する。アンパッキングには、ピクセルシェーダ内でマスキングオペレーションを使用して所望の値に関連付けられたピクセルを分離することが含まれる場合がある。
本発明の他の実施形態では、圧縮されたテクスチャビットマップは、それぞれがn/mビット(例えば2ビット値)のサイズを有するm個(例えば4個)の圧縮された値を格納するnビットサイズのピクセル(例えば8ビットピクセル)を有することができる。圧縮されたテクスチャビットマップは、典型的にはビット単位演算を実行しないピクセルシェーダなどの従来のピクセルシェーダによってアンパックするように構成することができる。例えばアンパッキングは、取り出された8ビットピクセルを、256カラーパレットからの32ビット値などのルックアップテーブルのマッピング値とマッチングさせることを含むことができる。ルックアップされたマッピング値は、ピクセルシェーダによる処理を容易にするために別々のサブ値(sub−value)に分けることができる。例えばルックアップされた値を、従来はカラーピクセルの処理に使用されたRGBA値に分割する。
本発明の他の実施形態では、圧縮されたテクスチャビットマップは、それぞれn個の1ビット値を格納するnビットサイズのピクセル(例えば8ビットピクセル)のピクセルを有する。圧縮されたテクスチャビットマップは、典型的にはビット単位演算を実行しないピクセルシェーダなどの従来のピクセルシェーダによってアンパックするように構成する。アンパッキングは、取り出されたピクセルを、256カラーパレットからの32ビット値などのルックアップテーブルのマッピング値とマッチングさせることを含む。ルックアップ値は、ピクセルシェーダによる処理を容易にするために別々のサブ値に分けることができる。例えば、ルックアップされた値を、従来はカラーピクセルの処理に使用されたRGBA値に分割する。
図面では、同じ参照番号は同一またはほぼ同様の要素または動作を識別する。任意の特定要素または動作についての説明を容易にするために、参照番号における最上位桁はその要素が最初に紹介された図面番号を示す(例えば要素04は図2に関して最初に紹介および説明された)。
本開示の一部には、著作権が主張される資料が含まれる。特許文書または特許開示(図面を含む)が特許商標庁内の特許ファイルまたは記録に掲載されている場合、著作権所有者はいかなる人物によるその複製に対しても異議を唱えることはないが、いかなる他のすべての著作権をも所有する。
次に、本発明について様々な実施形態に関して説明する。以下の説明では、本発明のこれらの実施形態を完全に理解するため、およびこれについての説明を可能にするために、特定の細部を提供する。しかしながら当業者であれば、本発明がこれらの細部なしでも実施可能であることを理解されよう。他の場合では、本発明の諸実施形態の説明を不必要にあいまいにしないために、良く知られた構造および機能については詳細に図示または説明していない。
提示された説明で使用される用語は、たとえ本発明のある特定の実施形態の詳細な説明に関して使用されている場合であっても、その最も広範な妥当な形で解釈されることを意図している。たとえある用語が以下で強調されることがあっても、いずれかの制約された形で解釈されるように意図される用語は、この発明を実施するための最良の形態のセクションで定義されるように明白および明確に定義されることになる。
I.概要
本明細書で説明される方法およびシステムは、テキスト、記号、および他のグリフをレンダリングする際に使用されるフォントテクスチャを表すために使用されるビットマップをパックおよびアンパックすることができる。アプリケーションはこうした技法を使用して、アプリケーションを実行中のハードウェアによって提供されるメモリリソースに過度の負担をかけることなく、非常に大きなサイズのグリフセットを提供することができる。例えばいくつかの実施形態では、フォントパッキングツールは1ピクセル当たり16ビットのフォントビットマップを(スクリーンまたは他のディスプレイデバイス上に表示するための1つの出力ピクセルを生成するために使用される情報を含むソースピクセルと共に)1ピクセル当たり4ビットに圧縮する。他の実施形態では、フォントパッキングツールは1ピクセル当たり8ビットのフォントビットマップを1ピクセル当たり2ビットに圧縮する。さらに他の実施形態では、フォントパッキングツールは1ピクセル当たり8ビットのフォントビットマップを1ピクセル当たり1ビットに圧縮する。この方法およびシステムは、従来のピクセルシェーダを含むグラフィックス処理ユニットを介して、圧縮されたフォントビットマップをアンパックすることもできる。
II.代表的なシステム
図2および以下の説明では、本発明が実施可能な代表的環境について簡単に概要を述べる。必須ではないが、本発明の諸態様は、汎用コンピュータ(例えばサーバコンピュータ、無線デバイス、またはパーソナル/ラップトップコンピュータ)によって実行されるルーチンなどのコンピュータ実行可能命令との関連において説明される。関連技術業者であれば、本発明が他の通信、データ処理、または、インターネットアプライアンス、ハンドヘルドデバイス(携帯情報端末(PDA)を含む)、ウェアラブルコンピュータ、あらゆる種類のセルラー式電話または移動電話、埋込み型コンピュータ(車両に結合された物を含む)、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な家庭用電化製品、セットトップボックス、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、およびその他を含む、コンピュータシステム構成で実施可能であることを理解されよう。実際には、「コンピュータ」、「ホスト」、および「ホストコンピュータ」という用語は一般に同義的に使用され、上記のデバイスおよびシステムのうちのいずれか、ならびに任意のデータプロセッサを指すものでる。
本発明の諸態様は、本明細書で詳細に説明する1つまたは複数のコンピュータ実行可能命令を実行するように特別にプログラム、構成、または構築された、特定用途向けコンピュータまたはデータプロセッサで具体化することが可能である。本発明の諸態様は、タスクまたはモジュールが通信ネットワークを介してリンクされたリモート処理デバイスによって実行される、分散コンピューティング環境でも実施可能である。分散コンピューティング環境では、プログラムモジュールをローカルおよびリモートの両方のメモリストレージデバイスに配置することができる。
本発明の諸態様は、磁気または光学式の読み取り可能コンピュータディスクを含むコンピュータ読取り可能媒体上で、半導体メモリ、ナノテクノロジーメモリ、有機または光メモリ、あるいは他のポータブルデータストレージ媒体上のマイクロコードとして、格納または配布することができる。実際には、本発明の諸態様の下でのコンピュータ実施命令、データ構造、スクリーン表示、および他のデータは、インターネットを介すかまたは他のネットワーク(無線ネットワークを含む)を介して、ある期間にわたって伝播媒体(例えば電磁波、音波など)上で伝播される信号で配布可能であるか、あるいは、任意のアナログまたはデジタルネットワーク(パケット交換、回路交換、または他のスキーム)提供可能である。関連技術業者であれば、本発明の一部がサーバコンピュータに常駐する一方で、対応する部分は移動デバイスなどのクライアントコンピュータ上に常駐することを理解されよう。
図2を参照すると、テクスチャのパッキングおよびアンパッキング技法が実施可能な代表的環境に、ゲームコンソール200が含まれる。ゲームコンソールはCPU202、データストア204、メモリ206、オーディオ/ビデオポート208、イーサネット(登録商標)ポート210、電源ポート212、および1つまたは複数のコントローラポート214を含むことができる。加えてゲームコンソール200は、ピクセルシェーダ220を含むグラフィックス処理ユニット(GPU)構成要素216を含むことができる。ピクセルシェーダ220は従来型設計であってもよい。例えばこれは、ビット単位演算があればいくつかを提供することが可能であり、限定命令セットを使用して制御することができる。
一部の実施形態では、GPU構成要素216は、ゲームコンソール200上で実行するゲームアプリケーション218によって提供されるパックおよびアンパック済みのテクスチャを処理する。例示された実施形態のゲームアプリケーション218は、パック済みフォントテクスチャ226を含む。一部の実施形態では、パック済みフォントテクスチャ226はゲームアプリケーションの開発時に作成される。ゲームアプリケーションの設計者は、パッキングツール224を含む設計システム222を使用して、パック済みフォントテクスチャ226を生成することができる。図に示されるように、ゲーム設計システム222はゲームコンソールの外部にある。
パック済みフォントテクスチャ226はビットマップ形式とすることが可能であり、グリフのセット(例えばテキスト文字、記号など)を含むことができる。出力される場合、各グリフは、各ソースピクセルがスクリーンまたは他のディスプレイデバイス上で表示するための1つの出力ピクセルを生成するために使用される情報を含む、複数のピクセルで構成することができる。ビットマップそれ自体は、各ピクセルが複数のチャネルを有する複数のピクセルで構成される。この構成により、ビットマップの各ピクセルが複数の値を保持または表すことができる。例えば本明細書でさらに説明するように、パック済みフォントテクスチャ226のいくつかのピクセルは、複数の4ビット値、複数の2ビット値、または複数の1ビット値さえも含むことが可能である。したがって、ディスプレイ画面上でビットマップとして表示された場合、パック済みフォントテクスチャ226は複数の重複するグリフを有するように見える場合がある。
出力ピクセルを生成するためのソースピクセルの処理を容易にするために、GPU構成要素216は、テクスチャのアンパックに使用される値を格納するいくつかのレジスタを含むことができる。例えばGPU構成要素216は、アンパック時にテクスチャからピクセルシェーダ220によって取り出されたピクセルを格納するためのt0レジスタ228を含むことができる。一部の実施形態では、t0レジスタ228はピクセルの様々なチャネルに関する情報を分離するためのスペースを含む。同様に、GPU構成要素216は、ピクセル情報を格納するためのr0レジスタ230を含むこともできる。t0レジスタ228と同様に、r0レジスタ230はピクセルに関する別々の値を格納するためのスペースを含むことができる。加えてGPUは、アンパック時に使用される定値(例えばマスク値)を格納するためのc0レジスタ232およびc1レジスタ234も含むことができる。GPU構成要素216は、現在のピクセルに関する補間済み頂点カラー値を格納するv0レジスタ236も含むことができる。この方法では、ピクセルシェーダ220は取り出されて伸張された任意のピクセルにカラー値を割り当てることができる。GPU構成要素216は他のレジスタ(例えば命令レジスタ)(図示せず)を含むことができる。
本発明を実施するための最良の形態の以下のセクションでは、テクスチャのパッキングおよびアンパッキングの例について説明する。例えば、16ビットから4ビットへの圧縮、8ビットから2ビットへの圧縮、および8ビットから1ビットへの圧縮に関して説明する。例は、ブロック図、ディスプレイ図、および流れ図の組合せを使用して例示される。これらの図は、可能なデータ構造、構成、フォーマット、およびルーチンをすべて示してはいない代わりに、システム内でのテクスチャのパッキングおよびアンパッキングを理解することができる。関連技術業者であれば、いくつかのデータ構造、構成、フォーマット、およびルーチンが反復、変更、省略、または補足可能であること、および図示されていない他の諸態様が容易に実施可能であることを理解されよう。
III.テクスチャの圧縮
(1)1ピクセル当たり16ビットから1ピクセル当たり4ビットへの圧縮
図3〜6は、アンチエイリアシング、ドロップシャドウイング、およびアウトライニングなどの機能を依然として保持しながら、4ビットに圧縮可能なピクセルを有するフォントテクスチャを、パッキングおよびアンパッキングするための技法に対応する。一般に、1ピクセル当たり16ビットのテクスチャは、カラフルなテキストを有する、および/またはカスタム描画機能をフォント(例えば矢印、グラフィックスなど)に埋め込む、アプリケーションに使用される。こうしたテクスチャは様々なフォーマットを使用して構成することができる。こうしたフォーマットの一例が、ピクセルの各チャネル(例えば赤、緑、青、アルファ)に4ビットが割り当てられた、MicrosoftのDirectX 8クラスハードウェアが提供するフォーマットである。このフォーマットは赤に独立した16の値、緑に16、というようにすることが可能であり、アーティストの色付けイメージを含むほとんどのカラーイメージに十分である。
図3は、1ピクセル当たり16ビットのテクスチャを1ピクセル当たり4ビットにパッキングするためのルーチン300の一例を示す図である。図6のアンパッキングルーチン600などの補助的なアンパッキングルーチンと共に使用した場合、パッキングルーチン300はオリジナルテクスチャの望ましい機能(例えばアンチエイリアシング、アウトライニング、およびドロップシャドウイング)を保持しながら、カラーフォントを使用することができる。加えてパッキングルーチン300は、同じテクスチャビットマップ内で事前色付け済み/カスタムのグリフを可能にすることができる(しかしながら、一部の実施形態では、こうした事前色付け済み/カスタムのグリフは1ピクセル当たり16ビットのフォーマットのままである)。一部の実施形態では、パッキングルーチン300の一部はビット単位演算を実行するパッキングツールによって実行される。
パッキングルーチン300は、黒または透明は黒に、白は白に、カラーはグレーの陰影として表わすグレースケールを使用して、テクスチャビットマップをパックする。一般にパッキングルーチン300は、白のピクセルが白からグレー、そして黒へと(対応する輝度値に基づいて)フェードし、黒のピクセルは黒から半不透明(semi−opaque)、そして透明へとフェードすると想定する。16ビットの黒、白、およびグレーのピクセルの場合、ピクセルの赤、緑、青(RGB)のチャネルは同一の値(例えば白の場合(15,15,15))を含み、これは、任意の1つのグレーピクセルのグレースケール値(輝度)を表すために単一の4ビットRGB値(10進数0〜15の範囲)のみが必要であることを意味する。一部の実施形態では、基礎となる頂点に格納されたカラー情報がリアルタイムレンダリングシステムで使用される変調技法を使用して、アンパッキング時に適切なカラー情報をグレーピクセルに加えることができる。
このスキームに従って、パッキングルーチン300は、以下のようにグリフ内の16ビットピクセルそれぞれに4つのビットを割り振ることができる。ルーチン300は、白/グレーピクセルまたは黒/透明ピクセルのいずれかを表すために第1のビットを割り振る。ルーチン300は、グレースケールの輝度に関する情報(白/グレーピクセルの場合)またはアルファ透明度に関する情報(黒/透明ピクセルの場合)のいずれかを表すために、第2、第3、および第4のビットを割り振る。このフォーマットの一例が図4に関して示されている。
図3に戻って参照すると、一部の実施形態ではパッキングルーチン300がブロック301で開始され、オリジナルテクスチャから第1のグリフを取り出す。意思決定ブロック302で、パッキングルーチン300は取り出したグリフをチェックして、事前色付け済み/カスタムのグリフであるかどうかを判定する。意思決定ブロック302で、取り出したグリフが事前色付け済み/カスタムのグリフである場合、ルーチン300はブロック303へ進み、パッキングルーチン300は圧縮されていないグリフをその16ビット形式(パッキングなし)で出力テクスチャに埋め込み、グリフがパックされていないことを示すフラグを設定する。パッキングルーチン300はブロック303からブロック311へと進み、オリジナルテクスチャが取り出すための残りのグリフを含むかどうかを判定する。
しかしながら、意思決定ブロック302で取り出したグリフが事前色付け済み/カスタムのグリフに関連付けられていない場合、パッキングルーチン300はブロック304へ進み、取り出したグリフの次のピクセルを取り出す。次のピクセルを取り出した後、ルーチン300は意思決定ブロック305へ進み、取り出したピクセルのRGB値がすべてゼロに等しい(取り出したピクセルが黒または透明であることを意味する)かどうかをチェックした後、パッキングルーチン300はブロック306へ進み、4つの使用可能ピクセルビットのうちの最初のビットをゼロに設定する。次にブロック307でパッキングルーチン300は、取り出したピクセルのアルファ値に従って次の3つのピクセルビットを設定する。例えば、取り出したピクセルのアルファ値がゼロの場合(例えば完全に半透明なピクセルの場合)、パッキングルーチン300は次の3つのピクセルビットを(0,0,0)に設定する。しかしながら、取り出した値のアルファ値がゼロよりも大きい場合、ルーチンは取り出したピクセルの4ビットアルファ値の3つの最上位ビットに従って、次の3つのピクセルビットを001〜111の範囲内の2進アルファ値を使用して設定する。(後に、アンパッキングルーチンがこれら3つのビットを1スペース左へシフトし、2進の111または10進の15(すなわち非半透明の黒のピクセル)のうちの最大アルファ値を可能にする。)その後、パッキングルーチン300は意思決定ブロック310へ進み、オリジナルテクスチャがフェッチするビットをさらに有するかどうかをチェックする。
しかしながら、意思決定ブロック305で取り出したピクセルのRGB値がゼロより大きい場合(取り出したピクセルが白またはカラーであることを意味する)、パッキングルーチン300はブロック308へと進み、4つの使用可能ピクセルビットのうちの最初のビットを1に等しく設定する。次にブロック309でパッキングルーチン300は、残りの3つのピクセルビットを2進の000〜111の範囲内の輝度値を表すように設定する。パッキングルーチン300は、オリジナルの16ビットピクセルそれぞれを白、グレー、またはブロックのいずれかであるように扱うため、各ピクセルについてRGB値は同一である(例えば、赤=1110、緑=1110、青=1110)。したがって、割り当てられた3ビットの輝度値が、任意の所与のピクセルに関する3つの4ビットRGB値のうちのいずれかの3つの最上位ビットにほぼ対応することができる。フォントテクスチャのアンパック時に、これらのビットを1スペース左へシフトし、オリジナルの16ビットピクセルの4ビットRGB値をマッチングさせることができる。
上記ステップの結果として、オリジナルテクスチャからの16ビットピクセルを新しいテクスチャの4つのビットに格納することができる。例えば、パッキングルーチン300は、新しい16ビットテクスチャの1つのピクセルに対応する単一のチャネル(例えば赤、緑、青、またはアルファ)に割り当てることによって、4ビットピクセルを新しい1ピクセル当たり16ビットのテクスチャビットマップに埋め込むことができる。
その後ルーチン300は意思決定ブロック310へ進み、グリフに関して取り出す追加のピクセルがあるかどうかをチェックする。意思決定ブロック310で取り出す追加のピクセルがある場合、ルーチン300は次のピクセルを取り出すために折り返してブロック304へ戻る。そうでない場合、ルーチンは意思決定ブロック311へ進み、取り出す追加のグリフがテクスチャ内にあるかどうかを判定する。この決定に基づいて、ルーチン300は終了する(取り出す追加のグリフがない場合)か、または次のグリフを取り出すために折り返してブロック301に戻る。
図5に示されるように、1ピクセル当たり16ビット502でパッキングルーチン300を実行すると、各グリフが使用可能な各ピクセルの固有の4ビットチャネルを占有する、一連の重複したグリフとして表される新しいテクスチャビットマップ504を生じる結果となる。しかしながら図に示されるように、カスタムまたは事前色付け済みのグリフに対応する任意のピクセルは、4つのチャネルすべてを使用する16ビットフォーマットのままである可能性がある。
図5のテクスチャビットマップ504などの圧縮済みテクスチャビットマップをアンパックするためのルーチンの一例が、図6に示される。アンパッキングルーチン600は、圧縮済みテクスチャを含むアプリケーション(例えばビデオゲームアプリケーション)から命令を受け取るピクセルシェーダで、少なくとも一部分を実行することが可能である。ピクセルシェーダは、ゲームコンソールのGPUなどのGPU構成要素に関連付けられたハードウェア内に実装することができる。したがって、アンパッキングルーチン600に関して説明される特定のピクセルシェーダ命令は、例示された実施形態の特定のピクセルシェーダハードウェアが理解するプロトコルに準拠する。しかしながら当業者であれば、同様または修正されたルーチンが、本発明の範囲を逸脱することなく多くの異なるタイプのピクセルシェーダ(または他のハードウェア/ソフトウェア)で実行可能であることを理解されよう。
ブロック601で、アンパッキングルーチン600は圧縮済みのフォントテクスチャから16ビットピクセルを取り出す。例えば、以下のようなピクセルシェーダ命令を使用して16ビットピクセルを取り出し、GPUのレジスタt0にロードすることができる。
Figure 0004817792
16ビットピクセルを取り出してこれをレジスタt0にロードすることの一部として、アンパッキングルーチン600は、取り出したピクセルに関連付けられた各チャネル(例えば赤、緑、青、およびアルファ)を分離するオペレーションを実行するようにピクセルシェーダに命令することもできる。この方法でアンパッキングルーチン600は、例えば以下のように、取り出したピクセルの各チャネルを識別することが可能であり、
Figure 0004817792
上式でt0.aはt0レジスタのアルファチャネル構成要素を表し、t0.rはt0レジスタの赤チャネル構成要素を表し、t0.gはt0レジスタの緑チャネル構成要素を表し、t0.bはt0レジスタの青チャネル構成要素を表す。ピクセルシェーダのレジスタサイズがピクセルサイズとマッチしないいくつかの実施形態では、取り出されたピクセルに関連付けられた値を必要に応じて拡張することができる。例えば、各チャネルに8ビットの32ビットレジスタを有するピクセルシェーダでは、ピクセルシェーダ内で16ビットピクセルを32ビットに拡張することが可能であり、その結果、16ビットピクセルのうちの各4ビット値が8ビットとして内部的に格納される。
16ビットピクセルを取り出し、その値をt0レジスタの適切な構成要素に格納した後、アンパッキングルーチン600は、取り出した16ビットピクセルが4つの「重複する」グリフに関する情報を含む(例えば16ビットピクセルの各チャネルが4ビット値を含む)と想定する。したがって、アンパッキングルーチン600はブロック602へ進み、所望のグリフに関する値を含むチャネルを分離するための追加の処理を実行する。例えば、アンパッキングルーチン600は内積(dp)命令を使用して、各16ビットピクセルと、他の3つのチャネルに関連付けられた所望の4ビット値を保持するために特別に作られたマスク値とを組み合わせることができる。一実施形態では、マスキングオペレーションを実行するために使用されるピクセルシェーダ命令は、以下のように表すことが可能であり、
Figure 0004817792
上式で、r0.aはオペレーションが完了すると所望の4ビット値が格納されることになる出力レジスタのチャネルであり、t0は取り出された16ビットピクセルを含むレジスタであり、c0は(通常は圧縮済みテクスチャを含むアプリケーションによって供給される)マスク値を保持するピクセルシェーダ定数である。例えばピクセルシェーダが4チャネル内積命令(dp4)をサポートしていない代替実施形態では、dp4命令を3チャネル内積命令(dp3)に置き換えることが可能であり、その後に内積演算を第4のチャネルまで拡張するための乗算および加算(mad)命令が続く。
Figure 0004817792
上記の命令に関して、所望のグリフに対応する4ビット値はr0レジスタのアルファ構成要素(r0.a)に格納される。
アンパッキングルーチン600は意思決定ブロック603へ進み、この時点でr0.aに格納されている所望の4ビット値のテストを実施して、白/グレーピクセルまたは黒/透明ピクセルを表すかどうかを判定する。意思決定ブロック603で4ビット値が白/グレーピクセル(例えば1XXX)である場合、アンパッキングルーチン600はブロック604へ進み、最上位ビットを除去し、残りの3ビットを1ビット左へシフトした後、結果として生じる4ビット値をそれぞれのRGBチャネル(例えばr0.r、r0.g、r0.b)に格納することによって、対応するRGB値を設定する。
しかしながら、意思決定ブロック603で4ビット値が黒/透明ピクセル(例えば0XXX)である場合、アンパッキングルーチン600はブロック605へ進み、(それぞれr0.r、r0.g、およびr0.bに格納された)4ビット値のそれぞれのRGB値をゼロに設定する。その後アンパッキングルーチン600は、最上位ビットを除去し、残りの下位ビットを1ビット左へシフトした後、結果として生じる4ビット値をアルファチャネル(r0.a)に格納することによって、(r0.aに格納された)4ビット値のアルファ値を設定する。
一部の実施形態では、アンパッキングルーチン600を実施する際に使用されるピクセルシェーダが、典型的にはビット単位演算を実行しない場合がある。DirectX 8ピクセルシェーダはこうしたピクセルシェーダの一例である。こうしたケースでは、他のタイプの演算およびレジスタ変更子(modifier)を使用してビットを分離およびテストし、ビットを左/右へシフトさせることができる。例えば一連の条件(cnd)命令およびレジスタシフト変更子を使用して、ブロック603〜605に関して上述した前述のオペレーション(例えば4ビット値の最上位ビットのテスト、必要に応じたビットのシフト、および適切なRGBAチャネルへの出力値の格納)をピクセルシェーダに実行させることができる。したがって一部の実施形態では、対応するピクセルシェーダ命令は以下のように表すことができる。
Figure 0004817792
第2の命令の前の「+」記号は、ピクセルシェーダが2つの命令を同時に実行できるように、この命令を前の命令とペアにできることをピクセルシェーダに指示する。これは、ハードウェアがRGB専用命令とアルファ専用命令とを同時に実行できる場合に可能である。この方法で命令をペアにすることで、性能を上げることができる。
意思決定ブロック606で、アンパッキングルーチン600は、最初に取り出された(依然としてレジスタt0に格納されている)ピクセルが(パッキング時にその1ピクセル当たり16ビットのフルフォーマットを使用してテクスチャに格納された)カスタムグリフのピクセルを表すかどうか、あるいはそれが、(ブロック602〜605でアンパッキングルーチン600によって想定されたように)各グリフの4ビット値が16ビットピクセルのそれぞれのRGBAチャネルに格納された状態である、4つの「重複する」グリフに関する情報を含むかどうかを判定する。いくつかのピクセルシェーダは、ブロック602〜605で実行される処理に先行して意思決定ブロック606を実行できるようにする命令を提供することができる。例えばこうしたルーチンは、取り出されたピクセルのグリフに対応するフラグがパッキング中に設定されたかどうか(例えば、図3のパッキングルーチン300のブロック303)をテストすることができる。しかしながら、例示された実施形態のピクセルシェーダはこうしたフラグをテストするように構成されていないため、ブロック602〜605の処理が実行された後に、線形補間オペレーション(lrp)を使用してt0レジスタ(カスタムグリフの場合に使用される、最初に取り出された16ビット値を含む)とr0レジスタ(ブロック602〜605に従って処理された値を含む)との間でスケーリングする。一部の実施形態では、線形補間用のピクセルシェーダ命令は以下に類似する場合がある。
Figure 0004817792
この線形補間命令が4つのRGBAチャネルすべてに適用され、以下のように拡張される。
Figure 0004817792
この線形補間命令の結果、c1.aの値に応じてアンパッキングルーチン600は、t0のコンテンツ(上式ではc1.a=1)と等価になるようにr0レジスタ内のRGBA値を更新する(ブロック607)か、または出力用にr0に格納された処理済みの値を保持する。
アンパッキングルーチン600はオプションブロック608へ進み、他の白またはグレーピクセルに色付けを適用する。例えばアンパッキングルーチン600は、所望の出力カラーに基づいて出力の変調を実行することができる。例示された実施形態では、これににはr0に格納された出力値に(例えばレジスタv0に格納された)頂点カラー値、または所望のカラーに関する情報を含むピクセルシェーダ定数(例えばc2)を掛けることが含まれる場合がある。ブロック609でアンパッキングルーチン600は、レジスタr0に格納された値を出力ピクセルとして出力する。その後アンパッキングルーチン600は意思決定ブロック610へ進み、グリフを完了するために次のピクセルを取り出すべきであるかどうかの判定をチェックする。次のピクセルを取り出すべきである場合、アンパッキングルーチン600は折り返してブロック601へ戻る。そうでない場合、アンパッキングルーチン600は(出力がレジスタr0に格納された状態で)終了する。
一部の実施形態では、前述のアンパッキングルーチン600はスペーシングおよび位置決めルーチン(図示せず)と協働することができる。スペーシングおよび位置決めルーチンは、アプリケーションで使用される各グリフに関するスペーシングおよび境界(bounding)情報を含む第2のファイルを参照することができる。例えば、文字「A」をレンダリングする場合、ピクセルシェーダはテーブルを参照してフォントテクスチャ内で文字「A」の長方形の境界を見つけることができる。アンパッキングルーチン600を使用して文字に関するすべてのピクセルを描画した後、その文字のスペーシングに応じて描画位置は前進する。
(2)1ピクセル当たり8ビットから1ピクセル当たり2ビットへの圧縮
図7〜10は、アンチエイリアシングなどの機能を依然として保持しながら、わずか2ビットに圧縮可能なピクセルを有するフォントをパッキングおよびアンパッキングするための技法に対応する。図7は、こうしたフォントを含むテクスチャビットマップ700の一例を示す。このフォーマットで構成されたテクスチャの場合、あらゆるピクセルのカラー値を白にすることができる。アンチエイリアシング効果を可能にするために、各グリフの外側に近い白のピクセルに透明値を割り当てることが可能であり、その結果こうしたピクセルがカラーの背景にフェードインして見える。
こうしたビットマップは通常は、8ビットのアルファを有する32ビットのTargaファイル(256の固有のアルファ値を可能にする)として保存されるが、一部の実施形態では、固有のアルファ値の数は4(例えば100%不透明(白)、66%不透明、33%不透明、および透明)まで減らされる。次に、4つの固有のアルファ値を以下のように2ビットに符号化することができる。
11:RGB=白、アルファ=100%不透明(白)
10:RGB=白、アルファ=66%不透明
01:RGB=白、アルファ=33%不透明
00:RGB=白、アルファ=0%(透明)
(例えばビット単位演算を実行するパッキングツールを使用して)上記のフォーマットにパックされるテクスチャビットマップは、その後アプリケーション(例えばビデオゲームアプリケーション)で使用することができる。図8は、1ピクセル当たり2ビットの圧縮済みテクスチャビットマップ800の表示例を提供する。
値を16ビットピクセルのそれぞれのRGBAチャネルにパックすることによって、16ビットピクセルを4ビット値にパックするパッキングルーチン300と同様に、2ビットパッキングルーチンは各RGBAチャネルについて2ビットを有する8ビットテクスチャを作成する。これと同時に2ビットパッキングルーチンは、アプリケーションの実行時に従来のGPUピクセルシェーダでのこの値のアンパッキングを容易にするパレット(または他の形のテーブルルックアップ構成要素)を作成する。具体的に言えば2ビットパッキングルーチンは、従来のピクセルシェーダがすでに認識している、32ビットカラー値のアレイを含む256色パレットなどのパレットフォーマットを使用することができる。一部の実施形態では、ルックアップパレットはアルゴリズム的に生成されるため、圧縮済みテクスチャの2ビット値はそれぞれ以下のマッピングに従うことになる。
Figure 0004817792
したがって、例えば使用されているグリフの特定の組合せが値00 10 11 10を有する8ビットピクセルを生成する場合、パッキングルーチンはパッキング時にこの値をカラーパレットからの対応する32ビットのカラー値(例えば、00000000 10101010 11111111 10101010)に割り当てる。
図9は、ビット単位演算を使用せずに圧縮済みの1ピクセル当たり2ビットのテクスチャをアンパックすることが可能な(したがって、通常はビット単位演算を実行しない従来のピクセルシェーダ/GPUによるアンパッキングが可能な)ルーチン900を示す流れ図である。一部の実施形態では、アンパッキングルーチン900はルックアップツールに前述のような256色パレットを使用する。しかしながら当業者であれば、アンパッキングルーチンが1つのテクスチャから値を取り出し、その値を使用してテクスチャ座標を計算し、次にこの座標を使用して第2のテクスチャから値を取り出すという、従属テクスチャ(dependent texture)読み取り実施などの、他の実施も可能であることを理解されよう。
ブロック901では、アンパッキングルーチン900は以下のように、8ビットピクセルが4つの別個の2ビット値を有する状態(例えばパック済みテクスチャのRGBAチャネルごとに1つ)で圧縮済みテクスチャから8ビットピクセルを取り出す。
Figure 0004817792
ブロック902では、アンパッキングルーチン900は以下のように、32ビット値が4つの別個の8ビット値を有する状態(例えば各RGBAチャネルごとに1つ)で256色パレットから対応する32ビット値を取り出す。
Figure 0004817792
したがって、8ビットピクセルからの2ビットピクセルはそれぞれ便利に変換され、従来のピクセルシェーダが容易に取り扱うことのできる各RGBAチャネルごとに1つの4つの8ビット値に分けられる。これらの4つの8ビット値は4つの別々のグリフに属することが可能であるため、ブロック903でアンパッキングルーチン900は所望のグリフに属する8ビット値を分離する。例えばアンパッキングルーチン900は、図6のdp4マスキングオペレーション602と同様のマスキングオペレーションを実行することができる。ブロック904でアンパッキングルーチン900は、分離された8ビット値を、すぐに出力される(soon−to−be−outputted)アンパック済みピクセルの8ビットアルファ(透明)値として使用する。ブロック905でアンパッキングルーチン900は、レジスタv0に格納された頂点カラーをRGBチャネル用の値として使用する。例えばアンパッキングルーチン900は、図6の乗算演算608と同様の乗算演算を実行することができる。
ブロック906で、アンパッキングルーチン900はアンパック済みのピクセルを出力する。その後アンパッキングルーチン900は意思決定ブロック907に進み、グリフを完了するために次のピクセルを取り出すべきであるかどうかの判定をチェックする。次のピクセルを取り出すべきである場合、アンパッキングルーチン900は折り返してブロック901に戻る。そうでない場合、アンパッキングルーチン900は終了する。
2ビットのアンパッキングルーチン900でレンダリングされたテキストには、アウトライニングおよびドロップシャドウイング効果が欠如している場合があるが、テキストを複数回レンダリングすることでこうした効果を組み込むことができる。例えば、ドロップシャドウイングを備えたテキストは最初に2ピクセルのオフセットを伴う黒いテキストとして描画され、次にオリジナル位置に白(またはカラー)として描画される。この技法を使用してレンダリングしたアウトライニングおよびドロップシャドウイングが施されたテキストの一例が、図10に示されている。
図10に示された2ビットにパッキングされたビットマップ1000のフォントはアンチエイリアシングされているため、丸くなった縁部は最小化された「階段状のギザギザ」効果を有する。また図に示されるように、フォントは十分に拡大縮小するため、異なるサイズのフォントを表示するゲームで使用する際に望ましい。フォントが1ピクセル当たりたったの2ビットにパッキングされた場合であっても、パレットルックアップ後にハードウェアのテクスチャフィルタリングが実行されるため(例えばルックアップ後、各値は別々のRGBAチャネル内にあり、ハードウェアは各チャネルを別々にフィルタリングする)、フォントの拡大縮小は依然として可能である。
一部の実施形態では、限定カラーセット(例えば、256色パレットから使用可能なカラー、すなわち赤の4色、緑の4色、青の4色、およびアルファの4値)を使用して描画可能なイメージを使用することによって、埋め込まれた事前色付け(例えばカスタム)イメージを圧縮済みテクスチャビットマップに含めることができる。
(3)1ピクセル当たり8ビットから1ピクセル当たり1ビットへの圧縮
一部のアプリケーションでは、メモリの使用量を減らすために可能なあらゆる手段を講じることが望ましい。こうしたケースでは、(依然として8,000+文字フォントをサポートしながら)1ピクセル当たり8ビットのフォントを1ピクセル当たり1ビットにパッキングするための技法は、アンチエイリアシングのサポートが容易でないという欠点があり得るにもかかわらず、かなりの利点を与えることができる。
1ビットの場合、フォントパッキングルーチンはすべてのカラーピクセルを1に、すべての透明ピクセルを0に(またはその逆に)設定することができる。一部の実施形態では、フォントパッキングルーチンが8レイヤ深さで記号をパックするため、テクスチャ内の各8ビットピクセルは8つの別々の記号に属している8つまでの別個の1ビット値によって共有される。この構成は、4つの可能な組合せ(00、01、10、または11)で、各RGBAチャネル(それぞれ2ビット割り当てられる)が2つの別々のグリフに関する情報を含むことができることを意味する。同時に1ビットパッキングルーチンは、アプリケーション実行時にGPUピクセルシェーダ内でのこの値のアンパッキングを容易にするマッピングをルックアップテーブル内に作成することができる(例えば256色パレット)。例えば一部の実施形態では、256色パレットがアルゴリズム的に生成されるため、圧縮済みテクスチャの1ビット値のペアはそれぞれ以下のマッピングに従うことになる。
Figure 0004817792
上記のマッピングスキームに従って、圧縮済みテクスチャビットマップ内の各8ビットピクセルは、異なるグリフのピクセルをそれぞれが表す(例えばR12121212)2つの値をそれぞれが含む、4つの値セット(例えばR、G、B、およびA)を有することができる。図11は、1ピクセル当たり1ビットの圧縮済みテクスチャビットマップ1100の表示例を提供する。
図12は、ビット単位演算を使用せずに圧縮済みの1ピクセル当たり1ビットテクスチャのアンパッキングが可能な(したがって、従来のピクセルシェーダ/GPUによるアンパッキングが可能な)ルーチン1200を示す流れ図である。1ビットアンパッキングルーチン1200は、オリジナルの(圧縮されていない)テクスチャからの8ビット値で索引付けされた256色パレットを使用して実施可能な、1ピクセルごとのルックアップテーブルを使用する。しかしながら当業者であれば、ルーチンが1つのテクスチャから値を取り出し、その値を使用してテクスチャ座標を計算した後、その座標を使用して第2のテクスチャから値を取り出す、従属テクスチャ読み取り実施などの他の実施が可能であることを理解されよう。
ブロック1201で1ビットアンパッキングルーチン1200は、8ビット値が8つの別個の1ビット値を有する状態(例えばRGBAチャネル当たり2つ)の8ビット値を圧縮済みテクスチャから取り出す。例えば各チャネルは、異なるグリフのピクセルをそれぞれが表す(例えばR12121212)2つのビットを有することが可能である。一部の実施形態では、これら8つの1ビット値のうちの1つのみが所望のグリフのピクセルに対応する一方で、アンパッキングルーチン1200による初期の処理には8ビットすべての処理が含まれる。したがってブロック1202でルーチン1200は、32ビット値が4つの別個の8ビット値を有する状態(例えばRRRRRRRR、GGGGGGGG、BBBBBBBB、AAAAAAAA)の、対応する32ビット値をパレットから取り出す。例えば、ビット10 01 01 11を有する取り出された8ビット値にマッピングが適用された場合、結果として生じる32ビット値は10101010 01010101 01010101 11111111となり、これは以下の表でRGBA内部値ごとに分類されて示される。
Figure 0004817792
ブロック1203でアンパッキングルーチン1200は、所望のグリフのピクセルに対応する8ビット内部値を分離するために32ビット値から4つのRGBAチャネルのうちの1つを識別する。例えばアンパッキングルーチン1200は、図6のdp4マスキングオペレーション602と同様のマスキングオペレーションを実行することができる。この点でアンパッキングルーチン1200には、所望のグリフのピクセルを含む2つのピクセルに関する情報を表す8ビット値が残されている。例えば上の表を参照すると、マスキングオペレーションが青チャネルに関連付けられた内部値を分離した場合、アンパッキングルーチン1200には内部値01010101が残され、これは2つの可能なグリフのうちの第1のグリフに対応する。
ブロック1204でアンパッキングルーチン1200は、分離された内部値が2つの可能なグリフのうちの第1のグリフに関する場合、これを格納およびテストすることができる。例えばアンパッキングルーチン1200は、8ビット内部値を第1のレジスタチャネル(例えばr0.a)に格納し、この8ビット内部値の最上位ビットをテストして、グリフの色付けされている部分またはグリフの色付けされていない部分に対応するかどうかをチェックすることができる。同様にブロック1205でアンパッキングルーチンは、分離された内部値(または分離された内部値のバイアスバージョン)が2つの可能なグリフのうちの第2のグリフに関する場合、これを格納およびテストすることができる。例えばアンパッキングルーチン1200は、8ビット内部値(または8ビット内部値のバイアスバージョン)を第2のレジスタチャネル(例えばr1.a)に格納し、第2位ビットをテストして、グリフの色付けされている部分またはグリフの色付けされていない部分に対応するかどうかをチェックすることができる。ブロック1204および1205のオペレーションを実行するために使用されるピクセルシェーダ命令は以下のようになる。
Figure 0004817792
これは以下のように擬似コードで書くことができる。
Figure 0004817792
ピクセルシェーダでは、値0.5が2進の8ビット値10000000に対応するため、値を0.5だけ減じると、その値から高位ビットが効果的に除去される。したがって上記の擬似コードは以下のように解釈することができる。
Figure 0004817792
ブロック1206でアンパッキングルーチン1200は、第1のグリフに対応する値(例えばr0.aに格納された値)または第2のグリフに対応する値(例えばr1.aに格納された値)のいずれかを選択する。このオペレーションを実行するために使用されるピクセルシェーダ命令は以下のようになる。
Figure 0004817792
ブロック1207でアンパッキングルーチン1200は、上記の処理に基づいて色付けされたピクセル(例えば白)または色付けされていないピクセルのいずれかを出力する。r0.aの高位ビットは透明を設定するために使用される。このオペレーションを実行するために使用される対応するピクセルシェーダ命令は以下のようになる。
Figure 0004817792
別のブロックとして示されていないが、2ビットアンパッキングルーチン900と同様に、1ビットアンパッキングルーチン1200は色付けされたピクセルに特定のカラーを適用することができる(例えば頂点カラー適用技法を使用)。その後アンパッキングルーチン1200は意思決定ブロック1208に進み、グリフを完了するために次のピクセルを取り出すべきであるかどうかの判定をチェックする。次のピクセルを取り出すべきである場合、アンパッキングルーチン1200は折り返してブロック1201に戻る。そうでない場合、アンパッキングルーチン1200は終了する。
1ビット圧縮を使用するとメモリを大幅に節約することができる。例えば、それぞれが16×16ピクセルを占有する8000文字を備えた中国語フォントをわずか256KBに収めることができる。20×20ピクセルのより大きな文字も400KBに収められる。一部の実施形態では、大量テキスト状況(8000文字すべてを必要とするダイアログなど)に対する1ビットフォント、ならびにより小規模な文字のサブセットに依存する他の用途(メニューおよびユーザインターフェースなど)用に拡大縮小可能な2ビットフォントを維持することが可能である。加えて、2ビットの圧縮済みフォントを使用するのと同様に、テキストを(例えば、最初に2ピクセルのオフセットを伴う黒いテキストとして、次にオリジナル位置に白(またはカラー)として)複数回レンダリングすることにより、1ピクセル当たり1ビットのテクスチャビットマップを使用してアウトライニングおよび/またはドロップシャドウイング効果を達成することができる。
IV.結論
文脈上明確に必要としない限り、「有する」「有している」などの単語は、説明および特許請求の範囲全体を通じて排他的または網羅的な意味と対立する包含的な意味、すなわち「含むが限定されない」という意味であると解釈される。さらに、「本明細書で」、「上記」、「下記」および同様の趣旨の単語は、本明細書で使用される場合、本明細書のいずれかの特定部分ではなく本明細書全体を指すものとする。特許請求の範囲が2つまたはそれ以上のリストを参照する際に「または」という単語を使用する場合、この単語は、リスト内の項目のいずれか、リスト内の項目のすべて、およびリスト内の項目のいずれかの組合せ、という単語の解釈のすべてをカバーする。
本発明の諸実施形態についての上記の詳細な説明は、本発明が上記で開示された精密な形を網羅すること、または本発明をこれに限定することを意図するものではない。本発明の特定の実施形態および例は例示の目的で上記に説明されており、本発明の範囲内で様々な等価の修正が可能であることを当業者であれば理解されよう。例えば、プロセスまたはブロックは所与の順序で提示されているが、代替の実施形態は異なる順序のステップを有するルーチンを実行するか、異なる順序のブロックを有するシステムを採用することが可能であり、いくつかのプロセスまたはブロックを削除、移動、追加、再分割、組合せ、および/または修正することが可能である。これらのプロセスまたはブロックはそれぞれ、様々な異なる方法で実施することができる。さらに、プロセスまたはブロックは時には順次実行されたように示されているが、これらのプロセスまたはブロックは並行して実行するか、あるいは別の時間に実行することも可能である。状況が許せば、上記の発明を実施するための最良の形態において単数または複数を使用している単語は、それぞれ複数または単数も含むことが可能である。
本明細書で説明される本発明の教示は、必ずしも本明細書で説明されていない他のシステムにも適用可能である。上記の様々な実施形態の要素および動作を組み合わせて、他の実施形態を提供することが可能である。
添付の出願書類に列挙されている可能性のあるいずれをも含む上記の特許および明細書および他の参照のすべては、参照により本明細書に組み込まれている。本発明の諸態様は、必要であれば、本発明の他の諸実施形態を提供するために上記の様々な参照のシステム、機能、および概念を使用するように修正が可能である。
上記の発明を実施するための最良の形態に鑑みて、本発明に対するこれらおよび他の変更が可能である。上記では本発明のある諸実施形態を詳細に説明しており、企図される最良のモードについて説明しているが、上記でどのように詳細に説明されていても、本発明は多くの方法で実施することができる。コンテンツ共有システムならびにスパム制御およびプライバシー管理技法の詳細は、それらの実施の詳細においてかなり変更される場合があるが、依然として本明細書に開示された本発明によって包含されている。前述のように、本発明のある特徴または態様を説明する際に使用された特定の用語は、その用語が関連付けられている本発明のいずれの特定の特徴、機能、または態様にも制約されるように、その用語が本明細書で再定義されていることを暗示するものとみなすべきではない。一般に、添付の特許請求の範囲で使用される単語は、上記の発明を実施するための最良の形態のセクションでこうした単語を明示的に定義していない限り、本明細書で開示された特定の実施形態に本発明を限定するものと解釈されるべきではない。したがって本発明の実際の範囲は、開示された諸実施形態だけでなく、特許請求の範囲の下で本発明を実行または実施するすべての等価の方法も包含する。
本発明のある態様はある特許請求の範囲の形で提示されているが、発明者は、任意数の特許請求の範囲の形で本発明の様々な態様を企図している。例えば、コンピュータ読取り可能媒体で本発明の一態様のみが具体化されるように説明されているが、コンピュータ読取り可能媒体では他の態様も同様に具体化することができる。したがって発明者は、本明細書提出後に、本発明の他の態様に対して追加の特許請求の範囲の形を遂行するために、こうした追加の特許請求の範囲を加える権利を保持する。
従来のテクスチャビットマップの一例を示すブロック図である。 本発明が一実施形態で実施可能な環境の一例を示すブロック図である。 一実施形態において、16ビットから4ビットへのテクスチャパッキングルーチンを示す流れ図である。 一実施形態において、4ビット値を圧縮されたテクスチャビットマップに格納するために使用されるデータ構造の一例を示すブロック図である。 一実施形態において、1ピクセル当たり16ビットのテクスチャビットマップを1ピクセル当たり4ビットに圧縮する一例を示す表示および流れ図である。 一実施形態において、1ピクセル当たり4ビットのフォーマットに圧縮されたテクスチャビットマップをアンパックするためのルーチンを示す流れ図である。 一実施形態において、1ピクセル当たり2ビットのフォーマットに圧縮可能なフォント文字の一例を示すディスプレイ図である。 一実施形態において、1ピクセル当たり8ビットから1ピクセル当たり2ビットに圧縮されたテクスチャビットマップの一例を示すディスプレイ図である。 1ピクセル当たり2ビットに圧縮されたテクスチャをアンパックするためのルーチンの一例を示す流れ図である。 一実施形態において、1ピクセル当たり2ビットに圧縮されたフォントの拡大縮小の一例を示すディスプレイ図である。 一実施形態において、1ピクセル当たり1ビットにパックされたテクスチャビットマップの一例を示すディスプレイ図である。 一実施形態において、1ピクセル当たり1ビットにパックされたテクスチャビットマップをアンパックするためのルーチンの一例を示す流れ図である。
符号の説明
200 ゲームコンソール
204 データストア
206 メモリ
208 オーディオ/ビデオポート
210 イーサネット(登録商標)ポート
212 電源ポート
214 コントローラポート
218 ゲームアプリケーション
220 ピクセルシェーダ
222 ゲーム設計システム
224 パッキングツール
226 パック済みテクスチャ

Claims (5)

  1. 2次元空間での表示用3次元グラフィックスをレンダリングするために使用されるテクスチャに、テキスト記号を格納するために使用されるビット数を減らすための、コンピュータにより実行される方法であって、
    前記コンピュータが、テキスト記号を含む未圧縮のテクスチャビットマップ受け取るステップであって、前記未圧縮のテクスチャビットマップ1ピクセル当たり16ビットフォーマットを有するピクセルを使用する、受け取るステップと、
    前記コンピュータが、前記未圧縮のテクスチャビットマップ圧縮されたテクスチャビットマップにパックするステップであって、該パックするステップは、
    前記コンピュータが、前記未圧縮のテクスチャビットマップに含まれた各テキスト記号が、事前に色付けされたあるいはカスタムのテキスト記号であるか否か判定するステップと、
    前記コンピュータが、前記各テキスト記号が事前に色付けされたあるいはカスタムのテキスト記号である場合、前記各テキスト記号を、圧縮されたテクスチャビットマップに埋め込み、かつ、該各テキスト記号がパックされていないことを示すフラグをセットするステップと、
    前記コンピュータが、前記各テキスト記号が事前に色付けされたあるいはカスタムのピクセルでない場合、前記各テキスト記号に含まれる各ピクセルのRGB値のすべてが黒または透明を表すゼロに等しいか否か判定するステップと、
    前記コンピュータが、前記各ピクセルのRGB値のすべてがゼロに等しい場合、第1の4ビットを発生し、該第1の4ビットが、0に設定された第1のビットと、アルファ値に設定された第2ないし第4のビットとを含む、ステップと、
    前記コンピュータが、前記各ピクセルのRGB値のすべてがゼロに等しくない場合、第2の4ビットを発生し、該第2の4ビットが、1に設定された第1のビットと、前記RGB値にしたがって設定された第2ないし第4のビットとを含む、ステップと、
    を含む、パックするステップと、
    を含み、これにより、前記各テキスト記号の前記圧縮されたテクスチャビットマップは、前記各テキスト記号が事前に色付けされたあるいはカスタムのテキスト記号である場合には該各テキスト記号を表す未圧縮のテクスチャビットマップと前記フラグを含み、事前に色付けされたあるいはカスタムのテキスト記号でない場合には該各テキスト記号に含まれる各ピクセルについて前記第1または第2の4ビットを含む、
    方法。
  2. 請求項1記載の方法をコンピュータに実行させるコンピュータ実行可能命令を格納したコンピュータ読み取り可能記憶媒体。
  3. テキスト記号の圧縮されたテクスチャビットマップをアンパッキングするための、コンピュータにより実行される方法であって、前記圧縮されたテクスチャビットマップは、各テキスト記号が事前に色付けされたあるいはカスタムのテキスト記号である場合には該各テキスト記号を表す未圧縮のテクスチャビットマップと、該各テキスト記号がパックされていないことを示すようにセットされたフラグを含み、事前に色付けされたあるいはカスタムのテキスト記号でない場合には該各テキスト記号に含まれる各ピクセルについて4ビット・データを含み、前記未圧縮のテクスチャビットマップは、ピクセル当たり16ビットのフォーマットを有するピクセルを使用し、前記方法が、
    前記コンピュータが、前記圧縮されたテクスチャビットマップからの各16ビット・データを取り出すステップと、
    前記コンピュータが、前記各16ビット・データからアンパッキングしたテクスチャビットマップを発生するステップであって、該ステップが、
    前記コンピュータが、前記各16ビット・データに対応するフラグをテストして、前記各16ビット・データが、事前に色付けされたあるいはカスタムのテキスト記号でないかどうか判定するステップと、
    前記コンピュータが、前記前記各16ビット・データが、事前に色付けされたあるいはカスタムのテキスト記号でないと判定した場合、
    前記コンピュータが、前記各16ビット・データを4つのチャネルに分離するステップであって、各前記チャネルが4ビットを含む、ステップと、
    前記コンピュータが、各前記チャネルの第1のビットが、黒または透明を示す値に設定されているか否か判定するステップと、
    前記コンピュータが、前記第1のビットが黒または透明を示す値に設定されている場合、該各チャネルのRGB値をゼロに設定し、かつ該各チャネルの4ビットのうちの第2〜第4ビットにしたがってアルファ値を設定するステップと、
    前記コンピュータが、前記第1のビットが黒または透明を示す値に設定されていない場合、該各チャネルの4ビットのうちの第2〜第4ビットにしたがってRGB値を設定するステップと、
    を実行するステップと、
    を含む、アンパッキングしたテクスチャビットマップを発生するステップと、
    を含む、方法。
  4. 請求項3記載の方法であって、前記コンピュータが、前記各16ビット・データが、事前に色付けされたあるいはカスタムのテキスト記号である場合には、該各16ビット・データをアンパッキングしたテクスチャビットマップに出力する、方法。
  5. 請求項3または4のいずれかに記載の方法をコンピュータに実行させるコンピュータ実行可能命令を格納したコンピュータ読み取り可能記憶媒体。
JP2005299093A 2004-11-02 2005-10-13 テクスチャベースのピクセルパッキング Expired - Fee Related JP4817792B2 (ja)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US10/979,962 US7532221B2 (en) 2004-11-02 2004-11-02 Texture-based packing, such as for packing 16-bit pixels into four bits
US10/979,963 US7643032B2 (en) 2004-11-02 2004-11-02 Texture-based packing, such as for packing 8-bit pixels into two bits
US10/979,962 2004-11-02
US10/979,963 2004-11-02
US10/980,404 US7358975B2 (en) 2004-11-02 2004-11-02 Texture-based packing, such as for packing 8-bit pixels into one bit
US10/980,404 2004-11-02

Publications (2)

Publication Number Publication Date
JP2006134309A JP2006134309A (ja) 2006-05-25
JP4817792B2 true JP4817792B2 (ja) 2011-11-16

Family

ID=36727755

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005299093A Expired - Fee Related JP4817792B2 (ja) 2004-11-02 2005-10-13 テクスチャベースのピクセルパッキング

Country Status (1)

Country Link
JP (1) JP4817792B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7890747B2 (en) * 2006-07-06 2011-02-15 Accenture Global Services Limited Display of decrypted data by a graphics processing unit
CN113935891B (zh) * 2021-09-09 2022-08-26 完美世界(北京)软件科技发展有限公司 像素风格的场景渲染方法、设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3770422B2 (ja) * 1996-06-27 2006-04-26 ソニー株式会社 画像生成装置および方法並びにデータ圧縮方法
JP4182575B2 (ja) * 1998-11-09 2008-11-19 ソニー株式会社 記憶装置および画像データ処理装置
JP4683760B2 (ja) * 2000-08-23 2011-05-18 任天堂株式会社 再構成可能なピクセルフォーマットを有する組み込みフレームバッファを有するグラフィックスシステム
US6999100B1 (en) * 2000-08-23 2006-02-14 Nintendo Co., Ltd. Method and apparatus for anti-aliasing in a graphics system
JP3848101B2 (ja) * 2001-05-17 2006-11-22 シャープ株式会社 画像処理装置および画像処理方法ならびに画像処理プログラム

Also Published As

Publication number Publication date
JP2006134309A (ja) 2006-05-25

Similar Documents

Publication Publication Date Title
CN1770205B (zh) 基于纹理的像素打包
US7358975B2 (en) Texture-based packing, such as for packing 8-bit pixels into one bit
US8704830B2 (en) System and method for path rendering with multiple stencil samples per color sample
KR102275712B1 (ko) 렌더링 방법, 렌더링 장치 및 전자 장치
US10331448B2 (en) Graphics processing apparatus and method of processing texture in graphics pipeline
US20050093873A1 (en) Apparatus for compressing data in a bit stream or bit pattern
US9159114B2 (en) Texture decompression for graphics processors
US8139075B2 (en) Color packing glyph textures with a processor
KR20180055446A (ko) 타일 기반 렌더링 방법 및 장치
JP2010514310A (ja) 画像の圧縮及び/又は復元
EP1980998A2 (en) Programmable graphics processing element
KR102646818B1 (ko) 그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제
KR101812825B1 (ko) 텍스트 렌더링을 위한 룩업 테이블
US7532221B2 (en) Texture-based packing, such as for packing 16-bit pixels into four bits
CN106575428B (zh) 图形处理单元中的高阶滤波
US10262391B2 (en) Graphics processing devices and graphics processing methods
US20180097527A1 (en) 32-bit hdr pixel format with optimum precision
JP4817792B2 (ja) テクスチャベースのピクセルパッキング
KR20180037839A (ko) 그래픽스 프로세싱 장치 및 인스트럭션의 실행 방법
US20130063475A1 (en) System and method for text rendering
US6819320B2 (en) Reading or writing a non-super sampled image into a super sampled buffer
JP2010113548A (ja) グラフィックス装置
JP3538826B2 (ja) 演算回路および演算方法
KR20180117835A (ko) 이미지를 렌더링하는 방법
JP2015049707A (ja) ハイダイナミックレンジレンダリング方法及び装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081014

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20090903

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20091008

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110207

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110506

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110511

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110603

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110608

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110707

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: 20110801

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110830

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140909

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees