2015年08月21日

Unity 5でG-Bufferのテスト

OpenGL+GLSLの頃には、大体G-Bufferを使った遅延シェーディング(Deferred Shading)をやっていたので、Unity 5でやる場合のメモです。Unityも5から遅延シェーディングに対応したはずで、G-Bufferも取得できるそうです[1]。

シェーダ
_CameraGBufferTexture0: RGB拡散反射色、Aは未使用
_CameraGBufferTexture1: RGB鏡面反射色、Aは粗さ
_CameraGBufferTexture2: RGB法線ベクトル(0〜1)、Aは未使用
_CameraGBufferTexture3: 発光とかライティングとかも入ったテクスチャ

ということで、深度バッファはG-Bufferの中には入っていないようです。深度バッファは別枠で指定できるようです[2][3]。

カメラのスクリプト内のどこか
_camera.depthTextureMode |= DepthTextureMode.Depth;

シェーダ
sampler2D _CameraDepthTexture;

というわけで、[4]を参考にさせていただき、GBufferを切り替えるサンプルを作成してみました。

手順
1. 床とStandard Assets→Characters→ThirdPersonCharacter→Prefabs→ThirdPersonControllerを追加
2. 必要ないけれどStandard Assets→Environment→Water→Water→Prefabs→WaterProDaytimeを追加
3. Edit→Project Settings→Player→Rendering PathをDeferredにしておく

Ethanのマテリアルを適当に変更したりした結果
Unity5_gbuffer_001.png

4. AssetsにMaterials, Shaders, Scriptsディレクトリを作成
5. それぞれにTestMaterial.mat,TestShader.shader, GBufferTest.csを作成(名前は適当)

6. カメラにつけるスクリプトGBufferTest.csの実装
GBufferTest.cs

DepthTextureのモードの設定と、後はImageEffectのところでTestMatというマテリアルを適用しているだけです。

7. TestMaterialに割り当てるシェーダTestShader.shaderの実装
TestShader.shader

フラグメントシェーダで各種G-Bufferを取得して表示しているだけです。ぐるぐるなエフェクトは[4]を参考にさせていただいています。

8. TestMaterialのShaderにCustom/TestShaderを割り当てる
Unity5_gbuffer_002.png
ここのTexture Noでシェーダの処理を切り替えます。

9. Main CameraにGBufferTest.csをドラッグ&ドロップして適用する
10. TestMatにTestMaterial.matをドラッグ&ドロップして適用する

以上です。

実行結果

カラーバッファ                     スペキュラバッファ
Unity5_gbuffer_004.png Unity5_gbuffer_005.png

法線バッファ                      光源計算付カラーバッファ
Unity5_gbuffer_006.png Unity5_gbuffer_007.png

深度バッファ                      ぐるぐるエフェクト
Unity5_gbuffer_008.png Unity5_gbuffer_009.png

後、遅延シェーディング自体書き換えたい、という場合はEdit→Project Settings→Graphics→Built-in shader settingsのDeferredのところにBuilt-in Shaderのものが割り当てられているので、自分で書いたものに差し替えたりもできるみたいです。

[1] http://docs.unity3d.com/Manual/RenderTech-DeferredShading.html
[2] http://tips.hecomi.com/entry/2014/03/16/233943
[3] http://www.kode80.com/blog/2015/03/11/screen-space-reflections-in-unity-5/
[4] http://www.slideshare.net/calmbooks/unity-38485570
posted by シンドラー at 18:00 | Comment(0) | TrackBack(0) | Unity 5 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック