iOS実機でLight Probe Groupを含むSceneのUnload時にクラッシュする
概要
iOS実機でLight Probe Groupを含むSceneのUnload時にクラッシュする現象が起きたため調査しました。
その結果わかった原因と解決策について記載します。
環境
Unity 2018.2.16f1
原因
Strip Engine Codeが有効になっていてLight Probe GroupがiOSビルド時に削除されていた
AssetBundle化したSceneをロードして使用するフローで開発していたため、
Light Probe Groupがアプリ内で使用されていない扱いとなり削除されていたようです。
特定方法
SRDebuggerを使って実機でログを確認したところ
Could not produce class with ID 220
というエラーログが出ていて、
YAML クラス ID リファレンス - Unity マニュアル
で調べたところ|220 |LightProbeGroup |
と書いてあったので原因特定にいたりました。
解決策
テラシュールブログを参考に link.xmlを記述してLight Probe Groupをストリップしないコンポーネントとして指定することで回避しました。
まとめ
テスト用に最小構成のプロジェクトを作って試したりしたのですが、
その際SceneのAssetBundle化までは行わずにテストしていたためかなり苦戦しました
実機でログ確認出来る環境は必須ですね。
Post Processing Stack v2にカスタムエフェクトを追加する方法
はじめに
こちらの記事を参考に、PostProcessingStackに自作のポストエフェクト(カスタムエフェクト)を追加する方法をまとめます。
概要
Unityちゃんと背景Assetを配置したSceneを用意します。
ゲームボーイ風の表示にするカスタムエフェクトを追加し、
下記の表示にするまでの手順を解説していきます
wordpress.notargs.com ゲームボーイ風ポストエフェクトはこちらの記事を参考にさせていただきました。 ありがとうございます。
環境
Unity 2018.2.16f1
Post Processing Version 2.1.2
実装
カスタムエフェクトを追加するには下記の4つが必要です
- PostProcessEffectSettingsを継承したSettingクラス
- PostProcessEffectRendererを継承したRenderingLogicクラス
- Shader
- CustomEditor(エディタ拡張したい時のみ作成。今回は使用していません)
PostProcessEffectSettingsを継承したSettingクラス
カスタムエフェクトで使用するパラメータを定義するクラスです。
注意する点に関して補足していきます。
カスタムエフェクトの実行タイミングについて
[PostProcess()]attributeの2番目の引数でカスタムエフェクトの実行タイミングを下記の3種類から指定できます。
- PostProcessEvent.BeforeTransparent
- 半透明描画の前に実行される。不透明なオブジェクトにのみカスタムエフェクトが適用される
- PostProcessEvent.BeforeStack
- Build-inのPostProcessingStackの実行前に実行される
- PostProcessEvent.AfterStack
- Build-inのPostProcessingStackの実行後に実行される
パラメータの指定方法について
先述のソースコードを見ていただくと、colorやfloatではなく
public ColorParameter color1 = new ColorParameter { value = Color.gray };
や、
public FloatParameter paletteWidth = new FloatParameter {};
のように HogeHogePrameterを使用しているのが分かると思います。
HogeHogePrameterを使用しているとPostProcessingVolumeのblend時に補完さるようになります。
基本的にはHogeHogePrameterを使用するようにするのがおすすめです。
使用できるPrameterの一覧は/PostProcessing/Runtime/ParameterOverride.csの中に定義されています。
Validationをかける方法について
Settingクラスの中で IsEnabledAndSupported() メソッドをoverrideすることにより、カスタムエフェクトにvalidationをかけることができます。
(例)paletteWidthが1以上の時のみカスタムエフェクトを有効にする
public override bool IsEnabledAndSupported(PostProcessRenderContext context) { return enabled.value && paletteWidth.value >= 1f; }
PostProcessEffectRendererを継承したRenderingLogicクラス
RenderingLogicを記載するクラスです。
上記のように、shaderに対してsettingsで定義したパラメータをわたします。
Shader
カスタムエフェクトの本体となるshaderです。
StdLib.hlslをincludeする際はUnityのバージョンによって指定方法が違うみたいなので注意してください。
In Unity 2018.2
#include "PostProcessing/Shaders/StdLib.hlsl"
In Unity 2018.3
#include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl"
これで実装完了です。
この後は実際にPostProcessVolumeから上記のカスタムエフェクトを追加していきます。
カスタムエフェクトを追加する
PostProcessVolume > Add effect から、作成したカスタムエフェクトを選択します。
以上でカスタムエフェクトを追加することができました。
FloatParameterとColorParameterを使って実装しているためブレンドもしっかり効きます
番外編(複数のカスタムエフェクトの実行順指定)
カスタムエフェクト同士の実行順序はPostProcessLayerのInspector上で指定することができます
参考
Writing Custom Effects · Unity-Technologies/PostProcessing Wiki · GitHub
[Unity]4色のカラーパレットだけで画面を描画するポストエフェクトを作った | notargs.com
GitHub - keijiro/Flipbook: Flip book effect example for Unity
Unityで数種類のエッジ検出を比べてみた(Sobel,Prewitt,Roberts Cross)
始めに
エッジ検出のShaderを書く機会があり調べたところ、
エッジ検出にも様々な手法があることがわかりました。
なので、調べている中でよく見かけた
- Sobel Filter
- Prewitt Filter
- Roberts Cross
のそれぞれの手法での結果を比べてみます。
環境
Unity2018.2.16f1
Scriptable Render Pipelineは未使用
用意
このシーンを元にエッジを検出します
実装
結果
Sobel Filter
Prewitt Filter
Roberts Cross
まとめ
思いの外違いが感じられない結果となりました(^^;)w
上記の中だとRobertsCrossの手法が4点のみのサンプリングで一番負荷が軽そうなので基本的にはRobertsCrossを使った実装を採用しようかなと思います。
参考
UnityのImage EffectでSobelフィルタによるエッジ検出 - Qiita
技術書典なるものがあるらしい
技術書典とは
技術書オンリーの同人誌イベント 半年に1回のペースで開催していて現在までで3回開催している。 公式サイトはこちら(https://techbookfest.org/)
技術書典の趣旨
技術書店の趣旨については公式サイトにありましたので引用します。
新しい技術に出会えるお祭りです。 技術書典は、いろんな技術の普及を手伝いたいとの想いではじまりました。 技術書を中心として出展者はノウハウを詰め込み、来場者はこの場にしかないおもしろい技術書をさがし求める、技術に関わる人のための場として『技術書典』を開催します。
この趣旨からも技術に対する暑い思いがひしひしと伝わってきます。
イベントの様子
自分は未だ未参戦のためネットで色々見てみましたが、イベントの様子はこちらの記事を参考になりました。
技術書を販売しているだけでなく企画スペースのようなものでイベントも行われているみたいですね。
感想
技術書を通じて新しくコミュニティが形成されている感じがすごくいいなと思いました。 勉強会のようなイベントにはたまに行く程度なのですが、そこでできたつながりだったり、そうした場でたまたま興味を持って勉強した技術が今にいきてきてたりします。 次回開催があれば是非行こうと思います。
あと、この技術書が面白そうだったので購入してゆっくり読もうと思います。 indievisuallab.stores.jp