IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

2024-163095テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照 この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。
<>
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図1
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図2
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図3
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図4
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図5
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図6
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図7
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図8
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図9
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図10
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図11
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図12
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図13
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図14
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図15
  • -テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照  この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。 図16
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024163095
(43)【公開日】2024-11-21
(54)【発明の名称】テクスチャ圧縮に対する統計的手法を実装するシステムおよび/または方法関連出願の相互参照 この出願は、2023年5月11日に出願された63/465,672の利益を主張し、その全内容は引用により本明細書に援用される。
(51)【国際特許分類】
   G06T 15/04 20110101AFI20241114BHJP
【FI】
G06T15/04
【審査請求】未請求
【請求項の数】52
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024077097
(22)【出願日】2024-05-10
(31)【優先権主張番号】63/465,672
(32)【優先日】2023-05-11
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】18/525,178
(32)【優先日】2023-11-30
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】18/525,519
(32)【優先日】2023-11-30
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(74)【代理人】
【識別番号】100130269
【弁理士】
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】ロマン・スマジャ
(57)【要約】      (修正有)
【課題】レート歪み最適化(RDO)に従う後続の可逆圧縮での使用に適したテクスチャ圧縮のための統計的手法に基づく方法、テクスチャエンコードシステム及び記憶媒体を提供する。
【解決手段】方法は、テクスチャが分割されることによって得られた複数のブロックの各々を、複数のブロックビットストリームにエンコードし、各々のブロック毎に、歪み値が最も小さいブロックビットストリームを選択し、各々の選択したブロックビットストリーム毎に、各々のデータチャンクが、その取得元であるそれぞれの選択したブロックビットストリームの連続区域であるように、データチャンクを取得し、取得したデータチャンク同士の間の衝突を検出し、検出した衝突に基づき、冗長データチャンクを有するマッチチェーンを、各々のマッチチェーン毎にその中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように形成する。
【選択図】図13
【特許請求の範囲】
【請求項1】
テクスチャをエンコードする方法であって、
前記テクスチャをデータ記憶部から読み出すことと、
前記テクスチャを複数のブロックに分割することと、
前記ブロックの各々を複数のブロックビットストリームにエンコードすることとを備え、前記ブロックビットストリームの各々は、それぞれのエンコード構成に対応し、かつ前記ブロックビットストリームの各々に関連付けられた歪み値を有し、さらに
各々のブロックごとに、予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれの前記ブロックについて関連の歪み値が最も小さい前記ブロックビットストリームを選択することと、
各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択された前記ブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することとを備え、前記それぞれの選択されたブロックビットストリームについての前記データチャンクは、前記それぞれの選択されたブロックビットストリームの各々の位置から始まって、それぞれの前記データチャンクが最小データチャンクサイズを有するように前記それぞれの選択されたブロックビットストリームの終端まで及び、前記選択されたビットストリームについて異なるサイズのデータチャンクが取得可能であり、さらに
取得された前記データチャンク同士の間の衝突を検出することと、
前記検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の切り捨て値を表すように、前記冗長データチャンクを有するマッチチェーンを形成することと、
形成された前記マッチチェーンの中から最良のマッチチェーンを反復選択することとを備え、前記最良のマッチチェーンは、ハイパーパラメータを用いて決定され、さらに
反復選択された前記最良のマッチチェーンから前記テクスチャの非可逆エンコードを取得することを備える、方法。
【請求項2】
可逆(lossless)圧縮器を用いて非可逆エンコード済テクスチャをエンコードすることをさらに備える、請求項1に記載の方法。
【請求項3】
前記データチャンクは異なるバイトロケーションから始まる、請求項1に記載の方法。
【請求項4】
各々のブロックごとに、前記予め定められた数までのできるだけ多くの別個のブロックビットストリームが選択され、
前記方法は、選択されたブロックビットストリームの数が前記予め定められた数未満である各々のブロックごとにインジケータを設けることをさらに備える、請求項1に記載の方法。
【請求項5】
前記複数のブロックのうちの1つ以上の特定されたブロックに対する最大歪み値を特定する入力を受けることをさらに備え、
前記1つ以上の特定されたブロックの各々ごとに、前記最大歪み値よりも良好な歪み値を有するブロックビットストリームのみがそれぞれの特定された前記ブロックのために選択可能である、請求項1に記載の方法。
【請求項6】
前記最小データチャンクサイズは、前記テクスチャの前記非可逆エンコードを適用すべき可逆圧縮器が使用可能な最小サイズと少なくとも同じである、請求項1に記載の方法。
【請求項7】
前記データチャンクを取得することは、
所与の選択されたブロックビットストリームに対して有効なデータチャンクのサブセットを抽出することと、
抽出された前記サブセットから前記所与の選択されたブロックビットストリームのための残余のデータチャンクを生成することと、を備える、請求項1に記載の方法。
【請求項8】
前記ハイパーパラメータは、レートと歪みとのうち片方を得るために他方を犠牲にし、どのマッチチェーンが最良であるかを決定する定義された関数の一部である、請求項1に記載の方法。
【請求項9】
前記テクスチャをスライスに分割することをさらに備え、スライスの各々は予め定められた数のブロックを含み、
前記スライスは、別々にブロックに分割される個別のテクスチャとして扱われる、請求項1に記載の方法。
【請求項10】
前記反復選択において選択可能でないと判断されるマッチチェーンは、前記マッチチェーンの形成について考慮されない、請求項1に記載の方法。
【請求項11】
所与のマッチチェーンに等しいかまたは前記所与のマッチチェーンより良好な別のマッチチェーンが形成されるかまたは形成されることになるという判断に応答して、前記所与のマッチチェーンを破棄することをさらに備える、請求項10に記載の方法。
【請求項12】
前記ハイパーパラメータに係る関数の前記マッチチェーンへの適用は、異なるマッチチェーン同士が互いに比較されることを可能にする、請求項11に記載の方法。
【請求項13】
前記反復選択は、前記最良のマッチチェーンを選択する、請求項10に記載の方法。
【請求項14】
テクスチャをエンコードする方法であって、
前記テクスチャを分割することによって得られた複数のブロックの各々を複数のブロックビットストリームにエンコードすることを備え、前記ブロックビットストリームの各々は、それぞれのエンコード構成に対応し、かつ前記ブロックビットストリームの各々に関連付けられた歪み値を有し、さらに
各々のブロックごとに、予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれの前記ブロックについて関連の歪み値が最も小さい前記ブロックビットストリームを選択することと、
各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択された前記ブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することとを備え、前記選択されたビットストリームについて異なるサイズのデータチャンクが取得可能であり、さらに
取得された前記データチャンク同士の間の衝突を検出することと、
前記検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように、前記冗長データチャンクを有するマッチチェーンを形成することと、
形成された前記マッチチェーンの中から最良のマッチチェーンを選択することとを備え、前記最良のマッチチェーンは、ハイパーパラメータを用いて決定され、さらに
選択された前記最良のマッチチェーンから前記テクスチャの非可逆エンコードを取得することを備える、方法。
【請求項15】
可逆圧縮器を用いて非可逆エンコード済テクスチャをエンコードすることをさらに備える、請求項14に記載の方法。
【請求項16】
前記データチャンクは異なるバイトロケーションから始まる、請求項14に記載の方法。
【請求項17】
各々のブロックごとに、前記予め定められた数までのできるだけ多くの別個のブロックビットストリームが選択され、
前記方法は、選択されたブロックビットストリームの数が前記予め定められた数未満であるブロックごとにインジケータを設けることをさらに備える、請求項14に記載の方法。
【請求項18】
前記複数のブロックのうちの1つ以上の特定されたブロックに対する最大歪み値を特定する入力を受けることをさらに備え、
前記1つ以上の特定されたブロックの各々ごとに、前記最大歪み値よりも良好な歪み値を有するブロックビットストリームのみがそれぞれの特定された前記ブロックのために選択可能である、請求項14に記載の方法。
【請求項19】
前記データチャンクを取得することは、
所与の選択されたブロックビットストリームに対して有効なデータチャンクのサブセットを抽出することと、
抽出された前記サブセットから前記所与の選択されたブロックビットストリームのための残余のデータチャンクを生成することと、を備える、請求項14に記載の方法。
【請求項20】
コンピューティングシステムに関連して仮想環境を提供する方法であって、
非一時的コンピュータ可読記憶媒体からエンコード済テクスチャを読み出すことを備え、前記テクスチャは請求項14に記載の方法を用いてエンコードされており、さらに
前記テクスチャの復号および復号された前記テクスチャの前記仮想環境における使用のために、前記エンコード済テクスチャを前記コンピューティングシステムの少なくとも1つのプロセッサに与えることを備える、方法。
【請求項21】
コンピューティングシステムに関連して仮想環境を提供する方法であって、
非一時的コンピュータ可読記憶媒体からエンコード済テクスチャを読み出すことを備え、前記テクスチャは請求項15に記載の方法を用いてエンコードされており、さらに
前記テクスチャの復号および復号された前記テクスチャの前記仮想環境における使用のために、前記エンコード済テクスチャを前記コンピューティングシステムの少なくとも1つのプロセッサに与えることを備える、方法。
【請求項22】
プロセッサによって実行されると、コンピュータに、請求項1に記載の方法に対応する動作を行なわせる命令を記憶する、非一時的コンピュータ可読記憶媒体。
【請求項23】
プロセッサによって実行されると、コンピュータに、請求項14に記載の方法に対応する動作を行なわせる命令を記憶する、非一時的コンピュータ可読記憶媒体。
【請求項24】
プロセッサによって実行されると、コンピュータに、請求項20に記載の方法に対応する動作を行なわせる命令を記憶する、非一時的コンピュータ可読記憶媒体。
【請求項25】
テクスチャエンコードシステムであって、
テクスチャを記憶するデータ記憶部と、
メモリ、および動作を行なうように構成された少なくとも1つのプロセッサとを備え、前記動作は、
前記テクスチャをデータ記憶部から読み出すことと、
前記テクスチャを複数のブロックに分割することと、
前記ブロックの各々を複数のブロックビットストリームにエンコードすることとを備え、前記ブロックビットストリームの各々は、それぞれのエンコード構成に対応し、かつ前記ブロックビットストリームの各々に関連付けられた歪み値を有し、さらに
各々のブロックごとに、予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれの前記ブロックについて関連の歪み値が最も小さい前記ブロックビットストリームを選択することと、
各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択された前記ブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することとを備え、前記それぞれの選択されたブロックビットストリームについての前記データチャンクは、前記それぞれの選択されたブロックビットストリームの各々の位置から始まって、それぞれの前記データチャンクが最小データチャンクサイズを有するように前記それぞれの選択されたブロックビットストリームの終端まで及び、前記選択されたビットストリームについて異なるサイズのデータチャンクが取得可能であり、さらに
取得された前記データチャンク同士の間の衝突を検出することと、
前記検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の切り捨て値を表すように、前記冗長データチャンクを有するマッチチェーンを形成することと、
形成された前記マッチチェーンの中から最良のマッチチェーンを反復選択することとを備え、前記最良のマッチチェーンは、ハイパーパラメータを用いて決定され、さらに
反復選択された前記最良のマッチチェーンから前記テクスチャの非可逆エンコードを取得することを備える、テクスチャエンコードシステム。
【請求項26】
前記少なくとも1つのプロセッサは、可逆圧縮器を用いて非可逆エンコード済テクスチャをエンコードすることをさらに備える動作を行なうように構成される、請求項25に記載のシステム。
【請求項27】
各々のブロックごとに、前記予め定められた数までのできるだけ多くの別個のブロックビットストリームが選択され、
選択されたブロックビットストリームの数が前記予め定められた数未満であるブロックごとにインジケータが設けられる、請求項25に記載のシステム。
【請求項28】
前記複数のブロックのうちの1つ以上の特定されたブロックに対する最大歪み値を特定する入力を受けるように構成されるユーザインターフェイスをさらに備え、
前記1つ以上の特定されたブロックの各々ごとに、前記最大歪み値よりも良好な歪み値を有するブロックビットストリームのみがそれぞれの特定された前記ブロックのために選択可能である、請求項25に記載のシステム。
【請求項29】
前記データチャンクを取得することは、
所与の選択されたブロックビットストリームに対して有効なデータチャンクのサブセットを抽出することと、
抽出された前記サブセットから前記所与の選択されたブロックビットストリームのための残余のデータチャンクを生成することと、を備える、請求項25に記載のシステム。
【請求項30】
コンピューティングシステムであって、これを介して仮想環境を表示可能であり、前記システムは、
動作を行なうように構成された1つ以上のプロセッサに結合されるメモリを備え、前記動作は、
非一時的コンピュータ可読記憶媒体からエンコード済テクスチャを読み出すことを備え、前記テクスチャは請求項14に記載の方法を用いてエンコードされており、さらに
前記テクスチャの復号および復号された前記テクスチャの前記仮想環境における使用のために、前記エンコード済テクスチャを前記コンピューティングシステムの前記1つ以上のプロセッサのうちの少なくとも1つに与えることを備える、コンピューティングシステム。
【請求項31】
テクスチャをエンコードする方法であって、
前記テクスチャを分割することによって得られた複数のブロックの各々を複数のブロックビットストリームにエンコードすることと、
各々のブロックごとに、予め定められた数までの別個のブロックビットストリームを選択することと、
各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択された前記ブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することと、
取得された前記データチャンク同士の間の衝突を検出することと、
前記検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように、前記冗長データチャンクを有するマッチチェーンを形成することと、
ハイパーパラメータに基づいて、形成された前記マッチチェーンの中からマッチチェーンの組を反復選択することとを備え、少なくともいくつかの潜在的なマッチチェーンは、前記反復選択において選択可能でないように決定され、かつ前記マッチチェーンの形成の際には考慮されず、さらに
選択された前記マッチチェーンの組から前記テクスチャの非可逆エンコードを取得することを備える、方法。
【請求項32】
所与のマッチチェーンに等しいかまたは前記所与のマッチチェーンより良好な別のマッチチェーンが形成されるかまたは形成されることになるという判断に応答して、前記所与のマッチチェーンは考慮されない、請求項31に記載の方法。
【請求項33】
前記ハイパーパラメータに係る関数の前記マッチチェーンへの適用は、異なるマッチチェーン同士が互いに比較されることを可能にする、請求項32に記載の方法。
【請求項34】
前記反復選択は、最良のマッチチェーンを選択する、請求項31に記載の方法。
【請求項35】
可逆圧縮器を用いて非可逆エンコード済テクスチャをエンコードすることをさらに備える、請求項31に記載の方法。
【請求項36】
前記予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれの前記ブロックについて関連の歪み値が最も小さい前記ブロックビットストリームが選択される、請求項31に記載の方法。
【請求項37】
選択された前記ビットストリームについて、異なるサイズのデータチャンクを取得可能である、請求項31に記載の方法。
【請求項38】
コンピューティングシステムに関連して仮想環境を提供する方法であって、
非一時的コンピュータ可読記憶媒体からエンコード済テクスチャを読み出すことを備え、前記テクスチャは請求項31に記載の方法を用いてエンコードされており、さらに
前記テクスチャの復号および復号された前記テクスチャの前記仮想環境における使用のために、前記エンコード済テクスチャを前記コンピューティングシステムの少なくとも1つのプロセッサに与えることを備える、方法。
【請求項39】
プロセッサによって実行されると、コンピュータに、請求項38に記載の方法に対応する動作を行なわせる命令を記憶する、非一時的コンピュータ可読記憶媒体。
【請求項40】
プロセッサによって実行されるとコンピュータに動作を行なわせる命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記動作は、
テクスチャを分割することによって得られた複数のブロックの各々を複数のブロックビットストリームにエンコードすることと、
各々のブロックごとに、予め定められた数までの別個のブロックビットストリームを選択することと、
各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択された前記ブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することと、
取得された前記データチャンク同士の間の衝突を検出することと、
前記検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように、前記冗長データチャンクを有するマッチチェーンを形成することと、
ハイパーパラメータに基づいて、形成された前記マッチチェーンの中からマッチチェーンの組を反復選択することとを備え、少なくともいくつかの潜在的なマッチチェーンは、前記反復選択において選択可能でないように決定され、かつ前記マッチチェーンの形成の際には考慮されず、さらに
選択された前記マッチチェーンの組から前記テクスチャの非可逆エンコードを取得することを備える、非一時的コンピュータ可読記憶媒体。
【請求項41】
所与のマッチチェーンに等しいかまたは前記所与のマッチチェーンより良好な別のマッチチェーンが形成されるかまたは形成されることになるという判断に応答して、前記所与のマッチチェーンは考慮されない、請求項40に記載の非一時的コンピュータ可読記憶媒体。
【請求項42】
前記ハイパーパラメータに係る関数の前記マッチチェーンへの適用は、異なるマッチチェーン同士が互いに比較されることを可能にする、請求項41に記載の非一時的コンピュータ可読記憶媒体。
【請求項43】
前記反復選択は、最良のマッチチェーンを選択する、請求項40に記載の非一時的コンピュータ可読記憶媒体。
【請求項44】
可逆圧縮器を用いて非可逆エンコード済テクスチャをエンコードすることをさらに備える、請求項40に記載の非一時的コンピュータ可読記憶媒体。
【請求項45】
テクスチャエンコードシステムであって、
テクスチャを記憶するデータ記憶部と、
メモリ、および動作を行なうように構成された少なくとも1つのプロセッサとを備え、前記動作は、
各々のブロックごとに、予め定められた数までの別個のブロックビットストリームを選択することと、
各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択された前記ブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することと、
取得された前記データチャンク同士の間の衝突を検出することと、
前記検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように、前記冗長データチャンクを有するマッチチェーンを形成することと、
ハイパーパラメータに基づいて、形成された前記マッチチェーンの中からマッチチェーンの組を反復選択することとを備え、少なくともいくつかの潜在的なマッチチェーンは、前記反復選択において選択可能でないように決定され、かつ前記マッチチェーンの形成の際には考慮されず、さらに
選択された前記マッチチェーンの組から前記テクスチャの非可逆エンコードを取得することを備える、テクスチャエンコードシステム。
【請求項46】
所与のマッチチェーンに等しいかまたは前記所与のマッチチェーンより良好な別のマッチチェーンが形成されるかまたは形成されることになるという判断に応答して、前記所与のマッチチェーンは考慮されない、請求項45に記載のシステム。
【請求項47】
前記ハイパーパラメータに係る関数の前記マッチチェーンへの適用は、異なるマッチチェーン同士が互いに比較されることを可能にする、請求項46に記載のシステム。
【請求項48】
前記反復選択は、最良のマッチチェーンを選択する、請求項45に記載のシステム。
【請求項49】
前記少なくとも1つのプロセッサは、可逆圧縮器を用いて非可逆エンコード済テクスチャをエンコードすることをさらに備える動作を行なうように構成される、請求項45に記載のシステム。
【請求項50】
前記予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれの前記ブロックについて関連の歪み値が最も小さい前記ブロックビットストリームが選択される、請求項45に記載のシステム。
【請求項51】
選択された前記ビットストリームについて、異なるサイズのデータチャンクを取得可能である、請求項45に記載のシステム。
【請求項52】
コンピューティングシステムであって、これを介して仮想環境を表示可能であり、前記システムは、
動作を行なうように構成された1つ以上のプロセッサに結合されるメモリを備え、前記動作は、
非一時的コンピュータ可読記憶媒体からエンコード済テクスチャを読み出すことを備え、前記テクスチャは請求項31に記載の方法を用いてエンコードされており、さらに
前記テクスチャの復号および復号された前記テクスチャの前記仮想環境における使用のために、前記エンコード済テクスチャを前記コンピューティングシステムの前記1つ以上のプロセッサのうちの少なくとも1つに与えることを備える、コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書中に記載されるある例示的な実施形態は、3次元仮想環境などで用い得るテクスチャ圧縮に関する。より特定的には、本明細書中に記載されるある例示的な実施形態は、レート歪み最適化(RDO)に従う後続の可逆(lossless)圧縮での使用に適した非可逆エンコード済テクスチャを生じさせるテクスチャ圧縮のための統計的手法に関する。
【背景技術】
【0002】
テクスチャは、たとえばビデオゲームで用いられるような仮想環境における最も重要なアセットの1つである。テクスチャは、仮想環境(たとえば、所望のゲーム内の体裁)で3次元(3D)オブジェクトに所望の体裁を付与するためにその表面を覆う層として作用する材料である。ほとんどのテクスチャは、テクセルと称されることがある画素の2次元(2D)アレイを含むファイルとして記憶される。これらの画素をオブジェクトにマッピングするプロセスはテクスチャマッピングと呼ばれる。
【発明の概要】
【0003】
図1は、3次元オブジェクトを2次元テクスチャで包むことでテクスチャマッピング後オブジェクトを生じさせているのを示す。より特定的には、図1は、3次元球状オブジェクト102と、世界地図である2次元テクスチャ104とを示す。テクスチャマッピングにより、テクスチャマッピング後オブジェクト106は球体のように見える。というのも、2次元テクスチャ104が3次元球状オブジェクト102の周りに巻き付けられるからである。たとえば、生成されるテクスチャマッピング後オブジェクト106に見られるように、図1の例では、3次元オブジェクト102に含まれる照明効果が考慮される。
【0004】
テクスチャは、それらが格納するデータの種類が異なる。「通常マップ」は、たとえば、面法線(オブジェクトの局所面に垂直なベクトル)のX、Y、およびZ座標を格納する。これらの成分を用いて、オブジェクトの異なる区域で光がどのように反射するかを算出することができ、これにより、より詳細な感じが与えられるため、「現実味」が増大する。この意味での「現実味」は、現実世界の環境、またはたとえば(いくつかの仮想ゲーム環境などのような)明らかに「現実」でない設定についてのより没入的な経験を反映し得る。他方、鏡面マップは一般的に、オブジェクトの輝きの制御に用いることができるグレースケール値を格納する。そのような場合、値が大きいほど、区域の反射率はより高くなる。他のよくある種類のテクスチャは、拡散反射マップ、アルベドマップ、ディスプレイスメントマップ、ライトマップ、アンビエントオクルージョンなどを含む。
【0005】
テクスチャデータは一般的に「そのまま」記憶されるわけではない。換言すると、ゲーム世界のような仮想環境で用いられるテクスチャは典型的に、そのような環境で直接に使用可能なフォーマットでは記憶されない。代わりに、テクスチャデータは典型的に、非可逆圧縮フォーマットで記憶される。圧縮フォーマットでのテクスチャデータの記憶により、たとえば「生」のテクスチャデータと比較して、たとえば、必要とされるGPUメモリまたは他のメモリの量の削減およびメモリ帯域幅の使用の削減などのいくつかの技術的利点が与えられる。
【0006】
テクスチャに用いられる圧縮フォーマットは、(JPEGなどの)画像圧縮フォーマットおよび(H.264などの)映像フォーマットで用いられるものとは異なる。1つの相違点は、テクスチャに用いられる圧縮フォーマットが、典型的には、各々のブロックごとに固定サイズの出力を生じさせながら、画素のブロックを独立してエンコードすることである。たとえば、テクスチャを圧縮するのに用いられるBC1フォーマットは、4×4個の画素のブロックをエンコードし、ブロックあたり8バイトのビットストリームを出力する。このように、各々の画素は、固定数のビット(またはビット毎ピクセル(BPP))でエンコードされ、これはランダムGPUアクセスによく適している。すなわち、特定の画素にアクセスするために、GPUは、それが属するブロックのアドレスを演算する。GPUは次に、オンザフライでブロックを復号して画素データを取得する。ビットレートが固定されているため、そのようなフォーマットは一般的に、可変ビットレートのフォーマットと比較して、より低い圧縮比をもたらす。よくある広く用いられているテクスチャ圧縮フォーマットは、たとえば、BC1、BC3、BC4、BC5、BC7、およびアダプティブスケーラブルテクスチャ圧縮(ASTC)のようなブロック圧縮(BC)フォーマットを含み、そのようなフォーマットの典型的なビットレートは8BPPから1BPPの範囲に及ぶ。
【0007】
テクスチャ関連のアセットは一般的に、ゲームの総記憶容量サイズの大部分を占める。多くの状況において、それらのサイズの制限は極めて重要になる。たとえば、あるゲームはカートリッジなどの物理的媒体に格納される。より小さなゲームは、より小さな媒体(たとえば、より小さなカートリッジ)を用いることができ、これにより、製造コストをより低くすることができ、かつ使用可能な媒体の種類をより柔軟にできる。別の例として、デジタルゲームをダウンロードすれば、使用するサーバ帯域幅をより少なくすることができ、サーバ側とクライアント側との両方で必要とされる演算リソースがより少なくなり、またサーバ側での保守要件が潜在的に減少する。
【0008】
テクスチャサイズを制御するさまざまなやり方がある。1つの手法は、可能な場合はより小さいテクスチャを作成することに係る。たとえば、2048×2048個の画素の分解能を有するテクスチャは、実際には1024×1024個の「有用な区域」しか有しないことがある。なぜなら、たとえば、この区域外のデータがGPUによってフェッチされないことがある(たとえば、ゲームまたは他のアプリケーションがそれを使用しないことがある)ためである。この場合、有用な区域外のデータは、画面上にレンダリングされることがなく、また一切のレンダリング演算に用いられない。そのような場合、そのようなデータを記憶する必要がないことがある。同じ傾向で、いくつかのチャネル(たとえば、色チャネル、座標チャネルなど)は、他のチャネルと冗長であってもよく、またはここでもGPUによって全くアクセスされなくてもよい。
【0009】
以上で言及した手法と組み合わせることができる別のよくある手法は、可逆圧縮フォーマットで(圧縮済)テクスチャファイルを保存することである。換言すると、非可逆圧縮済テクスチャファイルを、可逆圧縮を用いてさらに圧縮することができる。これを「超圧縮」と称することがある。可逆フォーマットは迅速に復元されることが多く、これによりロード時間(この場合は、テクスチャが記憶メモリ(たとえば、カートリッジ、SSD、または他の場所)からGPUメモリ(たとえば、VRAM)または他のメモリ場所に移行するのにかかる時間のこと)に追加されるオーバーヘッドは、典型的には、ほとんどないかまたは無視できる程度である。(たとえば、LZ4およびZStandardなどの)可逆圧縮フォーマットは、圧縮比と復元速度との間の技術的に「興味深い」相反関係を与える。
【0010】
(ゲームに関連して提供される仮想環境を含む)仮想環境には、(超圧縮および他の技法を含む)さまざまな圧縮技法が広く用いられているが、さらなる改善が依然として可能である。たとえば、合理的な圧縮および復元時間を潜在的に可能にしながらも、圧縮の量と品質との間の相反関係をよりうまく管理することが望ましいであろう。
【0011】
ある例示的な実施形態は、たとえば、テクスチャ圧縮ツールに改善を施すことによってテクスチャ圧縮技術を改善する。たとえば、ある例示的な実施形態は、レート歪み最適化(RDO)に従う後続の可逆圧縮での使用に適した非可逆エンコード済テクスチャを生じさせるテクスチャ圧縮のための統計的手法を提供する。
【0012】
ある例示的な実施形態の1つの局面は、(テクスチャ圧縮を含む)圧縮のための(「包括的」RDOアルゴリズムを含む)「包括的」エンコード手法を提供することに関する。エンコード手法は、テクスチャをエンコードするのに用いるフォーマットのビットストリーム詳細が予め分かっていなくてもよいという意味で包括的であるRDOアルゴリズムを含み、このことは、基礎をなすエンコーダ(たとえば、基礎をなすテクスチャエンコーダ)からほぼ完全に独立することを意味する。エンコード手法は以下を含む。第1に、テクスチャ中の各々のブロックは、(たとえば、たとえばBC1、ASTCなどの最適な圧縮フォーマットを用いて)多数の異なるやり方でエンコードされる。包括的なRDOアルゴリズムは、すべてのブロックのすべてのエンコード構成の中から、衝突、エンコード後(post-encoding)を探し、統計的観点からそのような衝突がかなり頻繁に発生する可能性が高く、全体的な圧縮手法においてこれを利用することができることを認識する。
【0013】
ある例示的な実施形態の別の局面は、ブロックエンコード構成の生成を下流の処理から切り離すことに係る。その結果、ある例示的な実施形態のアルゴリズムは並列化可能であり、(ハイパーパラメータによって制御されるような)品質とサイズとの間の多数の異なる相反関係を迅速に処理することができる。
【0014】
ある例示的な実施形態の別の局面は、多種多様な非可逆圧縮フォーマットを有利に用いることができることに関する。実際に、本明細書中に記載される包括性により、ある例示的な実施形態のアルゴリズムは、ASTCのような圧縮規格を用いてRDOを行なうことができるが、この場合、ビットストリームはかなり複雑である。
【0015】
ある例示的な実施形態では、テクスチャをエンコードする方法が提供される。データ記憶部からテクスチャが読み出される。テクスチャは複数のブロックに分割される。ブロックの各々は複数のブロックビットストリームにエンコードされ、ブロックビットストリームの各々は、それぞれのエンコード構成に対応し、かつそれに関連付けられた歪み値を有する。各々のブロックごとに、予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれのブロックについて関連の歪み値が最も小さいブロックビットストリームが選択される。各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択されたブロックビットストリームの連続区域であるように、複数のデータチャンクが取得される。それぞれの選択されたブロックビットストリームについてのデータチャンクは、それぞれの選択されたブロックビットストリームの各々の位置から始まって、それぞれのデータチャンクが最小データチャンクサイズを有するようにそれぞれの選択されたブロックビットストリームの終端まで及ぶ。選択されたビットストリームについて、異なるサイズのデータチャンクが取得可能である。取得されたデータチャンク同士の間の衝突が検出される。検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の切り捨て値を表すように、冗長データチャンクを有するマッチチェーンが形成される。形成されたマッチチェーンの中から最良のマッチチェーンが反復選択される。最良のマッチチェーンは、ハイパーパラメータを用いて決定される。反復選択された最良のマッチチェーンからテクスチャの非可逆エンコードが取得される。
【0016】
ある例示的な実施形態では、非可逆エンコード済テクスチャは、可逆圧縮器を用いてエンコードされ得る。
【0017】
ある例示的な実施形態では、データチャンクは、異なるバイトロケーションから始まってもよい。
【0018】
ある例示的な実施形態では、各々のブロックごとに、予め定められた数までのできるだけ多くの別個のブロックビットストリームが選択され得る。選択されたブロックビットストリームの数が予め定められた数未満である各々のブロックごとにインジケータを設けてもよい。
【0019】
ある例示的な実施形態では、複数のブロックのうちの1つ以上の特定されたブロックに対する最大歪み値を特定する入力を受け得る。1つ以上の特定されたブロックの各々ごとに、最大歪み値よりも良好な歪み値を有するブロックビットストリームのみがそれぞれの特定されたブロックのために選択可能であり得る。
【0020】
ある例示的な実施形態では、最小データチャンクサイズは、テクスチャの非可逆エンコードを適用すべき可逆圧縮器が使用可能な最小サイズと少なくとも同じであり得る。
【0021】
ある例示的な実施形態では、データチャンクを取得することは、所与の選択されたブロックビットストリームに対して有効なデータチャンクのサブセットを抽出することと、抽出されたサブセットから所与の選択されたブロックビットストリームのための残余のデータチャンクを生成することとを備えてもよい。
【0022】
ある例示的な実施形態では、ハイパーパラメータは、レートと歪みとのうち片方を得るために他方を犠牲にしてもよく、どのマッチチェーンが最良であるかを決定する定義された関数の一部であってもよい。
【0023】
ある例示的な実施形態では、テクスチャをスライスに分割してもよく、スライスの各々は予め定められた数のブロックを含み、スライスを、別々にブロックに分割される個別のテクスチャとして扱ってもよい。
【0024】
ある例示的な実施形態では、反復選択において選択可能でないと判断されるマッチチェーンは、マッチチェーンの形成について考慮されなくてもよい。たとえば、所与のマッチチェーンは、当該所与のマッチチェーンに等しいかまたは前記所与のマッチチェーンより良好な別のマッチチェーンが形成されているかまたは形成されることになるという判断に応答して破棄されてもよい。ハイパーパラメータに係る関数のマッチチェーンへの適用は、異なるマッチチェーンが互いに比較されることを可能にし得る、および/または反復選択は、最良のマッチチェーンを選択し得る。
【0025】
ある例示的な実施形態では、テクスチャをエンコードする方法が提供される。テクスチャを分割することによって得られた複数のブロックの各々は、複数のブロックビットストリームにエンコードされ、ブロックビットストリームの各々は、それぞれのエンコード構成に対応し、かつそれに関連付けられた歪み値を有する。各々のブロックごとに、予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれのブロックについて関連の歪み値が最も小さいブロックビットストリームが選択される。各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択されたブロックビットストリームの連続区域であるように、複数のデータチャンクが取得される。選択されたビットストリームについて、異なるサイズのデータチャンクが取得可能である。取得されたデータチャンク同士の間の衝突が検出される。検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように、冗長データチャンクを有するマッチチェーンが形成される。形成されたマッチチェーンの中から最良のマッチチェーンが選択される。最良のマッチチェーンは、ハイパーパラメータを用いて決定される。選択された最良のマッチチェーンからテクスチャの非可逆エンコードが取得される。
【0026】
ある例示的な実施形態では、テクスチャエンコードシステムが提供される。データ記憶部にテクスチャが記憶される。メモリが設けられ、少なくとも1つのプロセッサは動作を行なうように構成され、当該動作は、テクスチャをデータ記憶部から読み出すことと、テクスチャを複数のブロックに分割することと、ブロックの各々を複数のブロックビットストリームにエンコードすることとを備え、ブロックビットストリームの各々は、それぞれのエンコード構成に対応し、かつ前記ブロックビットストリームの各々に関連付けられた歪み値を有し、さらに当該動作は、各々のブロックごとに、予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれのブロックについて関連の歪み値が最も小さいブロックビットストリームを選択することと、各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択されたブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することとを備え、それぞれの選択されたブロックビットストリームについてのデータチャンクは、それぞれの選択されたブロックビットストリームの各々の位置から始まって、それぞれのデータチャンクが最小データチャンクサイズを有するようにそれぞれの選択されたブロックビットストリームの終端まで及び、選択されたビットストリームについて、異なるサイズのデータチャンクが取得可能であり、さらに当該動作は、取得されたデータチャンク同士の間の衝突を検出することと、検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の切り捨て値を表すように、冗長データチャンクを有するマッチチェーンを形成することと、形成されたマッチチェーンの中から最良のマッチチェーンを反復選択することとを備え、最良のマッチチェーンは、ハイパーパラメータを用いて決定され、さらに当該動作は、反復選択された最良のマッチチェーンからテクスチャの非可逆エンコードを取得することを備える
ある例示的な実施形態では、非可逆エンコード済テクスチャは、可逆圧縮器を用いてエンコードされ得る。
【0027】
ある例示的な実施形態では、データチャンクは、異なるバイトロケーションから始まってもよい。
【0028】
ある例示的な実施形態では、各々のブロックごとに、予め定められた数までのできるだけ多くの別個のブロックビットストリームが選択され得る。選択されたブロックビットストリームの数が予め定められた数未満であるブロックごとにインジケータを設けてもよい。
【0029】
ある例示的な実施形態では、複数のブロックのうちの1つ以上の特定されたブロックに対する最大歪み値を特定する入力を受け得る。1つ以上の特定されたブロックの各々ごとに、最大歪み値よりも良好な歪み値を有するブロックビットストリームのみがそれぞれの特定されたブロックのために選択可能であり得る。
【0030】
ある例示的な実施形態では、データチャンクを取得することは、所与の選択されたブロックビットストリームに対して有効なデータチャンクのサブセットを抽出することと、抽出されたサブセットから所与の選択されたブロックビットストリームのための残余のデータチャンクを生成することと、を備えてもよい。
【0031】
ある例示的な実施形態では、テクスチャをエンコードする方法が提供される。テクスチャを分割することによって得られた複数のブロックの各々を複数のブロックビットストリームにエンコードする。各々のブロックごとに、予め定められた数までの別個のブロックビットストリームが選択される。各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択されたブロックビットストリームの連続区域であるように、複数のデータチャンクが取得される。取得されたデータチャンク同士の間の衝突が検出される。検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように、冗長データチャンクを有するマッチチェーンが形成される。ハイパーパラメータに基づいて、形成されたマッチチェーンの中からマッチチェーンの組が反復選択される。少なくともいくつかの潜在的なマッチチェーンは、反復選択において選択可能でないように決定され、マッチチェーンの形成の際には考慮されない。選択されたマッチチェーンの組からテクスチャの非可逆エンコードが取得される。
【0032】
ある例示的な実施形態では、プロセッサによって実行されるとコンピュータに動作を行なわせる命令を記憶する非一時的コンピュータ可読記憶媒体が提供される。当該動作は、テクスチャを分割することによって得られた複数のブロックの各々を複数のブロックビットストリームにエンコードすることと、各々のブロックごとに、予め定められた数までの別個のブロックビットストリームを選択することと、各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択されたブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することと、取得されたデータチャンク同士の間の衝突を検出することと、検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように、冗長データチャンクを有するマッチチェーンを形成することと、ハイパーパラメータに基づいて、形成されたマッチチェーンの中からマッチチェーンの組を反復選択することとを備え、少なくともいくつかの潜在的なマッチチェーンは、反復選択において選択可能でないように決定され、かつマッチチェーンの形成の際には考慮されず、さらに当該動作は、選択された前記マッチチェーンの組からテクスチャの非可逆エンコードを取得することを備える。
【0033】
ある例示的な実施形態では、テクスチャエンコードシステムが提供される。データ記憶部にテクスチャが記憶される。メモリが設けられる。少なくとも1つのプロセッサは動作を行なうように構成され、当該動作は、各々のブロックごとに、予め定められた数までの別個のブロックビットストリームを選択することと、各々の選択されたブロックビットストリームごとに、各々のデータチャンクが、その取得元であるそれぞれの選択されたブロックビットストリームの連続区域であるように、複数のデータチャンクを取得することと、取得されたデータチャンク同士の間の衝突を検出することと、検出された衝突に基づいて、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の値を表すように、冗長データチャンクを有するマッチチェーンを形成することと、ハイパーパラメータに基づいて、形成されたマッチチェーンの中からマッチチェーンの組を反復選択することとを備え、少なくともいくつかの潜在的なマッチチェーンは、反復選択において選択可能でないように決定され、かつマッチチェーンの形成の際には考慮されず、さらに当該動作は、選択されたマッチチェーンの組からテクスチャの非可逆エンコードを取得することを備える。
【0034】
ある例示的な実施形態では、所与のマッチチェーンに等しいかまたは前記所与のマッチチェーンより良好な別のマッチチェーンが形成されるかまたは形成されることになるという判断に応答して、所与のマッチチェーンが考慮されなくてもよい。
【0035】
ある例示的な実施形態では、ハイパーパラメータに係る関数のマッチチェーンへの適用は、異なるマッチチェーン同士が互いに比較されることを可能にし得る。
【0036】
ある例示的な実施形態では、反復選択は、最良のマッチチェーンを選択し得る。
ある例示的な実施形態では、可逆圧縮器を用いて非可逆エンコード済テクスチャをエンコードし得る。
【0037】
ある例示的な実施形態では、予め定められた数までの別個のブロックビットストリームが選択されるように、それぞれのブロックについて関連の歪み値が最も小さいブロックビットストリームが選択されてもよい。
【0038】
ある例示的な実施形態では、選択されたビットストリームについて、異なるサイズのデータチャンクを取得可能であり得る。
【0039】
ある例示的な実施形態では、コンピューティングシステムに関連して仮想環境を提供する方法が提供される。非一時的コンピュータ可読記憶媒体からエンコード済テクスチャが読み出され、当該テクスチャは本明細書中に記載の手法(たとえば方法)を用いてエンコードされている。テクスチャの復号および復号されたテクスチャの仮想環境における使用のために、エンコード済テクスチャがコンピューティングシステムの少なくとも1つのプロセッサに与えられる。
【0040】
ある例示的な実施形態では、非一時的コンピュータ可読記憶媒体は、プロセッサによって実行されるとコンピュータに本明細書中に記載の手法(たとえば、方法)に対応する動作を行なわせる命令を記憶する。
【0041】
ある例示的な実施形態では、コンピューティングシステムが提供され、これを介して仮想環境を表示可能である。システムは、動作を行なうように構成された1つ以上のプロセッサに結合されるメモリを備える。当該動作は、非一時的コンピュータ可読記憶媒体からエンコード済テクスチャを読み出すことを備え、当該テクスチャは本明細書中に開示される手法(たとえば、方法)を用いてエンコードされており、さらに当該動作は、テクスチャの復号および復号されたテクスチャの仮想環境における使用のために、エンコード済テクスチャをコンピューティングシステムの少なくとも1つのプロセッサのうちの少なくとも1つに与えることを備える。
【0042】
本明細書に記載される特徴、局面、利点、および例示的な実施形態は、この発明のまたさらなる実施形態を達成するように、別々に用いられても、および/またはさまざまな組み合わせで適用されてもよい。
【0043】
これらおよび他の特徴および利点は、図面と併せて例示的な説明用の実施形態の以下の詳細な説明を参照することによって、より十分にかつより完全に理解され得る。
【図面の簡単な説明】
【0044】
図1】3次元オブジェクトが2次元テクスチャで包まれてテクスチャマッピング後オブジェクトを生じさせているのを示す。
図2】同じテクスチャの3つのエンコードを、各々ごとにサイズおよびピーク信号対ノイズ比(PSNR)とともに示す。
図3】ある例示的な実施形態に従う、異なるエンコード構成の抽出を示す例である。
図4】ある例示的な実施形態に従う、例示的なエンコード構成からのチャンクの抽出を示す。
図5】ある例示的な実施形態に従う、マッチチェーン識別の数値例を示す。
図6】ある例示的な実施形態において最適なマッチチェーンがどのように作成されるかを示すのを助ける。
図7】ある例示的な実施形態において最適なマッチチェーンがどのように作成されるかを示すのを助ける。
図8】ある例示的な実施形態において最適なマッチチェーンがどのように作成されるかを示すのを助ける。
図9】ある例示的な実施形態のマッチチェーン解決手順の1回の反復を示す。
図10】ある例示的な実施形態のテクスチャスライス手法に従って4つのスライスに分けられたテクスチャを概略的に示す。
図11】ある例示的な実施形態に関連して、マッチチェーンがいつ破棄され得るかを図示するのを助ける。
図12】ある例示的な実施形態に従うアルゴリズム因数分解の例を示す。
図13】ある例示的な実施形態に従うエンコード済テクスチャを生成するためのプロセスを示すフローチャートである。
図14】ある例示的な実施形態に従う、図13の例示的なフローチャートに関連して用い得るコンピューティングアーキテクチャを示すブロック図である。
図15】ある例示的な実施形態に従う、本明細書中に記載する技法を介してエンコードされたテクスチャを復号するためのプロセスを示すフローチャートである。
図16】ある例示的な実施形態に従う、図15の例示的なフローチャートに関連して用い得るコンピューティングデバイスを示すブロック図である。
【発明を実施するための形態】
【0045】
ある例示的な実施形態はテクスチャ圧縮技法に関し、より特定的には、ビデオゲームなどで用いられるものなどの仮想世界で用いるのに適したテクスチャ圧縮のためのシステムおよび/または方法に関する。
【0046】
テクスチャエンコードは、テクスチャエンコーダをテクスチャに適用するプロセスのことである。テクスチャエンコーダは、画素を独立したブロック(典型的には4×4平方のウィンドウ)に加工することによってテクスチャをエンコードし、これらのブロック(フォーマットに依存して、典型的には8または16バイト)の各々ごとにビットストリームを出力する。ビットストリームは、テクスチャをエンコードした結果としてテクスチャエンコーダが生じさせるバイナリシーケンスである。これは、テクスチャから画素の単一のブロックをエンコードした後に、またはテクスチャ全体をエンコードした後に得られるバイナリシーケンスのことである。
【0047】
圧縮とエンコードとは関連しており、ある状況では互換的に用いられることがある。データをエンコードするとは、一般的に、あるデータ表現を別のデータ表現に変更するプロセスのことである。たとえば、値「15」を、十六進法で「0×F」としてエンコードすることができる。他方、データを圧縮するとは、データのサイズを実質上縮小することを意味する。多くの場合、データをエンコードするとデータはより小さくなる。そのため、この観点からは、エンコードは圧縮の一形態といえるが、必ずしもそうである必要はない。エンコードおよび圧縮技法は、非可逆または可逆であることができる。可逆圧縮(エンコード)は、圧縮された(エンコードされた)データを復元(復号)して元のデータの完全な再構築を可能にできることを意味する。よくある可逆圧縮器は、LZMA、ZStandard、およびLZ4を含む。テクスチャエンコーダは一般的に可逆ではない。PNGフォーマットは、可逆エンコードの後に可逆圧縮が続く例である。
【0048】
発明者は、テクスチャエンコーダが一般的に、多くの場合、品質の点で非常に少ない追加コストで所与の画素のブロックをエンコードする多数のやり方を有することを認めた。このことは、そのようなテクスチャ圧縮フォーマットがブロックあたり固定ビットレートを用いることによるものであり、これはしばしば、エンコード対象のブロックの複雑さに必要ないほど高い。第2に、発明者は、より多くの冗長性がデータに現れれば、可逆圧縮器が概してより良好な圧縮を達成することを認識した。したがって、テクスチャブロックのエンコード構成を慎重に選ぶことによって、良好な圧縮比を達成しながら高いテクスチャ品質を維持することが可能になる。ある例示的な実施形態は、テクスチャ圧縮技術の場合に、高品質および良好な圧縮という有利な技術的効果を与える。
【0049】
ある例示的な実施形態は、レート歪み最適化(RDO)手法を用いる。RDOは、エンコードプロセスにおいて2つの判断基準、すなわち、レート(データのサイズ)および歪み(アセットの品質)、をともに最適化するために非可逆画像/映像圧縮で用いられる手法である。歪みは一般的に、ある測定基準を用いて測定される。より小さいレートは一般的に、より高い歪み、したがって、最適化に対する要望を意味する。
【0050】
テクスチャ圧縮に適用されるように、RDOは、品質のみを最適化することによってだけでなく、むしろ(可逆圧縮器によって圧縮された後のサイズとして理解すべき)テクスチャのサイズと品質との両方をともに最適化することによって、テクスチャをエンコードする。これらの2つの「軸」が先に言及したレートおよび歪みである。最適化プロセスは、ハイパーパラメータによって表すことができ、ハイパーパラメータは、品質と記憶との間の相反関係を表す。ハイパーパラメータ値の変更は、2つの軸の一方を他方よりも優先することであり、より多くの記憶を犠牲にしてより良好な品質を有するテクスチャになるか、または品質はより低いがサイズはより小さいテクスチャになるかである。たとえば、コスト関数に依存して、ハイパーパラメータの値が大きいことは、レートが歪みよりも優先されることを意味することができる。エンコーダが固定サイズのビットストリーム(固定レート)を生じさせるテクスチャ圧縮の文脈では、可逆圧縮器を活用することによってレートに影響を及ぼすことができる。
【0051】
RDO形式における「レート」とは、アセットをエンコード/圧縮した後のデータのサイズのことである。これに対し、RDOを用いたテクスチャエンコードの文脈では、テクスチャのブロックのレベルでレートを推定する試みがなされる。このように、レートは、テクスチャに可逆圧縮を適用した後、所与のブロックについて所与のエンコード構成を選ぶときにどれだけの記憶サイズの節約が予想されるかを暗示する。具体例として、ブロック番号24のエンコード構成番号3を選択すると、テクスチャサイズが2単位(たとえば、バイト)減少すると推定できるので、レートは2となる。RDO形式における「歪み」とは、エンコード/圧縮後のアセットの品質のことであり、歪みが大きいほどアセットの品質が悪くなるという考え方である。RDOを用いたテクスチャエンコードの文脈では、テクスチャのブロックのレベルで歪みが測定される。このように、歪みは、所与のブロックについて所与のエンコード構成を選んだ結果としてどのくらいの品質の損失が生じるかを暗示する。具体例として、ブロック番号24のエンコード構成番号3を選ぶと、ブロック品質が2単位(たとえば、デシベル)低下するであろうと推定できるので、歪みは2となる。ある例示的な実施形態のRDOの文脈でのレートおよび歪みに関するさらなる詳細を以下に与える。
【0052】
図2は、同じテクスチャの3つのエンコードを、各々ごとにサイズおよびピーク信号対ノイズ比(PSNR)とともに示す。PSNRは、画質評価のために広く用いられる測定基準である。PSNRの単位はデシベル(dB)である。PSNR値が大きいほど、テクスチャ全体の品質が高い。図2では、最上部のエンコードは、RDOなしのBC1エンコード(非可逆フォーマット)を用いる標準的なブロック圧縮である一方で、以下の2つのエンコードは、(ラムダと称される)ハイパーパラメータに対して異なる値を用いる、RDOによるBC1エンコードである。PSNRが示すように、RDOエンコード後テクスチャの品質はより低い。しかしながら、(図2にZstdとして示される)可逆ZStandardフォーマットによる圧縮後のそれらのサイズは小さくなっている。画像、フォーマット、および数字は、例示のみを目的として与えられていることが認められる。これらおよび/または他の非可逆および/または可逆エンコーダを、これらおよび/または他の画像/テクスチャに関連して、これらおよび/または他のラムダ値とともに用いることができ、その結果、(PSNRまたは何らかの他の測定基準で測定される)異なる測定基準および/または異なるサイズ縮小がもたらされ得る。
【0053】
以下により詳細に記載されるように、ある例示的な実施形態は、テクスチャ衝突アルゴリズムに関連してRDOに対する統計的手法を提供する。ある例示的な実施形態のテクスチャ衝突アルゴリズムは、いくつかの点で有利である。第1に、ある例示的な実施形態の手法は、バースデイパラドックスとして知られる統計的原理を用いる。これは、変数から値を繰り返し生成することによって、常識ではそうならないと想像したであろうことよりもはるかに速く「衝突」(以前に得られた値)に至る、したがってパラドックス、と述べる統計的結果である。テクスチャ圧縮の場合、ある例示的な実施形態は、所与のブロックについて多数のエンコード構成を抽出し、それ自体も多数の可能性あるエンコード構成を有する周囲のブロックで得られる高い衝突頻度を利用する。上記で示唆したように、エンコード構成は、テクスチャエンコーダを前提として、画素のブロックをエンコードする(すなわち、このブロックに対して有効なビットストリームを生じさせる)可能な有効なやり方である。アルゴリズム的手法は、基礎となるテクスチャエンコーダからほぼ完全に独立したものとなる。すなわち、アルゴリズムが、各々のブロックごとにエンコード構成の「カタログ」を一旦取得すると、これは、ブロックビットストリームサイズおよびブロック寸法などのエンコーダについての非常に基本的な情報のみで働くことができる。より正確には、ある例示的な実施形態は、ヘッダ、色、重み、区切りなどのブロックビットストリーム構造についての詳細を知る必要はない。これに対し、従来のRDO手法であれば、このおよび/または他の情報の正確な記述を必要としたであろう。このように、ある例示的な実施形態の手法は、長年にわたり多数のエンコーダにとって障害であった、(たとえば)ASTCを含む、幅広い非可逆エンコーダ/テクスチャフォーマットとの互換性への道を開く。また、ある例示的な実施形態のアルゴリズム的手法は、基本的に、完全に無関係なデータとのマッチを見つけることができる。従来の可逆圧縮の文脈での「マッチ」は、圧縮対象のソースにおけるデータのいくつかのチャンクの衝突(繰り返し)として定義される。可逆圧縮器は、たとえば、複製されたチャンクのうち1つまたはいくつかを別のチャンクへの参照で置き換えることによってそのような冗長性を利用し、データはより小さくなる。いくつかの従来の手法とは異なり、注記されるようなある例示的な実施形態は、完全に無関係なデータとのマッチを見つけることができる。たとえば、これは、あるブロックの色を別のブロックの重みとマッチさせることができる。ただし、それがそうすることを「興味深い」またはそうすることが有用であると判断すれば、である。
【0054】
第2の利点は、テクスチャエンコーダの切り離しに関する。ある例示的な実施形態のテクスチャエンコーダは、各々のテクスチャブロックごとに多数のエンコード構成を抽出するという意味で「RDOを意識した」ものではない。これは、典型的には最良品質の構成のみを選ぶ従来のエンコーダとは対照的である。すなわち、ある例示的な実施形態では、ブロックエンコード構成の生成をエンコードパイプラインの下流の他の動作から切り離すことが可能になる。このように、ある例示的な実施形態の手法は容易に並列化可能であり、品質とサイズとの間のいくつかの異なる相反関係、すなわち、ハイパーパラメータのいくつかの異なる値、を迅速に処理することができる。
【0055】
以下の第3の利点は、(ラムダ)因数分解に関する。テクスチャエンコードとRDOとの間の切り離しにより、テクスチャエンコードを「因数分解」し、各々が異なるハイパーパラメータ値(およびしたがって異なる品質対圧縮の相反関係)を有する、テクスチャの多数のRDOエンコード済バージョンを生じさせることが可能になる。以下により詳細に示されるように、ある例示的な実施形態のテクスチャ衝突アルゴリズムの中心的工程のうちの大部分を因数分解し、それによってラムダ依存部分を最小限にすることが可能になる。換言すると、単一のテクスチャを出力するのに比べて非常に少ない追加時間で多数のバージョンのエンコード済テクスチャを出力することが可能になる。
【0056】
テクスチャ圧縮におけるバースデイパラドックス
この節は、テクスチャ圧縮に適用されるようなバースデイパラドックスを図示するのを助ける。1からNの間のK個の乱数が(等確率で、かつ、同じ数を数回選び出せることを意味する「置換あり」で)選び出されると仮定する。そして、予想される衝突頻度(重複した数となる平均選出回数)Eを、次式に与える。
【0057】
【数1】
【0058】
256×256個の画素のテクスチャが4×4個の画素のブロックサイズでASTCフォーマットでエンコードされると仮定する。これは、4,096個のブロックに対応する。ASTCフォーマットにより、各々のブロックは16バイトでエンコードされる。この例示のために、エンコード済テクスチャ中に存在するであろう、予想される4バイトマッチの数を数えるとする。エンコードされたサイズは65,536バイト(4,096×16バイト)であるので、これは合計65,533個の連続した4バイトのチャンクを表す。上記の式を適用して、これらのチャンクの予想衝突頻度、またはいくつのチャンクが少なくとも別の1つのチャンクと同じ値を有すると予想されるかを決定する。特に、N=2^32(4バイトのチャンクが取ることができる整数値の範囲)およびK=65,533(4バイトチャンクの数)を有する上記の式を適用すると、E=0.9988≒1と示される。
【0059】
ここで、テクスチャがその元のサイズの1,024倍まで「拡大される」と想定する。これは、8,192×8,192個の画素のテクスチャ、すなわち、4×4個の画素の4,194,304個のブロックに対応する。エンコード済テクスチャについてEが演算されれば、Nは依然として2^32に等しいが、ここではKは6,7108,861であり、これはE=1,040,426を与える。
【0060】
要約すると、テクスチャサイズに1,024を乗算することによって、予想衝突頻度は今度は100万超で乗算される。
【0061】
一般的事項として、実際にテクスチャサイズ/テクスチャ寸法を増加させることは本当は有用ではない。しかしながら、異なるやり方で同様の効果を得ることができる。すなわち、各々のブロックごとに多数のエンコード構成を抽出できれば、元のテクスチャ寸法で依然として働きながら、図示されるシナリオと同様の条件を再現することが可能になる。本質的に、ある例示的な実施形態はこのように進む。
【0062】
なお、この例は多数のやり方で簡略化された。実際には、すべての4バイト値が達成可能な見込みであるとは限らない。なぜなら、あるものは、無関係な(かつ時には無効な)ビットストリームに対応するであろうからである。さらに、テクスチャは一般的に、いくつかの区域で強い空間的相関パターンを呈し、これは、そのような領域におけるマッチの確率の大幅な上昇をもたらすであろう。この例およびEの数式は、相関していない値を仮定する。(ASTCエンコード済テクスチャのサイズとASTCエンコード済かつ可逆圧縮済テクスチャのサイズとの間の比として定義される)ASTCエンコードテクスチャの典型的な超圧縮比は1から1.3の範囲であり、これは、実際には、衝突頻度が演算されたものよりも高いことを示す傾向がある。このように、実用的な現実は、本明細書に開示される技法を、バースデイパラドックスの厳密な数学的解釈が示唆するよりもさらに良好に機能させることができる。
【0063】
ある例示的な実施形態のテクスチャ衝突アルゴリズム
ある例示的な実施形態のテクスチャ衝突アルゴリズムを、異なる(概念的な)ステージに分解することができる。各々を以下でより詳細に説明する。
【0064】
ステージ1:マルチ構成テクスチャエンコード
この第1のステージとして、テクスチャエンコーダはテクスチャをエンコードし、各々のブロックごとに、最良のエンコード構成(すなわち、ブロックビットストリーム)だけでなく、むしろ別個の最良のエンコード構成の上位N個のリストも返す。ある例示的な実施形態では、「最良」とは歪みが最小限であることと理解されるべきである。Nの典型的な値は、たとえば、目下のテクスチャエンコーダだけでなく、これらの構成を記憶するのに必要なメモリ消費にも依存して、128から4,096の範囲に及ぶ可能性がある。以下の「テクスチャスライス」の節は、メモリ消費に関する考察を提供する。Nのこれらの値はうまく働くことが分かっているが、異なる実現例ではより大きいまたはより小さい値を用いることができる。
【0065】
ビットストリームに加えて、歪み値がこれらのエンコード構成の各々ごとに記憶される。以下の「レートおよび歪み」の節は、ある例示的な実装形態において用い得る可能な測定基準の例に関する考察を提供する。
【0066】
ブロックによっては、リストを完全に埋めることができない場合もあり得る。これが起こり得る一例は、テクスチャ中のいくつかの領域を特別な注意を払って取り扱う必要がある場合である。たとえば、テクスチャは、完全に平坦な領域を有することが多く、そのような領域に導入される任意の視覚的アーチファクトは概して極めて目立ち、したがって所望されることはほとんどない。そのような場合、歪みが最小限の構成を単に維持することが望まれることがある。より一般的には、いくつかのブロックについては、歪み値およびしたがってエンコード構成の数を明示的に制御することが望ましいことがある。いずれにせよ、エンコーダが、それが得ることを許されている最大数の構成を返さないであろう場合は、最後の有効な構成の直後の記憶バッファ内にインジケータを設けてリストの終端を示してもよい。
【0067】
図3は、ある例示的な実施形態に従う、異なるエンコード構成の抽出を示す例である。図3では、区域302は、M個のテクスチャブロックに分けられたテクスチャであり、これらのブロックのためのエンコード構成は、角を折った灰色のボックスで表される。各々のブロックはN個の可能なエンコード構成を有する。ei,jはブロック番号i(bi)のためのエンコード構成番号jを指し、di,jはこのエンコード構成に関連付けられる歪み値である。「END」は、リストが完全に埋まっていない場合にエンコード構成の終端を示すマーカである。所与のブロックbiについて、エンコード構成は、増えていく歪みによってソートされる(di,1≦di,2≦・・・≦di,N)。
【0068】
ステージ2:チャンク抽出
このステージは、前のステージを介して集められたビットストリームから(チャンクとも称される)バイトの連続する群を抽出する。所与のビットストリームについて、チャンクは、すべてのバイト位置から始まってビットストリームの終端まで及ぶように抽出される。ある例示的な実施形態では、各々のチャンクサイズは、修正可能なパラメータであるMIN_MATCH_SIZEとして特定される所与の値よりも大きい。
【0069】
このステージの動作の理解を助けるために、テクスチャエンコーダがBC1である以下の例を考える。BC1は、各々のブロックごとに8バイトのビットストリームを生じさせる。この例では、MIN_MATCH_SIZEは4に設定される。この例示を引き続いて用いて、図4は、ある例示的な実施形態に従う、例示的なエンコード構成からのチャンクの抽出を示す。図4から分かるように、BC1ビットストリームから、4バイトサイズから8バイトサイズの5つのチャンクが抽出される。これらの抽出されたチャンクの各々ごとに、後続のステージに有用であろう追加の情報要素も記憶される。これらの追加の情報要素は、エンコード構成インデックス(図4のj)、ブロックインデックス(図4のi)、およびビットストリーム内のチャンクの開始位置(0はチャンクが最初のバイトで始まることを意味する)を含む。
【0070】
より多くのチャンクを抽出する必要はない。なぜなら、これらの5つのチャンクから、(たとえば、マスキングプロセスを介して)これらのチャンクからいくつかの終端バイトを除去することによって、ビットストリーム中の全ての値を取得することが可能であるからである。たとえば、(値v2v3v4v5v6v7v8を有する)7バイトのチャンクを取り、その最後の3バイト(v6、v7、v8)をマスクすることによって、値v2v3v4v5を取得することができる。
【0071】
MIN_MATCH_SIZEの値は、異なる例示的な実施形態では異なり得る。たとえば、MIN_MATCH_SIZEは、用いられる可逆圧縮器に依存し得ることが分かっている。典型的に、LZ4は、4バイトより真に小さいマッチを考慮しないので、このサイズのチャンクが抽出されれば逆効果であろう。可逆圧縮器がテクスチャをより効率的に圧縮できるように、最終テクスチャビットストリーム中に冗長性を作成することが望ましい。圧縮器が3バイトを見ないことが分かっているかまたは予想される場合、3バイトのマッチを探すことにあまり意味はない。ZStandardは、3バイトのマッチを考慮することができるが、効率は保証されない。実際、ほとんどの可逆圧縮器は、4バイトサイズから始まるマッチを実際に利用し始めるため、それは、ある例示的な実施形態において用いられるデフォルト値であり得る。
【0072】
MAX_MATCH_SIZEは、テクスチャ衝突アルゴリズムが考慮する最大マッチサイズであると定義される。デフォルトでは、これをビットストリームサイズに等しくなるように設定してもよい。というのも、この値より大きなチャンクを抽出することができないからである。より小さな値を選ぶことができる。そのようなマッチサイズを回避する特定の理由があるであろういくつかの事例があり得るので、値をこのデフォルトから下げることができる。
【0073】
ステージ3:マッチングチェーンの作成
このステージは、衝突検出のため、および最適なマッチチェーンを作成するためのサブステージを含む、いくつかのサブステージを含む。
【0074】
ステージ3.1:衝突検出
すべてのブロックのすべてのエンコード構成についてビットストリームチャンクが一旦抽出されると、それらの間の衝突を検出してマッチを識別する。この検出を行なうためにマッチサイズをMIN_MATCH_SIZEからMAX_MATCH_SIZEに増加させることによって、チャンクを処理し得る。
【0075】
最も小さいマッチサイズ(MIN_MATCH_SIZE)については、全てのチャンクは、MIN_MATCH_SIZEバイトに切り捨てられた値でソートされる。たとえば、MIN_MATCH_SIZE=4である場合、図4の例では、8バイトチャンクはv1v2v3v4に切り捨てられ、7バイトチャンクはv2v3v4v5に切り捨てられ、以下同様である。これらの値は整数(4バイトチャンクについては32ビット値)であるので、基数ソートの効率的な実現例を用いて線形時間でチャンクバッファをソートしてもよい。これにより、複製値、したがってマッチが直ちに与えられる。
【0076】
異なる例示的な実施形態では他のソートアルゴリズムを用いてもよいことが認められる。さらに、衝突検出を速めるのを助けるために追加の最適化を実現してもよい。たとえば、上位サイズのマッチを見出すために、以下のおよび/または他の最適化が可能である。第1に、以前のチャンクサイズで重複を有することが既知であるチャンクのみをソートする必要がある。たとえば、5バイトのマッチサイズでチャンクをソートするためには、4バイトのマッチサイズで重複を有したチャンクのみを考慮することができる。なぜなら、所与のチャンクが4バイトでマッチしなければ、これは5バイトでマッチすることができないからである。実際に、この手法は、ソートすべきチャンクの数を劇的に減らすことが分かっている。
【0077】
第2に、現在のマッチサイズを扱うほどには十分大きくないチャンクを破棄することができる。図示のためにもう一度図4を参照すると、5バイトのマッチサイズのために4バイトチャンクを考慮することはできない。なぜなら、これを「拡張」することができないからである。というのも、そうすることでビットストリームデータ外になってしまうであろうからである。開始位置を用いてこれらの「拡張不可能な」チャンクを検出して破棄する。
【0078】
第3に、すべてのチャンクが以前のマッチサイズですでにソートされているので、インクリメンタルソートアルゴリズムを用いることにより、チャンクを追加のバイトのみでソートできるようになる。実際に、この手法がやはり処理時間を劇的に短縮することが分かっている。たとえば、チャンクバッファが既に最初の4バイトでソートされていると仮定すると(かつソートが安定していると仮定すると)、5バイトでチャンクをソートすることは、第5のバイトに従ってソートすることにしか係らないであろう。たとえば、単一パスを用いる効率的な基数ソートにより、この手順を線形時間で再び行なうことができる。
【0079】
重複値の群をマッチチェーンと考えてもよい。図5は、ある例示的な実施形態に従う、マッチチェーン識別の数値例を示す。図5の上部は、4バイトチャンクの衝突の抽出を示す。(図5の下部にあるように)上位のマッチサイズに移るとき、いくつかのチャンクは依然として5バイトで衝突することが分かる。しかしながら、いくつかのチャンクは、5バイト(左の×印を付与したチャンク)上で拡張することができないか、またはもはや衝突しない(右の×印を付与したチャンク)。
【0080】
いくつかの衝突するチャンクは同じブロックを参照するが、異なるエンコード構成を用いることができることが認められる。ある例示的な実施形態は、ブロックあたり1つのエンコード構成のみが最終的に選ばれるように動作するので、そのような種類のマッチは実際にはなされない。そのような場合が起こると、歪みが最も少ないエンコード構成に由来するチャンクのみがマッチチェーン中に保持される一方で、他のチャンクは除去される。
【0081】
ステージ3.2:最適なマッチチェーンの作成
図6から図8は、ある例示的な実施形態において最適なマッチチェーンがどのように作成されるかを示すのを助ける。図6では、マッチチェーンは、所与の値Xのすべての冗長チャンクを含有する。なお、Xは、ブロックiのためのインデックスjの関連のエンコード構成ei,jの切り捨て値(たとえば、4バイトの切り捨て値)である。チャンクの開始位置はここでは必要とされないので、この表現から省略される。しかしながら、歪み(di,j)が追加されている。なお、これは、このブロックのための関連のエンコード構成(ei,j)を選んだ結果としてブロックに生じる歪みである。
【0082】
これらの冗長チャンクはすべて長さNのチェーンを形成する。しかしながら、このチェーンからより少ないチャンクでより小さいマッチチェーンを作成することができる。たとえば、最初の3つのチャンクをグループ化することができ、これは、たとえば図7に示すように別のチェーンも形成するであろう。
【0083】
図7から認められるように、チェーンを形成する多数のやり方がある。(チェーンが少なくとも2つの重複値を含有する必要があると仮定して)長さNのチェーンから新しいチェーンを形成する2N-N-1個のやり方がある。これらの新しく形成されたチェーンはすべてそれら自身のレートおよび歪みを有し、これにより、それらの各々を、考慮するのに潜在的に興味深いものにするが、それらすべての保持は実現可能でないことがある。というのも、Nは潜在的に任意の値である可能性があるからである。たとえば、N=16の場合、記憶すべき65,519個のチェーンがあるであろう。
【0084】
準最適性のためにこの数を減らすことができる。ある例示的な実施形態では、レートと歪みとの間のより良好な相反関係を表す別のチェーンが存在すれば、マッチチェーンは準最適として扱われる。しかしながら、そのようなチェーンが存在しない場合、ある例示的な実施形態は当該チェーンが最適なチェーンであると見做す。
【0085】
このことを理解するために、図7では、増えていく歪みによってチャンクが左から右にソートされると仮定する。すなわち、di1,j1≦di2,j2≦・・・≦diN,jNと仮定する。
【0086】
ここで、図7の最初の2つのチャンクからなるチェーンが「適用」されるとする。この文脈でチェーンを適用すると、エンコード構成j1をブロックi1に設定し、エンコード構成j2をブロックi2に設定する。可逆圧縮器は、2回繰り返すテクスチャビットストリーム中の値(X)を見ることになり、次にそのような冗長性はあるストレージゲインR(レート)をもたらすことになる。これらの2つのエンコード構成を選ぶことによって生じる品質損失(歪み)は、2つの歪みの和D=di1,j1+di2,j2となる。
【0087】
ここで、代わりに、図7の第2および第3のチャンクからなるチェーンを考える。2つのエンコード構成j2およびj3をそれぞれブロックi2およびi3に設定した後の可逆圧縮器の状況は先と同様である。すなわち、これは、同じ重複値(X)を見ることになり、次に同じレートRをもたらす。しかしながら、歪みは、ここではD=di2,j2+di3,j3≧di1,j1+di2,j2である。
【0088】
このように、ある例示的な実施形態は、第2のチェーンよりも第1のチェーンを優先する。なぜなら、これは歪みがより少ない一方でレートが同じだからである。換言すると、第1のチェーンは第2のチェーンに「勝る」。したがって、第2のチェーンは準最適チェーンと見做される。上記に基づくと、実際には、N-1個の最適なチェーン、すなわち、すべてのチャンクからなるものまでの、最初の2つのチャンクからなるもの、最初の3つのチャンクからなる第2のものなど、しか存在しないと推測される。
【0089】
なお、ここでおよび他の箇所で用いられる「最適」、「最適化された」などの用語の使用は、「最も最適」、「完全に最適化された」などを必ずしも意味しない。たとえば、ここでは、これらのチェーンを最適と呼ぶことは厳密には正確ではない。なぜなら、それらが実際に最も最適であるか否かはまだ分からないからである。実際に、形成されるであろう(すべてのブロックのすべてのエンコード構成のすべてのチャンクに由来する)すべてのチェーンのうちあるものがこれらよりよいということが起こり得る。たとえば、ここでのN-1個のチェーンのどれよりもレートと歪みとの間の相反関係が良好であると判明している別のチェーンが存在する可能性がある。しかしながら、この時点では、破棄されたチェーンが準最適であることが分かっている。なぜなら、考慮されるN-1個のチェーンのうちの少なくとも1つがそれら全てに勝るからであり、そのため、これらのN-1個のチェーンは、プロセスの少なくともこの時点では、最適として扱われ得る。
【0090】
図8から分かるように、チェーンの数は、2N-N-1からN-1へと劇的に減少している。ある例示的な実施形態は、これらのチェーンのみを考慮し他を破棄することによってなくすものは何もない。次のステージの説明で以下に見られるように、チェーンは、(ハイパーパラメータラムダによって制御される)具体的な順序に従って適用される。チェーンが適用されるたびに、いくつかのブロックは特定のエンコード構成に設定され、ブロックが一旦設定されると、それらを変更することはもはやできない。上記の例に戻ると、第1および第2のチャンクによって形成されるチェーンと、第2および第3のチャンクによって形成されるチェーンとが互いに競合することが分かる。すなわち、それらは両方ともブロックi2を参照するが、このことは、一方を適用することが他方をもはや適用不可能にすることを意味する。しかし、最適性により、第1のチェーンの代わりに第2のチェーンを適用することは準最適であろう。これにより、第2のチェーンは不要であり、破棄することができる。ブロックi1が既設定の場合、第1および第2のチャンクからなるチェーンはもはや適用不可能になり(なぜなら、これはブロックi1を参照するため)、論理的には、第2および第3のチャンクからなるチェーンが最適なチェーンになる。しかし問題がある。なぜなら、そのチェーンは保持されていないため、したがって適用できないからである。この場合、ブロックi1が一旦設定されると、このチェーンが「当然に」利用可能になる。実際、最初の3つのチャンク(長さ3)からなる最適なチェーンを考慮すると、ブロックi1が一旦設定されると、それは第2および第3のチャンクのみからなるようになり、これが対象のチェーンである。このように、最適なチェーンのみを保持することで実際に十分である。なぜなら、これらのチェーンは、現在の文脈では最適なチェーンとなるより小さなチェーンに分解され、したがって、破棄された他のチェーンを保持する必要がないからである。
【0091】
なお、ハイパーパラメータラムダは、レートと歪みとの間の相反関係を制御する。ハイパーパラメータなしでは、ある例示的な実施形態は、チェーンのうちのどのチェーンが他のチェーンよりも良好な相反関係を表し、したがって、どのチェーンが他のチェーンと比較して本当に最適であるかを判断することができない。たとえば、最初の2つのチャンクからなるチェーンは、最初の3つのチャンクからなるチェーンよりも歪みが小さい。しかしながら、前者は後者よりもレートが悪い(なぜなら、レートはチェーンの長さとともに増加するからである)。以下から認められるように、ハイパーパラメータを用い、かつコストの概念を導入することによって、どのチェーンが最良の相反関係を表すかという問いに答えることが可能になる。
【0092】
ステージ4:マッチの解決
このステージは、先のステージの間に保持されるチェーンを効果的に適用するのを助ける。そのすべてが異なる(および潜在的によくある)ブロックを参照する多数の(恐らく最適な)チェーンが存在し得るので、それらを適用すべき順序に関して決定がなされる。ハイパーパラメータλ(ラムダ)は、この点において助けとなる。ハイパーパラメータは、レートと歪みとの間の相反関係を制御する。このことを、1単位のレート対1単位の歪みを交換することの間の一種の「市場価格」と考えることができる。コストの概念も導入される。コスト(C)は次の式で定義される:
C=D-λR
式中、Dは歪みを表し、Rはレートを表す。歪みは、(長さNの)チェーンを構成する全ての歪みの和として演算される。
【0093】
【数2】
【0094】
なお、C=R-λDは、コストを定義するために用いることができる別の式である。しかしながら、この節の残りの部分の中の後続の段落では、コスト関数はD-λRに等しいと仮定する。
【0095】
以上で論じたように、レートRは、チェーンを適用することによって実現されるストレージゲインに対応する。これを演算することは難しい可能性がある。というのも、これは可逆圧縮器の挙動に依存するからである。このように、ある例示的な実施形態は、チェーンを適用した結果としてテクスチャビットストリームに導入されるマッチを考慮して、可逆圧縮器が何バイトの「節約」を可能にするかの推定器を設ける。以下のレートおよび歪みの節は、この点に関してさらなる詳細を与える。
【0096】
以上で与えられたCの式は、レートと歪みとの間の相反関係を正しくモデル化するが、改善が可能である。すなわち、1つのチェーンが適用されるたびに、ブロックのエンコード構成がすべてについて1回設定される。このことは、これらのブロックをもはや設定できないことを意味する。しかし、より小さいチェーンよりも長いチェーンを優先するのを避けることが望ましいであろう。さもなければ、ある例示的な実施形態は、非常にすぐにブロックを「消耗」してしまい得る。このように、ある例示的な実施形態は、ブロックあたりのコスト(Cblock)を考慮し得る。
【0097】
【数3】
【0098】
ある例示的な実施形態では、手順は以下のように働く。まず、各々のブロックは「未設定」としてマークされる。各回においてすべてのチェーンが処理され、それらのコストCblockが算出される。正のコストは、無効なレート対歪みの相反関係を暗示するため、これらのチェーンはスキップされる。最小の(負の)コストを有するチェーンが採用されて適用される。上記で論じたように、チェーンを適用することは、テクスチャを更新することと、各々の関連のブロックごとにチェーンが参照するエンコード構成を設定することとに係る。これらの参照されるブロックの各々は、次に「設定」とマークされる。各々のブロックから、それが属する全てのチェーンを参照することが可能になる。このように、ブロックが一旦「設定」になると、それを参照する各々のチェーンは、当該ブロックをそれから「除去」することによって更新される。チェーンからブロックを除去することは、このブロックの歪みの減算もしつつその長さを1だけ減らすことに係る。
【0099】
この手順は、以下の条件のうちの1つが満たされるまで繰り返される:(1)全てのブロックが「設定」としてマークされる;(2)全てのチェーンが適用された;または、(3)残余のチェーンは適用不可能(長さは厳密には2より短い)か、もしくは正のコストを有するかのいずれかである。正のコストを有するチェーンは、必ずしもそれが決してその状態に永久に留まることを意味するわけではないことが認められる。以上で論じたように、チェーンはより小さいチェーンに分解され、これらのより小さいチェーンのうちの1つが負のコストを有することがあり(およびしたがって、興味深いレート対歪みの相反関係を表し)、次にそれを上記の手順で選択することができることがあり得る。
【0100】
図9は、ある例示的な実施形態のマッチチェーン解決手順の1回の反復を示す。図9は、図の最も左の部分に適用するチェーンを選ぶことから始まる。図9の例における数値は、限定ではなく例として与えられることが認められる。
【0101】
キャッシュ効率を最大にするため、チェーンは、非常に軽量の(メモリ中で非常にわずかなスペースしか取らない)オブジェクトとして記憶され、3つの情報要素、すなわち、長さ、マッチサイズ、および歪みの和(これは、チェーンが参照するすべてのブロックの歪みの和である)を含む。そのためこの「軽量チェーン」のみからは、ある例示的な実施形態は、それが参照するブロックを識別することができない。ある例示的な実施形態では、そのような情報は別々のバッファに保持される。インデックス付けを用いることにより、データを参照することができるようになる。たとえば、ある例示的な実施形態では、以下のインデックス付け手順を実現してもよい。
【0102】
・チェーンバッファ中のチェーンのインデックス位置を与えられると、それが参照する(たとえば、(ブロックインデックス、エンコード構成インデックス)の形態の)対にされた情報のリストにアクセスすることができる。
【0103】
・エンコード構成インデックスが与えられると、その歪み値にアクセスすることができる。
【0104】
・ブロックインデックスが与えられると、ブロックステータス(「設定」または「未設定」)にアクセスすることができる。
【0105】
・ブロックインデックスが与えられると、それが関与するチェーンのリストにアクセスすることができる。
【0106】
これらの4つのリンクにより、ある例示的な実施形態で図9の手順を実現することができる。
【0107】
最後に、すべてのブロックが「設定」状態にならずに手順が終了する場合、ある例示的な実施形態は、これらの残余のブロックの各々ごとに、0の歪みを有するエンコード構成を適用する。次の節で詳述するように、そのようなエンコード構成が常に存在し、ブロックについて存在する最良の品質構成に対応する。なお、こうすることは、歪みが0であるがレートが0でもある(レートが非ゼロであるためには、チェーンは少なくとも2つのブロックを参照しなければならないため)1つのブロックのみからなる架空のチェーンを適用することとしても見られ得る。したがって、そのような架空のチェーンは、RDOが考慮することができる最も高いコストである0のコストを有するであろう。
【0108】
例示的なレートおよび歪みの考察
レートおよび歪みを以上で論じた。品質を測定するために、測定基準を用いる。ある例示的な実施形態に関連して用い得る可能な測定基準は、たとえば、所定の色空間(RGB、YUV、CieLab、OkLabなど)中の二乗差分和(SSD)と、たとえばブロックノイズアーチファクトを軽減することを目的とするSSDの何らかの変形とを含み、当該変形は(1)ブロックの境界上の画素により多くの重みを与える重み付けされたSSD、または(2)画素の分散(ノイズの多いブロックを、しばしば他のブロックよりも積極的に変質させることができる、なぜなら、これはより目立ちにくいためである)で正規化されたSSDを含み得、さらに測定基準は、法線マップの角度SSDと、構造的類似性(SSIM)と、などを含む。
【0109】
ある例示的な実施形態は、テクスチャブロックのレベルで品質を測定し、それにより特定のテクスチャブロックの品質を測定する値を得る。ある例示的な実施形態では、品質の測定基準は、所与のブロックについて画素以上のものを含む。たとえば、それは、(たとえば、ブロックの空間的文脈を用いる)ブロックを囲む画素を含むこともできる。品質の測定基準は、テクスチャブロックの群の品質尺度が当該群の中の各々のブロックごとの品質尺度の和に等しいという意味で加算的であり、または少なくともこのようにして近似することができる。
【0110】
歪みは品質損失の尺度であるので、それは、基準に対するテクスチャブロックの品質を実際に測定する。ある例示的な実施形態での基準は、所与のブロックについて、利用可能なすべてのエンコード構成のうちそのブロックについて取得することができる最良の可能な品質である。換言すると、Qが用いられる品質測定基準であり、qi,jがエンコード構成j(またはei,j)を有するブロックiのためのこの測定基準を有する値である場合、歪みは、di,j=qi,j-Minj(qi,j)として演算される。この式は、所与のブロックについて、歪みが正の値であり、最良のエンコード構成が0の歪みを有することを暗示し、これが望ましい。
【0111】
レートは、どのくらいの記憶容量サイズが節約されると予想されるかであり、取得がより困難である可能性がある。なぜなら、(歪みとは異なり)これを直接演算することができず、したがって、ある事例では推定されるからである。実際に、可逆圧縮器がテクスチャビットストリームの変化にどのように反応するかを予測することは難易度が高い可能性がある。なぜなら、これは、しばしば圧縮器自体の内部の多数の事柄に依存するので、マッチチェーンが実際にどのように節約するかが分からないことがあるからである。ストレージゲインを推定するための例示的な技法は、たとえば、以下でより詳細に論じるような、閉形式手法およびモデルベースの手法を含む。
【0112】
レートの推定に対する例示的な閉形式手法
ある例示的な実施形態は、関数を用いてストレージゲインのモデル化を試みる。これは、評価が非常に速いという利点を有する。使用可能な1つの関数は
R(Length,MatchSize)=Max(0,(Length-1)*(MatchSize-MIN_MATCH_SIZE+1)
である。
【0113】
以上で論じたように、長さおよびマッチサイズはマッチチェーンの属性である。テクスチャ中に5バイトの6つの重複チャンクが存在する場合、長さが6であり(マッチ)サイズが5であるマッチチェーンが存在する。このように、MIN_MATCH_SIZEが4であると仮定すると、上記の式によって与えられるこのマッチチェーンのレートはR=10である。
【0114】
この関数は、レートについて予想可能な性質も有する。これは
・MIN_MATCH_SIZEよりも真に小さいMatchSizeまたは長さ<2については、R=0
・Rは長さに対する増加関数である、および
・RはMatchSizeに対する増加関数である
を含む。
【0115】
レートの推定に対する例示的なモデルベースの手法
レートを演算するために明示的な式を用いる代わりに、ある例示的な実施形態は、可逆圧縮器の簡略化モデルからレートを推定することを試みることができる。圧縮器の性能を近似する多数のやり方がある。ある例示的な実施形態で用いることができる1つの手法は、アルゴリズムが考慮することができる各々の可能なマッチチェーンのレートを独立して推定しようとすることである。たとえば、長さ3の4バイトマッチチェーン(すなわち、4バイトのチャンク自体の3回繰り返し)がどれだけ節約するかの推定値を有することに対する要望があると仮定する。マッチは、所与のサイズのスライス内で行なわれることが知られている(上記のテクスチャスライスの節を参照)。以下の実験を何度も実行することによって、この特定のマッチチェーンがどれだけ節約するかを「シミュレーション」することが可能である。
【0116】
1.考慮しているテクスチャスライスサイズのサイズのデータのランダムバッファを生成する(たとえば、4,096個のASTCブロックのスライスは、65,536バイトのバッファを意味する)。
【0117】
2.スライスを所与の「圧縮性状態」に置く。目標は、(可逆圧縮器で圧縮されたときに)バッファがある圧縮レベルに達するようにマッチを作成するために、バッファ中のランダムデータを修正することである。すなわち、マッチは、必要とされる圧縮レベル(たとえば、未圧縮のバッファサイズの60%)に達するまで、バッファ中にランダムに作成される。
【0118】
3.(例では、長さ3の4バイトマッチを意味する)対象とされるマッチチェーンを用いてバッファ中で別のマッチを行ない、先の工程で作成された既存のマッチを上書きしないことを確実にする。
【0119】
4.可逆圧縮器を用いてバッファを圧縮する。得られた圧縮サイズと圧縮サイズとの差を2から演算する。これは、マッチチェーンがどれだけの記憶容量サイズを節約したかの推定を与える。
【0120】
5.「実験」を何回も(たとえば1回から4回)繰り返して、各々の反復において、初期バッファ内容(1)、圧縮レベルおよびそのレベルに到達するために挿入したマッチの種類(2)、ならびにそのレートを推定しなければならないマッチチェーンのバッファ中の場所(3)をランダム化する。次に、4からのすべての推定値の平均によってレート推定値が与えられる。
【0121】
上記の手順は、アルゴリズムで恐らく実行可能なすべての種類のチェーンに対して行なわれる。たとえば、MIN_MATCH_SIZEが4に設定されかつMAX_MATCH_SIZEが8に設定されれば、40,96個のブロックのテクスチャスライスを用いると、(8-5+1)*(4,096-1)=20,475種類のチェーンが存在し、これらに対してレートを潜在的に推定すべきである。この手順は「オフライン」で(たとえば、アルゴリズム実行の外で)行なうことができ、全てのレート推定値の結果を、たとえばアルゴリズム実行の間にアクセス可能な(たとえばアレイの中に)記憶することができる。
【0122】
メモリ使用量を制御するための例示的な技法
例示的なテクスチャスライス技法
以上で論じたように、ある例示的な実施形態のアルゴリズムのステージ2は、エンコード構成からチャンクを抽出する。大きなテクスチャサイズについては、この結果、メモリ消費が大きすぎ、したがって非実用的になってしまうことがある。たとえば、ASTCフォーマットおよびブロックあたり1,024個のエンコード構成を有する1,024×1,024個のテクスチャを採用してステージ2の結合を演算すると、ほぼ10億個の抽出チャンクができる。
【0123】
この問題に対処するのを助けるために、ある例示的な実施形態は、テクスチャを、たとえば所与の数のブロックを含有するスライスに分ける。各々のスライスは、ある例示的な実施形態のアルゴリズムによって独立して処理される。図10は、ある例示的な実施形態のテクスチャスライス手法に従って4つのスライスに分けられたテクスチャを概略的に示す。
【0124】
ある例示的な実施形態では、典型的なスライスサイズは、1,024個から4,096個のブロックの範囲に及ぶ。ちょうどよいスライスサイズを選ぶことは、ブロックあたりちょうどよい数のエンコード構成を選ぶことと相関する。なぜなら、両者とも、制御されたレベルに維持することが望ましいメモリ使用量および処理時間に強く影響を及ぼすからである。より大きなスライスサイズおよびより少ないエンコード構成を優先したがる、または逆にエンコード構成はより多くてもより小さなスライスを優先したがるかもしれない。そのようなパラメータは、制約(たとえば、メモリおよび処理時間の割り当て分)だけでなく、(圧縮レベルおよび到達するテクスチャ品質を含む)これらのパラメータを用いるアルゴリズム自体の挙動にも依存して、経験的に決定され得る。
【0125】
ある例示的な実施形態におけるマッチチェーンの破棄
たとえば、ある例示的な実施形態のアルゴリズムのステージ4がいくつかのチェーンを考慮しないであろうという理由で、それらを破棄する(およびしたがって記憶しないようにする)ことができると予め分かっている場合など、場合によっては、早期チェーン拒絶があり得る。このことは、そのようなチェーンが分解し得ることによってできるより小さいチェーンが何であるかに拘わらず、そのようなチェーンが常に準最適であることを意味する。換言すると、このマッチチェーンよりも良好なマッチチェーンが常に存在する。ステージ3では、1つのそのような状況を説明した。すなわち、いくつかのチェーンが準最適である。なぜなら、それらは、歪みがより劣っている一方で、別のものとレートが同一であったためであり、上記の説明はこれらのチェーンを記憶する必要がないことを示した。なぜなら、考慮される最適なチェーンは、もしそれらが最適になるのであれば、それらに自然に分解するであろうからである。
【0126】
同様に、チェーンは、レートがより劣る一方で、別のものと歪みが同じであることができる。
【0127】
図11は、ある例示的な実施形態に関連して、マッチチェーンがいつ破棄され得るかを図示するのを助ける。図11は、長さ3の最適と想定されるチェーンを表す。各々の参照されるブロックの例示的な歪みは例示の目的で与えられる。上位のマッチサイズ(5バイト)に移ると、チェーンを構成するチャンクのすべても5バイトで衝突する。したがって、4バイトチェーンがある例示的な実施形態のアルゴリズムのステージ3で潜在的に最適なチェーンとして識別されたとしても、これを記憶する必要はない。なぜなら、ある例示的な実施形態のアルゴリズムのステージ4ではこれは考慮されることがないからである。実際、どのようなより小さいチェーンにこれが分解しても、これは常に準最適なチェーンであろう。なぜなら、上位のサイズのチェーンも同じより小さいチェーンに分解し、同じ歪みを有する一方でより大きなマッチサイズ(ここでは5バイト)およびしたがってより良好なレートを有するからである。つまり、図11では、マッチサイズ5およびサイズ3の長さを有する第2のマッチチェーンがマッチサイズ4およびサイズ3の長さを有する第1のマッチチェーンに「勝る」。
【0128】
マッチチェーンの破棄に関するさらなる詳細
多数のチェーンの破棄を可能にし得るさらなる最適化がある。たとえば、ある例示的な実施形態のアルゴリズムのステージ1の後、各々のブロックごとに多数のエンコード構成が存在する。いくつかの歪み値は、これらのエンコード構成を参照する一切のチェーンが、ある例示的な実施形態のアルゴリズムのステージ4によって考慮されることがないであろうという決定を既にすることができるようなものであると認められている。
【0129】
これを見るために、長さNのチェーンを考える。ブロックあたりのそのコストは
【0130】
【数4】
【0131】
である。式中、diはチェーン中で参照されるi番目のブロックの歪みであり、RNはレートである。下付き文字Nは、ここではレートがとりわけチェーン長に依存することを示すために用いられる。歪みは、増加する値
1≦d2≦・・・≦dN
によってソートされると仮定する。
【0132】
ここで、新しいコスト値Cblock,N+1を与える歪みdN+1を用いて、別のブロックをこのチェーンに追加することを考える。このコストの分子を考慮すると、
【0133】
【数5】
【0134】
である。
N+1-RNは増分レートであり、長さNのチェーンを長さN+1のチェーンに拡張することによって追加のストレージゲインに対応する。この値ΔRmaxについて優級数が分かっていると仮定する。すると、
【0135】
【数6】
【0136】
である。
したがって、dN+1>λΔRmaxであれば、
【0137】
【数7】
【0138】
であり、2つの場合が起こる可能性がある。
・第1に、
【0139】
【数8】
【0140】
である。これは、長さNのチェーンが正のコストを有し、したがって適用しても興味深くないことを意味する。しかし、次に不等式に従うと、長さN+1のチェーンのコストも正であり、したがってこれも興味深くない。
・第2に、
【0141】
【数9】
【0142】
である。長さNのチェーンが適用可能である。長さN+1のチェーンが適用可能であるためには、
【0143】
【数10】
【0144】
である。上記の不等式をNで除算すると、
【0145】
【数11】
【0146】
となる。しかし
【0147】
【数12】
【0148】
でもある。したがって、
【0149】
【数13】
【0150】
である。換言すると、0>Cblock,N+1>Cblock,Nである。
第1の場合、長さN+1のチェーンは正のコストを有し、第2の場合、長さNのチェーンがこれに勝る。なぜなら、これはコストがより高いためであり、そのため準最適なチェーンが存在する。したがって、エンコード構成がdi>λΔRmaxであるような場合、そのようなエンコード構成を参照する任意のチェーンは準最適なチェーンとなる。しかし、準最適であることは、ある例示的な実施形態では拒絶の十分な判定基準ではない。ある例示的な実施形態は、そのようなチェーンを破棄することができるように、アルゴリズムのステージ4ではこれを決して選択できないことを確実にする。換言すると、ある例示的な実施形態は、それが常に準最適なチェーンのままであることを確認する。2つの条件である0>Cblock,N+1>Cblock,NおよびdN+1>λΔRmaxにより、長さN+1のチェーン(またはそれから残るもの)は決して最適にはならず、したがって適用されることはない。その理由は、それが残っている限り、長さNのチェーン中の少なくとも2つのブロックである0>Cblock,N+1>Cblock,Nが常に成立するので、N+1のチェーンと比較して長さNのチェーンが望ましいであろうからである。長さNのチェーンに1つのブロックしか残っていない(およびしたがって長さNのチェーンが適用不可能になる)場合、(今や長さ2のチェーンになった)長さN+1のチェーンは正のコストを有することが分かる。たとえば、ブロック1のみが長さNのチェーンのまま留まっていると仮定する。すると、長さN+1のチェーンのコストは、
【0151】
【数14】
【0152】
である(なぜなら、λR2=λ(R2-R1)≦λΔRmax、というのもR1は0に等しいからである)。
【0153】
したがって、長さN+1のチェーンは「興味深く」なく、破棄することができる。
例示的なラムダ因数分解関連の技法
以上で論じたように、ある例示的な実施形態のアルゴリズムを因数分解することができる。さらに、ステージ4でハイパーパラメータの使用に言及した。このように、ステージ1からステージ3を1回だけ行なうことによって、たとえばレートと歪みとの間の異なる相反関係に対応するエンコード済テクスチャの異なるバージョンを出力することが可能になる。そのような場合、ステージ4のみが数回実行されるであろう。図12は、ある例示的な実施形態に従うアルゴリズム因数分解の例を示す。10の工程で、0から100までの11個のハイパーパラメータ値がアルゴリズムに送られる。分かるように、ステージ1からステージ3は、上述したのと同じやり方でスライスあたり1回だけ行なわれる。ステージ4のみが、プロセスへの入力と同じ回数実行される。入力は、ステージ4の11*4=44回の実行の計数を与える具体的なラムダ値を有する特定のスライスである。これらの実行の各々を完全に並列化することができるので、そのような構造は、ある例示的な実施形態での効率的なマルチスレッド化を可能にしている。
【0154】
前述の小節で論じたように、多数のチェーンの挿入を避けるためにある例示的な実施形態のアルゴリズムのステージ1の後に適用可能な最適化は、あるしきい値λΔRmaxを上回る歪みを有するエンコード構成を参照するチェーンを破棄することに係る。このしきい値はラムダの値に依存するが、これは、アルゴリズムのステージ1からステージ3がラムダに依存しないという概念と矛盾する可能性がある。しかしながら、しきい値を変更してこれをラムダ独立にすることによって、たとえば新しいしきい値λmaxΔRmaxとしてこれを採用することによって、これを扱うことができる。
【0155】
例示的な開発およびランタイムパイプライン
開発者の視点から(たとえば、たとえばゲーム世界で用いるために仮想環境の一部を設計または実現しているかもしれない者の観点から)は、本明細書中に開示されるアルゴリズム技法は、開発ツールに関連して提供され得る。ツールは、メモリに動作可能に結合される少なくとも1つのハードウェアプロセッサを含むコンピューティングシステム上で実行されるソフトウェアプログラムであり得る。ツールはユーザインターフェイスを備えてもよく、ユーザはこれを通してソフトウェアプログラムと対話する。ソフトウェアプログラムにアクセスするコンピューティングシステムにローカルのまたはそれから遠隔のデータ記憶部は、圧縮対象のテクスチャのライブラリを記憶する。
【0156】
ツールを用いて、開発者は、圧縮対象の1つ以上のテクスチャを選択し、たとえば、以上で識別された非可逆フォーマット(たとえば、BC1、BC3、BC4、BC5、BC7、およびASTC)などの可能な非可逆フォーマットのリストから1つ以上の対象非可逆フォーマットを特定する。開発者は、RDOを適用するか否かを決定し、適用する場合は1つ以上のRDOラムダ値が特定される。
【0157】
エンコードは、特定されたパラメータを用いて、選択された1つ以上のテクスチャに対して生成される。たとえば以上で論じたように、複数のエンコードを効率的に行なうことが可能であることが認められる。エンコードが一旦完了すると、開発者は品質およびサイズを比較することができる。品質は、プログラムされたまたは選択された測定基準(たとえば、PSNR、SSD、SSIMなど)を用いて特定され得る。サイズは、絶対サイズ、元のサイズの割合などとして表されてもよい。
【0158】
ツールは、たとえば視覚的な比較のために、ユーザインタフェイスにおいてエンコード済テクスチャに隣接して元のテクスチャを表示してもよい。エンコード済テクスチャ上にマウスポインタなどのカーソルを合わせることにより、たとえば、用いられるエンコーダ、RDOが適用されたか否か、品質、サイズ、複数のエンコードが特定された場合の品質および/またはサイズのランキングなどの要約の詳細が与えられ得る。各々のブロックごとにテクスチャエンコーダが選ぶエンコード構成の他の詳細(たとえば、区分インデックス、重み値、色終点など)も表示され得る。この種の情報の提供は、エンコード構成の比較、検討、および分析に有用である。
【0159】
開発者は、展開のために特定のエンコードを選択することができる、または(たとえば、最良の相反関係もしくは他のプログラミグされたルールの組に基づいて)特定のエンコードが自動的に選択され得る。次に、圧縮済テクスチャをパッケージ化して展開してもよい。
【0160】
ランタイムは復号を指す。デコーダは、(適用可能な場合は)可逆復元を適用する。次に、ある例示的な実施形態では、非可逆エンコード済テクスチャがGPUに与えられる。GPUは次に、たとえば仮想環境を提示する際に非可逆復号およびレンダリングを扱う。
【0161】
エンコーダおよびデコーダ関連技法の概要
開示された技術の多数の特徴および局面を以上で述べる。以下の説明は、あるエンコーダおよびデコーダ関連技法の概要を提供する。以下は、ある例示的な実施形態のいくつかの特徴を単に強調するものであり、したがって、すべての実施形態を限定するものと解釈されるべきではなく、請求される発明の範囲は請求項に明示的に述べられる。
【0162】
まずエンコーダを参照して、図13は、ある例示的な実施形態に従ってエンコード済テクスチャを生成するプロセスを示すフローチャートであり、図14は、ある例示的な実施形態に従う、図13の例示的なフローチャートに関連して用い得るコンピューティングアーキテクチャを示すブロック図である。
【0163】
図13は、たとえば、ステージ1(マルチ構成テクスチャエンコード)、ステージ2(チャンク抽出)、およびステージ3(マッチチェーン作成)を含む、上記で詳細に論じた概念的な3ステージ分解を示す。図13は、工程1302で始まり、テクスチャは、エンコードコンピューティングシステム1404を介して生テクスチャリポジトリ1402から読み出される。生テクスチャリポジトリ1402は、異なる例示的な実施形態では、エンコードコンピューティングシステム1404にローカルであるか、またはそこから遠隔であってもよい。後者の場合、生のテクスチャ(エンコード対象のテクスチャ)は、インターネットなどの適切なネットワーク接続上でAPI呼び出しなどを介して読み出され得る。コンピューティングシステム1404は、スタンドアロン、クライアントサーバネットワーク、分散コンピューティング(たとえば、クラウドコンピューティング)、または他の技術環境における1つ以上のコンピュータを含んでもよい。ある例示的な実施形態では、ネットワークコンピューティング環境および分散コンピューティング環境が有利であり得る。なぜなら、以上で論じたように、エンコード動作を並列化し得るからである。エンコードコンピューティングシステム1404は、メモリ1408に動作可能に結合される少なくとも1つのプロセッサ1406と、ハードウェアユーザインターフェイス要素1410とを含む。メモリ1408は、作業エリア(たとえば、作業RAM1412)およびエンコードアプリケーション1414を含む。ユーザは、ハードウェアユーザインタフェイス要素1410(たとえば、キーボード、マウス、タッチ画面など)を用いて、エンコードアプリケーション1414とインターフェイスしてエンコードアプリケーション1414と協働して、たとえば、どのテクスチャを圧縮するかを示し、(たとえば、非可逆ライブラリ1416および可逆ライブラリ1418から入手可能なものに基づき)用いるべき非可逆および/または可逆エンコードを示し、ハイパーパラメータを特定し、エンコード動作の出力を監視するなどを行なう。
【0164】
エンコード対象の生のテクスチャが一旦読み出されると、エンコードアプリケーション1414は、工程1304で、テクスチャを(たとえば、所定の画素サイズの)複数のブロックに分割する。工程1306で、これらのブロックの各々は、複数のブロックビットストリームにエンコードされる。そうする際に、これらのブロックビットストリームの各々は、(部分的に非可逆エンコードに基づいて)エンコード構成に従ってエンコードされ、各々のブロックビットストリーム/エンコード構成は、関連付けられた歪み値を有することになる。工程1308で、予め定められた数までの別個のブロックビットストリームが選択されるように、関連の歪み値が最も低いブロックビットストリームがそれぞれのブロックの各々ごとに選択される。なお、図14に表される動作で用いられるブロック、バッファ、および/または他のデータ構造は、ある例示的な実施形態では、メモリ1408の中(たとえば、作業RAM1412の中)に記憶されてもよい。
【0165】
ある例示的な実施形態では、(たとえば、ユーザが特定する予め定められた数までの)できるだけ多くの別個のブロックビットストリームが選択され、選択されたブロックビットストリームの数が予め定められた数未満である各々のブロックごとにインジケータを設けてもよい。これに加えてまたはこれに代えて、ある例示的な実施形態は、複数のブロック中の1つ以上の特定されたブロックの最大歪み値を特定することができるように、入力が受けられることを許容し得る。そのような場合、これらの特定されたブロックの各々ごとに、最大歪み値よりも良好な歪み値を有するブロックビットストリームのみがそれぞれの特定されたブロックに対して選択可能である。
【0166】
工程1310で、データチャンクが取得される。これは、少なくともいくつかのデータチャンクを抽出することに係る。ある例示的な実施形態では、いくつかのデータチャンクのみがブロックから直接に抽出される。そのような場合、他のチャンクは、ブロックから直接に(または少なくともより直接に)抽出されるチャンクから生成されてもよい。このように、ある例示的な実施形態では、データチャンクを取得することは、所与の選択されたブロックビットストリームのための有効なデータチャンクのサブセットを抽出することと、抽出されたサブセットから(たとえば、マスキングを介して)所与の選択されたブロックビットストリームのための残りのデータチャンクを生成することとを備えてもよい。
【0167】
いずれにせよ、歪みが小さいために選択された各々のブロックビットストリームごとに、各々のデータチャンクがその取得元であるそれぞれの選択されたブロックビットストリームの連続区域であるように、複数のデータチャンクが取得される。それぞれの選択されたブロックビットストリームのデータチャンクは、それぞれの選択されたブロックビットストリームの各々の位置(たとえば、各々のバイト)から始まって、それぞれのデータチャンクが最小データチャンクサイズを有するようにそれぞれの選択されたブロックビットストリームの終端まで及ぶ。ある例示的な実施形態では、選択されたビットストリームについて、異なるサイズのデータチャンクを取得可能である。ある例示的な実施形態では、最小データチャンクサイズは、少なくとも、最終的に用いられる可逆圧縮器が使用可能な最小サイズと同じであってもよい。
【0168】
工程1312で、(たとえば、効率的なソート手法を用いて、ならびに非拡張、非衝突、および/または重複衝突データチャンクをより高い歪みブロックビットストリームから排除することによって)取得されたデータチャンク同士の間の衝突が検出される。工程1314で、検出された衝突に基づいて、冗長データチャンクを有するマッチチェーンが、各々のマッチチェーンごとに、その中の冗長データチャンクが関連のブロックビットストリームの共通の切り捨て値を表すように形成される。
【0169】
マッチチェーン作成プロセスの際、マッチチェーン候補(潜在的マッチチェーン)の多くは、フィルタ除去される、破棄される、またはそうでなければ考慮されない。というのも、これらの破棄されるマッチチェーンの各々ごとに、少なくとも別の等しいまたはより良好なマッチチェーンが常に存在することが検出されたために、後続の反復選択手順ではそれらを選択可能でないことが予め分かっているためである。換言すると、所与のマッチチェーンは、当該所与のマッチチェーンに等しいかまたは前記所与のマッチチェーンより良好な別のマッチチェーンが形成されるかまたは形成されることになるという判断に応答して、考慮されない。この文脈での「より良好な」とは、ハイパーパラメータに係るコスト関数を介して得られるよりよいコストを有するものとして理解されるべきである。
【0170】
残っている形成されたマッチチェーンのうち最良の値を有するマッチチェーンが反復選択される。ある例示的な実施形態では、「最良の値」は、ハイパーパラメータに関連する関数、たとえば、レートと歪みとのうち片方を得るために他方を犠牲にするハイパーパラメータに関連して決定されてもよい。すなわち、ある例示的な実施形態では、ハイパーパラメータは、レートと歪みとのうち片方を得るために他方を犠牲にし、どのマッチチェーンが最良であるかを決定する定義された関数の一部である。
【0171】
工程1316で、反復選択されたマッチチェーンを用いてテクスチャの非可逆エンコードが得られ、工程1318で、可逆圧縮器を用いてエンコード済非可逆テクスチャがさらにエンコードされる。「最終的な」エンコード済テクスチャは、エンコード済テクスチャリポジトリ1420に送られ、これは、異なる例示的な実施形態では、再び、エンコードコンピューティングシステム1404と同じ場所に置かれるか、またはそこから遠隔であってもよい。これらのテクスチャは、たとえば、ビデオゲームなどの仮想環境を定義する際に用いられてもよい。
【0172】
図13に関連して記載した動作のいくつかまたはすべては、たとえば、ハードウェアユーザインターフェイス要素1410を介して取得されたユーザ入力に基づいて、エンコードアプリケーション1414を用いて行なわれ得ることが認められる。エンコードアプリケーション1414は、一連のプログラムモジュールまたは他の構造においてプロセッサ1406によって実行可能な命令として実現されてもよい。
【0173】
図15は、ある例示的な実施形態に従う、本明細書中に記載の技法を介してエンコードされたテクスチャを復号するためのプロセスを示すフローチャートである。図15に示すように、工程1502で、エンコード済テクスチャが読み出される。エンコード済テクスチャは、(たとえば、家庭、美術館などの)仮想ツアーの一部として、および/または他のシナリオで、図16に示されかつそれに関連して記載されるものなどのコンピューティングデバイス上にレンダリングされている仮想環境の一部(または仮想環境の部分)として読み出されてもよい。テクスチャは、アプリケーションに含まれたり、ローカルまたは遠隔のデータ記憶部から読み出されたりなどしてもよい。テクスチャが一旦読み出されると、工程1504でそれは可逆復号器に与えられ、その出力は非可逆テクスチャデコーダ1506に与えられる。これらのデコーダは、ソフトウェアにおいて、および/またはCPU、GPUなどのプロセッサによって提供される特徴に関連して実現され得る。ある例示的な実施形態では、読み出されたテクスチャは単にGPUに渡されて復号およびレンダリングされてもよい。いずれにせよ、工程1508で、復号されたテクスチャに基づいて仮想環境が生成される。出力は、コンピューティングデバイスに動作可能に接続される表示装置(たとえば、LCD、LED、OLED、または他の表示装置)に与えられてもよい。
【0174】
図16は、ある例示的な実施形態に従う、図15の例示的なフローチャートに関連して用い得るコンピューティングデバイス1602を示すブロック図である。このコンピューティングデバイス1602は、携帯型ゲーム装置、据え置き型ゲーム装置などのゲーム装置であり得る。これに代えて、コンピューティングデバイス1602は、テレビ、パーソナルコンピュータ、ラップトップ、モバイル電子デバイス、または他の種類の電子デバイスであってもよい。当業者によって認められるように、図16に示されるブロックのうちのいくつかまたは全ては、たとえば、提供される電子デバイスの種類に応じて、異なる実現例において提供または省略されてもよい。
【0175】
図16に示すように、コンピューティングデバイス1602は、メモリ1606に動作可能に接続される1つ以上のプロセッサ1604を含む。1つ以上のプロセッサ1604は、共通のデバイスの中、いくつかのデバイスにわたって(たとえば、ネットワーク環境中)、などに位置するCPU、GPU、および/または他のプロセッサを含み得る。メモリは、たとえば、SSD、HDD、フラッシュメモリ、RAM、DRAMなどの媒体を含み得る。
【0176】
デバイス1602は、電力制御回路1610に接続される電源ボタン1608を用いてオンにすることができる。電力制御回路1610は、次に、バッテリ1612(たとえば、充電式バッテリ)に接続される。デバイス1602には、ピン1614で電力供給することができ、充電可能であるときにピン1614を付加的に用いてバッテリ1612を充電することができる。
【0177】
ユーザは、それに結合されたコントローラを介してコンピューティングデバイス1602と対話することができる。コントローラは、ある例示的な実施形態では、デバイスと一体であってもよい。ある例示的な実施形態では、別々のコントローラが、コントローラ端子1616および/または(たとえば、Bluetooth(登録商標)などの無線プロトコル上で動作する)無線コントローラインターフェイス1618を介してコンピューティングデバイスに接続可能であり得る。ある例示的な実施形態では、コントローラは、ボタン、十字スイッチ、ジョイスティック、スライドパッドなどのようなゲームシステム型の制御装置を含んでもよい。ある例示的な実施形態では、コントローラは、キーボード、マウス、トラックボールなどを含んでもよい。ある例示的な実施形態では、ユーザは、タッチパネルコントローラ1622に関連してデバイス1602とインターフェイスするタッチパネル1620を介してデバイス1602と対話してもよい。ビデオ出力は、デバイス1602と一体であるか、またはそうでない場合はそれに接続可能なディスプレイ1624に与えられる。音声は、一体型スピーカ1624を介して、および/またはオーディオジャックまたは他の端子1626を通して与えられる。オーディオジャックまたは他の端子1626は、コーデック回路1628を介してプロセッサ1604に接続する。
【0178】
スロット1630は、たとえば、SDカード、マイクロSDカード、CD-ROM、DVD-ROMなどの物理的媒体を受ける。スロットインターフェイス1632は、スロット1630とプロセッサ1604との間の接続を提供する。ある例示的な実施形態では、スロット1630に挿入される媒体は、表示すべき圧縮済テクスチャを含むか、またはそうでない場合はそれにアクセスするプログラムを含み得る。ある例示的な実施形態では、表示すべき圧縮済テクスチャを含むかまたはそうでない場合はそれにアクセスするプログラムは、たとえばダウンロードされるゲーム、クラウドゲームシナリオなどに関連して、ネットワークインターフェイス1634を介して読み出されてもよい。
【0179】
1つの例示的なゲームシステムが示されるが、本明細書中に開示される技法は、他のゲームシステム、および実際には専用ゲームシステムではない(たとえば、PC、TV、スマートフォンなどのモバイルデバイスなどの)他の電子デバイスに関連して用いられてもよいことが認められる。
【0180】
本発明は、最も実用的かつ好ましい実施形態と現在考えられるものに関連して説明されたが、本発明は、開示される実施形態に限定されるものではなく、逆に、添付の請求項の精神および範囲内に含まれるさまざまな修正例および均等な構成を包含することが意図されることを理解されたい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
【外国語明細書】