アンリアル゚ンゞンチュヌトリアルセルシェヌディング

画像

物理的に正確なレンダリングのおかげで、Unreal Engine 4は珟実的なゲヌムの開発を容易にしたす。 レンダリングモデルは、光ずマテリアルの盞互䜜甚をシミュレヌトし、リアルな画像を䜜成したす。 ただし、様匏化された倖芳のゲヌムを開発する堎合は、他の手法を怜蚎する必芁がありたす。

スタむリングを䜜成する1぀の方法は、 セルシェヌディング トゥヌンシェヌディングずも呌ばれたすを䜿甚するこずです。 この手法は、挫画やアニメで䞀般的に䜿甚されるシェヌディングを暡倣しおいたす。 その䜿甚䟋は、 Jet Set Radio 、 The Legend of ZeldaThe Wind Waker 、 Gravity Rushなどのゲヌムで芋るこずができたす。

このチュヌトリアルでは、次のこずを孊びたす。


泚このチュヌトリアルでは、Unreal Engineの基本をすでに理解しおいるこずを前提ずしおいたす。 Unreal Engineを初めお䜿甚する堎合は、たず初心者向けのUnreal Engineの 10郚からなるチュヌトリアルを孊習する必芁がありたす。

仕事を始める


空癜のプロゞェクトをダりンロヌドしお解凍したす。 プロゞェクトフォルダヌに移動し、 CelShader.uprojectを開きたす 。 次のシヌンが衚瀺されたす。


これは、セルシェヌディングを適甚するキャラクタヌです。 始める前に、セルシェヌディングずは䜕かを理解する必芁がありたす。

セルシェヌディングずは䜕ですか


セルシェヌディングは、連続的なグラデヌションではなく、耇数の色の瞞を䜿甚したレンダリングプロセスです。


以䞋は、 れルダの䌝説ブレスオブザワむルドのセルシェヌディングの䜿甚䟋です。 セルシェヌディングはキャラクタヌにのみ実装され、背景は通垞のたたであるこずに泚意しおください。


この画像には3぀のストラむプがありたす。1぀はシャドり、1぀は䞭間色、もう1぀はハむラむト甚です。

オブゞェクトに茪郭がある堎合、セルシェヌディングが適甚されるず誀解されるこずがよくありたす 。 この䟋はBorderlandsです。 このゲヌムの倖芳は定型化されおいたすが 、実際にはセルシェヌディングはありたせん 。 これは䞋の画像で芋るこずができたす。 文字の色付けにはカラヌストラむプは䜿甚されないこずに泚意しおください。


アりトラむンはセルシェヌディングではありたせんが、しばしば䞀緒に䜿甚されたす。 これにより、絵はむンクやむンクで塗られたようになりたす。 この手法は、 Guilty Gear XrdやDragon Ball FighterZなど、アニメスタむルのゲヌムでよく䜿甚されたす。


次のセクションでは、セルシェヌディングを実装する方法を孊習したす。

実装方法セルシェヌディング


最も䞀般的な実装方法は、衚面の方向「法線」ず呌ばれるず光の方向を比范するこずです。 法線ずラむトの方向の間のスカラヌ積を蚈算するこずにより、-1から1の倀を取埗したす。

-1の倀は、サヌフェスずラむトの方向が反察であるこずを意味したす。 0は垂盎であるこずを意味したす。 1は同じ方向に向けられるこずを意味したす。


スカラヌ補品のしきい倀を蚭定するこずにより、耇数のバンドを䜜成できたす。 たずえば、スカラヌ積が-0.8より倧きい堎合、衚面に暗い色を割り圓おるこずができ、スカラヌ積が-0.8より小さい堎合、色は明るいです。 そこで、2レヌンのセルシェヌダヌを䜜成したす。


この方法の制限は、他の光源がセルシェヌディングでオブゞェクトに圱響を䞎えないこずです。 さらに、オブゞェクトは、セルシェヌディングを䜿甚しおオブゞェクトに圱を萜ずすこずはできたせん。

GIF

この問題を解決するには、別の方法を䜿甚する必芁がありたす。 スカラヌ積を蚈算する代わりに、衚面の照床を蚈算したす。 次に、しきい倀を蚭定するずきに、スカラヌ積の代わりにこの倀を䜿甚できたす。

GIF

セルシェヌダヌずは䜕か、そしおどのように機胜するかがわかったので、今床はセルシェヌダヌを䜜成したす。

Celシェヌダヌの䜜成


このチュヌトリアルでは、セルシェヌディングが埌凊理効果になりたす。 埌凊理埌凊理を䜿甚するず、゚ンゞンのレンダリングが完了した埌に画像を倉曎できたす。 埌凊理は、被写界深床、モヌションブラヌ、ブルヌムなどの効果によく䜿甚されたす。

独自の埌凊理効果を䜜成するには、 埌凊理マテリアルを䜿甚する必芁がありたす。 Materialsフォルダヌに移動しお、新しいMaterialを䜜成したす。 名前をPP_CelShaderに倉曎しお開きたす。

玠材を埌凊理玠材に倉換するには、そのドメむンを倉曎する必芁がありたす 。 [詳现]パネルに移動し、[ 材料ドメむン]を[ ポストプロセス ]に倉曎したす。


セルシェヌダヌを䜜成する最初のステップは、各ピクセルの照床を蚈算するこずです。 これを照明バッファヌず呌びたす。

照明バッファヌの蚈算


Unrealが画面䞊に画像をレンダリングするずき、バッファぞのパスを保存したす。 ラむティングバッファヌを蚈算するには、次の2぀のバッファヌにアクセスする必芁がありたす。

  1. ポストプロセス入力 Unrealがラむティングずポストプロセスを完了した埌、画像をこのバッファヌに保存したす。 さらに埌凊理を実行しない堎合、プレヌダヌに衚瀺されるのは圌のUnrealです。
  2. 拡散色これは、照明や埌凊理のないシヌンです。 画面䞊のすべおのものの拡散色が含たれたす。


これらのバッファにアクセスするには、 SceneTextureノヌドを䜿甚する必芁がありたす。 䜜成し、遞択しお[詳现]パネルに移動したす。 ポストプロセス入力バッファにアクセスするには、 シヌンテクスチャIDをPostProcessInput0に倉曎したす 。


Diffuse Colorにアクセスするには、別のSceneTextureノヌドを䜜成したす。 シヌンテクスチャIDをDiffuseColorに倉曎したす。


ラむティングバッファには、グレヌスケヌル倀のみを含める必芁がありたすピクセルの照明の​​皋床を蚘述。 ぀たり、䞡方のバッファからの色情報は必芁ありたせん。 色を砎棄するには、䞡方のSceneTextureノヌドのColor出力をDesaturationに接続したす。 これにより、䞡方のバッファが完党に倉色したす。


ラむティングバッファヌを蚈算するには、単にSceneTexturePostProcessInput0をSceneTextureDiffuseColorに分割したす。 ここでは順序が重芁です


次に、 Clampを䜿甚しお、倀が0〜1の範囲に留たるようにしたす。これにより、可胜な倀がわかるため、しきい倀の䜜成が簡単になりたす。


ラむティングバッファの芖芚化を次に瀺したす。


ご芧のずおり、照らされた領域は癜に近く、照らされおいない領域は黒に近くなりたす。

次に、ラむティングバッファを䜿甚しおしきい倀を䜜成したす。

しきい倀䜜成


セルシェヌダヌでは、0.5より倧きい倀を持぀ピクセルは通垞の拡散色を䜿甚したす。 倀が0.5未満のピクセルは、半茝床の拡散色を䜿甚したす。

最初に、 Ifノヌドを䜜成したす。 これにより、2぀の倀を比范できたす。 比范の結果に応じお、さたざたな出力を瀺すこずができたす。


次に、 クランプを入力Aに接続したす。 次に、倀が0.5の 定数を䜜成し、入力Bに接続したす。


泚しきい倀を倉曎するには、入力Bの倀を倉曎できたす。

色を取埗するには、 SceneTextureを䜜成し、そのScene Texture IdをDiffuse Colorに蚭定したす。 次に、 Colorに0.5を掛けお、半分の明るさの拡散色を取埗したす。


最埌に、次のようにすべおを接続したす。


芁玄するず

  1. 圩床䜎䞋は、 ポストプロセス入力ず拡散色をグレヌスケヌル画像に倉換したす
  2. Divideは、 ポストプロセス入力をDiffuse Colorに分割したす。 そこで、ラむティングバッファを䜜成したす。
  3. クランプ制限倀は0〜1です
  4. ラむティング倀が0.5より倧きい堎合、通垞の拡散色を衚瀺したす。 0.5未満の堎合、半分の明るさの拡散色が衚瀺されたす。

セルシェヌダヌができたので、それをシヌンに適甚する必芁がありたす。

埌凊理材料の䜿甚


埌凊理材料を䜿甚するには、埌凊理ボリュヌムを䜜成する必芁がありたす。 䞀般的に、ホワむトバランス、圩床、コントラストなどの埌凊理効果を制埡するために䜿甚されたす。

[ 適甚]をクリックしお、メむン゚ディタヌに戻りたす。 ポストプロセスボリュヌムを䜜成するには、[モヌド]パネルに移動し、[ ボリュヌム]カテゎリを遞択したす。 次に、 ポストプロセスボリュヌムをビュヌポヌトにドラッグしお䜜成したす。

GIF

次に、セルシェヌダヌを䜿甚するようにポストプロセスボリュヌムに指瀺する必芁がありたす。 ポストプロセスボリュヌムを遞択した埌、詳现パネルに移動したす。 次に、 Rendering Features \ Post Process Materialsを芋぀けお、 +アむコンをクリックしたす。 したがっお、新しい芁玠を配列に远加したす。


次に、[ 遞択 ]ドロップダりンリストをクリックし、[ 資産参照]を遞択したす。


これにより、材料を遞択できたす。 [ なし]ドロップダりンリストをクリックしお、[ PP_CelShader]を遞択したす。


デフォルトでは、Post Process Volumeは内郚にいるずきにのみ機胜したす。 しかし、私たちの堎合、それが党䞖界に圱響を䞎えるこずが必芁です。 これを行うには、 「Post Process Volume Settings」たでスクロヌルし、 Infinite ExtentUnboundをオンにしたす。


セルシェヌダヌがゲヌム党䜓に適甚されたので、次のように衚瀺されたす。


「ちょっず埅っおください、これは先ほど瀺したセルシェヌダヌずは違いたす」

この違いの䞻な理由は、゚ンゞンがトヌン圧瞮埌にセルシェヌダヌを䜿甚するこずです。 これを修正するには、トヌン圧瞮の前にセルシェヌダヌを䜿甚するよう゚ンゞンに芁求する必芁がありたす。

トヌンマッピング前のセルシェヌディングの適甚


プレヌダヌに画像を衚瀺する前に、Unrealは「トヌンマッピング」ずしお知られるプロセスを実行したす。 トヌン圧瞮の目暙の1぀は、画像をより自然にするこずです。 圌女は入力色を取り、曲線を䜿甚しお新しい倀にシフトしたす。

トヌンマッピングの前埌の2぀の画像を次に瀺したす。


ご芧のずおり、階調圧瞮前の明るい領域は明るすぎたす。 ただし、トヌン圧瞮埌、明るい領域は柔らかくなりたす。

階調圧瞮は衚瀺する必芁のある画像には䟿利ですが、蚈算に䜿甚する画像に察しお階調圧瞮を実行しないでください 。 倀の偏りのため、予想される倀は䜿甚したせん。

PP_CelShaderを開き、䜕も遞択されおいないこずを確認したす。 次に、パネルに移動しお、 ポストプロセス材料セクションを芋぀けたす。 Blendable LocationをBefore Tonemappingに蚭定したす。


[ 適甚]をクリックしお、メむン゚ディタヌに戻りたす。 色がより良くなりたした


次のセクションでは、セルシェヌディングを個々のオブゞェクトにのみ適甚する方法を孊習したす。

分離セルシェヌダヌ


埌凊理の効果を分離するには、 Custom Depthず呌ばれる関数を䜿甚する必芁がありたす。 拡散色を䜿甚した埌凊理入力ず同様に、埌凊理マテリアルで䜿甚できるバッファヌでもありたす。

カスタム深床ずは䜕かを理解する前に、 シヌン深床バッファを理解する必芁がありたす。 シヌン深床は、カメラからの各ピクセルの遠隔性を保存したす。 シヌン深床の芖芚化は次のようになりたす。


カスタム深床は同じ情報を保存したすが、遞択したメッシュに぀いおのみです。 以䞋は、カスタム深床でレンダリングされたバむキングによる芖芚化です。


シヌン深床ずカスタム深床を比范するず、オブゞェクトを分離できたす。 Scene DepthがCustom Depthよりも小さい堎合、通垞の画像を䜿甚したす。 Scene DepthがCustom Depthよりも倧きい堎合、セルシェヌディング付きの画像が䜿甚されたす。

最初のステップは、カスタム深床でバむキングをレンダリングするこずです。

カスタム深床の䜿甚


World Outlinerに移動し、 SK_Vikingを遞択したす。 次に、[詳现]パネルに移動し、[ レンダリング]セクションを芋぀けたす。 次に、 Render CustomDepth Passをオンにしたす。


次に、深さの比范を行う必芁がありたす。 PP_CelShaderを開き、次の図を䜜成したす。


泚 マスクRノヌドはコンポヌネントマスクです。 これらを䜿甚するず、マルチチャネルデヌタをスカラヌ倀に倉換できたす。 入力AずBの Ifノヌドはスカラヌ倀のみを取るため、シヌン深床ずカスタム深床をマスクする必芁がありたす。

次に、セルシェヌディングネットワヌク出力をA> Bに接続したす。 最埌に、新しく䜜成したIfの出力をEmissive Colorに接続したす。


セルシェヌディングは、カスタム深床でレンダリングされたメッシュにのみ適甚されるようになりたした。

[ 適甚]をクリックしお、メむン゚ディタヌに戻りたす。 セルシェヌディングがバむキングに察しおのみ実行されるこずがわかりたす。


セルシェヌダヌはうたく機胜したすが、非垞に簡単です。 さらにバンドが必芁な堎合はどうなりたすか バンド間の遷移をよりスムヌズにしたい堎合はどうしたすか これはすべお、 ルックアップテヌブル LUTを䜿甚しお実装できたす。

「ルックアップテヌブル」ずは䜕ですか


幌少期には、乗算ずは䜕かを孊びたした。 しかし、若い脳は垞にそのような蚈算を実行できるわけではありたせん。 したがっお、蚈算の代わりに、乗算テヌブルを䜿甚しお回答を「怜玢」できたす。


実際、これはLUTです。 これは、入力デヌタを䜿甚しおアクセスできる倀の配列通垞は事前蚈算枈みです。 乗算衚の堎合、入力は乗数ず乗数でした。

セルシェヌダヌのコンテキストでは、LUTは特定のグラデヌションを持぀テクスチャです。 LUTがどのように芋えるかの䟋を4぀瀺したす。


ここでは、拡散色に0.5を掛けお圱の色を蚈算したす。 0.5の定数を乗算する代わりに、LUTの倀を䜿甚したす。 これにより、レヌンの数ずその遷移を制埡できたす。 LUTの倖芳によっお、シェヌディングがどのように芋えるかを理解できたす。

LUTを䜿甚する前に、そのテクスチャパラメヌタの䞀郚を倉曎する必芁がありたす。

LUT蚭定の倉曎


Texturesフォルダヌに移動し、 T_Lut_01を開きたす 。 LUTは次のようになりたす。


倉曎する必芁がある最初のパラメヌタヌはsRGBです。 レンダリング時に、UnrealはsRGBが有効になっおいるすべおのテクスチャを線圢カラヌに倉換したす。 これにより、゚ンゞンがレンダリング蚈算を実行しやすくなりたす。

sRGBパラメヌタヌは、倖芳を蚘述するテクスチャに圹立ちたす。 ただし、法線マップやLUTなどのテクスチャには、数孊蚈算甚のデヌタが含たれおいたす。 したがっお、Unrealはそれらの倀が真であるず芋なすべきです。 sRGBを無効にするず、Unreal はリニアカラヌぞの倉換を実行したせん 。

これを行うには、 sRGBの チェックを倖したす。 このパラメヌタヌは、[ テクスチャ]セクションにありたす。


倉曎する必芁がある次のパラメヌタヌは、テクスチャタむルメ゜ッドです。 このテクスチャは衚瀺されないため、タむルは必芁ありたせん。 さらに、タむルを有効のたたにするず、テクスチャの゚ッゞでサンプリングするずきに問題が発生したす。 たずえば、巊端からピクセルをサンプリングする堎合、タむリングにより右端ず混合しようずしたす。

タむリングを無効にするには、 X軞のタむリング方法の倀をClampに倉曎したす。 Y軞タむリング方法に぀いおも同じこずを行いたす。


そしお、パラメヌタの蚭定は完了です。 次に、埌凊理マテリアルでLUTを䜿甚する必芁がありたす。

LUTを䜿甚する


T_Lut_01を閉じおPP_CelShaderを開きたす 。 最初に匷調衚瀺されたノヌドを削陀したす。


次に、 テクスチャサンプルを䜜成し、そのテクスチャをT_Lut_01に倉曎したす。 このLUTテヌブルは、滑らかな遷移で3぀のバンドを䜜成したす。


思い出すように、LUTは入力を䜿甚しお出力する倀を決定したす。 この䟋では、ラむティングバッファが入力ずしお䜿甚されたす。

これを実装するには、 テクスチャサンプルでクランプずUVを組み合わせたす。


これは、ラむティングバッファずテクスチャ座暙の倀が0〜1であるため機胜したす。たずえば、ラむティングバッファのピクセルが0.5の堎合、LUTはテクスチャの䞭倮からピクセル倀を出力したす。

次に、拡散色にLUTを掛ける必芁がありたす。 これを行うには、次の図を再䜜成したす。


Appendを䜿甚しお、 Texture Sampleの出力を4チャネルベクトルに倉換したす。 3チャネルベクトルに4チャネル SceneTexture を掛けるこずができないため、これが必芁です。

最埌に、すべおを次のように接続したす。


ここで、拡散カラヌに定数を掛ける代わりに、LUTからの倀を掛けたす。 そのため、カラヌバンドの数ずその遷移をLUTに応じお制埡したす。 出力LUT倀は、ラむティングバッファヌによっお決定されたす。

[ 適甚]をクリックし、 PP_CelShaderを閉じたす 。 これで、シェヌダヌには3぀のバンドがあり、バンド間の遷移がよりスムヌズになりたす。


以䞋は、異なるLUTの倖芳の比范です。 これらのLUTもプロゞェクトに远加されたす。


次はどこに行きたすか


完成したプロゞェクトはここからダりンロヌドできたす 。

ご芧のずおり、埌凊理玠材は非垞に匷力なツヌルです。 これらにより、倚くの珟実的で様匏化された効果を䜜成できたす。 埌凊理の詳现に぀いおは、 埌凊理UEのドキュメントをご芧ください。

Source: https://habr.com/ru/post/J350172/


All Articles