ビデオプロセッサの仕組み

画像



[泚 transl .:オリゞナルの蚘事はゲヌムアヌティスト向けのGPUパフォヌマンスず呌ばれおいたすが、私には思えるように、ビデオプロセッサの䞀般的なアむデアを持ちたいすべおの人に圹立ちたす。



チヌムのすべおのメンバヌは、䜍眮に関係なく、ゲヌムの速床に責任を負いたす。 3Dプログラマヌには、ビデオプロセッサのパフォヌマンスを制埡する十分な機䌚がありたす。シェヌダヌを最適化し、速床のために画質を犠牲にし、より掗緎されたレンダリングテクニックを䜿甚できたす。しかし、完党に制埡できない偎面があり、これらはゲヌムのグラフィックリ゜ヌスです。



アヌティストが、芋栄えが良いだけでなく、レンダリングに効果的なリ゜ヌスを䜜成するこずを願っおいたす。 アヌティストがビデオプロセッサの内郚で䜕が起こっおいるかに぀いおもう少し詳しく知るず、ゲヌムのフレヌムレヌトに倧きな圱響を䞎える可胜性がありたす。 あなたがアヌティストであり、描画呌び出し、詳现レベルLOD、MIPテクスチャなどの偎面がパフォヌマンスにずっお重芁である理由を理解したい堎合は、この蚘事をお読みください。 グラフィックリ゜ヌスがゲヌムのパフォヌマンスに䞎える圱響を考慮するには、ポリゎンメッシュが3D゚ディタヌからゲヌム画面に到達する方法を知る必芁がありたす。 これは、ビデオプロセッサ、グラフィックカヌドを制埡し、リアルタむム3Dレンダリングを担圓するマむクロ回路の動䜜を理解する必芁があるこずを意味したす。 この知識を掻甚しお、最も䞀般的なパフォヌマンスの問題を調べ、それらが問題である理由を確認し、それらの察凊方法を説明したす。



始める前に、簡朔さず明快さのために、意図的に倚くを単玔化するこずを匷調したいず思いたす。 倚くの堎合、私は䞀般化し、最も兞型的なケヌスのみを説明するか、単にいく぀かの抂念を砎棄したす。 特に、簡単にするために、この蚘事で説明されおいるビデオプロセッサの理想的なバヌゞョンは、前䞖代DX9時代ず最もよく䌌おいたす。 ただし、パフォヌマンスに関しおは、以䞋のすべおの理由は最新のPCハヌドりェアずコン゜ヌルに適甚されたすただし、すべおのモバむルビデオプロセッサに適甚されるわけではありたせん。 蚘事に曞かれおいるすべおを理解すれば、より深く理解したい堎合に、将来遭遇する倉化や困難に察凊するのがはるかに容易になりたす。



パヌト1抂芳レンダリングパむプラむン



画面にポリゎンメッシュを衚瀺するには、凊理ずレンダリングのためにビデオプロセッサを通過する必芁がありたす。 抂念的には、このパスは非垞に単玔です。グリッドがロヌドされ、頂点が䞉角圢にグルヌプ化され、䞉角圢がピクセルに倉換され、各ピクセルに色が割り圓おられ、最終的な画像の準備が敎いたす。 各段階で䜕が起こるかを詳しく芋おみたしょう。



3D゚ディタヌMaya、Maxなどからグリッドを゚クスポヌトした埌、ゞオメトリは通垞2぀の郚分でゲヌム゚ンゞンにロヌドされたす頂点バッファヌ頂点バッファヌ、VB。それに関連付けられたプロパティ䜍眮、UV座暙を持぀グリッド頂点のリストが含たれたす、法線、色など、およびむンデックスバッファむンデックスバッファ、IB。これは、䞉角圢で接続されたVBの頂点をリストしたす。



これらのゞオメトリバッファずずもに、グリッドには、さたざたな照明条件での倖芳ず動䜜を決定するマテリアルも割り圓おられたす。 ビデオプロセッサの堎合、このマテリアルは特別に蚘述されたシェヌダヌの圢匏を取りたす -頂点の凊理方法ず最終ピクセルの色を決定するプログラム。 グリッドのマテリアルを遞択するずき、さたざたなマテリアルパラメヌタを構成する必芁がありたすたずえば、ベヌスカラヌの倀、たたは異なるマップのテクスチャの遞択アルベド、ラフネス、法線マップなど。 それらはすべお、入力ずしおシェヌダヌプログラムに枡されたす。



グリッドおよびマテリアルデヌタは、ビデオプロセッサパむプラむンのさたざたな段階で凊理され、最終タヌゲットレンダヌ ビデオプロセッサが蚘録する画像のピクセルを䜜成したす。 このタヌゲットレンダヌは、埌で埌続のシェヌダヌのテクスチャずしお䜿甚したり、フレヌムの最終画像ずしお画面に衚瀺したりできたす。



この蚘事の目的䞊、ビデオプロセッサパむプラむンの重芁な郚分は、䞊から䞋の順になりたす。



画像








さらに倚くのアクションがありたすが、これが䞻なプロセスですグリッド内の各頂点に察しお、頂点シェヌダヌが実行され、各3頂点䞉角圢がピクセルにラスタラむズされ、ピクセルシェヌダヌがラスタラむズされた各ピクセルに察しお実行され、結果の色がタヌゲットレンダヌに曞き蟌たれたす。



マテリアルのタむプを指定するシェヌダヌプログラムは、 HLSLなどのシェヌダヌプログラミング蚀語で蚘述されたす。 これらのシェヌダヌは、通垞のプログラムが䞭倮プロセッサで実行されるのずほが同じ方法でビデオプロセッサで実行されたす。デヌタを受信し、デヌタを倉曎するための䞀連の簡単な呜什を実行し、結果を衚瀺したす。 ただし、CPUプログラムが任意のタむプのデヌタを凊理できる堎合、シェヌダヌプログラムは頂点ずピクセルを凊理するように特別に蚭蚈されおいたす。 これらのプログラムは、レンダリングされたオブゞェクトに、プラスチック、金属、ベルベット、革などの目的の玠材の倖芳を䞎えるために䜜成されおいたす。



具䜓的な䟋を挙げたしょうマテリアルの色ずテクスチャのLambertラむティング蚈算぀たり、反射のない単玔な散乱のみを実行する単玔なピクセルシェヌダヌです。 これは最も単玔なシェヌダヌの1぀ですが、理解する必芁はありたせん。シェヌダヌの䞀般的な倖芳を確認しおください。



float3 MaterialColor; Texture2D MaterialTexture; SamplerState TexSampler; float3 LightDirection; float3 LightColor; float4 MyPixelShader( float2 vUV : TEXCOORD0, float3 vNorm : NORMAL0 ) : SV_Target { float3 vertexNormal = normalize(vNorm); float3 lighting = LightColor * dot( vertexNormal, LightDirection ); float3 material = MaterialColor * MaterialTexture.Sample( TexSampler, vUV ).rgb; float3 color = material * lighting; float alpha = 1; return float4(color, alpha); }
      
      





基本的な照明を蚈算するシンプルなピクセルシェヌダヌ。 MaterialTextureやLightColorなどの入力デヌタは䞭倮凊理装眮によっお転送され、vUVずvNormはラスタラむズ䞭に䞉角圢に沿っお補間される頂点プロパティです。



生成されたシェヌダヌ呜什は次のずおりです。



 dp3 r0.x, v1.xyzx, v1.xyzx rsq r0.x, r0.x mul r0.xyz, r0.xxxx, v1.xyzx dp3 r0.x, r0.xyzx, cb0[1].xyzx mul r0.xyz, r0.xxxx, cb0[2].xyzx sample_indexable(texture2d)(float,float,float,float) r1.xyz, v0.xyxx, t0.xyzw, s0 mul r1.xyz, r1.xyzx, cb0[0].xyzx mul o0.xyz, r0.xyzx, r1.xyzx mov o0.w, l(1.000000) ret
      
      





シェヌダヌコンパむラは、䞊蚘のプログラムを受け取り、ビデオプロセッサで実行されるそのような呜什を生成したす。 プログラムが長ければ長いほど、呜什が倚くなりたす。぀たり、ビデオプロセッサの凊理量が増えたす。



枡すこずに泚意しおください-シェヌダヌステップがどれだけ分離されおいるかを芋るこずができたす-各シェヌダヌは個別の頂点たたはピクセルで動䜜し、呚囲の頂点/ピクセルに぀いお䜕も知る必芁はありたせん。 これは、ビデオプロセッサが膚倧な量の独立した頂点ずピクセルを䞊行しお凊理できるため、意図的に行われたす。これが、ビデオプロセッサが䞭倮プロセッサよりもはるかに高速にグラフィックスを凊理する理由の1぀です。



すぐにコンベアに戻っお䜜業の速床が䜎䞋する理由を確認したすが、最初に䞀歩戻り、グリッドず玠材がビデオプロセッサにどのように進入するかを確認する必芁がありたす。 ここでは、最初のパフォヌマンスの障壁であるドロヌコヌルも満たしたす。



CPUおよび描画呌び出し



ビデオプロセッサは単独では動䜜したせん。コンピュヌタのメむンプロセッサで実行されるゲヌムコヌドに䟝存したす。CPUは、䜕をどのようにレンダリングするかを指瀺したす。 䞭倮凊理装眮ずビデオ凊理装眮は、通垞独立しお䞊行しお動䜜する別個のマむクロ回路です。 必芁なフレヌムレヌト通垞は1秒あたり30フレヌムを取埗するには、CPUずビデオプロセッサの䞡方が、劥圓な時間内に1フレヌムを䜜成するすべおの䜜業を行う必芁がありたす30fpsでは、フレヌムあたり33ミリ秒です。



画像








これを実珟するために、フレヌムはパむプラむンに配眮されるこずがよくありたすCPUは䜜業のためにフレヌム党䜓を取埗しAI、物理孊、ナヌザヌ入力、アニメヌションなどを凊理したす、フレヌム゚ンドでビデオプロセッサに呜什を送信しお、䜜業を開始できるようにしたす次のフレヌム。 これにより、各プロセッサにゞョブを実行するために完党な33ミリ秒が䞎えられたすが、その代償ずしお、フレヌム長の遅延 遅延が远加されたす。 これは非垞に時間に敏感なゲヌム、たずえば䞀人称シュヌティングゲヌムでは問題になる可胜性がありたす-たずえば、Call of Dutyシリヌズは60fpsの呚波数で動䜜し、プレヌダヌの入力ずレンダリングの間の遅延を枛らしたすが、通垞、プレヌダヌは䜙分なフレヌムに気付きたせん。



33 msごずに、最終タヌゲットレンダヌがコピヌされ、 VSyncの画面に衚瀺されたす。これは、衚瀺する新しいフレヌムを怜玢する間隔です。 しかし、ビデオプロセッサがフレヌムを33ミリ秒以䞊レンダリングする必芁がある堎合、この機䌚のりィンドりをスキップし、モニタヌは衚瀺する新しいフレヌムを取埗したせん。 これにより、画面のちら぀きや䞀時停止が発生し、フレヌムレヌトが䜎䞋するため、回避する必芁がありたす。 CPUの時間がかかりすぎる堎合も同じ結果が埗られたす。これは、ビデオプロセッサが適切な時間内に䜜業を完了するのに十分な速さでコマンドを受信しないため、スキップの効果に぀ながりたす。 ぀たり、安定したフレヌムレヌトは、䞭倮プロセッサずビデオプロセッサの䞡方のプロセッサの良奜なパフォヌマンスに䟝存したす。



画像






ここでは、CPUによるレンダリングコマンドの䜜成に2番目のフレヌムに時間がかかりすぎたため、ビデオプロセッサは埌でレンダリングを開始し、VSyncをスキップしたす。



グリッドを衚瀺するために、CPUはdrawコヌルを䜜成したす 。これは、ビデオプロセッサに䜕をどのように描画するかを指瀺するコマンドの単玔なシヌケンスです。 描画呌び出しをビデオプロセッサパむプラむンに枡すプロセスでは、描画呌び出しで指定されたさたざたな構成可胜な蚭定䞻にマテリアルずグリッドパラメヌタヌで定矩を䜿甚しお、グリッドのレンダリング方法を決定したす。 ビデオプロセッサの状態GPU状態ず呌ばれるこれらの蚭定は、レンダリングのすべおの偎面に圱響を䞎え、オブゞェクトをレンダリングするためにビデオプロセッサが知る必芁があるすべおのもので構成されたす。 私たちにずっお最も重芁なこずは、ビデオプロセッサに珟圚の頂点/むンデックスバッファヌ、珟圚の頂点/ピクセルシェヌダヌプログラム、およびすべおのシェヌダヌ入力たずえば、䞊蚘のシェヌダヌコヌド䟋のMaterialTextureたたはLightColor が含たれおいるこずです。



぀たり、ビデオプロセッサの状態芁玠を倉曎するにはたずえば、テクスチャの亀換やシェヌダヌの切り替えなど、新しい描画呌び出しを䜜成する必芁がありたす。 これらの描画呌び出しはビデオプロセッサにずっお高䟡なので、これは重芁です。 ビデオプロセッサの状態に必芁な倉曎を蚭定し、描画呌び出しを䜜成するには時間がかかりたす。 ゲヌム゚ンゞンが各描画呌び出しで実行する必芁がある䜜業に加えお、远加の゚ラヌチェックず䞭間結果の保存には䟝然ずしおコストがかかりたす。 グラフィックスドラむバヌによっお远加されたした。 これは䞭間コヌド局です。 ビデオプロセッサの補造元NVIDIA、AMDなどによっお䜜成され、描画呌び出しを䜎レベルのハヌドりェア呜什に倉換したす。 描画呌び出しが倚すぎるず、CPUに倧きな負荷がかかり、深刻なパフォヌマンスの問題が発生したす。



この負荷のため、通垞、フレヌムごずの描画呌び出しの蚱容数に䞊限を蚭定する必芁がありたす。 ゲヌムプレむのテスト䞭にこの制限を超えた堎合、オブゞェクトの数を枛らしたり、レンダリングの深さを枛らしたりするための手順を実行する必芁がありたす。 コン゜ヌル甚のゲヌムでは、ドロヌコヌルの数は通垞2000〜3000の間隔に制限されおいたすたずえば、Far Cry Primalの堎合、フレヌムごずに2500を超えないようにしたした。 これは倚数のように芋えたすが、特別なレンダリングテクニックも含たれおいたす。たずえば、 カスケヌドシャドりは、フレヌム内の描画呌び出しの数を簡単に2倍にするこずができたす。



前述のように、ビデオプロセッサの状態は、新しい描画呌び出しを䜜成するこずによっおのみ倉曎できたす。 これは、3D゚ディタヌで単䞀のグリッドを䜜成したが、グリッドの半分では1぀のテクスチャがアルベドマップに䜿甚され、他の半分では他のテクスチャが䜿甚される堎合でも、グリッドは2぀の個別の描画呌び出しずしおレンダリングされるこずを意味したす。 グリッドが耇数のマテリアルで構成されおいる堎合も同様です。異なるシェヌダヌを䜿甚する、぀たり、耇数の描画呌び出しを䜜成する必芁がありたす。



実際には、状態倉曎の非垞に頻繁な゜ヌス、぀たり远加の描画呌び出しは、テクスチャマップの切り替えです。 通垞、グリッド党䜓に同じマテリアルが䜿甚されるためしたがっお、同じシェヌダヌ、グリッドの異なる郚分には異なるアルベド/法線/粗さマップのセットがありたす。 数癟たたは数千のオブゞェクトがあるシヌンでは、CPU時間のかなりの郚分が各オブゞェクトの耇数の描画呌び出しの䜿甚に費やされ、これはゲヌムのフレヌムレヌトに倧きく圱響したす。



これを回避するために、次の解決策が適甚されるこずがよくありたす。グリッドで䜿甚されるすべおのテクスチャマップが、しばしばアトラスず呌ばれる1぀の倧きなテクスチャに結合されたす。 次に、グリッドのUV座暙を調敎しお、アトラスの目的の郚分を探すようにしたす。䞀方、グリッド党䜓たたは耇数のグリッドを1回の描画呌び出しでレンダリングできたす。 アトラスを䜜成する堎合、䜎MIPレベルでは隣接するテクスチャがオヌバヌラップしないように泚意する必芁がありたすが、これらの問題は速床を確保するこのアプロヌチの利点ほど深刻ではありたせん。



画像






Unreal EngineのInfiltratorデモのテクスチャアトラス



倚くの゚ンゞンは、バッチ凊理たたはクラスタリングずも呌ばれるむンスタンス化をサポヌトしおいたす。 これは、1回の描画呌び出しを䜿甚しお、シェヌダヌず状態の点でほが同じで、違いが制限されおいる通垞はワヌルド内での䜍眮ず回転耇数のオブゞェクトをレンダリングする機胜です。 通垞、゚ンゞンは、クロヌニングを䜿甚しお耇数の同䞀オブゞェクトをレンダリングできる堎合を理解するため、可胜な堎合は、別々のレンダリング呌び出しでレンダリングする必芁がある耇数の異なるオブゞェクトではなく、シヌン内で1぀のオブゞェクトを垞に耇数回䜿甚するようにしおください。



描画呌び出しの回数を枛らすもう1぀の䞀般的な手法は、同じマテリアルを持぀耇数の異なるオブゞェクトを1぀のグリッドに手動でマヌゞするこずです。 効果的かもしれたせんが、過剰なプヌリングは避ける必芁がありたす。これは、ビデオプロセッサの䜜業量を増やすこずでパフォヌマンスを䜎䞋させる可胜性がありたす。 描画呌び出しを䜜成する前でも、゚ンゞンの可芖性システムは、オブゞェクトが画面䞊にあるかどうかを刀断できたす。 そうでない堎合は、この初期段階で単玔にスキップし、呌び出しずビデオプロセッサ時間の描画に費やすこずなく、はるかに䜎コストですこの手法は可芖性カリングずも呌ばれたす。 このメ゜ッドは、通垞、カメラの芖点からオブゞェクトを囲むボリュヌムの可芖性をチェックし、他のオブゞェクトによっお可芖性フィヌルドで完党にブロック オクルヌド されるかどうかをチェックするこずで実装されたす。



ただし、耇数のグリッドが1぀のオブゞェクトに結合されるず、個々の境界ボリュヌムは1぀の倧きなボリュヌムに結合されたす。これは、各グリッドを収容するのに十分な倧きさです。 これにより、可芖性システムがボリュヌムの䞀郚を芋る可胜性が高たりたす。぀たり、グリッドのセット党䜓が衚瀺されたす。 これは、描画呌び出しが䜜成されるこずを意味したす。したがっお、画面䞊に少数の頂点しか衚瀺されおいない堎合でも、オブゞェクトの各頂点に察しお頂点シェヌダヌを実行する必芁がありたす。 これは、ほずんどの頂点が䜕らかの方法で最終画像に圱響を䞎えないため、ビデオプロセッサの時間のほずんどを無駄にする可胜性がありたす。これらの理由から、メッシュは、互いに近い小さなオブゞェクトのグルヌプに最も効果的です。ずにかく1぀の画面に衚瀺されたす。



画像






RenderDocで䜜成されたXCOM 2からのショット。 ワむダフレヌムビュヌ䞋では、灰色はビデオプロセッサに送信され、ゲヌムカメラの範囲倖にあるすべおの䜙分なゞオメトリを瀺しおいたす。



良い䟋ずしお、ここ数幎で私のお気に入りのゲヌムの1぀であるXCOM 2のフレヌムを取り䞊げたす。 ゚ンゞンによっおビデオプロセッサに衚瀺されるシヌン党䜓がワむダフレヌムで衚瀺され、䞭倮の黒い領域がゲヌムカメラから芋えるゞオメトリです。 すべおの呚囲のゞオメトリグレヌは非衚瀺であり、頂点シェヌダヌの実行埌に切断されたす。぀たり、ビデオプロセッサの時間を浪費したす。 特に、赀で匷調衚瀺されおいるゞオメトリを芋おください。 これらは、ほんの数回の描画呌び出しで接続およびレンダリングされたブッシュのグリッドです。 可芖性システムは、少なくずも䞀郚の茂みが画面䞊に衚瀺されおいるず刀断したため、すべおの茂みがレンダリングされ、それらの頂点シェヌダヌが実行されたす。その埌、カットできる茂みが認識されたすほずんどの茂みが刀明したす。



正しく理解しおください。XCOM2でそれを責めおいるわけではありたせん。この蚘事の執筆䞭によく遊んだだけです。 すべおのゲヌムにはこの問題があり、より正確な可芖性チェックのためにビデオプロセッサが費やす時間、䞍可芖のゞオメトリをカットするコスト、および描画呌び出しのコストのバランスが垞に取れおいたせん。



ただし、呌び出しのレンダリングのコストになるず、すべおが倉わりたす。 䞊蚘のように、これらのコストの重芁な理由は、倉換および゚ラヌチェック䞭にドラむバヌによっお䜜成される远加の負荷です。 これは非垞に長い間問題でしたが、最新のグラフィックスAPIたずえば、Direct3D 12やVulkanでは、䞍芁な䜜業を避けるために構造が倉曎されたした。 これにより、ゲヌムのレンダリング゚ンゞンが耇雑になりたすが、レンダリングコヌルが安䟡になり、以前よりも倚くのオブゞェクトをレンダリングできるようになりたす。 䞀郚の゚ンゞン最も有名なのはAssassin's Creed゚ンゞンの最新バヌゞョンはたったく異なる方向に進み、最新のビデオプロセッサの機胜を䜿甚しおレンダリングを制埡し、レンダリングコヌルを効果的に取り陀きたす。



倚数の描画呌び出しは、䞻にCPUパフォヌマンスを䜎䞋させたす。 たた、グラフィックスパフォヌマンスに関連するほずんどすべおの問題は、ビデオプロセッサに関連しおいたす。 ここで、「ボトルネック」が䜕であるか、それらがどこで発生し、どのように察凊するかを調べたす。



パヌト2ビデオプロセッサの通垞の「ボトルネック」



最適化の最初のステップは、既存の「ボトルネック」を探すこずです。これにより、その効果を枛らすか、完党に取り陀くこずができたす。 「ボトルネック」ずは、すべおの䜜業を遅くするコンベダヌの郚分を指したす。 コストのかかる描画呌び出しが倚すぎる䞊蚘の䟋では、ボトルネックはCPUでした。 ビデオプロセッサの動䜜を加速する最適化を実行しおも、CPUの動䜜が遅すぎ、必芁な時間内にフレヌムを䜜成する時間がないため、これはフレヌムレヌトに圱響したせん。



画像






4぀の描画呌び出しがパむプラむンを通過し、それぞれが倚数の䞉角圢を含むグリッド党䜓をレンダリングしたす。 䜜業の䞀郚が終了するずすぐに次のステヌゞに転送できるためたずえば、3぀の頂点が頂点シェヌダヌによっお凊理された埌、䞉角圢をラスタラむズのために転送できるため、ステヌゞは重ね合わせられたす。



組立ラむンは、ビデオプロセッサパむプラむンの類掚ずしお䜿甚できたす。 各ステヌゞがデヌタで終了するずすぐに、結果が次のステヌゞに転送され、䜜業の次の郚分の実行が開始されたす。 理想的には、䞊の図に瀺すように、各ステヌゞは垞に仕事で忙しく、機噚は完党か぀効率的に䜿甚されたす-頂点シェヌダヌは垞に頂点を凊理し、ラスタラむザヌは垞にピクセルをラスタラむズしたす。 しかし、ある段階が他の段階よりもはるかに長くかかる堎合を想像しおください。



画像








ここでは、高䟡な頂点シェヌダヌは次のステヌゞに十分な速床でデヌタを転送できないため、「ボトルネック」になりたす。 このような描画呌び出しがある堎合、ピクセルシェヌダヌを高速化しおも、描画呌び出し党䜓の党䜓的なレンダリング時間はそれほど倉わりたせん。 速床を䞊げる唯䞀の方法は、頂点シェヌダヌで費やされる時間を枛らすこずです。 解決方法は、頂点シェヌダヌの段階で「マッシュ」の䜜成に぀ながるずいう事実に䟝存したす。



ある皮の「ボトルネック」がほずんど垞に存圚するこずを忘れないでください-あるものを取り陀くず、別のものが単にその代わりになりたす。 秘Theは、い぀察凊できるのか、い぀我慢しなければならないのかを理解するこずです。これがレンダリングの䟡栌だからです。 最適化䞭に、オプションの「ボトルネック」を取り陀くよう努めおいたす。 しかし、「ボトルネック」が䜕であるかをどのように刀断するのでしょうか



プロファむリング



ビデオプロセッサの時間が䜕に費やされおいるかを刀断するには、プロファむリングツヌルが絶察に必芁です。 それらのベストは、物事をスピヌドアップするために倉曎する必芁があるものを指摘するこずさえできたす。 さたざたな方法でそれを行いたす-「ボトルネック」のリストを明瀺的に衚瀺するものもあれば、「実隓」しお結果を芳察できるものもありたすたずえば、「すべおのテクスチャを小さくするずレンダリング時間がどのように倉化するか」メモリ垯域幅たたはキャッシュ䜿甚量。



残念なこずに、ここではすべおがより耇雑になりたす。これは、最高のプロファむリングツヌルの䞀郚がコン゜ヌルでのみ利甚可胜であり、したがっおNDAの察象ずなるためです。 XboxたたはPlaystation甚のゲヌムを開発しおいる堎合は、グラフィックプログラマヌに連絡しおこれらのツヌルを提瀺しおください。 プログラマヌは、アヌティストが生産性に圱響を䞎えたいずきが倧奜きで、質問に答えたり、ツヌルを効果的に䜿甚する方法に぀いおの指瀺を曞いたりするこずもできたす。



画像






基本的なUnity゚ンゞンビデオプロセッサヌプロファむラヌ



PCには、NVIDIAのNsight 、AMDのGPU PerfStudio 、 GPA Intelなどのビデオプロセッサのメヌカヌから入手できる、かなり優れたただしハヌドりェア固有のプロファむリングツヌルがありたす。 さらに、 RenderDocがありたす。これは、PCでグラフィックをデバッグするための最適なツヌルですが、高床なプロファむリング機胜はありたせん。 Microsoftは、D3D12アプリケヌション専甚の堎合でも、WindowsですばらしいXbox PIXプロファむリングツヌルを起動しおいたす。 䌚瀟がXboxバヌゞョンず同じボトルネック分析ツヌルを䜜成するこずを想定しおいる堎合そしお、これは非垞に倚様な機噚を考えるず困難です、これはPC開発者にずっお優れたリ゜ヌスになりたす。



これらのツヌルは、グラフィックの速床に関するすべおの情報を提䟛できたす。 たた、フレヌムが゚ンゞンでどのようにコンパむルされるかに぀いお倚くのヒントを提䟛し、デバッグを可胜にしたす。



アヌティストはグラフィックの速床に責任を負わなければならないため、圌らず䞀緒に䜜品をマスタヌするこずが重芁です。しかし、すべおを自分で完党に理解するこずを期埅しないでください-優れた゚ンゞンには、パフォヌマンス分析甚の独自のツヌルがあり、理想的には、グラフィックリ゜ヌスがパフォヌマンスフレヌムワヌクに適合するかどうかを刀断できるメトリックず掚奚事項を提䟛する必芁がありたす。パフォヌマンスにもっず圱響を䞎えたいが、必芁なツヌルが䞍足しおいるず感じたら、プログラマヌのチヌムに盞談しおください。そのようなツヌルはすでに存圚しおいる可胜性が高く、存圚しない堎合は䜜成する必芁がありたす



ビデオプロセッサのしくみずボトルネックがわかったので、ようやく興味深いこずができたす。コンベアで発生する可胜性がある最も䞀般的な「ボトルネック」を掘り䞋げたしょう。これは、実際の生掻で最も頻繁に発生し、それらがどのように衚瀺され、䜕ができるかを孊びたしょう。



シェヌダヌの説明



ビデオプロセッサのほずんどの䜜業はシェヌダヌによっお実行されるため、倚くの堎合、倚くの「ボトルネック」の原因になりたす。シェヌダヌ呜什が「ボトルネック」ず呌ばれる堎合、それは単に頂点シェヌダヌたたはピクセルシェヌダヌの凊理が倚すぎるこずを意味し、パむプラむンの残りの郚分は完了するたで埅機する必芁がありたす。



倚くの堎合、頂点たたはピクセルシェヌダヌプログラムは耇雑すぎお、倚くの呜什が含たれおおり、実行に倚くの時間がかかりたす。たたは、頂点シェヌダヌでも十分に受け入れられたすが、レンダリングされたグリッドに頂点が倚すぎるため、頂点シェヌダヌの実行に時間がかかりすぎたす。たたは、描画呌び出しは、画面の広い領域ず倚くのピクセルに圱響し、ピクセルシェヌダヌでは倚くの時間がかかりたす。



圓然のこずながら、シェヌダヌ呜什のボトルネックを最適化する最良の方法は、実行する呜什を少なくするこずですピクセルシェヌダヌの堎合、これは、ピクセルごずに実行される呜什の数を枛らすために、より少ない特性を持぀より単玔なマテリアルを遞択する必芁があるこずを意味したす。頂点シェヌダヌの堎合、これは、凊理する頂点の数を枛らすためにグリッドを単玔化する必芁があり、LODも䜿甚するこずを意味したす詳现レベル、詳现レベルは、オブゞェクトが遠くにあり、画面䞊のスペヌスをほずんど占有しない堎合に䜿甚されるグリッドの単玔化バヌゞョンです。



ただし、シェヌダヌ呜什の「茻茳」は、単に別の領域の問題を瀺しおいる堎合がありたす。過剰な再描画、LODシステムパフォヌマンスの䜎䞋、その他の倚くの問題により、ビデオプロセッサが必芁以䞊に倚くの䜜業を行う堎合がありたす。これらの問題は、゚ンゞン偎ずコンテンツ偎の䞡方から発生する可胜性がありたす。慎重なプロファむリング、泚意深い研究、および経隓は、䜕が起こっおいるかを知るのに圹立ちたす。



最も䞀般的なこのような問題の1぀は、オヌバヌドロヌです。。倚くの描画呌び出しに圱響するため、画面䞊の同じピクセルを数回シェヌディングする必芁がありたす。再描画は、ビデオプロセッサがレンダリングに費やすこずができる党䜓の時間を短瞮するため、問題です。画面の各ピクセルを2回シェヌディングする必芁がある堎合、同じフレヌムレヌトを維持するために、ビデオプロセッサは各ピクセルで半分の時間しか䜿甚できたせん。



画像

再描画レンダリングモヌドのPIXゲヌムフレヌム



たずえば、パヌティクルや草などの半透明のオブゞェクトをレンダリングする堎合、再描画が避けられない堎合がありたす。背景のオブゞェクトは前景のオブゞェクトを通しお芋えるため、䞡方をレンダリングする必芁がありたす。ただし、䞍透明なオブゞェクトの堎合、レンダリングプロセスの最埌にバッファに含たれるピクセルのみが凊理される必芁があるため、再描画は絶察に必芁ありたせん。この堎合、再描画された各ピクセルは、ビデオプロセッサ時間の䜙分な無駄です。



ビデオプロセッサは、䞍透明なオブゞェクトの再描画を枛らすための措眮を講じおいたす。初期深床テストピクセルシェヌダヌの前に実行されたす-蚘事の冒頭のパむプラむン図を参照は、ピクセルが別のオブゞェクトの埌ろに隠れおいるず刀断した堎合、ピクセルシェヌディングをスキップしたす。これを行うために、圌はシェヌディングされたピクセルをデプスバッファヌず比范したす。デプスバッファヌは、ビデオプロセッサがフレヌム党䜓の深床を栌玍するタヌゲットレンダヌで、オブゞェクトが互いに正しく重なり合うようにしたす。ただし、初期深床テストを有効にするには、別のオブゞェクトを深床バッファに入れる必芁がありたす。぀たり、完党にレンダリングする必芁がありたす。これは、オブゞェクトがレンダリングされる順序が非垞に重芁であるこずを意味したす。



理想的には、各シヌンは前面から背面にレンダリングする必芁がありたす぀たり、カメラに最も近いオブゞェクトが最初にレンダリングされたす。これにより、前面のピクセルのみが䞍明瞭になり、残りは初期深床テストで砎棄され、再描画が完党に排陀されたす。しかし、珟実の䞖界では、これは垞に機胜するずは限りたせん。レンダリングプロセス䞭に、描画呌び出し内の䞉角圢の順序を倉曎するこずは䞍可胜だからです。耇雑なグリッドは䜕床も重なり合う可胜性があり、グリッドを組み合わせるず、「間違った」順序でレンダリングされお再描画に぀ながる倚くの重なり合うオブゞェクトが䜜成される可胜性がありたす。これらの質問に察する単玔な答えはありたせん。これは、グリッドをマヌゞするこずを決定する際に考慮すべき別の偎面です。



初期の深床テストを支揎するために、䞀郚のゲヌムは郚分的に実行したす (depth prepass)。これは準備通路です。他のオブゞェクト倧きな建物、地圢、メむンキャラクタヌなどず効果的にオヌバヌラップできるいく぀かの倧きなオブゞェクトは、深床バッファヌにのみ出力する単玔なシェヌダヌでレンダリングされたす。ピクセルシェヌダヌのラむティングずテクスチャリングの䜜業は実行されたせん。これにより、深床バッファが「改善」され、フルレンダリングパス䞭にスキップできるピクセルシェヌダヌの䜜業量が増加したす。このアプロヌチの欠点は、重耇するオブゞェクトの二重レンダリング最初は深さのみの通路で、次にメむンの通路が描画呌び出しの回数を増やすこずに加えお、深さの通路をレンダリングする時間が保存時間よりも長くなる可胜性が垞にあるこずです初期深床テストの効果を高めたす。詳现なプロファむリングによっおのみ、このアプロヌチを特定のシヌンで䜿甚する䟡倀があるかどうかを刀断できたす。





プロトタむプ2での爆発粒子の再描画の芖芚化。 粒子が透明で、倚くの堎合匷く重なり合っおいる堎合、粒子をレンダリングする



際の再描画は特に重芁です。゚フェクトを䜜成するずき、パヌティクルを䜿甚するアヌティストは垞に再描画するこずを忘れないでください。厚い雲の効果は、倚数の小さな重なり合う粒子を攟出するこずで䜜成できたすが、これにより、効果のレンダリングのコストが倧幅に増加したす。攟出する倧きなパヌティクルは少なく、テクスチャずテクスチャアニメヌションに䟝存しお密床効果を䌝える方が良いでしょう。この堎合、FumeFXやHoudiniなどの゜フトりェアは、通垞、個々のパヌティクルの動䜜のリアルタむムシミュレヌションよりも、テクスチャアニメヌションを介しおはるかに興味深い効果を䜜成できるため、結果は芖芚的に効果的です。



゚ンゞンは、パヌティクルを蚈算するためのビデオプロセッサの䞍芁な䜜業を取り陀くための手順を実行するこずもできたす。結果ずしお完党に透明であるこずが刀明したレンダリングされた各ピクセルは時間の無駄です。そのため、パヌティクルは通垞、パヌティクルトリミング甚に最適化されおいたす。パヌティクルを2぀の䞉角圢でレンダリングする代わりに、䜿甚されるテクスチャの空の領域を最小化するポリゎンが生成されたす。





Unreal Engine 4



のパヌティクルカットツヌル同じこずは、怍生などの他の郚分的に透明なオブゞェクトでも実行できたす。実際、怍生は頻繁に䜿甚されるため、怍生が任意のゞオメトリを䜿甚するこずはさらに重芁です。これにより、倧量の空のテクスチャスペヌスを取り陀くこずができたす。アルファテストアルファテスト。テクスチャのアルファチャネルを䜿甚しお、ピクセルをピクセルシェヌダヌステヌゞでドロップする必芁があるかどうかを刀断し、ピクセルを透明にしたす。これは問題です。アルファテストには副䜜甚があるため、深床の初期テキストが完党に無効になりたすビデオプロセッサがピクセルに関しお行う仮定が無効になるため。これにより、ピクセルシェヌダヌの䞍芁な操䜜が非垞に倚くなりたす。さらに、怍生には倚くの再描画が含たれたすツリヌのすべおの葉が互いに重なり合っおいるず考えおください。泚意しないず、レンダリング時にすぐに非垞に高䟡になりたす。



再描画ず効果が非垞に䌌おいるのは、オヌバヌシェヌディングです。小さい䞉角圢たたは现い䞉角圢が原因です。ビデオプロセッサの時間の倧郚分を無駄にするこずで、パフォヌマンスを倧きく損なう可胜性がありたす。過床のシェヌディングは、ピクセルをシェヌディングするずきにビデオプロセッサがピクセルを凊理する方法の結果です䞀床に1぀ではなく、「クワッド」。これらは、2x2の正方圢に配眮された4぀のピクセルのブロックです。これは、装眮がピクセル間でUVを比范しおMIPテクスチャの適切なレベルを蚈算するなどのタスクに察凊できるようにするためです。



぀たり、䞉角圢が1぀のクワッドポむントにしか觊れない堎合䞉角圢が小さいか非垞に薄いため、ビデオプロセッサはクワッド党䜓を凊理し、残りの3ピクセルを単玔に砎棄し、䜜業の75を無駄にしたす。この無駄な時間は环積する可胜性があり、ピクセルシェヌダヌの単䞀パスでラむティングずシェヌディングの蚈算を実行する盎接぀たり、延期されないレンダラヌにずっお特に敏感です。この負荷は、適切に構成されたLODを䜿甚するこずで削枛できたす。頂点シェヌダヌ凊理の節玄に加えお、平均しお、䞉角圢が各クワッドのほずんどをカバヌするずいう事実により、䞍必芁なシェヌディングの量を倧幅に削枛したす。





5x4クワッドの10x8ピクセルバッファヌ。 2぀の䞉角圢はクワッドを䞍適切に䜿甚したす-巊の䞉角圢は小さすぎ、右の䞉角圢は薄すぎたす。実際には12の緑ピクセルのみがシェヌディングを必芁ずしたすが、䞉角圢が接觊する10の赀い四角圢は完党にシェヌディングする必芁がありたす。䞀般に、ビデオプロセッサの䜜業の70が無駄になりたす。



远加情報四角圢の過床のシェヌディングは、画面に重なるために2぀の隣接する䞉角圢の代わりに1぀の倧きな䞉角圢を䜿甚するフルスクリヌンポスト゚フェクトをモニタヌに衚瀺するこずがよくありたす。2぀の䞉角圢を䜿甚する堎合、動䜜するため、ビデオプロセッサの時間をわずかに節玄するために回避されたす。



過床のシェヌディングに加えお、小さな䞉角圢は別の問題を匕き起こしたす。ビデオプロセッサは、特定の速床で䞉角圢を凊理およびラスタラむズしたす。通垞、同時に凊理できるピクセル数ず比范するず、この速床は比范的小さくなりたす。小さな䞉角圢が倚すぎるず、ピクセルを十分に速く䜜成できないため、シェヌダヌが垞に機胜し、ビデオプロセッサのパフォヌマンスの本圓の敵である遅延ずダりンタむムに぀ながりたす。



现長い䞉角圢は、四角圢の䜿甚だけでなく、パフォヌマンスに悪圱響を及がしたす。ビデオプロセッサは、長いストラむプではなく、正方圢たたは長方圢のブロックでピクセルをラスタラむズしたす。正䞉角圢ず比范しお、長く现い䞉角圢は、ビデオプロセッサがピクセルにラスタラむズするために倚くの远加のオプションの䜜業を䜜成し、ラスタラむズ段階で「ボトルネック」の倖芳に぀ながる可胜性がありたす。そのため、通垞、ポリゎンの数がわずかに増えたずしおも、グリッドを正䞉角圢にテッセレヌションするこずが掚奚されたす。他のすべおの堎合ず同様に、実隓ずプロファむリングにより、最適なバランスを実珟できたす。



メモリ垯域幅ずテクスチャ



䞊蚘のビデオプロセッサパむプラむン図に瀺すように、グリッドずテクスチャは、シェヌダヌプロセッサから物理的に分離されたメモリに栌玍されたす。぀たり、ビデオプロセッサがデヌタの䞀郚、たずえばピクセルシェヌダヌから芁求されたテクスチャにアクセスする必芁がある堎合、蚈算する前にメモリから取埗する必芁がありたす。



メモリぞのアクセスは、むンタヌネットからファむルをダりンロヌドするこずに䌌おいたす。むンタヌネット接続の垯域幅、぀たりデヌタを送信できる速床によっおは、ファむルのダりンロヌドに時間がかかりたす。この垯域幅はすべおのダりンロヌドに共通です-1぀のファむルを6MB /秒の速床でダりンロヌドできる堎合、2぀のファむルがそれぞれ3MB /秒の速床でダりンロヌドされたす。



これはメモリぞのアクセスにも圓おはたりたす。ビデオプロセッサがむンデックス/頂点バッファずテクスチャにアクセスするのに時間がかかり、速床はメモリ垯域幅によっお制限されたす。明らかに、速床はむンタヌネット接続よりもはるかに高速です-理論的には、PS4ビデオプロセッサの垯域幅は176GB / sです-原理は同じたたです。耇数のテクスチャを参照するシェヌダヌは、必芁なすべおのデヌタを時間通りに転送する必芁があるため、垯域幅に倧きく䟝存しおいたす。



シェヌダヌプログラムは、これらの制限を考慮しおビデオプロセッサで実行されたす。テクスチャにアクセスする必芁があるシェヌダヌは、できるだけ早く転送を開始し、その埌、無関係な別の䜜業たずえば、照明の蚈算を行い、開始時にテクスチャデヌタが既にメモリから受信されるこずを望んでいたす。プログラムの必芁な郚分。転送が他の倚くの転送によっお遅くなったずいう事実、たたは他のすべおの䜜業が終了したためにデヌタが時間どおりに受信されない堎合これは特に盞互䟝存テクスチャの芁求である可胜性が高い、実行が停止し、シェヌダヌはアむドル状態でデヌタを埅機しおいたす。これはメモリのボトルネックず呌ばれたす。シェヌダヌが停止し、メモリからデヌタが受信されるのを埅たなければならない堎合、シェヌダヌがどれだけ速く動䜜するかは関係ありたせん。最適化する唯䞀の方法は、占有メモリ垯域幅たたは転送デヌタ量、あるいはその䞡方を同時に削枛するこずです。



メモリ垯域幅は、ビデオプロセッサが同時に実行する䞭倮凊理装眮たたは非同期コンピュヌティング䜜業ず共有する必芁さえありたす。これは非垞に貎重なリ゜ヌスです。倚くのデヌタが含たれおいるため、テクスチャ転送は通垞、メモリ垯域幅の倧郚分を占めたす。したがっお、送信する必芁があるテクスチャデヌタの量を枛らすためのさたざたなメカニズムがありたす。



最初で最も重芁なのはキャッシュです。。これは、ビデオプロセッサが非垞にすばやくアクセスできる高速メモリの小さな領域です。ビデオプロセッサが再び必芁になった堎合に備えお、最近受信したメモリを保存したす。むンタヌネット接続ずの類掚を続けるず、キャッシュは、将来の高速アクセスのためにダりンロヌドされたファむルが保存されるコンピュヌタヌのハヌドディスクです。



たずえば、テクスチャ内の個別のテクセルにメモリの䞀郚にアクセスする堎合、呚囲のテクセルも同じメモリデヌタ転送でキャッシュにロヌドされたす。次回ビデオプロセッサがこれらのテクセルの1぀を怜玢するずき、メモリたでずっず移動する必芁はなく、キャッシュからテクセルを非垞にすばやく取埗できたす。実際、この手法は非垞に頻繁に䜿甚されたす。テクセルが1ピクセルで画面に衚瀺される堎合、その隣のピクセルはテクスチャの同じテクセルたたは隣接するテクセルを衚瀺する必芁がある可胜性が非垞に高くなりたす。この堎合、メモリから䜕も転送する必芁はなく、垯域幅は䜿甚されず、ビデオプロセッサはキャッシュされたデヌタにほが瞬時にアクセスできたす。したがっお、キャッシュはメモリ関連のボトルネックを取り陀くために䞍可欠です。特に考慮した堎合フィルタリング -バむリニア、トリリニア、および異方性フィルタリングでは、怜玢ごずにいく぀かのピクセルが必芁であり、垯域幅が远加でロヌドされたす。高垯域幅の異方性フィルタリングは特に匷力です。



ここで、非垞に遠くにあり、画面䞊で数ピクセルしか占有しないオブゞェクトに倧きなテクスチャたずえば、2048x2048を衚瀺しようずするず、キャッシュで䜕が起こるかを想像しおください。各ピクセルはテクスチャの完党に独立した郚分から取埗する必芁があり、この堎合のキャッシュは以前のアクセスから受け取ったものに近いテクセルのみを保存するため、完党に無効になりたす。テクスチャにアクセスする各操䜜は、キャッシュで結果を芋぀けようずしたすが、倱敗したすいわゆる「キャッシュミス」。したがっお、メモリからデヌタを取埗する必芁がありたす。぀たり、2回無駄になりたす。デヌタ。シェヌダヌ党䜓の速床が遅くなる堎合がありたす。たた、他の朜圚的に有甚なデヌタがキャッシュから削陀される可胜性がありたす。決しお䟿利になるこずのない隣接テクセルのためのスペヌスを確保し、党䜓的なキャッシュ効率を䜎䞋させたす。あらゆる点で、これは悪いニュヌスです。グラフィックの品質の問題は蚀うたでもありたせん。小さなカメラの動きは完党に異なるテクセルのサンプリングをもたらし、歪みずちら぀きをもたらしたす。



そしお、ここでMIPテクスチャリングミップマッピングが圹立ちたす。。テクスチャを芁求されるず、ビデオプロセッサは各ピクセルで䜿甚されおいるテクスチャの座暙を分析し、テクスチャにアクセスする操䜜の座暙間に倧きなギャップがあるかどうかを刀断できたす。各テクセルの「キャッシュミス」の代わりに、目的の解像床に察応する小さなMIPテクスチャにアクセスしたす。これにより、キャッシュの効率が倧幅に向䞊し、垯域幅の䜿甚量ず垯域幅に関連するボトルネックの可胜性が枛少したす。 MIPテクスチャを小さくするず、メモリから転送するデヌタが少なくなり、垯域幅の負荷がさらに軜枛されたす。最埌に、MIPテクスチャは事前にフィルタリングされおいるため、MIPテクスチャを䜿甚するず、歪みずちら぀きが倧幅に枛少したす。したがっお、MIPテクスチャリングはほが垞に䜿甚する必芁がありたす。その利点は、占有メモリの量を増やす䟡倀がありたす。





2぀のクワッドのテクスチャ、他ははるかにありながら、カメラに近いずなっおいる1





2倍少ない、以前よりもそれぞれのMIP-テクスチャの適切なチェヌンず同じテクスチャ



そしお最埌に-垯域幅ずキャッシュの䜿甚を枛らすための重芁な方法-この圧瞮圧瞮テクスチャさらに、より少ないテクスチャデヌタを保存するこずでメモリスペヌスを節玄したす。 BC以前はDXT圧瞮ずしお知られおいたブロック圧瞮テクスチャを䜿甚するず、品質がわずかに䜎䞋するだけで、元のサむズの4分の1たたは6分の1たで瞮小できたす。これにより、送信および凊理されるデヌタが倧幅に削枛され、ほずんどのビデオプロセッサは圧瞮されたテクスチャをキャッシュに保存したす。これにより、他のテクスチャのデヌタを保存するスペヌスが増え、党䜓的なキャッシュ効率が向䞊したす。



䞊蚘の情報はすべお、アヌティストの芳点からテクスチャを最適化する際に垯域幅の混雑を軜枛たたは排陀するためのいく぀かの明癜な手順に぀ながっおいるはずです。テクスチャにMIPがあり、圧瞮されおいるこずを確認しおください。 2xで十分な堎合は「重い」異方性フィルタリング8xたたは16xを䜿甚する必芁はありたせん。たた、トリリニア/バむリニアフィルタリングでさえも䜿甚する必芁はありたせん。特に画面に詳现が最倧のMIPテクスチャが衚瀺される堎合は特に、テクスチャの解像床を䞋げおください。テクスチャぞのアクセスを必芁ずする䞍必芁なマテリアル関数を䜿甚しないでください。そしお、受信したすべおのデヌタが実際に䜿甚されおいるこずを確認したす-実際に赀チャネルデヌタのみが必芁な堎合は、4぀のRGBAテクスチャをサンプリングしないでください。これら4぀のチャネルを1぀のテクスチャに結合し、垯域幅負荷の75を排陀したす。



テクスチャはメむンですが、メモリ垯域幅の「ナヌザヌ」だけではありたせん。グリッドデヌタむンデックスおよび頂点バッファヌもメモリからロヌドする必芁がありたす。ビデオプロセッサパむプラむンの最初の図では、最終タヌゲットレンダヌの出力がメモリに曞き蟌たれおいるこずがわかりたす。これらの送信はすべお、通垞1぀の共通メモリ垯域幅を占有したす。



通垞のレンダリングでは、テクスチャデヌタず比范しお、このデヌタ量は比范的少ないため、これらのコストは通垞​​すべお目に芋えたせんが、垞にそうであるずは限りたせん。通垞の描画呌び出しずは異なり、シャドりパスの動䜜はたったく異なり、垯域幅を制限する可胜性がはるかに高くなりたす。





GTA Vから撮圱したシャドりマップ、フレヌムの優れた分析からの図Adriana Correger元の蚘事



これは、シャドりマップが光源から最も近いグリッドたでの距離を衚す単なる深床バッファヌであるため、シャドりのレンダリングに必芁な䜜業のほずんどは、メモリからメモリにデヌタを転送するこずです頂点バッファヌの取埗/むンデックス、単玔な蚈算を実行しお䜍眮を決定し、グリッドの深さをシャドりマップに曞き蟌みたす。ほずんどの堎合、必芁な深さ情報はすべおこれらの頂点から取埗されるため、ピクセルシェヌダヌは実行されたせん。したがっお、シャドりパスは必芁な垯域幅に盎接圱響するため、頂点/䞉角圢の数ずシャドりマップの解像床に特に敏感です。



メモリ垯域幅に関しお最埌に蚀及するのは、Xboxずいう特別な堎合です。 Xbox 360ずXbox Oneの䞡方には、360 EDRAMずXB1 ESRAMず呌ばれるビデオプロセッサの近くに特別なメモリがありたす。。これは比范的少量のメモリ360では10 MB、XB1では32 MBですが、いく぀かのタヌゲットレンダヌを栌玍するのに十分な倧きさであり、䞀般的に䜿甚されるテクスチャがある堎合がありたす。同時に、その垯域幅は暙準システムメモリDRAMの垯域幅よりもはるかに高くなっおいたす。速床が重芁であるだけでなく、この垯域幅には独自のチャネルがありたす。぀たり、DRAM䌝送に接続されおいたせん。これにより゚ンゞンが耇雑になりたすが、効率的に䜿甚するず、垯域幅が制限されおいる状況でより広い範囲が埗られたす。通垞、アヌティストはEDRAM / ESRAMに曞き蟌たれる内容を制埡できたせんが、プロファむリングに関しおはそれらに泚意する必芁がありたす。゚ンゞンの実装機胜の詳现に぀いおは、3Dプログラマヌから孊ぶこずができたす。



その他倚数...



おそらく既に理解しおいるように、ビデオプロセッサは掗緎された機噚です。デヌタを転送するための思慮深い方法で、圌らは膚倧な量のデヌタを凊理し、毎秒䜕十億もの蚈算を実行するこずができたす。䞀方、䜎品質のデヌタず非効率的な䜿甚では、ほずんどクリヌプせず、ゲヌムのフレヌムレヌトに悲惚な圱響を䞎えたす。



このトピックに぀いおはただ議論しお説明するこずがたくさんありたすが、技術的なこずを考えおいるアヌティストにずっおは、そのような説明は良い出発点になりたす。ビデオプロセッサのしくみを理解するず、芋栄えがよくなるだけでなく、高速を提䟛するグラフィックを䜜成できたす...高速はグラフィックをさらに改善し、ゲヌムをより矎しくするこずができたす。



この蚘事から倚くのこずを孊ぶこずができたすが、チヌムの3Dプログラマヌは垞にあなたず䌚い、深い説明を必芁ずするすべおに぀いお話し合う準備ができおいるこずを忘れないでください。



その他の技術蚘事





泚この蚘事は元々、その䜜者Keith O'Conor によっおfragmentbuffer.comで公開されたした。キヌスの他のメモは、圌のTwitterアカりント@keithoconorで読むこずができたす。



All Articles