VolumeのON・OFFをスクリプトで行う
はじめに
この記事ではUnityの映像表現で使われるVolumeについての基本的な機能を解説します。
Volumeとはカメラに対して映像効果を加えるものです。これを実装することでリアルな世界観を表現できますが、
処理が重くなる欠点があります。具体的な表現は下図参照。
今回は下の映像表現の切り替えを行います。
Volumeを使う方法
URP(Universal Render Pipeline)・HDRP(High Definition Render Pipeline)等を導入することで使えるようになります。
導入方法は下のリンクから。HDRPはInstallしたらWizardを使って手っ取り早く設定しましょう。URPの方法は自分が使うようであればブログ投稿していきます。
Volumeの使用手順
①GameObject
=> Volume
=>Global Volume
でSceneにVolumeを挿入する。
今回はSceneに置いただけでカメラに映像効果を加えることができるGlobal Volumeを使います。
②New
を押してVolume Profile
を作成する。
③VolumeのAdd Override
=> Post-processing
=>Color Adjustments
を選ぶ
Color Adjustments設定
①テストColorFilter
にチェックを入れてみる。
②ColorFilterの色を変更。
色の変更を行ったら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をセットする。
テスト
変更できました。動画が繰り返されているので点滅しているように見えますが、実際には起こりません。
まとめ
スクリプトは数行で完結するが、調べるのには少し時間がかかりました。
Add ComponentされたものはスクリプトでEnableを使えばほとんどが制御できるがVolumeは
- プロファイルにアクセス
- OverrideしてあるSRPを指定して取得
- 変数の指定
とプロファイル内容の変更をする手順となります。結構めんどくさい。
調べても自分が欲しい情報には中々ヒットせず公式リファレンスを見て解決できました。
参考サイト
モニターライトを購入したのでレビューをしてみる
GWの前にモニターライトを購入し、1ヶ月近く経過したので感想を述べたいと思います。
なぜ購入に踏み切ったのか
夜中に間接照明を使っていて、モニターの下が文字が読めないほどに暗く対策をしたかった。夜は蛍光灯より間接照明が好きなので使っているが、照明の置き場所がなかったです。
自分が欲しかった条件は
- ライトの場所を取らない
- 明るさの調整が可能
- 値段が5000円以内
デスクライトも見栄えのいいものがあるのですが、マイクスタンドを使っている関係で設置不可とになっており、大きいので圧迫感があります。テーブルには極力物を置かないスタイルで行くとなると、どうしてもモニターライトが一番いいということになってしまいました。
今回買ったモニターライト
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のセットアップ方法を投稿してます。手っ取り早くセットアップウィザードを実行して環境を整えましょう。
組み立て方法
Shader Graphを作成する。
Shader Graphでノードを作成して図の配置をします。
これだけだと味気ないのでどのような動きをしているのか説明します。
UVノード
UV座標のアクセスを提供する。
UV座標とは3DCGモデルをテクスチャーマッピングするときに、貼り付ける位置や方向、大きさなどを指定するために使う座標系のこと(CG用語辞典から一部引用)。
簡単に言えばShaderを使う為に座標を提供します。
Distanceノード
入力Aおよび値Bの※ユーグリッド距離を返す。入力A・Bはお互いに同じ要素でないと動かない。中心点の算出で使用した。
※2点間の直線距離
Multipleノード
入力Aと入力Bの掛け算。配色・テクスチャーの合成等色々できる。今回は時間軸との組み合わせで伸縮間隔調整を行う。
Sineノード
サイン波を描く。Timeノードとの組み合わせで点滅表示ができる
Subtractノード
入力Aから入力Bを引く。ここでの入力値Bは半径の最大値を指定している。
Stepノード
入力Inの値が入力Edgeの値以上の場合は1を、それ以外は0を返す。色の境界がはっきりする。
One Minusノード
1から入力Inを引いた結果を返します。主に反転処理に使われる。円を伸縮させるだけならいらない機能だが、勉強の為に追加をした。
Timeノード
Timeパラメーターをシェーダー上で利用できる。
GameObjectにShaderを反映させた結果
まとめ
Shader Graphは今まで弄ったことない機能で、実際にやってみると色々めんどくさいことがあったが、使っていくうちに表現の幅が広がって上達の実感は少しだが出てきた。
これはまだ基本中の基本なので、色々な表現に挑戦します。
参考サイト
- 初めての Shader Graph(公式リファレンス)
- Unity ShaderGraph CookBook vol.1【ShaderGraph 入門】
Unity2021LTSが来たので、プロジェクト作成時間を計測してみた
2022年4月12日(火)にUnity2021LTS版がリリースされました。
主な追加点は以下の動画でまとめられていますので、一度視聴することをオススメします。
この他にも数多くのバグが修正されているようです。
この中で特に気になったのがApple Silicon正式対応になったことです。
RosettaでIntel版のUnityを動かすことができましたが、特定のアーキテクチャのプログラムコードを持つバイナリを、別のアーキテクチャに適宜変換がパフォーマンスに影響を及ぼすので(Wikiから)、それがなくなったことで比較をしたいと思います。
検証内容
WindowsとMacを使った、プロジェクト新規立ち上げの速度比較
環境構成(スペック)
項目 | スペック |
---|---|
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のバージョンはMac・Windows共に2021.3.0LTSを使用。Unity-Hubも両方3.1.1に固定し、各環境に合ったUnityを使用しています。プロジェクト作成ボタンを押して、立ち上がった時間を測定します(単位は秒)
結果
Macの方が約1.6倍ほど早い結果に。プロジェクトの立ち上げはそこまでやらないと思いますが、体感できる結果です。 2021は2020に比べてビルドの速度様々なパフォーマンス改善が見られるので、M1ユーザーは歓喜ですね。 Macは外に使用しているので、これを機にUnityでの開発をWindows・Mac間でやってみようと思います。
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の対応バージョンも異なりますが、ソフト側が最適なバージョンに自動的に設定してくます。
超簡単なHDRPの導入手順(Wizardを使用)
Unityが起動したら、Windows
> PackageManager
> Package: Unity Registry
> High Definition RP
> Install
を選択
インストールしたらPrender Pipeline Wizardが出てくるのでFix All
を選択すれば、! は全てなくなります。
これでHDRPの導入は完了ですが、どの設定が変化したのか分からないので、Wizardを使わずに設定してみましょう
Wizardを使わないHDRPの導入方法
インストールする手順は上記と変わらないのでそのままの手順を使ってください。
Assets
> Create
> Rendering
> High Definition Render PipelineAsset
を選択
HD Render Pipeline AssetファイルがProjectフォルダーに作られる(名前は自由)
Edit
> ProjectSettings...
を選択する
Graphics
> Scriptable Render Pipeline Settings
を先ほど作ったHD Render Pipeline Assetファイルに適用させる
適用させるSceneが暗くなり、3DObjectを導入させても黒く塗りつぶされた画像になるので、修正する必要があります。
Player
> Color Space
> Linear
に変更する。
変更すると注意書きが出ますが、Change to Linear
を選択する。
これらを実行した後に、Materialを作成するとShaderがStandard
からHDRP/Lit
に変更になります。
HDRPが適用されている状態でShaderをStandardにすると、何も表示されません。
StandardのようなShaderを表示させたい時は、HDRP/Unlit
を選びましょう。
おわりに
やり方を書くのはとても簡単ですが、試行錯誤してやっていくと理解するまで結構時間がかかりました。その原因は自分が使っているUnityのバージョンに合っているものがないからです。バージョン違いで本来ある項目が消えていたりと試行錯誤の連続でした。Shader Graphを使うためにHDCPを導入したけど、遠回りはあるが程度理解が進んでよかったと思っています。