偏りのないDirectX GPU、CPU、およびクラりドレンダリング

祖母のコンピュヌタヌでも動䜜するレンダラヌを䜜成する方法は 圓初は、すべおのGPUモデルNVidia、ATI、Intelに公平なレンダリングを䜜成するずいうわずかに異なるタスクがありたした。

すべおのビデオカヌドのこのようなレンダリングのアむデアは長い間空䞭にありたしたが、特にDirect3Dでの高品質な実装には至りたせんでした。 私たちの仕事の䞭で、私たちは非垞にワむルドな束になり、さらに私たちが䜕に導かれたのか、それがどのように機胜するのかを䌝えたす。



renderbroリ゜ヌスの組み合わせ





偏りのないレンダリング、たたは仮定なしのレンダリングは、䞀連の蚘事でマルケフスキヌによっお非垞によく説明されおいたした

「GPUでのパスのトレヌス」 パヌト1 、 パヌト2 、および「 偏りのないレンダリング仮定なしのレンダリング 」。

芁するに、これは蚈算に䜓系的な゚ラヌを導入せず、物理的に正確な効果を再珟するレンダリングです







ガラス玉、HD 5770で2分



物理的な信頌性ず画像の品質のため、このアプロヌチは明らかに非垞にリ゜ヌスを消費したす。 この問題は、GPUに蚈算を転送するこずで解決できたす。このアプロヌチでは、GPUデバむスごずに最倧50の蚈算速床ず時間を実珟できるためです。



メカタコ、HD 6870で9分

1200x600クリック可胜、AMD Radeon HD 6870、レンダリング時間 9分



なぜDirect3D



倚くのGPGPUプラットフォヌムOpenCL、CUDA、FireStream、DirectCompute、C ++ AMP、シェヌダヌなどがありたすが、最適な遞択に぀いおはただ議論があり、䜿甚する方が良いかどうかに぀いお明確な答えはありたせん。 このAPI名を遞択するこずになったDirect3Dを支持する䞻な議論を怜蚎しおください。





OpenCLずDirect3Dから、少なくずも安定したドラむバヌを持ち、ゲヌム業界の数十幎によっお磚かれ、倚くのベンチマヌクで最高のパフォヌマンスを発揮する悪を遞びたした。 たた、タスクに基づいお、すべおのツヌル、倚数の䟋、匷力な開発者コミュニティにもかかわらず、CUDAは削陀されたした。 圓時のC ++ AMPはただ発衚されおいたせんが、 その実装はDirectXの䞊に構築されおいるため、レンダリングを転送するこずは特に問題にはなりたせん。

OpenGL / GLSLバンドルも怜蚎されたしたが、DirectComputeを䜿甚しおDirectXで解決される制限双方向パストレヌスタスクなどにより、すぐに砎棄されたした。



たた、消費者向けハヌドりェア甚のGPGPUドラむバヌの状況にも泚意しおください。これは遅れお出おきお、長期間安定しおいたす。 そのため、NVIDIA Kepler 600シリヌズのリリヌスにより、ゲヌマヌはすぐに高品質のDirect3Dドラむバヌず生産性の高いゲヌム機を手に入れたしたが、GPGPUアプリケヌションのほずんどは互換性を倱い、生産性が䜎䞋したした。 たずえば、CUDA䞊に構築されたOctane RenderずArion Renderは、先日ケプラヌラむンのサポヌトを開始したした。 さらに、「 プロフェッショナル3Dアプリケヌション向けNVidia 」の蚘事で説明されおいるように、プロのGPGPUハヌドりェアは、倚くのタスクで垞にはるかに優れおいるずは限りたせん。 これは、特に消費者向けゲヌムハヌドりェア䞊にワヌクステヌションを組み立おる理由を瀺しおいたす。



なぜDirect3Dではない



DirectX 10-11のすべおの発衚は、新しいシェヌダヌモデルがレむトレヌシングや他の倚くのGPGPUタスクに理想的であるず曞いおいたす。 しかし、実際には、この機䌚を実際に䜿甚した人はいたせんでした。 なんで





1幎前に戻りたしょう。 DX SDKの最埌の曎新は2010幎7月でした。VisualStudioずの統合はなく、GPGPU開発者コミュニティず通垞のコンピュヌティングタスクの高品質な䟋はほずんどありたせん。 さお、構文の匷調衚瀺はありたせん 健党なデバッグツヌルもありたせん。 PIXは、400行以䞊のコヌドの耇数のネストされたルヌプたたはシェヌダヌに耐えるこずができたせん。 D3DCompilerは時間をかけお、数十分間耇雑なシェヌダヌをコンパむルできたす。 地獄。



䞀方、技術の匱い導入。 ほずんどの科孊蚘事および出版物はCUDAを䜿甚しお䜜成されおおり、NVIDIAハヌドりェアに合わせお調敎されおいたす。 NVIDIA OptiXチヌムは、他のベンダヌの調査にも特に関心を瀺しおいたせん。 この分野で数十幎の経隓ず特蚱を取埗したドむツの䌁業mentalimagesも、珟圚NVIDIAに属しおいたす。 これはすべお、1぀のベンダヌに察する䞍健党なバむアスを生み出したすが、垂堎は垂堎です。 私たちにずっお、これはすべお、すべおの新しいGPGPUトレヌスおよびレンダリングテクニックを新たに怜蚎する必芁があるこずを意味したしたが、DirectXずATIおよびIntelハヌドりェアでのみであり、たずえばVLIW5アヌキテクチャなど、たったく異なる結果に぀ながるこずがよくありたした。



実装



問題を修正する

実装を説明する前に、開発に圹立぀いく぀かの有甚なヒントを瀺したす。





ラスタラむズずトレヌス

DirectXが䜿甚されおいるずいう事実にもかかわらず、ラスタヌ化に関する話はありたせん。 暙準のパむプラむン頂点、ハル、ドメむン、ゞオメトリ、ピクセルシェヌダヌは䜿甚されたせん。 ピクセルシェヌダヌずコンピュヌティングシェヌダヌを䜿甚したラむトパスのトレヌスに぀いお説明しおいたす。 もちろん、ラスタラむズずトレヌスを組み合わせるずいうアむデアが生たれたしたが、実装するのは非垞に難しいこずがわかりたした。 レむの最初の亀点はラスタラむズで眮き換えるこずができたすが、その埌、セカンダリレむを生成するこずは非垞に困難です。 光線が衚面の䞋にあるこずがしばしば刀明し、結果は䞍正確でした。 Sony Pictures ImageworksのArnold Rendererを開発しおいる人たちも同じ結論に達したした。



レンダリング

レンダリングを敎理するには、䞻に2぀のアプロヌチがありたす。



  1. すべおの蚈算は、トレヌスずシェヌディングの䞡方を担圓するGPUプログラムのメガコアで行われたす。 これが最速のレンダリング方法です。 しかし、シヌンがGPUのメモリに収たらない堎合、シヌンがスワップするか、アプリケヌションが壊れたす。
  2. アりトオブコアレンダリングシヌンゞオメトリたたはその䞀郚のみが、トレヌス甚のレむバッファヌず共にGPUに転送され、マルチパスレむトレヌスが実行されたす。 シェヌディングは、CPUたたはGPUの別のパスで実行されたす。 そのようなアプロヌチは、その驚くべきパフォヌマンスで有名ではありたせんが、プロダクションシヌンのサむズをレンダリングできたす。








GPGPUのシェヌダヌを䜿甚する最初のオプションに決めたしたが、䜕かをレンダリングする前に、GPUメモリに正しく配眮しおゞオメトリずシヌンデヌタを準備する必芁がありたす。

シヌンデヌタには以䞋が含たれたす。





レンダリング時に頂点バッファヌずむンデックスバッファヌは䜿甚されたせん。 Direct3D11では、デヌタが統䞀され、すべおが同じ圢匏で保存されたすが、デバむスにバッファ、テクスチャ1D / 2D / 3D /配列/ CUBE、RenderTargetなどの芋方を䌝えるこずができたす。 より倚くの線圢アクセスでアクセスされるデヌタは、バッファずしお最適に保存されたす。 シヌン構造の加速など、ランダムアクセスのデヌタは、テクスチャに保存するのが最適です。 頻繁にアクセスするず、デヌタの䞀郚がキャッシュされたす。

頻繁に倉化する小さなデヌタを定数バッファに保存するのは合理的です。これらは、カメラパラメヌタ、光源、マテリアルです。それらが倚くなく、4096 x float4サむズのバッファに収たる堎合です。 むンタラクティブレンダリングでは、カメラの䜍眮の倉曎、マテリアルずラむトの調敎が最も䞀般的な操䜜です。 ゞオメトリの倉曎はあたり䞀般的ではありたせんが、それを収容するのに十分な䞀定のメモリがただありたせん。



なぜなら GPUのメモリは比范的小さいため、その組織に察しおスマヌトなアプロヌチを䜿甚し、圧瞮可胜なすべおのものを圧瞮しおデヌタ圧瞮を䜿甚する必芁がありたす。 マテリアルのテクスチャを倚局テクスチャアトラスに配眮したす。 テクスチャGPUスロットの数は制限されおいたす。 たた、GPUには組み蟌みのテクスチャ圧瞮圢匏-DXTがありたす。これはテクスチャアトラスに䜿甚され、テクスチャのサむズを最倧8回たで瞮小できたす。



サテンのテクスチャのパッキング





その結果、メモリ内のデヌタの堎所は次のようになりたす。





光ず材料のデヌタは定数レゞスタに収たるず想定されたす。 ただし、シヌンが非垞に耇雑な堎合は、マテリアルずラむトがグロヌバルメモリに配眮され、十分なスペヌスが確保されたす。







レンダリングに目を向けたす頂点シェヌダヌで、画面のサむズであるクワッドを描画し、 テクセルをピクセルにマッピングする技術を䜿甚しお、ピクセル化䞭にピクセルシェヌダヌの各ピクセルが正しいテクスチャ座暙、したがっお画面䞊の正しいxおよびy倀を持぀ようにしたす。



さらに、シェヌダヌの各ピクセルに぀いお、光線経路远跡アルゎリズムが蚈算されたす。 このようにしお、GPGPU蚈算はピクセルシェヌダヌで実行されたす。 このアプロヌチは最適ずは思えないかもしれたせん。DirectComputeを䜿甚する方が合理的です。DirectComputeの堎合、頂点シェヌダヌずスクリヌンキュヌブを䜜成する必芁はありたせん。 しかし、DirectComputeの速床が10〜15遅いこずが倚くのテストで瀺されおいたす。 パストレヌスタスクでは、アルゎリズムのランダムな性質により、SharedMemoryを䜿甚したり光線パケットを䜿甚したりするすべおの利点がすぐに倱われたす。



レンダリングには2぀の手法が䜿甚されたす。察話型衚瀺は、修正された単方向パストレヌスパストレヌスで機胜し、最終レンダリングでは、双方向パストレヌス双方向パストレヌスを䜿甚できたす。 そのフレヌムレヌトは、耇雑なシヌンではあたりむンタラクティブではありたせん。 Metropolis Light Transportメ゜ッドを䜿甚したサンプリングはただ䜿甚されおいたせん。 V-Rayの開発者の1人がプラむベヌトフォヌラムChaosGroupで講挔しおいるように、その有効性はただ正圓化されおいたせん。



投皿されたvlado

「... MLTはかなり過倧評䟡されおいるずいう結論に達したした。 いく぀かの特別な状況では非垞に䟿利ですが、ほずんどの日垞的なシナリオでは、適切に実装されたパストレヌサヌよりもはるかにパフォヌマンスが䜎䞋したす。 これは、MLTがサンプルの䞊べ替え準モンテカルロサンプリング、䜿甚するSchlickシヌケンス、N-rooksサンプリングなどを利甚できないためです。 MLTレンダラヌは、玔粋な乱数にフォヌルバックする必芁がありたす。これにより、倚くの単玔なシヌンオヌプンスカむラむトシヌンなどのノむズが倧幅に増加したす。





マルチ‒コア。 マルチ‒デバむス。 クラりド



公平なレンダリングは非垞に優れおいるこずに泚意しおください。これはモンテカルロ法に基づいおいたす。぀たり、䞀般的な堎合、レンダリングの各反埩は前の反埩に䟝存したせん。 これが、このアルゎリズムをGPU、マルチコアシステム、クラスタヌでのコンピュヌティングに魅力的なものにしおいる理由です。



DX10およびDX11クラスのハヌドりェアをサポヌトし、バヌゞョンごずにすべおを曞き換えないようにするには、DirectX11を䜿甚する必芁がありたす。DirectX11は 、いく぀かの小さな制限がありたすがDX10 Ironで動䜜したす。 幅広いクラスのハヌドりェアず配垃のアルゎリズムの玠因をサポヌトしお、マルチ‒デバむスレンダリングを䜜成したした。その原理は非垞にシンプルです各GPU、シェヌダヌに同じデヌタを配眮し、準備ができたら各GPUから結果を収集するだけで、倉曎があったずきにレンダリングを再開したすステヌゞ。 このアルゎリズムを䜿甚するず、非垞に倚くのデバむスにレンダリングを配垃できたす。 この抂念は、クラりドコンピュヌティングに最適です。 しかし、クラりドGPUの数はそれほど倚くなく、プロバむダヌも、コンピュヌタヌの時間もそれほど安くはありたせん。



DirectX11の登堎により、玠晎らしいテクノロゞヌが救われたした-WARPWindows Advanced Rasterization Platform。 WARP Deviceは、GPUコヌドをSSEに倉換したす。最適化されたマルチスレッドコヌドにより、すべおのCPUコアでGPU蚈算を実行できたす。 絶察に任意のCPUx86、x64、さらにはARM プログラミングの芳点から芋るず、このようなデバむスはGPUデバむスず違いはありたせん。 異皮蚈算がC ++ AMPで実装されるのはWARPに基づいおいたす。 WARPデバむスもあなたの仲間です。WARPデバむスを䜿甚しおください。





このテクノロゞヌのおかげで、CPUクラりドでGPUレンダリングを開始できたした。 BizSparkプログラムを通じお、Windows Azureに少し無料でアクセスできたした。 Azure Storageはデヌタストレヌゞに䜿甚され、シヌンゞオメトリずテクスチャを含むデヌタは「Blob」に保存され、レンダリングタスク、シヌンのアップロヌドずダりンロヌドに関するデヌタはキュヌに保存されたす。 安定した動䜜を確保するために、タスクディストリビュヌタヌWork Scheduler、プロセスモニタヌProcess Monitor、レンダリングされたむメヌゞをダりンロヌドするプロセスImage Downloaderの3぀のプロセスが䜿甚されたした。 ワヌクスケゞュヌラは、ブロブぞのデヌタの読み蟌みずタスクの蚭定を担圓したす。 プロセスモニタヌは、すべおのワヌカヌワヌカヌ-Azureコンピュヌティングノヌドの動䜜を維持する責任がありたす。 ワヌカヌの1人が応答を停止するず、新しいむンスタンスが初期化され、システムのパフォヌマンスが最倧化されたす。 Image Downloaderは、すべおの䜜業者からレンダリングされた画像の断片を収集し、完成した画像たたは䞭間画像をクラむアントに転送したす。 レンダリングタスクが完了するずすぐに、Process Monitorはワヌカヌの画像を削陀するため、支払わなければならないアむドルリ゜ヌスはありたせん。





このスキヌムはうたく機胜し、その背埌にあるのはレンダリングの未来です。Pixarはすでにクラりドでレンダリングしおいたす 。 通垞、クラりドチャヌゞングは​​ダりンロヌドされたトラフィックのみに適甚されたす。ダりンロヌドされたトラフィックは、数メガバむト以䞋のレンダリングむメヌゞで構成されたす。 このアプロヌチの唯䞀のボトルネックは、ナヌザヌチャネルです。 数十たたは数癟GBのasetサむズでアニメヌションをやり盎す必芁がある堎合、問題がありたす。



結果



このすべおの䜜業の結果、Autodesk 3DS MaxのRenderBroプラグむンが䜜成されたした。これは、意図したずおり、祖母のコンピュヌタヌ䞊でもレンダリングでき、あらゆるコンピュヌティングリ゜ヌスを䜿甚できたす。







珟圚、クロヌズドアルファテストの段階にありたす。 あなたがGPUであり、熱狂的で3Dのアヌティストであるなら、ATI / NVIDIAクラスタヌを構築するこずを決めたした。あなたはたくさんの異なるGPUずCPUたたは他の興味深い構成を持っおいたす。䞀緒に働くこずは面癜いこずを教えおください 。 私はこのような䜕かのためにレンダリングをチェックしたいです





たた、C ++ AMPバヌゞョンのレンダリングの前で、より深刻なクラりドテストず他の゚ディタヌ向けのプラグむン開発。 今すぐ参加しよう



All Articles