見出し画像

Lens Studio開発で注意すべきポイント

こんにちは、MIZUTANIKIRIN (@mizutanikirin)です!XR開発を手がけるデザイニウムでエンジニアをしています。

普段は主にUnityでアプリ開発を行っていますが、今回は初めてSnap社のLens Studioでの開発に挑戦して、Lens(アプリ)を作成・公開まで行いました。この記事はUnityエンジニアの視点からみたLens Studioの使用感と、初心者が開発時に注意すべきポイントを中心にまとめました。

Camera Kit Web開発で注意すべきポイント」も別記事にまとめていますので、よかったら合わせてそちらもご覧いただけると幸いです。

[開発環境]
Windows 10 / Lens Studio v4.55.1


1. Lens Studioとは?

そもそもLens Studioとは何なのかを簡単に説明します。Lens StudioはSnapchat用/WebAR用(Camera Kit)のARフィルターやAR体験を作成するための開発ツールです。初心者から上級者まで使える、デザイン機能と開発機能を提供しています。ユーザーは3Dオブジェクトやアニメーションを組み合わせて、インタラクティブなAR体験を作成できます。

テンプレートが豊富で、開発の初期段階から取り組みやすく、初心者にも優しい設計になっています。個人的には、顔認識機能が非常にスムーズで使いやすいのはLens Studioでの開発の大きな利点だと感じています。

Lens Studio

2. Unityユーザ向け「KirinUtil for Lens Studio」を公開!

Unity用に「KirinUtil」というユーティリティAssetを公開していますが、この度Lens Studio向けに「KirinUtil for Lens Studio」を公開しました。

KirinUtil for Lens Studio」は、Unityで一般的に使用される便利な関数などを集めたLens Studio用のAssetです。例として、オブジェクトをカメラの方向に向けるときなどに使う「LookAt」、2点間の距離を計算する「Vec3Distance」、指定された範囲内でのランダムな整数値を返す「RandomRangeInt」などがあります。
UnityユーザーがLens Studioを使う際には便利だと思うので、ぜひお試しください。

KirinUtil for Lens Studio

3. 開発時に注意すべきポイントまとめ

開発時に注意すべきポイントのまとめです。Lens Studioでの開発は慣れていない部分もあり、試行錯誤の連続でした。下の注意点でも挙げましたが、思ってもいないところで時間を取られて苦戦しました。

3.1.開発前に知っておくべきポイント

 Lensは短時間で楽しめるシンプルなAR体験を目指す
UnityでのAR体験とは異なり、Lensは短時間で楽しめるシンプルな構造にすべきです。その理由は、Lens容量が8MB以内に制限されていることと、そもそも複雑な機能を実装できないためです。

Lens Studio開発はWindowsの方が良さそう
Mac版Lens StudioだとDelキーを押してもObject等のファイルが消えないという現象が起こりました。社内の他の人に聞くと、Mac版だと1日に何度も起動しなくなるそうで、Windows版より頻度が高いようです。
WindowsでもiOS用のLens開発はMac版と変わらないというのもあり、バグの少ないWindowsで開発する方が良いのかもしれません。

Snapサポートの返信は1〜2日かかった
他の開発ツールのサポートにあまり問い合わせたことがないので比較できないのですが、Snapの場合は返信に1~2日かかりました。
それとフォーラムは基本的に機能していないように思えました。というのも、フォーラムに書いて1週間待っても返事が来なかったからです。

なぜか大量のファイルが更新されることがある
Lens Studioで1ファイルしか変更していないはずなのに大量のファイルが更新されることがあります。どういうときに発生するかはわからないのですが、Gitでどのファイルを書き換えしたかがわかりにくくなってしまうので注意が必要です。

Lens StudioでUndoするとコードもUndoされる
Lens StudioでCtr-ZするとVisual Studio Codeで書いたコードもUndoしてしまいます。気づかないでやっているとわけがわからなくなるので注意が必要です。Uniyのように、オーサリングツールとコードエディタは分けてほしいところではありますが仕様のようです。

プロジェクトを2つ開くことができず時間のロスが生じる
Unityのようにプロジェクトを2つ開くことができないため、思ってもいないところで時間がかかり、Lensが作成しにくいと思うことがありました。
例えば、他のプロジェクトからエクスポートしないといけないときには、今のプロジェクトファイルを閉じないといけません。その時間のロスが気になりました。具体的には下記1〜3で、合計16分ほどかかってしまいます。

  1. 作成中プロジェクトの保存+閉じる時間:5分ほど

  2. 他プロジェクトを開く時間:1分ほど

  3. 再度作成中のプロジェクトを開く時間:10分ほど

Loading project

3.2.開発中に気をつけるポイント

プロジェクトファイルが大きくなると起動や保存に時間がかかる
Unityで開発しているときのようにプロジェクトファイルにモデルデータやAssetをバンバン入れていくと、プロジェクトファイルの起動や保存に時間がかかるようになっていきます。
ファイルを開いたり、保存するのに最大時に30分くらいかかることがあり大変でした。それが原因かわかりませんが、Lens Studioが不安定になりプロジェクトが起動したりしなかったりすることにもなったので注意が必要です。
肥大化したプロジェクトファイルを整理するためにResourcesタブでPrefabなどファイルを消しても、次にプロジェクトを開いたら復活していたりと、わりとめちゃくちゃな状態になってしまいましたが、基本的には下記2の方法で解決をしました。

  1. Lens Studioの再インストール
    Lens Studioの不安定さはなくなった気がしますが、再インストールを行ったから改善したとは言い切れない部分もあります。それでも開くのに30分かかっていたので2の方法を試しました。

  2. 以下の手順で不必要なファイルを減らしました。(それでも作成したプロジェクトを開くのに10分かかりますが…)

    1. 対象のプロジェクトを開く

    2. Objectsタブ内の全て選択

    3. それらをエクスポート

    4. 新規プロジェクト作成

    5. 3のlsoファイルをインポート

動作確認中の自動バックアップで動作がカクつく
Lens Studioの自動バックアップ機能はありがたいのですが、Lensの動作確認中に自動保存が実行されると一瞬カクつきます。場合によってはオフにした方が良いかもしれません。そのカクつきが作成中Lensの不具合のように思えてしまうときがあるためです。

PCでImage Makerを使用すると頻繁にブレやズレが生じる
PCに接続されたカメラを使用していることが影響しているかもしれませんが、PCでImage Makerを動作確認する際、認識後に表示されるモデルが頻繁にブレたりズレたりすることがありました。
しかしスマホで確認した場合、このようなブレはほぼ発生しませんでした。このため、スマホでの動作確認は必ず行うべきです。

「アクセスが拒否されました」エラーでプロジェクトファイルが開かないときがある
プロジェクトを開く前にVisual Studio CodeでプロジェクトAを開いていたり、ExploreでプロジェクトA内の場所を開いている状態でLens StudioでプロジェクトAを開こうとすると下の画像のようなエラーに遭遇することがあります。
そういうときはVisual Studio Codeなどプロジェクトフォルダにアクセスしていそうなソフトを閉じてください。
ちなみにこのとき作成されるBackupフォルダは問題なければ消しても問題なさそうです。

「アクセスが拒否されました」エラー

Lens実行時のObjects(UnityでいうHierarchy)の状態が表示されずデバッグがやりにくい
Unityでは、EditorでPlayボタンを押すと、Hierarchyの内容がゲーム画面の状況に応じて変化します。しかし、Lens Studioでは、初期状態の表示から変化しないため、デバッグ作業がやりにくくなります。
Asset LibraryにHierarchyの内容を出力する「Print Live Hierarchy」というAssetがありますが、SceneObjectの状態が詳しく知りたいときには、これだけだと足りない印象はあります。
これらの点からも、Lens Studioは複雑なLens制作よりも、シンプルなLens制作を目的としていることが伺えます。

Print Live Hierarchy

処理中にカーソルがLoadingにならないことがある
特にUndoする時、処理に時間がかかり現在の状態が非常にわかりにくいことがあります。カーソルがローディング状態にならず、元に戻されていないかのような振る舞いをすることがありました。
変わっていないと思って何度もCtr+Zしているとどこまで戻ったのかわからなくなるので注意が必要です。

Lens Studioの使用中、PCのファンが回りっぱなしで不安になる
Unityと違い常にLens再生中となるため、CPU・GPUに負荷をかけている状態になっています。そのため長い時間、コーディングなどでLens Studioを使わない場合は、PreviewタブのPauseボタンで一時停止状態にした方が良いかもしれません。

Pause Preview

 プロジェクトファイルを開くたびに、「Resource compression」ウィンドウが出る
今回作成したプロジェクトファイルでは「Resource compression」ウィンドウが起動時に毎回表示されました。どうやら圧縮してないリソースがあるらしいのですが、これもプロジェクトによるのかはわかりません。特別時間がかかるものではないですが、出ないようになって欲しいところではあります。

Resource compression

 

何も変更点がないのにアラートウインドウが表示される
プロジェクトファイルを開いただけなのに閉じようとすると「Do you want to save this project?」ウィンドウが表示される。閉じるときに少し不安になるので改善してもらいたいところです。

「Do you want to save this project?」ウィンドウ

Objectをエクスポートした際、関係ないファイルがパッケージされることがあった
Objectに関係あるファイルは一緒にパッケージされることがImporting and Updating Resources > Object Export and Import に記載されています。しかし、なぜか関係ないファイルもパッケージされることがありました。(これも発生条件がわかりません。たまにこの現象が起こります。)
さらに、エクスポート時に/Sample/Texturesフォルダに保存していた画像が、インポート時に/Main/Texturesフォルダに移動してしまうことがありました。必要なファイルと不必要なファイルが混在して、カオス状態になることがあるため、エクスポートやインポートの際には注意が必要です。

Project Infoでアイコンを設定しても保存されない
Project Infoでアイコン設定しても、次にプロジェクトファイルを開いたらアイコンが消えています。アイコン画像をプロジェクトフォルダ内や外に置ても発生しました。毎回指定しないといけないようです。

Project Inf

Image Markerで表示されたモデルをタップすると一瞬モデルの表示が消える
テンプレートでもこれが起こるのでImage Markerのバグっぽいです。これを回避するために以下の方法で乗り切りました。

  1. Image Markerで表示されたモデルを仮モデル(A)にする

  2. (A)が表示されたらメインとなる本当に表示させたいモデル(B)を表示させるようにする

  3. (B)には毎フレーム、(A)と同じTransformになるようにしておく

(A)が一瞬消えても(B)は消えないようにする。(例えば10フレームは消えないとか)

Asset LibraryにあるUI Buttonの挙動が変な気がする
実機だとボタン中央以外タップできない時がありました。処理が重いときにそうなるような感じはありましたが、原因は分からないままです。

3.3. Review(自動審査)の注意点

Reviewが終わらないと更新できない
Lens StudioでPublish Lens」 → 「WebでSubmitボタン押す」の手順でReviewが始まるのですが、Submitボタン押した後に「あ、間違えた」と思ってもReviewが終わるまで次のLensの更新ができません。ですので、Submitボタンを押すときは細心の注意が必要です。
ちなみにMy Lens(Webページ) > Lens一覧からLensを選択 > Edit Categoriesで編集してもStatusが「In Review」状態になるため、Lensの更新ができなくなります。

Lens容量は基本的に8MB以内
上でも少し触れましたが、Lens容量は基本的に8MB以内にしないといけません。今回のLens開発では容量を超えることがありましたが、テクスチャの圧縮を行って解決をしました。それでも無理そうなときはRemote Assetの機能を使ってLensの容量を減らすと良さそうです。

Compression Settings

Lensのメモリ使用が80MB以上になったときにRejectされた
iPhone13 Proで動作確認したときフレームレートの問題はなかったのですが、Rejectされた事がありました。Reject理由が「メモリー使い過ぎ」のようなメッセージだったと記憶しています。
1MBの3Dモデルをプロジェクトに追加したところ使用メモリが約10MB増加したが、Textureを圧縮することでメモリ使用量を抑えることができました。
ただしっくりこないのが、下記にあるように275MB以上でクラッシュするかもと書いてあるのでそれぐらいまではOKとなのでは?とも思ってしまうところはあります。

CAUTION
If the memory usage goes over 275MB, it is likely to crash lower end devices.

https://docs.snap.com/lens-studio/references/guides/lens-features/optimization/lens-qa-troubleshooting#memory-usage

審査が大幅に遅れた上に結果が全てInvalidになった
複数Lensを続けてpublish Lensしたのですが、通常なら1〜2時間で終わる審査が24時間経っても終わらず、最終的に27時間ぐらいで結果が出て全てのLensがInvalidとなったことがありました。Invalidの理由は「Lensが何回も落ちるから改善して」という内容でした。
しかし、それぞれのLensを何度実機で確認しても落ちることはなく、自動審査のバグなのでは?と思うようになりました。試しにその後、何も変えずにpublish Lensすると1時間かからずStatusがPublished状態になり、やはりサーバ側のバグだと確信しました。それまで、ほかのレンズでは何も問題なく審査が通っていました。
推測でしかないのですが、Lens Studioで申請直前に「publish Lens」ボタンを押した後にキャンセルボタンを続けざまに何度か押してしまったのが原因かなと思っています。
余談ですが、この現象が起こったのがリリース直前の日だったのでかなり焦りました。

カテゴリの変更審査に1日以上かかることがある
My Lens(Webページ)からLensのカテゴリを変えたとき1日かかっても審査が終わる気配がなく、明らかにおかしいと思い問い合わせをしたことがあります。問い合わせをしたからなのか、2日ぐらいで審査が終わりました。カテゴリを変えたときもLensの更新ができなくなってしまうので、注意が必要です。

同一のLensでも審査が通るときと通らないときがある
これもたまにあるのですが、Lensが全く同じ内容で審査に通しても一方はRejectされてもう一方は問題なしとなるときがあります。自動審査だからなのでしょうか??原因はわからないですがそういうこともありました。

4.開発のメリットとまとめ

これから開発に取り組む人に向けて、注意点や気をつけるべき点をまとめました。これからLens Studioがバージョンアップすれば、もっと使いやすくなっていくと思っています。最後に、実際に使用してみて感じたメリットをまとめました。

  • 初心者から上級者まで使えるデザイン機能と開発機能でインタラクティブなAR体験を作成できる

  • テンプレートが豊富で初心者にも優しい設計

  • 顔認識機能が非常にスムーズで使いやすい

  • 何も設定しなくてもLensの利用者数がWeb(My Lenses)で確認できる。

  • Lens StudioはUnityに近い見た目/操作感なのでUnityを使ったことがある人なら初めてでもわりとすんなり使っていける。

  • Previewウィンドウには部屋/顔/人など豊富なシミュレーションができるのでUnityのようにビルドして端末で確認しなくても良い。

  • 端末で確認する際もボタン一つで簡単にLensの動作確認ができるので良い。

この記事を参考にLensを作成してもらえると嬉しいです。


この記事が気に入ったらサポートをしてみませんか?