LoginSignup
10
3

More than 1 year has passed since last update.

NrealLightで半透明な物を録画したくて色々ためした

Last updated at Posted at 2021-12-01

これは STYLYアドベントカレンダー の2日目の記事です!

STYLY for Nrealの一人称録画機能を開発した

STYLY for Nrealの一人称録画機能を開発しました。
NrealとはARグラスの一種です。
一人称録画機能とは、NrealLightについているカメラで現実世界を撮影したものを、AR映像と合成し、動画ファイルに出力する機能です。

STYLY for Nrealにご興味のある方は、こちらをご参照ください。

NRSDKの First Person View Video Capture を使った

NRSDKには First Person View Video Capture という機能があります。STYLYでも内部的にはこのSDKを利用しています。

基本的に、このサンプルコード通りに実装すれば、一人称録画機能は作れるのですが、一部のオブジェクトが録画に映らないという現象に遭遇しました。
(グラス越しにはちゃんと見えています)

半透明なオブジェクトが録画に映らない

サンプルアプリを試してみたところ、一部のオブジェクトが録画に反映されていませんでした。

フレームデバッガー等で調査したところ、 Render QueueTransparent だと録画に映らない ことがわかりました。

NRSDKのコードを調査したところ、 NRSDK\Resources\Record\Shaders\AlphaBlend.shader に以下の行を見つけました。

fixed3 col_tex = lerp(col_bg.rgb, col.rgb, col.a)

ここで、実写映像 col_bg.rgb と CG映像 col.rgb をαブレンドしているのですが、 RenderQueueTransparent の場合、 col.a0 になっており、CG映像が消えていることがわかりました。

Render QueueAlphaTest にすると録画に映る

Render QueueAlphaTest にすると、半透明な物でもNrealの録画に映ることがわかりました!

以下の映像は、 Transparent の箱と AlphaTest の箱を並べて、Nrealで撮影したものです。
ご覧の通り、 Transparent の箱は映っていませんが、 AlphaTest の箱は映っています!

(ちなみに、箱の中にある玉は Opaque です。)

念のため、Nreal Communityにも投稿しました。

とりあえず録画に映したければ AlphaTest にするのが手っ取り早いです。
しかし、 Render Queue をいじることによる弊害もあります。

Render Queue をいじると前後関係が不自然になる

Render Queue をいじると、前後関係が不自然になります。

以下の図をご覧ください。

  • 左側の箱はRenderQueueが Transparent (3000)
  • 右側の箱はRenderQueueが AlphaTest (2450)
  • 箱の中にある玉はすべて Opaque (2000)

af83f030-d4f7-016a-afc6-a8f8519bb248.gif

Transparent の箱の奥に AlphaTest の箱がある時は見えますが、 AlphaTest の箱の奥に Transparent の箱がある時は見えません。玉は常に見えます。

これは描画順が Opaque (2000) < AlphaTest(2450) < Transparent(3000) だからです。

ご覧の通り、前後関係が不自然に見えるため、 AlphaTest の多用は避けたいところです。

ただ、録画に半透明なオブジェクトを映す方法は、今のところこれしか見つけていないので、どうしても映したいときは、この方法を使わざるをえないのが現状です。

さいごに

なんともモヤっとしますが、調査は以上です。
録画時にしか再現しない現象だったため、調査・対策にかなり時間がかかってしまいました。

今後、同じ症状に遭遇した人の助けになれば幸いです。

本記事作成にあたり、以下の情報を参考にさせていただきました。ありがとうございました。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3