今回はunityや3Dグラフィックの制作や調整に興味がある方向けにモデルデータの入力や出力の加工手順であるレンダリングパイプラインについてご紹介いたします。
ビルトインレンダリングパイプラインをはじめ、Unityの新しいレンダリングパイプラインであるSRP(スクリプタダブルレンダーパイプライン)のテンプレートである、HDRP、URPの特徴と機能まで詳しくご紹介いたします。
またSRPのテンプレートであるURPの導入方法も加えてお伝えいたしますので、レンダリングパイプラインにご興味がある方、HDRP、URPの違いにご興味がある方必見の内容となっておりますので、最後までお読みください。
目次
|そもそもレンダリングパイプラインとは
レンダリングパイプラインとはモデルデータの入力から出力までのレンダリングのための加工手順のことです。
レンダリングは入力データである、3Dモデルのポリゴンデータや、テクスチャデータを使用して画面や画像として出力することです。
3Dモデルファイルはモデルの形を形成するポリゴンデータや色を表現するマテリアルがあり、そのマテリアルにテクスチャが含まれています。
ポリゴンデータは3Dモデルのデータの事で、ポリゴンの集合です。
ポリゴン上の頂点で形成される多角形のことで、基本的にモデルデータで使用するポリゴンの頂点数は三または四頂点で構成されていることが多いです。
このポリゴンの頂点情報(座標や色など)を管理するためのバッファが用意されており、そのバッファを頂点バッファと呼びます。
テクスチャデータはbmpやpngなどの画像のことで、様々なフォーマットが使用可能です。
これらのテクスチャをメモリ上に読み込んで使用します。
また、レンダリングターゲットに描き込んでいる画像もテクスチャデータとして使用することができます。レンダリングパイプラインから出力された画像はメモリ上に保存されます。
このメモリ領域のことは「レンダリングターゲット」「バックバッファ」「サーフェース」などと呼ばれています。
このレンダリングターゲットの画像を画面に転送することでディスプレイ上で描画が行われます。
この描画までの一連のシステムをレンダリングパイプラインと呼びます。
Unityのレンダリングパイプラインには種類がいくつかあります。
ここからはビルドインレンダリングパイプライン、スクリプトダブルレンダリングパイプラインをはじめとするパイプラインの詳細をご紹介いたします。
ビルトインレンダリングパイプライン
まずはじめに紹介するレンダリングパイプラインはビルトインレンダリングパイプラインです。
こちらはunityでかなり前からあるパイプラインの一種です。
ビルトインレンダリングパイプラインの特徴については、主に次の点が挙げられます。
まず難しいことを考えなくても使えるという簡易さ、そして古いアセットを使うときに互換性を気にしなくても済む点です。
このようにビルトインレンダリングパイプラインはシンプルで使いやすく、また古いアセットとも相性が良いのでどうしても他のレンダリングパイプラインが扱いづらい場合には便利です。
しかしそれ以外には特にメリットはなく、後述でご紹介するURPと比べると処理速度等でどうしても見劣りしてしまうという大きな欠点もあります。
使用が考えられるシーンとしてはゲームジャムや単純な試作等、他のレンダリングパイプラインをセットアップする手間も惜しい時には未だに便利です。
また、どうしても古いアセットを使わなければならないときにも役に立ちます。
SRP(スクリプタブルレンダーパイプライン)
続いて紹介するレンダリングパイプラインは、SRP(スクリプタブルレンダーパイプライン)です。
SRPはUnityの比較的新しいパイプラインの種類です。SRPの特徴として、C# スクリプトを使用してレンダリングのコマンドのスケジュールと設定を行うことが可能で、SRP はこれらのコマンドを Unity の低レベルのグラフィックスアーキテクチャに渡し、グラフィックス API に指示を送信する働きをします。
この働きによってレンダリングの細かい調整と制御が可能になっています。
SRPにはUnity側でHDRP(ハイデフィニションレンダーパイプライン)とURP(ユニバーサルレンダーパイプライン)という二種類のテンプレートが用意されています。
ここからはその2種類のレンダリングパイプラインをご紹介いたします。
HDRP
Unityの「HDRP」とは「High Definition Render Pipeline」の略で、ここ数年で実装された新しいレンダリングパイプラインの一つです。
「物理ベースのレンダリングに基づいた先進的なグラフィックスを提供するレンダリングパイプライン」とunity公式サイト(https://learning.unity3d.jp/tag/hdrp/)では説明されています。
つまりHDRPはリアル表現が可能なレンダリングパイプラインということです。
後述でご説明するURPとの違いがよく引き合いに出されますが、比較した際のHDRPの特徴としてURPよりも高度な表現ができる反面、対応するプラットフォームは高性能なPC・一部のゲーム機に限られる(=今のところスマホゲーやブラウザゲーは作れない)という特徴があります。
HDRPは対応できるプラットフォームがかなり限られていることをご利用される方は留意する必要があります。
URP
ここからは前段でも少しご紹介したURPのご説明をさせていただきます。
URPとはユニバーサルレンダーパイプラインの略称です。
先ほどご紹介したHDRPと同様にSRPのテンプレートの一つです。URPのHDRPとの大きな違いとして、スマートフォンからゲーミングPCといったハイエンドのコンソールまでの幅広いプラットフォームで最適化されたグラフィクスを提供できるという点があります。
そのため様々なシーンでURPは活躍することが期待できます。ここからはこの汎用性の高いURPの特徴、導入方法をお伝えしてまいります。
|URPの特徴
ここからは、URPの特徴についてご紹介します。
先ほどもお伝えしましたがURPの特徴には汎用性の高さがあります。
それに加え、負荷の軽さや新機能を導入できる点といっ様々な特徴があります。
ここからは最も汎用性が高いレンダリングパイプラインの詳細について詳細な部分まで紹介します。
軽量なレンダリングパイプライン
一つ目の特徴はURPは軽量なレンダリングパイプラインだということです。
グラフィックの品質はビルトインRPとそこまで変わりませんが、URPは描画処理が最適化されており負荷が軽いのが大きなメリットです。
URPとHDRP両方を同じ環境で同じ内容を描画する実験をしたところ次のような結果になりました。
URPの描画負荷の一つの目安となるBachesの値は「236」でした。
Batchesの値がかなり低く、描画が最適化されていることが分かります。
HDRPのBachesの値は「261」でした。HDRPは非常にリッチな表現を行っているせいか、スクリプト由来の処理負荷が他と比べてかなり高くなっていることが分かります。
URPのBatchesの数はかなり抑えられており、描画処理自体は最高レベルに最適化されていると言えます。この負荷の軽さが様々な環境で適合する理由となっています。
Shader Graph等の新機能を使える
次に二つ目の特徴はShader Graphなどの新機能を使えることです。
例えば今まではシェーダーはコードを書いて作る必要がありましたが、URPを採用すればShader Graphという「ノードをつないで視覚的にシェーダーを作れる機能」を使うことができるようになります。
また、そのほかにもParticle Systemの進化版である「Visual Effect Graph」、2Dゲームにライトを導入できる「Light 2D」といった新機能も使えるため表現の幅が広がります。
「Visual Effect」はノードをつないでいくことで視覚的にエフェクトを作れるシミュレーションにGPUを使っており、大量のパーティクルを高速で処理できるといった利点を持っております。
このような新機能を使える点もURPの特徴そして利点です。
ビルトインRPとは互換性
最後に三つ目の特徴は従来のビルトインRPとは互換性がないことです。つまりビルトインRP用のStandard Shader等は使えないのでご注意ください。
ちなみに特に注意が必要なのがアセットストアのアセットです。
古いものはURPには対応していない可能性が高いですし、最近のものでも例えばHDRP用とURP用が別売りになっていたりする場合もあるので、購入するときは注意が必要です。
正確に言うと、ビルトインRP用の標準マテリアルは変化できるのですが、ビルトインRP専用の「アセット独自のシェーダー」を使ったマテリアルは変換できないので注意が必要ということになります。
|URPの導入方法
ではここからはURPを実際に環境に導入する方法をお伝えしようともいます。
URPの導入方法は大きく分けて二つあります。
「プロジェクトを新規作成する方法」と「既存のプロジェクトをURPに対応させる方法」です。
それでは、詳しく解説します。
プロジェクトを新規作成する場合
ではまずプロジェクトを新規で作成する場合の手順をご紹介いたします。
まずUnity HUBを使っている場合、プロジェクト作成ウィンドウを開いていただき、その中のTemplateからUniversal Project Templateという項目を選択します。
新規作成の場合はこれだけでセットアップまで完了している状態のプロジェクトが作成されます。
この手順のみでプロジェクトを新規作成する場合はURPを導入することが可能です。
既存のプロジェクトをURPに対応させる場合
次に既存プロジェクトをURPに対応させる場合の手順をご紹介いたします。
まずPackage Managerから「Universal RP」を検索してインストールします。インストールが終わったら、下記の通り初期設定を行います。
Assets > Create > Rendering > Universal Render Pipeline > Pipeline Asset(Forward Renderer)でアセットを作る
Edit > Project Settings > Graphics > Scriptable Render Pipeline Settingsに1で作ったアセットをセット
下記のようにアセットが設定できていれば問題はありません。
ここで作ったPipeline Assetのインスペクタを見るとレンダリングパイプラインの設定ができることがわかります。従来のパイプラインではQuality Settingsで設定していた項目だったり、従来のパイプラインではできなかったレンダーターゲットの解像度設定などができます。
以上の手順を実行いただくと既存のプロジェクトにもURPを対応させることができます。
|まとめ
ここまでレンダリングパイプラインの基本的な知識から、レンダリングパイプラインの種類と特徴、そして最も汎用性が高いレンダリングパイプラインであるURPの特徴、そして導入方法まで詳細にお伝えいたしました。
いかがだったでしょうか。
3Dグラフィックの制作に興味のある方が自分に合ったレンダリングパイプラインを選択できていれば幸甚です。
ここまでお読みいただきありがとうございました。