PHORLIX Lite 自体はシンプルなアプリですが、新しめの技術を採用したのでそれらに関する覚書。
Texture Rendering
PHORLIX Lite では「テクスチャレンダリングを採用した」と言ってますが、そもそもこれは何者でしょうか?
OpenGL 非推奨化
一般的に、ボリュームレンダリングの実現方法としてよく紹介されているのは Ray Cast Mapping ですが、これを実装した人はそう多くはないはずです。
例えば、Horos/HorliX/OsiriX でも、この方式でボリュームレンダリングしていますが、実際は VTK というライブラリに任せていて、やっていることは設定調整のみです。一から実装しているわけではありません。
よく、カメラから対象への光線を追跡して・・とそのアルゴリズムが紹介されていますが、これだけの情報から独自実装に持っていくのは難しいでしょう。結局、VTK にまかせっきりだったのですね。
ところが、Apple は OpenGL を deprecated にしてしまった。OpenGL に依存している VTK が Metal に対応していない以上、新規に実装する必要がある。さあ、どうしたらいいだろう?となったのが 2018 年ごろです。
解決策はいろいろあったと思います。
すでに Metal に対応している Qt で Ray Cast アルゴリズムで実装する、Vulkan を使って Mac ネイティブにする、・・・、しかし、そもそも具体的な実装方法がよくわからない Ray Cast を採用するくらいなら、Metal でなんとかならないかと考えるのも一法でしょう。
Metal
ところで Metal ですが、発表当初は「OpenGL をやめる理由がよくわからない。共有メモリもグラフィックメモリをケチりたいアップルの都合のすぎない」と不評だったように思います。
しかし、使っているうちに Metal の軽快さにみんな気がつき始めました。
・メモリを共有するなら 頂点データなどの CPU-GPU 転送のオーバヘッドがなくなる
・Metal を使う以上、Low レベルで画像処理が行う必要があるが、これが最適化に寄与している
といった Metal のアドバンテージを認識していったわけです。
ここら辺で、Metal ネイティブで書くことしました。問題はアルゴリズムですが、Metal は 3D でテクスチャを割とお手軽に使えます。
これを利用してボリュームレンダリングできないか検討していたところ、テクスチャレンダリングという手法があることを知りました。
Texture Rendering の基本
レイキャストでもテクスチャレンダリングでもなんでもいいのですが、ボリューミックなデータを可視化する際、対象表面のある一点を描画するには、その奥の色情報が必要です。
(続く)