Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

勉強会レポ : Unity道場 1月 ~LWRPとシェーダー~

 

 

勉強会のレポート(メモ)です。
参加したのはこちら、「Unity道場 1月 ~LWRPとシェーダー~」
2019年最初のUnity道場です。

meetup.unity3d.jp

f:id:Raspberly:20190131020459j:plain

f:id:Raspberly:20190131004159j:plain

Unity道場はUnityJapanと参加者だけでなく、参加者同士の交流会でもあります。
さらにUnityなんでも相談所を設置してあります。

 

動画、スライドは後日公開されます。
公開され次第こちらにもリンクを張ります。

 

 動画が公開されました。

www.twitch.tv

 

 

 

 

 

1. 軽量レンダーパイプライン、Light Weight Renderer Pipeline…とは

f:id:Raspberly:20190131004808j:plain

f:id:Raspberly:20190131004815j:plain


まずは何もいわずにこれを見て

f:id:Raspberly:20190131005153j:plain

いい感じに見えるでしょう。LWRPを使って作られています。

 

LWRP

いままでと同じことができます。
追加でカスタムシェーダーの表現ができます.。
それ以外にも、パイプラインのカスタマイズもやりやすい(ブラーなど)。

さらに軽くて速い。ほとんど60fpsでます。

 

 

LWRPとはどういうものなのか

HDRPの軽い版です。

HDRP:ハイエンド、フォトリアル向け。

LWRP:モバイル、XR向け。軽量高速が優先。


いくつか機能が削られているため高速です。
比較表を見たい場合はマニュアルを見てください。

 

導入することで何がいいのか

・パフォーマンスがよい。
・シェーダーもよくなっている。
・カスタマイズも簡単
・導入は非常に簡単です

 

ここで実際にデモ

 

1.ProjectSettings.ColoerSpaceをLinearに。

2.パッケージを導入(PacageManagerから)

3.次は適応ProjectSettings.Graphicから設定。

いままでのスタンダードシェーダーがつかえないのに注意。
設定が全てアセットの方で変更できるようになりました。

 

いくつかの点が変わっています
ドローコールなどが減って、パフォーマンスが上がっています。

ワークフローにほとんど変化はない。使う分にはスムーズに使える。

 

 

 

細かい注意点

何が変わるのか、


ライティング

全てのライトを一括で描画します。
加算、塗りなおしの負荷が大きく改善されます。
重ね塗りと表現がかわるので注意。

いままではライトが複数重なるのはよくないとされていましたが、LWRPではある程度よくなった(4つまで)。

ただライトは4つまでしか表現できないのでそれ以上あるとだめ、
4つ以上ある場合、ライトはランダムで選ばれる。

 

 

ライトマップのベイク

GIはいままでと同じ、Realtime GIは未対応。
特にライトの戦略が変わりました。

「メインライト」「サブライト」はシェーダなどでも気にする必要はありませんでした。
しかしLWRPはメインとよべるものとそれ以外で区別されます。
メインは1個しかよばれない。メインは絶対使われるものとして考えられます。
他の追加加算ライトはシェーダー側で一回で描画するという形になっています。

 

シェーダーの話

LWRPは対応してないシェーダーは使えない。サーフェイスシェーダーは使えなくなります。
使ってると問答無用でピンクです。
そういう時は簡単に変換できます。正確には変換ではなく差し替え。
どう差し変わるのかはマニュアルで見れます。
マニュアルにないものは差し替えられない(レガシーなど古いもの、独自のサーフェイスシェーダーなど)
差し替えるとLWRP専用のシェーダーになります。

 

他のシェーダー

サーフェイスシェーダー以外はどうか、実は普通に動くことが多い。

同時にSprite UIもほとんど問題なく動きます。
サーフェイスシェーダーは努力が必要。

 

 

 

ビルトインとは大きく異なります

SRPを使ったため、ここまで大きく変わりました。

なぜこれが必要になったのか、いままでのビルトインは低スぺ高スぺまで対応してきたが最適化に限界がきた。

SRPは全てgithubで公開されています。自分で処理を追えるようになっています。


ちなみにSRPもLWRPもPackageManagerから取得するのでunityのバージョンアップと同期していません。
つまりパイプラインとunityのバージョンを合わせる必要がない
特定のバージョンをピックすることも可能。使いたいパイプラインも選べます。
もちろん自作も可能です。

 

 


もういっこデカイ機能

SRPバッチャー

強力な最適化機能。

通常のバッチング(Dynamic Batching)はマテリアルごとにドローコールされる。
ただ毎回描画命令するのはよくないので、メッシュを結合して描画していました。

これは悪くないアプローチだが実はあまり推薦されない。
CPUのコストが高くなるし、ポリゴンもふえる。なので現在は最初からoffになっています。

 

SPRバッチャーの場合はどうか
モデルの結合という考えではなく、バッファーをキャッシュするようになりました。
また、1つのマテリアルに全てのマテリアルをリニアな情報として結合します。
この1つのマテリアルをアップロードしてオフセットを切り替えています。
描画回数は減らないが描画命令が安くなる。

 


UberShaderの爆発

ゲームで使われないシェーダー(未使用、無効のもの)を削除する機能が追加されています。
アプリサイズもビルド時間も減りました。

 

 


新しくできるようになったこと

シェーダーグラフ

今まではシェーダーを書かなければならなかったが、ノードベースで作れるようになりました。
途中経過がビジュアルで確認できるため便利。

シェーダーグラフで作ったシェーダーはコードを見ることができます、逆はできない。
ちょこっと手直しもできます。

 

 

 

まとめ

LWRPは軽量、高速、カスタマイズ性も高い。
簡単に使えるし簡単に拡張できる。

 

 

 

 

 


2. 俺はUVスクロールがしたかっただけなんだ!

後日、振り返りの意味も込めて配信をするそうです。
画像や動画が多いため、動画またはスライドが公開されたらそちらを参照してください。

f:id:Raspberly:20190131012602j:plain

f:id:Raspberly:20190131012620j:plain

 

プロローグ

時はPS2の時代 ゲーム業界に入りました。
当時メタセコイアを使っていました。しかしUVスクロールができない。

DCC上でしかUVスクロールさせられない、リアルタイムでしたい。
味をしめてUVスクロールをやりはじめる。

 

 

時代は進む、VRCHATに足を突っ込む。
vrchatは技術屋の腕の見せ所(シェーダーやUVスクロールなど) 

シェーダー作り始めた。でもシェーダーわからん。
シェーダーわからないのがわからない

 

 

ノードベースエディタ

テキストでシェーダーを書くのは気が滅入る。
しかしノードベースエディタの登場でとても楽しい。
VRCHATでキラキラした人を羨むのはもう終わり!

 

VRCHATはUnity2017.4なので最新ではない。
ただしShader Forgeを使えます。

グラフィカルな操作で楽。UVスクロールできただけで小躍りです。

 

ノードベースだといろいろな機能を簡単に追加できます。
頂点カラー、頂点アルファ・・・どんどん作っていきます。

 


ここでバーニアの作成、Shader Forgeのデモムービー

 

 

 

 

感想

ライトウェイトレンダリングパイプライン。
名前を聞く機会はありますが、どういうものかはよくわかっておらず、
使い方も知らない技術でしたが、要は軽量で使うのもカスタマイズも簡単なパイプラインということですね。
完全に理解しました。

 

シェーダーの作成も、ShaderGraphやShaderForgeなどノードベースのものがでてきたので、
昔ほど敷居は高くないのかもしれません。

 

 

f:id:Raspberly:20190131015558j:plain

懇親会のお寿司です。なんとうにがあります。
これがほんとのうにてぃ・・・

 

 

タイムライン

 

 

お知らせ

Unity道場は、各月末に1回開催を行います。
次回のUnity道場のテーマは「シェーダーがかけるエンジニア」です。
詳しい情報はまた後日。

 

Unity道場はイベントページ公開後、すぐに満席になります。
予めTwitterのユニティ・テクノロジーズ・ジャパンをフォローしておいてください。

twitter.com

 

 

 

 

 

間違っている箇所がありましたらコメントにお願いします。