2025/1/8 に Mac App Store より PHORLIX Lite というアプリをリリースしたのだが、それに関する覚書。

なぜ PHORLIX Lite なのか?
以前に HorliX という dicom viewer を作成・公開していてそれなりに好評価を得ていた。
しかし、
・HorliX は OpenGL ベースで Metal な時代には合わない
・HorliX は Horos フォークで、Horos の設計意図が汲み取れない&ソース読むのがだるい
といった事情があり、作り直す必要があった。
開発時のポイント
開発時のポイント、というか苦労した点は主に二つあった。
一つは開発環境に対する「慣れ」の問題。
諸々の事情で Objective-C を使う必要があり、メニュー一つ出すのでも苦労した。要するに開発環境自体に慣れてない。
もう一つは、ボリュームレンダリングの実装の問題。
かっこよく3次元のボリュームレンダリングを実装したかったが、当初 Metal でどう書いていいか皆目見当がつかなかった。こちらはアルゴリズムに関するかなり本質的な問題。
前者は AI の急成長もあり、取り組んでいる最中にかなり解消されたのだが、後者はその後も苦労した。
テクスチャレンダリング
ボリュームレンダリングに関しては、あれこれ調べたが、Metal ではテクスチャレンダリングという手法で実現するのが一番簡単そうだという結論になった。
ただ、実装例がほぼ「ない」。
アルゴリズムに関しては通り一辺倒の「光線ベクトルをちょっと進めて色加算」みたいなことはネット上でよく書かれているのだが、これだけの情報で実装できたらバケモノだろう(笑)。
図は、ネット上で公開されているタルトゥ大学の CG コースの教材から取ってきた。かなり良い解説なのだが、それはある程度理解が進んだ今だから言えることであって、初学者にいきなりこれを理解しろと言っても無理がある。第一、添えられている簡易なコードの説明は OpenGL で Metal に直接応用できるものではない。
ただ、「描画させたい点(注目点)から視線ベクトル方向に光線をちょっと進めて色加算、またちょっと進めて色加算...。最終的に描画すべきオブジェクトのボクセルがなくなったら、色加算した値を描画点に書き込む」くらいのイメージは湧くようになった。
アルファブレンディング
なお、色加算は
outColor = α * color + (1-α) * outColor
を使う場合が多いようだ。
ここで、color は注目しているボクセルの色表現、outColor は繰り返し演算されてきた色表現。
α は「どの程度現在の色を残すか」というパラメータになっている。
α = 1 とすれば、奥行きの色情報を全く反映させず color だけを残す(透過表現にはならないが)、α = 0 とすれば、color は残さないので素通しになる、というのがその理屈です。
パラメータ α が重要な役割を演じるので、アルファブレンディングと呼ばれている。
解決
Metal のサンプルコードを眺めていたら、「ああ、そういうことか」と気がつくことがあり、そのままの勢いで実装したら、一応はボリュームレンダしてくれた。
どんなものでしょう?
CLUT Editor
最新 v1.0.7 では、α の値をユーザーが指定できるようにした。
スクショ下部のパネルがそのための UI で CLUT Editor と呼んでいる。
ボクセル値をヒストグラムにして表示。このヒストグラムを参考にして、あるボクセル値での RGB それぞれの α 値を UI 上のグラフを操作することで指定しましょう、という方式です。
公開当初から現在(2026/6)まで、無料ソフトでここまでやれるソフトはほぼなく、この点は達成感がありました。
ダウンロードサイト
ちょっとした修正や実験的な機能の追加でいちいち AppleReview を通すのは大変なので、最新版は直接ダウンロードもできます。
https://p-horlix.net/blog/?page_id=1015
からどうぞ。
まとめ
・既存ソフトの代替で Metal ベースの医療画像系ソフトを作る必要があった。
・開発自体は概ね達成し、Apple App Store から配信されている。
・特に、3次元描画(ボリュームレンダリング)に関しては、それなりに満足のいく結果が得られた。


