unity2019 HDRP での3DADV開発事例

Unity

成人向けなのでタイトルなどは非公開

unity2019.4.6f1 HDRP7.4.1 InputSystem

InputSystem

基本はマウス操作だけで完結できる仕様です。しかしカメラの回転だけ試しにマウスとコントロラーラー両対応してみました。

仕様としては、右ホールドで動かすと回転、中ホールドで動かすと平行移動、ホイールでズーム。コントローラーなら左右スティックと、L2R2でズームです。

別な記事にも書きましたが、InputSystemを使うことで本当に入力デバイスに依存しないコードを書くことができました。マウスだろうとコントローラーだろうと同じ入力とみなせます。また何もしなくてもPS4コン、Xboxコンに対応できます。

InputSystem OnlyにしたかったのですがDoozyUIが対応してなかったので諦めてBoth運用にしました。

DoozyUI

リッチなアニメーション演出のために導入しました。効果は抜群ですが、ステートとの兼ね合いでUIが消えてないのに処理が進む…といったバグに悩まされました。

アニメーションだけのためにこれだけでかいフレームワーク導入はどうなんだろうとも思いました。

HDRP

情報が少なくて苦労しました。おそらくReflectionProbe対応で戸惑うと思います。スクラッチでシーンを構築するとポストプロセスではまります。結局サンプルシーンの設定を改造して対応しました。

キャラクターのライティングにも苦労しました。今回boothのVRMモデルを使ったのですが、unlitなライティング前提の作りだったのでHDRPにもってくると変な陰が出たりしてあまり可愛くできませんでした。HDRP Unityちゃんのライティングはかなりクセがあり参考になりませんでした。MToonを使うか、directional lightのShadow Colorを調整するのがよかったかも

また動的GIに対応していないため、朝⇔夜の切り替えができませんでした。妥協してBaked Indirect で環境光だけlight mapに焼きこみ、directional light ON/OFFで朝夜の表現としました…

Legacy pipelineに比べクラッシュ率が高い…

前作で動いたのに今作はクラッシュします…という報告が何件もきました。Intel HD Graphicsの人ばかりです。shader model5以上、compute shader動作は満たしているはずなのに謎です。

ドライバーを最新にすればよいのでしょうか?

Addressable

全リソースをAddressableで管理しました。他サークルのUnity作品に比べ起動が速いです。

僕はシーンの最初に必要なリソースを全部読み、シーンを抜ける前に破棄するというシンプル実装にしました。非常にうまくいきました。着せ替え衣装だけは裏読みを続け、着せ替えメニューを開くタイミングで待つようにしました。しかし衣装が多くなると待ち時間が長くなる可能性もあるので次回作以降は、待たずに操作可能にします。

SubAssetまわりは仕様がかわったり、挙動が安定しないので使用を控えました。

git

今回は体験版とそれ以外でブランチを分けました。失敗でした。

体験版に含まれないリソースを削除してtrial branchにプッシュします。develop branchでそのファイルに変更が入るたびにtrial branchでコンフリクトしました。

ブランチはdevelopだけにして、Addressable Buildの際に使わないリソースをビルドしない設計にすべきでした。

Jenkins

古典的web UIのstandard pipelineで組みました。ビルドフローが複雑化してきたためかなりつらいです。バックアップはthin backupというプラグイン使いましたが原始的すぎます。

モダンなpipeline baseのフローにすればよかったです。

トラブル対応

テクスチャの多いシーンを読み込むとフリーズする

Unity IssueTracker - Memory leak occurs when loading a Scene with Addressables.LoadSceneAsync which has more than 40 Texture references
How to reproduce: 1. Open the attached "1245368 repro" project 2. Open "Test" Scene from Assets > Scenes folder 3. Open Addressab...

致命的でした。全ての最新unityで発生するregressionバグです。Addressable関係なく、ハイエンドの開発機でも発生し、AUPの値を調整することでかろうじてリリースできました。しかしその後も一部の環境でフリーズする報告が続きました。2020/9/1時点では2020.2Fix review中ですが、2019.4や2018.4にはまだ修正版きてません。とてもつらいです。

InputSystem virtual padが効かない?

環境によって効いたり、効かなかったりするようです。UGUIとバッティングしているような印象を受けました。使い方の問題かもしれません。今回はvirtual padコンポーネントは使うのやめました。

まとめ

Unity2019は致命的なバグを抱えているが、まもなく直る予定。それ以降は2019でゲーム開発販売しても大丈夫そう。

HDRPはlegacy pipelineにはない優れたシェーダーが標準である一方、動的GIに対応してなかったりdirectional light複数おいても機能しなかったり、不便な点も目立つ。フォトリアル視点ではまだue4に及ばない印象を受けた。今後機能が増えたりウェブ上に情報が増えることを願う。