×

Arshes v1.15.0 リリースノート

はじめに

ベータテストへの参加はこちらから

Join the Arshes betaAvailable on iOStestflight.apple.com

サマリ

機能追加

  • カメラ画面でエフェクトを切り替えられるようにした
  • 3分割グリッド、水平器、ヒストグラムを表示できるようにした
  • blueNoiseTexを追加で256x256 8bit 1chのブルーノイズテクスチャを使えるようにした

破壊的変更

  • Slangのモジュール機能を粉砕
  • 組み込みのテクスチャ系の使用に完全な名前一致を要求するようにした

詳細

カメラ画面でエフェクトを切り替えられるようになった

1枚目の⚡️ボタンをタップすると2枚目のUIがでてきてエフェクトを変更できる機能。

前のバージョンのリリースノートでも書いたが、これは結構な大工事であった。 今「カメラ画面」と呼んでいる画面は元々は「シェーダー画面」であり、/shaders/{shader_id} というパスに対応する画面であった。画面を開く時にはshader_idが確定しているので、それを使ってAPIサーバーからシェーダーのコードを取得し、UIを作るという構成である。

今回の対応でカメラ画面(旧シェーダー画面)でエフェクト(旧シェーダー)を切り替えられるというのは、この辺の前提を取っ払って、動的にエフェクトのIdを変更してサーバーからデータを取得しましょう、ということになる。 いわゆるホットリロード的なもので、便利だが維持が大変という側面がある。

Arshesには既にエディター機能があるので、シェーダーのコードが動的に変わること自体は問題ではないが、ライフサイクルが異なるリソースが一つ増えることになるので、結構大掛かりなリファクタをした。大変!という感じだが、AIと壁打ちしてリファクタ計画を立てたらPRが5つ作られて完了した。便利な時代である。

グリッド、水平器、ヒストグラム

カメラアプリとして最低限欲しい機能群が抜けていたので実装した。 水平器のUIはSIGMA fpを参考にした。 ヒストグラムはcompute shaderでFPS低めに更新してアプリのパフォーマンスに影響がでないようにしているが、負荷があがるのは避けられないので、スペックが不安な人はオフにして欲しい。 ヒストグラムでカメラの映像が隠れてしまうので、申し訳程度にドラッグで移動できるようにした。 カメラっぽい機能が増えるとそれっぽくなって嬉しい。

ブルーノイズテクスチャ

久しぶりのShader Spec更新で嬉しい! Discordで0b5vrさんからブルーノイズのテクスチャが欲しいとフィードバックをもらったので実装した。こういうフィードバックがもらえるのは大変ありがたい!ブルーノイズはこれまで使ったことがなかったのだけど、ディザリングに使われることが多いらしく、実際やってみると確かに綺麗にディザリングできて面白い。なんで綺麗にディザリングできるかはよくわかってないので、どこかで勉強したい。 ぜひ使ってみてほしい。

破壊的変更

モジュール機能を粉砕した

rgb2hsvみたいな関数を毎回書くの面倒くさいのでモジュールにして使えるようにしたんだけど、DB周りが複雑になる割にユーザー定義のモジュールを作るUIがないままになっていて、負債という感じがあったので思い切って粉砕した。一部エフェクトが壊れたが、仕方ない。機能は作るよりも消す方が難しいので、ベータのうちにやれることはやった方がよい。

テクスチャ系uniformの変数名を完全一致に限定した

カメラ映像を使うuniformはcameraを名前に含むTexture2D<float3>ならなんでもOKということにしていたが、cameraTex以外では使えないようにした。depthTexturebackbufferなども同様に完全一致を要求する形にした。 スマホでシェーダーを書いていた時に楽をするために入れたのだが、後で負債になるのが目に見えているので消した。壊れたエフェクトは自分の物だけだったので問題ない。こういう横着はするものではない。

次やること

  • Display P3対応(sRGBとどちらを使うか選べるようにする、HEIF対応もするかも?)
  • エフェクトとフィルターの実行順を逆にする(as-is:フィルター→エフェクト、to-be:エフェクト→フィルターに)
  • レンダリングパイプライン、色空間周りの実装・概念の整理、ユーザー向けの説明をどっかに書く
  • カメラに対する露出補正、レンズ変更などのUIの整備

エフェクトとフィルターの順番を入れ替えるのがかなり大きな変更になる。Arshesは撮影と現像を一緒にやるアプリとも言えるが、フィルターが現像パートだとすると最後にもっていく方が自然なのでは?という話になり、全くもってその通りなので、パイプラインを全体的に見直して整理することにした。

もともとはエフェクトだけで全てをやっていて、カメラの輝度やコントラストをシェーダーで毎回やるのが面倒なので、v1.5.0で組み込みのフィルター機能に切り出した経緯がある。

(懐かしいUI)

それで満足していたが、冷静に考えるとカメラの露出補正とLightroomの露出補正は別であり、フィルターは後者なので、前者は別に機能として必要ですよね、ということである。UIを新しくする必要があるんどえ、Figmaにカメラアプリのスクショを並べてUIを考えているが、なかなか難しくて苦戦しており、少し時間がかかりそうな気配。

Continues

Continued by