LoginSignup
1
3

More than 5 years have passed since last update.

UE4 でレンダリングへの長い道のりーシェーディングについてー

Posted at

環境

UE 4.10.0

概要

Unreal Engine 4 のレンダリングの初歩を学ぶ
今回はシェーディングに関してのメモ

本文

UE4 の描画周りを確認してみた

ゲームエンジンやライブラリで描画周りを確認するには、何か適当なものを描画するのが早い。
とりあえず HLSL で軽くシェーダでも書いてみるかと思ってサンプルを探してみるが、見当た
らない。UE4 では、ノードベースでマテリアルを構築していくらしい。と言っても、その構築
したマテリアルが最終的にシェーダコードに変換され、それがクロスコンパイルされる事でマル
チプラットフォームに対応するようだ。

マテリアルを理解する者は描画を制す

UE4 のレンダリングのドキュメントを見てみると「物理ベースレンダリング」「ディファード
シェーディング」「グローバル イルミネーション」など難しそうな単語が並ぶ。しかしゲーム
エンジンやライブラリがどんな描画システムになっていようが、要はシェーダに「どんなパラ
メータ」を渡し、「どんな計算をしている」か?に尽きる。最近のゲームエンジンやライブラ
リでは、シェーダパラメータをマテリアルに格納して、レンダリングスレッドに渡す事でプリ
ミティブを描画している。UE4 でもそれは同じだ。即ち UE4 の描画を理解するにはマテリアル
への理解を深めていくのが良い。

シェーディングとは?

シェーディングは、シェーダの「どんな計算をしている」の部分を指している。
もう少し詳しく言えば、ライティングをマテリアルが反射する際の計算式を指している。
昔の Direct3D では、シェーディングにフラットシェーディングとグーローシェーディングが
あり SetRenderState 関数で切り替えていたが、それと似たようなものだ。

UE4 ではマテリアルに格納した情報でシェーディングを切り替える。
UE4 のシェーディングは、目的別にいくつか存在する。物理ベースレンダリングなのだから、
パラメータを適切に設定すれば、どんなものでも表現できるのでは?と思うかもしれない。
たしかに、パラメータを適切に設定すればかなりのものをそれっぽく表現できる。しかし、レン
ダリングするものによっては無駄が非常に多い場合もある。例えば、ライティングを必要としな
い物体を計算する場合、ライティングに関係するパラメータを全てデフォルト(計算結果が変化
しない値)に設定して計算するより、マテリアルからライティングに関係のあるパラメータを省き
計算式も省略したもので計算する方が高速な計算が行える。
また、物理ベースの計算ではうまく表現ができないものも存在する。そういった物体を計算する
には別の計算式を使用した方が、計算が高速に行えたりレンダリング結果が適切になったりする。

UE4 のシェーディング

UE4 のシェーディングは、私は 3 種類に大別している。

  • 物理ベースレンダリング
    ここに分類できるのは、以下のシェーディングだ。
    [Default Lit]
    このシェーディングは、ライティング計算ありの通常の物理ベースのレンダリングを行う
    [Unlit]
    このシェーディングは、ライティング計算なしの物理ベースのレンダリングを行う

  • サブサーフェススキャッタリング( SSS )
    サブサーフェススキャッタリングとは、光が半透明な物体の表面を透過し、物体の内部で散乱した
    した光が表面から出て行く仕組みの事を指す。”半透明な物体”と聞くと、半透明描画に使用する
    ものかと思うが、そういうわけではない。描画の扱いで不透明な物体としてレンダリングするオブ
    ジェクトも、マテリアルの性質に合わせてこのシェーディングを選択した方が、よりクオリティの
    高いレンダリングができる。
    [Subsurface]
    このシェーディングは SSS の汎用的な計算を行う場合に使用する
    [Preintegrated Skin]
    このシェーディングは、人間などの肌のシェーディングを行う場合に使用する。
    直訳すると「事前積分計算による肌シェーディング」という事だろうか。
    事前計算とあるように SSS 計算にルックアップテーブルを使用する為高速に計算が可能なようだ
    [Subsurface プロファイル]
    このシェーディングは、人間などの肌や滑らかな表面を持つものに使用する。
    UE 4.5 にて実装された、スクリーン空間でのフィルタリングを用いた SSS の計算を行う。
    スクリーン空間のフィルタリングを行うという計算の性質上、他の SSS のようにライティング時
    に計算は行わず、ポストプロセスにて計算を行う。その際にサブサーフェスプロファイルアセット
    というアセットを使用する。アセットを準備しておく必要があるが、その分高品質なレンダリング
    が可能になる
    [Two Sided Foliage]
    このシェーディングは、樹木の葉や紙などの薄い形状を持つものに使用する。
    フォリッジとは茂っている木の葉全体の事を指し、その名の通り Epic のサンプルでは木の葉に
    使用されている。UE 4.7 にて実装され、SSS とは透過した光に対する計算が異なる。木の葉など
    の薄い形状を持つ物体は薄い面に光が出やすい性質があり、このシェーディングではそういう性質
    を上手く表現する計算を行う

  • その他
    [Clear Coat]
    このシェーディングは、アクリルやラッカーのコーティング素材やカーペイントなど
    に使用する。UE4 のドキュメントによると半透明層のフィルムを持つマルチレイヤー
    のマテリアルをより適切にシミュレーションするのに使用できるとある。要するに、
    サーフェスに適用するマテリアルのブレンドを行う際に使用するのだろう。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3