VolumeのON・OFFをスクリプトで行う

はじめに

この記事ではUnityの映像表現で使われるVolumeについての基本的な機能を解説します。 Volumeとはカメラに対して映像効果を加えるものです。これを実装することでリアルな世界観を表現できますが、
処理が重くなる欠点があります。具体的な表現は下図参照。 今回は下の映像表現の切り替えを行います。

Volumeを使う方法

URP(Universal Render Pipeline)・HDRP(High Definition Render Pipeline)等を導入することで使えるようになります。

導入方法は下のリンクから。HDRPはInstallしたらWizardを使って手っ取り早く設定しましょう。URPの方法は自分が使うようであればブログ投稿していきます。

higashi.hatenadiary.com

Volumeの使用手順

GameObject => Volume =>Global VolumeでSceneにVolumeを挿入する。
今回はSceneに置いただけでカメラに映像効果を加えることができるGlobal Volumeを使います。

Volumeの挿入

Newを押してVolume Profileを作成する。

Global VolumeのInspector


Newを押した後の表示

③VolumeのAdd Override => Post-processing =>Color Adjustmentsを選ぶ

Add OverrideからColor Adjustments選択画面

Color Adjustments設定

①テストColorFilterにチェックを入れてみる。

ColorFilter

②ColorFilterの色を変更。

ColorFilter2
ColorFilter変更した後のGame画面

色の変更を行ったらColorFilterのチェックを外しておく

スクリプト

①以下のスクリプトをGlobal Volumeにアタッチする。

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;

public class CameraColorChange : MonoBehaviour
{
    public Volume _volume;

    void Start()
    {
        _volume.profile.TryGet<ColorAdjustments>(out var color);
        color.colorFilter.overrideState = true;
    }
}

アタッチしたスクリプト

②Volume変数にInspector上に設置してあるGlobal Volumeをセットする。

Global Volumeを設置した

テスト

変更できました。動画が繰り返されているので点滅しているように見えますが、実際には起こりません。

まとめ

スクリプトは数行で完結するが、調べるのには少し時間がかかりました。 Add ComponentされたものはスクリプトでEnableを使えばほとんどが制御できるがVolumeは

- プロファイルにアクセス - OverrideしてあるSRPを指定して取得 - 変数の指定

とプロファイル内容の変更をする手順となります。結構めんどくさい。 調べても自分が欲しい情報には中々ヒットせず公式リファレンスを見て解決できました。

参考サイト

docs.unity3d.com

モニターライトを購入したのでレビューをしてみる

GWの前にモニターライトを購入し、1ヶ月近く経過したので感想を述べたいと思います。

なぜ購入に踏み切ったのか

夜中に間接照明を使っていて、モニターの下が文字が読めないほどに暗く対策をしたかった。夜は蛍光灯より間接照明が好きなので使っているが、照明の置き場所がなかったです。

モニターライト導入前

自分が欲しかった条件は

  • ライトの場所を取らない
  • 明るさの調整が可能
  • 値段が5000円以内

デスクライトも見栄えのいいものがあるのですが、マイクスタンドを使っている関係で設置不可とになっており、大きいので圧迫感があります。テーブルには極力物を置かないスタイルで行くとなると、どうしてもモニターライトが一番いいということになってしまいました。

今回買ったモニターライト

https://m.media-amazon.com/images/I/513xKtvy2sS._AC_SX679_.jpg

Quntis バーライト ディスクライト 52cm




Amazon's Choiceの中にあるものを購入。執筆時点では5480円ですが、セール中で5000円切っていたので購入しました。安物買いの銭失いになるのが面倒くさかったので、そこそこの値段設定にしています。

ライト有無の比較

ライトなし ライトあり

明らかに差が出ています。明るいので写り込みも予想していましたが全くないので、グレアパネルでの問題なく使用できるでしょう。

明るさと色の種類について

  • 明るさ
レベル1 レベル2 レベル3

明るさもこれだけ調整できます。LV1だと読書は少々厳しいです。

  • 色の種類
色1 色2 色3 色4

色3と色4はたいした違いがありません。

最後に

初モニターライトを導入し不安もあったが、いざ導入してみるとそんな不安も吹き飛んだ。
書籍を読む用に買ったはずが、夜中の作業でいつも利用しています。
最初に出したBenQはとても評判が良いけど値段が倍以上なので、試しに使ってみたいのであれば5000円くらいのものから試してみるといいでしょう。
それでもっと良い物が欲しいのであれば高額のものを買えばいいと思います。
モニター部分を使ってデスクライトを取り付けたいのであればオススメできる商品です。

Shader Graphで円を伸縮させる

はじめに

自作でコンテンツを作成しているが、海面を表現するものが必要になった。
AssetStoreに自分が求めるものを見つけてShaderGraphを使っており、色々いじくってみたが、どうしてこんな形になるのが全く理解できなかったので、1から勉強してShader Graphをいじれるようにする。

今回作るもの



円が伸縮し以下の機能を追加する

  • 円の直径
  • 円の伸縮間隔

環境

  • Unity 2021.3.0f1
  • HDRP version: 12.1.6

前回HDRPのセットアップ方法を投稿してます。手っ取り早くセットアップウィザードを実行して環境を整えましょう。

higashi.hatenadiary.com

組み立て方法


Shader Graphを作成する。




Shader Graphでノードを作成して図の配置をします。

これだけだと味気ないのでどのような動きをしているのか説明します。

UVノード









UV座標のアクセスを提供する。

UV座標とは3DCGモデルをテクスチャーマッピングするときに、貼り付ける位置や方向、大きさなどを指定するために使う座標系のこと(CG用語辞典から一部引用)。

簡単に言えばShaderを使う為に座標を提供します。

Distanceノード



入力Aおよび値Bの※ユーグリッド距離を返す。入力A・Bはお互いに同じ要素でないと動かない。中心点の算出で使用した。

※2点間の直線距離

ユーグリッド距離とマンハッタン距離

Multipleノード



入力Aと入力Bの掛け算。配色・テクスチャーの合成等色々できる。今回は時間軸との組み合わせで伸縮間隔調整を行う。

Sineノード



サイン波を描く。Timeノードとの組み合わせで点滅表示ができる











Sin波形

Subtractノード



入力Aから入力Bを引く。ここでの入力値Bは半径の最大値を指定している。

Stepノード



入力Inの値が入力Edgeの値以上の場合は1を、それ以外は0を返す。色の境界がはっきりする。

One Minusノード



1から入力Inを引いた結果を返します。主に反転処理に使われる。円を伸縮させるだけならいらない機能だが、勉強の為に追加をした。

Timeノード



Timeパラメーターをシェーダー上で利用できる。

GameObjectにShaderを反映させた結果



まとめ

Shader Graphは今まで弄ったことない機能で、実際にやってみると色々めんどくさいことがあったが、使っていくうちに表現の幅が広がって上達の実感は少しだが出てきた。

これはまだ基本中の基本なので、色々な表現に挑戦します。

参考サイト

  • 初めての Shader Graph(公式リファレンス)

docs.unity3d.com

  • Unity ShaderGraph CookBook vol.1【ShaderGraph 入門】

zenn.dev

Unity2021LTSが来たので、プロジェクト作成時間を計測してみた

2022年4月12日(火)にUnity2021LTS版がリリースされました。

unity3d.com 

主な追加点は以下の動画でまとめられていますので、一度視聴することをオススメします。

www.youtube.com

この他にも数多くのバグが修正されているようです。

この中で特に気になったのがApple Silicon正式対応になったことです。

RosettaIntel版のUnityを動かすことができましたが、特定のアーキテクチャのプログラムコードを持つバイナリを、別のアーキテクチャに適宜変換がパフォーマンスに影響を及ぼすので(Wikiから)、それがなくなったことで比較をしたいと思います。

検証内容

WindowsMacを使った、プロジェクト新規立ち上げの速度比較

環境構成(スペック)

Windows

項目 スペック
CPU Ryzen 3900x
メモリ DDR4-3200 64GB
グラフィックボード Nvidia GeForce 2700 Super
SSD PCI Express 4.0 1GB


Mac(MacBookPro2021 14inch)

項目 スペック
CPU M1Max
メモリ LPDDR5-6400 64GB
GPUコア数 32
SSD 2GB



スペックはざっくりになります。UnityのバージョンはMacWindows共に2021.3.0LTSを使用。Unity-Hubも両方3.1.1に固定し、各環境に合ったUnityを使用しています。プロジェクト作成ボタンを押して、立ち上がった時間を測定します(単位は秒)

結果

f:id:HigashiVR:20220415073243p:plain

Macの方が約1.6倍ほど早い結果に。プロジェクトの立ち上げはそこまでやらないと思いますが、体感できる結果です。 2021は2020に比べてビルドの速度様々なパフォーマンス改善が見られるので、M1ユーザーは歓喜ですね。 Macは外に使用しているので、これを機にUnityでの開発をWindowsMac間でやってみようと思います。

HDRPを導入して3Dオブジェクトの色を表示させるまで

Unityは色々なことが出来る反面、特定の部分ばかりに集中していると他の事を忘れてしまう欠点もある。

自分はプログラミングばかりやっており、他の機能を無視してきた。

だけどとうとうHDRPを導入しなければいけない事例があったので、勉強していく。

HDRPとは

High Definition Render Pipeline(以下HDRP)の略称。 簡単にいえば今までのライティング(光)をよりリアルにしたものです。 従来のURP(Unity Universal Render Pipeline)はスマホ向けに対し、HDRPはハイスペック機種向け(PC等)とのこと。 URPとHDRPは互換性がないようです。

設定環境

  • Unity 2020.3.32f1(LTS)
  • HDRP version 10.8.1

Unityのバージョンに関して

HDRPを使うにはUnity2019.3以上が必須。それ以下の場合は新しくダウンロードしましょう。UnityのバージョンによってHDRPの対応バージョンも異なりますが、ソフト側が最適なバージョンに自動的に設定してくます。

unity3d.com

超簡単なHDRPの導入手順(Wizardを使用)

Unityが起動したら、Windows > PackageManager > Package: Unity Registry > High Definition RP > Install  を選択


f:id:HigashiVR:20220409194212p:plain
Package Manager


インストールしたらPrender Pipeline Wizardが出てくるのでFix Allを選択すれば、! は全てなくなります。


f:id:HigashiVR:20220410112046p:plain
Render Pipeline Wizard

これでHDRPの導入は完了ですが、どの設定が変化したのか分からないので、Wizardを使わずに設定してみましょう

Wizardを使わないHDRPの導入方法

インストールする手順は上記と変わらないのでそのままの手順を使ってください。

Assets > Create > Rendering > High Definition Render PipelineAsset を選択

HD Render Pipeline AssetファイルがProjectフォルダーに作られる(名前は自由)


f:id:HigashiVR:20220410140332p:plain
HD Render Pipeline Asset


Edit > ProjectSettings...を選択する

f:id:HigashiVR:20220409200927p:plain
Graphics


Graphics > Scriptable Render Pipeline Settings を先ほど作ったHD Render Pipeline Assetファイルに適用させる

適用させるSceneが暗くなり、3DObjectを導入させても黒く塗りつぶされた画像になるので、修正する必要があります。

f:id:HigashiVR:20220409201958p:plain
暗くなったScene


Player > Color Space > Linear に変更する。

f:id:HigashiVR:20220409201932p:plain
Color Spaceの変更


変更すると注意書きが出ますが、Change to Linear を選択する。

f:id:HigashiVR:20220410142425p:plain
Color Space変更による注意


これらを実行した後に、Materialを作成するとShaderがStandardからHDRP/Litに変更になります。

f:id:HigashiVR:20220410142830p:plain
Material

HDRPが適用されている状態でShaderをStandardにすると、何も表示されません。 StandardのようなShaderを表示させたい時は、HDRP/Unlitを選びましょう。

f:id:HigashiVR:20220409202427p:plain
設定:HDRP/Unlit

f:id:HigashiVR:20220409203045p:plain
設定:HDRP/Lit




おわりに

やり方を書くのはとても簡単ですが、試行錯誤してやっていくと理解するまで結構時間がかかりました。その原因は自分が使っているUnityのバージョンに合っているものがないからです。バージョン違いで本来ある項目が消えていたりと試行錯誤の連続でした。Shader Graphを使うためにHDCPを導入したけど、遠回りはあるが程度理解が進んでよかったと思っています。

はじめてのブログではない

タイトルが意味不明ですみません。 ブログが2つありますが、1つは1投稿して終了しました。 心機一転してブログを再び開設しました。

主な投稿内容は

  • プログラミング
  • Unity
  • 技術的なこと
  • XR(VR・AR・MR)
  • 日常ネタ

を投稿してまいります。

開設するきっかけは、Unityを勉強中でインプットを沢山している以上アウトプットも必要になったと実感したからです。

はてなブログにした理由は Markdownが使えるから です。

Markdown自体は不得意ですが、使えるようになりたいから使うというスタンスです。

どうぞよろしくお願いします。