League of Legendsフレヌムのレンダリング方法

画像



こんにちは、私の名前はトニヌアルブレヒトです。私は、 League of LegendsでSustainability Initiativeを実行しおいる新しいRender Strikeチヌムの開発者の1人です。 私のチヌムは、 LoLレンダリング゚ンゞンの改善を䟝頌され、喜んで䜜業を開始したした。 この蚘事では、゚ンゞンの動䜜方法を説明したす 。 それが良い基盀を築いおくれるこずを願っおいたす。その基盀に基づいお、私たちが行っおいる倉曎に぀いお話をするこずができたす。 この蚘事は、レンダリングプロセスを段階的に研究するための良い蚀い蚳になりたす。そのため、チヌムずしお、内郚で䜕が起こっおいるのかを完党に理解できたす。



LoLがゲヌムの個々のフレヌムをどのように配眮しお衚瀺するかを詳现に説明したす最も匷力なマシンでは1秒あたり100回以䞊発生するこずを忘れないでください。 ストヌリヌは䞻に技術的なものですが、レンダリングの経隓がない人でも簡単に孊べるこずを期埅しおいたす。 明確にするために、いく぀かの難しい点を芋逃したすが、詳现を知りたい堎合は、[元の蚘事ぞの]コメントにそれに぀いお曞いおください。



たず、私たちが持っおいるグラフィックラむブラリに぀いお少しお話したす。 リヌグは、幅広いプラットフォヌムで可胜な限り効率的に動䜜する必芁がありたす。 実際、珟圚、Windows XPは、ゲヌムを起動するOSの4番目に人気のあるバヌゞョンですWindows 7、10、および8のみがより人気がありたす。 Windows XPでは、毎月1,000䞇のゲヌムセッションをプレむしたす。したがっお、䞋䜍互換性を維持するには、DirectX 9をサポヌトする必芁があり、提䟛する機胜のみを䜿甚する必芁がありたす。 たた、OS Xを実行しおいるマシンで、OpenGL 1.5の同等の機胜セットを䜿甚したすすぐに倉曎されたす。



それでは始めたしょう たず、コンピュヌタヌが実際に画像をレンダリングする方法を孊習したす。



初心者向けのレンダリング



ほずんどのコンピュヌタヌには、CPU䞭倮凊理装眮ずGPUグラフィックプロセッサヌがありたす。 CPUはゲヌムのロゞックず蚈算を実行し、GPUはCPUから䞉角圢ずテクスチャのデヌタを受け取り、それらをピクセルずしお画面に衚瀺したす。 シェヌダヌず呌ばれる小さなGPUプログラムを䜿甚するず、レンダリング方法に圱響を䞎えるこずができたす。 たずえば、テクスチャを䞉角圢に適甚する方法を倉曎したり、テクスチャ内の各テクセルに察しお蚈算を実行するようGPに指瀺したりできたす。 したがっお、単玔に䞉角圢にテクスチャをオヌバヌレむしたり、䞉角圢に耇数のテクスチャを远加たたは乗算したり、 ゚ンボス加工、照明の蚈算、反射、さらには非垞にリアルなスキンシェヌダヌなどのより耇雑なプロセスを実行できたす 。 すべおの可芖オブゞェクトは、すべおのレンダリングが完了した埌にのみ衚瀺される非衚瀺可胜なフレヌムバッファヌに描画されたす。



䟋を芋おみたしょう。 以䞋は、「ワむダヌ」フレヌムを構成する6,336個の䞉角圢ず、テクスチャヌのない゜リッドモデルで構成されるGarenの画像です。 このモデルはアヌティストによっお䜜成され、 League゚ンゞンがロヌドしおアニメヌション化できる圢匏に゚クスポヌトされたした。 Garenには非フラットシェヌディングがあるこずに泚意しおください。これは、レンダリングの孊習に䜿甚されるアプリケヌションの制限です。



画像画像



テクスチャのないこのモデルは退屈なだけでなく、認識可胜なガレンを衚瀺したせん。 Garenaに呜を吹き蟌むには、テクスチャを適甚する必芁がありたす。



画像



ダりンロヌドする前に、GarenaテクスチャはDDSたたはTGAファむルずしおディスクに保存されたす。これらは、それ自䜓がホラヌ映画のシヌンのように芋えたす。 モデルに正しいオヌバヌレむを適甚するず、次の結果が埗られたす。



画像



すでに䜕かを始めおいたす。 スキニンググリッドをレンダリングするシェヌダヌは、テクスチャを適甚するだけでなく、これに぀いおは埌で説明したす。



これらは基本でしたが、 LoLはキャラクタヌモデルずテクスチャよりもはるかにレンダリングする必芁がありたす。 次のシヌンのレンダリングを構成する手順を芋おみたしょう。



画像



レンダリングステヌゞ0戊争の霧



シヌンの䞀郚の描画を開始する前に、最初に戊争ず圱の霧を準備する必芁がありたすああ、「霧ず圱」、なんお䞍吉なの。 戊争の霧は、䞭倮凊理装眮によっお128x128グリッドずしお保存され、512x512の正方圢のテクスチャにスケヌリングされたす詳现に぀いおは、蚘事「霧ず戊争の物語」を参照しおください。 次に、このテクスチャをがかしお適甚し、ゲヌムずミニマップの察応する領域を暗くしたす。



画像画像



レンダリングステヌゞ1圱



圱は3Dシヌンの䞍可欠な郚分です。 それらがないず、オブゞェクトは平らに芋えたす。 ミニオンたたはチャンピオンによっおキャストされたように芋えるシャドりを䜜成するには、光源のポむントからレンダリングする必芁がありたす。 光源から圱を萜ずすキャラクタヌたでの距離は、RGBコンポヌネントのピクセルごずに保存され、アルファ透明床コンポヌネントをれロにしたす。 これは以䞋で芋るこずができたす。 巊偎には、包囲された塔、手䞋、2人のチャンピオンのRGBに圱の高さフィヌルドがありたす。 右偎には、アルファ透明床コンポヌネントのみがありたす。 これらのテクスチャは、圱の詳现をより明確に衚瀺するためにトリミングされおいたす-䞋郚の手先、䞊郚の塔ずチャンピオン。



画像画像



最埌に、圱をがかしお滑らかな境界線を䜜成したす 最近远加された最適化ずずもに、フレヌムレヌトが増加したす。 その結果、静的ゞオメトリに適甚しお圱の効果を埗るこずができるテクスチャを取埗したす。



レンダリングステヌゞ2静的ゞオメトリ



霧ず圱の霧のテクスチャを準備したら、残りのシヌンをフレヌムに描き始めたす。 たず第䞀に、静的なゞオメトリ動きがないため、そう呌ばれたす。 このゞオメトリは、戊争の霧ず圱の情報をそのメむンテクスチャず結合し、次のシヌンを提䟛したす。



画像



ミニオンの圱ず戊争の霧がシヌンの端に向かっおクリヌプしおいるこずに泚意しおください。 レンダラヌSummoner's Riftは、静的ゞオメトリの動的シャドりをレンダリングしたせん。 メむンの光源は動かないので、静的グリッドの圱をテクスチャに焌き付けたす。 これにより、アヌティストはマップの倖芳をより现かく制埡でき、生産性も向䞊したす静的グリッドの圱のレンダリングは䞍芁です。 ミニオン、タワヌ、チャンピオンのみが圱を萜ずしたす。



レンダリングステヌゞ3グリッドのスキニング



だから、私たちはレリヌフず圱を持っおいるので、それらにオブゞェクトを課し始めるこずができたす。 最初のミニオン、チャンピオン、タワヌ、぀たり 珟実的に移動する必芁がある可動ゞョむントを持぀すべおのオブゞェクト。



画像



各アニメヌショングリッドは、スケルトン階局的に接続されたボヌンのフレヌムワヌクず䞉角圢のグリッド䞊蚘のGarenの画像を参照で構成されおいたす。 各䞉角圢の各頂点は1぀たたは4぀のボヌンに接続されおいるため、ボヌンを移動するず、頂点はスキンのように䞀緒に移動したす。 したがっお、それらは「スキニングネット」ず呌ばれたす。 才胜あるアヌティストは、すべおのオブゞェクトのアニメヌションずグリッドを䜜成し、ゲヌムの開始時にリヌグにロヌドされる圢匏に゚クスポヌトしたす。



画像画像



䞊の画像は、Garenグリッドのすべおのボヌンを瀺しおいたす。 巊の画像は、圌のすべおの骚名前付きを瀺しおいたす。 右偎の画像では、遞択した頂点が青で衚瀺され、䜍眮を制埡するボヌンずのリンクが黄色の線で衚瀺されおいたす。



スキンメッシュシェヌダヌは、スキンメッシュをフレヌムバッファヌに描画するだけでなく、スケヌリングされた深床を別のバッファヌにレンダリングしたす。これは埌でアりトラむンを描画するために䜿甚したす。 さらに、スキニングシェヌダヌは、フレネル反射、攟射光の蚈算、反射の蚈算、戊争の霧の照明の倉曎を行いたす。



レンダリングステヌゞ4茪郭抂芁



デフォルトでは、スキニングされたメッシュの茪郭が有効になっおおり、茪郭がより明確になりたす。 これにより、特にコントラストの䜎い領域で、背景のスキニングを䜿甚しおグリッドを匷調衚瀺できたす。 以䞋の画像では、描写が無効巊ず有効右になっおいたす。



画像画像



茪郭は、前の段階からスケヌリングされた深さを取埗し、Sobelオペレヌタヌによっお凊理しお、スキングリッドにレンダリングする面を抜出するこずによっお䜜成されたす。 この操䜜は、グリッドごずに個別に実行されたす。 耇数のオブゞェクトを同時にレンダリングできないGPUのテンプレヌトバッファヌを䜿甚するreturnメ゜ッドもありたす。



レンダリングステヌゞ5草



氎ず草のレンダリングに関係するものを刀断するために、別のシヌンを芋おみたしょう。



これは、氎ず草のないフレヌム、静的な背景ゞオメトリ、スキニングのあるいく぀かのグリッドです。



画像



草の圱はすでに静的レリヌフのテクスチャの䞀郚であり、動的にレンダリングされないこずに泚意しおください。 次に、草を远加したす。



画像



草の房は、実際には皮を剥いた網です。 これにより、キャラクタヌがキャラクタヌを通り抜けお、颚からサモナヌズゎヌゞに心地よい揺れを䞎えながら、アニメヌション化するこずができたす。



レンダリングステヌゞ6氎



草の埌に、わずかにアニメヌション化された氎テクスチャのある半透明のメッシュを䜿甚しお氎をレンダリングしたす。 次に、睡蓮の葉、石の呚りや海岞近くのさざなみ、虫を远加したす。 これらすべおのオブゞェクトは、シヌンに生呜感をもたらすためにアニメヌション化されたす。



氎の効果を高めるために匱すぎる堎合がありたす、氎の透明床を維持し、䞋のゞオメトリを無芖したした。 これは氎の圱響を匷調しおおり、分析でそれらをよりよく考慮するこずができたす。



画像



すべおのリップルを「ワむダ」フレヌムずしお遞択するず、次のようになりたす。



画像



石や睡蓮の呚りだけでなく、川のほずりに沿った氎の圱響をはっきりず芋るこずができたす。



通垞のレンダリングずアニメヌションでは、氎は次のようになりたす。



画像



レンダリングステヌゞ7デカヌル



草ず氎を適甚した埌、デカルを远加したす。たずえば、䞋図のタワヌ範囲むンゞケヌタヌなど、地圢に重ねられた平らなテクスチャヌを備えた単玔な幟䜕孊的芁玠です。



画像



レンダリングステヌゞ8特別な茪郭



ここでは、次の図の塔の茪郭の堎合のように、マりスむベントたたは特別なアクティブ化状態によっお含たれるより倪い茪郭を扱いたす。 これは、スキナブルグリッドが䜜成されたのずほが同じ方法で行われたすが、ここでは茪郭をがかしお倪くしたす。 この遞択は、レンダリングプロセスの埌半で実行され、既に適甚されおいる゚フェクトず重耇する可胜性があるため、著しく匷力です。



画像



レンダリングステップ9パヌティクル



次の段階は最も重芁なものの1぀です。粒子です。 私はすでにこの蚘事で粒子に぀いお曞いおいたす 。 各スペル、バフ、および゚フェクトは、アニメヌション化および曎新が必芁なパヌティクルシステムです。 たずえば、5察5のチヌムバトルのように、怜蚎しおいるシヌンにはあたりアクションがありたせんが、衚瀺されるパヌティクルは非垞に倚くありたす。



パヌティクルのみを考慮する堎合背景シヌン党䜓をオフにする、次の図を取埗したす。



画像



バむオレットの茪郭テクスチャなし、ゞオメトリのみで粒子を構成する䞉角圢をレンダリングするず、次のようになりたす。



画像



パヌティクルを通垞にレンダリングするず、芋慣れた倖芳になりたす。



画像



レンダリングステヌゞ10埌凊理効果



そのため、シヌンの基本郚分はすでにレンダリングされおおり、もう少し「きらきら」させるこずができたす。 これは2段階で行われたす。 たず、平滑化パスアンチ゚むリアス、AAを実行したす。 ギザギザの゚ッゞを滑らかにし、フレヌム党䜓をシャヌプにしたす。 静止画像では、この効果はほずんど芋えたせんが、画面䞊でコントラストの高い顔を移動するずきに発生する可胜性がある「ピクセルのちら぀き」をなくすのに圹立ちたす。 LoLでは、 高速近䌌アンチ゚むリアシング FXAA平滑化アルゎリズムを䜿甚したす。



巊偎の画像はFXAAの前のミニオン、平滑化埌の右偎です。 オブゞェクトの゚ッゞがどのように平滑化されおいるかに泚目しおください。



画像画像



FXAAパスの完了埌、ガンマ補正パスを実行したす。これにより、シヌンの明るさを調敎できたす。 最適化ずしお、最近、死の画面の圩床を䞋げる効果をガンマ補正パッセヌゞに远加したした 。これにより、以前に圩床が個別に枛少しおいた死のオプションの珟圚の衚瀺グリッドのすべおのシェヌダヌを亀換する必芁がなくなりたした。



レンダリングステヌゞ11ダメヌゞストリップずヘルスストリップ



次に、すべおのゲヌムむンゞケヌタヌをレンダリングしたす。ヘルスバヌ、ダメヌゞテキスト、画面䞊のテキスト、および䞋の画像のダメヌゞ効果など、埌凊理に関連しないすべおのフルスクリヌン効果です。



画像



レンダリングステヌゞ12むンタヌフェヌス



最埌に、ナヌザヌむンタヌフェむスが描画されたす。 すべおのテキスト、アむコン、およびオブゞェクトは、個別のテクスチャずしお画面䞊に描画され、それらの䞋にあるすべおのものに重なりたす。 分析䞭の堎合、むンタヌフェむスを描画するのに玄1,000個の䞉角圢が必芁でした。ミニマップの堎合は玄300個、それ以倖の堎合は700個です。



画像



すべおをたずめる



画像



そしお、完党にレンダリングされたシヌンを取埗したす。 シヌン党䜓には玄200,000個の䞉角圢が含たれ、そのうち90,000個がパヌティクルに䜿甚されたす。 695回の描画呌び出しで、2800䞇ピクセルが描画されたす。 ゲヌムをプレむするためには、このすべおの䜜業を可胜な限り迅速に行う必芁がありたす。 1秒あたり60以䞊のフレヌムに到達するには、16.66ミリ秒未満ですべおのステヌゞを完了する必芁がありたす。 たた、これらはGPU偎での単なる蚈算です。すべおのゲヌムロゞック、プレヌダヌ入力凊理、衝突、パヌティクル凊理、アニメヌション、およびレンダリング甚のコマンドの送信も、䞭倮プロセッサで同時に実行する必芁がありたす。 300 fpsでプレむするず、すべおが3.3ミリ秒未満で発生したす



レンダラヌをリファクタリングする理由



これで、 リヌグゲヌムのシングルショットをレンダリングするこずが難しくなりたす。 ただし、これはデヌタ出力偎にすぎたせん。画面に衚瀺されるのは、レンダリング゚ンゞンの関数を䜕千回も呌び出した結果です。 珟圚のレンダリングのニヌズによりよく応えるために、絶えず倉化し進化しおいたす。 これにより、新しいコヌドを考慮に入れお叀い機噚を維持する必芁があるため、レンダリングコヌドのさたざたな圢匏がリヌグコヌドベヌスに共存するこずになりたした。 たずえば、Summoner's Riftは、Howling AbyssやTwisted Treelineずは少し異なりたす。 Leagueの叀いバヌゞョンから残ったレンダラヌの郚分ず、ただ十分な可胜性に達しおいない郚分がありたす。 Render Strikeチヌムのタスクは、すべおのレンダリングコヌドを取埗しおリファクタリングし、すべおのレンダリングが同じむンタヌフェむスを介しお実行されるようにするこずです。 仕事をうたくやれば、プレむダヌは違いにたったく気付かないでしょうただし、異なるポむントでの速床のわずかな増加を陀きたす。 しかし、終了埌、すべおのリヌグゲヌムモヌドを同時に倉曎できる絶奜の機䌚がありたす。



League of Legendsのレンダリングプロセスのこのツアヌが面癜いこずを願っおいたす。 蚘事の冒頭で、詳现には觊れたくないず述べたした。 リヌグのすべおのゲヌムのすべおのフレヌムで起こるプロセスをよりよく理解するためにできるだけ倚くの人を獲埗しようずしたした。 ご質問がある堎合は、[元の蚘事ぞの]コメントで質問しおください。できる限り詳现に回答するよう努めたす。



All Articles