このサイトはダイキン工業が運営するCG業界ニュースサイトです。
お問い合わせ

「Unite Tokyo 2018」講演レポート ~カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!~(2)

「Unite Tokyo 2018」講演レポート ~カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!~(1)から続く

 

シェーダーの調整や最適化で高速化するUnity

影をレンダリングする手順としてはまず、シャドウマップをレンダリングするカメラであるシャドウカメラを作成する。次に、シャドウマップ用のRenderTextureを作成してから、シャドウマップレンダリング用シェーダーを作り、シャドウマップレンダリングするシェーダーにキーワードを付与する。そしてメインカメラ(視点カメラ)には「C#コード」をコンポーネントとして追加し、影を受けるシェーダーに影をレンダリングするコードを追加していく。

 

「シャドウカメラを作るときは、GameObjectのCameraを追加しdisableにしておきます。そして、orthographicに設定し範囲を調整すればOKです。次に、シャドウマップ用RenderTextureを作るにはAssetsメニューでRenderTextureを作成してしまえば早く出来上がります。フォーマットについては、『enderTextureFormat.Shadowmap』のほうがハードウェア比較機能を使うことができるので圧倒的にラクです」(冨澤氏)

 

なお、シャドウマップレンダリングするシェーダーにキーワードを付けるときには、シャドウマップ用シェーダーと影を落とすモデルのシェーダーに対して、同じ「RenderType」のキーワードを指定すると良い。

「次にマトリクスですが、自分でマトリクスを作れば各技法を実装可能な上、わざわざシャドウカメラを移動する必要がないので非常に便利になります。ただし、GL.GetGPUProjectionMatrix() 関数を呼ぶ必要があることは覚えておいてください」(冨澤氏)

 

次に、モバイル用物理ベースレンダリングの話に移る。

「『TEKKEN』は、フォトリアルを追求していないので光学物理シミュレーションを目指していません。そこで、物理ベースレンダリングで使われる関数BRDFを使っています。このことを私たちは、BRDF(Bidirectional Reflectance Distribution Function)法レンダリングと呼んでいます。

このBRDF法レンダリングの導入は、リニア空間のHDRでおこなっています。ハイスペックハードウェアではハードウェアガンマ補正があり、HDRレンダーターゲットがあり、マルチプルレンダーターゲットがありますが、MRTは使わずにForward Renderingで考えてみます。

ハイスペックの BRDF法レンダリングは、HDR で計算してHDRレンダーターゲットに書き込んでいきます。これらをすべてのオブジェクトに対して繰り返していきます。すべて描き終わったら、HDRレンダーターゲットの輝度から目標の輝度を求めてトーンマッピングをおこないます」(冨澤氏)

 

「TEKKEN」はモバイルアプリのため、どのくらいのスペックに合わせるかという問題が発生する。また、OpenGL ESバージョンをいくつにするか、Vulkan/Metalに対応するかどうか、GPU メーカー固有フォーマットに対応するかどうかといった問題もあるという。

「想定するスペックとして、ハードウェアガンマ補正はしないということを決めました。そしてテクスチャー圧縮についてですが、『TEKKEN』ではOpenGL ES3.0以上で行くことを決めたためETC2にしました。また、アルファチャンネルは本来の透過度で使用。PVRTCはアルファチャンネル含めると画質が落ちるので、使わないと決めました。そのほか、マルチプルレンダーターゲットは無しとして、レンダーターゲットのRGBA8はGPUのスペックを考慮しています」(冨澤氏)

 

モバイル版BRDF法レンダリングでは、テクスチャーをリニア空間へ変換しHDRで計算する。そして、あらかじめ設定しておいたEV補正値で露出補正し同時にトーンマッピングとガンマ補正をする。このようにすることで、ひとつのシェーダー内でBRDF法レンダリングができるようになった。また、他のリニア空間ではないオブジェクトとも調和し、アルファブレンディングとの相性も良いという。

「Unity はかなりカスタマイズができます。また、CPUが重たければ自分で書くこともできるために軽量化することも可能です。そして、自分でシェーダーを書くことにより、GPU負荷も自分でコントロールできるようになります。GPU負荷のほとんどがピクセルシェーダーの処理時間になると思いますので、それを調整したり最適化したりすることで高速化が実現できるようになるわけです」

 

以上の言葉をまとめとして、約48分間の本講演が終了した。