はじめに
この記事はQualiArts Advent Calendar 20245日目の記事です。
Unity 6 の登場により、多くの新機能が追加されました。その中でもAdaptive Probe Volume (APV) について検証・調査を行いました。本記事では、Unity 6000.0.27f1 を使用して実際の設定や挙動について詳しく解説します。
この記事はQualiArts Advent Calendar 20245日目の記事です。
Unity 6 の登場により、多くの新機能が追加されました。その中でもAdaptive Probe Volume (APV) について検証・調査を行いました。本記事では、Unity 6000.0.27f1 を使用して実際の設定や挙動について詳しく解説します。
Unity2021.2からSceneView上の要素はOverlayというものに置き換わり、自由に配置を動かせるようになりました。
ParticleSystemを選択したときのウィンドウも↓こんな感じになっていて左上をドラッグすることで自由に動かすことができます
自分でも追加したくなったのでやってみたのですがめちゃくちゃ簡単だったのでメモ
この記事はQualiArts Advent Calendar 2020の20日目の記事になります。
昨日は 無料のDataformでBigQueryにおけるデータ加工のDXを改善して幸せになろう - Qiita でした
現在開発中のプロジェクトではUniversalRenderPipeliene(以下URP)を使用しているためレンズフレアを使用することができません
LensFlareどころかHaloも使用できないため画面にフレアを描画する手段がURPには用意されていません。
他にもかなり機能制限があるので比較を見たい方はこちら
docs.unity3d.com
そこでアセットストアでLensFlareを探すと何個か引っかかるのですが意外と存在しない…
https://assetstore.unity.com/?q=Lens%20Flare&orderBy=0
この中で一番細かく設定できそうだったProFlareを導入したのですが、大量のフレアを出すとCPU,GPU共に負荷が高く、実機でボトルネックとなってしまったのでSRP用に描画部分を作り直すことにしました
このアセット自体は非常に高品質なレンズフレアを作成できるためちょっと使う分であればオススメです
UniversalRPには標準でPBRMasterNodeがありますが、Fogの処理を変えたかったりほんの少し処理変えたかったりしたかったので自作のMasterNodeを作ってみました
速攻で仕様変わっていたらすみません...
Unity2019.4+ShaderGraph7.5.0+UniversalRP7.5.0
8/24追記
ShaderGraph9.x.xでは仕様が全く違うためここで作ったものは動きません...
ShaderGraphのクラスはprivateになっているため、何かしらの方法でアクセスできるようにする必要があります
2個めはかなり無理矢理な手法になってしまうので直接スクリプトを追加する方針にしました
github.com
↑このリポジトリはクソデカなので落とすときは気をつけてください
My~とか適当な名前をつけて以下のファイルを複製します
PBRMasterGUI.cs
生成されたシェーダコードに使用されるMaterialEditor
PBRMasterNode.cs
MasterNode実体 Slotの追加や設定で使用するシリアライズパラメータもここでもたせる
PBRSettingsView.cs
PBRSubShader.cs
SubShader生成時の文字列生成ロジック(includeファイルとか)
これだけであとは型を置き換えればMasterNodeが完成します
ここからは機能を追加してみます
何かあったら追記していきます
Timelineでカスタムトラックを作成したときにcurves編集ボタンを出す条件
AnimatedParameterUtility.cs内に実装があった
IPlayableBehaviour を実装したクラスのフィールドを必ず持つ必要がある
static FieldInfo[] GetScriptPlayableFields_Internal(IPlayableAsset asset) { return asset.GetType() .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where( f => typeof(IPlayableBehaviour).IsAssignableFrom(f.FieldType) && // The field is an IPlayableBehaviour (f.IsPublic || f.GetCustomAttributes(typeof(SerializeField), false).Any()) && // The field is either public or marked with [SerializeField] !f.GetCustomAttributes(typeof(NotKeyableAttribute), false).Any() && // The field is not marked with [NotKeyable] !f.GetCustomAttributes(typeof(HideInInspector), false).Any() && // The field is not marked with [HideInInspector] !f.FieldType.GetCustomAttributes(typeof(NotKeyableAttribute), false).Any()) // The field is not of a type marked with [NotKeyable] .ToArray(); }
Unity2019.3.1f1の時点です
再生までの時間が早くなるEnterPlayModeを使用すると
NativeArrayアクセス時に↓このエラーが発生します
InvalidOperationException: The NativeArray has been deallocated, it is not allowed to access it
ExecuteAlwaysを指定しているためOnEnableでnew、OnDisableでDisposeしているのですが、どうも適切に開放、確保ができていないようです。
ReloadSceneにチェックを付ければエラーは発生しなくなりました