土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

Alloy Physical Shader Framework導入手順解説

 「Alloy Physical Shader Framework」という、Defered Shading用に特化して開発され、UnityCGなど標準ヘルパーコードまで(多分)改造して作りこんでいる、有料シェーダーアセットがあります。これが、つい最近突如無料化し、界隈で話題になっていました。
https://www.assetstore.unity3d.com/jp/#!/content/11978

 ただ、なにぶんシェーダーアセットはインポートしたらすぐに動作を確認できるという類の物ではないので、正しく導入できたのかがよくわからない><。ひとまずREADMEの通りにやってみたので、その手順をアップしておきます(正式な翻訳ではないのでご注意ください)。

最新版は4.2(4.1からの変更はUnity2017.2サポートのみの模様)

■インポート手順

・空のシーンを作る
・Alloyのパッケージをアセットストアからインポートする
・Packagesフォルダ配下にある「Alloy4_2_0_ShadersAndEditorCore」をダブルクリックする。ポップアップウィンドウが出るので「Import」を選択(このインポートはとても時間がかかる。これはシェーダーファイルをインポートする場合、そのタイミングでコンパイルが行われるから)
 ←ScriptsとShadersというフォルダが増える
・テッセレーションシェーダーを使う場合(WinかつDX11のみ)、「Alloy4_2_0_TessellationShaders」もインポートする(こっちもコンパイルがすげー長い。ドキュメントでも「必要になった時にインポートすればいいよ(意訳)」と書いてある)。
・必要ならサンプルパッケージをアセットストアからインポートする(Alloyはコードサンプルが別アセットになっています「Alloy Shaders Sample Pack」をインポートしてください。これが一番時間かかります)

下記の二つは通常は使わない

AlloyLegacy4_2_0 :旧仕様のしAlloyシェーダーパッケージ。非サポート。
AlloyMods4_2_0 :テスト実装などが含まれた物。非サポート。

また同フォルダにある下記zipファイルについては不明(中にはglslファイルが沢山入ってる)

Substance Designer 6 Custom Shader.zip
Substance Painter 2_5 Custom Shader.zip

=======================================

インポートが終わると以下の警告が表示される。問題ないとは思うが気になるので後で消す方法を調べる。

Use of UNITY_MATRIX_MVP is detected. To transform a vertex into clip space, consider using UnityObjectToClipPos for better performance and to avoid z-fighting issues with the default depth pass and shadow caster pass.

=======================================

■プロジェクトのセットアップ

・「Edit->Project Settings->Graphics」を開く
・「Built-in Shader Settings」内の「Deferred」の設定を「Custom shader」に変更する。
・「Deferred」設定の直下にShaderの項目が増える(現在は「Hidden/Internal-DeferredShading」)ので、これを「Alloy Deferred Shading」に変更する(他オプションについては後述)
・同様に「Deferred Refrections」を「Custom shader」に変更する。追加されたShaderリスト(Hidden/Internal-DeferredReflections)を「Alloy Deferred Reflections」に変更する。

・「Edit->Project Settings->Player」を開く
・「Other Settings」内の「Color Space」をLinear(リニア)に変更する(初期状態ではGamma(ガンマ))。

・ライトを多数使う予定があるなら、'Rendering Path'を'Deferred'に変更する。
 ・READMEには詳細が書いてないが、「Edit->Project Settings->Graphics」のTier Settings内の各Tierについて、「Use Defaults」のチェックを外した後に「Rendering Path(初期値:Forword)」を「Deferred」に変更すれ作業を指している筈

・シーン内のカメラを選択し、"Allow HDR"にチェックを入れる(土屋の環境では初期状態でオンだった。ちなみに警告が出ているが、その下の"Allow MSAA"のチェックを外せば消える(遅延シェーディングではMSAA使用不可))

・「Edit->Project Settings->Quality」を開く
・「Anti-aliasing(初期値:2x Multi Sampling)」を「Disable」に変更する(遅延シェーディングではMSAAが使えないため。Unity側は自動でオフにするが念のため)

・「 Window->Alloy->Light Migrator」を選択(とドキュメントにはあるがそんな項目は無い。多分Material MigratorかLight Converterのことなので両方実行しておく)

=======================================

■拡張セットアップ

スキン(Skin)、ツリー生成(SpeedTree)、トランスミッション(Transmission)などのシェーダーを使いたい場合は、以下の設定を必ず行う

・Graphicsで指定するシェーダーを以下のどちらかにする(それぞれパフォーマンスが異なる)

Alloy Deferred Transmission SpeedTree/Transmissionに対応。
Alloy Deferred Skin Skin/SpeedTree/Transmissionに対応。

・カメラを選択する
・"Alloy/Alloy Effects Manager"コンポーネントを追加する
・"Skin Scattering" および/または "Transmission"タブを、処理速度に応じて追加/削除する
・マテリアルに"Alloy/Human/Skin"あるいは"Alloy/Transmission/*"のシェーダーを設定する。

=======================================

■ドキュメント

・「Window->Alloy->Documentation」を開くとブラウザが開いてドキュメントが表示される(一番上のGetting StartedがREADMEの中身に相当)。ちなみにこのドキュメント、目次ツリーのレイアウトが壊れてるけど、開くと治る。

https://alloy.rustltd.com/documentation/getting-started