opengl:optimize
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン | 最新のリビジョン両方とも次のリビジョン | ||
opengl:optimize [2014/04/18 21:28] – [Vertex Cache と Primitive Type] oga | opengl:optimize [2014/04/20 04:29] – [Alpha Test (discard) の是非] oga | ||
---|---|---|---|
行 182: | 行 182: | ||
Face の Pixel に穴が開くとプリミティブ単位の代表 Z 値を使うことができなくなります。 | Face の Pixel に穴が開くとプリミティブ単位の代表 Z 値を使うことができなくなります。 | ||
- | 特に PowerVR などの Deferred Rendering (TBDR) と相性が悪く、ハードウエアの利点をスポイルしてしまうことになります。 | + | さらに PowerVR などの Deferred Rendering (TBDR) との相性も悪くなります。 |
- | PowerVR は先に Depth Buffer を生成して隠面除去を行ってから、表面の必要なピクセルに対してのみ Pixel Shader (Fragment Shader) を走らせます。 | + | PowerVR は先に Depth Buffer を生成しておき、表面の必要なピクセルに対してのみ Pixel Shader (Fragment Shader) を走らせます。 |
- | ちょうど Desktop GPU で用いられる Deferred Lighting を、ハードウエアが自動的に行ってくれるわけです。 | + | ポリゴンが重なってもシェーダー負荷が一定以上上がらないので、効率よい描画ができることが特徴です。 |
- | もし Shader に discard 命令が含まれており、途中で pixel を捨てる可能性があるならば Pixel Shader を実行してみないと | + | ちょうど Desktop GPU で用いられる Deferred Lighting を、ハードウエアが自動的に行ってくれていることになります。 |
+ | ところが、もし Shader に discard 命令が含まれているなら、Shader を実行してみないと正しい | ||
+ | よってポリゴンの重なりを効率良く取り除くことができなくなります。 | ||
- | ところが古い GPU アーキテクチャでは、discard (texkill) によって早いタイミングで Pixel Shader を終了させることにより、 | + | このようにあまり好まれない discard ですが、古い GPU アーキテクチャにおいては必ずしも悪い面だけとは限りません。 |
- | 無駄な Texture Fetch や演算を省くことが可能です。 | + | discard (texkill) によって早いタイミングで Pixel Shader を終了させることにより、 |
- | Tegra 2/3/4 の ULP GeForce は G70 世代の古い GPU core なので、使用した方がシェーダーの実行効率を上げることができると言われています。 | + | 後続のシェーダーの演算や無駄な Texture Fetch を省くことが可能になります。 |
- | 例えば半透明描画時に Alpha 値が 0 ならば、カラーを出力しないで discard (texkill) してピクセルを捨てることができます。 | + | Tegra 2/3/4 の ULP GeForce は G70 世代の古い GPU core なので、適切に discard (texkill) を使用した方がシェーダーの実行効率を上げることができると言われています。 |
+ | 例えば半透明描画時にテクスチャの | ||
+ | カラーを出力しないで、テクスチャを読んだ直後に | ||
ただし他の GPU との互換性や今後のことを考えると、使わない方が良いと思われます。 | ただし他の GPU との互換性や今後のことを考えると、使わない方が良いと思われます。 | ||
- | |||
opengl/optimize.txt · 最終更新: 2014/04/20 04:32 by oga