LoginSignup
3
1

PICO4で動作しないUnityの機能とその対応策の紹介

Last updated at Posted at 2023-12-05

これは STYLY Advent Calendar 2023 の6日目の記事です。

PICO4で動作しないUnityの機能

2023年は、PICO4を利用したMRコンテンツ制作・イベント運営をたくさんやりました!

大量のPICO4でイベントを開催した様子

コンテンツ制作にあたり、他のデバイスでは動くのに、PICO4(のパススルーモード)では動かない現象にいくつか悩まされたので、今後のために記事にまとめてみました!

PICO4版STYLYで動作確認をしているので、もしかしたらSTYLY特有の現象かもしれませんが、ご了承ください!(その場合はPICOさん。ごめんなさい。)

加算ブレンド

残念ながら 加算ブレンド 方式のシェーダーは、PICO4では動きません!
(公式ドキュメントにそういった記述は見当たりませんが、試してみて動作しませんでした。)

加算ブレンドとは、2つの色を合成するときに、背景色 B と前景色 F をそのまま足し算する手法です。

別の手法に アルファブレンド があります。
こちらは前景色 F に不透明度の α をかける手法です。
背景色 B には (1-α) をかけます。

2023年現在、アルファブレンドの方が主流です。

加算ブレンド アルファブレンド
数式 C = F + B C = F・α + B・(1-α)
shaderファイルの記述 Blend One One Blend SrcAlpha OneMinusSrcAlpha
αチャンネル 不要 必要
PICO4 非対応 対応

対応策

加算ブレンドのシェーダーがあれば、アルファブレンド方式に切り替えてください。

独自シェーダーで直接編集できる場合は、フラグメントシェーダーの戻り値にαチャンネルを設定してください。

以下のように、RGBからグレースケールを計算して、αチャンネルに代入すればOKです。

fixed4 frag(v2f i) : SV_Target
{
    // RGB値が float3 color に格納されているものとします。

    // テレビのグレースケール変換の公式を使用
    float grayScale = dot(color, float3(0.299, 0.587, 0.114));

    // αチャンネルにグレースケールを代入
    float4 outputColor = float4(float3(color), grayScale);
    return outputColor;
}

Custom Render Texture

残念ながら Custom Render Texture がPICO4では動きません!
(公式ドキュメントにそういった記述は見当たりませんが、試してみて動作しませんでした。)

Custom Render Textureとは、テクスチャの絵を動的にシェーダーで描画できる仕組みのことです。
イメージとしてはこんな感じ!

詳しくは以下のページがわかりやすいです!

上記のページに記載されているようなシンプルなシェーダーでも動作しないことを確認しました。

Color FormatR8_UNORM にしたり、いろいろ試しましたがダメでした。

image.png

対応策

もともと2つあったShaderファイルを1つのShaderファイルに統合しましょう!

以下のようなイメージです。

処理Aと処理Bをそれぞれ関数化して、1つのShaderファイルに収めます。

変数名が衝突した場合は、リネームして回避してください。

これにより、CRTを使わなくて済み、PICO4でも描画できるようになりました!

最後に

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

宣伝

Psychic VR LabではUnityエンジニア・サーバーサイドエンジニアを募集しています!!ご応募お待ちしています!!

3
1
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
3
1