Raspberlyのブログ

Raspberlyのブログ

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

勉強会レポ : Unity道場 3月〜ライティングとVFX Graph〜

勉強会のレポート(メモ)です。
参加したのはこちら、「Unity道場 3月 ~ライティングとVFX Graph~」
会場はユニティ・テクノロジーズ・ジャパンさんです。

meetup.unity3d.jpハッシュタグ : #Unity道場

 

f:id:Raspberly:20190330000222j:plain

 

動画はこちらから

www.twitch.tv

 

 

 

 

 

 #1 Unityのライティング機能のおさらい

f:id:Raspberly:20190330000252j:plain

写真めっちゃ暗い、ライティングミスった

f:id:Raspberly:20190330000357j:plain

使うことはありませんでしたが、こういうのを用意しました。
今回はライティングをどういう風に設定するのかについて話します。

 
基本的にライトはライトソースから発行しています。
当たり前ですがライトが当たったところは明るくなります。
当たってないところは暗い、光が届かなければ影になる。

これだけなら簡単だがややこしいことに光は反射します。
光は反射するものの色によって反射する光の色が変化します。

実際にはもっと複雑、反射した光によって空間は作られます。

これをリアルタイムでできればいいが高負荷。
202x年とかだとどっかの会社がレイトレシステムを作ってくれると思いますが現状はない。
なので、あらかじめテクスチャを焼きこんで使います。

 

光の種類

・環境光
・光る物質
・ライト(直接光)

 

ここでデモ
デモは動画を見てください。

 


Unityは基本的に空が青いです、なのでモデルをポン置きした時に青くなります。
ライトを設定しなくても空間の色を変えるだけでできます。
これはグラデーションもできます、スカイボックスよりも安い



Unityはライトを消しても真っ暗闇にはならない。
アンビエントライトを上書きして完全に黒にする、またはIntentityを0にする必要があります。

アンビエントライトはシーン全体に影響を与えてしまう。
部屋の中などで適応したくない時はリフレクションプローブを使いましょう。
これは部屋や廊下など閉鎖空間に対して適応しましょう、初期だと解像度が高いので注意。
馴染みやすく良い表現になります。


光る材質

エミッシブがついているとそれ自体が光ってるように見せかけれるし、実際に光らせることができます。
ただしダイナミックなオブジェクトにダイレクトにあたえることはできない、リフレクションプローブが必須。


ライト

実は奥が深い。
Baked、Mixed、Realtimeの三種類に分かれます。
結構重要な設定、いろいろな特徴があります。

Realtime

普通にライトを置くとこれになる。
範囲内のオブジェクトにダイナミック・スタティック関係なく光を与える。
ただしそのまま使うと環境光として使えない、のっぺりした見た目になってしまう。
ライトの範囲が被ると負荷が高くなるので注意しましょう。

リアルタイムGIなら間接光として使える。ただし、追加でCPUコストになる。

リアルタイムな影

ライトごとにシャドウマップが作られる。
ライトごとに見るべきところが変わっていきます。

ディレクショナルライトの場合

影を映す範囲を狭くすれば狭くするほどきれいになります。
では遠距離だときたなくなるのかというとそうではない、カスケードというものがあります。
近いもの高い解像度で描画し、遠くは雑に描画する機能です。
ただし複数回影を塗るのでおもくなることに注意。

スポットライトの場合

距離ではなく角度で決まる、狭ければ狭くなるほどきれいになる。
天井付近に置いて全方位に使うようにすると汚くなります。

ポイントライトの場合

単純に距離。
太陽変わりに使うと低品質な影になってしまいます。
リアルタイムは狭い範囲で使う分にはよい


Baked

事前にベイクした影。
ちゃんとした影になります、回りの色風乾をうけた味わい深いものにしやすいです。
ただしダイナミックな物にはつかない。
ベイクしたライトは事前計算した分、CPU負荷がとても安い。
ベイクの場合、複数のライトを使うのも問題ない。ただしメモリのコストは高い

サンプリングやレゾリューションを上げると焼くのに時間がかかる。

メモリ以外の問題

光の情報が失われる、焼いた時のテクスチャしか見なくなります。
光沢、金属的な表現を使うとしょぼくなります。
ライトプローブでダイナミックなオブジェクトにも影響を与えることができます。

 

Mixed

ベイクとリアルタイムの中間があります。それがMixed。オプションがけっこうあります。

Subtractive

ステージは全て焼き、ダイナミックな影を作る。
ベイクとリアルタイムを合わせると色が変わってしまう問題があるが、手動でどうにかできる。
完全にテクスチャに焼くので光沢は死ぬ。
それをやる方法がシャドウマスク光沢もできフワっとした影もできます。
絵的にはきれいになるオプションです。ただし、ダイナミックなものはフワっとした影には絶対できません。

ShadowMask

シャドウマスクはマスクは作るが、基本的にダイナミックなものにはつかない
影の影響を与えることはできない、リフレクションプローブで違和感を減らすことはできます。
ShadowOnlyな影専用のオブジェクトを用意するのも手です。

DistanceShadow

近いものはリアルタイム、遠距離のものはシャドウマスクのものを使うといったことができる。
影の範囲を範囲を狭くすることで奥は雑に、手前は綺麗にできる。

ShadowMaskの問題点

1オブジェクトにライトを4つしか割り当てれない。
4つ以降焼くと、テクスチャに焼かれる、どのライトが焼かれるのかは運。


BakedIndirect

間接光のみ焼く設定。
遠距離の影は焼かれないがそれを許容できるならいい設定。


どれを設定すればいいかはプロジェクトによる。
・できるだけ軽くしたいならSubtractive
・できるだけきれいにしたいならShadowMaskはいい
・広いステージではDistanceShadow。
・遠距離を見る必要がないもの(トップビューなゲームなど)はBakedIndirectがよい。

まとめ

いろいろ設定があります。
焼くのにもいくつか設定があります。
どれを使うのかは状況による。
ライトも設定ごとに確認する項目が変わります。

 

 

 

 

 

 

 

#2 Unity の新機能 Visual Effect Graph (VFX Editor) と RealSense を組み合わせると簡単に派手なことができてすごく面白いうえに勉強もはかどるという発見をしたのでその話をします

f:id:Raspberly:20190330000902j:plain

まずはいきなりデモ
動画を見てね。

 

VFX Graphは新しいエフェクトを作る仕組み。
リアルタイムで数値をいじれて視覚的にわかりやすい。
ここでお見せしたものはgithubにあります、お試しください。

GitHub - Unity-Technologies/VisualEffectGraph-Samples: Visual Effect Graph - Samples Project

もう一つの要素RealSense。リアルタイムでとれる深度センサー。

 

VFXGraphとは

正しくはVFXGraphではない、VisualEffectGraphです。検索する時はこっちで。

VisualEffectとは、ぶっちゃけるとGPUパーティクルです。
パーティクルだけに留まらずいろいろやるためにこういう名前になっています

なんかすごく複雑そうだが基本的に4つのノードだけで作られます。
無限に複雑な処理を発想次第で作ることができます。

 

これとRealSenseとのつなぎこみ

顔の形にエフェクトを出すサンプルから発想を得ました。
外から入力されたポイントマッシュをアトリビュートマップで変換して、VFXで使っています。
ここの部分をRealSenseに置き換えればよさそう、詳しくgithubを参考にしてみてね。

別にこれRealSenseeを使わなくとも、温度や気象データを使うことで視覚化することができます。


ボリューメトリックビデオをやってみました

Depthkitというボリューメトリック録画ツールがあります。
簡単な操作でunityに取り込むことができます。


まとめ

VFX GraphはGPUパーティクルのこと。
外部の要素をつなぎたかったらアトリビュートマップで変換しましょう。
ボリューメトリックビデオ楽しいよ。

 

 

 

 

 

感想

ShadowOnlyの話が出てきましたが、やり方次第では面白い演出にも使えます。

raspberly.hateblo.jp

 

VFX Graph!
シュリケンだと10万や20万もパーティクルを出したらPCが死んじゃいそうですが、こっちなら割かし無理ができそう。
青木ととさんのParticleSystemで背景を作る手法で活躍しそうです。

qiita.com私のTwitterのヘッダー画像も、これで作りましたが、パーティクルをたくさん出すのは結構負荷が大きいんですよね。

f:id:Raspberly:20190330003429j:plain

去年のUnityShader勉強会のたぐすキャットさんが使い方を詳しく解説しているので、合わせて確認してみてください。

notargs.hateblo.jp

 

 


RealSenseの顔や手に形にエフェクトを出すのはおもしろい。
DmCのボス、ボブバーバスみたいなことができそう。

www.youtube.com

 

 

 

 

 

懇親会

f:id:Raspberly:20190330003843j:plain

f:id:Raspberly:20190330003826j:plain


 

 

 

タイムライン

 

 

 

 

 

 

過去のUnity道場のまとめ

勉強会レポ : Unity道場 1月 ~LWRPとシェーダー~ - Raspberlyのブログ

勉強会レポ : Unity道場 2月 ~シェーダを書けるプログラマになろう~ - Raspberlyのブログ

 

 

 

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