大分久しぶりの記事になってしまいましたが、今回はUnityで遭遇したバグについてです。
かなり限定的な状況で発生するバグですが、誰かの助けになるかもしれないので書き残します。
本記事は2022/08現在の情報で、すぐ情報が古くなりますのでご承知おきください。
結論
先に結論だけ書いておくと、URPの14系で修正されているようなのでUnity2022.2を使用しましょう。
現状2022.2はベータ版なので、不安な人は本リリース版を待ちましょう!
Unity2022.1を使い続ける人は、CameraのAnti-aliasing
をSMAA
にすればデカールが表示されるようになります。
バグについて
今回のバグは、まっさらなURPサンプルプロジェクトでも再現しました。
詳細を以下に書きます。
環境
- Unity2022.1.14f1(2022.1.11f1でも再現)
- UnityというよりはURPのバージョン依存と思われます。今回はURP 13.1.8。
- Android(iOSは未確認)
- エディタ(Windows)・実機ともに発生
- URP環境でDecalを使用すると発生
事象
URP環境でDecalを使用すると、シーンビューには映るのにゲームビューには映りません。
下の例では、左がシーンビュー、右がゲームビューです。
青い画像のデカールが配置されていますが、ゲームビューには映っていません。
再現手順
1. Unity2022.1.14f1で新しいプロジェクト(テンプレートは「3D Sample Scene (URP)」)を作成
2. Build SettingsからAndroidにSwitch Platformする
3. UniversalRenderer(Universal Renderer Data)を選択、Add Renderer Featureから「Decal」を追加
4. 「Shader Graphs/Decal」シェーダーを適用したMaterialを作成、Base Mapに適当な画像を設定
5. HierarchyにURP Decal ProjectorをアタッチしたGameObjectを作成、4.で作成したMaterialを設定する
6. Rotation.Xに90を設定して、シーンビューでデカールが表示されていることを確認する
7. ゲームビューを見ると、デカールが描画されていないことが確認できる
8. HierarchyのMain Cameraの「Anti-aliasing」をSMAAに設定すると、ゲームビューで描画されることが確認できる
(この手順、「Unityにバグレポート出すぞ!」と思って書いたものなんですが、結局不要に...。この記事で供養ということで...
原因
細かい原因はわかりませんが、どのような条件で発生するかを調査しました。
以下の条件を満たすときに上記の現象が発生するようです。
対策とまとめ
現状確認できる二つのUnityバージョン(異なるURPのバージョン)でどうなるか調査しました。
結果、URP 14系では修正されているようです。
ということで、今回の事象に悩まされている方はUnity2022.2を使用するとよさそうです。(現状ベータ版なので、心配な人は本リリースまで待ちましょう)
現状では、アンチエイリアスの設定をSMAA
にすればデカールは表示されますので、Unity2022.1環境でデカールを使いたい人はそれで耐え忍ぶ感じになりそうです。
もしくは、これからのバージョンで修正がURP 13系にも取り入れられるかもしれません。
問題ない動作が確認できたUnity
- Unity 2022.2.0b5:URP 14.0.3
- Unity 2023.1.0a6:URP 15.0.0