【Unity】トーンマッピングで光らせ方を変える

はじめに

トーンマッピングはUnityのバージョンによって存在する場所が異なります 2019.2以前のPost Processing Stack Version 2はColor Grading内に存在します。

f:id:Brave345:20200605142857j:plain

2019.3 URPだとColor Grading内のエフェクトが分離されててtonemapping単体でポストエフェクトとして存在しています。

f:id:Brave345:20200605142907j:plain

今回の環境は Unity 2019.3.0f3

Universal Render Pipeline

を使用します。

トーンマッピングとは

物凄く簡単に言うと明る過ぎる色を特定の色に変換します。

もう少し説明すると色を0~1の間に変換するポストエフェクトです。1以上の色を持つHDRな色を使用してるときに効果を発揮します。

トーンマッピングを使用するならカメラのHDRが有効でかつ色空間がリニアである必要があります。 あと基本的にBloomと一緒に使用します

トーンマッピングの種類

Unityだと2種類用意されています。

以下のキューブのカラーで比較します。

f:id:Brave345:20200605142931j:plain

Neutral

Neutralは色相や彩度への変化を最小限に抑えたトーンマッピングです。

こちらの発光色はほぼ上記で設定したままです。

f:id:Brave345:20200605142946j:plain

ACES

ACESは映画などで使われるトーンマッピングで、コントラストが強めです。UE4とかはこっちが使われてるイメージ

こちらは明るい色は白色になっていきます。

f:id:Brave345:20200605143011j:plain

custom

自由に設定できるやつ

2019.2以前のPost Processing Stack Version 2にありますがほぼ使いません

終わりに

トーンマッピングを設定を変えるだけ光り方だいぶ変わるので自分の出したい色に合わせて設定するといいと思います

細かい数式はこちらの方が参考になります http://hikita12312.hatenablog.com/entry/2017/08/27/002859

【Unity】スマホの初期向きを横向きにする

初期向きを横向きにする

Dafault OrientationをLandscapeLeftかLandscapeRightに変更すれば起動時から向きを横向きにできる。

f:id:Brave345:20200520104812p:plain

ネットだとここをAutoRotationにしてるものが多かったがそれだと最初縦画面になってしまいました。

Dafault OrientationをAutoRotationにしてスクリプトのStart内でLandscapeLeftかLandscapeRightに変更すると最初一瞬だけ縦画面になってしまうので注意

回転できるようにする

あとはスクリプトで回転できるように指定してあげればいい

  void Start()
    {
        Screen.orientation = ScreenOrientation.AutoRotation;
        Screen.autorotateToPortrait = false; 
        Screen.autorotateToLandscapeLeft = true; 
        Screen.autorotateToLandscapeRight = true;
        Screen.autorotateToPortraitUpsideDown = false; 
   }  

【Unity】ShadergraphでGradientがプロパティ化できないので対策案を探してみた

はじめに

ここにもある通りShaderGraphのGradientはプロパティ化出来ないため、グラデーションをマテリアルからいじれないので不便です。

WHERE is the exposed Gradient node property in Shadergraph - Unity Forum

なので何か対策方法がないか調べてみました

案1 複数のLerpを使用する

トライトーンというものを使用します

参考

www.klab.com

メリット

・ Colorノードを使用しているためCustom Dataで色情報の受け渡しが出来る。

・ Colorを変更するだけなので調整が楽

デメリット

・複雑なグラデーションが出せない

案2 グラデーションテクスチャを使う

グラデーションテクスチャは以下のエディタ拡張で作成できます。

Genボタン押してからグラデーションテクスチャを作成できるまで若干ラグあるので注意です

github.com

あとは以下のようにノードをつなげればOKです 左下のSample Texture 2Dノード確認用なので消しても大丈夫です

メリット

・ Lerpと比べて複雑なグラデーションを作成しやすい

・ テクスチャを使用しているため同じような色合いを出したいときにテクスチャを使い回しできる

デメリット

・使用するテクスチャが増えるため容量が増える

・テクスチャにHDRなカラーを持たせることで出来ないので、徐々に発光させるみたいなグラデーションが作れない

複数のグラデーションを格納したテクスチャを使用する場合

こちらのやり方が参考になります

案3 ブーリアンまたはシェーダーバリアントを使用する

以下の記事みたいすれば数種類のグラデーションを切り替えることが出来る

bravememo.hatenablog.com

メリット

・ グラデーションノード使用できるので自由にグラデーションが設定できる

デメリット

・プロパティ側でグラデーションの色合いを変更できない

・処理速度またはコンパイル時間が長くなる

おわりに

どちらの方法にもメリット、デメリットがあるのでケースバイケースでやるのがいいと思います。