アカウント名:
パスワード:
PC/AT互換機でグラフィックアクセラレーターブームが起きてET4000(はアクセラレータじゃないか)とかS3とかわいわいやっていた頃からの生き残り。しかもPCではライバル他社と比べてパッとしない性能で、不人気ですぐに消えるかと思いきや、メモリが厳しい組み込み向けに舵を切って成功し、他のグラフィックチップメーカーがばったばったと倒れていった中、しぶとく今まで生き残ってきた。
でも一番の大口顧客を失いそうで、今度こそ危ないか?
初代PowerVRを使い込んだことがありますが、コンセプトは良いものの、商業的には失敗して当然な流れでしたね…
PowerVRとほぼ同時期に、DirectX3で「Direct3D というメーカーに依存しない汎用API」という新たな潮流が出てきましたけど、Direct3D自体、Zバッファレンダリングに依存したAPIの作りになっていて、他のレンダリング方式があまり想定されてないんですよね。
PowerVRは「タイルベースレンダリング」という独自の手法で省メモリ化を実現したわけですが、そのせいでDirect3Dとものすごく相性が悪い。一応 Direct3D 対応ドライバもありましたが、あまり性能が出ませんでした。チップ性能を引き出すには独自APIの利用が必須
Triangle stripのほうが頂点データのサイズが小さくなるから効率いいのは今も昔も変わらないよ。大抵のGPUでそう。「1ポリゴン=1ストリップ」にすると遅くなるのも縮退三角形分無駄になってTriangle listよりサイズ大きくなるので当然
「凸な」トライアングルストリップ、というのがポイントなんですよ。
アルゴリズムが非公開なので使ってみての推測になりますが、「ストリップ」単位でプライオリティ法?的な描画をしているみたいです。普通のZバッファなら凹なストリップでも問題ありませんが、PowerVRでは凹なストリップを描画させると描画が崩れます。
普通のGPUでトライアングルストリップやトライアングルファンを使うのは、(頂点インデックスを使う上では)単にデータ量削減の効果ぐらいしかありません。一方、PowerVRはそんな生やしいものではなく、描画時間があまり「頂点数」には依存せず、「ストリップ数」に比例する感じになります。それこそ、「頂点数が増えてもいいからストリップ数を減らす」方が有効。しかしながら、「凸な」という条件があるので、無関係なポリゴンを縮退三角形でつないでストリップにすることもできません。
とにかくまあ、普通の(≒Zバッファベースの)GPUとは明らかに毛色が異なる代物でした。
>PowerVRでは凹なストリップを描画させると描画が崩れます。モバイルGPUになってからのPowerVR(今もTBDR)しか触ったことないけど、それは単にその時のPowerVRの実装が腐ってたか貴方の実装がバグってただけじゃない?
>「頂点数が増えてもいいからストリップ数を減らす」方が有効。これはちょっと意味が解らない。ストリップ数を減らすって何を指してるの?ドローコールの話ならPowerVRに限らず常識だよ。そうでないなら頂点増やして減らせる物が何であるか解らない。で、ストリップ数というのがドローコールの事を言っていたのであれば、1ポリゴン=1ドローコールとか遅くて当たり前。
> その時のPowerVRの実装が腐ってたか貴方の実装がバグってただけじゃない?
実装が腐ってたのではなく、当時はそういう制限をかけることで、「省メモリで高速なレンダリング」を実現していたんです。「凸な」というのは、SDKに明示的に指定されていました。
> ストリップ数というのがドローコールの事を言って
いいえ。PowerVR の独自API(SGL)では、一回のドローコールで複数のトライアングルストリップを渡すことができます。(ていうか、指定できるのはトライアングルストリップリストだけで、トライアングルファンやトライアングルリストを渡して描画するAPIはありません。)まあ、普通のGPUでトライアングルリストを渡すのと同じような使い方ですね。
そして、頂点数(一回のドローコールのデータ量)が同じでも、その中のストリップ数が少ない方が速かったんです。
いったいどうしたら知らないものに対してここまで偉そうに知ったかぶれるんだろう。
> 普通のZバッファなら凹なストリップでも問題ありませんが、PowerVRでは凹なストリップを描画させると描画が崩れます
掛かってるタイルの判定に失敗するからだしょ。
ポリゴン表面の向きを利用した隠面処理をやってるんですかね単純計算で半分位のポリゴンは描画を省略できるので早くなるでしょう
> ポリゴン表面の向きを利用した隠面処理をやってるんですかね
表向きのポリゴンだけを描く「裏面除去」は、「閉じた形状」を描画する際に有効ですが、それだけだと「凸な」という制限をする必要はありません。凹でも閉じた形状なら、裏面除去は「描画データ量の削減」という点では有効です。
「凸な形状」の特徴は「表側のポリゴン(裏面除去後の描画対象ポリゴン)同士が重なることがない」ことにあります。「ある一つの凸な形状」の描画だけを見れば、単純に「表向きの全ポリゴンを描画すればいい」ということになり、隠面消去する必要はないのです。
凹な形状だと、例えば
I H視線 A/\/\G → B| |F C\__/E D
という形状の角柱(の断面図。A~Iはそれぞれがポリゴン)を描画するときに、表側のポリゴンだけ抽出すると
視線 A/ H/ → B| C\
という4ポリゴンを描画することになり、「AとHではAが手前」という判定が必要になりますが、凸な形状だと、例えば
H視線 A/ ̄ ̄\G → B| |F C\__/E D
という形状を描画するときに、表側のポリゴンだけ抽出すると
視線 A/ → B| C\
という3ポリゴンを描画することになり、重なりが無いので前後判定は不要です。
凸な形状にはそういう特徴があるため、「凸な形状(ポリゴン群)」内のポリゴン間での前後判定は不要で、複数の「凸な形状」を描画する描画処理全体では、「凸な形状」間の前後判定だけで隠面消去ができるようになります。実際には「凸な形状」同士の交差を考えると一筋縄ではいかないのですが、うまくはまれば大幅に前後判定の比較処理を減らすことができます。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日本発のオープンソースソフトウェアは42件 -- ある官僚
PowerVR息が長いよなぁ (スコア:1)
PC/AT互換機でグラフィックアクセラレーターブームが起きてET4000(はアクセラレータじゃないか)とかS3とか
わいわいやっていた頃からの生き残り。
しかもPCではライバル他社と比べてパッとしない性能で、不人気ですぐに消えるかと思いきや、
メモリが厳しい組み込み向けに舵を切って成功し、他のグラフィックチップメーカーがばったばったと倒れていった中、
しぶとく今まで生き残ってきた。
でも一番の大口顧客を失いそうで、今度こそ危ないか?
Re: (スコア:5, 参考になる)
初代PowerVRを使い込んだことがありますが、コンセプトは良いものの、商業的には失敗して当然な流れでしたね…
PowerVRとほぼ同時期に、DirectX3で「Direct3D というメーカーに依存しない汎用API」という新たな潮流が出てきましたけど、Direct3D自体、Zバッファレンダリングに依存したAPIの作りになっていて、他のレンダリング方式があまり想定されてないんですよね。
PowerVRは「タイルベースレンダリング」という独自の手法で省メモリ化を実現したわけですが、そのせいでDirect3Dとものすごく相性が悪い。一応 Direct3D 対応ドライバもありましたが、あまり性能が出ませんでした。チップ性能を引き出すには独自APIの利用が必須
Re: (スコア:1)
Triangle stripのほうが頂点データのサイズが小さくなるから効率いいのは今も昔も変わらないよ。大抵のGPUでそう。
「1ポリゴン=1ストリップ」にすると遅くなるのも縮退三角形分無駄になってTriangle listよりサイズ大きくなるので当然
Re:PowerVR息が長いよなぁ (スコア:1)
「凸な」トライアングルストリップ、というのがポイントなんですよ。
アルゴリズムが非公開なので使ってみての推測になりますが、
「ストリップ」単位でプライオリティ法?的な描画をしているみたいです。
普通のZバッファなら凹なストリップでも問題ありませんが、PowerVRでは凹なストリップを描画させると描画が崩れます。
普通のGPUでトライアングルストリップやトライアングルファンを使うのは、(頂点インデックスを使う上では)単にデータ量削減の効果ぐらいしかありません。
一方、PowerVRはそんな生やしいものではなく、描画時間があまり「頂点数」には依存せず、「ストリップ数」に比例する感じになります。
それこそ、「頂点数が増えてもいいからストリップ数を減らす」方が有効。しかしながら、「凸な」という条件があるので、無関係なポリゴンを縮退三角形でつないでストリップにすることもできません。
とにかくまあ、普通の(≒Zバッファベースの)GPUとは明らかに毛色が異なる代物でした。
Re: (スコア:0)
>PowerVRでは凹なストリップを描画させると描画が崩れます。
モバイルGPUになってからのPowerVR(今もTBDR)しか触ったことないけど、それは単にその時のPowerVRの実装が腐ってたか貴方の実装がバグってただけじゃない?
>「頂点数が増えてもいいからストリップ数を減らす」方が有効。
これはちょっと意味が解らない。ストリップ数を減らすって何を指してるの?ドローコールの話ならPowerVRに限らず常識だよ。そうでないなら頂点増やして減らせる物が何であるか解らない。
で、ストリップ数というのがドローコールの事を言っていたのであれば、1ポリゴン=1ドローコールとか遅くて当たり前。
Re:PowerVR息が長いよなぁ (スコア:1)
> その時のPowerVRの実装が腐ってたか貴方の実装がバグってただけじゃない?
実装が腐ってたのではなく、当時はそういう制限をかけることで、「省メモリで高速なレンダリング」を実現していたんです。「凸な」というのは、SDKに明示的に指定されていました。
> ストリップ数というのがドローコールの事を言って
いいえ。PowerVR の独自API(SGL)では、一回のドローコールで複数のトライアングルストリップを渡すことができます。
(ていうか、指定できるのはトライアングルストリップリストだけで、トライアングルファンやトライアングルリストを渡して描画するAPIはありません。)
まあ、普通のGPUでトライアングルリストを渡すのと同じような使い方ですね。
そして、頂点数(一回のドローコールのデータ量)が同じでも、その中のストリップ数が少ない方が速かったんです。
Re: (スコア:0)
いったいどうしたら知らないものに対してここまで偉そうに知ったかぶれるんだろう。
Re: (スコア:0)
> 普通のZバッファなら凹なストリップでも問題ありませんが、PowerVRでは凹なストリップを描画させると描画が崩れます
掛かってるタイルの判定に失敗するからだしょ。
Re: (スコア:0)
ポリゴン表面の向きを利用した隠面処理をやってるんですかね
単純計算で半分位のポリゴンは描画を省略できるので早くなるでしょう
Re:PowerVR息が長いよなぁ (スコア:2)
> ポリゴン表面の向きを利用した隠面処理をやってるんですかね
表向きのポリゴンだけを描く「裏面除去」は、「閉じた形状」を描画する際に有効ですが、それだけだと「凸な」という制限をする必要はありません。凹でも閉じた形状なら、裏面除去は「描画データ量の削減」という点では有効です。
「凸な形状」の特徴は「表側のポリゴン(裏面除去後の描画対象ポリゴン)同士が重なることがない」ことにあります。
「ある一つの凸な形状」の描画だけを見れば、単純に「表向きの全ポリゴンを描画すればいい」ということになり、隠面消去する必要はないのです。
凹な形状だと、例えば
という形状の角柱(の断面図。A~Iはそれぞれがポリゴン)を描画するときに、表側のポリゴンだけ抽出すると
という4ポリゴンを描画することになり、「AとHではAが手前」という判定が必要になりますが、
凸な形状だと、例えば
という形状を描画するときに、表側のポリゴンだけ抽出すると
という3ポリゴンを描画することになり、重なりが無いので前後判定は不要です。
凸な形状にはそういう特徴があるため、「凸な形状(ポリゴン群)」内のポリゴン間での前後判定は不要で、複数の「凸な形状」を描画する描画処理全体では、「凸な形状」間の前後判定だけで隠面消去ができるようになります。
実際には「凸な形状」同士の交差を考えると一筋縄ではいかないのですが、うまくはまれば大幅に前後判定の比較処理を減らすことができます。