画像データ処理装置
【課題】デプス値を効率的に符号化及び復号化する画像データ処理装置を提供する。
【解決手段】画像データ処理装置は、3次元グラフィックス描画の1つの画素のデプス値を示す浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する浮動小数分離部と、第1部分の予測値と第1部分の値との差分である第1の差分値を整数データとして演算するとともに、第2部分の予測値と第2部分の値との差分である第2の差分値を整数データとして演算する差分生成部と、第1の差分値と第2の差分値とを可変長符号化する符号化器とを含むことを特徴とする。
【解決手段】画像データ処理装置は、3次元グラフィックス描画の1つの画素のデプス値を示す浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する浮動小数分離部と、第1部分の予測値と第1部分の値との差分である第1の差分値を整数データとして演算するとともに、第2部分の予測値と第2部分の値との差分である第2の差分値を整数データとして演算する差分生成部と、第1の差分値と第2の差分値とを可変長符号化する符号化器とを含むことを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本願開示は、一般にデータ処理装置に関し、詳しくは画像データを符号化及び復号化する画像データ処理装置に関する。
【背景技術】
【0002】
近年、3次元グラフィックス描画LSI(大規模集積回路)に対してより高い描画性能と描画品質とが要求されるようになってきている。これは、フルハイビジョン化などにより表示画面サイズが拡大したり、動きを滑らかに見せるために高いフレームレートで描画するようになってきたためである。この高い描画性能を実現するために、単位時間当たりに多数のオブジェクトを描画する必要がある。また、高い描画品質を実現するために、同時に複数のテクスチャを使用したり、アンチエイリアシングのために表示面積よりも広い面積を描画する必要がある。これらのことを実現するためには、より多くのメモリアクセスが必要になるが、メモリアクセスの増大によりメモリ帯域が逼迫して高性能化のネックになってしまう。これを回避するためには、メモリバス幅を広げて1クロックあたりの転送データ量を増大させるか、メモリクロック速度を上げて時間当たりのメモリ転送回数を増加させる方法がある。しかし、バス幅を広げるためには接続するメモリの個数を増やす必要があり、クロック速度を上げるためにはより高性能なメモリを使用する必要があるため、何れの方法もコストが増大することになる。
【0003】
図1は、3次元グラフィックス描画の原理を示す図である。3次元グラフィックスの描画では、描画対象の3次元オブジェクトをポリゴンと呼ばれる3角形または4角形に分割し、ポリゴンを単位として描画する。その際、XYZ座標のZ軸方向が視点から見た奥行き方向となるようにポリゴン10が3次元空間上に配置され、表示スクリーンであるXY平面に視点位置から見えるポリゴン像11が投影される。各ポリゴンは視点から見て最も手前にある画素のみが描画される。他のポリゴンによって隠される部分は描画されない。これによって視点から見えるシーンが描画され、描画結果がディスプレイに表示される。各ポリゴンを構成する画素を描画する際に、既に描画済みの他のポリゴンに対して当該画素が最も手前にあるかどうかを判断するために、デプス値及びデプスバッファが使用される。デプス値は3次元空間でのZ座標として表現される。描画された各画素のデプス値はデプスバッファに格納される。新しく描画しようとしている着目画素のデプス値が、デプスバッファの該当画素位置の値より奥を示す値であれば、その着目画素は他のポリゴンによって隠蔽されていると判断し、画素色を描画しない。一方、着目画素のデプス値が、デプスバッファの該当画素位置の値より手前を示す値であれば、その着目画素は視点から見える場所にあると判断し、画素色を描画するとともにデプスバッファの値を更新する。デプス値による描画の有無の判定(デプステスト)は描画を行おうとする画素毎に行うので、多くのメモリアクセスを必要とする。このデプスバッファアクセスで発生するメモリアクセスの量を削減することが大きな課題となっている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−212621号公報
【特許文献2】特開2006−186531号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
以上を鑑みると、デプス値を効率的に符号化及び復号化する画像データ処理装置が望まれる。
【課題を解決するための手段】
【0006】
画像データ処理装置は、3次元グラフィックス描画の1つの画素のデプス値を示す浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する浮動小数分離部と、前記第1部分の予測値と前記第1部分の値との差分である第1の差分値を整数データとして演算するとともに、前記第2部分の予測値と前記第2部分の値との差分である第2の差分値を整数データとして演算する差分生成部と、前記第1の差分値と前記第2の差分値とを可変長符号化する符号化器とを含むことを特徴とする。
【発明の効果】
【0007】
本願開示の少なくとも1つの実施例によれば、浮動小数点演算ではなく整数演算が行なわれるので、演算に起因する誤差が発生することがない。また指数部と符号付き仮数部とに分けて処理を行なうので、効率的な符号化を実現することができる。
【図面の簡単な説明】
【0008】
【図1】3次元グラフィックス描画の原理を示す図である。
【図2】浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する様子を示す図である。
【図3】差分値の演算の一例を示す図である。
【図4】差分演算時のビット数拡張を示す図である。
【図5】整数データの分割を示す図である。
【図6】グラフィクスLSIとメモリとの構成を示す図である。
【図7】ポリゴン描画処理におけるデプスデータの処理の流れを示すフローチャートである。
【図8】描画&デプスデータRAMの入れ替え処理を示す図である。
【図9】図8のステップS1のブロック符号化処理の流れを示すフローチャートである。
【図10】図8のステップS4のブロック復号化処理の流れを示すフローチャートである。
【図11】図8のステップS2のブロックデータ出力処理の流れを示すフローチャートである。
【図12】メモリの構造を示す図である。
【図13】図8のステップS3のブロックデータ読込処理の流れを示すフローチャートである。
【図14】図8のステップS1に示すデータ符号化処理を実行する構成及び処理の流れを示す図である。
【図15】図8のステップS4に示すデータ復号化処理を実行する構成及び処理の流れを示す図である。
【発明を実施するための形態】
【0009】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【0010】
デプスバッファに格納するデプス値ではなく、画素値(画素色)を表わすデータの場合であれば、圧縮方式として例えば差分圧縮が考えられる。1つの画素の色は、R(赤)成分、G(緑)成分、及びB(青)成分の3色で表現され、各色成分の階調は例えば8ビットの整数値(0〜255)として表わされる。画像は隣接する画素間の相関が非常に高いので、隣接画素の色成分ごとの差分値を算出すると、差分値は0近くに分布する。この差分値をハフマン符号化することにより、画像データの圧縮を行うことができる。
【0011】
それに対して、デプスバッファに格納するデプス値は、32ビットの浮動小数点データで表現される。デプス値の場合も隣接する画素間の相関が非常に高いので、差分圧縮を適用することが考えられるが、浮動小数点データ間の差分を計算した場合、演算時の下位ビットの桁落ちによる演算誤差が発生する。差分圧縮の場合には、伸長時に差分値を累積的に加算していくので、誤差も累積されることになる。描画画素のデプス値に誤差が発生すると、隠れるべき画素が描画されたり、描画されるべき画素が隠れたりし、ユーザの意図したものとは全く異なる描画結果になってしまう。そのためデプス値データの圧縮過程で誤差が発生することは許容されない。従って、浮動小数点データの差分計算を行なうことは現実的ではない。
【0012】
32ビット浮動小数点表示のビットパターンを32ビットの整数として取り扱い、整数同士の差分を算出してデータ圧縮を行うことも考えられる。しかしながら、元が浮動小数点表示であるデプス値をそのまま整数データとして扱った場合には、画素間の相関が低くなってしまう。そのため、符号化の効率(圧縮率)が悪くなってしまう。特に正の値と、負の値の差分を計算するときに、差分が大きな値となることがある。これは、指数部が127をバイアスした正の整数の形式で表現されており、実際の指数部分は値から127を減算することによって求めるためである。例えば−1.0は0xBF800000,+1.0は0x3F800000と表され、−127と+127の間の計算となり、その差分値は大きな値となる。また、デプス値を画素値と同様の方法で8ビットの4要素に分割すると、分割箇所が指数部の途中となってしまい、要素間の差分を計算した際に大きな差分値を発生させる。
【0013】
そこで、3次元グラフィックス描画の1つの画素のデプス値を示す浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する。次に、第1部分の予測値と第1部分の値との差分である第1の差分値を整数データとして演算するとともに、第2部分の予測値と第2部分の値との差分である第2の差分値を整数データとして演算する。更に、上記のようにして求めた第1の差分値と第2の差分値とを可変長符号化する。以下に、これらの処理について説明する。
【0014】
図2は、浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する様子を示す図である。図2に示されるように、32ビット浮動小数点データ20は、1ビットの符号21、8ビットの指数部22、及び23ビットの仮数部23を含む。このうち指数部22を8ビット整数の第1部分24とする。また1ビットの符号21と23ビットの仮数部23とを合わせて、24ビット符号付き整数の第2部分25とする。このように32ビット浮動小数点データを2つの整数に分解する。
【0015】
図3は、差分値の演算の一例を示す図である。図3は所定の方向(例えば走査方向)に連続する4つの画素の第1部分E0乃至E3及び第2部分F0乃至F3を示す。4つの画素の第1部分E0乃至E3間の1階差分がdE0乃至dE2であり、4つの画素の第2部分F0乃至F3間の1階差分がdE0乃至dE2である。例えば、dE1=E2−E1である。またdE0乃至dE2間の差分、即ち第1部分E0乃至E3間の2階差分がd2E0乃至d2E1であり、dF0乃至dF2間の差分、即ち第2部分F0乃至F3間の2階差分がd2F0乃至d2F1である。例えば、d2E1=dE2−dE1である。
【0016】
例えば、着目画素のデプス値の第2部分の値がF2であり、1つ前の隣接画素のデプス値の第2部分の値がF1であるとする。このとき、同一値が連続するであろうという予測判断により得られる着目画素の予測値はF1であり、この予測値F1と着目画素の第2部分の値F2との差分F2−F1を演算する。これは1階差分であり、1階差分の場合の上記予測値は隣接画素のデプス値である。隣接画素としては、1つ前の画素(走査方向を左から右とすると1つ左の画素)に限らずに、例えば1つ上の画素等であってもよい。
【0017】
また、着目画素のデプス値の第2部分の値がF2であり、1つ前の隣接画素のデプス値の第2部分の値がF1であり、1つ後の隣接画素のデプス値の第2部分の値がF3であるとする。このとき、一定の増加量又は減少量で値が変化するとの予測判断により得られる着目画素の予測値は(F3+F1)/2であり、この予測値と着目画素の第2部分の値F2との差分(F3+F1)/2−F2を演算する。この差分は、2倍すればF3+F1−2F2となり、これは(F3−F2)−(F2−F1)に等しい。これは2階差分であり、2階差分の場合の上記予測値は着目画素の周辺画素の値F1及びF3の平均値である。周辺画素としては、1つ前の画素及び1つ後の画素に限らずに、例えば周囲8画素等であってもよい。
【0018】
デプス値は、一定の増加量又は減少量を有する変化(即ち一様な傾き)を示すことが多く、仮数部に対応する第2部分について上記のように2階差分をとれば、大多数の値がゼロ近辺に分布することになる。従って、例えばゼロを中心とする正規分布等を仮定したハフマン符号化テーブルを用意しておけば、ゼロ近辺の値には符号長の短い符号が割り当てられ、高効率の符号化を実現することができる。また指数部については、一定値であることが多く、2階差分をとれば、同様に大多数の値がゼロ近辺に分布することになる。従って、同様に2階差分値を可変長符号化すれば、高効率の符号化を実現することができる。なお指数部については、1階差分をとるだけでも大多数の値がゼロ近辺に分布するので、1階差分した結果を符号化する構成としてもよい。このような予測処理及び符号化処理においては、浮動小数点演算ではなく整数演算が行なわれるので、演算に起因する誤差が発生することがない。また指数部と符号付き仮数部とに分けて処理を行なうので、効率的な符号化を実現することができる。
【0019】
図4は、差分演算時のビット数拡張を示す図である。上記のように差分演算を行なう場合、指数部である第1部分については、1階差分時には負の演算結果を表現するために1ビットの拡張が必要になり、2階差分時には演算結果を桁あふれ無く表現するために更に1ビットの拡張が必要になる。また符号付き仮数部である第2部分については、1階差分時及び2階差分時の各々において、演算結果を桁あふれ無く表現するために1ビットの拡張が必要になる。従って、図4に示すように、指数部である第1部分については、元の8ビット整数データが1階差分後には9ビット整数データとなり、2階差分後には10ビット整数データとなる。また符号付き仮数部である第2部分については、元の24ビット整数データが1階差分後には25ビット整数データとなり、2階差分後には26ビット整数データとなる。
【0020】
なお可変長符号化する際、ビット数が長いままのデータを符号化することは効率的でない。ハフマン符号化等の可変長符号化では、一般に、符号化対象のデータと符号化後の符号化データとが1対1に対応する可変長符号化テーブルを使用する。符号化対象データが与えられると、この符号化テーブルを参照して対応する符号化データを求めることにより、符号化を行なう。この際、26ビット整数をそのまま符号化しようとすると、符号化テーブルのエントリ数が226個となり、膨大なメモリ空間を使用してしまう。そこで、26ビット整数のデータをビット数のより少ない複数のデータに分割し、この分割した後の複数のデータを別個に可変長符号化することが好ましい。なお指数部のデータについても必要に応じて細かく分割してもよい。
【0021】
図5は、整数データの分割を示す図である。図5に示すように、例えば、符号部と仮数部との2階差分データである26ビットの整数データを、上位から9ビット、9ビット、8ビットの3つのデータ長が短いデータに分割する。ビット数の組み合わせはこの分割例に限定されるものではなく、他のビット数の組み合わせを使用してもよい。例えば、7ビット、7ビット、6ビット、6ビットのように4つに分割してもよい。
【0022】
図6は、グラフィクスLSIとメモリとの構成を示す図である。図6においては、デプスデータの処理に関係する部分が主に示されており、描画データ(画素色データ等)についての処理部分の全体は示されていない。図6のグラフィクスLSI60は、外部メモリ66にバスを介して接続されている。グラフィクスLSI60は、グラフィクス描画コア61、描画&デプスデータRAM62、伸長回路部63、圧縮回路部64、及びメモリコントローラ部65を含む。外部メモリ66は、デプスバッファ67及びブロック長バッファ68を含む。
【0023】
各画素のデプス値(第1部分と第2部分とに分離されたデータ)の符号化データが、外部メモリ66のデプスバッファ67に格納されている。また最も最近アクセスしたデプス値は、グラフィクスLSI60内の描画&デプスデータRAM62に格納されている。描画&デプスデータRAM62は、一部のデータを手元に置いておくキャッシュメモリと同様の役割を果たす。描画&デプスデータRAM62に格納されるのは、表示画面に対応する全体の画像のうちの一部の小領域のデータであり、例えば16×16画素のブロックに対するデプス値及び描画色データが格納される。また外部メモリ66のデプスバッファ67には、このブロック単位で、デプス値の符号化データが格納される。符号化の結果、16×16画素のブロックに対するデプス値の符号化データのビット数は一定ではなくなるので、各ブロックに対する有効データの長さを示すデータがブロック長バッファ68に格納されている。グラフィクスLSI60による一連の描画処理により、外部メモリ66の所定の領域には、表示画面に対応した画像の全画素について描画色データが書き込まれることになる。
【0024】
図7は、ポリゴン描画処理におけるデプスデータの処理の流れを示すフローチャートである。ある1つのポリゴンの描画処理が開始されると、ステップS1で、ポリゴン図形が描画画素に分解される。即ち、ポリゴン内部に入る画素を特定し、これらの画素を所定の順番で走査する。このようにして、順に走査される一つ一つの画素について、所定の描画処理が実行されることになる。ステップS2で、着目画素について、描画位置及び描画色等を生成する。例えば、着目ポリゴンの頂点を結んだ辺上に位置する画素から水平方向に一画素ずつ走査していくことで、現在処理対象の着目画素の画素位置が定まる。また着目ポリゴンの頂点毎に求めた画像パラメータに基づいて、ポリゴン内部に含まれる各画素の画像パラメータを補間により求める。例えば、上記のように水平方向に一画素ずつ走査し、水平方向のパラメータ値の増分を加算していくことで、各画素におけるデプス値や描画色等の画像パラメータを求める。画像パラメータには、RGB各色の輝度、奥行き方向の距離を表すデプス値、テクスチャ表示のためのテクスチャ座標値等が含まれる。上記ステップS1及びS2の処理は、グラフィクス描画コア61により実行される。
【0025】
ステップS3で、着目画素位置を含むブロックが描画&デプスデータRAM62に格納されているか否かを判定する。着目画素位置を含むブロックが描画&デプスデータRAM62に格納されている場合には、ステップS5に進み、デプス値比較及び画素書き込みが行なわれる。着目画素位置を含むブロックが描画&デプスデータRAM62に格納されていない場合には、ステップS4で、描画&デプスデータRAMの入れ替え処理を実行する。これにより、現在描画&デプスデータRAM62に格納されているブロックのデータ(デプス値及び描画色データ)を外部メモリ66に格納し、更に、着目画素位置を含むブロックのデータを外部メモリ66から読み出して描画&デプスデータRAM62に格納する。なおここで、現在描画&デプスデータRAM62に格納されているデータを外部メモリ66に格納する処理は、手元のデータに行なった更新処理を外部メモリ66上のデータに反映させるために実行される。この入れ替え処理後、ステップS5に進み、デプス値比較及び画素書き込みが行なわれる。
【0026】
デプス値比較及び画素書き込み処理は、グラフィクス描画コア61により実行される。このデプス値比較及び画素書き込み処理では、着目画素に対して計算された着目ポリゴンのデプス値と既に描画済みのデータのデプス値(描画&デプスデータRAM62に格納されているデプス値)とを比較する。着目ポリゴンの方が、描画済みのデータよりも手前に位置するのであれば描画処理及びデプス値更新処理を行なう。即ち、ステップS2で生成された描画色を、描画&デプスデータRAM62に格納されているブロックの着目画素の描画色として書き込む(既存の描画色データに上書きする)。また更に、ステップS2で生成されたデプス値を、描画&デプスデータRAM62に格納されているブロックの着目画素のデプス値として書き込む(既存のデプスデータに上書きする)。なお着目ポリゴンの方が、描画済みのデータよりも奥に位置するのであれば描画処理及びデプス値更新処理を行なわない。
【0027】
ステップS6で、ポリゴン図形内に未描画の画素があるか否かを判定する。未描画の画素が有る場合には、ステップS2に戻り、以降の処理を繰り返す。未描画の画素が無い場合には、着目ポリゴンの描画処理を終了する。
【0028】
図8は、描画&デプスデータRAMの入れ替え処理を示す図である。ステップS1で、図6の圧縮回路部64がブロック符号化処理を実行する。即ち、描画&デプスデータRAM62に格納されるデプス値のブロックに対して、前述の浮動小数点データ分離、差分データ生成、及び可変長符号化の各処理が実行される。ステップS2で、図6のメモリコントローラ部65がブロックデータ出力処理を実行する。即ち、メモリコントローラ部65が、圧縮回路部64の生成した符号化データを、デプスバッファ67中の所定のブロック格納位置に格納すると共に、ブロック長データをブロック長バッファ68に格納する。
【0029】
ステップS3で、図6のメモリコントローラ部65がブロックデータ読込処理を実行する。即ち、メモリコントローラ部65が、着目画素を含むブロックについて、ブロック長バッファ68のブロック長が示す長さのデータを、デプスバッファ67中の所定のブロック格納位置の先頭から読み出す。ステップS4で、図6の伸長回路部63がブロック復号化処理を実行する。即ち、ステップS3で読み出された符号化データを復号化して差分値データを生成し、差分値データに基づいて第1部分の値と第2部分の値とを算出し、第1部分(指数部)と第2部分(符号付き仮数部)とを結合することにより浮動小数点データを復元する。復元した浮動小数点形式のデプス値のブロックは、描画&デプスデータRAM62に格納される。
【0030】
なお描画色データについても、描画&デプスデータRAM62の描画色データに対して必要に応じて所定の符号化処理が実行され、更に、外部メモリ66の所定の領域に書き込まれる。また更に、着目画素を含むブロックについて、外部メモリ66の所定の領域から描画色データが描画&デプスデータRAM62に読み込まれる。この時、必要に応じて復号化処理が実行される。
【0031】
図9は、図8のステップS1のブロック符号化処理の流れを示すフローチャートである。ブロック符号化処理が開始されると、ステップS1で、データ符号化処理が実行される。これは描画&デプスデータRAM62に格納されるブロックの各画素のデプス値に対して、前述の浮動小数点データ分離、差分データ生成、及び可変長符号化の各処理を実行するものである。ステップS2で、ブロック内に未符号化のデータが残っているか否かを判定する。未符号化のデータが有る場合には、ステップS1に戻り、処理を繰り返す。未符号化のデータが無い場合には、ブロック符号化処理を終了する。
【0032】
図10は、図8のステップS4のブロック復号化処理の流れを示すフローチャートである。ブロック復号化処理が開始されると、ステップS1で、データ復号化処理が実行される。これは外部メモリ66から読み出されたブロックの各画素の符号化デプス値に対して、前述の復号化、差分値データからの各データの復元、及び浮動小数点データの復元の各処理を実行するものである。ステップS2で、読み込んだデータ内に未復号化のデータが残っているか否かを判定する。未復号化のデータが有る場合には、ステップS1に戻り、処理を繰り返す。未復号化のデータが無い場合には、ブロック復号化処理を終了する。
【0033】
図11は、図8のステップS2のブロックデータ出力処理の流れを示すフローチャートである。ステップS1で、ブロックデータ長を算出する。即ち、圧縮回路部64による可変長符号化により生成された符号化データの長さ(ビット長又はバイト長等)を算出する。ステップS2で、外部メモリ66のデプスバッファ67の所定のブロック位置にブロックデータを書き込む。ステップS3で、ブロックデータ長を書き出す。即ち、外部メモリ66のブロック長バッファ68に、ステップS1で算出したブロックデータ長を示すデータを書き込む。
【0034】
図12は、メモリの構造を示す図である。外部メモリ66のメモリ空間中にデプスバッファ67の領域とブロック長バッファ68の領域とが設けられている。なお描画色データを書き込む領域も、外部メモリ66のメモリ空間中に設けられている。デプスバッファ67は、複数のブロック領域121に分割されている。各ブロック領域は予め決められた固定長であり、符号化データ125は、各ブロック領域の先頭から詰めて格納される。ブロック長バッファ68は、複数のブロックデータ長格納領域122に分割されている。各ブロックデータ長格納領域には、対応するブロックに格納される符号化データ125のデータ長を示すデータが格納されている。例えば、3番目のブロックデータ長格納領域には、3番目のブロックに格納される符号化データ125(ブロック2データ)のデータ長を示すデータ(ブロック2データ長)が格納されている。
【0035】
図13は、図8のステップS3のブロックデータ読込処理の流れを示すフローチャートである。ステップS1で、ブロックデータ長を読み込む。即ち、所望のブロックについて、ブロック長バッファ68に格納されているデータ長を示すデータを読み込む。ステップS2で、ブロックデータを読み込む。即ち、ステップS1で読み込んだデータが示すデータ長分のバイト数(又はワード数等)のデータをデプスバッファ67の対応するブロックから読み出す。
【0036】
図14は、図8のステップS1に示すデータ符号化処理を実行する構成及び処理の流れを示す図である。図14に示す構成は、図6の圧縮回路部64の構成に相当し、Z値入力部141、浮動小数分離部142、1階差分生成部143、2階差分生成部144、差分データ分割部145、符号化部146、及び符号化テーブル147を含む。データ符号化処理が開始されると、Z値入力部141は、描画&デプスデータRAM62から着目画素のデプス値を読み込む。浮動小数分離部142は、デプス値の浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する。1階差分生成部143は、上記第1部分と第2部分との各々について別個に、1階差分を求める。即ち、着目画素に隣接する画素(前回読み込んだ画素)の第1部分と着目画素の第1部分との差分を求めると共に、着目画素に隣接する画素(前回読み込んだ画素)の第2部分と着目画素の第2部分との差分を求める。隣接する画素(前回読み込んだ画素)の第1部分と第2部分のとのデータは内部レジスタ等に保持しておいてよい。2階差分生成部144は、第1部分と第2部分との各々について別個に、1階差分値に基づいて2階差分を求める。例えば、着目画素に隣接する画素(前回読み込んだ画素)について求めた1階差分値と着目画素について求めた1階差分値との差分を求める。隣接する画素(前回読み込んだ画素)の1階差分値のデータは内部レジスタ等に保持しておいてよい。
【0037】
差分データ分割部145は、少なくとも第2部分について求めた2階差分値のデータをビット数のより少ない複数のデータに分割する。符号化部146は、符号化テーブル147を参照して、第1部分と第2部分との各々について求めた2階差分値を可変長符号化する。なおブロックの先頭画素の第1部分と第2部分とのデータについては、1階差分演算に用いられると共に、そのまま符号化データとして出力される。このデータについては、符号化処理してから出力してもよい。またブロックの先頭画素及び次の画素の第1部分と第2部分との1階差分値については、2階差分演算に用いられると共に、そのまま符号化データとして出力される。この1階差分値については、符号化処理してから出力してもよい。
【0038】
図15は、図8のステップS4に示すデータ復号化処理を実行する構成及び処理の流れを示す図である。図15に示す構成は、図6の伸長回路部63の構成に相当し、復号化部151、差分データ結合部152、2階差分加算部153、1階差分加算部154、浮動小数結合部155、Z値出力部156、及び復号化テーブル157を含む。データ符号化処理が開始されると、復号化部151は、符号化されたデプス値(第1部分と第2部分とに分離されたデータ)を受け取り、復号化テーブル157を参照して、復号化データを求める。この際、先頭画素のデプス値と先頭画素及び次の画素の1階差分値とは、符号化されていないので、そのままの値がそれぞれ浮動小数結合部155と2階差分加算部153とに送られる。差分データ結合部152は、復号化部151により可変長復号されたデータの第2部分に相当するデータを結合することにより、26ビット整数データの2階差分データを生成する。2階差分加算部153は、2階差分値を直前の2階差分値に加算することにより1階差分値を生成する。1階差分加算部154は、1階差分値を直前の1階差分値に加算することにより1階差分値を生成する。これにより、第1部分である指数部データと第2部分である符号付き仮数部データとを生成する。これらのデータは浮動小数結合部155により結合されて、浮動小数形式のデータに変換される。Z値出力部156は、浮動小数点データをデプス値として出力する。なお符号化及び復号化に使用する符号化テーブル及び復号化テーブルとしては、それぞれの処理対象毎に異なった値のテーブルを用意すれば最適化をおこなうことができる。或いは、共通化することによりテーブル容量を小さくしてもよい。
【0039】
上記の処理により、32ビット浮動小数で表現されるデプス値を誤差無く圧縮することができる。非圧縮の元データに対する圧縮後のデータの圧縮率としては、20%〜30%を実現することができる。
【0040】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【0041】
60 グラフィクスLSI
61 グラフィクス描画コア
62 描画&デプスデータRAM
63 伸長回路部
64 圧縮回路部
65 メモリコントローラ部
66 外部メモリ
67 デプスバッファ
68 ブロック長バッファ
【技術分野】
【0001】
本願開示は、一般にデータ処理装置に関し、詳しくは画像データを符号化及び復号化する画像データ処理装置に関する。
【背景技術】
【0002】
近年、3次元グラフィックス描画LSI(大規模集積回路)に対してより高い描画性能と描画品質とが要求されるようになってきている。これは、フルハイビジョン化などにより表示画面サイズが拡大したり、動きを滑らかに見せるために高いフレームレートで描画するようになってきたためである。この高い描画性能を実現するために、単位時間当たりに多数のオブジェクトを描画する必要がある。また、高い描画品質を実現するために、同時に複数のテクスチャを使用したり、アンチエイリアシングのために表示面積よりも広い面積を描画する必要がある。これらのことを実現するためには、より多くのメモリアクセスが必要になるが、メモリアクセスの増大によりメモリ帯域が逼迫して高性能化のネックになってしまう。これを回避するためには、メモリバス幅を広げて1クロックあたりの転送データ量を増大させるか、メモリクロック速度を上げて時間当たりのメモリ転送回数を増加させる方法がある。しかし、バス幅を広げるためには接続するメモリの個数を増やす必要があり、クロック速度を上げるためにはより高性能なメモリを使用する必要があるため、何れの方法もコストが増大することになる。
【0003】
図1は、3次元グラフィックス描画の原理を示す図である。3次元グラフィックスの描画では、描画対象の3次元オブジェクトをポリゴンと呼ばれる3角形または4角形に分割し、ポリゴンを単位として描画する。その際、XYZ座標のZ軸方向が視点から見た奥行き方向となるようにポリゴン10が3次元空間上に配置され、表示スクリーンであるXY平面に視点位置から見えるポリゴン像11が投影される。各ポリゴンは視点から見て最も手前にある画素のみが描画される。他のポリゴンによって隠される部分は描画されない。これによって視点から見えるシーンが描画され、描画結果がディスプレイに表示される。各ポリゴンを構成する画素を描画する際に、既に描画済みの他のポリゴンに対して当該画素が最も手前にあるかどうかを判断するために、デプス値及びデプスバッファが使用される。デプス値は3次元空間でのZ座標として表現される。描画された各画素のデプス値はデプスバッファに格納される。新しく描画しようとしている着目画素のデプス値が、デプスバッファの該当画素位置の値より奥を示す値であれば、その着目画素は他のポリゴンによって隠蔽されていると判断し、画素色を描画しない。一方、着目画素のデプス値が、デプスバッファの該当画素位置の値より手前を示す値であれば、その着目画素は視点から見える場所にあると判断し、画素色を描画するとともにデプスバッファの値を更新する。デプス値による描画の有無の判定(デプステスト)は描画を行おうとする画素毎に行うので、多くのメモリアクセスを必要とする。このデプスバッファアクセスで発生するメモリアクセスの量を削減することが大きな課題となっている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−212621号公報
【特許文献2】特開2006−186531号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
以上を鑑みると、デプス値を効率的に符号化及び復号化する画像データ処理装置が望まれる。
【課題を解決するための手段】
【0006】
画像データ処理装置は、3次元グラフィックス描画の1つの画素のデプス値を示す浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する浮動小数分離部と、前記第1部分の予測値と前記第1部分の値との差分である第1の差分値を整数データとして演算するとともに、前記第2部分の予測値と前記第2部分の値との差分である第2の差分値を整数データとして演算する差分生成部と、前記第1の差分値と前記第2の差分値とを可変長符号化する符号化器とを含むことを特徴とする。
【発明の効果】
【0007】
本願開示の少なくとも1つの実施例によれば、浮動小数点演算ではなく整数演算が行なわれるので、演算に起因する誤差が発生することがない。また指数部と符号付き仮数部とに分けて処理を行なうので、効率的な符号化を実現することができる。
【図面の簡単な説明】
【0008】
【図1】3次元グラフィックス描画の原理を示す図である。
【図2】浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する様子を示す図である。
【図3】差分値の演算の一例を示す図である。
【図4】差分演算時のビット数拡張を示す図である。
【図5】整数データの分割を示す図である。
【図6】グラフィクスLSIとメモリとの構成を示す図である。
【図7】ポリゴン描画処理におけるデプスデータの処理の流れを示すフローチャートである。
【図8】描画&デプスデータRAMの入れ替え処理を示す図である。
【図9】図8のステップS1のブロック符号化処理の流れを示すフローチャートである。
【図10】図8のステップS4のブロック復号化処理の流れを示すフローチャートである。
【図11】図8のステップS2のブロックデータ出力処理の流れを示すフローチャートである。
【図12】メモリの構造を示す図である。
【図13】図8のステップS3のブロックデータ読込処理の流れを示すフローチャートである。
【図14】図8のステップS1に示すデータ符号化処理を実行する構成及び処理の流れを示す図である。
【図15】図8のステップS4に示すデータ復号化処理を実行する構成及び処理の流れを示す図である。
【発明を実施するための形態】
【0009】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【0010】
デプスバッファに格納するデプス値ではなく、画素値(画素色)を表わすデータの場合であれば、圧縮方式として例えば差分圧縮が考えられる。1つの画素の色は、R(赤)成分、G(緑)成分、及びB(青)成分の3色で表現され、各色成分の階調は例えば8ビットの整数値(0〜255)として表わされる。画像は隣接する画素間の相関が非常に高いので、隣接画素の色成分ごとの差分値を算出すると、差分値は0近くに分布する。この差分値をハフマン符号化することにより、画像データの圧縮を行うことができる。
【0011】
それに対して、デプスバッファに格納するデプス値は、32ビットの浮動小数点データで表現される。デプス値の場合も隣接する画素間の相関が非常に高いので、差分圧縮を適用することが考えられるが、浮動小数点データ間の差分を計算した場合、演算時の下位ビットの桁落ちによる演算誤差が発生する。差分圧縮の場合には、伸長時に差分値を累積的に加算していくので、誤差も累積されることになる。描画画素のデプス値に誤差が発生すると、隠れるべき画素が描画されたり、描画されるべき画素が隠れたりし、ユーザの意図したものとは全く異なる描画結果になってしまう。そのためデプス値データの圧縮過程で誤差が発生することは許容されない。従って、浮動小数点データの差分計算を行なうことは現実的ではない。
【0012】
32ビット浮動小数点表示のビットパターンを32ビットの整数として取り扱い、整数同士の差分を算出してデータ圧縮を行うことも考えられる。しかしながら、元が浮動小数点表示であるデプス値をそのまま整数データとして扱った場合には、画素間の相関が低くなってしまう。そのため、符号化の効率(圧縮率)が悪くなってしまう。特に正の値と、負の値の差分を計算するときに、差分が大きな値となることがある。これは、指数部が127をバイアスした正の整数の形式で表現されており、実際の指数部分は値から127を減算することによって求めるためである。例えば−1.0は0xBF800000,+1.0は0x3F800000と表され、−127と+127の間の計算となり、その差分値は大きな値となる。また、デプス値を画素値と同様の方法で8ビットの4要素に分割すると、分割箇所が指数部の途中となってしまい、要素間の差分を計算した際に大きな差分値を発生させる。
【0013】
そこで、3次元グラフィックス描画の1つの画素のデプス値を示す浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する。次に、第1部分の予測値と第1部分の値との差分である第1の差分値を整数データとして演算するとともに、第2部分の予測値と第2部分の値との差分である第2の差分値を整数データとして演算する。更に、上記のようにして求めた第1の差分値と第2の差分値とを可変長符号化する。以下に、これらの処理について説明する。
【0014】
図2は、浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する様子を示す図である。図2に示されるように、32ビット浮動小数点データ20は、1ビットの符号21、8ビットの指数部22、及び23ビットの仮数部23を含む。このうち指数部22を8ビット整数の第1部分24とする。また1ビットの符号21と23ビットの仮数部23とを合わせて、24ビット符号付き整数の第2部分25とする。このように32ビット浮動小数点データを2つの整数に分解する。
【0015】
図3は、差分値の演算の一例を示す図である。図3は所定の方向(例えば走査方向)に連続する4つの画素の第1部分E0乃至E3及び第2部分F0乃至F3を示す。4つの画素の第1部分E0乃至E3間の1階差分がdE0乃至dE2であり、4つの画素の第2部分F0乃至F3間の1階差分がdE0乃至dE2である。例えば、dE1=E2−E1である。またdE0乃至dE2間の差分、即ち第1部分E0乃至E3間の2階差分がd2E0乃至d2E1であり、dF0乃至dF2間の差分、即ち第2部分F0乃至F3間の2階差分がd2F0乃至d2F1である。例えば、d2E1=dE2−dE1である。
【0016】
例えば、着目画素のデプス値の第2部分の値がF2であり、1つ前の隣接画素のデプス値の第2部分の値がF1であるとする。このとき、同一値が連続するであろうという予測判断により得られる着目画素の予測値はF1であり、この予測値F1と着目画素の第2部分の値F2との差分F2−F1を演算する。これは1階差分であり、1階差分の場合の上記予測値は隣接画素のデプス値である。隣接画素としては、1つ前の画素(走査方向を左から右とすると1つ左の画素)に限らずに、例えば1つ上の画素等であってもよい。
【0017】
また、着目画素のデプス値の第2部分の値がF2であり、1つ前の隣接画素のデプス値の第2部分の値がF1であり、1つ後の隣接画素のデプス値の第2部分の値がF3であるとする。このとき、一定の増加量又は減少量で値が変化するとの予測判断により得られる着目画素の予測値は(F3+F1)/2であり、この予測値と着目画素の第2部分の値F2との差分(F3+F1)/2−F2を演算する。この差分は、2倍すればF3+F1−2F2となり、これは(F3−F2)−(F2−F1)に等しい。これは2階差分であり、2階差分の場合の上記予測値は着目画素の周辺画素の値F1及びF3の平均値である。周辺画素としては、1つ前の画素及び1つ後の画素に限らずに、例えば周囲8画素等であってもよい。
【0018】
デプス値は、一定の増加量又は減少量を有する変化(即ち一様な傾き)を示すことが多く、仮数部に対応する第2部分について上記のように2階差分をとれば、大多数の値がゼロ近辺に分布することになる。従って、例えばゼロを中心とする正規分布等を仮定したハフマン符号化テーブルを用意しておけば、ゼロ近辺の値には符号長の短い符号が割り当てられ、高効率の符号化を実現することができる。また指数部については、一定値であることが多く、2階差分をとれば、同様に大多数の値がゼロ近辺に分布することになる。従って、同様に2階差分値を可変長符号化すれば、高効率の符号化を実現することができる。なお指数部については、1階差分をとるだけでも大多数の値がゼロ近辺に分布するので、1階差分した結果を符号化する構成としてもよい。このような予測処理及び符号化処理においては、浮動小数点演算ではなく整数演算が行なわれるので、演算に起因する誤差が発生することがない。また指数部と符号付き仮数部とに分けて処理を行なうので、効率的な符号化を実現することができる。
【0019】
図4は、差分演算時のビット数拡張を示す図である。上記のように差分演算を行なう場合、指数部である第1部分については、1階差分時には負の演算結果を表現するために1ビットの拡張が必要になり、2階差分時には演算結果を桁あふれ無く表現するために更に1ビットの拡張が必要になる。また符号付き仮数部である第2部分については、1階差分時及び2階差分時の各々において、演算結果を桁あふれ無く表現するために1ビットの拡張が必要になる。従って、図4に示すように、指数部である第1部分については、元の8ビット整数データが1階差分後には9ビット整数データとなり、2階差分後には10ビット整数データとなる。また符号付き仮数部である第2部分については、元の24ビット整数データが1階差分後には25ビット整数データとなり、2階差分後には26ビット整数データとなる。
【0020】
なお可変長符号化する際、ビット数が長いままのデータを符号化することは効率的でない。ハフマン符号化等の可変長符号化では、一般に、符号化対象のデータと符号化後の符号化データとが1対1に対応する可変長符号化テーブルを使用する。符号化対象データが与えられると、この符号化テーブルを参照して対応する符号化データを求めることにより、符号化を行なう。この際、26ビット整数をそのまま符号化しようとすると、符号化テーブルのエントリ数が226個となり、膨大なメモリ空間を使用してしまう。そこで、26ビット整数のデータをビット数のより少ない複数のデータに分割し、この分割した後の複数のデータを別個に可変長符号化することが好ましい。なお指数部のデータについても必要に応じて細かく分割してもよい。
【0021】
図5は、整数データの分割を示す図である。図5に示すように、例えば、符号部と仮数部との2階差分データである26ビットの整数データを、上位から9ビット、9ビット、8ビットの3つのデータ長が短いデータに分割する。ビット数の組み合わせはこの分割例に限定されるものではなく、他のビット数の組み合わせを使用してもよい。例えば、7ビット、7ビット、6ビット、6ビットのように4つに分割してもよい。
【0022】
図6は、グラフィクスLSIとメモリとの構成を示す図である。図6においては、デプスデータの処理に関係する部分が主に示されており、描画データ(画素色データ等)についての処理部分の全体は示されていない。図6のグラフィクスLSI60は、外部メモリ66にバスを介して接続されている。グラフィクスLSI60は、グラフィクス描画コア61、描画&デプスデータRAM62、伸長回路部63、圧縮回路部64、及びメモリコントローラ部65を含む。外部メモリ66は、デプスバッファ67及びブロック長バッファ68を含む。
【0023】
各画素のデプス値(第1部分と第2部分とに分離されたデータ)の符号化データが、外部メモリ66のデプスバッファ67に格納されている。また最も最近アクセスしたデプス値は、グラフィクスLSI60内の描画&デプスデータRAM62に格納されている。描画&デプスデータRAM62は、一部のデータを手元に置いておくキャッシュメモリと同様の役割を果たす。描画&デプスデータRAM62に格納されるのは、表示画面に対応する全体の画像のうちの一部の小領域のデータであり、例えば16×16画素のブロックに対するデプス値及び描画色データが格納される。また外部メモリ66のデプスバッファ67には、このブロック単位で、デプス値の符号化データが格納される。符号化の結果、16×16画素のブロックに対するデプス値の符号化データのビット数は一定ではなくなるので、各ブロックに対する有効データの長さを示すデータがブロック長バッファ68に格納されている。グラフィクスLSI60による一連の描画処理により、外部メモリ66の所定の領域には、表示画面に対応した画像の全画素について描画色データが書き込まれることになる。
【0024】
図7は、ポリゴン描画処理におけるデプスデータの処理の流れを示すフローチャートである。ある1つのポリゴンの描画処理が開始されると、ステップS1で、ポリゴン図形が描画画素に分解される。即ち、ポリゴン内部に入る画素を特定し、これらの画素を所定の順番で走査する。このようにして、順に走査される一つ一つの画素について、所定の描画処理が実行されることになる。ステップS2で、着目画素について、描画位置及び描画色等を生成する。例えば、着目ポリゴンの頂点を結んだ辺上に位置する画素から水平方向に一画素ずつ走査していくことで、現在処理対象の着目画素の画素位置が定まる。また着目ポリゴンの頂点毎に求めた画像パラメータに基づいて、ポリゴン内部に含まれる各画素の画像パラメータを補間により求める。例えば、上記のように水平方向に一画素ずつ走査し、水平方向のパラメータ値の増分を加算していくことで、各画素におけるデプス値や描画色等の画像パラメータを求める。画像パラメータには、RGB各色の輝度、奥行き方向の距離を表すデプス値、テクスチャ表示のためのテクスチャ座標値等が含まれる。上記ステップS1及びS2の処理は、グラフィクス描画コア61により実行される。
【0025】
ステップS3で、着目画素位置を含むブロックが描画&デプスデータRAM62に格納されているか否かを判定する。着目画素位置を含むブロックが描画&デプスデータRAM62に格納されている場合には、ステップS5に進み、デプス値比較及び画素書き込みが行なわれる。着目画素位置を含むブロックが描画&デプスデータRAM62に格納されていない場合には、ステップS4で、描画&デプスデータRAMの入れ替え処理を実行する。これにより、現在描画&デプスデータRAM62に格納されているブロックのデータ(デプス値及び描画色データ)を外部メモリ66に格納し、更に、着目画素位置を含むブロックのデータを外部メモリ66から読み出して描画&デプスデータRAM62に格納する。なおここで、現在描画&デプスデータRAM62に格納されているデータを外部メモリ66に格納する処理は、手元のデータに行なった更新処理を外部メモリ66上のデータに反映させるために実行される。この入れ替え処理後、ステップS5に進み、デプス値比較及び画素書き込みが行なわれる。
【0026】
デプス値比較及び画素書き込み処理は、グラフィクス描画コア61により実行される。このデプス値比較及び画素書き込み処理では、着目画素に対して計算された着目ポリゴンのデプス値と既に描画済みのデータのデプス値(描画&デプスデータRAM62に格納されているデプス値)とを比較する。着目ポリゴンの方が、描画済みのデータよりも手前に位置するのであれば描画処理及びデプス値更新処理を行なう。即ち、ステップS2で生成された描画色を、描画&デプスデータRAM62に格納されているブロックの着目画素の描画色として書き込む(既存の描画色データに上書きする)。また更に、ステップS2で生成されたデプス値を、描画&デプスデータRAM62に格納されているブロックの着目画素のデプス値として書き込む(既存のデプスデータに上書きする)。なお着目ポリゴンの方が、描画済みのデータよりも奥に位置するのであれば描画処理及びデプス値更新処理を行なわない。
【0027】
ステップS6で、ポリゴン図形内に未描画の画素があるか否かを判定する。未描画の画素が有る場合には、ステップS2に戻り、以降の処理を繰り返す。未描画の画素が無い場合には、着目ポリゴンの描画処理を終了する。
【0028】
図8は、描画&デプスデータRAMの入れ替え処理を示す図である。ステップS1で、図6の圧縮回路部64がブロック符号化処理を実行する。即ち、描画&デプスデータRAM62に格納されるデプス値のブロックに対して、前述の浮動小数点データ分離、差分データ生成、及び可変長符号化の各処理が実行される。ステップS2で、図6のメモリコントローラ部65がブロックデータ出力処理を実行する。即ち、メモリコントローラ部65が、圧縮回路部64の生成した符号化データを、デプスバッファ67中の所定のブロック格納位置に格納すると共に、ブロック長データをブロック長バッファ68に格納する。
【0029】
ステップS3で、図6のメモリコントローラ部65がブロックデータ読込処理を実行する。即ち、メモリコントローラ部65が、着目画素を含むブロックについて、ブロック長バッファ68のブロック長が示す長さのデータを、デプスバッファ67中の所定のブロック格納位置の先頭から読み出す。ステップS4で、図6の伸長回路部63がブロック復号化処理を実行する。即ち、ステップS3で読み出された符号化データを復号化して差分値データを生成し、差分値データに基づいて第1部分の値と第2部分の値とを算出し、第1部分(指数部)と第2部分(符号付き仮数部)とを結合することにより浮動小数点データを復元する。復元した浮動小数点形式のデプス値のブロックは、描画&デプスデータRAM62に格納される。
【0030】
なお描画色データについても、描画&デプスデータRAM62の描画色データに対して必要に応じて所定の符号化処理が実行され、更に、外部メモリ66の所定の領域に書き込まれる。また更に、着目画素を含むブロックについて、外部メモリ66の所定の領域から描画色データが描画&デプスデータRAM62に読み込まれる。この時、必要に応じて復号化処理が実行される。
【0031】
図9は、図8のステップS1のブロック符号化処理の流れを示すフローチャートである。ブロック符号化処理が開始されると、ステップS1で、データ符号化処理が実行される。これは描画&デプスデータRAM62に格納されるブロックの各画素のデプス値に対して、前述の浮動小数点データ分離、差分データ生成、及び可変長符号化の各処理を実行するものである。ステップS2で、ブロック内に未符号化のデータが残っているか否かを判定する。未符号化のデータが有る場合には、ステップS1に戻り、処理を繰り返す。未符号化のデータが無い場合には、ブロック符号化処理を終了する。
【0032】
図10は、図8のステップS4のブロック復号化処理の流れを示すフローチャートである。ブロック復号化処理が開始されると、ステップS1で、データ復号化処理が実行される。これは外部メモリ66から読み出されたブロックの各画素の符号化デプス値に対して、前述の復号化、差分値データからの各データの復元、及び浮動小数点データの復元の各処理を実行するものである。ステップS2で、読み込んだデータ内に未復号化のデータが残っているか否かを判定する。未復号化のデータが有る場合には、ステップS1に戻り、処理を繰り返す。未復号化のデータが無い場合には、ブロック復号化処理を終了する。
【0033】
図11は、図8のステップS2のブロックデータ出力処理の流れを示すフローチャートである。ステップS1で、ブロックデータ長を算出する。即ち、圧縮回路部64による可変長符号化により生成された符号化データの長さ(ビット長又はバイト長等)を算出する。ステップS2で、外部メモリ66のデプスバッファ67の所定のブロック位置にブロックデータを書き込む。ステップS3で、ブロックデータ長を書き出す。即ち、外部メモリ66のブロック長バッファ68に、ステップS1で算出したブロックデータ長を示すデータを書き込む。
【0034】
図12は、メモリの構造を示す図である。外部メモリ66のメモリ空間中にデプスバッファ67の領域とブロック長バッファ68の領域とが設けられている。なお描画色データを書き込む領域も、外部メモリ66のメモリ空間中に設けられている。デプスバッファ67は、複数のブロック領域121に分割されている。各ブロック領域は予め決められた固定長であり、符号化データ125は、各ブロック領域の先頭から詰めて格納される。ブロック長バッファ68は、複数のブロックデータ長格納領域122に分割されている。各ブロックデータ長格納領域には、対応するブロックに格納される符号化データ125のデータ長を示すデータが格納されている。例えば、3番目のブロックデータ長格納領域には、3番目のブロックに格納される符号化データ125(ブロック2データ)のデータ長を示すデータ(ブロック2データ長)が格納されている。
【0035】
図13は、図8のステップS3のブロックデータ読込処理の流れを示すフローチャートである。ステップS1で、ブロックデータ長を読み込む。即ち、所望のブロックについて、ブロック長バッファ68に格納されているデータ長を示すデータを読み込む。ステップS2で、ブロックデータを読み込む。即ち、ステップS1で読み込んだデータが示すデータ長分のバイト数(又はワード数等)のデータをデプスバッファ67の対応するブロックから読み出す。
【0036】
図14は、図8のステップS1に示すデータ符号化処理を実行する構成及び処理の流れを示す図である。図14に示す構成は、図6の圧縮回路部64の構成に相当し、Z値入力部141、浮動小数分離部142、1階差分生成部143、2階差分生成部144、差分データ分割部145、符号化部146、及び符号化テーブル147を含む。データ符号化処理が開始されると、Z値入力部141は、描画&デプスデータRAM62から着目画素のデプス値を読み込む。浮動小数分離部142は、デプス値の浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する。1階差分生成部143は、上記第1部分と第2部分との各々について別個に、1階差分を求める。即ち、着目画素に隣接する画素(前回読み込んだ画素)の第1部分と着目画素の第1部分との差分を求めると共に、着目画素に隣接する画素(前回読み込んだ画素)の第2部分と着目画素の第2部分との差分を求める。隣接する画素(前回読み込んだ画素)の第1部分と第2部分のとのデータは内部レジスタ等に保持しておいてよい。2階差分生成部144は、第1部分と第2部分との各々について別個に、1階差分値に基づいて2階差分を求める。例えば、着目画素に隣接する画素(前回読み込んだ画素)について求めた1階差分値と着目画素について求めた1階差分値との差分を求める。隣接する画素(前回読み込んだ画素)の1階差分値のデータは内部レジスタ等に保持しておいてよい。
【0037】
差分データ分割部145は、少なくとも第2部分について求めた2階差分値のデータをビット数のより少ない複数のデータに分割する。符号化部146は、符号化テーブル147を参照して、第1部分と第2部分との各々について求めた2階差分値を可変長符号化する。なおブロックの先頭画素の第1部分と第2部分とのデータについては、1階差分演算に用いられると共に、そのまま符号化データとして出力される。このデータについては、符号化処理してから出力してもよい。またブロックの先頭画素及び次の画素の第1部分と第2部分との1階差分値については、2階差分演算に用いられると共に、そのまま符号化データとして出力される。この1階差分値については、符号化処理してから出力してもよい。
【0038】
図15は、図8のステップS4に示すデータ復号化処理を実行する構成及び処理の流れを示す図である。図15に示す構成は、図6の伸長回路部63の構成に相当し、復号化部151、差分データ結合部152、2階差分加算部153、1階差分加算部154、浮動小数結合部155、Z値出力部156、及び復号化テーブル157を含む。データ符号化処理が開始されると、復号化部151は、符号化されたデプス値(第1部分と第2部分とに分離されたデータ)を受け取り、復号化テーブル157を参照して、復号化データを求める。この際、先頭画素のデプス値と先頭画素及び次の画素の1階差分値とは、符号化されていないので、そのままの値がそれぞれ浮動小数結合部155と2階差分加算部153とに送られる。差分データ結合部152は、復号化部151により可変長復号されたデータの第2部分に相当するデータを結合することにより、26ビット整数データの2階差分データを生成する。2階差分加算部153は、2階差分値を直前の2階差分値に加算することにより1階差分値を生成する。1階差分加算部154は、1階差分値を直前の1階差分値に加算することにより1階差分値を生成する。これにより、第1部分である指数部データと第2部分である符号付き仮数部データとを生成する。これらのデータは浮動小数結合部155により結合されて、浮動小数形式のデータに変換される。Z値出力部156は、浮動小数点データをデプス値として出力する。なお符号化及び復号化に使用する符号化テーブル及び復号化テーブルとしては、それぞれの処理対象毎に異なった値のテーブルを用意すれば最適化をおこなうことができる。或いは、共通化することによりテーブル容量を小さくしてもよい。
【0039】
上記の処理により、32ビット浮動小数で表現されるデプス値を誤差無く圧縮することができる。非圧縮の元データに対する圧縮後のデータの圧縮率としては、20%〜30%を実現することができる。
【0040】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【0041】
60 グラフィクスLSI
61 グラフィクス描画コア
62 描画&デプスデータRAM
63 伸長回路部
64 圧縮回路部
65 メモリコントローラ部
66 外部メモリ
67 デプスバッファ
68 ブロック長バッファ
【特許請求の範囲】
【請求項1】
3次元グラフィックス描画の1つの画素のデプス値を示す浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する浮動小数分離部と、
前記第1部分の予測値と前記第1部分の値との差分である第1の差分値を整数データとして演算するとともに、前記第2部分の予測値と前記第2部分の値との差分である第2の差分値を整数データとして演算する差分生成部と、
前記第1の差分値と前記第2の差分値とを可変長符号化する符号化器と
を含むことを特徴とする画像データ処理装置。
【請求項2】
着目画素に対する前記予測値は、前記着目画素の周辺画素の平均値であることを特徴とする請求項1記載の画像データ処理装置。
【請求項3】
前記符号化器は、少なくとも前記第2の差分値のデータをビット数のより少ない複数のデータに分割する差分データ分割部を含み、前記差分データ分割部が分割した前記複数のデータを別個に可変長符号化することを特徴とする請求項1又は2記載の画像データ処理装置。
【請求項4】
前記符号化器により符号化されたデータを復号化して前記第1の差分値と前記第2の差分値とを生成する復号化部と、
前記復号化器により復号化された前記第1の差分値と前記第2の差分値とに基づいて前記第1部分の値と前記第2部分の値とを算出する差分加算部と、
前記差分加算部により算出された前記第1部分の値と前記第2部分の値とを結合することにより前記浮動小数点データを復元する浮動小数結合部と
を更に含むことを特徴とする請求項1乃至3何れか一項記載の画像データ処理装置。
【請求項5】
前記差分データ分割部は、前記第2の差分値のデータを3つのデータに分割することを特徴とする請求項3又は4記載の画像データ処理装置。
【請求項1】
3次元グラフィックス描画の1つの画素のデプス値を示す浮動小数点データを指数部の第1部分と符号及び仮数部の第2部分との2つの部分に分離する浮動小数分離部と、
前記第1部分の予測値と前記第1部分の値との差分である第1の差分値を整数データとして演算するとともに、前記第2部分の予測値と前記第2部分の値との差分である第2の差分値を整数データとして演算する差分生成部と、
前記第1の差分値と前記第2の差分値とを可変長符号化する符号化器と
を含むことを特徴とする画像データ処理装置。
【請求項2】
着目画素に対する前記予測値は、前記着目画素の周辺画素の平均値であることを特徴とする請求項1記載の画像データ処理装置。
【請求項3】
前記符号化器は、少なくとも前記第2の差分値のデータをビット数のより少ない複数のデータに分割する差分データ分割部を含み、前記差分データ分割部が分割した前記複数のデータを別個に可変長符号化することを特徴とする請求項1又は2記載の画像データ処理装置。
【請求項4】
前記符号化器により符号化されたデータを復号化して前記第1の差分値と前記第2の差分値とを生成する復号化部と、
前記復号化器により復号化された前記第1の差分値と前記第2の差分値とに基づいて前記第1部分の値と前記第2部分の値とを算出する差分加算部と、
前記差分加算部により算出された前記第1部分の値と前記第2部分の値とを結合することにより前記浮動小数点データを復元する浮動小数結合部と
を更に含むことを特徴とする請求項1乃至3何れか一項記載の画像データ処理装置。
【請求項5】
前記差分データ分割部は、前記第2の差分値のデータを3つのデータに分割することを特徴とする請求項3又は4記載の画像データ処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【公開番号】特開2011−175542(P2011−175542A)
【公開日】平成23年9月8日(2011.9.8)
【国際特許分類】
【出願番号】特願2010−40279(P2010−40279)
【出願日】平成22年2月25日(2010.2.25)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成23年9月8日(2011.9.8)
【国際特許分類】
【出願日】平成22年2月25日(2010.2.25)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]