AdaptiveProbeVolumeさわってみた
はじめに
この記事はQualiArts Advent Calendar 20245日目の記事です。
Unity 6 の登場により、多くの新機能が追加されました。その中でもAdaptive Probe Volume (APV) について検証・調査を行いました。本記事では、Unity 6000.0.27f1 を使用して実際の設定や挙動について詳しく解説します。
GenerateHLSL完全に理解した
Unity2021.2のOverlay機能を使う
Overlay機能
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用に描画部分を作り直すことにしました
このアセット自体は非常に高品質なレンズフレアを作成できるためちょっと使う分であればオススメです
ShaderGraphのPBRMasterNodeを拡張してみた
UniversalRPには標準でPBRMasterNodeがありますが、Fogの処理を変えたかったりほんの少し処理変えたかったりしたかったので自作のMasterNodeを作ってみました
速攻で仕様変わっていたらすみません...
Unity2019.4+ShaderGraph7.5.0+UniversalRP7.5.0
8/24追記
ShaderGraph9.x.xでは仕様が全く違うためここで作ったものは動きません...
- はじめに
- 最低限必要なファイルを複製する
- Culling設定をMaterial側に持たせる
- PBRMasterNodeからTwo Sidedを削除
- SubShaderにCull設定を追加
- ShaderPropertiesにCull設定を追加
- Fogを自前のものに置き換える
- fogのmulti_compileを更新
- hlsl複製
- シェーダ改修
- Cutoffの数値でAlphaTest処理を分岐させる
- ShaderGraphのAlphaTest仕様
- 従来の処理に合わせて_ALPHATEST_ONマクロを定義する
- おわり
はじめに
ShaderGraphのクラスはprivateになっているため、何かしらの方法でアクセスできるようにする必要があります
2個めはかなり無理矢理な手法になってしまうので直接スクリプトを追加する方針にしました
github.com
↑このリポジトリはクソデカなので落とすときは気をつけてください
最低限必要なファイルを複製する
My~とか適当な名前をつけて以下のファイルを複製します
PBRMasterGUI.cs
生成されたシェーダコードに使用されるMaterialEditor

PBRMasterNode.cs
MasterNode実体 Slotの追加や設定で使用するシリアライズパラメータもここでもたせる

PBRSettingsView.cs

PBRSubShader.cs
SubShader生成時の文字列生成ロジック(includeファイルとか)
これだけであとは型を置き換えればMasterNodeが完成します
ここからは機能を追加してみます
Timeline関連メモ
何かあったら追記していきます
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(); }
EnterPlayMode時にNativeArrayのエラーが発生する
Unity2019.3.1f1の時点です
再生までの時間が早くなるEnterPlayModeを使用すると
NativeArrayアクセス時に↓このエラーが発生します
InvalidOperationException: The NativeArray has been deallocated, it is not allowed to access it
ExecuteAlwaysを指定しているためOnEnableでnew、OnDisableでDisposeしているのですが、どうも適切に開放、確保ができていないようです。

ReloadSceneにチェックを付ければエラーは発生しなくなりました